Move files from gst-plugins-ugly into the "subprojects/gst-plugins-ugly/" subdir
authorThibault Saunier <tsaunier@igalia.com>
Fri, 24 Sep 2021 19:14:45 +0000 (16:14 -0300)
committerThibault Saunier <tsaunier@igalia.com>
Fri, 24 Sep 2021 19:14:45 +0000 (16:14 -0300)
354 files changed:
.gitignore [deleted file]
.gitlab-ci.yml [deleted file]
AUTHORS [deleted file]
COPYING [deleted file]
ChangeLog [deleted file]
MAINTAINERS [deleted file]
NEWS [deleted file]
README [deleted file]
README.static-linking [deleted file]
RELEASE [deleted file]
REQUIREMENTS [deleted file]
docs/all_index.md [deleted file]
docs/gst_api_version.in [deleted file]
docs/gst_plugins_cache.json [deleted file]
docs/index.md [deleted file]
docs/meson.build [deleted file]
docs/random/ChangeLog-0.8 [deleted file]
docs/random/LICENSE [deleted file]
docs/random/PORTED_09 [deleted file]
docs/sitemap.txt [deleted file]
ext/a52dec/gsta52dec.c [deleted file]
ext/a52dec/gsta52dec.h [deleted file]
ext/a52dec/meson.build [deleted file]
ext/amrnb/GstAmrnbEnc.prs [deleted file]
ext/amrnb/README [deleted file]
ext/amrnb/amrnb.c [deleted file]
ext/amrnb/amrnbdec.c [deleted file]
ext/amrnb/amrnbdec.h [deleted file]
ext/amrnb/amrnbenc.c [deleted file]
ext/amrnb/amrnbenc.h [deleted file]
ext/amrnb/meson.build [deleted file]
ext/amrwbdec/README [deleted file]
ext/amrwbdec/amrwb.c [deleted file]
ext/amrwbdec/amrwbdec.c [deleted file]
ext/amrwbdec/amrwbdec.h [deleted file]
ext/amrwbdec/meson.build [deleted file]
ext/cdio/gstcdio.c [deleted file]
ext/cdio/gstcdio.h [deleted file]
ext/cdio/gstcdiocddasrc.c [deleted file]
ext/cdio/gstcdiocddasrc.h [deleted file]
ext/cdio/meson.build [deleted file]
ext/dvdread/README [deleted file]
ext/dvdread/demo-play [deleted file]
ext/dvdread/dvdreadsrc.c [deleted file]
ext/dvdread/dvdreadsrc.h [deleted file]
ext/dvdread/meson.build [deleted file]
ext/meson.build [deleted file]
ext/mpeg2dec/gstmpeg2dec.c [deleted file]
ext/mpeg2dec/gstmpeg2dec.h [deleted file]
ext/mpeg2dec/meson.build [deleted file]
ext/sidplay/gstsiddec.cc [deleted file]
ext/sidplay/gstsiddec.h [deleted file]
ext/sidplay/meson.build [deleted file]
ext/x264/GstX264Enc.prs [deleted file]
ext/x264/gstencoderbitrateprofilemanager.c [deleted file]
ext/x264/gstencoderbitrateprofilemanager.h [deleted file]
ext/x264/gstx264enc.c [deleted file]
ext/x264/gstx264enc.h [deleted file]
ext/x264/meson.build [deleted file]
gst-libs/gst/gettext.h [deleted file]
gst-libs/gst/glib-compat-private.h [deleted file]
gst-libs/gst/gst-i18n-plugin.h [deleted file]
gst-plugins-ugly.doap [deleted file]
gst/asfdemux/README [deleted file]
gst/asfdemux/asfheaders.c [deleted file]
gst/asfdemux/asfheaders.h [deleted file]
gst/asfdemux/asfpacket.c [deleted file]
gst/asfdemux/asfpacket.h [deleted file]
gst/asfdemux/gstasf.c [deleted file]
gst/asfdemux/gstasfdemux.c [deleted file]
gst/asfdemux/gstasfdemux.h [deleted file]
gst/asfdemux/gstasfelement.c [deleted file]
gst/asfdemux/gstasfelements.h [deleted file]
gst/asfdemux/gstrtpasfdepay.c [deleted file]
gst/asfdemux/gstrtpasfdepay.h [deleted file]
gst/asfdemux/gstrtspwms.c [deleted file]
gst/asfdemux/gstrtspwms.h [deleted file]
gst/asfdemux/meson.build [deleted file]
gst/dvdlpcmdec/gstdvdlpcmdec.c [deleted file]
gst/dvdlpcmdec/gstdvdlpcmdec.h [deleted file]
gst/dvdlpcmdec/meson.build [deleted file]
gst/dvdsub/gstdvdsubdec.c [deleted file]
gst/dvdsub/gstdvdsubdec.h [deleted file]
gst/dvdsub/gstdvdsubparse.c [deleted file]
gst/dvdsub/gstdvdsubparse.h [deleted file]
gst/dvdsub/meson.build [deleted file]
gst/meson.build [deleted file]
gst/realmedia/asmrules.c [deleted file]
gst/realmedia/asmrules.h [deleted file]
gst/realmedia/gstrdtbuffer.c [deleted file]
gst/realmedia/gstrdtbuffer.h [deleted file]
gst/realmedia/meson.build [deleted file]
gst/realmedia/pnmsrc.c [deleted file]
gst/realmedia/pnmsrc.h [deleted file]
gst/realmedia/rademux.c [deleted file]
gst/realmedia/rademux.h [deleted file]
gst/realmedia/rdtdepay.c [deleted file]
gst/realmedia/rdtdepay.h [deleted file]
gst/realmedia/rdtjitterbuffer.c [deleted file]
gst/realmedia/rdtjitterbuffer.h [deleted file]
gst/realmedia/rdtmanager.c [deleted file]
gst/realmedia/rdtmanager.h [deleted file]
gst/realmedia/realhash.c [deleted file]
gst/realmedia/realhash.h [deleted file]
gst/realmedia/realmedia.c [deleted file]
gst/realmedia/rmdemux.c [deleted file]
gst/realmedia/rmdemux.h [deleted file]
gst/realmedia/rmutils.c [deleted file]
gst/realmedia/rmutils.h [deleted file]
gst/realmedia/rtspreal.c [deleted file]
gst/realmedia/rtspreal.h [deleted file]
gst/xingmux/gstxingmux.c [deleted file]
gst/xingmux/gstxingmux.h [deleted file]
gst/xingmux/meson.build [deleted file]
gst/xingmux/plugin.c [deleted file]
hooks/pre-commit.hook [deleted file]
meson.build [deleted file]
meson_options.txt [deleted file]
po/LINGUAS [deleted file]
po/POTFILES [deleted file]
po/af.po [deleted file]
po/ast.po [deleted file]
po/az.po [deleted file]
po/bg.po [deleted file]
po/ca.po [deleted file]
po/cs.po [deleted file]
po/da.po [deleted file]
po/de.po [deleted file]
po/el.po [deleted file]
po/en_GB.po [deleted file]
po/eo.po [deleted file]
po/es.po [deleted file]
po/eu.po [deleted file]
po/fi.po [deleted file]
po/fr.po [deleted file]
po/fur.po [deleted file]
po/gl.po [deleted file]
po/hr.po [deleted file]
po/hu.po [deleted file]
po/id.po [deleted file]
po/it.po [deleted file]
po/ja.po [deleted file]
po/lt.po [deleted file]
po/lv.po [deleted file]
po/meson.build [deleted file]
po/ms.po [deleted file]
po/mt.po [deleted file]
po/nb.po [deleted file]
po/nl.po [deleted file]
po/or.po [deleted file]
po/pl.po [deleted file]
po/pt_BR.po [deleted file]
po/ro.po [deleted file]
po/ru.po [deleted file]
po/sk.po [deleted file]
po/sl.po [deleted file]
po/sq.po [deleted file]
po/sr.po [deleted file]
po/sv.po [deleted file]
po/ta.po [deleted file]
po/tr.po [deleted file]
po/uk.po [deleted file]
po/vi.po [deleted file]
po/zh_CN.po [deleted file]
scripts/dist-translations.py [deleted file]
scripts/extract-release-date-from-doap-file.py [deleted file]
scripts/meson.build [deleted file]
subprojects/gst-plugins-ugly/.gitignore [new file with mode: 0644]
subprojects/gst-plugins-ugly/.gitlab-ci.yml [new file with mode: 0644]
subprojects/gst-plugins-ugly/AUTHORS [new file with mode: 0644]
subprojects/gst-plugins-ugly/COPYING [new file with mode: 0644]
subprojects/gst-plugins-ugly/ChangeLog [new file with mode: 0644]
subprojects/gst-plugins-ugly/MAINTAINERS [new file with mode: 0644]
subprojects/gst-plugins-ugly/NEWS [new file with mode: 0644]
subprojects/gst-plugins-ugly/README [new file with mode: 0644]
subprojects/gst-plugins-ugly/README.static-linking [new file with mode: 0644]
subprojects/gst-plugins-ugly/RELEASE [new file with mode: 0644]
subprojects/gst-plugins-ugly/REQUIREMENTS [new file with mode: 0644]
subprojects/gst-plugins-ugly/docs/all_index.md [new file with mode: 0644]
subprojects/gst-plugins-ugly/docs/gst_api_version.in [new file with mode: 0644]
subprojects/gst-plugins-ugly/docs/gst_plugins_cache.json [new file with mode: 0644]
subprojects/gst-plugins-ugly/docs/index.md [new file with mode: 0644]
subprojects/gst-plugins-ugly/docs/meson.build [new file with mode: 0644]
subprojects/gst-plugins-ugly/docs/random/ChangeLog-0.8 [new file with mode: 0644]
subprojects/gst-plugins-ugly/docs/random/LICENSE [new file with mode: 0644]
subprojects/gst-plugins-ugly/docs/random/PORTED_09 [new file with mode: 0644]
subprojects/gst-plugins-ugly/docs/sitemap.txt [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/a52dec/gsta52dec.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/a52dec/gsta52dec.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/a52dec/meson.build [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/amrnb/GstAmrnbEnc.prs [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/amrnb/README [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/amrnb/amrnb.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/amrnb/amrnbdec.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/amrnb/amrnbdec.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/amrnb/amrnbenc.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/amrnb/amrnbenc.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/amrnb/meson.build [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/amrwbdec/README [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/amrwbdec/amrwb.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/amrwbdec/amrwbdec.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/amrwbdec/amrwbdec.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/amrwbdec/meson.build [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/cdio/gstcdio.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/cdio/gstcdio.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/cdio/gstcdiocddasrc.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/cdio/gstcdiocddasrc.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/cdio/meson.build [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/dvdread/README [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/dvdread/demo-play [new file with mode: 0755]
subprojects/gst-plugins-ugly/ext/dvdread/dvdreadsrc.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/dvdread/dvdreadsrc.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/dvdread/meson.build [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/meson.build [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/mpeg2dec/gstmpeg2dec.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/mpeg2dec/gstmpeg2dec.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/mpeg2dec/meson.build [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/sidplay/gstsiddec.cc [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/sidplay/gstsiddec.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/sidplay/meson.build [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/x264/GstX264Enc.prs [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/x264/gstencoderbitrateprofilemanager.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/x264/gstencoderbitrateprofilemanager.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/x264/gstx264enc.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/x264/gstx264enc.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/ext/x264/meson.build [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst-libs/gst/gettext.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst-libs/gst/glib-compat-private.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst-libs/gst/gst-i18n-plugin.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst-plugins-ugly.doap [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/asfdemux/README [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/asfdemux/asfheaders.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/asfdemux/asfheaders.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/asfdemux/asfpacket.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/asfdemux/asfpacket.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/asfdemux/gstasf.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/asfdemux/gstasfdemux.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/asfdemux/gstasfdemux.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/asfdemux/gstasfelement.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/asfdemux/gstasfelements.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/asfdemux/gstrtpasfdepay.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/asfdemux/gstrtpasfdepay.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/asfdemux/gstrtspwms.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/asfdemux/gstrtspwms.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/asfdemux/meson.build [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/dvdlpcmdec/gstdvdlpcmdec.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/dvdlpcmdec/gstdvdlpcmdec.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/dvdlpcmdec/meson.build [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/dvdsub/gstdvdsubdec.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/dvdsub/gstdvdsubdec.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/dvdsub/gstdvdsubparse.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/dvdsub/gstdvdsubparse.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/dvdsub/meson.build [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/meson.build [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/asmrules.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/asmrules.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/gstrdtbuffer.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/gstrdtbuffer.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/meson.build [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/pnmsrc.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/pnmsrc.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/rademux.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/rademux.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/rdtdepay.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/rdtdepay.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/rdtjitterbuffer.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/rdtjitterbuffer.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/rdtmanager.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/rdtmanager.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/realhash.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/realhash.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/realmedia.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/rmdemux.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/rmdemux.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/rmutils.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/rmutils.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/rtspreal.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/realmedia/rtspreal.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/xingmux/gstxingmux.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/xingmux/gstxingmux.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/xingmux/meson.build [new file with mode: 0644]
subprojects/gst-plugins-ugly/gst/xingmux/plugin.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/hooks/pre-commit.hook [new file with mode: 0755]
subprojects/gst-plugins-ugly/meson.build [new file with mode: 0644]
subprojects/gst-plugins-ugly/meson_options.txt [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/LINGUAS [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/POTFILES [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/af.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/ast.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/az.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/bg.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/ca.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/cs.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/da.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/de.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/el.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/en_GB.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/eo.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/es.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/eu.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/fi.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/fr.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/fur.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/gl.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/hr.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/hu.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/id.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/it.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/ja.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/lt.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/lv.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/meson.build [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/ms.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/mt.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/nb.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/nl.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/or.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/pl.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/pt_BR.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/ro.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/ru.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/sk.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/sl.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/sq.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/sr.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/sv.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/ta.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/tr.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/uk.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/vi.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/po/zh_CN.po [new file with mode: 0644]
subprojects/gst-plugins-ugly/scripts/dist-translations.py [new file with mode: 0755]
subprojects/gst-plugins-ugly/scripts/extract-release-date-from-doap-file.py [new file with mode: 0755]
subprojects/gst-plugins-ugly/scripts/meson.build [new file with mode: 0644]
subprojects/gst-plugins-ugly/tests/check/elements/amrnbenc.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/tests/check/elements/mpeg2dec.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/tests/check/elements/x264enc.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/tests/check/elements/xingmux.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/tests/check/elements/xingmux_testdata.h [new file with mode: 0644]
subprojects/gst-plugins-ugly/tests/check/generic/index.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/tests/check/generic/states.c [new file with mode: 0644]
subprojects/gst-plugins-ugly/tests/check/gst-plugins-ugly.supp [new file with mode: 0644]
subprojects/gst-plugins-ugly/tests/check/meson.build [new file with mode: 0644]
subprojects/gst-plugins-ugly/tests/meson.build [new file with mode: 0644]
tests/check/elements/amrnbenc.c [deleted file]
tests/check/elements/mpeg2dec.c [deleted file]
tests/check/elements/x264enc.c [deleted file]
tests/check/elements/xingmux.c [deleted file]
tests/check/elements/xingmux_testdata.h [deleted file]
tests/check/generic/index.c [deleted file]
tests/check/generic/states.c [deleted file]
tests/check/gst-plugins-ugly.supp [deleted file]
tests/check/meson.build [deleted file]
tests/meson.build [deleted file]

diff --git a/.gitignore b/.gitignore
deleted file mode 100644 (file)
index 9cf107a..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-*~
-*.bak
-
-Build
-*.user
-*.suo
-*.ipch
-*.sdf
-*.opensdf
-*.DS_Store
-
-# Meson
-/build
-/_build
-/subprojects
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
deleted file mode 100644 (file)
index c61aa7a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-include: "https://gitlab.freedesktop.org/gstreamer/gst-ci/raw/master/gitlab/ci_template.yml"
diff --git a/AUTHORS b/AUTHORS
deleted file mode 100644 (file)
index 5cef5a3..0000000
--- a/AUTHORS
+++ /dev/null
@@ -1,21 +0,0 @@
-Erik Walthinsen <omega@temple-baptist.com>
-Matt Howell <mhowell@users.sourceforge.net>
-Brent Bradburn <bbradburn@users.sourceforge.net>
-Wim Taymans <wim.taymans@chello.be>
-Richard Boulton <richard@tartarus.org>
-Zaheer Abbas Merali <zaheerabbas at merali dot org>
-David I. Lehn <dlehn@users.sourceforge.net>
-Chris Emerson <chris@tartarus.org>
-Jens Thiele <karme@unforgettable.com>
-Thomas Nyberg <thomas@codefactory.se>
-Bastien Nocera <hadess@hadess.net>
-Christian Fredrik Kalager Schaller <Uraeus@linuxrising.org>
-Thomas Vander Stichele <thomas@apestaart.org>
-Andy Wingo <wingo@pobox.com>
-Cameron Hutchison <camh@xdna.net>
-David Schleef <ds@schleef.org>
-Benjamin Otte <in7y118@public.uni-hamburg.de>
-Ronald Bultje <rbultje@ronald.bitfreak.net>
-Julien MOUTTE <julien@moutte.net>
-Jan Schmidt <thaytan@mad.scientist.com>
-Arwed v. Merkatz <v.merkatz@gmx.net>
diff --git a/COPYING b/COPYING
deleted file mode 100644 (file)
index 8add30a..0000000
--- a/COPYING
+++ /dev/null
@@ -1,504 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                      Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-\f
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-\f
-                 GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-\f
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-\f
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-\f
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-\f
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-\f
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-\f
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                           NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-\f
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
diff --git a/ChangeLog b/ChangeLog
deleted file mode 100644 (file)
index b747f21..0000000
--- a/ChangeLog
+++ /dev/null
@@ -1,25034 +0,0 @@
-=== release 1.19.2 ===
-
-2021-09-23 01:34:00 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * gst-plugins-ugly.doap:
-       * meson.build:
-         Release 1.19.2
-
-2021-09-21 15:05:58 +0200  Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Strip trailing whitespace from x264's log messages
-         x264 has linebreaks at the end of its log messages that we should
-         ignore.
-         Add G_GNUC_PRINTF to the callback to make sure GCC lets us forward the
-         format string to another function marked as printf (g_strdup_vprintf)
-         without triggering -Wformat-nonliteral.
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/85>
-
-2021-09-21 14:57:29 +0200  Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Add the func/line info to the log callback
-         It looks awkward when it's missing. At least point us at the callback
-         function.
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/85>
-
-2021-09-21 14:56:23 +0200  Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Reduce log spam about bit depth support
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/85>
-
-2021-07-28 11:49:16 +0200  Stéphane Cerveau <scerveau@collabora.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: drop B-frame on open gop
-         Enhance open gop detection to drop B-frame which are invalid
-         before the first reference frame.
-         In stream such
-         gst-integration-testsuites/medias/defaults/mxf/op2b-mpeg2-wave_hd.mxf,
-         the two first frames must be dropped as we detect an open GOP situation
-         but in another media, such as http://col.la/1920X1080IXDCAMEX5MIN, the
-         first frames should not be dropped as we are in a closed GOP situation.
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/84>
-
-2021-05-22 01:53:43 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/x264/gstencoderbitrateprofilemanager.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/realmedia/rtspreal.c:
-       * meson.build:
-         Use g_memdup2() where available and add fallback for older GLib versions
-         - x264 encoder bitrate profile manager: alloc size is based
-         on existing allocation
-         - asfdemux: change length var to 64-bit and check for G_MAXUINT
-         - realmedia: opaque_data_len is read from 32 bits and then
-         only subtracted upon.
-         g_memdup() is deprecated since GLib 2.68 and we want to avoid
-         deprecation warnings with recent versions of GLib.
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/83>
-
-2021-06-01 15:28:40 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-         Back to development
-
-=== release 1.19.1 ===
-
-2021-06-01 00:12:09 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * README:
-       * RELEASE:
-       * gst-plugins-ugly.doap:
-       * meson.build:
-         Release 1.19.1
-
-2018-02-26 17:28:25 +0100  David Fernandez <d.fernandezlop@gmail.com>
-
-       * docs/gst_plugins_cache.json:
-       * ext/x264/gstx264enc.c:
-         x264enc: Change accepted caps width and height from [16, MAX] to [1, MAX]
-         There are cases where the video size might be less than 16x16.
-         This change allows the x264 encoder to accept this cases.
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/44>
-
-2021-04-20 18:48:38 -0400  Doug Nazar <nazard@nazar.ca>
-
-       * gst/realmedia/rmdemux.c:
-       * gst/realmedia/rmdemux.h:
-         realmedia: Drop duplicate seek events.
-         Also use seek seqnum for flush & segment events/messages.
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/81>
-
-2021-04-20 18:47:31 -0400  Doug Nazar <nazard@nazar.ca>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Drop duplicate seek events.
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/81>
-
-2021-03-29 13:41:07 +0200  Stéphane Cerveau <scerveau@collabora.com>
-
-       * gst/xingmux/gstxingmux.c:
-       * gst/xingmux/gstxingmux.h:
-       * gst/xingmux/plugin.c:
-         xingmux: allow per feature registration
-         Split plugin into features including
-         dynamic types which can be indiviually
-         registered during a static build.
-         More details here:
-         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
-         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 13:39:20 +0200  Stéphane Cerveau <scerveau@collabora.com>
-
-       * gst/realmedia/pnmsrc.c:
-       * gst/realmedia/pnmsrc.h:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rademux.h:
-       * gst/realmedia/rdtdepay.c:
-       * gst/realmedia/rdtdepay.h:
-       * gst/realmedia/rdtmanager.c:
-       * gst/realmedia/rdtmanager.h:
-       * gst/realmedia/realmedia.c:
-       * gst/realmedia/rmdemux.c:
-       * gst/realmedia/rmdemux.h:
-       * gst/realmedia/rtspreal.c:
-       * gst/realmedia/rtspreal.h:
-         realmedia: allow per feature registration
-         Split plugin into features including
-         dynamic types which can be indiviually
-         registered during a static build.
-         More details here:
-         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
-         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 13:23:51 +0200  Stéphane Cerveau <scerveau@collabora.com>
-
-       * gst/dvdsub/gstdvdsubdec.c:
-       * gst/dvdsub/gstdvdsubdec.h:
-       * gst/dvdsub/gstdvdsubparse.c:
-       * gst/dvdsub/gstdvdsubparse.h:
-         dvdsub: allow per feature registration
-         Split plugin into features including
-         dynamic types which can be indiviually
-         registered during a static build.
-         More details here:
-         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
-         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 13:15:32 +0200  Stéphane Cerveau <scerveau@collabora.com>
-
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.h:
-         dvdlpcmdec: allow per feature registration
-         Split plugin into features including
-         dynamic types which can be indiviually
-         registered during a static build.
-         More details here:
-         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
-         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 13:11:23 +0200  Stéphane Cerveau <scerveau@collabora.com>
-
-       * gst/asfdemux/gstasf.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-       * gst/asfdemux/gstasfelement.c:
-       * gst/asfdemux/gstasfelements.h:
-       * gst/asfdemux/gstrtpasfdepay.c:
-       * gst/asfdemux/gstrtspwms.c:
-       * gst/asfdemux/meson.build:
-         asfdemux: allow per feature registration
-         Split plugin into features including
-         dynamic types which can be indiviually
-         registered during a static build.
-         More details here:
-         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
-         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 12:39:36 +0200  Stéphane Cerveau <scerveau@collabora.com>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264: allow per feature registration
-         Split plugin into features including
-         dynamic types which can be indiviually
-         registered during a static build.
-         More details here:
-         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
-         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 12:33:00 +0200  Stéphane Cerveau <scerveau@collabora.com>
-
-       * ext/sidplay/gstsiddec.cc:
-       * ext/sidplay/gstsiddec.h:
-         sidplay: allow per feature registration
-         Split plugin into features including
-         dynamic types which can be indiviually
-         registered during a static build.
-         More details here:
-         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
-         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 12:31:26 +0200  Stéphane Cerveau <scerveau@collabora.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/mpeg2dec/gstmpeg2dec.h:
-         mpeg2dec: allow per feature registration
-         Split plugin into features including
-         dynamic types which can be indiviually
-         registered during a static build.
-         More details here:
-         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
-         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 12:28:28 +0200  Stéphane Cerveau <scerveau@collabora.com>
-
-       * ext/dvdread/dvdreadsrc.c:
-       * ext/dvdread/dvdreadsrc.h:
-         dvdread: allow per feature registration
-         Split plugin into features including
-         dynamic types which can be indiviually
-         registered during a static build.
-         More details here:
-         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
-         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 12:28:04 +0200  Stéphane Cerveau <scerveau@collabora.com>
-
-       * ext/cdio/gstcdio.c:
-       * ext/cdio/gstcdio.h:
-       * ext/cdio/gstcdiocddasrc.c:
-       * ext/cdio/gstcdiocddasrc.h:
-         cdio: allow per feature registration
-         Split plugin into features including
-         dynamic types which can be indiviually
-         registered during a static build.
-         More details here:
-         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
-         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 10:39:46 +0200  Stéphane Cerveau <scerveau@collabora.com>
-
-       * ext/amrwbdec/amrwb.c:
-       * ext/amrwbdec/amrwbdec.c:
-       * ext/amrwbdec/amrwbdec.h:
-         amrwbdec: allow per feature registration
-         Split plugin into features including
-         dynamic types which can be indiviually
-         registered during a static build.
-         More details here:
-         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
-         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 10:38:07 +0200  Stéphane Cerveau <scerveau@collabora.com>
-
-       * ext/amrnb/amrnb.c:
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbdec.h:
-       * ext/amrnb/amrnbenc.c:
-       * ext/amrnb/amrnbenc.h:
-         amrnb: allow per feature registration
-         Split plugin into features including
-         dynamic types which can be indiviually
-         registered during a static build.
-         More details here:
-         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
-         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-29 10:37:26 +0200  Stéphane Cerveau <scerveau@collabora.com>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/a52dec/gsta52dec.h:
-         a52dec: allow per feature registration
-         Split plugin into features including
-         dynamic types which can be indiviually
-         registered during a static build.
-         More details here:
-         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
-         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
-
-2021-03-19 15:16:06 +1100  Matthew Waters <matthew@centricular.com>
-
-       * ext/x264/gstencoderbitrateprofilemanager.c:
-         gst: don't use volatile to mean atomic
-         volatile is not sufficient to provide atomic guarantees and real atomics
-         should be used instead.  GCC 11 has started warning about using volatile
-         with atomic operations.
-         https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719
-         Discovered in https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/868
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/78>
-
-2021-03-03 11:05:14 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: Make sure we have enough data available when parsing audio/video packets
-         Otherwise there will be out-of-bounds reads and potential crashes.
-         Thanks to Natalie Silvanovich for reporting.
-         Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/issues/37
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/74>
-
-2020-11-04 18:44:07 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
-
-       * meson.build:
-         meson: Enable some MSVC warnings for parity with GCC/Clang
-         This makes it easier to do development with MSVC by making it warn
-         on common issues that GCC/Clang error out for in our CI configuration.
-         Continuation from https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/223
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/71>
-
-2020-10-31 04:52:14 +0900  Seungha Yang <seungha@centricular.com>
-
-       * tests/check/elements/mpeg2dec.c:
-         tests: mpeg2dec: Don't expect BT601 color space
-         If it's required, mpeg2dec should set it explicitly.
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/70>
-
-2020-09-08 17:30:39 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * .gitlab-ci.yml:
-         ci: include template from gst-ci master branch again
-
-2020-09-08 16:58:40 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-         Back to development
-
-=== release 1.18.0 ===
-
-2020-09-08 00:05:39 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * .gitlab-ci.yml:
-       * ChangeLog:
-       * NEWS:
-       * README:
-       * RELEASE:
-       * gst-plugins-ugly.doap:
-       * meson.build:
-         Release 1.18.0
-
-2020-09-07 22:40:46 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-       * scripts/dist-translations.py:
-       * scripts/meson.build:
-         meson: dist pot file in tarball
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/69>
-
-2020-09-07 12:14:13 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * ext/x264/gstx264enc.c:
-         x264: Update for gst_video_transfer_function_*() function renaming
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/68>
-
-2020-08-21 10:35:11 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * docs/gst_plugins_cache.json:
-       * ext/x264/gstx264enc.c:
-         x264enc: Allow maximum quantizer value of 63 instead of 51
-         QP_MAX_SPEC in x264 is set to 63 nowadays and in theory it allows even
-         up to 81 (QP_MAX) but that seems to be outside the spec.
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/67>
-
-=== release 1.17.90 ===
-
-2020-08-20 16:12:23 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * gst-plugins-ugly.doap:
-       * meson.build:
-         Release 1.17.90
-
-2020-07-15 10:49:03 +0300  Jordan Petridis <jordan@centricular.com>
-
-       * tests/check/elements/amrnbenc.c:
-         amrnbenc: remove global variables
-         gstcheck is declaring its own buffers glist which ends up
-         overwritten, loks like the code meant to use that already
-         gcc 10 is also complaining about this, but only on static
-         builds for some reason
-         ```
-         FAILED: subprojects/gst-plugins-ugly/tests/check/elements_amrnbenc
-         /usr/bin/ld: subprojects/gstreamer/libs/gst/check/libgstcheck-1.0.a(gstcheck.c.o):(.bss+0x38): multiple definition of `buffers'; subprojects/gst-plugins-ugly/tests/check/708af1f@@elements_amrnbenc@exe/elements_amrnbenc.c.o:(.bss+0x18): first defined here
-         collect2: error: ld returned 1 exit status
-         ```
-         also remove unused var `current_buf`
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/62>
-
-2020-04-02 03:27:26 +1100  Jan Schmidt <jan@centricular.com>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: Don't ignore the return value of gst_segment_do_seek()
-         If gst_segment_do_seek() fails, fail the seek.
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/45>
-
-2020-04-01 19:34:30 +1100  Jan Schmidt <jan@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Don't ignore the return result of gst_segment_do_seek()
-         gst_segment_do_seek() can fail, and our seek should fail
-         accordingly.
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/45>
-
-2020-04-17 11:34:16 -0500  Derek Lesho <dlesho@codeweavers.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Only forward SEEK event when in push mode.
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/48>
-
-2020-07-25 21:19:20 +0100  Stéphane Cerveau <scerveau@collabora.com>
-
-       * meson.build:
-         meson: add a plugin summary
-         This summary displays a list of plugins which
-         have been enabled.
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/65>
-
-2018-10-03 13:32:11 +0200  Thibault Saunier <tsaunier@igalia.com>
-
-       * ext/x264/GstX264Enc.prs:
-         x264enc: Add a 'Zero Latency' profile
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/42>
-
-2020-07-22 17:31:37 +0200  Mathieu Duponchelle <mathieu@centricular.com>
-
-       * tests/check/elements/x264enc.c:
-         tests/x264enc: Don't declare variables inside the for loop header
-         This is a C99 feature
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/64>
-
-2020-07-21 15:40:26 +0200  Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
-
-       * tests/check/elements/x264enc.c:
-         tests: x264enc: Test formats are compatible with profile
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/59>
-
-2020-07-01 16:11:09 +0200  Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Separate high-10 video formats from 8-bit formats
-         If downstream is constrained to an 8-bit profile, caps queries would
-         still allow I420_10LE as input. If upstream actually sends such a caps
-         event, downstream would fail to accept the high-10 profile.
-         The following pipeline now fails earlier, during the negotiation phase
-         instead of the stream start:
-         gst-launch-1.0 videotestsrc ! video/x-raw,format=I420_10LE \
-         ! x264enc ! video/x-h264,profile=constrained-baseline \
-         ! fakesink
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/59>
-
-2020-07-21 15:39:31 +0200  Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
-
-       * tests/check/elements/x264enc.c:
-         tests: x264enc: Test 10-bit formats
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/59>
-
-2020-07-21 15:33:57 +0200  Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
-
-       * tests/check/elements/x264enc.c:
-         tests: x264enc: Test all (8-bit) video formats
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/59>
-
-2020-07-06 22:13:55 -0400  Thibault Saunier <tsaunier@igalia.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Forward downstream colorimetry and chroma-site upstream
-         So that the value can be used by upstream converters when necessary.
-         This whole logic has been copied from `__gst_video_element_proxy_caps`
-         but those 2 fields were missing.
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/60>
-
-2020-07-08 17:07:35 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-       * scripts/extract-release-date-from-doap-file.py:
-         meson: set release date from .doap file for releases
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/61>
-
-2020-07-03 02:03:37 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-         Back to development
-
-=== release 1.17.2 ===
-
-2020-07-03 00:29:25 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * gst-plugins-ugly.doap:
-       * meson.build:
-         Release 1.17.2
-
-2020-06-23 00:03:04 +0200  Mathieu Duponchelle <mathieu@centricular.com>
-
-       * docs/meson.build:
-         meson: mark plugins cache target as always stale
-
-2020-06-19 22:55:28 -0400  Thibault Saunier <tsaunier@igalia.com>
-
-       * docs/gst_plugins_cache.json:
-         doc: Stop documenting properties from parents
-
-2020-06-20 00:28:13 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-         Back to development
-
-=== release 1.17.1 ===
-
-2020-06-19 19:20:41 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * docs/gst_plugins_cache.json:
-       * gst-plugins-ugly.doap:
-       * meson.build:
-         Release 1.17.1
-
-2020-06-09 15:13:47 -0400  Thibault Saunier <tsaunier@igalia.com>
-
-       * docs/gst_plugins_cache.json:
-         docs: Update plugins cache
-
-2020-06-08 09:37:10 -0400  Thibault Saunier <tsaunier@igalia.com>
-
-       * docs/gst_plugins_cache.json:
-         docs: Update plugins cache
-
-2020-06-06 10:15:25 +0100  Philippe Normand <philn@igalia.com>
-
-       * ext/sidplay/gstsiddec.cc:
-         siddec: update gst_type_mark_as_plugin_api() calls
-         This was left behind in commit bc1ab5e8e00a7ed6ac5e192af9310bd2146e446a.
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/55>
-
-2020-06-06 00:41:38 +0200  Mathieu Duponchelle <mathieu@centricular.com>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbenc.c:
-       * ext/x264/gstx264enc.c:
-         plugins: uddate gst_type_mark_as_plugin_api() calls
-
-2020-06-03 18:38:28 -0400  Thibault Saunier <tsaunier@igalia.com>
-
-       * docs/meson.build:
-         doc: Require hotdoc >= 0.11.0
-
-2020-05-27 16:02:02 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * docs/gst_plugins_cache.json:
-         docs: Update gst_plugins_cache.json
-
-2020-05-30 23:16:50 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbenc.c:
-       * ext/sidplay/gstsiddec.cc:
-       * ext/x264/gstx264enc.c:
-         plugins: Use gst_type_mark_as_plugin_api() for all non-element plugin types
-
-2020-06-02 00:41:23 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: extract WM/PartOfSet disc number and count metadata
-         Fixes #30
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/54>
-
-2020-06-02 00:40:48 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: sprinkle some INDENT-OFF
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/54>
-
-2020-05-27 14:42:20 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * tests/check/meson.build:
-         tests: fix meson test env setup to make sure we use the right gst-plugin-scanner
-         If core is built as a subproject (e.g. as in gst-build), make sure to use
-         the gst-plugin-scanner from the built subproject. Without this, gstreamer
-         might accidentally use the gst-plugin-scanner from the install prefix if
-         that exists, which in turn might drag in gst library versions we didn't
-         mean to drag in. Those gst library versions might then be older than
-         what our current build needs, and might cause our newly-built plugins
-         to get blacklisted in the test registry because they rely on a symbol
-         that the wrongly-pulled in gst lib doesn't have.
-         This should fix running of unit tests in gst-build when invoking
-         meson test or ninja test from outside the devenv for the case where
-         there is an older or different-version gst-plugin-scanner installed
-         in the install prefix.
-         In case no gst-plugin-scanner is installed in the install prefix, this
-         will fix "GStreamer-WARNING: External plugin loader failed. This most
-         likely means that the plugin loader helper binary was not found or
-         could not be run. You might need to set the GST_PLUGIN_SCANNER
-         environment variable if your setup is unusual." warnings when running
-         the unit tests.
-         In the case where we find GStreamer core via pkg-config we use
-         a newly-added pkg-config var "pluginscannerdir" to get the right
-         directory. This has the benefit of working transparently for both
-         installed and uninstalled pkg-config files/setups.
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/53>
-
-2020-05-27 09:13:17 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.com>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdreadsrc: fix uninitialized warning
-         Variable is always set in actual code paths but let's keep gcc happy.
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/51>
-
-2020-05-12 05:07:47 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
-
-       * ext/sidplay/meson.build:
-       * meson.build:
-         meson: Pass native: false to add_languages()
-         This is needed for cross-compiling without a build machine compiler
-         available. The option was added in 0.54, but we only need this in
-         Cerbero and it doesn't affect older versions so it should be ok.
-         Will just cause a spurious warning.
-         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/50>
-
-2020-04-03 14:24:46 -0500  Derek Lesho <dlesho@codeweavers.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Always re-initialize metadata and global_metadata
-         When transitioning from the PAUSED state, to the READY state, and back,
-         metadata and global_metadata are left uninitialized, unlike when the
-         demxuer transitions from NULL to READY, then to PAUSED.  I have found
-         this to cause a segmentation fault when fields in these structures are
-         set.
-
-2020-04-02 16:18:00 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Fix 'ref' property range and default
-         The --ref option indicate the size of the DPB, hence should be in the range of
-         0 to 16. This patch also fix the default to match x264enc default 3. This
-         change isn't a behaviour change since we don't enforce the reported default.
-
-2020-03-19 18:05:43 -0300  Thibault Saunier <tsaunier@igalia.com>
-
-       * ext/a52dec/gsta52dec.c:
-         a52dec: Mark as converter
-         It is able to do channel downminxing, so technically it is also a
-         converter
-         This is also important so validate knows about that when doing its
-         checks
-
-2019-10-17 14:55:51 +0200  Thibault Saunier <tsaunier@igalia.com>
-
-       * ext/x264/gstencoderbitrateprofilemanager.c:
-       * ext/x264/gstencoderbitrateprofilemanager.h:
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-       * ext/x264/meson.build:
-         x264enc: Respect Youtube bitrate recommandation
-         Properly follow google recommendations[0] concerning bitrate when the
-         user wants to use the youtube profile.
-         [0]: https://support.google.com/youtube/answer/1722171?hl=en
-
-2019-12-18 16:09:42 +0100  Stéphane Cerveau <scerveau@collabora.com>
-
-       * ext/dvdread/dvdreadsrc.c:
-         ugly: use of g_value_dup_string
-         Use helper method to get string from GValue.
-
-2019-12-14 18:49:54 +0700  Dmitry Shusharin <pmdvsh@gmail.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: fixed codestyle
-
-2019-12-14 17:15:21 +0700  Dmitry Shusharin <pmdvsh@gmail.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: corrected em_data value in CEA-708 CC SEI message (fixes #28)
-         Section 4.4 of CEA-708-D specification (table 2) requires all bits to be
-         set inside em_data field. h264parse element (and possible third-party
-         decoders such as libav) also follows this requirement.
-         https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/issues/28
-
-2019-06-09 00:30:53 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * .gitignore:
-       * .gitmodules:
-       * Makefile.am:
-       * README:
-       * autogen.sh:
-       * common:
-       * configure.ac:
-       * docs/.gitignore:
-       * docs/version.entities.in:
-       * ext/Makefile.am:
-       * ext/a52dec/Makefile.am:
-       * ext/amrnb/Makefile.am:
-       * ext/amrwbdec/Makefile.am:
-       * ext/cdio/Makefile.am:
-       * ext/dvdread/Makefile.am:
-       * ext/mpeg2dec/.gitignore:
-       * ext/mpeg2dec/Makefile.am:
-       * ext/sidplay/Makefile.am:
-       * ext/x264/Makefile.am:
-       * gst-libs/Makefile.am:
-       * gst-libs/gst/Makefile.am:
-       * gst/Makefile.am:
-       * gst/asfdemux/.gitignore:
-       * gst/asfdemux/Makefile.am:
-       * gst/dvdlpcmdec/Makefile.am:
-       * gst/dvdsub/Makefile.am:
-       * gst/realmedia/.gitignore:
-       * gst/realmedia/Makefile.am:
-       * gst/xingmux/Makefile.am:
-       * m4/.gitignore:
-       * m4/Makefile.am:
-       * m4/README:
-       * m4/a52.m4:
-       * m4/aalib.m4:
-       * m4/as-ffmpeg.m4:
-       * m4/as-slurp-ffmpeg.m4:
-       * m4/check-libheader.m4:
-       * m4/freetype2.m4:
-       * m4/gconf-2.m4:
-       * m4/glib.m4:
-       * m4/gst-fionread.m4:
-       * m4/gst-ivorbis.m4:
-       * m4/gst-sdl.m4:
-       * m4/gst-shout2.m4:
-       * m4/gst-sid.m4:
-       * m4/gtk.m4:
-       * m4/libfame.m4:
-       * m4/libmikmod.m4:
-       * m4/lrint.m4:
-       * m4/lrintf.m4:
-       * pkgconfig/.gitignore:
-       * pkgconfig/Makefile.am:
-       * pkgconfig/gstreamer-plugins-ugly-uninstalled.pc.in:
-       * po/.gitignore:
-       * po/Makevars:
-       * po/POTFILES:
-       * tests/Makefile.am:
-       * tests/check/.gitignore:
-       * tests/check/Makefile.am:
-       * tests/check/elements/.gitignore:
-       * tests/check/generic/.gitignore:
-       * tests/files/Makefile.am:
-         Remove autotools build system
-
-2019-09-02 09:33:15 -0400  Aaron Boxer <aaron.boxer@collabora.com>
-
-       * NEWS:
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/x264/gstx264enc.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/dvdsub/gstdvdsubdec.c:
-       * gst/realmedia/rdtjitterbuffer.c:
-       * gst/realmedia/rtspreal.c:
-       * hooks/pre-commit.hook:
-         documentation: fix some typos
-
-2019-08-23 19:06:59 +0200  Mathieu Duponchelle <mathieu@centricular.com>
-
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbenc.c:
-       * ext/amrwbdec/amrwbdec.c:
-         docstrings: port ulinks to markdown links
-
-2019-08-23 16:25:25 +1000  Matthew Waters <matthew@centricular.com>
-
-       * docs/meson.build:
-         meson: Don't generate doc cache when no plugins are enabled
-         Fixes gst-build with -Dauto-features=disabled -Dugly=enabled
-
-2019-07-15 21:56:57 +0900  Seungha Yang <seungha.yang@navercorp.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Port to color_{primaries,transfer,matrix}_to_iso
-         ... with more color value mapping
-
-2019-07-15 22:38:35 +0900  Seungha Yang <seungha.yang@navercorp.com>
-
-       * tests/check/elements/x264enc.c:
-       * tests/check/meson.build:
-         tests: x264enc: Enable test on Windows
-         ... with removal of pointless unistd.h dependency.
-         Note that full dependency listing is required to run unit test
-         executable binary on Windows uninstalled environment.
-
-2019-05-31 23:07:58 +0200  Niels De Graef <niels.degraef@barco.com>
-
-       * configure.ac:
-       * meson.build:
-         meson: Bump minimal GLib version to 2.44
-         This means we can use some newer features and get rid of some
-         boilerplate code using the G_DECLARE_* macros.
-         As discussed on IRC, 2.44 is old enough by now to start depending on it.
-
-2019-05-29 23:00:48 +0200  Mathieu Duponchelle <mathieu@centricular.com>
-
-       * ext/sidplay/gstsiddec.cc:
-         doc: remove xml from comments
-
-2019-05-25 14:19:54 +0200  Tim-Philipp Müller <tim@centricular.com>
-
-       * gst/asfdemux/asfheaders.h:
-         asfdemux: remove some unused cruft in internal headers
-
-2019-05-16 09:15:52 -0400  Thibault Saunier <tsaunier@igalia.com>
-
-       * docs/gst_plugins_cache.json:
-       * docs/meson.build:
-         docs: Stop building the doc cache by default
-         And update the cache
-         Fixes https://gitlab.freedesktop.org/gstreamer/gst-docs/issues/36
-
-2019-05-13 22:54:16 -0400  Thibault Saunier <tsaunier@igalia.com>
-
-       * docs/gst_plugins_cache.json:
-         docs: Update plugins documentation cache
-
-2018-10-22 11:47:37 +0200  Thibault Saunier <tsaunier@igalia.com>
-
-       * Makefile.am:
-       * configure.ac:
-       * docs/Makefile.am:
-       * docs/all_index.md:
-       * docs/gst_api_version.in:
-       * docs/gst_plugins_cache.json:
-       * docs/index.md:
-       * docs/meson.build:
-       * docs/plugins/.gitignore:
-       * docs/plugins/Makefile.am:
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
-       * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
-       * docs/plugins/gst-plugins-ugly-plugins.signals:
-       * docs/plugins/gst-plugins-ugly-plugins.types:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-sid.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * docs/sitemap.txt:
-       * ext/a52dec/meson.build:
-       * ext/amrnb/meson.build:
-       * ext/amrwbdec/meson.build:
-       * ext/cdio/meson.build:
-       * ext/dvdread/meson.build:
-       * ext/mpeg2dec/meson.build:
-       * ext/sidplay/meson.build:
-       * ext/x264/meson.build:
-       * gst/asfdemux/gstasfdemux.h:
-       * gst/asfdemux/meson.build:
-       * gst/dvdlpcmdec/meson.build:
-       * gst/dvdsub/meson.build:
-       * gst/realmedia/meson.build:
-       * gst/xingmux/meson.build:
-       * meson.build:
-       * meson_options.txt:
-         docs: Port documentation to hotdoc
-
-2018-10-22 11:47:32 +0200  Thibault Saunier <tsaunier@igalia.com>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbenc.c:
-       * ext/amrwbdec/amrwbdec.c:
-       * ext/cdio/gstcdiocddasrc.c:
-       * ext/x264/gstx264enc.c:
-       * gst/asfdemux/gstasfdemux.h:
-       * gst/asfdemux/gstrtspwms.c:
-       * gst/realmedia/gstrdtbuffer.h:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rdtmanager.c:
-       * gst/realmedia/rtspreal.c:
-       * gst/xingmux/gstxingmux.c:
-         docs: Port all docstring to gtk-doc markdown
-
-2019-04-26 18:28:04 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/sidplay/meson.build:
-         meson: sidplay: use library() instead of shared_module()
-         Like we do for other plugins, and also install a .pc file
-         if we build the plugin statically.
-
-2019-04-22 12:51:33 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * ext/dvdread/meson.build:
-       * meson.build:
-         meson: Always require the gmodule dependency
-         It's needed by the dvdread plugin but also by the x264 plugin in certain
-         circumstances. As it's part of GLib and always available, simply move it
-         as a hard dependency to the top-level meson.build.
-
-2019-04-19 10:28:17 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * README:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-sid.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * meson.build:
-         Back to development
-
-=== release 1.16.0 ===
-
-2019-04-19 00:24:40 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * README:
-       * RELEASE:
-       * configure.ac:
-       * gst-plugins-ugly.doap:
-       * meson.build:
-         Release 1.16.0
-
-2019-04-19 00:24:40 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-sid.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-         Update docs
-
-2019-04-19 00:24:38 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * po/id.po:
-       * po/sv.po:
-         Update translations
-
-=== release 1.15.90 ===
-
-2019-04-11 00:28:18 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * gst-plugins-ugly.doap:
-       * meson.build:
-         Release 1.15.90
-
-2019-04-11 00:28:18 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-sid.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-         Update docs
-
-2019-03-27 21:59:45 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
-
-       * ext/x264/meson.build:
-         meson: Add a subproject fallback for x264
-
-2019-03-10 19:33:31 +0000  Piotr Drąg <piotrdrag@gmail.com>
-
-       * po/LINGUAS:
-         Update LINGUAS
-
-2019-03-21 11:23:07 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-         meson: add -Wno-unused also to C++ args when gst debug system is disabled
-
-2019-03-04 09:08:07 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-sid.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * meson.build:
-         Back to development
-
-2019-02-28 11:03:31 +0100  Mathieu Duponchelle <mathieu@centricular.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: inject CEA708 closed captions
-
-=== release 1.15.2 ===
-
-2019-02-26 11:48:50 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * gst-plugins-ugly.doap:
-       * meson.build:
-         Release 1.15.2
-
-2019-02-26 11:48:50 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-sid.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-         Update docs
-
-2019-02-26 11:48:47 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/fur.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/ta.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update translations
-
-2019-02-22 23:54:30 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/sidplay/gstsiddec.cc:
-         sidplay: fix indentation
-
-2019-02-12 17:58:19 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdreadsrc: Work around GCC9 compiler warning
-         It's technically true but not for this specific type.
-         dvdreadsrc.c:394:65: error: taking address of packed member of ‘struct <anonymous>’ may result in an unaligned pointer value [-Werror=address-of-packed-member]
-         394 |       gst_dvd_read_src_make_clut_change_event (src, src->cur_pgc->palette);
-         |                                                     ~~~~~~~~~~~~^~~~~~~~~
-
-2019-01-30 19:50:30 +0900  Seungha Yang <seungha.yang@navercorp.com>
-
-       * meson.build:
-         meson: Add support orc fallback
-         Allow fallback to orc subproject if any.
-
-2019-01-25 14:38:05 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * ext/x264/gstx264enc.c:
-         x264: Only enable dynamic loading code for x264 < 253
-         Otherwise we get some compiler warnings:
-         ../subprojects/gst-plugins-ugly/ext/x264/gstx264enc.c:200:1: warning: ‘unload_x264’ defined but not used [-Wunused-function]
-         unload_x264 (GstX264EncVTable * vtable)
-         ^~~~~~~~~~~
-         ../subprojects/gst-plugins-ugly/ext/x264/gstx264enc.c:154:1: warning: ‘load_x264’ defined but not used [-Wunused-function]
-         load_x264 (const gchar * filename)
-         ^~~~~~~~~
-
-2019-01-25 14:36:55 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * ext/x264/meson.build:
-         x264: Link to gmodule in the meson build if extra x264 libraries are provided
-         We would dynamically load additional x264 libraries then.
-
-2019-01-17 17:29:38 +0200  Helmut Grohne <helmut@subdivi.de>
-
-       * m4/gst-sid.m4:
-         sid: Fix cross-compilation by using AC_TRY_LINK instead of AC_TRY_RUN
-         https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=917899
-
-=== release 1.15.1 ===
-
-2019-01-17 02:02:30 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * gst-plugins-ugly.doap:
-       * meson.build:
-         Release 1.15.1
-
-2019-01-17 02:02:30 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-sid.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-         Update docs
-
-2019-01-17 02:02:22 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * po/af.po:
-       * po/ast.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/fur.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update translations
-
-2018-12-30 22:48:42 +0900  Seungha Yang <seungha.yang@navercorp.com>
-
-       * tests/check/generic/states.c:
-       * tests/check/meson.build:
-         tests: Enable test generic_states on Windows
-         ... and drop needless unistd.h dependency
-
-2018-12-18 22:48:42 +0900  Seungha Yang <seungha.yang@navercorp.com>
-
-       * meson.build:
-       * tests/check/meson.build:
-         meson: Use join_paths() instead '/'
-
-2018-12-07 23:39:01 +0900  Seungha Yang <seungha.yang@navercorp.com>
-
-       * meson.build:
-       * tests/check/meson.build:
-       * tests/meson.build:
-         tests: Enable unit test on Windows
-         Remove hard-coded ':' whitelist separator since it varies with OS
-
-2018-12-05 17:24:25 -0300  Thibault Saunier <tsaunier@igalia.com>
-
-       * common:
-         Automatic update of common submodule
-         From ed78bee to 59cb678
-
-2018-11-24 19:28:19 +0900  Seungha Yang <seungha.yang@navercorp.com>
-
-       * meson.build:
-         meson: Specify encoding to UTF-8 when building with MSVC
-         Use build arguments consistent with core and -base. This can also
-         remove noisy "C4819" warning of non-us locale MSVC.
-
-2018-11-12 13:30:59 +0200  Jordan Petridis <jordan@centricular.com>
-
-       * .gitlab-ci.yml:
-         Add Gitlab CI configuration
-         This commit adds a .gitlab-ci.yml file, which uses a feature
-         to fetch the config from a centralized repository. The intent is
-         to have all the gstreamer modules use the same configuration.
-         The configuration is currently hosted at the gst-ci repository
-         under the gitlab/ci_template.yml path.
-         Part of https://gitlab.freedesktop.org/gstreamer/gstreamer-project/issues/29
-
-2018-11-05 05:38:33 +0000  Matthew Waters <matthew@centricular.com>
-
-       * .gitmodules:
-         Update common submodule location
-         Remove the git directory
-
-2018-11-05 12:52:46 +0800  Haihao Xiang <haihao.xiang@intel.com>
-
-       * .gitmodules:
-       * gst-plugins-ugly.doap:
-         Clone the code from gitlab
-         This fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/issues/22
-
-2018-10-08 20:45:52 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-         meson: use new 'python' module instead of deprecated
-         https://github.com/mesonbuild/meson/pull/4169
-
-2018-09-22 17:33:35 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * tests/check/elements/x264enc.c:
-         tests: x264enc: fix leak in unit test
-         The static pad templates weren't static so their
-         contents were leaked. valgrind was not happy.
-         Also rename confusing define.
-
-2018-09-18 21:43:14 +0900  Seungha Yang <seungha.yang@navercorp.com>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264enc: Avoid format decision per frame
-         Avoid switch/case per frame for format decision and detect the format
-         only if where it could be changed. Note that, whenever encoder->input_state
-         is changed, gst_x264_enc_init_encoder() is called.
-         https://bugzilla.gnome.org/show_bug.cgi?id=797164
-
-2018-09-19 12:00:32 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-       * meson_options.txt:
-         meson: add glib-checks option to disable API guards and such
-         We want this enabled by default, also in releases, but people
-         may want to disable this for performance-critical workloads or
-         on embedded devices.
-
-2018-09-19 11:58:54 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson_options.txt:
-         meson: fix missing closing bracket in option descriptions
-
-2018-08-18 21:22:42 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-       * meson_options.txt:
-       * tests/meson.build:
-         meson: add option to disable tests
-
-2018-08-18 21:20:20 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-         meson: clean up some cruft
-
-2018-08-18 21:15:23 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-       * meson_options.txt:
-         meson: add options to disable gobject cast checks and glib asserts
-         ... and define G_DISABLE_DEPRECATED for development versions,
-         like we do in autotools.
-
-2018-08-16 13:17:58 +0200  Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Set bit depth for x264 ≥ 153
-         https://bugzilla.gnome.org/show_bug.cgi?id=796975
-
-2018-08-16 14:55:04 +0200  Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Remove superfluous x264_param_default
-         https://bugzilla.gnome.org/show_bug.cgi?id=796973
-
-2018-07-27 19:29:01 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
-
-       * ext/a52dec/meson.build:
-       * ext/amrnb/meson.build:
-       * ext/amrwbdec/meson.build:
-       * ext/cdio/meson.build:
-       * ext/dvdread/meson.build:
-       * ext/mpeg2dec/meson.build:
-       * ext/sidplay/meson.build:
-       * ext/x264/meson.build:
-       * gst/meson.build:
-       * meson.build:
-       * meson_options.txt:
-         Add feature options for all plugins
-         The only automagic dependency left is C++ availability detection.
-         https://bugzilla.gnome.org/show_bug.cgi?id=795107
-
-2018-07-25 17:17:21 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
-
-       * meson.build:
-       * meson_options.txt:
-         meson: Convert common options to feature options
-         The rest will be converted later, these are necessary for gst-build to
-         set options correctly.
-         https://bugzilla.gnome.org/show_bug.cgi?id=795107
-
-2018-06-11 14:43:20 +0200  Edward Hervey <edward@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Remove 0.10 code
-         This was used to "close" a segment. It's no longer needed anymore
-         in 1.x (it was essentially sending the same thing again)
-
-2018-05-11 09:21:09 +0200  Edward Hervey <edward@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Only send flush event on seeking flushes
-         And not on all the time
-
-2018-05-21 11:54:50 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-       * meson_options.txt:
-         meson: add 'nls' option to disable translations
-         And enable by default. Was implicitly disabled because
-         ENABLE_NLS was not defined. Also use .set_quoted().
-
-2018-05-05 19:32:00 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
-
-       * meson.build:
-       * meson_options.txt:
-         meson: Update option names to omit disable_ and with- prefixes
-         Also yield common options to the outer project (gst-build in our case)
-         so that they don't have to be set manually.
-
-2018-05-04 22:54:01 +1000  Jan Schmidt <jan@centricular.com>
-
-       * gst/dvdsub/gstdvdsubdec.c:
-         dvdsubdec: Take the highlight event from the structure.
-         Don't use GST_EVENT_TIMESTAMP to transfer any PTS
-         associated with a highlight event, instead store
-         it in the event structure directly, as
-         GstEvent::timestamp will disappear in GStreamer 2.0
-         https://bugzilla.gnome.org/show_bug.cgi?id=761477
-
-2018-04-24 14:06:20 -0400  Xavier Claessens <xavier.claessens@collabora.com>
-
-       * ext/a52dec/meson.build:
-       * ext/amrnb/meson.build:
-       * ext/amrwbdec/meson.build:
-       * ext/cdio/meson.build:
-       * ext/dvdread/meson.build:
-       * ext/mpeg2dec/meson.build:
-       * ext/x264/meson.build:
-       * gst/asfdemux/meson.build:
-       * gst/dvdlpcmdec/meson.build:
-       * gst/dvdsub/meson.build:
-       * gst/realmedia/meson.build:
-       * gst/xingmux/meson.build:
-       * meson.build:
-         Meson: Generate pc file for all plugins in ugly
-         https://bugzilla.gnome.org/show_bug.cgi?id=794568
-
-2018-04-25 10:59:11 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-         meson: use -Wl,-Bsymbolic-functions where supported
-         Just like the autotools build.
-
-2018-04-16 20:13:05 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Set the stream-format field of H264 streams
-         If we have codec_data it will be AVC, otherwise assume byte-stream.
-
-2018-04-16 10:53:12 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * README:
-       * common:
-         Automatic update of common submodule
-         From 3fa2c9e to ed78bee
-
-2018-03-20 09:26:15 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-sid.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * meson.build:
-         Back to development
-
-=== release 1.14.0 ===
-
-2018-03-19 20:19:43 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * gst-plugins-ugly.doap:
-       * meson.build:
-         Release 1.14.0
-
-2018-03-19 20:19:43 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-sid.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-         Update docs
-
-=== release 1.13.91 ===
-
-2018-03-13 19:17:58 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * gst-plugins-ugly.doap:
-       * meson.build:
-         Release 1.13.91
-
-2018-03-13 19:17:58 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-sid.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-         Update docs
-
-2018-03-12 20:19:19 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-         docs: plugins: minor addition to plugins list
-
-2018-03-08 10:12:16 +0100  Michael Tretter <m.tretter@pengutronix.de>
-
-       * configure.ac:
-         configure.ac: enable largefile support if possible
-         https://bugzilla.gnome.org/show_bug.cgi?id=793103
-
-=== release 1.13.90 ===
-
-2018-03-03 22:24:28 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * gst-plugins-ugly.doap:
-       * meson.build:
-         Release 1.13.90
-
-2018-03-03 22:24:28 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-sid.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-         Update docs
-
-2018-03-01 19:07:42 +0100  Mathieu Duponchelle <mathieu@centricular.com>
-
-       * meson.build:
-       * tests/check/meson.build:
-         meson: enable more warnings
-
-2018-02-28 10:07:13 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: fix build with newer x264 with support for multiple bit depths
-         libx264 used to be built for one specific bit depth, and if we
-         wanted to support multiple bit depths we would have to dynamically
-         load the right .so from different paths. That has changed now, and
-         libx264 can include support for multiple depths in the same lib,
-         so we don't need to do the dlopen() dance any more. We'll keep
-         the vtable stuff around until we can drop support for older x264.
-         gstx264enc.c:2927:36: error: ‘x264_bit_depth’ undeclared
-         https://bugzilla.gnome.org/show_bug.cgi?id=792111
-
-2018-02-27 15:42:32 +0100  Alicia Boya García <aboya@igalia.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Add format example for option-string
-         https://bugzilla.gnome.org/show_bug.cgi?id=793879
-
-2018-02-21 19:47:36 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-         meson: simplify GST_DISABLE_GST_DEBUG check and don't use add_global_*
-         add_global_arguments() can't be used in subprojects. It's
-         entirely possible that -ugly is a subproject but gstreamer
-         is picked up from an installed location, so we should
-         really use add_project_arguments() in both cases.
-
-2018-02-15 19:44:21 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-sid.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * meson.build:
-         Back to development
-
-=== release 1.13.1 ===
-
-2018-02-15 17:10:13 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * NEWS:
-       * configure.ac:
-       * gst-plugins-ugly.doap:
-       * meson.build:
-         Release 1.13.1
-
-2018-02-15 17:07:42 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-sid.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-         docs: update plugin docs
-
-2018-02-15 14:52:29 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * po/id.po:
-       * po/it.po:
-       * po/nl.po:
-       * po/sv.po:
-         po: update translations
-
-2018-02-08 19:09:45 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-         meson: make version numbers ints and fix int/string comparison
-         WARNING: Trying to compare values of different types (str, int).
-         The result of this is undefined and will become a hard error
-         in a future Meson release.
-
-2018-02-04 12:03:36 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * configure.ac:
-         autotools: use -fno-strict-aliasing where supported
-         https://bugzilla.gnome.org/show_bug.cgi?id=769183
-
-2018-01-30 20:34:52 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/sidplay/meson.build:
-       * meson.build:
-         meson: use -fno-strict-aliasing where supported
-         https://bugzilla.gnome.org/show_bug.cgi?id=769183
-
-2018-01-03 16:02:08 +0100  Edward Hervey <edward@centricular.com>
-
-       * ext/amrnb/amrnbdec.c:
-         amrnbdec: Don't use g_return_*_if_fail() on data parsing
-         Those functions can be disabled. Instead just use the (existing)
-         function.
-         CID #1427121
-
-2018-01-03 16:02:08 +0100  Edward Hervey <edward@centricular.com>
-
-       * ext/amrwbdec/amrwbdec.c:
-         amrwbdec: Don't use g_return_*_if_fail() on data parsing
-         Those functions can be disabled. Instead just use the (existing)
-         function.
-         CID #1427093
-
-2017-12-26 13:51:37 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-         meson: skip translations if gettext is not available
-
-2017-12-14 14:49:17 +1100  Matthew Waters <matthew@centricular.com>
-
-       * common:
-         Automatic update of common submodule
-         From e8c7a71 to 3fa2c9e
-
-2017-12-07 15:52:58 +0900  Justin Kim <justin.kim@collabora.com>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264enc: add 'insert-vui' property for users to choose
-         VUI(Video Usability Information) parameters should be set
-         according to the specification. However, some of the existing
-         hardware decoders refuse to decode in certain combinations of
-         the resolution and VUI parameters. To support the legacy
-         decoders, this patch provides 'insert-vui' to skip the settings.
-         https://bugzilla.gnome.org/show_bug.cgi?id=791331
-
-2017-12-06 13:01:39 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * ext/cdio/gstcdio.c:
-       * ext/cdio/gstcdio.h:
-       * ext/cdio/gstcdiocddasrc.c:
-         cdio: Fix build with cdio >= 1.0
-         LIBCDIO_VERSION_NUM was defined as e.g. 94 for 0.94 but is now defined
-         as 1 for 1.0. We had various checks for < 83, which of course succeeded
-         now although we are >= 0.83.
-         Fix this by checking for < 76 (0.76) too, as that is the minimum version
-         we currently support and everything < 76 is going to be >= 1.0.
-         https://bugzilla.gnome.org/show_bug.cgi?id=791301
-
-2017-11-27 20:11:56 +1100  Matthew Waters <matthew@centricular.com>
-
-       * common:
-         Automatic update of common submodule
-         From 3f4aa96 to e8c7a71
-
-2017-11-26 15:05:14 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * configure.ac:
-         configure: actually use -fvisibility if supported
-         Fix up for previous commit.
-
-2017-11-26 14:49:21 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * configure.ac:
-         autotools: stop controlling symbol visibility with -export-symbols-regex
-         Instead, use -fvisibility=hidden and explicit exports via GST_EXPORT.
-         This should result in consistent behaviour for the autotools and
-         Meson builds.
-
-2017-11-13 11:13:30 +0100  Edward Hervey <edward@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Fix prerolling files with "empty" streams
-         This is a regression that was introduced by
-         commit 1803b3c18530cb0100d140c2b8e49a8dfe41f941
-         "    asfdemux: Add support for dvr-ms"
-         The problem is that some files/streams might contain stream definition
-         but there is no actual packets for those streams.
-         This was used to "define" streams with different bitrates for example.
-         The first_ts calculation resulted in never ever finding a valid first_ts
-         since some streams were empty, and therefore never "activating" itself.
-         Instead of that we first check if we are prerolled. And if we are we
-         unconditionally get the "first_ts"
-         The preroll check has been adapted to check whether streams of
-         each defined type (i.e. audio/video/sub) has been prerolled. This solves
-         the problem of having different streams of a particular type where only
-         one stream actually has data.
-
-2017-11-13 11:09:31 +0100  Edward Hervey <edward@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Store the stream type in streams
-         The field was present but never set :)
-
-2017-09-26 10:11:24 +0530  Ponnam Srinivas <p.srinivas@samsung.com>
-
-       * ext/a52dec/gsta52dec.c:
-         a52dec: Fix out buffer memory leak in error code path
-         https://bugzilla.gnome.org/show_bug.cgi?id=788119
-
-2017-09-15 17:06:58 +0530  Deepak Srivastava <srivastava.d@samsung.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Fix buffer memory leak in error code path
-         https://bugzilla.gnome.org/show_bug.cgi?id=787817
-
-2017-09-07 13:27:26 +0530  Satya Prakash Gupta <sp.gupta@samsung.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Unmap output video frame if copying to it fails
-         https://bugzilla.gnome.org/show_bug.cgi?id=787398
-
-2017-08-31 11:33:14 +0530  Satya Prakash Gupta <sp.gupta@samsung.com>
-
-       * gst/realmedia/asmrules.c:
-         realmedia: fix leak in asmrules error code path
-         https://bugzilla.gnome.org/show_bug.cgi?id=787056
-
-2017-08-30 18:41:28 +0530  Satya Prakash Gupta <sp.gupta@samsung.com>
-
-       * gst/realmedia/rtspreal.c:
-         realmedia: Fix Memory leak in error case
-         https://bugzilla.gnome.org/show_bug.cgi?id=787014
-
-2017-08-26 13:02:26 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * tests/files/Makefile.am:
-       * tests/files/cbr_stream.mp3:
-       * tests/files/stream.mp2:
-       * tests/files/vbr_stream.mp3:
-         tests: remove files that were used by the mpg123 unit test
-
-2017-08-26 09:35:20 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * Makefile.am:
-       * REQUIREMENTS:
-       * configure.ac:
-       * docs/plugins/Makefile.am:
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * ext/Makefile.am:
-       * ext/meson.build:
-       * ext/twolame/Makefile.am:
-       * ext/twolame/gsttwolamemp2enc.c:
-       * ext/twolame/gsttwolamemp2enc.h:
-       * ext/twolame/meson.build:
-       * po/POTFILES.in:
-         Remove twolame plugin, moved to -good
-         https://bugzilla.gnome.org/show_bug.cgi?id=774252
-
-2017-08-26 08:51:01 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * Makefile.am:
-       * REQUIREMENTS:
-       * configure.ac:
-       * docs/plugins/Makefile.am:
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * ext/Makefile.am:
-       * ext/lame/Makefile.am:
-       * ext/lame/gstlamemp3enc.c:
-       * ext/lame/gstlamemp3enc.h:
-       * ext/lame/meson.build:
-       * ext/lame/plugin.c:
-       * ext/meson.build:
-       * m4/Makefile.am:
-       * m4/as-liblame.m4:
-       * po/POTFILES.in:
-       * tests/check/Makefile.am:
-       * tests/check/gst-plugins-ugly.supp:
-       * tests/check/meson.build:
-       * tests/check/pipelines/.gitignore:
-       * tests/check/pipelines/lame.c:
-         Remove lame plugin, moved to -good
-         https://bugzilla.gnome.org/show_bug.cgi?id=774252
-
-2017-08-20 14:31:02 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * Makefile.am:
-       * REQUIREMENTS:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/inspect/plugin-mpg123.xml:
-       * ext/Makefile.am:
-       * ext/meson.build:
-       * ext/mpg123/Makefile.am:
-       * ext/mpg123/gstmpg123audiodec.c:
-       * ext/mpg123/gstmpg123audiodec.h:
-       * ext/mpg123/meson.build:
-       * tests/check/Makefile.am:
-       * tests/check/elements/.gitignore:
-       * tests/check/elements/mpg123audiodec.c:
-       * tests/check/meson.build:
-         Remove mpg123 plugin, moved to -good
-         https://bugzilla.gnome.org/show_bug.cgi?id=774252
-
-2017-08-17 12:23:43 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * README:
-       * common:
-         Automatic update of common submodule
-         From 48a5d85 to 3f4aa96
-
-2017-08-10 15:48:27 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/sidplay/meson.build:
-         sidplay: hide symbols in meson for this c++ plugin too
-         Keep things local, as this is the only c++ plugin
-         in ugly currently.
-
-2017-08-10 11:55:58 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-         meson: don't export symbols by default
-         Only plugin entry points should be exported.
-         Currently plugins might export more symbols with
-         the meson build, as we don't have the exports
-         regexp there that we pass to libtool.
-
-2017-08-09 19:31:56 +0200  Mark Nauwelaerts <mnauw@users.sourceforge.net>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: add FIXME note for future configuration cleanup
-
-2017-07-25 13:36:17 +0530  Satya Prakash Gupta <sp.gupta@samsung.com>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdreadsrc: Fix string memory leak
-         https://bugzilla.gnome.org/show_bug.cgi?id=785388
-
-2017-07-15 15:01:09 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: fix indentation
-
-2017-07-15 14:59:42 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: fix caps leak
-         Move creation of supported sink pads into class_init function
-         which is also the only place where they're used. Unref the
-         caps when no longer needed, the pad template will take its
-         own ref.
-         https://bugzilla.gnome.org/show_bug.cgi?id=784982
-
-2017-07-15 14:57:49 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/mpg123/gstmpg123audiodec.c:
-         mpg123audiodec: fix caps leak
-         The pad template takes its own ref, so we should unref the caps.
-         https://bugzilla.gnome.org/show_bug.cgi?id=784982
-
-2017-07-15 12:49:19 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * po/meson.build:
-         meson: po: use glib preset and read language list from LINGUAS
-         Supported since meson 0.37, so we can use it now.
-
-2017-07-11 14:21:41 +0300  Vivia Nikolaidou <vivia@ahiru.eu>
-
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-         dvdlpmdec: Fix overrun from coverity
-         CID #1414801
-
-2017-07-07 11:58:36 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-         meson: find python3 via python3 module
-         https://bugzilla.gnome.org/show_bug.cgi?id=783198
-
-2017-07-05 18:58:35 +0300  Vivia Nikolaidou <vivia@ahiru.eu>
-
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.h:
-         dvdlpcmdec: Added support for Blu-Ray audio
-         https://bugzilla.gnome.org/show_bug.cgi?id=784552
-
-2017-06-27 11:48:08 +0200  Edward Hervey <edward@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: More index handling
-         In the same vein as the previous commit, the end of the file might have been
-         cut and therefore contains bogus data.
-         If the object is too short, consider it as garbage and return a non-fatal
-         flow.
-         Regression introduced in 97294eb8bbed1b9dad7d3f2c52dd69eb1812cc06
-
-2017-06-27 10:25:42 +0200  Edward Hervey <edward@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux; Don't assume index is present at end of file
-         Some files have garbage at the end of the file, don't error out if we don't
-         find the index there.
-         Reverts back to previous behaviour (where corrupted/missing indexex were
-         not a fatal error).
-         Regression introduced in 97294eb8bbed1b9dad7d3f2c52dd69eb1812cc06
-
-2017-06-26 09:49:22 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-         meson: fix with-package-name option
-         https://bugzilla.gnome.org/show_bug.cgi?id=784082
-
-2017-06-14 21:08:31 +0200  Mark Nauwelaerts <mnauw@users.sourceforge.net>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: adjust segment start to a keyframe ts only for a KEYUNIT seek
-         ... which is how it has always been until changed coincidentally in commit
-         9ee60482b265481d0e3b397044f560eb736e5429 which then prompted commit
-         dba14178ce6115b406ef86e356b1201463af5e2a to consider ACCURATE as well
-         to compensate for that in a lateral way
-
-2017-06-14 20:56:16 +0200  Mark Nauwelaerts <mnauw@users.sourceforge.net>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: relax bframes upper limit count to maximum encoder supported
-
-2017-06-23 23:44:18 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/sidplay/meson.build:
-         meson: don't error out if sidplay library is not found
-
-2017-06-23 18:33:24 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/meson.build:
-       * ext/sidplay/meson.build:
-         meson: build sid plugin
-         https://bugzilla.gnome.org/show_bug.cgi?id=784135
-
-2017-06-21 21:23:29 +0200  Víctor Manuel Jáquez Leal <vjaquez@igalia.com>
-
-       * ext/x264/gstx264enc.c:
-         x264: fix memory leak
-         When the allowed caps are the same of template caps the allowed
-         caps are not unrefed, leaking memory.
-         https://bugzilla.gnome.org/show_bug.cgi?id=784060
-
-2017-06-07 12:08:43 -0400  Thibault Saunier <thibault.saunier@osg.samsung.com>
-
-       * tests/check/meson.build:
-         meson: Do not use path separator in test names
-         Avoiding warnings like:
-         WARNING: Target "elements/audioamplify" has a path separator in its name.
-
-2017-06-06 21:48:19 -0700  Thiago Santos <thiagossantos@gmail.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: fix checking for header objects
-         The if 'and' condition was mixed up with the last parameter of the
-         function and would lead to wrong results
-
-2017-05-21 17:49:59 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * Makefile.am:
-       * config.h.meson:
-       * meson.build:
-         meson: don't need config.h.meson any longer
-
-2017-05-20 14:58:37 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-       * meson_options.txt:
-         meson: add options to set package name and origin
-         https://bugzilla.gnome.org/show_bug.cgi?id=782172
-
-2017-05-19 20:05:02 +0200  Jan Schmidt <jan@centricular.com>
-
-       * tests/check/meson.build:
-         Add gstvideo_dep for meson mpeg2dec test build
-
-2017-05-19 18:59:17 +0200  Jan Schmidt <jan@centricular.com>
-
-       * tests/check/Makefile.am:
-       * tests/check/elements/mpeg2dec.c:
-         mpeg2dec test: Fix expected output caps
-         In the absence of explicit info, video decoders
-         now output mono multiview caps by default, so make
-         the expected caps match that
-
-2017-05-16 14:07:56 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * config.h.meson:
-       * configure.ac:
-       * ext/a52dec/Makefile.am:
-       * ext/amrnb/Makefile.am:
-       * ext/amrwbdec/Makefile.am:
-       * ext/cdio/Makefile.am:
-       * ext/dvdread/Makefile.am:
-       * ext/lame/Makefile.am:
-       * ext/mpeg2dec/Makefile.am:
-       * ext/mpg123/Makefile.am:
-       * ext/sidplay/Makefile.am:
-       * ext/twolame/Makefile.am:
-       * ext/x264/Makefile.am:
-       * gst/asfdemux/Makefile.am:
-       * gst/dvdlpcmdec/Makefile.am:
-       * gst/dvdsub/Makefile.am:
-       * gst/realmedia/Makefile.am:
-       * gst/xingmux/Makefile.am:
-         Remove plugin specific static build option
-         Static and dynamic plugins now have the same interface. The standard
-         --enable-static/--enable-shared toggle are sufficient.
-
-2017-05-09 09:45:27 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * ext/sidplay/gstsiddec.cc:
-         sid: Make plugin name match plugin file name
-
-2017-05-04 18:59:14 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * configure.ac:
-       * meson.build:
-         Back to development
-
-=== release 1.12.0 ===
-
-2017-05-04 15:39:25 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpg123.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * meson.build:
-         Release 1.12.0
-
-2017-05-04 15:12:50 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/fur.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2017-05-04 13:47:56 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/id.po:
-       * po/sv.po:
-         po: Update translations
-
-=== release 1.11.91 ===
-
-2017-04-27 17:33:23 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpg123.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * meson.build:
-         Release 1.11.91
-
-2017-04-27 16:08:13 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/fur.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2017-04-27 15:29:48 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/LINGUAS:
-       * po/fur.po:
-       * po/id.po:
-       * po/sv.po:
-         po: Update translations
-
-2017-04-27 12:42:34 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
-
-       * ext/x264/gstx264enc.h:
-         x264: Use __declspec(dllimport) with MinGW too
-         x264.h says this isn't needed with MinGW, but it looks like it is.
-         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=779249
-
-2017-04-24 20:28:15 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * common:
-         Automatic update of common submodule
-         From 60aeef6 to 48a5d85
-
-2017-04-10 23:49:25 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * autogen.sh:
-       * common:
-         Automatic update of common submodule
-         From 39ac2f5 to 60aeef6
-
-=== release 1.11.90 ===
-
-2017-04-07 16:34:22 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpg123.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * meson.build:
-         Release 1.11.90
-
-2017-04-07 15:33:31 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2017-04-07 15:07:50 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/id.po:
-       * po/sv.po:
-         po: Update translations
-
-2017-03-28 14:18:38 -0300  Thibault Saunier <thibault.saunier@osg.samsung.com>
-
-       * tests/check/meson.build:
-         meson: test: Fix environment object usage
-         And use get_pkgconfig_variable instead of calling pkg-config ourself
-
-2017-03-20 17:06:16 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * REQUIREMENTS:
-         REQUIREMENTS: update for mad mp3 decoder removal
-         https://bugzilla.gnome.org/show_bug.cgi?id=776140
-
-2017-03-12 11:57:23 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * Makefile.am:
-         Add libgstrmdemux.so to cruft list
-         This was renamed to libgstrealmedia.so, this fixes helps fixing
-         uninstalled setup.
-         https://bugzilla.gnome.org/show_bug.cgi?id=779344
-
-2017-03-04 11:09:33 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * gst/realmedia/Makefile.am:
-       * gst/realmedia/meson.build:
-         Rename plugin filenames to match plugin names
-         libgstrmdemux.so becomes libgstrealmedia.so
-         https://bugzilla.gnome.org/show_bug.cgi?id=779344
-
-2017-03-01 23:00:55 +1100  Jan Schmidt <jan@centricular.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Fix latency calculation
-         The latency calculation was missing a scaling by GST_SECOND,
-         so it would always report a tiny latency. Fix that.
-         Spotted by Guillaume Desmottes.
-
-2017-02-27 20:55:34 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Fix compilation with gcc 7
-         gstasfdemux.c: In function 'gst_asf_demux_parse_stream_object':
-         gstasfdemux.c:3001:39: error: '<<' in boolean context, did you mean '<' ? [-Werror=int-in-bool-context]
-         is_encrypted = ! !((flags & 0x8000) << 15);
-         ~~~~~~~~~~~~~~~~~~^~~~~~
-         https://bugzilla.gnome.org/show_bug.cgi?id=779329
-
-2017-02-25 21:48:46 -0300  Edgard Lima <edgard.lima@gmail.com>
-
-       * ext/amrwbdec/amrwb.c:
-       * ext/amrwbdec/amrwbdec.h:
-         Update Edgard Lima's email
-         https://bugzilla.gnome.org/show_bug.cgi?id=779230
-
-2017-02-24 15:59:47 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * meson.build:
-         meson: Update version
-
-2017-02-24 15:37:43 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * configure.ac:
-         Back to development
-
-=== release 1.11.2 ===
-
-2017-02-24 15:07:54 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpg123.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-         Release 1.11.2
-
-2017-02-24 12:57:00 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2017-02-24 12:45:43 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/id.po:
-       * po/sv.po:
-         po: Update translations
-
-2017-02-14 19:56:13 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * Makefile.am:
-         meson: dist meson build files
-         Ship meson build files in tarballs, so people who use tarballs
-         in their builds can start playing with meson already.
-
-2017-02-01 03:08:10 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
-
-       * ext/x264/gstx264enc.c:
-         x264: Initialize function vtable in plugin_init()
-         These values are defined in the x264.h header and are not const on
-         Windows due to the way DLLs work. See:
-         https://msdn.microsoft.com/en-us/library/619w14ds.aspx
-         https://msdn.microsoft.com/en-us/library/zw3za17w.aspx
-         https://bugzilla.gnome.org/show_bug.cgi?id=777903
-
-2017-01-31 13:50:21 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Check that we have enough data available before parsing bool/uint extended content descriptors
-         https://bugzilla.gnome.org/show_bug.cgi?id=777955
-
-2017-01-30 15:39:59 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Reset number of languages to 0 when freeing the array because of errors
-         Otherwise we will happily index into the array at NULL if the requested
-         index is smaller than the number of languages that were previously
-         allocated.
-         https://bugzilla.gnome.org/show_bug.cgi?id=777937
-
-2017-01-24 19:24:10 -0300  Thibault Saunier <thibault.saunier@osg.samsung.com>
-
-       * tests/check/meson.build:
-         meson: Properly use ':' for defining keywords
-
-2017-01-13 12:39:09 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-         meson: bump version
-
-2017-01-12 16:32:52 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * configure.ac:
-         Back to development
-
-=== release 1.11.1 ===
-
-2017-01-12 16:10:25 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpg123.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-         Release 1.11.1
-
-2017-01-12 14:45:56 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2017-01-12 14:37:02 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/hr.po:
-       * po/id.po:
-       * po/sv.po:
-         po: Update translations
-
-2016-12-16 16:52:00 -0300  Thibault Saunier <thibault.saunier@osg.samsung.com>
-
-       * ext/amrnb/meson.build:
-       * ext/x264/meson.build:
-       * meson.build:
-         meson: Install presets files
-
-2015-06-26 20:22:47 +0200  Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
-
-       * ext/x264/GstX264Enc.prs:
-         x264enc: Add a youtube preset.
-         Based on https://support.google.com/youtube/answer/1722171
-         https://bugzilla.gnome.org/show_bug.cgi?id=751560
-
-2016-12-28 10:42:15 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * config.h.meson:
-       * configure.ac:
-       * docs/plugins/Makefile.am:
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * ext/Makefile.am:
-       * ext/mad/Makefile.am:
-       * ext/mad/gstmad.c:
-       * ext/mad/gstmad.h:
-       * ext/mad/meson.build:
-       * ext/meson.build:
-         mad: remove plugin
-         We have better replacements such as the mpg123 plugin.
-         The main reason to keep around mad was for 'freeform'
-         mp3 support, but mpg123 can handle those too nowadays.
-         Also, mad is GPL and has been unmaintained for years.
-         https://bugzilla.gnome.org/show_bug.cgi?id=776140
-
-2016-12-16 19:07:51 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * Makefile.am:
-       * configure.ac:
-       * win32/MANIFEST:
-       * win32/common/.gitignore:
-       * win32/common/config.h:
-         win32: remove platform-specific copies of generated headers
-         Unused and no longer needed.
-
-2016-12-14 10:24:26 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * .gitignore:
-       * Makefile.am:
-       * configure.ac:
-       * gst-plugins-ugly.spec.in:
-         Remove generated .spec file
-         Likely extremely bitrotten, and we should not ship this anyway.
-
-2016-12-09 17:45:34 -0300  Thibault Saunier <tsaunier@gnome.org>
-
-       * meson.build:
-         meson: Support building without Gst debug
-
-2016-12-03 08:19:44 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * README:
-       * common:
-         Automatic update of common submodule
-         From f980fd9 to 39ac2f5
-
-2016-12-02 14:06:21 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Fix memory leak of payload extensions for unusable/unsupported streams
-         https://bugzilla.gnome.org/show_bug.cgi?id=775515
-
-2016-11-30 18:11:30 +0200  Vivia Nikolaidou <vivia@ahiru.eu>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Add information for mixed mode
-         https://bugzilla.gnome.org/show_bug.cgi?id=775411
-
-2016-11-30 17:30:33 +0200  Vivia Nikolaidou <vivia@ahiru.eu>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Correctly pass interlacing/TFF information
-         Give the interlacing information correctly to the encoder. Also parse
-         TFF/BFF information from the caps and pass it too.
-         https://bugzilla.gnome.org/show_bug.cgi?id=775411
-
-2016-11-28 15:14:18 +0200  Vivia Nikolaidou <vivia@ahiru.eu>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Auto-detect interlace mode from caps
-         If the caps are interlaced, interlacing is always enabled on the
-         encoder. If the interlace-mode field is missing or if it's progressive,
-         the encoder uses the "interlaced" property.
-         https://bugzilla.gnome.org/show_bug.cgi?id=775228
-
-2016-11-26 11:20:51 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * .gitmodules:
-         common: use https protocol for common submodule
-         https://bugzilla.gnome.org/show_bug.cgi?id=775110
-
-2016-11-25 23:51:00 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * gst/realmedia/realhash.c:
-         real: Fix compiler warnings with latest clang
-         realhash.c:295:11: error: implicit conversion from 'int' to 'char' changes value from 128 to -128 [-Werror,-Wconstant-conversion]
-         *buf1 = 128;
-         ~ ^~~
-         https://bugzilla.gnome.org/show_bug.cgi?id=775112
-
-2016-11-25 12:41:03 +0100  Edward Hervey <edward@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Allow 64bit sizes for DATA object
-         we *can* have files greater than 4GB, any other object should be
-         smaller than that
-
-2016-11-25 10:07:35 +0100  Edward Hervey <edward@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Add sanity check for asf_stream_audio
-         We should have enough bytes for the specified codec_data
-         https://bugzilla.gnome.org/show_bug.cgi?id=775070
-
-2016-11-25 09:45:04 +0100  Edward Hervey <edward@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Add sanity checks when reading asf_stream_video_format
-         It should report a size of at least 40 bytes
-         Also check for the size of the remaining data (i.e. codec_data)
-         https://bugzilla.gnome.org/show_bug.cgi?id=775070
-
-2016-11-25 09:44:05 +0100  Edward Hervey <edward@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Add check for invalid/corrupt asf object
-         An asf object can't realistically be bigger than 2**32 bytes.
-         If it reports a size bigger than that, consider it corrupt and properly
-         propagate the error back.
-         https://bugzilla.gnome.org/show_bug.cgi?id=775070
-
-2016-11-22 17:14:44 +0100  Edward Hervey <edward@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Handle EOS in push-mode on corrupted files
-         It is possible no streams were activated when receiving EOS, if so
-         handled it as if we hadn't seen the header
-         https://bugzilla.gnome.org/show_bug.cgi?id=774846
-
-2016-11-22 16:56:04 +0100  Edward Hervey <edward@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: FILE headers are mandatory in the header
-         As per the specification, also avoids ending up trying to play a
-         file with plenty of un-initialized values.
-         https://bugzilla.gnome.org/show_bug.cgi?id=774846
-
-2016-11-22 16:54:26 +0100  Edward Hervey <edward@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Handle incomplete header in pull mode
-         pulling headers is meant to complete as a whole. If we don't have
-         enough data, it's an error.
-         Avoids pipeline hangs on corrupted files
-         https://bugzilla.gnome.org/show_bug.cgi?id=774846
-
-2016-11-22 16:22:49 +0100  Edward Hervey <edward@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Handle issues with "empty" files
-         In some corrupted files, we could end up with no actual streams
-         being exposed.
-         In those cases, make sure we properly propagate the failure all
-         the way to the loop function. This avoids ending up in cases where
-         we are neither EOS'd nor ERROR'd out from a pipeline point of view.
-         https://bugzilla.gnome.org/show_bug.cgi?id=774846
-
-2016-11-20 20:54:25 +0100  Mark Nauwelaerts <mnauw@users.sourceforge.net>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdreadsrc: dvd-spu-clut-change is a sticky custom event
-
-2016-11-17 17:20:03 -0800  Scott D Phillips <scott.d.phillips@intel.com>
-
-       * meson.build:
-         meson: Add ignored warnings for MSVC
-         https://bugzilla.gnome.org/show_bug.cgi?id=774656
-
-2016-11-11 14:15:17 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * configure.ac:
-       * ext/x264/Makefile.am:
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-       * ext/x264/meson.build:
-       * meson_options.txt:
-         x264enc: Add configure parameter to specify additional x264 libraries with e.g. different depth configuration
-         x264 has to be compiled specifically for a target bit depth.
-         Distributions currently ship various libraries in their packages, with
-         different bit depths.
-         This change now allows to provide them all at configure time and have
-         the x264enc element dynamically switch between them based on the bit
-         depth of the input format.
-         https://bugzilla.gnome.org/show_bug.cgi?id=763297
-
-2016-11-01 18:09:25 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-         meson: update version
-
-=== release 1.11.0 ===
-
-2016-11-01 18:53:15 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * configure.ac:
-         Back to development
-
-=== release 1.10.0 ===
-
-2016-11-01 18:05:31 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpg123.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.10.0
-
-2016-11-01 17:54:16 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2016-11-01 17:43:01 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/id.po:
-       * po/sv.po:
-         po: Update translations
-
-2016-10-25 08:54:52 -0700  Scott D Phillips <scott.d.phillips@intel.com>
-
-       * meson.build:
-       * tests/meson.build:
-         meson: Don't depend on gstreamer-check-1.0 on windows
-         https://bugzilla.gnome.org/show_bug.cgi?id=773114
-
-2016-10-25 10:51:08 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
-
-       * meson.build:
-       * tests/check/meson.build:
-       * tests/meson.build:
-         Revert "meson: move gstreamer-check-1.0 dependency to tests/check"
-         This reverts commit 0555c09607e548b6c45d029ab31dbb3042195ae3.
-         Does not actually work. See:
-         https://bugzilla.gnome.org/show_bug.cgi?id=773114#c31
-
-2016-10-24 00:35:23 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * tests/check/meson.build:
-         meson: fix build outside of gst-all
-
-2016-10-21 00:47:14 -0700  Scott D Phillips <scott.d.phillips@intel.com>
-
-       * meson.build:
-       * tests/check/meson.build:
-       * tests/meson.build:
-         meson: move gstreamer-check-1.0 dependency to tests/check
-         https://bugzilla.gnome.org/show_bug.cgi?id=773114
-
-2016-10-15 22:20:05 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
-
-       * meson.build:
-         meson: Don't set c_std to gnu99
-         Use the default for each compiler on every platform instead. This
-         improves our compatibility with compilers that don't have gnu99 as
-         a c_std.
-
-2016-10-04 18:06:09 -0300  Thibault Saunier <thibault.saunier@osg.samsung.com>
-
-       * meson.build:
-       * tests/check/getpluginsdir:
-       * tests/check/meson.build:
-         meson: Make use of new environment object and set plugin path to builddir
-         Workaround source_root being the root directory of all projects
-         in the subproject case and remove now unneeded getpluginsdir
-         Bump meson requirement to 0.35
-
-2016-09-30 11:35:40 -0300  Thibault Saunier <thibault.saunier@osg.samsung.com>
-
-       * hooks/pre-commit.hook:
-       * meson.build:
-       * tests/check/getpluginsdir:
-         meson: Setup pre commit hook and fix getpluginsdir for standalone case
-
-2016-09-30 11:41:28 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-         meson: update version
-
-=== release 1.9.90 ===
-
-2016-09-30 13:03:26 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpg123.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.9.90
-
-2016-09-30 12:23:17 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2016-09-30 11:44:22 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/id.po:
-       * po/sv.po:
-         po: Update translations
-
-2016-09-29 12:39:34 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Set colorimetry and chroma-site information
-         https://bugzilla.gnome.org/show_bug.cgi?id=772159
-
-2016-09-24 09:08:00 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-       * po/meson.build:
-         meson: hook up translations
-
-2016-09-24 08:59:55 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * meson.build:
-       * tests/check/getpluginsdir:
-       * tests/check/meson.build:
-       * tests/meson.build:
-         meson: hook up unit tests
-
-2016-09-14 11:30:58 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * configure.ac:
-         configure: Depend on gstreamer 1.9.2.1
-
-2016-09-10 20:51:36 +1000  Jan Schmidt <jan@centricular.com>
-
-       * autogen.sh:
-       * common:
-         Automatic update of common submodule
-         From b18d820 to f980fd9
-
-2016-09-10 09:54:15 +1000  Jan Schmidt <jan@centricular.com>
-
-       * autogen.sh:
-       * common:
-         Automatic update of common submodule
-         From f49c55e to b18d820
-
-2016-09-05 12:22:56 -0300  Thibault Saunier <thibault.saunier@osg.samsung.com>
-
-       * meson.build:
-         meson: Bump version to 1.9.2
-
-2016-09-01 12:28:57 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * configure.ac:
-         Back to development
-
-=== release 1.9.2 ===
-
-2016-09-01 12:28:45 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpg123.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.9.2
-
-2016-09-01 11:24:13 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         po: Update translations
-
-2016-09-01 10:57:46 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * ext/sidplay/gstsiddec.cc:
-         siddec: Fix compilation with debugging disabled
-         gstsiddec.o
-         gstsiddec.cc: In function ‘void play_loop(GstPad*)’:
-         gstsiddec.cc:446:18: error: unused variable ‘reason’ [-Werror=unused-variable]
-         const gchar *reason = gst_flow_get_name (ret);
-         ^
-
-2016-08-19 11:11:14 -0700  Thibault Saunier <thibault.saunier@osg.samsung.com>
-
-       * ext/sidplay/gstsiddec.cc:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/realmedia/rmdemux.c:
-         Use the new API to post flow ERROR messages on the bus
-         https://bugzilla.gnome.org/show_bug.cgi?id=770158
-
-2016-08-24 09:45:05 -0300  Thibault Saunier <tsaunier@gnome.org>
-
-       * gst/asfdemux/meson.build:
-         meson: Link asfdemux against the gstsdp library
-
-2016-08-23 15:29:10 -0300  Thibault Saunier <tsaunier@gnome.org>
-
-       * meson.build:
-         meson: Add support for fallback subprojects
-
-2016-08-12 21:25:34 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
-
-       * .gitignore:
-       * config.h.meson:
-       * ext/a52dec/meson.build:
-       * ext/amrnb/meson.build:
-       * ext/amrwbdec/meson.build:
-       * ext/cdio/meson.build:
-       * ext/dvdread/meson.build:
-       * ext/lame/meson.build:
-       * ext/mad/meson.build:
-       * ext/meson.build:
-       * ext/mpeg2dec/meson.build:
-       * ext/mpg123/meson.build:
-       * ext/twolame/meson.build:
-       * ext/x264/meson.build:
-       * gst/asfdemux/meson.build:
-       * gst/dvdlpcmdec/meson.build:
-       * gst/dvdsub/meson.build:
-       * gst/meson.build:
-       * gst/realmedia/meson.build:
-       * gst/xingmux/meson.build:
-       * meson.build:
-         Add support for Meson as alternative/parallel build system
-         https://github.com/mesonbuild/meson
-         With contributions from:
-         Tim-Philipp Müller <tim@centricular.com>
-         Jussi Pakkanen <jpakkane@gmail.com> (original port)
-         Highlights of the features provided are:
-         * Faster builds on Linux (~40-50% faster)
-         * The ability to build with MSVC on Windows
-         * Generate Visual Studio project files
-         * Generate XCode project files
-         * Much faster builds on Windows (on-par with Linux)
-         * Seriously fast configure and building on embedded
-         ... and many more. For more details see:
-         http://blog.nirbheek.in/2016/05/gstreamer-and-meson-new-hope.html
-         http://blog.nirbheek.in/2016/07/building-and-developing-gstreamer-using.html
-         Building with Meson should work on both Linux and Windows, but may
-         need a few more tweaks on other operating systems.
-
-2016-08-12 21:41:39 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/dvdread/dvdreadsrc.c:
-       * ext/x264/gstx264enc.h:
-       * gst/realmedia/realhash.c:
-       * gst/realmedia/rtspreal.c:
-         plugins: Use <stdint.h> instead of _stdint.h
-         _stdint.h is generated by Autotools and we don't really need it. All
-         supported platforms now ship with stdint.h. The only stickler was MSVC,
-         and since Visual Studio 2015 it also ships stdint.h now.
-
-2016-08-19 13:01:39 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/mpeg2dec/perftest.c:
-         mpeg2dec: remove file no longer used or needed
-
-2016-08-08 09:58:20 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * gst/dvdlpcmdec/Makefile.am:
-         dvdlpcmdec: add libgstbase CFLAGS as well
-         For consistency.
-         https://bugzilla.gnome.org/show_bug.cgi?id=769610
-
-2016-08-07 00:10:24 +0000  xlazom00 <xlazom00@gmail.com>
-
-       * gst/dvdlpcmdec/Makefile.am:
-         dvdlpcmdec: link libgstbase-1.0
-         https://bugzilla.gnome.org/show_bug.cgi?id=769610
-
-2016-08-02 13:38:25 +0200  Carlos Rafael Giani <dv@pseudoterminal.org>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Add byte rate based bitrate tag in case there are no audio props
-         https://bugzilla.gnome.org/show_bug.cgi?id=769418
-
-2016-04-28 16:42:43 +0200  Michael Olbrich <m.olbrich@pengutronix.de>
-
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.h:
-         dvdlpcmdec: add support for another format
-         The format specification can be found here:
-         http://www.dvdforum.org/images/Guideline1394V10R0_20020911.pdf
-         Note: This format is also used for Wifi-Display.
-         https://bugzilla.gnome.org/show_bug.cgi?id=765807
-
-2016-04-28 16:32:53 +0200  Michael Olbrich <m.olbrich@pengutronix.de>
-
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.h:
-         dvdlpcmdec: rewrite to use GstAudioDecoder
-         https://bugzilla.gnome.org/show_bug.cgi?id=765807
-
-2016-07-24 10:00:48 +0200  Josep Torra <n770galaxy@gmail.com>
-
-       * ext/sidplay/gstsiddec.cc:
-         sidplay: fix compiler warnings when building with -O3
-         Avoid compiler warnings "‘foo’ may be used uninitialized in this
-         function" when building with -O3 by checking the return bool value
-         of format conversion function.
-         https://bugzilla.gnome.org/show_bug.cgi?id=769116
-
-2016-07-11 21:14:06 +0200  Stefan Sauer <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From f363b32 to f49c55e
-
-2016-07-06 13:51:09 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * configure.ac:
-         Back to development
-
-=== release 1.9.1 ===
-
-2016-07-06 13:15:28 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpg123.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.9.1
-
-2016-07-06 11:54:01 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2016-07-06 10:19:44 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/hr.po:
-         po: Update translations
-
-2016-06-21 11:46:53 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * common:
-         Automatic update of common submodule
-         From ac2f647 to f363b32
-
-2015-05-12 11:08:55 +0300  Vootele Vesterblom <vov@bang-olufsen.dk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: fix seeking back after EOS has been reached in push mode
-         Fix seeking when demuxer is in INDEX state. This happens when we
-         reached the end of the stream. It should still be possible to do
-         a flushing seek and seek back to any other position though. Instead
-         the demuxer would just go straight to EOS again instead of going
-         back to processing packets again from the new position.
-         https://bugzilla.gnome.org/show_bug.cgi?id=749066
-
-2016-05-17 16:00:29 +0300  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
-
-       * gst/realmedia/rdtmanager.c:
-         rdtmanager: fix clock leak
-         The clock returned by gst_system_clock_obtain() was never unreffed.
-         https://bugzilla.gnome.org/show_bug.cgi?id=766565
-
-2016-05-15 13:33:30 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpg123.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-         docs: Update for git master
-
-2016-04-16 09:15:43 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/amrnb/amrnbdec.c:
-       * ext/mad/gstmad.c:
-         amrnbec, mad: fix two more parse function declarations
-
-2016-04-15 20:46:37 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/amrwbdec/amrwbdec.c:
-         a52dec, amrwbec: fix parse function declaration mismatch
-         Fixes MSVC compiler warning:
-         amrwbdec.c(99): warning C4133: '=': incompatible types
-         - from 'gboolean (__cdecl *)(GstAudioDecoder *,GstAdapter *,gint *,gint *)' to
-         'GstFlowReturn (__cdecl *)(GstAudioDecoder *,GstAdapter *,gint *,gint *)'
-         gsta52dec.c(156): warning C4133: '=': incompatible types
-         - from 'gboolean (__cdecl *)(GstAudioDecoder *,GstAdapter *,gint *,gint *)' to
-         'GstFlowReturn (__cdecl *)(GstAudioDecoder *,GstAdapter *,gint *,gint *)'
-
-2016-04-15 19:55:03 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/mpg123/gstmpg123audiodec.h:
-         mpg123: fix build with msvc
-         Fix syntax errors when compiling against cerbero-provided libmpg123
-         headers. We do the same as the libmpg123 internal visual studio
-         build here.
-         mpg123.h(1378): error C2143: syntax error: missing ')' before '('
-         mpg123.h(1378): error C2081: 'ssize_t': name in formal parameter list illegal
-         mpg123.h(1378): error C2143: syntax error: missing ')' before '*'
-         mpg123.h(1378): error C2091: function returns function
-         mpg123.h(1378): error C2143: syntax error: missing '{' before '*'
-         mpg123.h(1378): error C2059: syntax error: ')'
-         mpg123.h(1379): error C2143: syntax error: missing ')' before '*'
-         mpg123.h(1379): error C2365: 'off_t': redefinition; previous definition was 'typedef'
-         ...
-
-2016-04-15 18:37:42 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * configure.ac:
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: bump libmpeg2 requirement to 0.5.1 and fix msvc build
-         libmpeg2 0.5.1 was released in mid-2008, let's bump the requirement
-         and get rid of version-dependent code paths. There's still
-         avdec_mpeg2video for those who are stuck on ancient distros which
-         we don't target any more.
-         Also fixes build with MSVC, which doesn't like #if #else #endif
-         inside macro arguments (like the GST_DEBUG_OBJECT in line 941).
-
-2016-04-14 10:02:50 +0100  Julien Isorce <j.isorce@samsung.com>
-
-       * README:
-       * common:
-         Automatic update of common submodule
-         From 6f2d209 to ac2f647
-
-2016-03-04 16:14:44 +0900  Vineeth TM <vineeth.tm@samsung.com>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbenc.c:
-       * ext/amrwbdec/amrwbdec.c:
-       * ext/dvdread/dvdreadsrc.c:
-       * ext/lame/gstlamemp3enc.c:
-       * ext/mad/gstmad.c:
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/sidplay/gstsiddec.cc:
-       * ext/twolame/gsttwolamemp2enc.c:
-       * ext/x264/gstx264enc.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstrtpasfdepay.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/dvdsub/gstdvdsubdec.c:
-       * gst/dvdsub/gstdvdsubparse.c:
-       * gst/realmedia/pnmsrc.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rdtdepay.c:
-       * gst/realmedia/rdtmanager.c:
-       * gst/realmedia/rmdemux.c:
-       * gst/xingmux/gstxingmux.c:
-         ugly: use new gst_element_class_add_static_pad_template()
-         https://bugzilla.gnome.org/show_bug.cgi?id=763082
-
-2016-03-24 13:33:22 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * configure.ac:
-         Back to development
-
-=== release 1.8.0 ===
-
-2016-03-24 12:43:04 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpg123.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.8.0
-
-2016-03-24 12:18:09 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-=== release 1.7.91 ===
-
-2016-03-15 12:21:07 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpg123.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.7.91
-
-2016-03-15 12:03:34 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2016-03-08 12:26:01 +0100  Edward Hervey <edward@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: Don't modify segment values on accurate seeks
-         When dealing with accurate seeks, we want to return exactly the segment
-         that was requested by the seek event, and not adjust the values.
-         https://bugzilla.gnome.org/show_bug.cgi?id=755469
-
-=== release 1.7.90 ===
-
-2016-03-01 18:42:01 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpg123.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.7.90
-
-2016-03-01 17:18:01 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2016-03-01 16:54:07 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/bg.po:
-         po: Update translations
-
-2016-02-27 20:17:31 +0100  Jens Georg <mail@jensge.org>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdread: Fix seek starting at 0 for title != 1
-         Otherwise the playback would start at title 0
-         https://bugzilla.gnome.org/show_bug.cgi?id=762787
-
-2016-02-26 12:41:18 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * common:
-         Automatic update of common submodule
-         From b64f03f to 6f2d209
-
-2016-02-22 22:08:12 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: fix adding bitrate to stream tags
-         https://bugzilla.gnome.org/show_bug.cgi?id=699586
-
-2016-02-21 10:11:12 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * gst/asfdemux/asf.vcproj:
-       * gst/realmedia/rmdemux.vcproj:
-       * win32/MANIFEST:
-       * win32/gst.sln:
-       * win32/vs6/gst_plugins_ugly.dsw:
-       * win32/vs6/libgstasfdemux.dsp:
-       * win32/vs6/libgstdvdlpcmdec.dsp:
-       * win32/vs6/libgstdvdsub.dsp:
-       * win32/vs6/libgstlame.dsp:
-       * win32/vs6/libgstmad.dsp:
-       * win32/vs6/libgstrealmedia.dsp:
-       * win32/vs6/libgstsynaesthesia.dsp:
-         win32: remove outdated build cruft
-         This hasn't been touched for generations, doesn't work,
-         and is just causing confusion. We also don't want to
-         maintain these files manually.
-
-2016-02-20 11:55:37 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: don't use exported but undeclared core debug category symbols
-         It's not right and won't work on Windows with MSVC.
-
-2016-02-19 12:38:34 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * configure.ac:
-         Back to development
-
-=== release 1.7.2 ===
-
-2016-02-19 11:58:13 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpg123.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.7.2
-
-2016-02-19 11:21:03 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2016-02-19 10:32:06 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/fr.po:
-       * po/pt_BR.po:
-         po: Update translations
-
-2016-02-18 00:25:56 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * ext/sidplay/gstsiddec.cc:
-         sidplay: Fix compiler warning about C++11 compatibility
-         gstsiddec.cc:78:17: error: invalid suffix on literal; C++11 requires a space between literal and string macro [-Werror=literal-suffix]
-         #define FORMATS "{ "GST_AUDIO_NE(S16)","GST_AUDIO_NE(U16)", S8, U8 }"
-         ^
-         gstsiddec.cc:78:38: error: invalid suffix on literal; C++11 requires a space between literal and string macro [-Werror=literal-suffix]
-         #define FORMATS "{ "GST_AUDIO_NE(S16)","GST_AUDIO_NE(U16)", S8, U8 }"
-         ^
-
-2016-02-16 14:46:11 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpg123.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-         docs: update inspection to git and fix mpg123 inspect location
-
-2016-02-16 12:23:33 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * tests/files/Makefile.am:
-       * tests/files/stream.mp2:
-         tests: fix distcheck
-
-2016-02-16 10:38:18 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-       * docs/plugins/xml/plugin-mpg123.xml:
-       * ext/Makefile.am:
-       * gst-plugins-ugly.spec.in:
-       * tests/check/Makefile.am:
-         mpg123: move from -bad to -ugly
-         Hook up to build system, add to docs
-
-2016-02-16 10:55:01 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * configure.ac:
-       * tests/Makefile.am:
-       * tests/check/Makefile.am:
-       * tests/check/elements/.gitignore:
-       * tests/files/Makefile.am:
-       * tests/files/cbr_stream.mp3:
-       * tests/files/vbr_stream.mp3:
-         tests: add test data for mpg123 plugin
-
-2016-02-16 10:41:07 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-         Merge branch 'plugin-move-mpg123'
-         Move mpg123 plugin from -bad to -ugly.
-         https://bugzilla.gnome.org/show_bug.cgi?id=719849
-
-2015-12-14 11:09:46 +0900  Vineeth TM <vineeth.tm@samsung.com>
-
-       * ext/mpg123/gstmpg123audiodec.c:
-         plugins-bad: Fix example pipelines
-         rename gst-launch --> gst-launch-1.0
-         replace old elements with new elements(ffmpegcolorspace -> videoconvert, ffenc_** -> avenc_**)
-         fix caps in examples
-         https://bugzilla.gnome.org/show_bug.cgi?id=759432
-
-2015-08-17 11:50:28 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/mpg123/gstmpg123audiodec.c:
-         mpg123: still reset pending audio info on hard flush
-         Follow-up to previous commit.
-         https://bugzilla.gnome.org/show_bug.cgi?id=752431
-
-2015-07-15 10:44:02 -0600  Jason Litzinger <jlitzinger@control4.com>
-
-       * ext/mpg123/gstmpg123audiodec.c:
-         mpg123: fix handling of sample rate change during playback
-         If the sample rate of the media changes, the resulting flush will
-         clear the has_next_audioinfo flag, and the caps won't be sent
-         downstream.
-         https://bugzilla.gnome.org/show_bug.cgi?id=752431
-
-2015-08-15 12:58:40 -0300  Thiago Santos <thiagoss@osg.samsung.com>
-
-       * ext/mpg123/gstmpg123audiodec.c:
-         audiodecoders: use default pad accept-caps handling
-         Avoids useless check of downstream caps when handling an
-         accept-caps query
-         Elements: dtsdec, faad, gsmdec, mpg123audiodec, opusdec,
-         sbcdec, adpcmdec, sirendec
-
-2015-04-26 18:04:16 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/mpg123/Makefile.am:
-         Remove obsolete Android build cruft
-         This is not needed any longer.
-
-2015-01-11 01:08:08 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/mpg123/gstmpg123audiodec.c:
-         mpg123: fix compiler warning and simplify checks in set_caps
-         https://bugzilla.gnome.org/show_bug.cgi?id=740195
-
-2015-01-03 13:06:45 +0100  Carlos Rafael Giani <dv@pseudoterminal.org>
-
-       * ext/mpg123/gstmpg123audiodec.c:
-         mpg123: rework set_format code so mpg123audiodec works with decodebin/playbin
-         The old code was using gst_caps_normalize() and was generally overly
-         complex. Simplify by picking sample rate and number of channels from
-         upstream and the sample format from the allowed caps. If the format caps
-         is a list of strins, just pick the first one. And if the srcpad isn't
-         linked yet, use the default format (S16).
-         https://bugzilla.gnome.org/show_bug.cgi?id=740195
-
-2014-09-10 17:24:39 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/mpg123/gstmpg123audiodec.c:
-         Fix up one-element lists in template caps
-
-2014-03-05 00:51:04 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * tests/check/elements/mpg123audiodec.c:
-         tests: fix mpg123audiodec test for big-endian architectures
-
-2014-02-04 17:22:27 +0100  Carlos Rafael Giani <dv@pseudoterminal.org>
-
-       * ext/mpg123/gstmpg123audiodec.c:
-         mpg123: improved error report and checks
-         Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
-
-2013-12-05 12:04:39 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-       * ext/mpg123/gstmpg123audiodec.c:
-         mpg123audiodec: Require caps to be set before any data processing
-
-2013-07-26 17:25:42 +0200  Edward Hervey <edward@collabora.com>
-
-       * ext/mpg123/gstmpg123audiodec.c:
-         mpg123: Remove dead assignment
-         harder ? :)
-
-2013-05-15 11:25:07 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * tests/check/elements/mpg123audiodec.c:
-         mpg123audiodec: Fix event handling in unit test
-
-2012-10-24 12:16:39 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/mpg123/Makefile.am:
-         gst: Add better support for static plugins
-
-2013-04-15 00:22:39 -0700  David Schleef <ds@schleef.org>
-
-       * ext/mpg123/gstmpg123audiodec.c:
-         mpg123: Add conditional on API version for new enum
-
-2016-02-05 19:11:38 -0300  Thiago Santos <thiagoss@osg.samsung.com>
-
-       * tests/check/Makefile.am:
-         tests: extend the AM_TESTS_ENVIRONMENT from check.mak
-         To get the CK_DEFAULT_TIMEOUT defined for all tests
-         https://bugzilla.gnome.org/show_bug.cgi?id=761472
-
-2016-02-05 18:07:02 -0300  Thiago Santos <thiagoss@osg.samsung.com>
-
-       * autogen.sh:
-       * common:
-         Automatic update of common submodule
-         From 86e4663 to b64f03f
-
-2016-01-25 20:00:26 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * configure.ac:
-       * ext/amrnb/amrnbdec.h:
-       * ext/amrnb/amrnbenc.h:
-       * ext/amrwbdec/amrwbdec.h:
-         amrnb, amrwb: unconditionally depend on opencore-amr*b >= 0.1.3
-         We don't really need to cater for older versions any more.
-
-2016-01-21 17:34:38 +0100  Edward Hervey <edward@centricular.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Demote rank to SECONDARY
-         https://bugzilla.gnome.org/show_bug.cgi?id=574461
-
-2016-01-08 21:40:53 -0300  Thiago Santos <thiagoss@osg.samsung.com>
-
-       * gst/dvdsub/gstdvdsubdec.c:
-         dvdsubdec: use query caps instead of accept-caps
-         accept-caps does only a shallow check and a full downstream
-         caps query is needed to check if ARGB is possible
-
-2015-10-30 11:06:11 +0530  Ravi Kiran K N <ravi.kiran@samsung.com>
-
-       * gst/asfdemux/asfpacket.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: Support reverse playback
-         Support reverse playback for ASF format.
-         Parse packets and queue the payloads, then push
-         the payload buffer to decoder in reverse order.
-         Video buffers are pushed from KeyFrame to next
-         Keyframe.
-         https://bugzilla.gnome.org/show_bug.cgi?id=757341
-
-2015-12-24 15:28:46 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-       * configure.ac:
-         Back to development
-
-2015-12-24 14:48:50 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-       * tests/check/elements/amrnbenc.c:
-         amrnbenc: Fix various compiler warnings in the test
-
-2015-12-24 14:48:38 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-       * tests/check/elements/x264enc.c:
-         x264enc: Fix various compiler warnings in the test
-
-=== release 1.7.1 ===
-
-2015-12-24 14:41:21 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.7.1
-
-2015-12-24 14:10:29 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2015-12-24 12:23:27 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/id.po:
-       * po/sv.po:
-         po: Update translations
-
-2015-12-21 12:32:32 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-       * configure.ac:
-         configure: Use -Bsymbolic-functions if available
-         While this is more useful for libraries, some of our plugins with multiple
-         files and some internal API can also benefit from this.
-
-2015-12-16 09:36:08 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-         docs: update to git
-
-2015-12-07 09:08:18 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
-
-       * autogen.sh:
-       * common:
-         Automatic update of common submodule
-         From b319909 to 86e4663
-
-2015-11-26 15:49:47 +0000  Arjen Veenhuizen <arjen.veenhuizen@tno.nl>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: increase bitrate limit from 100Mbps to 2Gbps
-         Don't artificially limit the bitrate, x264enc allows much
-         higher bitrates, and for intra-only 4k AVC they are needed.
-         x264 clips to 2Gbps internally, so use that as limit for now.
-         https://bugzilla.gnome.org/show_bug.cgi?id=758620
-
-2015-11-18 23:20:59 -0800  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: drop unnecessary NULL check before g_free
-
-2015-10-21 14:35:17 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * common:
-         Automatic update of common submodule
-         From b99800a to b319909
-
-2015-10-20 17:29:42 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * configure.ac:
-         Use new GST_ENABLE_EXTRA_CHECKS #define
-         https://bugzilla.gnome.org/show_bug.cgi?id=756870
-
-2015-10-21 14:26:07 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * README:
-       * common:
-         Automatic update of common submodule
-         From 9aed1d7 to b99800a
-
-2015-10-02 22:24:46 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * configure.ac:
-         Update GLib dependency to 2.40.0
-
-2015-09-29 14:16:07 -0700  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
-
-       * ext/dvdread/README:
-         dvdread: remove broken link
-         Removing instead of updating as previously pointed-to page
-         (now http://dvd.sourceforge.net/dvdinfo/) is already linked
-         from dvd.sourceforge.net's homepage as: "Collection of
-         information on file formats/data structures relating to DVD
-         navigation/SPUs."
-
-2015-09-26 09:23:05 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-         dvdlpcmdec: fix invalid read beyond channel position array
-         We would always copy sizeof(sorted_position) bytes, which is
-         for 8 channels, but if we have less than 8 channels the
-         position array we copy from will only have allocated space
-         for channel channels, so we would read beyond the input
-         array in some cases.
-
-2015-08-25 10:08:46 +0900  HoonHee Lee <hoonhee.lee@lge.com>
-
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-         dvdlpcmdec: factor out common code to set output format into new function
-         When caps event is recieved and header is changed, reordering channel
-         and setting the default output format for audio are processed. These 2 of
-         code are same. Thus, It is better to make a new function for these common
-         code in terms of removing duplicated code, maintenance and expansion.
-         https://bugzilla.gnome.org/show_bug.cgi?id=753920
-
-2015-09-23 20:45:34 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Don't push any data on pads after the segment.stop
-         https://bugzilla.gnome.org/show_bug.cgi?id=755469
-
-2015-09-23 20:30:21 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: Only change segment start to a keyframe for KEYUNIT seeks
-         Not for accurate seeks, which should accurately start at the requested
-         position.
-         https://bugzilla.gnome.org/show_bug.cgi?id=755469
-
-2015-09-23 20:23:40 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Update segment.position when pushing buffers
-         Without this, non-flushing seeks are not going to work well.
-         https://bugzilla.gnome.org/show_bug.cgi?id=755469
-
-2015-09-23 19:37:43 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Only push EOS event if we're not doing a segment seek
-         https://bugzilla.gnome.org/show_bug.cgi?id=755469
-
-2015-09-23 16:31:28 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: If pushing buffers returned EOS, go into the EOS and not failure code path
-         We don't want to unconditionally send an EOS event downstream, but might want
-         to send a SEGMENT_DONE message/event instead if a segment seek was done
-         before.
-         https://bugzilla.gnome.org/show_bug.cgi?id=755469
-
-2015-09-25 23:51:12 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * configure.ac:
-         Back to development
-
-=== release 1.6.0 ===
-
-2015-09-25 23:32:02 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.6.0
-
-2015-09-25 23:04:56 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-=== release 1.5.91 ===
-
-2015-09-18 20:01:17 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.5.91
-
-2015-09-18 19:34:50 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2015-09-18 11:53:57 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/zh_CN.po:
-         po: Update translations
-
-2015-09-05 23:34:45 +1000  Jan Schmidt <jan@centricular.com>
-
-       * ext/x264/gstx264enc.c:
-         x264: Add bitrate info to the tags output.
-         Makes it possible for muxers to know the target bitrate as soon
-         as encoding starts, which flvmux now uses.
-
-2015-08-28 19:18:32 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: fix file mode of some source files
-
-=== release 1.5.90 ===
-
-2015-08-19 14:05:27 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.5.90
-
-2015-08-19 12:55:35 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2015-08-19 11:33:01 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/id.po:
-       * po/sv.po:
-         po: Update translations
-
-2015-08-18 02:23:55 -0300  Thiago Santos <thiagoss@osg.samsung.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: actually return TRUE from accept-caps handler
-         The query was handled
-
-2015-08-16 14:27:44 -0300  Thiago Santos <thiagoss@osg.samsung.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: implement accept-caps handling
-         Implement accept-caps handling without doing caps queries downstream
-
-2015-08-15 22:15:26 -0300  Thiago Santos <thiagoss@osg.samsung.com>
-
-       * ext/amrnb/amrnbenc.c:
-       * ext/lame/gstlamemp3enc.c:
-       * ext/twolame/gsttwolamemp2enc.c:
-         audioencoders: use template subset check for accept-caps
-         It is faster than doing a query that propagates downstream and
-         should be enough
-         Elements: amrnbenc, lamemp3enc, twolamemp2enc
-
-2015-08-15 11:46:59 -0300  Thiago Santos <thiagoss@osg.samsung.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: use default pad accept-caps handling
-         Avoids useless check of downstream caps when handling an
-         accept-caps query
-
-2015-08-15 11:46:13 -0300  Thiago Santos <thiagoss@osg.samsung.com>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrwbdec/amrwbdec.c:
-       * ext/mad/gstmad.c:
-         audiodecoders: use default pad accept-caps handling
-         Avoids useless check of downstream caps when handling an
-         accept-caps query
-         Elements: a52dec, amrnbdec, amrwbdec, mad
-
-2015-08-14 11:14:31 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * tests/check/generic/states.c:
-         check: Rename states unit test
-         Makes it easier to differentiate from other modules states unit test
-
-2015-08-06 10:05:53 +0900  Vineeth TM <vineeth.tm@samsung.com>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: fix assertion error when freeing old tags.
-         Check if old_tags is present before calling gst_tag_list_unref
-         https://bugzilla.gnome.org/show_bug.cgi?id=753301
-
-2015-07-24 10:08:34 +0900  Vineeth TM <vineeth.tm@samsung.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: fix assertion error when codec_data is not present in structure
-         When discovering a particular asf file, caps structure doesn't have
-         codec_data, and this was not being checked before using the same,
-         resulting in assertion error
-         https://bugzilla.gnome.org/show_bug.cgi?id=752803
-
-2015-07-29 15:55:14 +0100  Luis de Bethencourt <luis@debethencourt.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: remove unread value
-         Init value of idx2 is never used. First usage sets it to idx + 1. Removing
-         initial value.
-
-2015-07-25 04:55:15 -0400  Olivier Crête <olivier.crete@collabora.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Don't post error on flushing while reading headers
-
-2015-07-21 11:13:27 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: mark tag list as global scope
-
-2015-07-21 11:10:04 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: fix taglist leak
-         merge doesn't take ownership, so must unref the
-         old tags if we do merge.
-
-2015-07-21 12:44:55 +0900  Vineeth TM <vineeth.tm@samsung.com>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: fix wrong unref when there are no tags
-         Tags should be appended to pending tags and unref'ed only if tags
-         are present. Else there is no need to append.
-         https://bugzilla.gnome.org/show_bug.cgi?id=752404
-
-2015-07-16 18:11:37 +0900  Vineeth T M <vineeth.tm@samsung.com>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: fix memory leaks during error cases
-         while adding stream, during error cases, only stream is
-         being freed. Adapter, pad, tags, subpackets, index are not being
-         freed resulting in memory leaks
-         https://bugzilla.gnome.org/show_bug.cgi?id=752404
-
-2015-07-16 17:23:15 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * gst-plugins-ugly.doap:
-         Update mailing list in doap file as well
-
-2015-07-16 17:19:37 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/amrnb/amrnbdec.c:
-         Update mailing list address from sourceforge to freedesktop
-
-2015-07-16 09:49:17 +0900  Vineeth T M <vineeth.tm@samsung.com>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: fix tag memory leak
-         tags is not being freed after being merged to the
-         pending_tags.
-         https://bugzilla.gnome.org/show_bug.cgi?id=752404
-
-2015-07-03 21:58:33 +0200  Stefan Sauer <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From f74b2df to 9aed1d7
-
-2015-06-25 00:04:19 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * configure.ac:
-         Back to development
-
-=== release 1.5.2 ===
-
-2015-06-24 23:39:37 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.5.2
-
-2015-06-24 23:14:52 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2015-06-24 11:15:22 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/nl.po:
-         po: Update translations
-
-2015-06-15 16:33:26 +1000  Jan Schmidt <jan@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Use gst_video_multiview_guess_half_aspect() function
-         Use gst_video_multiview_guess_half_aspect() to guess if frame-packed
-         stereoscopic video is full-frame per view or not.
-
-2015-06-16 17:49:05 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 6015d26 to f74b2df
-
-2014-11-26 22:15:43 +0100  Matej Knopp <matej.knopp@gmail.com>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264enc: Use gst_video_encoder_set_min_pts
-         This method replace the manual adjustment of PTS and DTS to avoid
-         negative DTS issues. Using this method will also update the segment so
-         we don't loos sync.
-         https://bugzilla.gnome.org/show_bug.cgi?id=740575
-
-2015-06-10 14:28:05 +1000  Jan Schmidt <jan@centricular.com>
-
-       * gst/asfdemux/Makefile.am:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: Add support for stereoscopic video metadata.
-         Add parsing of stereoscopic metadata, and place into the caps to
-         the decoder.
-         Fix parsing of Advanced Mutual Exclustion objects.
-         https://bugzilla.gnome.org/show_bug.cgi?id=711190
-         Based on a patch by HyeJin Choi <meeshel78@hotmail.com>
-
-2014-10-05 00:54:59 +1000  Jan Schmidt <jan@centricular.com>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264enc: Add support for stereoscopic video
-         Provide new frame-packing property to directly set
-         x264enc frame packing, or pass through upstream settings
-         The explicit layout from the frame-packing property is
-         preferred over any info from the caps.
-
-2015-06-10 15:32:44 +0100  Chris Clayton <chris2553@googlemail.com>
-
-       * gst/xingmux/gstxingmux.c:
-         xingmux: fix compiler warnings
-         https://bugzilla.gnome.org/show_bug.cgi?id=750596
-
-2015-06-09 15:28:46 +0200  Stefan Sauer <ensonic@users.sf.net>
-
-       * Makefile.am:
-         cruft: add the obsolete tmpl dir to cruft-dirs
-
-2015-06-09 11:30:34 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * common:
-         Automatic update of common submodule
-         From d9a3353 to 6015d26
-
-2015-06-08 23:08:11 +0200  Stefan Sauer <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From d37af32 to d9a3353
-
-2015-06-07 23:06:47 +0200  Stefan Sauer <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From 21ba2e5 to d37af32
-
-2015-06-07 17:32:12 +0200  Stefan Sauer <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From c408583 to 21ba2e5
-
-2015-06-07 17:02:31 +0200  Stefan Sauer <ensonic@users.sf.net>
-
-       * docs/plugins/Makefile.am:
-         docs: remove variables that we define in the snippet from common
-         This is syncing our Makefile.am with upstream gtkdoc.
-
-2015-06-07 17:16:30 +0200  Stefan Sauer <ensonic@users.sf.net>
-
-       * autogen.sh:
-       * common:
-         Automatic update of common submodule
-         From d676993 to c408583
-
-2015-06-07 16:44:43 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * configure.ac:
-         Back to development
-
-=== release 1.5.1 ===
-
-2015-06-07 11:05:29 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.5.1
-
-2015-06-07 11:05:22 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2015-06-07 09:36:00 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/eo.po:
-       * po/fr.po:
-         po: Update translations
-
-2015-06-02 16:31:10 +0200  Edward Hervey <edward@centricular.com>
-
-       * tests/check/elements/amrnbenc.c:
-       * tests/check/elements/mpeg2dec.c:
-       * tests/check/elements/x264enc.c:
-       * tests/check/elements/xingmux.c:
-       * tests/check/pipelines/lame.c:
-         check: Use GST_CHECK_MAIN () macro everywhere
-         Makes source code smaller, and ensures we go through common initialization
-         path (like the one that sets up XML unit test output ...)
-
-2015-05-26 17:58:18 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: don't artificially limit max allowed value of "threads" property
-         In auto mode it will happily chose much higher values anyway,
-         and a limit of 4 seems a bit low these days.
-
-2015-05-12 22:05:02 +1000  Jan Schmidt <jan@centricular.com>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdread: Also reset the first_seek var in start()
-         Make the initial chapter seek work across reuse.
-         https://bugzilla.gnome.org/show_bug.cgi?id=453322
-
-2015-05-12 21:52:24 +1000  Jan Schmidt <jan@centricular.com>
-
-       * ext/dvdread/dvdreadsrc.c:
-       * ext/dvdread/dvdreadsrc.h:
-         dvdread: Work around basesrc initial seek
-         Ignore the initial seek basesrc sends, as it
-         breaks starting from another chapter by
-         immediately seeking back to the start of the title
-
-2015-05-10 11:34:33 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbenc.c:
-       * ext/amrwbdec/amrwbdec.c:
-       * ext/cdio/gstcdiocddasrc.c:
-       * ext/lame/gstlamemp3enc.c:
-       * ext/mad/gstmad.c:
-       * ext/sidplay/gstsiddec.cc:
-       * ext/twolame/gsttwolamemp2enc.c:
-       * ext/x264/gstx264enc.c:
-       * gst/realmedia/rademux.c:
-       * gst/xingmux/gstxingmux.c:
-         docs: update example pipelines in element docs
-         Mostly gst-launch -> gst-launch-1.0, but also
-         use autoaudiosink/autovideosink in more places
-         and update pipelines a little or flesh out
-         descriptions.
-
-2015-04-27 10:57:12 +0100  Luis de Bethencourt <luis.bg@samsung.com>
-
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/realmedia/rdtdepay.c:
-         Rename property enums from ARG_ to PROP_
-         Property enum items should be nameed PROP_ for consistency and readability.
-
-2015-04-26 17:56:22 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * Android.mk:
-       * ext/mad/Makefile.am:
-       * ext/x264/Makefile.am:
-       * gst/asfdemux/Makefile.am:
-       * gst/dvdlpcmdec/Makefile.am:
-       * gst/dvdsub/Makefile.am:
-       * gst/realmedia/Makefile.am:
-       * gst/xingmux/Makefile.am:
-         Remove obsolete Android build cruft
-         This is not needed any longer.
-
-2015-04-24 17:05:20 +0100  Luis de Bethencourt <luis.bg@samsung.com>
-
-       * gst/realmedia/pnmsrc.c:
-         realmedia: remove unused enum item PROP_LAST
-
-2015-04-23 16:23:01 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * tests/check/Makefile.am:
-         tests: define GST_CHECK_TEST_ENVIRONMENT_BEACON
-         Make sure the test environment is set up.
-         https://bugzilla.gnome.org//show_bug.cgi?id=747624
-
-2015-04-23 16:22:39 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * configure.ac:
-         configure: bump automake requirement to 1.14 and autoconf to 2.69
-         This is only required for builds from git, people can still
-         build tarballs if they only have older autotools.
-         https://bugzilla.gnome.org//show_bug.cgi?id=747624
-
-2015-04-23 16:22:30 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * .gitignore:
-         Update .gitignore
-
-2015-04-22 10:37:54 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * LICENSE_readme:
-         Remove LICENSE_readme
-         It's completely outdated and just confusing, better if people are
-         forced to look at the actual code in question than trusting this file.
-
-2015-04-22 10:37:43 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * INSTALL:
-         Remove INSTALL file
-         autotools automatically generate this, and when using different versions
-         for autogen.sh there will always be changes to a file tracked by git.
-
-2015-04-20 14:35:30 +0900  Cliff Han <cliff.han@lge.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: fix a seek failure due to out-of-range in push mode
-         A seek in push mode failed for big offsets which are beyond
-         the range of guint32.
-         https://bugzilla.gnome.org/show_bug.cgi?id=748162
-
-2015-04-08 16:52:06 +0200  Edward Hervey <edward@centricular.com>
-
-       * common:
-       * tests/check/Makefile.am:
-         tests: Use AM_TESTS_ENVIRONMENT
-         Needed by the new automake test runner
-
-2015-04-03 18:58:03 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * autogen.sh:
-       * common:
-         Automatic update of common submodule
-         From bc76a8b to c8fb372
-
-2015-04-02 17:24:05 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
-       * ext/a52dec/gsta52dec.c:
-         a52dec: fix race in liba52dec lookup table initialization
-         a52_init initializes the IMDCT global state as well as creating
-         a new state. When two A52 decoders are created (eg, when two AC3
-         tracks are contained in a video), calls to a52_init may happen
-         at the same time, and the IMDCT initialization is not reentrant.
-         https://bugzilla.gnome.org/show_bug.cgi?id=746781
-
-2015-03-27 14:41:51 +0100  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: fix buffer leak in crop_buffer()
-         gst_buffer_pool_acquire_buffer() gives us a new owned buffer while
-         gst_buffer_replace() reffed it as well so we were one reference extra.
-         https://bugzilla.gnome.org/show_bug.cgi?id=746887
-
-2015-03-28 16:58:26 +0100  Mark Nauwelaerts <mnauw@users.sourceforge.net>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: resurrect some flow return handling
-         https://bugzilla.gnome.org/show_bug.cgi?id=744572
-
-2015-03-28 16:57:06 +0100  Mark Nauwelaerts <mnauw@users.sourceforge.net>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: resurrect some flow return handling
-         https://bugzilla.gnome.org/show_bug.cgi?id=744572
-
-2015-03-24 12:50:43 +0000  Luis de Bethencourt <luis.bg@samsung.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: fix memory leak
-         CID #1291630
-
-2015-03-24 10:29:48 +0000  Luis de Bethencourt <luis.bg@samsung.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: initialize buffer
-         Buffer needs to be null before passing it to gst_buffer_pool_acquire_buffer()
-         CID #1291634
-
-2015-03-13 17:00:03 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Add stride support
-         This allow using external pools that have different strides from the
-         default. These strides need to respect certain rules, which we check
-         and if these are not met, we fallback to generic pool.
-         https://bugzilla.gnome.org/show_bug.cgi?id=735379
-
-2015-03-10 16:45:01 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/mpeg2dec/gstmpeg2dec.h:
-         mpeg2dec: Re-implement pool handling
-         This is a rewrite of the pool negotiation and configuration. Direct
-         to output decoding is now achieved by configuring the pool using
-         video-alignment. This removes copies when dealing with any elements that
-         supports VideoAlignment, and enable usage of generic video buffer pool,
-         XVImagePool and GLPool. It drops the crop meta implementation for now.
-         https://bugzilla.gnome.org/show_bug.cgi?id=735379
-
-2015-03-10 09:33:15 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * gst/dvdsub/gstdvdsubdec.c:
-         dvbsub: fix indentation
-
-2015-03-10 09:32:51 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/dvdread/dvdreadsrc.c:
-       * gst/dvdsub/gstdvdsubdec.c:
-         Fix double semicolons
-
-2015-03-09 19:11:51 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         Revert "mpeg2dec: Fix handling of stride"
-         This reverts commit f3e8dcb9de4d546e7d80ccc1754ed13dd4e7ac81.
-
-2015-03-09 19:11:44 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         Revert "mpeg2dec: Use propose unref method for buffer"
-         This reverts commit 63b43d3bee832aec353d02575da543f3c73f6893.
-
-2015-03-09 18:43:43 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Use propose unref method for buffer
-
-2015-01-21 18:29:22 +0000  Simon Farnsworth <simon.farnsworth@onelan.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Fix handling of stride
-         A pipeline like:
-         gst-launch-1.0 filesrc location=file.ts ! tsdemux ! mpegvideoparse ! mpeg2dec  ! vaapisink
-         would look bad when file.ts contains 704x576 video, because vaapisink would
-         give you buffers of stride 768, but libmpeg2 was not told about this and
-         used a stride of 704.
-         Tell libmpeg2 about the stride from  downstream; in the process, teach it to
-         reject buffer pools that don't meet libmpeg2's chroma stride requirements
-         Signed-off-by: Simon Farnsworth <simon.farnsworth@onelan.co.uk>
-
-2015-02-11 13:56:48 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-       * ext/x264/gstx264enc.c:
-       * gst/asfdemux/gstasfdemux.c:
-         Improve and fix LATENCY query handling
-         This now follows the design docs everywhere, especially the maximum latency
-         handling.
-         https://bugzilla.gnome.org/show_bug.cgi?id=744106
-
-2015-02-06 19:04:32 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Don't set max latency to the same value as the encoder latency
-         The meaning of the max latency is *not* the maximum latency this element will
-         introduce. It is the maximum latency this element can endure without
-         overflowing any buffers, which is infinite for x264enc.
-         Fixes latency configuration in zero latency mode, where max latency was
-         becoming 0... which usually won't work well if something else introduces
-         latency as then max < min in the end, and latency configuration just fails.
-
-2015-02-02 14:13:10 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: set annexb=1 in byte stream mode when downstream has ANY caps
-         This matches what is done when downstream caps are not ANY, and fixes
-         prerolling in byte stream mode when typefind is downstream.
-
-2015-01-21 09:56:41 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-       * ext/lame/gstlamemp3enc.c:
-       * ext/twolame/gsttwolamemp2enc.c:
-         Constify some static arrays everywhere
-
-2015-01-18 16:53:41 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * configure.ac:
-         configure: remove non-ported plugins stuff
-         It's not needed any longer, all plugins in -ugly
-         have been ported.
-
-2015-01-18 11:07:43 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Don't set an allocation maximum
-         There is no reason x264enc should enforce a maximum allocation size.
-         The maximum is normally set by buffer pool which cannot grow, but we
-         don't offer a buffer pool. This would lead to stall when used with
-         element that don't implement allocation query.
-         Related to: https://bugzilla.gnome.org/show_bug.cgi?id=738302
-
-2015-01-12 16:10:45 +0100  Stefan Sauer <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From f2c6b95 to bc76a8b
-
-2014-12-22 11:46:27 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-       * MAINTAINERS:
-         MAINTAINERS: Update my mail address
-
-2014-12-18 10:54:30 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-       * common:
-         Automatic update of common submodule
-         From ef1ffdc to f2c6b95
-
-2014-11-27 17:11:30 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * common:
-         Automatic update of common submodule
-         From 7bb2bce to ef1ffdc
-
-2014-06-06 13:59:57 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-         dvdlpcmdec: set channel positions using the appropriate API
-         https://bugzilla.gnome.org/show_bug.cgi?id=731038
-
-2014-11-05 23:34:56 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: fix comment
-
-2014-11-05 13:45:29 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Send duration query upstream first
-         An upstream element (like mms or some dlna source) might be able to
-         answer the query. Try that first, else fallback to standard logic
-
-2014-11-02 17:31:05 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * gst/asfdemux/asfpacket.c:
-         asf: fix up file mode
-
-2014-10-27 17:58:14 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-       * common:
-         Automatic update of common submodule
-         From 84d06cd to 7bb2bce
-
-2014-10-21 19:46:03 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * Makefile.am:
-         tests: parallelise 'make check-valgrind'
-
-2014-10-21 13:02:03 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * common:
-         Automatic update of common submodule
-         From a8c8939 to 84d06cd
-
-2014-10-21 12:58:58 +0200  Stefan Sauer <ensonic@users.sf.net>
-
-       * README:
-       * common:
-         Automatic update of common submodule
-         From 36388a1 to a8c8939
-
-2014-08-22 10:46:35 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: first try to delegate TIME seek events upstream
-         We should give a chance to upstream to handle TIME seek events before trying
-         to handle it in asfdemux.
-         Fix a bug where fast backward seeks where discarded right away because they
-         were not supported by asfdemux.
-         https://bugzilla.gnome.org/show_bug.cgi?id=734471
-
-2014-09-04 16:57:02 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
-
-       * gst/asfdemux/asfheaders.c:
-       * gst/asfdemux/asfheaders.h:
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: add ASF_OBJ_METADATA_LIBRARY_OBJECT
-         We can safely ignore those but best to claim to understand this object type so
-         we don't raise a warning.
-         https://bugzilla.gnome.org/show_bug.cgi?id=736060
-
-2014-08-21 12:09:23 -0300  Thiago Santos <thiagoss@osg.samsung.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: if video is h264, check the codec_data for bytestream data
-         For bytestream we don't want to expose it as codec_data but rather as
-         streamheader as it is not out-of-band data but data that should be
-         prepended to the beginning of the stream before the other buffers.
-         https://bugzilla.gnome.org/show_bug.cgi?id=735070
-
-2014-08-10 19:13:10 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-         docs: update for git master
-
-2014-08-06 12:07:09 -0300  Thiago Santos <thiagoss@osg.samsung.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: simplify log statement
-         Use the GST_PTR_FORMAT to print the buffer
-
-2014-08-05 19:47:26 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/x264/gstx264enc.c:
-         x264: fix colour inversion with YV12 format
-         It's the same as I420 but with the U/V planes swapped.
-
-2014-08-01 10:37:44 +0200  Edward Hervey <edward@collabora.com>
-
-       * Makefile.am:
-       * common:
-         Makefile: Add usage of build-checks step
-         Allows building checks without running them
-
-2014-07-08 16:45:45 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Request buffers in allocation query
-         https://bugzilla.gnome.org/show_bug.cgi?id=732288
-
-2014-06-06 20:23:15 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264enc: Shift both PTS and DTS to ensure positive timestamp
-         Currently we only shift DTS to compensate that we don't support negative
-         timestamp. This cause a problem that PTS is no longer >= DTS and may
-         make muxers live much harder. Instead, shift both PTS/DTS forward. Also
-         remove all the hack to handle this which seems the result of thinking libx264
-         is bugged.
-         https://bugzilla.gnome.org/show_bug.cgi?id=731351
-
-2014-07-19 18:04:46 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * configure.ac:
-         Back to development
-
-=== release 1.4.0 ===
-
-2014-07-19 17:44:06 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.4.0
-
-2014-07-19 16:50:04 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2014-07-19 12:48:11 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/sv.po:
-         po: Update translations
-
-=== release 1.3.91 ===
-
-2014-07-11 11:44:28 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.3.91
-
-2014-07-11 11:13:39 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2014-07-11 08:53:12 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/vi.po:
-         po: Update translations
-
-2014-07-04 03:22:00 +0200  Sebastian Rasmussen <sebras@hotmail.com>
-
-       * gst/realmedia/rademux.c:
-         rademux: Print invalid fourcc in error message in hex
-         Previously this was printed as characters which caused later processing
-         of the error message to sometimes warn about non-UTF-8 characters.
-         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=732716
-
-=== release 1.3.90 ===
-
-2014-06-28 11:39:14 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.3.90
-
-2014-06-28 11:39:01 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2014-06-22 21:48:28 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * .gitignore:
-         Ignore autotools test-driver temp files from 'make check'
-
-2014-06-22 19:36:14 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * configure.ac:
-         Back to development
-
-=== release 1.3.3 ===
-
-2014-06-22 18:13:53 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.3.3
-
-2014-06-22 17:40:40 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2014-06-22 14:25:18 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/de.po:
-       * po/nl.po:
-         po: Update translations
-
-2014-05-26 17:55:43 -0300  Thiago Santos <ts.santos@sisa.samsung.com>
-
-       * gst/realmedia/rmdemux.c:
-       * gst/realmedia/rmdemux.h:
-         rmdemux: use GstFlowCombiner
-         Removes flow return combination code to use the newly added GstFlowCombiner
-         https://bugzilla.gnome.org/show_bug.cgi?id=709224
-
-2014-05-23 18:17:11 -0300  Thiago Santos <ts.santos@sisa.samsung.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: use GstFlowCombiner
-         Removes flow return combination code to use the newly added GstFlowCombiner
-         https://bugzilla.gnome.org/show_bug.cgi?id=709224
-
-2014-05-28 09:49:59 +0200  Aurélien Zanelli <aurelien.zanelli@parrot.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: fix caps leak in set_format()
-         https://bugzilla.gnome.org/show_bug.cgi?id=730865
-
-2013-12-01 20:53:03 +0100  Matej Knopp <matej.knopp@gmail.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Handle initial 0 timestamp that should have been -1
-         https://bugzilla.gnome.org/show_bug.cgi?id=719660
-
-2014-05-21 13:23:33 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * configure.ac:
-         Back to development
-
-=== release 1.3.2 ===
-
-2014-05-21 13:06:35 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * common:
-       * configure.ac:
-       * docs/plugins/inspect-build.stamp:
-       * docs/plugins/inspect.stamp:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.3.2
-
-2014-05-21 12:53:52 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2014-05-21 10:51:38 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * common:
-         Automatic update of common submodule
-         From 211fa5f to 1f5d3c3
-
-2014-05-16 16:24:46 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.h:
-         mpeg2dec: remove unused struct members
-
-2014-05-16 12:21:06 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * gst/realmedia/rtspreal.c:
-         rtspreal: Fix some memory leaks in an error path
-         CID 1212165.
-
-2014-05-09 14:54:54 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Release codec state on negotiation failures
-         Else it leaks
-         CID #1212169
-
-2014-05-03 20:48:37 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * configure.ac:
-         Back to development
-
-=== release 1.3.1 ===
-
-2014-05-03 18:29:23 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.3.1
-
-2014-05-03 18:21:01 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2014-05-03 17:23:39 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * po/de.po:
-       * po/id.po:
-       * po/lv.po:
-       * po/sk.po:
-       * po/sr.po:
-         po: Update translations
-
-2014-05-03 10:15:28 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-       * common:
-         Automatic update of common submodule
-         From bcb1518 to 211fa5f
-
-2014-04-27 00:29:16 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/sidplay/gstsiddec.cc:
-       * gst/asfdemux/gstrtspwms.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rdtmanager.c:
-       * gst/realmedia/rtspreal.c:
-         docs: remove outdated and pointless 'Last reviewed' lines from docs
-         They are very confusing for people, and more often than not
-         also just not very accurate. Seeing 'last reviewed: 2005' in
-         your docs is not very confidence-inspiring. Let's just remove
-         those comments.
-
-2014-04-10 17:29:30 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
-       * gst/dvdsub/gstdvdsubdec.c:
-         dvdsubdec: fix spurious rejection of 0 time offset commands
-         Coverity 206168
-
-2014-04-10 16:53:25 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdread: avoid intermediate promotion to signed
-         We should not reach the dangerous range here, though.
-         Coverity 206491, 206492, 1139856
-
-2014-01-17 10:46:50 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: do not reset the whole video info when setting size
-         New changes to gstvideo will reset all the video info state
-         when calling _set_format, overwriting what was previously set
-         in the preceding code.
-         The comment says the following code is meant to preserve the
-         pre-crop size, so let's just keep the size and related data
-         as this does not seem to break anything else (this is what
-         the _set_format call would have set before the change that
-         reset all data, except the colorimetry).
-
-2014-04-03 15:06:22 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Fix payloads check
-         Don't iterate stream->payloads if ... it doesn't exist
-         CID #1139846
-
-2014-03-02 05:11:10 +0100  Sebastian Rasmussen <sebras@hotmail.com>
-
-       * .gitignore:
-         .gitignore: Ignore gcov intermediate files
-         https://bugzilla.gnome.org/show_bug.cgi?id=725483
-
-2014-02-28 09:35:10 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-       * common:
-         Automatic update of common submodule
-         From fe1672e to bcb1518
-
-2014-02-26 22:12:50 +0100  Stefan Sauer <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From 1a07da9 to fe1672e
-
-2014-02-26 11:31:03 +0100  Stefan Sauer <ensonic@users.sf.net>
-
-       * docs/Makefile.am:
-         docs: install prebuilt plugin docs if gtk-doc is disabled
-         Sync to the Makefile.am from gst-plugin-base where it is done right.
-         Fixes #725034
-
-2014-02-13 09:39:04 +0100  Stefan Sauer <ensonic@users.sf.net>
-
-       * gst/xingmux/gstxingmux.c:
-       * gst/xingmux/plugin.c:
-         xingmux: add muxer category and make element plugable
-         This is required to make encodebin consider the element. Yet it is not enough to
-         have it plugged it has a lower priority than most mp3encoders and no different
-         caps.
-
-2014-02-24 11:42:00 +0100  Dirk Van Haerenborgh <vhdirk@gmail.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: allow lossless compression (qp=0)
-         https://bugzilla.gnome.org/show_bug.cgi?id=725051
-
-2014-02-20 21:08:08 +0100  Edward Hervey <edward@collabora.com>
-
-       * m4/a52.m4:
-         m4: Remove extra check for 11+ year old a52 release
-         You deserve a build failure if you still have that version
-         If someone wants to completely remove this m4 to replace it with the
-         generic AS_GST_CHECK_LIBHEADER() it would be appreciated.
-
-2014-02-19 21:11:55 +0100  Rico Tzschichholz <ricotz@ubuntu.com>
-
-       * m4/a52.m4:
-         m4: Fix multiple tests in AC_CHECK_A52DEC
-
-2014-02-09 23:41:36 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Remove unused function
-
-2014-02-06 19:22:47 +0100  Edward Hervey <edward@collabora.com>
-
-       * tests/check/Makefile.am:
-         check: Fix test location
-
-2014-02-03 02:06:11 +0100  Sebastian Rasmussen <sebras@hotmail.com>
-
-       * tests/check/Makefile.am:
-         tests: Don't build disabled plugins' check tests
-         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=723505
-
-2014-01-30 10:44:29 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * common:
-         Automatic update of common submodule
-         From d48bed3 to 1a07da9
-
-2014-01-03 16:20:11 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: only add "format" field with fourcc to WMV caps
-         Doesn't make sense for e.g. H264 or MJPEG.
-
-2013-12-22 22:34:03 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * autogen.sh:
-       * common:
-         Automatic update of common submodule
-         From dbedaa0 to d48bed3
-
-2013-12-22 21:56:03 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * po/Makevars:
-         po: set gettext domain in Makevars so we don't have to patch the generated Makefile.in.in
-         https://bugzilla.gnome.org/show_bug.cgi?id=705455
-
-2013-12-05 12:16:45 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-       * ext/amrwbdec/amrwbdec.c:
-         amrwbdec: Remove some dead code
-
-2013-12-05 12:16:38 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-       * ext/amrnb/amrnbdec.c:
-         amrnbdec: Remove some dead code
-
-2013-12-05 12:09:04 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-       * ext/amrnb/amrnbdec.c:
-         amrnbdec: Use gst_audio_decoder_set_needs_format() instead of custom code
-
-2013-12-05 12:08:46 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-       * ext/amrwbdec/amrwbdec.c:
-         amrwbdec: Use gst_audio_decoder_set_needs_format() instead of custom code
-
-2013-12-05 11:44:10 +0100  Sebastian Dröge <sebastian@centricular.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Use new gst_video_decoder_set_needs_format() API
-
-2013-11-29 15:51:49 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: fix compiler warning
-         Compiler warns rightly about possibly uninitialized variable.
-
-2013-11-29 15:49:29 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: fix crash on NULL caps when negotiation happens without a downstream peer
-         gst-launch-1.0 videotestsrc ! x264enc
-
-2013-11-11 13:15:54 +0100  Mark Nauwelaerts <mnauw@users.sourceforge.net>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: graceful degradation for badly parsed input
-
-2013-11-05 11:20:20 +0000  Tim-Philipp Müller <tim@centricular.com>
-
-       * common:
-         Automatic update of common submodule
-         From 865aa20 to dbedaa0
-
-2013-10-22 16:02:04 +0900  HyeJin Choi <meeshel@meeshel78@hotmail.com>
-
-       * gst/asfdemux/asfpacket.c:
-         asfdemux: mo_size check bug fix. mo_size is not mandatory field.
-         So, don't need to check previous payload's mo_size and current
-         payload's mo_size when merging it.
-         https://bugzilla.gnome.org/show_bug.cgi?id=710609
-
-2013-10-22 15:03:15 -0300  Thiago Santos <ts.santos@partner.samsung.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: Keep audio error checking fields only for audio
-         Video shouldn't need to be descrambled, this can cause frames data
-         to be corrupted
-         https://bugzilla.gnome.org/show_bug.cgi?id=684942
-
-2013-10-22 00:56:29 -0300  Thiago Santos <ts.santos@partner.samsung.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: really copy the buffer data
-         Pass the copy-memory flag to copy the memory for the output buffer,
-         otherwise we end with 0-sized buffers
-         https://bugzilla.gnome.org/show_bug.cgi?id=684942
-
-2013-09-27 08:05:25 -0700  Michael Esemplare <michael.esemplare@gmail.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: If FPS is available, set VFR to false
-         https://bugzilla.gnome.org/show_bug.cgi?id=708940
-
-2013-09-24 10:08:10 -0700  Thiago Santos <ts.santos@partner.samsung.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Only use segment.start as seek_time if it is relative
-         Relying on the gst_segment_do_seek results for getting the
-         seeking time should not be used if seek type is SET because the
-         do_seek function makes the 'cur` position of the seek normalized
-         on the segment range. This means that seeking beyond the end of the
-         file might not result in instant EOS as it will end up seeking to
-         the final ts of the file.
-         In asf seeking to the final timestamp can lead to seeking to the last
-         keyframe, meaning a few seconds of video will still be played, which should
-         not be the desired behavior when seeking beyong file limits.
-
-2013-09-24 10:07:25 -0700  Thiago Santos <ts.santos@partner.samsung.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Parse last simple index entry
-         The entry size is fixed at 6, fix typo to finish parsing the index
-         correctly until the last sample
-
-2013-09-24 18:32:31 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * README:
-       * common:
-         Automatic update of common submodule
-         From 6b03ba7 to 865aa20
-
-2013-09-24 15:05:36 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * configure.ac:
-         configure: Actually use 1.3.0.1 as version to make configure happy
-
-2013-09-24 15:00:30 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * configure.ac:
-         Back to development
-
-=== release 1.2.0 ===
-
-2013-09-24 14:27:45 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.2.0
-
-2013-09-24 14:27:39 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2013-09-18 11:34:56 +0200  Andoni Morales Alastruey <ylatuya@gmail.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Update the documentation to match the default profile used
-         https://bugzilla.gnome.org/show_bug.cgi?id=708036
-
-2013-09-20 16:17:31 +0200  Edward Hervey <edward@collabora.com>
-
-       * common:
-         Automatic update of common submodule
-         From b613661 to 6b03ba7
-
-2013-09-19 18:43:43 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * common:
-         Automatic update of common submodule
-         From 74a6857 to b613661
-
-2013-09-19 17:36:25 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * autogen.sh:
-       * common:
-         Automatic update of common submodule
-         From 098c0d7 to 74a6857
-
-2013-09-19 11:35:04 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * configure.ac:
-         Back to development
-
-=== release 1.1.90 ===
-
-2013-09-19 10:50:32 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.1.90
-
-2013-09-19 10:30:37 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2013-09-19 09:45:55 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * po/cs.po:
-         po: Update translations
-
-2013-09-18 19:13:45 -0400  Olivier Crête <olivier.crete@collabora.com>
-
-       * ext/x264/gstx264enc.c:
-       * tests/check/elements/x264enc.c:
-         x264enc: Implement getcaps that restricts the input format depending on the output profile
-         Also add some x264enc profile tests
-         https://bugzilla.gnome.org/show_bug.cgi?id=708326
-
-2013-09-16 19:38:36 +0200  Matej Knopp <matej.knopp@gmail.com>
-
-       * gst/asfdemux/asfpacket.c:
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: fix playback regression in push mode
-
-2013-09-10 19:33:33 -0300  Thiago Santos <thiago.sousa.santos@collabora.com>
-
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: remove unused variable
-
-2013-09-05 22:56:48 +0200  Mathieu Duponchelle <mathieu.duponchelle@epitech.eu>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Don't unref future state but the old one
-         Being silly will lead us nowhere.
-
-2013-09-04 16:32:43 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Check if we have an input state before using it
-         Flushing might happen before caps were set on the encoder,
-         which would lead to crashes here.
-         Thanks to Matej Knopp for analyzing this.
-         https://bugzilla.gnome.org/show_bug.cgi?id=707414
-
-2013-09-03 20:28:35 +0200  Matej Knopp <matej.knopp@gmail.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: fix unsigned comparison warning
-
-2013-08-28 13:27:05 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * configure.ac:
-         Back to development
-
-=== release 1.1.4 ===
-
-2013-08-28 12:58:43 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.1.4
-
-2013-08-28 12:58:37 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2013-08-28 12:32:37 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * po/pt_BR.po:
-         po: update translations
-
-2013-08-27 14:13:06 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: log when we output a lower profile than requested
-
-2013-08-21 18:32:17 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Consider subset relations of profiles when setting srcpad caps
-         constrained-baseline is a subset of baseline, is a subset of main,
-         is a subset of high profile.
-         https://bugzilla.gnome.org/show_bug.cgi?id=705425
-
-2013-08-21 12:31:23 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: propagate flow return back to base class and upstream
-         https://bugzilla.gnome.org/show_bug.cgi?id=705425
-
-2013-08-17 23:13:17 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * configure.ac:
-         configure: fix x264 version checking
-         x264 releases carry pkg-config versions such as 0.120.x
-         (literallly with an 'x'). Checking for x264 >= 0.120.0 will
-         then fail, so we need to either check for > 0.119.0 or
-         for >= 0.120 to make this work right.
-
-2013-08-17 23:09:15 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: minor clean-up
-         We requires x264 build >= 120 now.
-
-2013-08-15 15:30:31 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Fix mpeg2_reset() calls
-
-2013-08-15 15:27:48 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/x264/gstx264enc.c:
-         ext: Use new flush vfunc of video codec base classes and remove reset implementations
-
-2013-08-01 01:34:05 +0200  Matej Knopp <matej.knopp@gmail.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: fix build on C89 compilers
-
-2013-07-30 17:28:17 +0200  Matej Knopp <matej.knopp@gmail.com>
-
-       * gst/asfdemux/asfpacket.c:
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: fix seeking in push mode
-
-2013-08-02 14:14:48 +0200  Lubosz Sarnecki <lubosz@gmail.com>
-
-       * configure.ac:
-         build: add subdir-objects to AM_INIT_AUTOMAKE
-         Fixes warnings in automake 1.14
-         https://bugzilla.gnome.org/show_bug.cgi?id=705350
-
-2013-08-02 08:25:49 +0200  Edward Hervey <edward@collabora.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Do a hard reset of flush_stop
-         Which is notified by hard == 0 with latest refactoring.
-
-2013-07-29 21:09:37 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * po/LINGUAS:
-       * po/da.po:
-       * po/de.po:
-       * po/gl.po:
-       * po/hr.po:
-       * po/hu.po:
-       * po/ja.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/pl.po:
-       * po/ru.po:
-       * po/sl.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-         po: update translations
-
-2013-07-29 14:48:21 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * configure.ac:
-         Back to development
-
-=== release 1.1.3 ===
-
-2013-07-29 13:46:08 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.1.3
-
-2013-07-29 13:46:05 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2013-07-29 12:13:17 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rmdemux.c:
-         gst: Don't swap start/stop for negative rates in the SEGMENT query
-
-2013-07-29 10:57:38 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rmdemux.c:
-         real: Implement SEGMENT query
-
-2013-07-29 10:56:06 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Implement SEGMENT query
-
-2013-07-28 16:43:28 +0200  Matej Knopp <matej.knopp@gmail.com>
-
-       * gst/asfdemux/asfheaders.c:
-       * gst/asfdemux/asfheaders.h:
-       * gst/asfdemux/asfpacket.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: Add support for dvr-ms
-         https://bugzilla.gnome.org/show_bug.cgi?id=705026
-
-2013-07-26 16:47:48 +0200  Edward Hervey <edward@collabora.com>
-
-       * gst/realmedia/rtspreal.c:
-         rtspreal: Ensure output value has an assigned value
-         In the case where this macro was used, that dest was != NULL but that
-         the strncmp failed, we would end up with dest_len being undefined.
-
-2013-07-26 16:39:12 +0200  Edward Hervey <edward@collabora.com>
-
-       * ext/x264/gstx264enc.c:
-         x264: Fix dts comparision
-         We were assigning to a guint64 value (frame->dts) the sum of a unsigned
-         and signed value... resulting it the result never being < 0.
-         Instead just check if it is smaller before assigning to frame->dts.
-
-2013-07-25 11:28:54 -0300  Thiago Santos <thiago.sousa.santos@collabora.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: fix seqnum handling for seeks
-         Use the same seqnum as the seek for flushes/segments that are
-         caused by the seek. Also do the same for segment events
-         Fixes #676242
-
-2013-07-25 13:35:44 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Clean up reset/start/stop handling
-
-2013-07-25 11:01:20 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: React properly to flushing/resetting the encoder
-         https://bugzilla.gnome.org/show_bug.cgi?id=656007
-
-2013-07-22 16:01:13 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rademux.h:
-       * gst/realmedia/rmdemux.c:
-       * gst/realmedia/rmdemux.h:
-         realmedia: Add support for group-id in the stream-start event
-
-2013-07-22 15:45:57 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: Add support for group-id in the stream-start event
-
-2013-07-22 15:43:18 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * ext/sidplay/gstsiddec.cc:
-       * ext/sidplay/gstsiddec.h:
-         siddec: Add support for group-id in the stream-start event
-
-2013-07-18 17:14:29 +0200  Edward Hervey <edward@collabora.com>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: Mark demuxer as "running" in push-mode
-         Allows queries (and other code) to be answered when working in push-mode.
-         Running would only be set to TRUE accordingly when working in pull-mode
-         once it had read header/index.
-         Fixes #680185
-
-2013-07-17 16:17:54 +0200  Edward Hervey <edward@collabora.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Properly reset on sequence changes
-         Otherwise we end up using stray data/buffers.
-         Fixes #690701
-
-2013-07-11 16:57:24 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * configure.ac:
-         Back to development
-
-=== release 1.1.2 ===
-
-2013-07-11 16:12:25 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.1.2
-
-2013-07-11 16:12:21 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2013-06-18 20:06:24 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdreadsrc: correctly determine last chapter's duration
-         This (mostly) reverts 683f5eeae7b830e4e4b790f3817ff6b8ce517b1c.
-         It worked just fine before ...
-
-2013-06-25 14:20:37 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/realmedia/rdtmanager.c:
-         rdt: forward sticky events
-
-2013-06-05 18:36:40 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * configure.ac:
-         Back to development
-
-=== release 1.1.1 ===
-
-2013-06-05 17:58:51 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * common:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.1.1
-
-2013-06-05 16:42:01 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2013-06-05 15:15:16 +0200  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * common:
-         Automatic update of common submodule
-         From 098c0d7 to 01a7a46
-
-2013-06-04 16:12:27 +0300  Sreerenj Balachandran <sreerenj.balachandran@intel.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: make the aspect ratio calculation more accurate.
-         Utilize the libmpeg2 api: mpeg2_guess_aspect() to guess the
-         aspect-ratio if we don't have a valid upstream PAR.
-         https://bugzilla.gnome.org/show_bug.cgi?id=685103
-
-2013-05-15 10:52:09 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 5edcd85 to 098c0d7
-
-2013-05-13 13:19:27 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * tests/check/elements/amrnbenc.c:
-       * tests/check/elements/mpeg2dec.c:
-       * tests/check/elements/x264enc.c:
-       * tests/check/elements/xingmux.c:
-         tests: Fix event handling
-
-2013-05-09 19:40:49 -0400  Olivier Crête <olivier.crete@collabora.com>
-
-       * ext/lame/gstlamemp3enc.c:
-         lamemp3enc: Tell GstAudioEncoder about the number of incoming samples
-         lame does internal resampling, but the base class only cares about
-         the number of raw samples, so tell finish frames about that, not
-         the number of samples in the outgoing frame.:
-
-2013-04-30 10:01:29 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: output byte-stream if downstream has ANY caps
-         It's what people expect when they pipe the output to
-         filesink or into a tcp connection or pipe.
-
-2013-04-22 23:52:48 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * MAINTAINERS:
-       * README:
-       * README.static-linking:
-       * common:
-         Automatic update of common submodule
-         From 3cb3d3c to 5edcd85
-
-2012-10-24 12:15:54 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * configure.ac:
-       * ext/a52dec/Makefile.am:
-       * ext/amrnb/Makefile.am:
-       * ext/amrwbdec/Makefile.am:
-       * ext/cdio/Makefile.am:
-       * ext/dvdread/Makefile.am:
-       * ext/lame/Makefile.am:
-       * ext/mad/Makefile.am:
-       * ext/mpeg2dec/Makefile.am:
-       * ext/sidplay/Makefile.am:
-       * ext/twolame/Makefile.am:
-       * ext/x264/Makefile.am:
-       * gst/asfdemux/Makefile.am:
-       * gst/dvdlpcmdec/Makefile.am:
-       * gst/dvdsub/Makefile.am:
-       * gst/realmedia/Makefile.am:
-       * gst/xingmux/Makefile.am:
-         gst: Add better support for static plugins
-
-2013-04-14 17:55:44 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * autogen.sh:
-       * common:
-         Automatic update of common submodule
-         From aed87ae to 3cb3d3c
-
-2013-04-09 21:00:43 +0200  Stefan Sauer <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From 04c7a1e to aed87ae
-
-2013-03-25 18:05:14 -0700  David Schleef <ds@schleef.org>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/realmedia/rmdemux.c:
-         Use %03u instead of %u in gst_pad_create_stream_id_printf()
-
-2013-03-06 13:28:37 +0000  Tom Greenwood <tgreenwood@Toms-MacBook-Pro.local>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Fix for 0/1 framerate - now uses VFR in this case
-         Previously did a division by zero.
-         https://bugzilla.gnome.org/show_bug.cgi?id=695728
-
-2013-03-07 00:02:00 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-       * common:
-         Automatic update of common submodule
-         From 2de221c to 04c7a1e
-
-2013-02-08 00:15:01 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: simplify template caps
-         No need to make an array for one single element.
-
-2013-02-08 00:11:03 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: put all theoretically possible formats in template caps
-         and decide at runtime which subset of these (8-bit or 10-bit video
-         formats) is supported. libx264 will be compiled for one of these
-         two options, and it is possible to switch by pointing the dynamic
-         linker to a different libx264 build at runtime. If we want our
-         template caps to be correct, they should contain all then, with
-         the actually supported ones determined at runtime.
-         https://bugzilla.gnome.org/show_bug.cgi?id=691935
-
-2013-01-23 10:16:51 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: detect supported bit depth and pixel formats at runtime
-         http://bugs.debian.org/667573
-         https://bugzilla.gnome.org/show_bug.cgi?id=691935
-
-2013-01-30 09:15:18 +0100  Benjamin Gaignard <benjamin.gaignard@st.com>
-
-       * autogen.sh:
-         autogen.sh: allow calling from out-of-tree
-         Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>
-         https://bugzilla.gnome.org/show_bug.cgi?id=692857
-
-2013-01-28 20:43:08 +0100  Stefan Sauer <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From a942293 to 2de221c
-
-2013-01-15 15:18:04 +0100  Martin Pitt <martinpitt@gnome.org>
-
-       * tests/check/Makefile.am:
-         tests: use _1_0 variants for the various registry variables
-         These override the variants without version suffix. Makes 'make check' work
-         properly in environments that set the suffixed variant for 1.0, such as
-         jhbuild.
-
-2013-01-15 15:06:41 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From a72faea to a942293
-
-2012-12-30 23:56:14 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-       * configure.ac:
-         configure: replace deprecated AM_CONFIG_HEADER with AC_CONFIG_HEADERS
-         AM_CONFIG_HEADER has been removed in the just-released automake 1.13:
-         https://lists.gnu.org/archive/html/automake/2012-12/msg00038.html
-         https://bugzilla.gnome.org/show_bug.cgi?id=690881
-
-2012-12-19 17:16:53 +0100  Thijs Vermeir <thijsvermeir@gmail.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: use appropriate printf format for gsize
-
-2012-12-19 17:15:03 +0100  Thijs Vermeir <thijsvermeir@gmail.com>
-
-       * ext/cdio/gstcdio.h:
-         cdio: Fix redundant redeclaration of 'cdio_version_string'
-         cdio/version.h is already included by cdio/cdio.h
-
-2012-12-01 13:26:26 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/sidplay/gstsiddec.cc:
-         siddec: init debug category
-
-2012-11-30 20:09:03 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * ext/dvdread/Makefile.am:
-         dvdread: link to libgmodule-2.0 since the g_module_* API is used
-         And the gmodule lib has been moved into the Requires.private
-         section of the pkg-config file in core.
-
-2012-11-27 17:07:31 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-       * ext/cdio/gstcdiocddasrc.c:
-       * ext/cdio/gstcdiocddasrc.h:
-         cdiocddasrc: detect whether drive produces samples in non-host endianness
-         If drive produces samples in other endianness than the host,
-         we need to byte swap them before pushing them out, or we
-         produce nothing but noise. cdparanoia detects this automatically,
-         but libcdio does not, so we have to do it ourselves.
-         This is needed on e.g. the PowerBook G4 with Matshita UJ-816 drive.
-         https://bugzilla.gnome.org/show_bug.cgi?id=377280
-
-2012-11-19 11:27:21 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-       * common:
-         Automatic update of common submodule
-         From b497c4f to a72faea
-
-2012-11-16 13:32:00 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * tests/check/elements/xingmux_testdata.h:
-         xingmux: Fix unit test after change to correctly calculate number of frames
-
-2012-11-15 16:42:09 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Add support for 10-bit color formats
-         Requires x264 to be built with 10-bit support, which disables
-         9-bit support. Also only advertise the color formats that were
-         compiled into x264.
-
-2012-11-15 16:21:49 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Add support for Y444, Y42B and NV12
-
-2012-11-11 20:42:42 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-       * ext/cdio/Makefile.am:
-       * ext/cdio/gstcdio.c:
-         cdio: use gst_tag_freeform_string_to_utf8() for CD-TEXT strings
-         They're probably not going to be UTF-8, but ISO-8859-1 or somesuch
-         if they're not plain ASCII.
-
-2012-11-09 11:33:40 +0100  Gautier Portet <kassoulet@gmail.com>
-
-       * gst/xingmux/gstxingmux.c:
-         xingmux: Properly calculate the number of frames
-         First, the xing header frame is never added to the count,
-         we have to increment the count.
-         Secondly, there is a rounding error when calculating the
-         frame duration, as spf*GST_SECOND/rate is not an integer
-         (26122448.9) an it must be 26122449.
-
-2012-11-07 20:45:38 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-       * configure.ac:
-         configure.ac: update courtesy of autoupdate
-
-2012-11-07 20:39:56 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-       * common:
-       * configure.ac:
-         configure: let AG_GST_PLUGIN_DOCS check for python
-         And update common for move from AS_PATH_PYTHON to AM_PATH_PYTHON,
-         which as a side-effect should pick up newer python versions as
-         well.
-         https://bugzilla.gnome.org/show_bug.cgi?id=563903
-
-2012-11-05 13:16:52 -0800  Michael Smith <msmith@rdio.com>
-
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-         dvdlpcmdec: Fix parsing of headers to set correct width to allow decode.
-
-2012-11-03 20:38:00 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-       * tests/check/elements/mpg123audiodec.c:
-         Fix FSF address
-         https://bugzilla.gnome.org/show_bug.cgi?id=687520
-
-2012-11-03 20:40:37 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-       * docs/random/LICENSE:
-       * ext/a52dec/gsta52dec.c:
-       * ext/a52dec/gsta52dec.h:
-       * ext/amrnb/amrnb.c:
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbdec.h:
-       * ext/amrnb/amrnbenc.c:
-       * ext/amrnb/amrnbenc.h:
-       * ext/amrwbdec/amrwb.c:
-       * ext/amrwbdec/amrwbdec.c:
-       * ext/amrwbdec/amrwbdec.h:
-       * ext/cdio/gstcdio.c:
-       * ext/cdio/gstcdio.h:
-       * ext/cdio/gstcdiocddasrc.c:
-       * ext/cdio/gstcdiocddasrc.h:
-       * ext/dvdread/dvdreadsrc.c:
-       * ext/dvdread/dvdreadsrc.h:
-       * ext/lame/gstlamemp3enc.c:
-       * ext/lame/gstlamemp3enc.h:
-       * ext/lame/plugin.c:
-       * ext/mad/gstmad.c:
-       * ext/mad/gstmad.h:
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/mpeg2dec/gstmpeg2dec.h:
-       * ext/sidplay/gstsiddec.cc:
-       * ext/sidplay/gstsiddec.h:
-       * ext/twolame/gsttwolamemp2enc.c:
-       * ext/twolame/gsttwolamemp2enc.h:
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-       * gst-libs/gst/gettext.h:
-       * gst-libs/gst/glib-compat-private.h:
-       * gst-libs/gst/gst-i18n-plugin.h:
-       * gst/asfdemux/asfheaders.c:
-       * gst/asfdemux/asfheaders.h:
-       * gst/asfdemux/asfpacket.c:
-       * gst/asfdemux/asfpacket.h:
-       * gst/asfdemux/gstasf.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-       * gst/asfdemux/gstrtpasfdepay.c:
-       * gst/asfdemux/gstrtpasfdepay.h:
-       * gst/asfdemux/gstrtspwms.c:
-       * gst/asfdemux/gstrtspwms.h:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.h:
-       * gst/dvdsub/gstdvdsubdec.c:
-       * gst/dvdsub/gstdvdsubdec.h:
-       * gst/dvdsub/gstdvdsubparse.c:
-       * gst/dvdsub/gstdvdsubparse.h:
-       * gst/realmedia/asmrules.c:
-       * gst/realmedia/asmrules.h:
-       * gst/realmedia/gstrdtbuffer.c:
-       * gst/realmedia/gstrdtbuffer.h:
-       * gst/realmedia/pnmsrc.c:
-       * gst/realmedia/pnmsrc.h:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rademux.h:
-       * gst/realmedia/rdtdepay.c:
-       * gst/realmedia/rdtdepay.h:
-       * gst/realmedia/rdtjitterbuffer.c:
-       * gst/realmedia/rdtjitterbuffer.h:
-       * gst/realmedia/rdtmanager.c:
-       * gst/realmedia/rdtmanager.h:
-       * gst/realmedia/realhash.c:
-       * gst/realmedia/realhash.h:
-       * gst/realmedia/realmedia.c:
-       * gst/realmedia/rmdemux.c:
-       * gst/realmedia/rmdemux.h:
-       * gst/realmedia/rmutils.c:
-       * gst/realmedia/rmutils.h:
-       * gst/realmedia/rtspreal.c:
-       * gst/realmedia/rtspreal.h:
-       * gst/xingmux/gstxingmux.c:
-       * gst/xingmux/gstxingmux.h:
-       * gst/xingmux/plugin.c:
-       * tests/check/elements/amrnbenc.c:
-       * tests/check/elements/mpeg2dec.c:
-       * tests/check/elements/x264enc.c:
-       * tests/check/generic/index.c:
-       * tests/check/generic/states.c:
-       * tests/check/pipelines/lame.c:
-         Fix FSF address
-         https://bugzilla.gnome.org/show_bug.cgi?id=687520
-
-2012-10-30 13:39:52 +0100  Andreas Frisch <fraxinas@opendreambox.org>
-
-       * gst/dvdsub/gstdvdsubdec.c:
-         dvdsubdec: allocate correct amount of memory for bitmap
-         https://bugzilla.gnome.org/show_bug.cgi?id=687192
-
-2012-10-30 09:27:24 +0100  Carlos Rafael Giani <dv@pseudoterminal.org>
-
-       * ext/mpg123/gstmpg123audiodec.c:
-         mpg123: removed unnecessary finalize function
-         https://bugzilla.gnome.org/show_bug.cgi?id=687176
-
-2012-10-30 09:20:04 +0000  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/sidplay/gstsiddec.cc:
-         siddec: reset bytes counter
-         Reset the total_bytes counter so that we get timestamps correct.
-         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=686931
-
-2012-10-30 10:20:09 +1100  Jan Schmidt <thaytan@noraisin.net>
-
-       * ext/mpg123/gstmpg123audiodec.c:
-         mpg123: Fix leaks from not chaining up in the finalize function
-
-2012-10-25 12:38:47 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * win32/common/config.h:
-         Back to feature development
-
-=== release 1.0.2 ===
-
-2012-10-25 01:11:10 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.0.2
-
-2012-10-24 13:41:00 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * tests/check/elements/mpg123audiodec.c:
-         tests: fix up mpg123 test a little
-         - dist input files
-         - fix sample leak
-         - simplify check for elements
-         - only run mpg123 test if mpg123 is available and selected
-         - fix build in uninstalled setup
-         https://bugzilla.gnome.org/show_bug.cgi?id=686595
-
-2012-10-24 12:30:10 +0200  Carlos Rafael Giani <dv@pseudoterminal.org>
-
-       * tests/check/elements/mpg123audiodec.c:
-         tets: add unit test for mpg123audiodec
-         https://bugzilla.gnome.org/show_bug.cgi?id=686595
-
-2012-10-24 00:36:42 +0200  Carlos Rafael Giani <dv@pseudoterminal.org>
-
-       * ext/mpg123/gstmpg123audiodec.c:
-         mpg123: added gtkdoc section
-         https://bugzilla.gnome.org/show_bug.cgi?id=686595
-
-2012-10-24 00:22:05 +0200  Carlos Rafael Giani <dv@pseudoterminal.org>
-
-       * ext/mpg123/gstmpg123audiodec.c:
-         mpg123: fixed bug with last frame, disabled internal resampler & chatter
-         * The last MP3 frame wasn't being pushed when base class was draining
-         * Made sure mpg123 cannot ever use its (crude) internal resampler
-         * Disabled mpg123 stderr output
-         https://bugzilla.gnome.org/show_bug.cgi?id=686595
-
-2012-10-24 20:10:03 +0800  Scott Fan <fanchp@neusoft.com>
-
-       * gst/asfdemux/Makefile.am:
-       * gst/realmedia/Makefile.am:
-         Makefile.am: Fix typos for generating the Android.mk files
-         Change libgstasfdemux to libgstasf, and change libgstrealmedia to libgstrmdemux.
-         The typos led to generate the incorrect Android.mk files for the asfdemux
-         and realmedia plugin.
-         https://bugzilla.gnome.org/show_bug.cgi?id=686748
-
-2012-10-24 00:21:45 +0200  Carlos Rafael Giani <dv@pseudoterminal.org>
-
-       * ext/mpg123/gstmpg123audiodec.c:
-         mpg123: cleaned up comments, formatting, and logging lines
-         also replaced mpg123decoder->handle != NULL checks with asserts
-         https://bugzilla.gnome.org/show_bug.cgi?id=686595
-
-2012-10-18 22:19:04 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdreadsrc: correctly set next cell when seeking to sector
-
-2012-10-18 22:18:28 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/dvdsub/gstdvdsubparse.c:
-         dvdsubparse: send src caps when receiving sink caps
-
-2012-10-12 14:49:28 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdreadsrc: update dvd event to enhanced approach
-         ... in line with resindvdsrc.
-
-2012-10-07 17:08:37 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * docs/Makefile.am:
-         docs: add 'make upload' target for new-release script
-
-2012-10-07 16:58:10 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * win32/common/config.h:
-         Back to development (bug fixing)
-
-=== release 1.0.1 ===
-
-2012-10-07 16:13:11 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.0.1
-
-2012-10-06 14:58:34 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * common:
-         Automatic update of common submodule
-         From 6c0b52c to 6bb6951
-
-2012-10-01 00:01:09 +1000  Jan Schmidt <thaytan@noraisin.net>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Don't error out when there is no associated buffer
-         In 0.10, having mpeg2dec occasionally tell us to output a frame that
-         was never decoded was just ignored, so do the same in 1.0
-         Fixes: #685107
-
-2012-09-29 12:13:00 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * REQUIREMENTS:
-       * gst/dvdsub/gstdvdsubdec.c:
-         Purge mention of liboil and update REQUIREMENTS
-         https://bugzilla.gnome.org/show_bug.cgi?id=673285
-
-2012-09-26 01:04:32 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: when setting fallback decoder latency, set valid min_latency
-         Min. latency needs to be a valid time, so pass 0 as default
-         value in the fallback case where we can't determine any latency,
-         and avoid nasty criticals at runtime.
-
-2012-09-24 16:52:23 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * win32/common/config.h:
-         Back to development (bug fixing)
-
-=== release 1.0.0 ===
-
-2012-09-24 14:32:12 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 1.0.0
-
-2012-09-22 16:08:54 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * common:
-         Automatic update of common submodule
-         From 4f962f7 to 6c0b52c
-
-=== release 0.11.99 ===
-
-2012-09-17 17:59:57 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * docs/plugins/inspect/plugin-xingmux.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 0.11.99
-
-2012-09-17 16:57:53 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-         docs: update docs
-
-2012-09-17 16:57:30 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * ext/amrnb/Makefile.am:
-       * ext/amrwbdec/Makefile.am:
-       * ext/lame/Makefile.am:
-       * ext/twolame/Makefile.am:
-       * tests/check/Makefile.am:
-         Remove -DGST_USE_UNSTABLE_API
-
-2012-09-17 12:22:51 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-         Update docs
-
-2012-09-17 10:53:12 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/cdio/gstcdio.c:
-         cdio: work around cdio headers re-defining VERSION and PACKAGE_VERSION
-         Thanks guys. Fixes plugin version in gst-inspect-1.0 and docs
-         introspection/updating for this plugin.
-
-2012-09-15 22:23:53 +0200  Christian Fredrik Kalager Schaller <uraeus@linuxrisin.org>
-
-       * gst-plugins-ugly.spec.in:
-         Switch to F18 package naming
-
-2012-09-14 16:28:54 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/dvdread/demo-play:
-       * tests/check/elements/mpeg2dec.c:
-         rename some caps and elements in examples
-
-2012-09-14 02:58:26 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * configure.ac:
-         Back to development
-
-=== release 0.11.94 ===
-
-2012-09-14 02:49:34 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * ChangeLog:
-       * configure.ac:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 0.11.94
-
-2012-09-14 01:48:50 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
-       * docs/plugins/gst-plugins-ugly-plugins.signals:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-         docs: update docs
-
-2012-09-13 13:49:33 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: use DTS and PTS
-         Video uses DTS as timestamps. Set the DTS on the buffers and leave the PTS
-         undefined to make the decoder do the right thing. We can then remove the code
-         that tries to guess the PTS from the DTS.
-
-2012-09-10 22:30:18 -0700  Jan Schmidt <thaytan@noraisin.net>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Hold ref to buffer while mapped
-         So that the buffer still exists when we go to unmap it later,
-         even if it got pushed in the meantime.
-
-2012-09-11 16:48:51 -0400  Olivier Crête <olivier.crete@collabora.com>
-
-       * tests/check/elements/x264enc.c:
-         x264enc test: x264enc produces constrained-baseline, not the full baseline
-
-2012-09-11 17:37:03 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rmdemux.c:
-         gst: only activate in pull mode if upstream is seekable
-
-2012-09-11 11:28:06 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/realmedia/rademux.c:
-         rademux: tags can be NULL
-
-2012-09-11 11:13:31 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-         mad: fix email address
-
-2012-09-11 11:12:38 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-         mad: init base class method only once
-
-2012-09-11 10:46:52 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/xingmux/gstxingmux.c:
-         xingmux: remove defunct commented code
-
-2012-09-11 10:40:01 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/dvdsub/gstdvdsubdec.c:
-         dvbsubdec: handle and send GAP event
-         ... in stead of update newsegment event.
-
-2012-09-11 10:34:40 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/dvdsub/gstdvdsubdec.c:
-         dvbsubdec: adjust disabled code comment style
-
-2012-09-09 15:48:57 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: clean up some debug statements
-
-2012-09-07 17:38:18 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264enc: handle possibly negative DTS provided by codec
-         ... by arranging for an offset such that DTS == PTS for keyframes,
-         which is expected elsewhere to go along with semantics of PTS and DTS.
-         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=679443
-
-2012-09-07 13:31:15 +0200  Christian Fredrik Kalager Schaller <uraeus@linuxrisin.org>
-
-       * gst-plugins-ugly.spec.in:
-         Fix spec file for ugly
-
-2012-09-06 14:42:51 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * tests/check/elements/mpeg2dec.c:
-         tests: mpeg2dec: initialize variable
-         ... which avoids test segfaulting.
-
-2012-08-30 16:26:00 -0700  Edward Hervey <edward@collabora.com>
-
-       * tests/check/elements/mpeg2dec.c:
-         check: Feed parsed data to mpeg2dec
-         And fix the expected output caps by adding colorimetry field
-
-2012-08-22 13:31:00 +0200  Stefan Sauer <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From 668acee to 4f962f7
-
-2012-08-22 13:19:01 +0200  Stefan Sauer <ensonic@users.sf.net>
-
-       * configure.ac:
-         configure: bump gtk-doc req to 1.12 (mar-2009)
-         This allows us to e.g. unconditionally use gtkdoc-rebase.
-
-2012-08-20 23:32:32 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * gst/dvdsub/gstdvdsubdec.c:
-       * gst/dvdsub/gstdvdsubparse.c:
-         video/x-dvd-subpicture -> subpicture/x-dvd
-
-2012-08-09 16:30:10 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Use new video encoder base class API for handling tags
-
-2012-08-09 11:48:39 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/mpg123/gstmpg123audiodec.c:
-         mpg123: Give MARGINAL rank to the mpg123 decoder element
-
-2012-08-08 16:27:45 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * gst/dvdsub/gstdvdsubdec.c:
-         dvdsubdec: Set alignment at the correct place of GstAllocationParams
-
-2012-08-08 16:26:41 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * win32/common/config.h:
-         Back to development
-
-=== release 0.11.93 ===
-
-2012-08-08 15:23:53 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 0.11.93
-
-2012-08-08 15:23:27 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/asfdemux/asfpacket.c:
-       * gst/realmedia/rmdemux.c:
-         gst: silence some compiler warnings with -DG_DISABLE_ASSERT
-
-2012-08-08 12:58:50 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * ext/mpg123/Makefile.am:
-         mpg123: dist header file
-
-2012-08-06 15:31:50 +0300  Sreerenj Balachandran <sreerenj.balachandran@intel.com>
-
-       * gst/asfdemux/asfpacket.c:
-         asfdemux: avoid some more invalid timestamp arithmetic
-         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=681291
-
-2012-08-05 18:30:52 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/sidplay/gstsiddec.cc:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rmdemux.c:
-         gst: Add stream-id to stream-start events
-
-2012-07-27 11:35:52 +0200  Edward Hervey <edward@collabora.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Don't use NULL values for fbuf
-         We need to make a difference between the initial dummy buffers (which
-         have a fbuf->id of NULL) and the buffers on which we allocated
-         video frames.
-
-2012-08-05 16:40:57 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * common:
-         Automatic update of common submodule
-         From 94ccf4c to 668acee
-
-2012-08-04 16:13:36 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/lame/gstlamemp3enc.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rmdemux.c:
-       * gst/realmedia/rmutils.c:
-         gst_tag_list_free -> gst_tag_list_unref
-
-2012-08-03 13:43:31 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/mpg123/gstmpg123audiodec.c:
-         mpg123: map input buffer in READ mode, not WRITE mode
-         Makes things actually work.
-
-2012-08-03 11:50:10 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/mpg123/gstmpg123audiodec.c:
-         mpg123: query supported output formats at run-time
-         Fixes stuff. We use a string here since we can't be bothered
-         with GValue.
-
-2012-08-03 11:48:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/mpg123/Makefile.am:
-         mpg123: hook up to build system
-
-2012-08-03 11:13:48 +0100  Carlos Rafael Giani <dv@pseudoterminal.org>
-
-       * ext/mpg123/gstmpg123audiodec.c:
-       * ext/mpg123/gstmpg123audiodec.h:
-         mpg123: add new libmpg123-based mp3 decoder plugin
-         Needs a bit of cleaning up.
-         https://bugzilla.gnome.org/show_bug.cgi?id=681003
-
-2012-07-28 00:28:27 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/sidplay/gstsiddec.cc:
-       * ext/x264/gstx264enc.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rmdemux.c:
-         tag: Update for taglist/tag event API changes
-
-2012-07-26 18:30:04 +0200  Edward Hervey <edward@collabora.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Avoid dropping first GOP
-         We use the mpeg2_fbuf_t id field as an integer and not as a pointer, so
-         do not check if it is NULL or not.
-         And cleanup a bit of debug
-
-2012-07-25 13:05:17 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/realmedia/rdtmanager.c:
-       * gst/realmedia/rdtmanager.h:
-         rdt: add on-npt-stop signal
-         rtspsrc will look for it.
-
-2012-07-25 12:48:21 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/realmedia/rdtmanager.c:
-         rdt: set caps after activating the pad
-
-2012-07-25 12:48:06 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/realmedia/gstrdtbuffer.c:
-         rdt: reset map info
-
-2012-07-25 09:37:08 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstrtpasfdepay.c:
-         asfdepay: fix padding correction
-         Fix padding correction. gst_buffer_copy_into() appends the memory to the already
-         existing memory in the target buffer..
-         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=680536
-
-2012-07-23 13:32:26 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: copy buffer flags when cropping
-         When we crop a buffer, copy the flags as well.
-
-2012-07-23 11:25:34 +0200  Robert Swain <robert.swain@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Fix GstVideoInfo pointer
-
-2012-07-23 11:13:05 +0200  Robert Swain <robert.swain@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Correctly flag output buffer interlaced state
-         If the sequence is not flagged as progressive its buffers are marked
-         interlace mode mixed. There is an individual picture flag indicating
-         whether picture in the sequence are interlaced or not. This is used
-         along with the new GST_VIDEO_BUFFER_FLAG_INTERLACED to correctly and
-         completely indicate the buffer's interlaced state.
-         Also, TFF and RFF should only be set if the sequence is not progressive.
-
-2012-07-23 10:33:33 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         ext: Update for video base classes API changes
-
-2012-07-23 08:45:55 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 98e386f to 94ccf4c
-
-2012-07-20 16:12:45 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/asfdemux/asfpacket.c:
-         asfdemux: make sure to avoid arithmetic with _NONE timestamp
-
-2012-07-16 17:36:19 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * gst/asfdemux/asfpacket.c:
-         asfdemux: convert invalid 0 payload TS into GST_CLOCK_TIME_NONE
-         ... so it does not get used as first (valid) payload ts, whereas
-         the first real valid payload ts may be considerably larger.
-         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=679838
-
-2012-07-20 14:41:57 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: slightly relax supported seek requirements
-         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=680279
-
-2012-07-19 09:58:50 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Propagate GstFlowReturn where needed
-         It was just ignoring the return values...
-
-2012-07-19 09:56:17 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Store temporary buffers out of the way
-         When mpeg2dec needs to do cropping (because downstream can't handle it),
-         we need temporary buffers to decode to.
-         Use the user_data field to store those, and unify the rest of the code
-         that needs to touch a buffer (regardless of how/where it was allocated).
-         https://bugzilla.gnome.org/show_bug.cgi?id=680194
-
-2012-07-18 18:32:54 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Call gst_video_decoder_negotiate()
-
-2012-07-18 17:21:27 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: give stream tags a different event name so they don't overwrite global tags
-         There can only be one taglist per name for sticky tag events.
-         Needs to be fixed more properly, see
-         https://bugzilla.gnome.org/show_bug.cgi?id=677619
-
-2012-07-18 16:49:47 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/realmedia/rademux.c:
-         rademux: set/send caps on pad after activating it
-
-2012-07-18 16:46:46 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: set/send caps after activating the source pads
-         Makes sure the caps event isn't dropped immediately.
-
-2012-07-17 20:54:45 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdreadsrc: mustn't drop queries like caps query if not started yet
-
-2012-07-15 20:12:46 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: extract WM/Year as GstDateTime instead of GDate
-         So we can signal that only the year field is valid.
-
-2012-07-13 15:41:05 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: don't leak payload if we are not pushing it
-
-2012-07-13 13:59:16 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
-
-       * ext/sidplay/gstsiddec.cc:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rmdemux.c:
-         demuxers: Push STREAM_START when needed
-
-2012-07-13 11:36:40 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asf: don't push on inactive streams
-
-2012-07-12 18:05:10 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdreadsrc: set rank to NONE
-         It should never be autoplugged really, for DVD
-         playback there's rsndvd (or will be, realsoonnow).
-
-2012-07-09 16:27:25 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         fix for allocator API changes
-
-2012-07-06 11:50:55 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         update for query api changes
-
-2012-07-06 11:27:27 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         update for query api changes
-
-2012-07-06 11:03:19 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         update for allocation query changes
-
-2012-07-05 23:23:33 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * LICENSE_readme:
-         LICENSE_readme: fix typo
-
-2012-07-05 22:48:18 +0100  Tim-Philipp Müller <tim@centricular.net>
-
-       * LICENSE_readme:
-         LICENSE_readme: mention x264
-         https://bugzilla.gnome.org/show_bug.cgi?id=679472
-
-2012-07-05 13:12:17 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rmdemux.c:
-         gst: Implement segment-done event
-
-2012-06-27 11:23:36 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asf: fix x-wmv format in caps
-
-2012-06-27 10:24:45 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/asfpacket.c:
-         asf: unmap packets
-
-2012-06-21 15:13:57 +0100  Bastien Nocera <hadess@hadess.net>
-
-       * gst/asfdemux/asfpacket.c:
-       * gst/asfdemux/asfpacket.h:
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Ignore parsing errors from broken packets
-         We should instead be counting the number of errors and exiting if
-         they're too numerous. This makes a number of broken ASF files playable.
-         https://bugzilla.gnome.org/show_bug.cgi?id=678543
-         Conflicts:
-         gst/asfdemux/asfpacket.c
-         gst/asfdemux/gstasfdemux.c
-
-2012-06-26 17:15:43 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         fix interlace-mode
-
-2012-06-25 09:43:53 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Add comment explaining why we first chain up to the parent class' decide_allocation
-
-2012-06-25 09:34:53 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Set allocation parameters to guarantee 16-byte aligned output buffers
-         Fixes bug #377713.
-
-2012-06-20 13:36:25 -0400  Matej Knopp <matej.knopp@gmail.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Fix unitialized variable and taglist event
-
-2012-06-20 13:23:51 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: fix compilation
-
-2012-06-20 10:39:37 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/sidplay/gstsiddec.cc:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rdtmanager.c:
-       * gst/realmedia/rmdemux.c:
-         update for task api change
-
-2012-06-20 10:39:24 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/x264/gstx264enc.c:
-         fix compilation
-
-2012-06-20 09:06:37 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/mpeg2dec/gstmpeg2dec.h:
-         mpeg2dec: Port to 0.11 again
-
-2012-06-19 15:19:28 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Fix compiler warning
-
-2012-05-30 12:50:13 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/mpeg2dec/gstmpeg2dec.h:
-         mpeg2dec: Report PAR if not present upstream
-         And clean up some code
-
-2012-05-04 16:09:57 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: use _scale_ceil to compute frame period
-         https://bugzilla.gnome.org/show_bug.cgi?id=675769
-
-2012-05-04 16:08:27 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: mpeg2dec actually has 3 frame latency
-         https://bugzilla.gnome.org/show_bug.cgi?id=675769
-
-2012-05-01 18:49:03 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Fix large output buffers leak
-
-2012-05-01 18:46:31 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Port to new way of handling frame reference
-
-2012-05-01 16:12:42 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: don't leak input_state
-
-2012-04-13 19:06:52 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/mpeg2dec/gstmpeg2dec.h:
-         mpeg2dec: Port to GstVideoDecoder base class
-         Conflicts:
-         ext/mpeg2dec/gstmpeg2dec.c
-         ext/mpeg2dec/gstmpeg2dec.h
-         Back to 0.10 state, needs to be ported to 0.11 again.
-
-2012-06-19 09:26:46 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-         Merge remote-tracking branch 'origin/master'
-
-2012-06-19 09:26:02 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264enc: Port to 0.11 again
-
-2012-05-07 11:52:40 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Don't set latency while holding object lock
-         This reverts commit 30a0b50e9ca0d625e61f994d4f8acd022dcddf38.
-         https://bugzilla.gnome.org/show_bug.cgi?id=675762
-
-2012-05-03 18:07:24 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Use video encoder stream lock to avoid deadlock
-
-2012-05-01 18:45:33 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Port to new way of passing frame reference
-
-2012-04-30 19:00:09 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Set default stream-format to avc as it's a better format
-
-2012-04-26 22:27:55 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Fix setting latency
-         Fixes setting latency when framerate is dynamic and round up the latency
-         to avoid rounding issues.
-
-2012-04-30 18:59:44 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: gst_video_encoder_get_frame() is now transfer full
-
-2012-04-26 17:31:45 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: don't leak output state
-
-2012-04-18 17:09:12 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264enc: Remove x264 backward compatibility support
-
-2012-04-18 16:13:57 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Report latency base on x264 buffer size
-
-2012-04-17 15:44:24 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
-
-       * configure.ac:
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264enc: Port to GstVideoEncoder baseclass
-         Conflicts:
-         configure.ac
-         ext/x264/gstx264enc.c
-         ext/x264/gstx264enc.h
-         Back to 0.10 state, needs to be ported to 0.11 again.
-
-2012-06-16 18:29:54 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * Android.mk:
-       * LICENSE_readme:
-       * configure.ac:
-       * docs/plugins/Makefile.am:
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-       * docs/plugins/inspect/plugin-synaesthesia.xml:
-       * gst/synaesthesia/.gitignore:
-       * gst/synaesthesia/Makefile.am:
-       * gst/synaesthesia/README:
-       * gst/synaesthesia/gstsynaesthesia.c:
-       * gst/synaesthesia/gstsynaesthesia.h:
-       * gst/synaesthesia/synaescope.c:
-       * gst/synaesthesia/synaescope.h:
-         synaesthesia: remove experimental GPL-ed synaesthesia plugin
-         It never made it out of experimental, and there's a new
-         synaescope element in gst-plugins-bad that's hopefully
-         sufficiently similar.
-         https://bugzilla.gnome.org/show_bug.cgi?id=356882
-
-2012-06-16 18:13:47 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/mpegstream/.gitignore:
-         mpegstream: remove leftover hidden .gitignore file
-
-2012-06-08 15:55:28 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * gst/synaesthesia/gstsynaesthesia.c:
-       * tests/check/elements/amrnbenc.c:
-       * tests/check/elements/x264enc.c:
-         elements: Use gst_pad_set_caps() instead of manual event fiddling
-
-2012-06-08 15:05:22 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 03a0e57 to 98e386f
-
-2012-06-07 16:28:45 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * configure.ac:
-         Back to development
-
-=== release 0.11.92 ===
-
-2012-06-07 16:28:32 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 0.11.92
-
-2012-06-07 16:28:27 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2012-06-06 18:19:06 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 1fab359 to 03a0e57
-
-2012-06-06 13:03:04 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/sidplay/gstsiddec.cc:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rmdemux.c:
-         update for tag event change
-
-2012-06-01 10:29:16 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From f1b5a96 to 1fab359
-
-2012-05-31 13:08:49 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 92b7266 to f1b5a96
-
-2012-05-30 12:45:49 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From ec1c4a8 to 92b7266
-
-2012-05-30 11:24:04 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 3429ba6 to ec1c4a8
-
-2012-05-26 23:41:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/realmedia/rmutils.c:
-         realmedia: don't use GstStructure API on tag lists
-
-2012-05-21 14:57:44 +0200  Julien Isorce <julien.isorce@gmail.com>
-
-       * ext/a52dec/gsta52dec.c:
-         a52dec: really prefer the original number (and position) of channels
-         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=676495
-
-2012-05-24 12:32:25 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From dc70203 to 3429ba6
-
-2012-05-17 21:12:18 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * ext/x264/gstx264enc.c:
-         x264: bump x264 requirement to build 106 or later
-         Build 106 is from September 2010.
-         https://bugzilla.gnome.org/show_bug.cgi?id=676257
-
-2012-04-15 23:39:48 +0400  Руслан Ижбулатов <lrn1986@gmail.com>
-
-       * ext/a52dec/gsta52dec.c:
-       * m4/a52.m4:
-         a52dec: adapt to work also with new liba52
-         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=674091
-
-2012-05-17 12:40:05 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/a52dec/gsta52dec.c:
-         a52dec: trigger renegotiation upon changed stream channels
-         Fixes #675451
-
-2012-05-16 09:13:05 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * configure.ac:
-         configure: Require core/base 0.11.91
-
-2012-01-13 18:18:33 -0500  Matej Knopp <matej.knopp@gmail.com>
-
-       * .gitignore:
-         .gitignore: add visual studio IDE files and OS X .DS_Store files
-         https://bugzilla.gnome.org/show_bug.cgi?id=667899
-
-2012-05-13 17:00:50 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * configure.ac:
-         Back to development
-
-=== release 0.11.91 ===
-
-2012-05-13 16:49:04 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * common:
-       * configure.ac:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 0.11.91
-
-2012-05-13 16:48:57 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2012-05-13 16:45:50 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-         Merge branch 'master' of ssh://git.freedesktop.org/git/gstreamer/gst-plugins-ugly
-
-2012-05-13 15:56:27 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From dc70203 to 3429ba6
-
-2012-04-24 15:27:12 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * gst/asfdemux/asfpacket.c:
-         asfdemux: Use correct enum type
-
-2012-05-10 10:11:44 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: implement pull mode seek snap flags when an index is present
-         Also ensure we get a proper EOS when seeking past the end of the
-         file, or (when the snap after flag is set) between the last keyframe
-         and the end of the file.
-
-2012-05-03 23:50:30 +0100  Leon Merten Lohse <leon@green-side.de>
-
-       * ext/cdio/gstcdio.c:
-       * ext/cdio/gstcdio.h:
-       * ext/cdio/gstcdiocddasrc.c:
-         cdio: compensate for libcdio's recent cd-text api changes
-         https://bugzilla.gnome.org/show_bug.cgi?id=675112
-         Conflicts:
-         ext/cdio/gstcdiocddasrc.c
-
-2012-04-30 21:27:52 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdread: fix build after recent include reshuffling in core
-         Need to include gmodule.h ourselves now.
-
-2012-04-19 12:22:08 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         video: Update for libgstvideo API changes
-
-2012-04-16 09:09:35 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 6db25be to dc70203
-
-2012-04-12 13:56:48 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/asfdemux/asfpacket.c:
-       * gst/asfdemux/asfpacket.h:
-         asfdemux: fix performance issue, especially with high-bitrate streams
-         Two things were suboptimal from a performance point of view:
-         a) consider a large media object such as a video keyframe, which
-         may be split up into multiple fragments. We would assemble
-         the media object as follows:
-         buf = join (join (join (frag1, frag2), frag3), frag4)
-         which causes many unnecessary memcpy()s, and malloc/free,
-         which could easily add up to a multiple of the actual object
-         size. To avoid this, we allocate a buffer of the size needed
-         from the start and copy fragments into that directly.
-         b) for every fragment to join, we would create a sub-buffer
-         before joining it (which would discard the sub-buffer again),
-         leading to unnecessary miniobject create/free churn.
-         Conflicts:
-         gst/asfdemux/asfpacket.c
-         gst/asfdemux/asfpacket.h
-
-2012-04-12 14:45:51 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/asfdemux/asfpacket.c:
-         asfdemux: avoid unnecessary stream lookup
-         We have already retrieved the stream for that stream number and
-         made sure it's not NULL, so no need to do it again here; neither
-         the number nor the streams changed since the last time.
-
-2012-04-02 19:31:20 +0200  Alban Browaeys <prahal@yahoo.com>
-
-       * ext/a52dec/gsta52dec.c:
-         a52dec: fix first_access bigger than 2
-         gst_buffer_extract returns the number of bytes extracted, here 2 max.
-         Set size to the buffer size as was done in 0.10 to avoid first_access
-         error when it bypass 2.
-         https://bugzilla.gnome.org/show_bug.cgi?id=673434
-
-2012-04-13 13:43:30 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * autogen.sh:
-       * configure.ac:
-         configure: Modernize autotools setup a bit
-         Also we now only create tar.bz2 and tar.xz tarballs.
-
-2012-04-13 13:37:32 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 464fe15 to 6db25be
-
-2012-04-12 11:19:12 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * configure.ac:
-         Back to development
-
-=== release 0.11.90 ===
-
-2012-04-12 10:40:20 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 0.11.90
-
-2012-04-12 10:39:13 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2012-04-10 00:48:47 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/mad/gstmad.c.orig:
-         mad: remove .c.orig file
-
-2012-04-10 00:47:44 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbenc.c:
-       * ext/amrwbdec/amrwbdec.c:
-       * ext/cdio/gstcdiocddasrc.c:
-       * ext/dvdread/dvdreadsrc.c:
-       * ext/lame/gstlamemp3enc.c:
-       * ext/mad/gstmad.c:
-       * ext/mad/gstmad.c.orig:
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/sidplay/gstsiddec.cc:
-       * ext/twolame/gsttwolamemp2enc.c:
-       * ext/x264/gstx264enc.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstrtpasfdepay.c:
-       * gst/asfdemux/gstrtspwms.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/dvdsub/gstdvdsubdec.c:
-       * gst/dvdsub/gstdvdsubparse.c:
-       * gst/realmedia/pnmsrc.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rdtdepay.c:
-       * gst/realmedia/rdtmanager.c:
-       * gst/realmedia/rmdemux.c:
-       * gst/realmedia/rtspreal.c:
-       * gst/synaesthesia/gstsynaesthesia.c:
-       * gst/xingmux/gstxingmux.c:
-         Use new gst_element_class_set_static_metadata()
-
-2012-04-05 18:43:17 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 7fda524 to 464fe15
-
-2012-04-05 17:40:12 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/amrnb/amrnb.c:
-       * ext/amrwbdec/amrwb.c:
-       * ext/cdio/gstcdio.c:
-       * ext/dvdread/dvdreadsrc.c:
-       * ext/lame/plugin.c:
-       * ext/mad/gstmad.c:
-       * ext/mad/gstmad.c.orig:
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/sidplay/gstsiddec.cc:
-       * ext/twolame/gsttwolamemp2enc.c:
-       * ext/x264/gstx264enc.c:
-       * gst/asfdemux/gstasf.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/dvdsub/gstdvdsubdec.c:
-       * gst/realmedia/realmedia.c:
-       * gst/synaesthesia/gstsynaesthesia.c:
-       * gst/xingmux/plugin.c:
-         gst: Update for GST_PLUGIN_DEFINE() API changes
-
-2012-04-05 13:26:45 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * configure.ac:
-         configure: Update version to 0.11.89.1
-
-2012-04-04 14:38:53 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * configure.ac:
-       * docs/plugins/Makefile.am:
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-       * docs/version.entities.in:
-       * ext/a52dec/Makefile.am:
-       * ext/amrnb/Makefile.am:
-       * ext/amrwbdec/Makefile.am:
-       * ext/cdio/Makefile.am:
-       * ext/lame/Makefile.am:
-       * ext/mad/Makefile.am:
-       * ext/mpeg2dec/Makefile.am:
-       * ext/sidplay/Makefile.am:
-       * ext/twolame/Makefile.am:
-       * ext/x264/Makefile.am:
-       * gst-plugins-ugly.spec.in:
-       * gst/asfdemux/Makefile.am:
-       * gst/dvdlpcmdec/Makefile.am:
-       * gst/dvdsub/Makefile.am:
-       * gst/realmedia/Makefile.am:
-       * pkgconfig/Makefile.am:
-       * pkgconfig/gstreamer-plugins-ugly-uninstalled.pc.in:
-       * tests/check/Makefile.am:
-         gst: Update versioning
-
-2012-04-02 15:21:36 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/mpeg2dec/gstmpeg2dec.h:
-         mpeg2dec: fix cropping
-         fix cropping in mpeg2dec
-
-2012-04-01 20:19:36 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: add crop metadata when buffer is still writable
-
-2012-03-30 18:13:42 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstrtpasfdepay.c:
-         update for buffer api change
-
-2012-03-30 11:52:48 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/mad/gstmad.c:
-         ext: Update for audio decoder API changes
-
-2012-03-29 17:32:08 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * tests/check/elements/amrnbenc.c:
-       * tests/check/elements/x264enc.c:
-         tests: make more valgrind-friendly and plug caps leak
-
-2012-03-28 12:50:09 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/asfpacket.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/dvdsub/gstdvdsubdec.c:
-         update for buffer changes
-
-2012-03-27 14:07:40 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * tests/check/elements/x264enc.c:
-         tests: x264enc: adjust test to removal of deprecated properties
-
-2012-03-26 12:13:30 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-         Replace master with 0.11
-
-2012-03-22 15:56:04 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * configure.ac:
-         back to development
-
-=== release 0.11.2 ===
-
-2012-03-22 15:52:55 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * gst-plugins-ugly.doap:
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-       * win32/common/config.h:
-         Release 0.11.2
-
-2012-03-21 13:18:35 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * tests/check/elements/mpeg2dec.c:
-         tests: fix after memory changes
-
-2012-03-21 13:18:11 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264enc: remove deprecated properties
-
-2012-03-20 12:08:23 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-         Merge remote-tracking branch 'origin/master' into 0.11
-         So 0.11 folks also get amr include fixes.
-         Conflicts:
-         ext/a52dec/gsta52dec.c
-         ext/mad/gstmad.c
-
-2012-03-18 18:56:16 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/synaesthesia/gstsynaesthesia.c:
-         synaesthesia: fixup for bufferpool api changes
-         ... as well as some caps ref handling.
-
-2012-03-16 21:48:02 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rmdemux.c:
-         don't pass random pointers to pull_range
-
-2012-03-15 22:11:41 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         update for bufferpool changes
-
-2012-03-15 20:38:50 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         update for allocation query changes
-
-2012-03-15 13:38:16 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/dvdread/dvdreadsrc.c:
-       * ext/lame/gstlamemp3enc.c:
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/x264/gstx264enc.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/dvdsub/gstdvdsubdec.c:
-         update for memory api changes
-
-2012-03-14 19:52:52 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         take padding into account
-
-2012-03-13 18:27:51 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-         mad: simplify parsing code
-         Also fixes #671455 (expected at least).
-
-2012-03-12 16:16:17 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * configure.ac:
-         configure.ac: bump required GLib to 2.31.14
-         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=671911
-
-2012-03-12 12:23:43 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/sidplay/gstsiddec.cc:
-         fix for caps _normalize changes
-
-2012-03-11 19:07:19 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         fix for caps api changes
-
-2012-03-06 16:08:23 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/a52dec/gsta52dec.h:
-         a52dec: use base class tag handling helper
-         ... so as to ensure these to be handled and sent at proper time.
-
-2012-03-06 14:28:15 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdreadsrc: Use variable type with correct signedness
-
-2011-01-14 18:50:41 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Copy planes in one go when possible
-
-2012-03-03 17:17:31 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * ext/amrnb/amrnbdec.h:
-       * ext/amrnb/amrnbenc.h:
-       * ext/amrwbdec/amrwbdec.h:
-         amrnb, amrwbdec: fix build with opencore-amr >= 0.1.3
-         In previous versions, the opencore-amr include sub-directory
-         would be specified in the include path in the CFLAGS, but this
-         is no longer the case in newer versions, so we need to add those
-         to our include directives.
-         Based on patch by: Christian Morales Vega
-         https://bugzilla.gnome.org/show_bug.cgi?id=671123
-
-2012-03-03 16:56:13 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-         configure: get rid of non-pkg-config ways to check for opencore-amr
-
-2012-02-29 17:26:42 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         update for metadata API changes
-
-2012-02-27 06:35:01 +0100  Alessandro Decina <alessandro.d@gmail.com>
-
-       * ext/amrwbdec/Makefile.am:
-       * ext/lame/Makefile.am:
-       * ext/mad/Makefile.am:
-         amrwbdec, lame, mad: link to libgstbase
-
-2012-02-27 06:33:48 +0100  Alessandro Decina <alessandro.d@gmail.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: fix compiler warning
-
-2012-02-27 00:36:46 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-         Merge remote-tracking branch 'origin/master' into 0.11
-
-2012-02-27 00:34:09 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-         Merge commit '02f5d72a0519bcbe8f6958fab6dd998fc8ccda6b' into 0.11
-         Conflicts:
-         ext/mad/gstmad.c
-
-2012-02-23 11:20:33 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * win32/common/config.h:
-         Bump version after release
-
-2012-02-21 18:58:06 -0800  David Schleef <ds@schleef.org>
-
-       * autogen.sh:
-         autogen.sh: avoid touching .po files during 'make'
-         A simple workaround to deal with GNU gettext automake integration
-         failing to deal with git.  Fixes: #669207
-
-2012-02-22 02:17:55 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264: convert g_print to LOG
-
-2012-02-22 02:07:49 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstrtpasfdepay.c:
-         update for new memory api
-
-2012-02-22 02:07:29 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: handle pts and dts
-
-2012-02-21 18:53:57 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-         mad: handle libmad freeform parsing quirk
-
-2012-02-21 18:49:50 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-         mad: fixup unhacking last frame coaxing
-         ... so as to not only replace the data pointer but also available size.
-
-2012-02-20 14:27:49 +0000  Christian Fredrik Kalager Schaller <christian.schaller@collabora.co.uk>
-
-       * gst-plugins-ugly.spec.in:
-         Add latest plugins
-
-2012-02-18 00:02:20 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * win32/common/config.h:
-         win32: back to development
-
-2012-02-17 17:53:34 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * configure.ac:
-       * gst/synaesthesia/gstsynaesthesia.c:
-       * gst/synaesthesia/gstsynaesthesia.h:
-         synaesthesia: port to 0.11
-
-2012-02-17 17:53:28 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * configure.ac:
-       * gst/xingmux/gstxingmux.c:
-         xingmux: port to 0.11
-
-2012-02-17 11:06:59 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * configure.ac:
-         back to development
-
-=== release 0.11.1 ===
-
-2012-02-17 11:06:27 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * gst-plugins-ugly.doap:
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/eo.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-       * win32/common/config.h:
-         RELEASE 0.11.1
-
-2012-02-17 09:16:32 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-         Merge branch 'master' into 0.11
-         Conflicts:
-         ext/mad/gstmad.c
-
-2012-02-16 14:29:47 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-         mad: unhack last frame coaxing
-         ... so as to maximally use available base class API and interfere least
-         as possible with its internal state.
-
-2012-02-15 13:45:00 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-         mad: fix compilation
-
-2012-02-15 13:40:13 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-         mad: chain up to default event handler
-
-2012-02-11 05:38:41 -0500  Matej Knopp <matej.knopp@gmail.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: unmap video frame after encoding
-         Fixes major memory leak.
-         https://bugzilla.gnome.org/show_bug.cgi?id=669863
-
-2012-02-10 17:02:38 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: fix after merge
-
-2012-02-10 17:00:33 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-         Merge branch 'master' into 0.11
-         Conflicts:
-         ext/x264/gstx264enc.c
-
-2012-02-09 18:10:48 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/sidplay/gstsiddec.cc:
-       * ext/sidplay/gstsiddec.h:
-         sidplay: don't use ulong properties
-
-2012-02-09 16:14:55 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/sidplay/gstsiddec.cc:
-         sidplay: fix negotiation
-
-2012-02-09 11:55:07 +0100  Robert Swain <robert.swain@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Add baseline profile to caps
-         libx264 does not yet support the features that create the difference
-         between baseline and constrained baseline profile. Hence it currently
-         supports both though it can only technically encode constrained
-         baseline.
-
-2012-02-08 16:38:09 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/amrnb/amrnbenc.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/realmedia/rdtmanager.c:
-         GST_FLOW_WRONG_STATE -> GST_FLOW_FLUSHING
-
-2012-02-07 18:56:23 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * tests/check/elements/mpeg2dec.c:
-         mpeg2dec: fix test a bit more
-         Still broken because cropping is broken in mpeg2dec
-
-2012-02-07 11:06:29 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * tests/check/elements/amrnbenc.c:
-       * tests/check/elements/x264enc.c:
-       * tests/check/elements/xingmux.c:
-         tests: fix some tests
-
-2012-02-01 16:20:46 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/twolame/gsttwolamemp2enc.c:
-         twolame: Use new audio encoder/decoder base class API for srcpad caps
-
-2012-02-01 16:20:26 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/lame/gstlamemp3enc.c:
-         lame: Use new audio encoder/decoder base class API for srcpad caps
-
-2012-02-01 16:19:55 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-         mad: Use new audio encoder/decoder base class API for srcpad caps
-
-2012-02-01 16:17:57 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/a52dec/gsta52dec.c:
-         a52dec: Use new audio encoder/decoder base class API for srcpad caps
-
-2012-02-01 16:15:27 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/amrwbdec/amrwbdec.c:
-         amrwbdec: Use new audio encoder/decoder base class API for srcpad caps
-
-2012-02-01 16:14:08 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbenc.c:
-         amrnb: Use new audio encoder/decoder base class API for srcpad caps
-
-2012-01-31 15:52:38 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-         mad: ensure we do not confuse the base class with our buffer guard
-         mad expects extra bytes at the end of a buffer (see discussion in
-         http://www.mars.org/mailman/public/mad-dev/2001-May/000262.html),
-         and since we inject these without the base class' knowledge, we
-         need to hide the bodies better.
-         This fixes an assert at EOS when decoding an mp3 manually without
-         an intervening mpegaudioparse.
-
-2012-01-30 17:17:31 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/realmedia/rtspreal.c:
-         update for HEADER flag
-
-2011-07-20 09:00:58 +0200  Alessandro Decina <alessandro.d@gmail.com>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264enc: implement force-key-unit API
-
-2012-01-25 13:58:48 +0100  Thomas Vander Stichele <thomas (at) apestaart (dot) org>
-
-       * common:
-         Automatic update of common submodule
-         From c463bc0 to 7fda524
-
-2012-01-25 13:58:54 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrwbdec/amrwbdec.c:
-         amr: port to 0.11 again
-
-2012-01-25 13:03:33 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-         Merge branch 'master' into 0.11
-         Conflicts:
-         ext/a52dec/gsta52dec.c
-
-2012-01-25 07:24:59 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbenc.c:
-       * ext/amrwbdec/amrwbdec.c:
-       * ext/dvdread/dvdreadsrc.c:
-       * ext/lame/gstlamemp3enc.c:
-       * ext/mad/gstmad.c:
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/sidplay/gstsiddec.cc:
-       * ext/twolame/gsttwolamemp2enc.c:
-       * gst/asfdemux/asfpacket.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstrtpasfdepay.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/dvdsub/gstdvdsubdec.c:
-       * gst/dvdsub/gstdvdsubdec.h:
-       * gst/realmedia/gstrdtbuffer.c:
-       * gst/realmedia/gstrdtbuffer.h:
-       * gst/realmedia/rdtdepay.c:
-       * gst/realmedia/rmdemux.c:
-       * gst/realmedia/rmutils.c:
-         port to new memory API
-
-2012-01-25 11:38:56 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 2a59016 to c463bc0
-
-2012-01-22 23:56:07 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst-libs/gst/glib-compat-private.h:
-         Remove compatibility versions for deprecated GLib API
-
-2012-01-19 15:26:25 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
-       * ext/a52dec/gsta52dec.c:
-         a52dec: fix read buffer overflow upon syncing
-         The wrong size was being decremented, leading to a runaway
-         read loop.
-
-2012-01-19 15:06:47 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * common:
-       * configure.ac:
-         Add --disable-fatal-warnings configure option
-
-2012-01-19 11:34:41 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rdtmanager.c:
-       * gst/realmedia/rmdemux.c:
-         port to new gthread API
-
-2012-01-18 17:00:26 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * configure.ac:
-         configure.ac: Require GLib 2.31.10 for consistency
-
-2012-01-18 16:46:42 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 0807187 to 2a59016
-
-2012-01-17 11:55:59 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/amrwbdec/amrwbdec.c:
-         amrwbdec: _parse should not return OK if not enough data yet
-
-2012-01-17 11:55:14 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/amrnb/amrnbdec.c:
-         amrnbdec: _parse should not return OK if not enough data yet
-
-2012-01-13 15:03:50 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdreadsrc: fix off by one in cell calculation for the last chapter
-
-2012-01-13 15:56:47 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: set caps on src pad before adding it
-
-2012-01-13 15:56:25 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: perform writable buffer map to copy into it
-
-2012-01-13 15:55:15 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/asfdemux/asfpacket.c:
-       * gst/asfdemux/asfpacket.h:
-         asfpacket: fix 0.11 ported payload extraction
-         ... to cater for not necessarily offset == size - cur_pos,
-         as size may have been adjusted due to padding.
-         Fixes #667567.
-
-2012-01-13 13:46:50 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: remove useless and semantically (though not practically) wrong code
-         The object will be freed, so it's pointless to set the pointers
-         to NULL anyway.
-
-2012-01-13 13:46:28 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: remove leaking "optimization"
-
-2012-01-13 00:05:50 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         GST_TYPE_DATE -> G_TYPE_DATE
-
-2012-01-13 00:01:01 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-         Merge remote-tracking branch 'origin/master' into 0.11
-         Conflicts:
-         ext/a52dec/gsta52dec.c
-
-2012-01-12 13:25:22 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/a52dec/gsta52dec.c:
-         a52dec: plug buffer leak
-
-2012-01-12 13:20:26 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/a52dec/gsta52dec.c:
-         a52dec: plug buffer leak
-
-2012-01-11 12:31:11 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/amrnb/amrnbenc.c:
-         amrnbenc: _map and _unmap the appropriate input and output buffers
-
-2012-01-10 15:25:12 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/a52dec/gsta52dec.c:
-         a52dec: Fix some merge mistakes
-
-2012-01-10 15:17:11 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-         Merge branch 'master' into 0.11
-         Conflicts:
-         ext/a52dec/gsta52dec.c
-         ext/a52dec/gsta52dec.h
-         ext/lame/gstlame.c
-         ext/lame/gstlame.h
-         ext/lame/gstlamemp3enc.c
-         ext/mad/gstmad.c
-         ext/mad/gstmad.h
-         gst/mpegaudioparse/gstmpegaudioparse.c
-         gst/mpegstream/gstdvddemux.c
-         gst/realmedia/rdtdepay.c
-         po/es.po
-         po/lv.po
-         po/sr.po
-
-2012-01-10 11:41:52 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/dvdsub/Makefile.am:
-         dvdsub: add some CFLAGS and LIBS in Makefile.am
-         ... since adapter is still used.
-
-2012-01-09 16:00:18 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: Don't use buffer after unreffing
-
-2012-01-09 15:46:10 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Only change writable caps and make sure to set updated caps on the srcpad
-
-2012-01-09 15:24:53 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-         mad: Correctly unmap the buffer with the original data pointer
-
-2012-01-09 15:15:28 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-         mad: Make sure to set caps on the srcpad if none are set yet
-
-2012-01-08 14:24:11 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/mad/Makefile.am:
-         mad: fix LIBS order in Makefile.am
-
-2012-01-07 21:04:01 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/mad/gstmad.h:
-         mad: remove left-over id3tag.h include
-         We don't use libid3tag any more.
-
-2012-01-05 12:17:20 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-         dvdlpcmdec: fix for multichannel
-
-2012-01-04 16:05:59 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/a52dec/gsta52dec.h:
-         a52dec: Update for the new raw audio caps
-
-2012-01-04 15:49:38 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-         mad: Update for the new raw audio caps
-
-2012-01-04 15:45:43 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/lame/gstlamemp3enc.c:
-         lamemp3enc: Update for the new raw audio caps
-
-2012-01-04 15:44:37 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/twolame/gsttwolamemp2enc.c:
-         twolamemp2enc: Update for the new raw audio caps
-
-2012-01-04 15:43:13 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/amrwbdec/amrwbdec.c:
-         amrwbdec: Add the new layout field to the raw audio caps
-
-2012-01-04 15:42:29 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbenc.c:
-         amrnb: Add the new layout field to the raw audio caps
-
-2012-01-04 15:26:56 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.h:
-         dvdlpcmdec: Port to the new raw audio caps
-
-2012-01-04 15:12:26 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Update for libgstriff API changes
-         Still needs to handle audio channel reordering.
-
-2012-01-04 19:53:13 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 50b34ab to 0807187
-
-2012-01-04 17:05:32 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/lame/Makefile.am:
-         lame: fix LIBADD order in Makefile.am
-
-2012-01-04 10:33:27 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * tests/check/elements/amrnbenc.c:
-       * tests/check/elements/mpeg2dec.c:
-       * tests/check/elements/x264enc.c:
-       * tests/check/elements/xingmux.c:
-       * tests/check/generic/states.c:
-         tests: make tests compile
-
-2012-01-03 15:27:42 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/amrwbdec/amrwbdec.c:
-       * ext/dvdread/dvdreadsrc.c:
-       * ext/mad/gstmad.c:
-       * ext/sidplay/gstsiddec.cc:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/realmedia/pnmsrc.c:
-       * gst/realmedia/rdtmanager.c:
-       * gst/realmedia/rmdemux.c:
-         GST_FLOW_UNEXPECTED -> GST_FLOW_EOS
-
-2011-12-30 18:31:32 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * tests/check/Makefile.am:
-         tests: disable generic index test
-
-2011-12-30 17:53:12 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: remove all seeking-related code
-         A parser or demuxer upstream should handle this Same for
-         queries.
-
-2011-12-30 17:49:01 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/mpeg2dec/gstmpeg2dec.h:
-         mpeg2dec: update for GstIndex removal
-
-2011-12-30 17:46:06 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/cdio/gstcdiocddasrc.c:
-         cdio: update for probe vfunc removal in GstAudioCdSrc
-
-2011-12-27 22:54:34 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/lame/gstlame.c:
-       * ext/lame/gstlamemp3enc.c:
-         lame: fix printf format in debug statements
-         https://bugzilla.gnome.org/show_bug.cgi?id=666926
-
-2011-12-26 18:24:32 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/lame/gstlame.c:
-       * ext/lame/gstlame.h:
-         lame: ensure parsed output
-         ... by doing some basic parsing of encoded lame data.
-
-2011-12-26 16:34:01 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/lame/gstlame.h:
-         lame: cleanup unused instance struct fields
-
-2011-12-26 18:23:52 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/lame/Makefile.am:
-       * ext/lame/gstlamemp3enc.c:
-       * ext/lame/gstlamemp3enc.h:
-         lamemp3enc: ensure parsed output
-         ... by doing some basic parsing of encoded lame data.
-         Fixes #652150.
-
-2011-12-26 18:15:41 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/lame/gstlamemp3enc.c:
-         lamemp3enc: do not leak merged tags
-
-2011-12-22 15:23:54 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-       * ext/mad/gstmad.h:
-         mad: helpfully bodge the last buffer to let mad decode the last frame
-         If http://www.mars.org/mailman/public/mad-dev/2001-May/000262.html is
-         to be believed, the last buffer must be followed by a number of 0 bytes
-         in order for the last frame to be decoded (at least in some cases).
-         Doing so seems to work here, fixing a missing 1152 samples when using
-         mp3parse before mad (not using mp3parse would yield the correct amount
-         of samples, if there's extra non-MP3 data after (eg, tag data)).
-
-2009-01-25 22:49:11 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdreadsrc: map subtitle language tag to stream indicated in PGC data
-
-2009-01-25 22:49:11 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/mpegstream/gstdvddemux.c:
-         dvddemux: tweak subtitle stream setup based on dvd language codes event
-         ... to allow for non-continuous subtitle stream numbers.
-         The missing stream numbers tend to come up as subtitle streams anyway
-         (albeit not with an identified language tag).
-
-2011-12-21 13:56:35 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdreadsrc: minor safety tweak to sector seeking
-
-2011-12-20 11:54:38 +0100  Julien Isorce <julien.isorce@gmail.com>
-
-       * ext/a52dec/gsta52dec.c:
-         a52dec: check that a52_init returns a valid a52 state
-
-2011-12-19 18:20:56 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: update for new interlaced flags
-
-2011-12-14 17:33:52 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/a52dec/Makefile.am:
-       * ext/a52dec/gsta52dec.c:
-       * ext/a52dec/gsta52dec.h:
-         a52dec: port to audiodecoder
-
-2011-12-12 13:44:12 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/mad/Makefile.am:
-       * ext/mad/gstmad.c:
-       * ext/mad/gstmad.h:
-         mad: port to audiodecoder
-
-2011-12-13 14:54:18 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/a52dec/gsta52dec.c:
-         a52dec: Don't claim to support upstream renegotiation
-         and use fixed caps on the srcpad. To correctly support
-         upstream renegotiation a52dec would need to check if the
-         caps of the downstream allocated buffer are the requested
-         caps or if the size is different.
-         Fixes bug #665989.
-
-2011-12-13 14:52:26 +0100  Julien Isorce <julien.isorce@gmail.com>
-
-       * ext/a52dec/gsta52dec.c:
-         a52dec: Check that the a52_state is correctly initialized
-
-2011-12-12 11:33:31 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst-libs/gst/Makefile.am:
-       * gst-libs/gst/glib-compat-private.h:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rdtmanager.c:
-       * gst/realmedia/rmdemux.c:
-         Work around deprecated thread API in glib master
-         Add private replacements for deprecated functions such as
-         g_mutex_new(), g_mutex_free(), g_cond_new() etc., mostly
-         to avoid the deprecation warnings. We can't change most of
-         these in 0.10 because they're part of our API and ABI.
-         Suppress deprecation warnings in selected files, mostly for
-         g_static_rec_mutex_*. StaticRecMutex is part of our API/ABI,
-         not much we can do here in 0.10.
-
-2011-12-10 15:19:03 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * po/LINGUAS:
-       * po/eo.po:
-       * po/es.po:
-       * po/lv.po:
-       * po/sr.po:
-         po: update translations
-
-2011-12-09 15:25:21 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/realmedia/rdtdepay.c:
-         rdtdepay: make buffer metadata writable before setting caps on it
-         Fixes issue when the header buffer is being pushed, which was taken
-         from the caps and is therefore not writable.
-
-2011-12-06 14:00:18 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/dvdread/dvdreadsrc.c:
-         fix for basesrc changes
-
-2011-12-05 18:43:49 +0100  Edward Hervey <edward@collabora.com>
-
-       * gst/asfdemux/gstrtpasfdepay.c:
-         rtpasfdepay: Initialize GstRTPBuffer before usage
-
-2011-12-02 02:01:06 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-         Merge remote-tracking branch 'origin/master' into 0.11
-         Conflicts:
-         ext/dvdread/dvdreadsrc.c
-
-2011-11-29 08:49:23 +0100  Руслан Ижбулатов <lrn1986@gmail.com>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdreadsrc: Fix format string compiler warning
-         Fixes bug #665101.
-
-2011-11-28 21:31:25 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-         Merge remote-tracking branch 'origin/master' into 0.11
-
-2011-11-28 18:26:34 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         Update for indexable change
-
-2011-11-28 17:52:52 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/realmedia/rdtmanager.c:
-         update for clock provider API change
-
-2011-11-28 13:10:01 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbenc.c:
-       * ext/amrwbdec/amrwbdec.c:
-       * ext/dvdread/dvdreadsrc.c:
-       * ext/lame/gstlame.c:
-       * ext/lame/gstlamemp3enc.c:
-       * ext/mad/gstmad.c:
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/sidplay/gstsiddec.cc:
-       * ext/twolame/gsttwolame.c:
-       * ext/x264/gstx264enc.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstrtpasfdepay.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/dvdsub/gstdvdsubdec.c:
-       * gst/dvdsub/gstdvdsubparse.c:
-       * gst/iec958/ac3iec.c:
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-       * gst/mpegaudioparse/gstxingmux.c:
-       * gst/mpegstream/gstdvddemux.c:
-       * gst/mpegstream/gstmpegdemux.c:
-       * gst/mpegstream/gstmpegparse.c:
-       * gst/mpegstream/gstrfc2250enc.c:
-       * gst/realmedia/pnmsrc.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rdtdepay.c:
-       * gst/realmedia/rdtmanager.c:
-       * gst/realmedia/rmdemux.c:
-       * gst/synaesthesia/gstsynaesthesia.c:
-         various: fix pad template ref leaks
-         https://bugzilla.gnome.org/show_bug.cgi?id=662664
-
-2011-11-24 21:41:55 +0100  René Stadler <rene.stadler@collabora.co.uk>
-
-       * tests/check/elements/xingmux.c:
-         tests: update for gstcheck API change
-
-2011-11-23 23:29:03 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/amrnb/amrnbenc.c:
-       * ext/dvdread/dvdreadsrc.c:
-       * ext/lame/gstlamemp3enc.c:
-       * ext/twolame/gsttwolamemp2enc.c:
-         ext: fix more printf format warnings in debug messages
-
-2011-11-21 22:02:07 +0100  Matej Knopp <matej.knopp@gmail.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstrtpasfdepay.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/dvdsub/gstdvdsubdec.c:
-       * gst/dvdsub/gstdvdsubparse.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rmdemux.c:
-         Fix print format compiler warnings on OS X / 64bit
-         https://bugzilla.gnome.org/show_bug.cgi?id=662617
-
-2011-11-21 13:36:10 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rdtmanager.c:
-       * gst/realmedia/rmdemux.c:
-         update for activation changes
-
-2011-11-18 18:00:28 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rmdemux.c:
-         update for new scheduling query
-
-2011-11-18 13:59:29 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rdtmanager.c:
-       * gst/realmedia/rmdemux.c:
-         add parent to activate functions
-
-2011-11-17 15:25:58 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/sidplay/gstsiddec.cc:
-       * ext/x264/gstx264enc.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/dvdsub/gstdvdsubdec.c:
-       * gst/dvdsub/gstdvdsubparse.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rdtdepay.c:
-       * gst/realmedia/rdtmanager.c:
-       * gst/realmedia/rmdemux.c:
-         add parent to pad functions
-
-2011-11-16 17:28:56 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/sidplay/gstsiddec.cc:
-       * ext/x264/gstx264enc.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rdtmanager.c:
-       * gst/realmedia/rmdemux.c:
-         add parent to query function
-
-2011-11-15 17:55:36 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/realmedia/rademux.c:
-         _query_peer_*() -> _peer_query_*()
-
-2011-11-15 17:42:32 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/dvdsub/gstdvdsubdec.c:
-         _accept_caps() -> _query_accept_caps()
-
-2011-11-15 17:23:39 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         _peer_get_caps() -> _peer_query_caps()
-
-2011-11-15 16:52:55 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         update for _get_caps() -> _query_caps()
-
-2011-11-15 16:34:39 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         change getcaps to query
-
-2011-11-14 00:55:16 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-         mad: re-instate accidentally dropped rank
-
-2011-11-13 23:47:46 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/dvdread/dvdreadsrc.c:
-       * gst/realmedia/pnmsrc.c:
-         Update for GstURIHandler get_protocols() changes
-
-2011-11-13 19:01:31 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/dvdread/dvdreadsrc.c:
-       * ext/dvdread/dvdreadsrc.h:
-       * gst/realmedia/pnmsrc.c:
-         dvdreadsrc, pnmsrc: update for GstURIHandler changes
-
-2011-11-13 01:33:25 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-         mad: re-port to 0.11
-         This time using the base class. Still something
-         wrong with the parsing though, when there's no
-         parser or demuxer upstream (which of course
-         shouldn't happen in a normal playback scenario).
-
-2011-11-13 00:29:20 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-       * ext/mad/gstmad.h:
-         mad: update for GstBaseAudioDecoder -> GstAudioDecoder rename
-
-2011-08-16 21:12:06 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-       * ext/mad/gstmad.h:
-         mad: replace with 0.10 version ported to GstAudioDecoder
-         Taken from commit 6e7e3657396454fe95fbd89170281865d4d1cec3
-         of Mark's baseaudio branch.
-         Would probably be too risky to drop this into 0.10 given
-         all the things mad is doing.
-
-2011-11-13 00:13:17 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-         docs: remove bits for old lame element from sections.txt file
-
-2011-11-13 00:04:07 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * Android.mk:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * gst-plugins-ugly.spec.in:
-       * gst/mpegstream/Makefile.am:
-       * gst/mpegstream/README:
-       * gst/mpegstream/gstdvddemux.c:
-       * gst/mpegstream/gstdvddemux.h:
-       * gst/mpegstream/gstmpegclock.c:
-       * gst/mpegstream/gstmpegclock.h:
-       * gst/mpegstream/gstmpegdemux.c:
-       * gst/mpegstream/gstmpegdemux.h:
-       * gst/mpegstream/gstmpegpacketize.c:
-       * gst/mpegstream/gstmpegpacketize.h:
-       * gst/mpegstream/gstmpegparse.c:
-       * gst/mpegstream/gstmpegparse.h:
-       * gst/mpegstream/gstmpegstream.c:
-       * gst/mpegstream/gstrfc2250enc.c:
-       * gst/mpegstream/gstrfc2250enc.h:
-       * gst/mpegstream/mpegstream.vcproj:
-       * gst/mpegstream/notes:
-       * win32/MANIFEST:
-       * win32/vs6/gst_plugins_ugly.dsw:
-       * win32/vs6/libgstac3parse.dsp:
-       * win32/vs6/libgstmpegaudioparse.dsp:
-       * win32/vs6/libgstmpegstream.dsp:
-         mpegstream: remove the old mpeg-ps parser and demuxers
-         Don't want anyone porting this by accident.
-         Superseded by mpegpsdemux in -bad.
-
-2011-11-12 21:06:29 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * ext/cdio/Makefile.am:
-       * ext/cdio/gstcdio.c:
-       * ext/cdio/gstcdiocddasrc.c:
-       * ext/cdio/gstcdiocddasrc.h:
-         cdio: port cdiocddasrc to 0.11
-
-2011-11-12 20:44:23 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * tests/check/elements/mpeg2dec.c:
-         tests: port mpeg2dec to 0.11
-         It compiles, but fails.
-
-2011-11-12 20:33:03 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * tests/check/elements/x264enc.c:
-         tests: port x264enc unit test to 0.11
-         Well, it compiles now at least.
-
-2011-11-11 12:33:51 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstrtpasfdepay.h:
-         update for base class rename
-
-2011-11-11 12:25:25 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstrtpasfdepay.c:
-       * gst/asfdemux/gstrtpasfdepay.h:
-         update for base class rename
-
-2011-11-11 01:30:11 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         po: update translations
-
-2011-11-11 01:29:33 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-         docs: update docs
-
-2011-11-11 01:27:47 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/lame/gstlamemp3enc.c:
-         lamemp3enc: cosmetic error message change
-         LET'S TRY TO KEEP CAPITALS TO A MINIMUM.
-
-2011-11-11 00:58:24 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * docs/plugins/Makefile.am:
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-       * ext/twolame/Makefile.am:
-       * ext/twolame/gsttwolamemp2enc.c:
-       * ext/twolame/gsttwolamemp2enc.h:
-       * po/POTFILES.in:
-         twolame: rename to twolamemp2enc
-
-2011-11-11 00:51:34 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * ext/twolame/gsttwolame.c:
-         twolame: port to 0.11
-
-2011-11-10 23:17:53 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * Android.mk:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * gst-plugins-ugly.spec.in:
-       * gst/iec958/Makefile.am:
-       * gst/iec958/ac3_padder.c:
-       * gst/iec958/ac3_padder.h:
-       * gst/iec958/ac3iec.c:
-       * gst/iec958/ac3iec.h:
-       * win32/MANIFEST:
-       * win32/vs6/libgstiec958.dsp:
-         iec958: remove this plugin
-         I think it can just go away. Audio sinks can and should payload
-         things themselves using the helper API in libgstaudio. If such
-         a plugin still makes sense, it should probably be rewritten
-         using the library functions (and be put into -good or so).
-
-2011-11-10 18:25:38 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rmdemux.c:
-       * gst/realmedia/rtspreal.c:
-         update for adapter api change
-
-2011-11-10 11:04:06 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         update for removed fixate function
-
-2011-11-09 11:58:03 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/realmedia/rmdemux.c:
-         remove query types
-
-2011-11-04 17:32:58 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * configure.ac:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rdtdepay.c:
-       * gst/realmedia/rmdemux.c:
-       * gst/realmedia/rmutils.c:
-         realmedia is ported
-
-2011-11-04 16:40:59 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/mpegstream/gstdvddemux.c:
-       * gst/mpegstream/gstmpegdemux.c:
-       * gst/realmedia/rmdemux.c:
-       * gst/realmedia/rmdemux.h:
-         more template fixes
-
-2011-11-04 16:32:48 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * po/POTFILES.in:
-         po: lame => lamemp3enc
-
-2011-11-04 12:04:56 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/realmedia/rdtmanager.c:
-         make request pads take %u
-
-2011-11-04 10:45:47 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/mpeg2dec/gstmpeg2dec.h:
-         mpeg2dec: Add basic cropping support
-
-2011-11-02 12:09:45 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/sidplay/gstsiddec.cc:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-         tags: update for tag API removal
-
-2011-10-31 02:24:30 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/mpeg2dec/gstmpeg2dec.h:
-         update for meta api change
-
-2011-10-29 09:10:54 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         structure: fix for api update
-
-2011-10-31 14:34:57 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-         Merge remote-tracking branch 'origin/master' into 0.11
-
-2011-10-30 15:05:56 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * tests/check/elements/amrnbenc.c:
-         tests: port amrnbenc test to 0.11
-
-2011-10-30 15:04:22 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbenc.c:
-         amrnb: fix up raw audio caps for 0.11
-
-2011-10-30 15:03:29 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * tests/check/Makefile.am:
-         tests: need to define GST_USE_UNSTABLE_API to avoid warnings
-
-2011-10-30 12:29:14 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * docs/plugins/Makefile.am:
-       * ext/lame/Makefile.am:
-       * ext/lame/README:
-       * ext/lame/gstlame.c:
-       * ext/lame/gstlame.h:
-       * ext/lame/plugin.c:
-       * ext/lame/test-lame.c:
-       * gst/xingmux/gstxingmux.c:
-       * tests/check/pipelines/lame.c:
-         lame: remove lame element, it's been superseded by lamemp3enc
-
-2011-10-30 11:51:58 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/lame/gstlamemp3enc.c:
-       * ext/mad/gstmad.c:
-       * ext/sidplay/gstsiddec.cc:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-         ext, gst: update for taglist API changes
-
-2011-10-29 11:57:40 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Don't leak pending payload buffers
-         Fixes #662964
-
-2011-10-28 15:21:27 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-         Merge branch 'master' into 0.11
-         Conflicts:
-         ext/sidplay/gstsiddec.cc
-
-2011-10-27 16:53:44 +0200  Stefan Sauer <ensonic@users.sf.net>
-
-       * ext/sidplay/gstsiddec.cc:
-         siddec: use BOILERPLATE macro and cleanup FIXMEs
-
-2011-10-28 09:18:04 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/asfdemux/gstrtpasfdepay.c:
-         asfdepay: fix compiler warnings after gst_caps_new_simple() change
-
-2011-10-21 12:24:01 +0100  Christian Fredrik Kalager Schaller <christian.schaller@collabora.co.uk>
-
-       * gst-plugins-ugly.spec.in:
-         Update specfile with latest changes
-
-2011-10-11 18:03:01 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Don't unmap a buffer that doesn't exist
-
-2011-10-10 12:38:02 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * configure.ac:
-       * ext/dvdread/dvdreadsrc.c:
-         dvdread: port to 0.11
-
-2011-10-06 17:24:22 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * configure.ac:
-       * gst/dvdsub/Makefile.am:
-       * gst/dvdsub/gstdvdsubdec.c:
-       * gst/dvdsub/gstdvdsubdec.h:
-       * gst/dvdsub/gstdvdsubparse.c:
-         dvdsub: port to 0.11
-
-2011-10-05 13:32:33 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-         Merge branch 'master' into 0.11
-         Conflicts:
-         ext/amrwbdec/Makefile.am
-         ext/amrwbdec/amrwbdec.c
-
-2011-10-05 13:18:45 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/realmedia/gstrdtbuffer.c:
-       * gst/realmedia/gstrdtbuffer.h:
-       * gst/realmedia/pnmsrc.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rdtdepay.c:
-       * gst/realmedia/rdtmanager.c:
-       * gst/realmedia/rmdemux.c:
-       * gst/realmedia/rmutils.c:
-       * gst/realmedia/rtspreal.c:
-         realmedia: port to 0.11
-
-2011-10-05 12:05:34 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/amrwbdec/Makefile.am:
-       * ext/amrwbdec/amrwbdec.c:
-       * ext/amrwbdec/amrwbdec.h:
-         amrwbdec: port to audiodecoder
-
-2011-10-04 17:00:57 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/amrnb/Makefile.am:
-         amrnbdec: fixup build
-
-2011-10-04 17:00:41 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/amrnb/amrnbdec.c:
-         amrnbdec: remove leftover extraneous _unref
-
-2011-10-04 17:50:33 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-         Merge branch 'master' into 0.11
-         Conflicts:
-         ext/amrnb/amrnbdec.c
-
-2011-10-04 17:35:40 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * configure.ac:
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbenc.c:
-         amrnb: port to 0.11
-
-2011-10-04 17:12:35 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * configure.ac:
-       * ext/amrwbdec/Makefile.am:
-       * ext/amrwbdec/amrwbdec.c:
-         ported amrwbdec to 0.11
-
-2011-10-03 17:19:02 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbdec.h:
-         amrnbdec: port to audiodecoder
-
-2011-09-30 17:45:31 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-         Merge branch 'master' into 0.11
-
-2011-09-30 17:38:07 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * configure.ac:
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/mpeg2dec/gstmpeg2dec.h:
-         mpeg2dec: minimal port to 0.11
-
-2011-09-05 11:11:52 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/mpeg2dec/gstmpeg2dec.h:
-         mpeg2dec: post QoS messages when dropping a frame due to QoS
-         https://bugzilla.gnome.org/show_bug.cgi?id=658241
-
-2011-09-28 13:05:55 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * configure.ac:
-         configure: update ported plugins list
-
-2011-09-28 13:03:31 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * common:
-         update to 0.11 branch
-
-2011-09-27 20:32:46 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.h:
-         dvdlpcmdec: port to 0.11
-
-2011-09-27 18:19:50 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/lame/gstlame.c:
-       * ext/lame/gstlamemp3enc.c:
-         lame: fix raw audio caps too
-
-2011-09-27 18:15:00 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/lame/gstlame.c:
-       * ext/lame/gstlamemp3enc.c:
-         lame: port to 0.11
-
-2011-09-27 17:54:02 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-         Merge branch 'master' into 0.11
-
-2011-09-27 17:51:31 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264enc: port to 0.11
-
-2011-09-27 17:01:59 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/amrnb/Makefile.am:
-       * ext/amrnb/amrnbenc.c:
-       * ext/amrnb/amrnbenc.h:
-         amrnbenc: port to audioencoder
-
-2011-09-26 19:07:23 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-         Merge branch 'master' into 0.11
-         Conflicts:
-         ext/mad/gstmad.c
-
-2011-09-26 19:03:13 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/a52dec/gsta52dec.c:
-         port a52dec to 0.11
-
-2011-09-26 16:29:12 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/twolame/gsttwolame.c:
-         twolame: Simple fix for GstAudioEncoder API change
-
-2011-09-26 16:28:08 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/twolame/gsttwolame.c:
-         twolame: Fix variable 'gstelement_class' set but not used compiler warning
-
-2011-09-26 16:08:20 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/lame/gstlame.c:
-       * ext/lame/gstlamemp3enc.c:
-         lame: Don't get the parent class again, GST_BOILERPLATE does this already
-
-2011-09-26 16:07:54 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/lame/gstlame.c:
-       * ext/lame/gstlamemp3enc.c:
-         lame: Fix variable 'gstelement_class' set but not used compiler warning
-
-2011-09-26 12:07:15 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/twolame/gsttwolame.c:
-         twolame: improve output framing and timestamping
-         ... which simply comes down to requesting one frame of input data at a time,
-         since the encoder nicely turns this into 1 encoded frame.
-
-2011-09-26 11:56:23 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/twolame/Makefile.am:
-       * ext/twolame/gsttwolame.c:
-       * ext/twolame/gsttwolame.h:
-         twolame: port to audioencoder
-
-2011-09-23 15:32:01 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/lame/gstlame.c:
-         lame: use some more boilerplate
-
-2011-09-23 15:26:48 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/lame/gstlame.c:
-       * ext/lame/gstlame.h:
-         lame: port to audioencoder
-
-2011-09-23 14:33:55 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/lame/gstlamemp3enc.c:
-         lamemp3enc: use some more boilerplate
-
-2011-09-26 14:44:23 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/lame/gstlamemp3enc.c:
-         lamemp3enc: really report bitrate rather kbitrate
-
-2011-09-26 14:44:01 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/lame/Makefile.am:
-       * ext/lame/gstlamemp3enc.c:
-       * ext/lame/gstlamemp3enc.h:
-         lamemp3enc: port to audioencoder
-
-2011-09-16 15:35:06 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdreadsrc: take into account first sector of the current title
-         This fixes seeking on titles which do not start on a new file.
-         https://bugzilla.gnome.org/show_bug.cgi?id=659252
-
-2011-09-16 15:03:54 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdreadsrc: fix sector seeking
-         It was overly complicated, and did not take into account the offset
-         needed for titles which do not start on a new file.
-         https://bugzilla.gnome.org/show_bug.cgi?id=659252
-
-2011-09-16 13:42:53 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdreadsrc: fix sector search for packed titles
-         Some DVD titles are packed in a single set, and we need to use
-         the correct table to map times to sectors.
-         https://bugzilla.gnome.org/show_bug.cgi?id=659252
-
-2011-08-15 16:23:04 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * ext/mad/Makefile.am:
-       * ext/mad/gstmad.c:
-       * gst-plugins-ugly.spec.in:
-         mad: remove id3tag dependency used by in practice unreachable legacy code
-         The mad mp3 decoder element shouldn't parse tags at all really, but we
-         have so far kept this code around for backwards-compatibility reasons
-         for people building manual pipelines for some reason. However, as it
-         turns out that code has never actually worked in 0.10 in practice,
-         since it only gets executed if mad_frame_decode() returns LOSTSYNC,
-         which doesn't actually seem to happen any more though because of the
-         preceding mad_header_decode(), which will discover and report the
-         sync loss if it runs into a tag and make mad_frame_decode() try to
-         resync right away.
-         Discovered this while trying to make it use gst_tag_list_from_id3v2_tag().
-
-2011-09-08 17:01:27 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/asfdemux/asfpacket.c:
-         asfpacket: skip empty payload packets
-         ... which also avoids assertion failures and possible segfaults later on
-         when possibly trying to join 2 empty buffers.
-
-2011-09-08 14:33:00 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/realmedia/rmdemux.c:
-       * gst/realmedia/rmdemux.h:
-         rmdemux: delay announcing container tags until we have pads
-         Fixes tags when transcoding.
-         https://bugzilla.gnome.org/show_bug.cgi?id=658297
-
-2011-09-07 14:36:46 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * tests/check/elements/amrnbenc.c:
-         amrnbenc: Use complete raw audio caps in the test
-
-2011-09-07 14:25:41 +0200  Stefan Sauer <ensonic@users.sf.net>
-
-       * docs/plugins/Makefile.am:
-         docs: cleanup makefiles
-         Remove commented out parts that we don't need. Remove "the wingo addition" - no
-         so useful after all. Narrow down file-globs for plugin docs.
-
-2011-09-06 21:25:13 +0200  Stefan Sauer <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From a39eb83 to 11f0cd5
-
-2011-09-06 15:40:55 +0200  Stefan Sauer <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From 605cd9a to a39eb83
-
-2011-08-25 13:04:01 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asf: don't use fourcc
-
-2011-08-25 12:54:42 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-         Merge branch 'master' into 0.11
-
-2011-08-22 17:49:14 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: fix spurious failure to decode some files
-         Parsing can return with an 'invalid' state, but this is not
-         actually fatal. For one, the mpeg2dec command line tool that
-         comes with the libmpeg2 library blithely ignores this condition
-         and merrily goes on. So we do this same, logging the error,
-         and going on with parsing. This makes something work that did
-         not use to work, and brings happiness to the world.
-         https://bugzilla.gnome.org/show_bug.cgi?id=429476
-
-2011-08-19 18:07:58 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-       * ext/sidplay/Makefile.am:
-       * ext/sidplay/gstsiddec.cc:
-         port to new audio caps
-
-2011-08-03 18:58:09 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-         Merge branch 'master' into 0.11
-         Conflicts:
-         common
-         gst/asfdemux/gstrtpasfdepay.c
-
-2011-08-03 09:05:47 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * configure.ac:
-         configure: Add synaesthesia to the list of non-ported plugins
-
-2011-08-03 01:08:43 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * docs/plugins/Makefile.am:
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * gst-plugins-ugly.spec.in:
-       * gst/mpegaudioparse/Makefile.am:
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-       * gst/mpegaudioparse/gstmpegaudioparse.h:
-       * gst/mpegaudioparse/mpegaudioparse.vcproj:
-       * gst/xingmux/Makefile.am:
-       * gst/xingmux/gstxingmux.c:
-       * gst/xingmux/gstxingmux.h:
-       * gst/xingmux/plugin.c:
-         Remove mp3parse plugin/element
-         It's been replaced by mpegaudioparse in -good. Don't want anyone
-         to spend time porting a deprecated element. Rename plugin to xingmux
-         for now until we move that somewhere else.
-
-2011-08-02 12:49:09 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
-
-       * configure.ac:
-         configure.ac: Define list of non-ported plugins
-
-2011-08-02 12:48:52 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-         mad: Fix for changes in GstQuery API
-
-2011-08-02 12:40:22 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Fix for changes in GstQuery API
-
-2011-08-02 12:40:01 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
-
-       * gst/asfdemux/asfpacket.c:
-         asfdemux: Fix print statement
-
-2011-08-02 12:35:40 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
-
-       * common:
-         Update common submodule
-
-2011-07-30 18:47:44 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Properly set the stream format in setcaps
-         Do not forget to set the selected format to the options string
-         when getting it from caps
-         https://bugzilla.gnome.org/show_bug.cgi?id=655223
-
-2011-07-19 15:06:49 +0200  Stefan Sauer <ensonic@google.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: fix the build for older x264enc
-         b_fake_interlaced was introduced in x264 commit 1b48874d06 = X264_BUILD 96.
-
-2011-07-18 20:41:20 -0400  Olivier Crête <olivier.crete@collabora.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Read stream-format from the right place
-         Read the stream-format from "stream-format" and not from profile, also rename
-         the "bytestream" variable to "stream_format" so it's easier to understand.
-
-2011-06-13 23:24:27 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264enc: Select stream-format based on caps
-         Makes x264 select its stream-format based on what's available
-         on caps, the user selected option will be chosen as a fallback
-         when both options are available.
-         https://bugzilla.gnome.org/show_bug.cgi?id=644233
-
-2011-07-04 18:03:49 -0400  Olivier Crête <olivier.crete@collabora.com>
-
-       * ext/x264/gstx264enc.c:
-         x264: Allow renegotiation but prefer current caps
-
-2011-06-09 20:20:27 -0400  Olivier Crête <olivier.crete@collabora.com>
-
-       * tests/check/elements/x264enc.c:
-         tests: Test x264enc profiles from the caps
-         https://bugzilla.gnome.org/show_bug.cgi?id=644233
-
-2011-03-07 17:58:34 -0500  Olivier Crête <olivier.crete@collabora.co.uk>
-
-       * ext/x264/Makefile.am:
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264: Use profile and level from caps
-         Enforces the profile and level from the downstream caps, also
-         sets them on the fixated caps
-         https://bugzilla.gnome.org/show_bug.cgi?id=644233
-
-2011-07-05 10:14:50 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-         Add -DGST_USE_UNSTABLE_API to the compiler flags to avoid warnings
-
-2011-06-25 06:29:50 +0300  Brian Gitonga Marete <marete@toshnix.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: fix subme property annotation - subme maximum is 10, not 6.
-         Although the element accepts subme values > 6, the annotation which is
-         visible through gst-inspect (for example) erroneously indicates 6 as the
-         maximum. Fix this by indicating 10 (which is the x264 max) as the maximum.
-         https://bugzilla.gnome.org/show_bug.cgi?id=653473
-
-2011-06-23 11:28:58 -0700  David Schleef <ds@schleef.org>
-
-       * common:
-         Automatic update of common submodule
-         From 69b981f to 605cd9a
-
-2011-06-19 12:45:00 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * gst/asfdemux/gstrtspwms.c:
-         rtspwms: Porting to 0.11
-
-2011-06-18 20:24:42 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * gst/asfdemux/gstrtpasfdepay.c:
-         rtpasfdepay: Port to 0.11
-
-2011-06-15 23:40:02 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * gst/asfdemux/asfpacket.c:
-       * gst/asfdemux/asfpacket.h:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: Porting to 0.11
-
-2011-06-08 18:18:17 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/sidplay/gstsiddec.cc:
-         siddec: port siddec to 0.11
-
-2011-06-06 12:41:03 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/asfdemux/gstrtpasfdepay.c:
-         rtpasfdepay: fix fragmented packet handling and packet padding
-         Also remove a bogus assert.
-
-2011-06-03 11:35:55 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * gst/synaesthesia/gstsynaesthesia.c:
-         synaesthesia: fix wrong debug log string (copy'n'paste)
-
-2011-06-02 18:46:11 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-         Merge branch 'master' into 0.11
-         Conflicts:
-         configure.ac
-
-2011-06-02 18:43:28 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-         mad: port to new API
-         Port to new segment API.
-         Eat Caps events.
-         No need to set caps on buffers.
-
-2011-05-20 13:32:31 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: target is unsigned and can't be < 0
-
-2011-05-20 13:31:14 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * ext/mad/gstmad.c:
-         mad: use signed when caluculating the delta
-         Avoids a <0 check for an unsigned variable.
-
-2011-05-19 23:55:41 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * docs/plugins/Makefile.am:
-         docs: remove obsolete commented out part
-         We don't have this in the other modules and its not needed.
-
-2011-05-19 23:38:23 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
-         docs: update plugin introspection data
-         Now more files are merged and produced in a canonical fashion, which hopefully
-         creates less or no delta in the future.
-
-2011-05-19 22:58:28 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From 9e5bbd5 to 69b981f
-
-2011-05-18 14:49:17 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/lame/Makefile.am:
-       * ext/lame/gstlamemp3enc.c:
-         lamemp3enc: Post CODEC and BITRATE tags
-         Also filter any CODEC/AUDIO_CODEC tags from incoming
-         tag events.
-         Fixes bug #391543.
-
-2011-05-18 16:10:55 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From fd35073 to 9e5bbd5
-
-2011-05-18 12:25:01 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From 46dfcea to fd35073
-
-2011-04-27 15:20:20 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/asfdemux/gstrtpasfdepay.c:
-         rtpasfdepay: simplify and refactor packet parsing
-         Specifically, refactor buffer padding and consider marker bit for fragment
-         assembling.
-
-2011-04-27 15:14:00 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/asfdemux/gstrtpasfdepay.c:
-         rtpasfdepay: avoid re-sending header
-         ... e.g. following a seek, which otherwise confuses downstream demuxer
-         expecting only a flow of data packets at this time.
-
-2011-04-27 15:12:22 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/asfdemux/gstrtpasfdepay.c:
-       * gst/asfdemux/gstrtpasfdepay.h:
-         rtpasfdepay: remove unused field
-
-2011-04-29 09:19:19 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-         mad: Post bitrate tag whenever the bitrate changes
-         Also send the layer/mode/emphasis/bitrate tags as an event too.
-
-2011-05-14 10:09:16 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * win32/common/config.h:
-         win32: define GST_PACKAGE_RELEASE_DATETIME in win32 config.h as well
-
-2011-05-14 10:06:31 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * win32/common/config.h:
-         Back to development
-
-=== release 0.10.18 ===
-
-2011-05-10 10:26:50 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 0.10.18
-         Highlights:
-         - x264enc: allow changing bitrate and quantizers dynamically at runtime
-         - x264enc: proxy downstream caps restrictions upstream via get_caps()
-         - lamemp3enc: proxy downstream rate/channels restrictions upstream via get_caps()
-         - mad: allow build without libid3tag (which isn't really needed anyway)
-         - many other fixes and improvements
-
-2011-05-04 12:39:17 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Copy the template caps, it's not allowed to increase the refcount of const caps
-
-2011-05-04 12:30:39 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: do not leak peer pad reference
-
-2011-05-03 15:27:43 +0100  Sjoerd Simons <sjoerd.simons@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: No need to copy, reffing is enough
-
-2011-05-03 14:57:16 +0100  Sjoerd Simons <sjoerd.simons@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: get_caps function should return a copy of the caps
-
-2011-04-30 20:07:44 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-synaesthesia.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * po/da.po:
-       * po/de.po:
-       * po/fr.po:
-       * po/uk.po:
-       * win32/common/config.h:
-         0.10.17.4 pre-release
-
-2011-04-29 15:43:47 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-         mad: remove buffer_alloc
-
-2011-04-27 12:48:31 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-synaesthesia.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * po/bg.po:
-       * po/ja.po:
-       * po/nl.po:
-       * po/pl.po:
-       * po/ru.po:
-       * po/sl.po:
-       * po/tr.po:
-         0.10.17.3 pre-release
-
-2011-04-24 14:04:39 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From c3cafe1 to 46dfcea
-
-2011-04-19 19:24:23 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-         mad: port to 0.11
-
-2011-04-19 19:23:56 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-         Merge branch 'master' into 0.11
-         Conflicts:
-         android/amrnb.mk
-         android/amrwbdec.mk
-         android/asf.mk
-         android/mpegaudioparse.mk
-         configure.ac
-
-2011-04-19 17:26:42 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * tests/check/gst-plugins-ugly.supp:
-         tests: add suppression for lame unit test
-
-2011-04-19 14:41:48 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * tests/check/Makefile.am:
-       * tests/check/generic/.gitignore:
-       * tests/check/generic/index.c:
-         tests: add generic index-setting test
-
-2011-04-19 15:24:03 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: don't deadlock when setting an index
-
-2011-04-16 23:26:27 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-synaesthesia.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * po/sl.po:
-       * win32/common/config.h:
-         0.10.17.2 pre-release
-
-2011-04-16 23:23:56 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/realmedia/rademux.c:
-         rademux: fix two 'variable may be used uninitialized' warnings caused by -DG_DISABLE_ASSERT
-
-2011-04-14 15:04:19 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/mpegstream/gstmpegdemux.c:
-         mpegstream: fix unused-but-set-variable warnings with gcc 4.6
-
-2011-04-14 15:03:56 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/dvdread/dvdreadsrc.c:
-       * ext/sidplay/gstsiddec.cc:
-       * ext/x264/gstx264enc.c:
-         dvdread, sidplay, x264enc: fix unused-but-set-variable warnings with gcc 4.6
-
-2011-04-14 15:03:33 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: fix unused-but-set-variable warnings with gcc 4.6
-
-2011-04-13 20:31:53 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Implement getcaps function
-         This allows to set width/height/etc restrictions downstream.
-
-2011-04-10 18:24:22 -0400  Thibault Saunier <thibault.saunier@collabora.co.uk>
-
-       * Android.mk:
-       * ext/mad/Makefile.am:
-       * ext/x264/Makefile.am:
-       * gst/asfdemux/Makefile.am:
-       * gst/dvdlpcmdec/Makefile.am:
-       * gst/dvdsub/Makefile.am:
-       * gst/iec958/Makefile.am:
-       * gst/mpegaudioparse/Makefile.am:
-       * gst/mpegstream/Makefile.am:
-       * gst/realmedia/Makefile.am:
-       * gst/synaesthesia/Makefile.am:
-         android: make it ready for androgenizer
-         To build gstreamer for android we are now using androgenizer which
-         generates the needed Android.mk files.
-         Androgenizer can be found here: http://git.collabora.co.uk/?p=user/derek/androgenizer.git
-
-2011-04-10 18:34:11 -0400  Thibault Saunier <thibault.saunier@collabora.co.uk>
-
-       * android/NOTICE:
-       * android/amrnb.mk:
-       * android/amrwbdec.mk:
-       * android/asf.mk:
-       * android/mpegaudioparse.mk:
-         android: remove the android/ folder
-
-2011-04-04 15:57:58 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From 1ccbe09 to c3cafe1
-
-2010-09-21 20:14:04 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264enc: Allow changing the bitrate and quantitizers dynamically
-         https://bugzilla.gnome.org/show_bug.cgi?id=621663
-
-2010-09-21 19:33:10 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Set max bitrate in quality mode
-         https://bugzilla.gnome.org/show_bug.cgi?id=621663
-
-2010-09-21 19:20:29 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Make it clear that constant quantizer is for debugging only
-         https://bugzilla.gnome.org/show_bug.cgi?id=621663
-
-2011-03-25 22:34:31 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 193b717 to 1ccbe09
-
-2011-03-25 14:57:00 +0200  Stefan Kost <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From b77e2bf to 193b717
-
-2011-03-25 09:33:04 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From d8814b6 to b77e2bf
-
-2011-03-25 09:09:29 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 6aaa286 to d8814b6
-
-2011-03-24 18:50:17 +0200  Stefan Kost <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From 6aec6b9 to 6aaa286
-
-2011-03-22 12:59:33 +0100  Luis de Bethencourt <luis@debethencourt.com>
-
-       * configure.ac:
-         configure.ac: redundant use of AC_MSG_RESULT()
-         cleaned the redundant use of AC_MSG_RESULT() in configure.ac
-
-2011-03-18 19:34:57 +0100  Luis de Bethencourt <luis@debethencourt.com>
-
-       * autogen.sh:
-         autogen: wingo signed comment
-
-2011-03-15 11:02:42 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * gst/dvdsub/gstdvdsubdec.c:
-       * gst/dvdsub/gstdvdsubdec.h:
-         dvdsubdec: Rearrange buffer allocation and pushing code a bit
-         This makes the code easier to read, doesn't store every buffer
-         in the instance until the next buffer is to be drawn and
-         fixes an unitialized variable compiler warning.
-
-2011-03-15 10:59:23 +0100  Brendan Le Foll <blefoll@fluendo.com>
-
-       * gst/dvdsub/gstdvdsubdec.c:
-         dvdsubdec: Output only a single buffer per subpicture and set the correct duration
-         Fixes bug #619136.
-
-2011-03-14 18:39:35 +0100  Brendan Le Foll <blefoll@fluendo.com>
-
-       * gst/dvdsub/gstdvdsubdec.c:
-         dvdsubdec: Implement clipping if the video size is smaller than the subpicture size
-         Fixes bug #644704.
-
-2011-03-11 17:45:37 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * ext/mad/gstmad.c:
-       * ext/mad/gstmad.h:
-         mad: build the mad plugin even if libid3tag is not available
-         ID3 tags are usually handled by id3demux, and should be handled
-         by id3demux. Tag handling in mad based on libid3tag is very basic
-         and mostly unnecessary really, so just build this plugin without
-         ID3 tag support if libid3tag is not available.
-
-2011-03-04 13:48:02 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-         Merge branch 'master' into 0.11
-
-2011-03-02 13:12:11 +0200  Stefan Kost <ensonic@users.sf.net>
-
-       * gst/mpegstream/gstdvddemux.c:
-         dvddemux: small code cleanup
-         Don't duplicate the 'if' check. Makes the 2nd condition easier to read also
-         and avoid empty 'if' when logging is disabled.
-
-2011-02-28 19:27:21 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * configure.ac:
-         configure.ac: export plugin description more platform independent
-         Fixes #642504.
-
-2011-02-28 18:33:34 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 1de7f6a to 6aec6b9
-
-2011-02-26 15:02:58 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-         Merge branch 'master' into 0.11
-         Conflicts:
-         configure.ac
-
-2011-02-21 13:13:11 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: do not fail fatally when unlinked
-         ... as _NOT_LINKED was neither tested as fatal before nor complained about.
-
-2011-02-21 11:05:31 +0200  Stefan Kost <ensonic@users.sf.net>
-
-       * ext/mad/gstmad.c:
-       * ext/mad/gstmad.h:
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/mpeg2dec/gstmpeg2dec.h:
-         index: remove conditional index support
-         Index support cannot be disabled since commit
-         4bfb1fe70c6f0d5e29c17a8eeffb02f7fd083f11
-         in core, which removed the configure flags to disable index.
-
-2011-02-17 18:06:51 +0200  Stefan Kost <ensonic@users.sf.net>
-
-       * ext/mad/gstmad.c:
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         formatting: trim trailing whitespace
-
-2011-02-17 18:05:58 +0200  Stefan Kost <ensonic@users.sf.net>
-
-       * ext/mad/gstmad.c:
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * gst/mpegstream/gstmpegdemux.c:
-         index: use delta frame flags instead of 0 or none
-
-2011-02-14 17:52:09 +0000  Sjoerd Simons <sjoerd.simons@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Don't register flags with a value of 0
-         Flags with a value of 0 aren't meaningful and will cause
-         g_value_transform to go into an endless loop when trying to
-         convert the flags to a string
-
-2011-02-14 12:54:10 +0200  Stefan Kost <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From f94d739 to 1de7f6a
-
-2011-02-07 19:58:45 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/amrwbdec/amrwbdec.c:
-         amrwbdec: avoid stalling on invalid frame
-         Skip 1 byte indicating invalid frame type index rather than stalling
-         on it indefinitely until EOS.
-         Fixes #639715.
-
-2011-02-03 18:25:00 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * tests/check/pipelines/lame.c:
-         tests: add unit test for lamemp3enc negotiation issue
-         https://bugzilla.gnome.org/show_bug.cgi?id=641151
-
-2011-02-03 18:18:35 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/lame/gstlamemp3enc.c:
-         lamemp3enc: implement sinkpad get_caps() function to proxy rate and channels restrictions from downstream
-         The element downstream of mp3enc might only accept certain sample rates or channels,
-         make sure we relay any restrictions that do exist to upstream when it does a
-         get_caps() on the sink pad. That way upstream elements like audioresample or
-         audioconvert can pick a sample rate / channel configuration that will be accepted,
-         instead of just negotiating to the highest, which might then be rejected.
-         https://bugzilla.gnome.org/show_bug.cgi?id=641151
-
-2011-01-30 16:17:19 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/asfpacket.c:
-         asfpacket: Avoid using broken duration extension
-         Quite a few (broken?) files have a packet duration of 1ms, which is
-         most definitely wrong for either audio or video packets.
-         We therefore avoid using that value and instead use other metrics to
-         determine the buffer duration (like using the extended stream properties
-         average frame duration if present and valid).
-
-2011-01-27 15:33:40 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * win32/common/config.h:
-         win32: fix DEFAULT_AUDIOSINK, should be direct*sound*sink
-         https://bugzilla.gnome.org/show_bug.cgi?id=640705
-
-2011-01-12 16:48:57 +0800  Yang Xichuan <xichuan.yang@tieto.com>
-
-       * gst/mpegaudioparse/gstxingmux.c:
-         xingmux: Use FALSE instead of 0 as return value for a function returning gboolean
-         Fixes bug #639291.
-
-2011-01-06 18:29:06 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
-       * gst/mpegstream/gstdvddemux.c:
-         mpegstream: increase allowable gap between streams
-         The new delay is three times as much as the old one, and just happens
-         to let me properly decode my "Princess Mononoke" DVD, on which dvdreadsrc
-         was chocking before at 5:11.
-         While there, merge the constants used in two places into a define.
-         https://bugzilla.gnome.org/show_bug.cgi?id=539708
-
-2011-01-22 17:31:40 +0100  Miguel Angel Cabrera Moya <madmac2501@gmail.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: make tag event writable before modifying tag list in place
-         To modify an event tag is necessary to be sure that x264enc
-         has its own copy.
-         Also fix indentation.
-         https://bugzilla.gnome.org/show_bug.cgi?id=640272
-
-2011-01-24 10:14:56 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * win32/common/config.h:
-         Back to development
-
-=== release 0.10.17 ===
-
-2011-01-21 13:18:51 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 0.10.17
-
-2011-01-18 11:11:28 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * win32/common/config.h:
-         0.10.16.4 pre-release
-
-2011-01-14 17:37:09 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Use the proper component value for height
-
-2011-01-11 20:42:06 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * win32/common/config.h:
-         0.10.16.3 pre-release
-
-2011-01-11 17:09:02 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
-
-       * gst/asfdemux/asfheaders.c:
-       * gst/asfdemux/asfheaders.h:
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Handle new type of DRM'd asf files.
-         These are produced by the new MS PlayReady system.
-         https://bugzilla.gnome.org/show_bug.cgi?id=639226
-
-2011-01-11 15:51:14 +0200  Stefan Kost <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From e572c87 to f94d739
-
-2011-01-10 16:37:19 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From ccbaa85 to e572c87
-
-2011-01-10 14:54:40 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 46445ad to ccbaa85
-
-2011-01-08 00:35:08 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * tests/check/Makefile.am:
-         tests: never disable g_assert() and cast checks for the unit tests
-         The unit tests are riddled with g_assert() and friends, make sure we
-         don't disable assert and cast checks for the unit tests even if
-         this has been specified for the rest of the code base, e.g. via
-         --disable-glib-asserts
-
-2011-01-07 14:42:26 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * win32/common/config.h:
-         0.10.16.2 pre-release
-
-2011-01-07 14:38:17 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-         docs: update docs
-
-2011-01-07 14:37:07 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * po/bg.po:
-       * po/ca.po:
-       * po/ru.po:
-         po: update translations
-
-2011-01-07 14:33:37 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-         configure: use $LIBM instead of hardcoding -lm
-
-2011-01-06 13:15:17 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: Initialize return variable.
-         In the unlikely event that height is 0 (which is invalid) we would end up
-         never setting the flow return.
-
-2011-01-05 16:52:03 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
-
-       * gst/realmedia/rmutils.c:
-         realmedia: Fix unitialized variables on macosx
-
-2011-01-04 10:32:05 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Handle codec/encoder tags
-         Make x264enc drop video-codec and codec tags and replace
-         encoder/encoder-version with x264 and its build number
-         Fixes #621465
-
-2010-12-29 22:17:50 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: use gst_pad_alloc_buffer() when cropping buffers
-
-2010-12-29 22:10:58 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: minor formatting clean-up
-
-2010-12-29 21:42:36 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: refactor cropping code to use libgstvideo functions
-         https://bugzilla.gnome.org/show_bug.cgi?id=571146
-
-2010-12-29 20:19:34 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/mpeg2dec/gstmpeg2dec.h:
-         mpeg2dec: use GstVideoFormat instead of custom enum
-
-2010-12-29 20:15:03 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/mpeg2dec/Makefile.am:
-         mpeg2dec: fix LIBADD order in Makefile.am
-
-2010-11-19 13:01:35 -0500  Tristan Matthews <tristan@sat.qc.ca>
-
-       * ext/x264/gstx264enc.c:
-         x264: vbv-buf-capacity should have a minimum of 0
-         x264 will clip this value internally, and users should be allowed to
-         specify a lower value than 300 ms.
-         https://bugzilla.gnome.org/show_bug.cgi?id=635291
-
-2010-12-27 11:38:24 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: also accept YV12 input
-
-2010-12-01 18:35:59 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: add a note to the docs about encoder latency and queues
-         https://bugzilla.gnome.org/show_bug.cgi?id=636107
-
-2010-12-24 10:12:19 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
-
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rmdemux.c:
-         realmedia: do not use the pad buffer allocation functions in demuxers
-         Doing so can block, see https://bugzilla.gnome.org/show_bug.cgi?id=637822
-         https://bugzilla.gnome.org/show_bug.cgi?id=637932
-
-2010-12-20 17:47:41 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 169462a to 46445ad
-
-2010-12-16 10:30:31 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-         mad: If gst_pad_alloc_buffer() returns a buffer with the wrong size allocate a new one
-         Fixes bug #635461.
-
-2010-12-15 14:56:36 +0200  Stefan Kost <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From 20742ae to 169462a
-
-2010-12-12 11:54:35 -0600  Rob Clark <rob@ti.com>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: set GST_BUFFER_FLAG_DELTA_UNIT properly
-         Signed-off-by: Rob Clark <rob@ti.com>
-
-2010-12-13 16:24:09 +0200  Stefan Kost <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From 011bcc8 to 20742ae
-
-2010-11-14 10:57:21 -0800  Leo Singer <leo.singer@ligo.org>
-
-       * configure.ac:
-         x264: uses pkg-config to locate libx264
-
-2010-12-07 15:40:08 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-         Merge branch 'master' into 0.11
-
-2010-12-07 15:39:32 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * tests/check/pipelines/lame.c:
-         check: don't use deprecated method
-
-2010-12-06 18:12:51 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * android/amrnb.mk:
-       * android/amrwbdec.mk:
-       * android/asf.mk:
-       * android/mpegaudioparse.mk:
-       * configure.ac:
-         more 0.10 -> 0,11 changes
-
-2010-12-06 12:29:12 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * configure.ac:
-         configure: open 0.11 branch
-
-2010-12-03 17:43:25 +0100  Benjamin Gaignard <benjamin.gaignard@stericsson.com>
-
-       * Android.mk:
-       * android/NOTICE:
-       * android/amrnb.mk:
-       * android/amrwbdec.mk:
-       * android/asf.mk:
-       * android/mpegaudioparse.mk:
-         Add build system for Android
-
-2010-11-25 19:51:50 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/realmedia/rmutils.c:
-         realmedia: Remove dead assignments
-
-2010-11-25 19:51:40 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * ext/mad/gstmad.c:
-         mad: Remove dead assignments
-
-2010-11-13 12:38:45 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdreadsrc: remove bogus comment
-
-2010-11-13 12:34:37 +0000  Thomas Green <thomasgr33n@gmail.com>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdreadsrc: fix handling of multi-angle streams
-         We would output all angles interleaved instead of just
-         the selected angle.
-         https://bugzilla.gnome.org/show_bug.cgi?id=539254
-
-2010-10-28 17:01:16 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/realmedia/Makefile.am:
-         realmedia: fix LIBS order in Makefile
-
-2010-10-22 09:17:40 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/gl.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ro.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         po: update for new translatable strings
-
-2010-10-27 13:17:29 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * common:
-         Automatic update of common submodule
-         From 7bbd708 to 011bcc8
-
-2010-10-20 20:26:45 +0200  Guillaume Emont <gemont@igalia.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: convert the position to stream time before answering to a position query
-
-2010-10-24 14:22:39 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/realmedia/Makefile.am:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rmdemux.c:
-       * gst/realmedia/rmdemux.h:
-         realmedia: Get codec name from pbutils instead of harcoding them
-
-2010-10-22 11:29:55 +0200  Robert Swain <robert.swain@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Work around a rate control issue in libx264
-         When variable framerate is disabled in libx264 (which occurs when using
-         the zerolatency tuning), libx264 ignores timestamps but still uses the
-         timebase leading to messed up rate control with our nanosecond timebase.
-         We work around this issue by setting the timebase to the reciprocal of
-         the framerate and we validate that the framerate is suitable.
-         This has been fixed upstream in libx264 but there are non-fixed versions
-         in the wild so this workaround is still needed.
-         Fixes bug #632861
-
-2010-10-19 16:30:51 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Use gst_pad_peer_query() instead of getting the peer pad manually
-
-2010-10-13 21:38:06 +0200  Guillaume Emont <gemont@igalia.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: fix position query by trusting upstream
-         Position queries are badly handled for DVDs (probably due to the division in
-         chapters): the time returned was the time since the start of chapter.
-         Now ask upstream for position queries, fall back to the old code if upstream
-         cannot answer the query.
-
-2010-10-19 12:20:40 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * ext/lame/gstlame.c:
-       * ext/mad/gstmad.c:
-       * ext/sidplay/gstsiddec.cc:
-       * gst/mpegstream/gstmpegparse.c:
-         various: canonicalize property names
-
-2010-10-19 10:06:33 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbenc.c:
-       * ext/cdio/gstcdiocddasrc.c:
-       * ext/dvdread/dvdreadsrc.c:
-       * ext/lame/gstlame.c:
-       * ext/lame/gstlamemp3enc.c:
-       * ext/mad/gstmad.c:
-       * ext/sidplay/gstsiddec.cc:
-       * ext/x264/gstx264enc.c:
-         various (ext): add a missing G_PARAM_STATIC_STRINGS flags
-
-2010-10-19 09:49:47 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * gst/iec958/ac3iec.c:
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-       * gst/mpegstream/gstmpegparse.c:
-       * gst/mpegstream/gstrfc2250enc.c:
-       * gst/realmedia/pnmsrc.c:
-       * gst/realmedia/rdtmanager.c:
-         various (gst): add a missing G_PARAM_STATIC_STRINGS flags
-
-2010-10-14 12:32:16 -0700  David Schleef <ds@schleef.org>
-
-       * common:
-         Automatic update of common submodule
-         From 5a668bf to 7bbd708
-
-2010-10-08 12:44:52 -0700  David Schleef <ds@schleef.org>
-
-       * common:
-         Automatic update of common submodule
-         From c4a8adc to 5a668bf
-
-2010-10-08 12:56:05 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 5e3c9bf to c4a8adc
-
-2010-09-29 21:24:23 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/mad/gstmad.c:
-       * ext/mad/gstmad.h:
-         mad: support reverse playback
-
-2010-09-26 19:24:08 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/dvdread/dvdreadsrc.c:
-         dvdreadsrc: improve error messages on read errors
-         Provide proper i18n-ed error messages when a read error happens,
-         and point out that the error could be happening because the
-         DVD is scrambled.
-         https://bugzilla.gnome.org/show_bug.cgi?id=613633
-
-2010-09-24 00:03:50 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-         configure: set plugin release datetime
-
-2010-09-21 18:34:31 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * common:
-         Automatic update of common submodule
-         From aa0d1d0 to 5e3c9bf
-
-2010-09-15 20:14:47 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/mpegstream/gstmpegparse.c:
-         mpegparse: re-fix flow return handling
-         Fix wrong GST_FLOW_IS_SUCCESS substitution in commit e99cb46c:
-         -  } while (GST_FLOW_IS_SUCCESS (result));
-         +  } while (result != GST_FLOW_OK);
-
-2010-09-09 22:33:36 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * tests/check/Makefile.am:
-       * tests/check/generic/states.c:
-         tests: allow running state tests for all elements
-         Now one can use GST_NO_STATE_IGNORE_ELEMENTS=1 make generic/states.check
-         to try elements that would normaly be skipped.
-
-2010-09-09 09:53:07 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * Makefile.am:
-         New pkgconfig subdirectory needs to be added to SUBDIRS as well so it's entered and disted
-
-2010-09-08 00:09:35 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * pkgconfig/.gitignore:
-       * pkgconfig/Makefile.am:
-       * pkgconfig/gstreamer-plugins-ugly-uninstalled.pc.in:
-         Add gstreamer-plugins-ugly-uninstalled-0.10.pc file so other modules can find our plugins
-         This .pc file will not be installed, it's only for uninstalled setups,
-         same thing as we do for -good. This is so other modules' unit tests can
-         find our plugins properly in an uninstalled setup.
-
-2010-09-07 11:42:52 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From c2e10bf to aa0d1d0
-
-2010-09-06 23:53:10 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-         configure: re-enable use of -DGST_DISABLE_DEPRECATED in git versions
-
-2010-09-06 23:51:23 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/sidplay/gstsiddec.cc:
-         siddec: don't use GST_FLOW_IS_FATAL
-         GST_FLOW_IS_FATAL has been deprecated in core git.
-
-2010-09-05 18:58:50 -0700  David Schleef <ds@schleef.org>
-
-       * common:
-         Automatic update of common submodule
-         From d3d9acf to c2e10bf
-
-2010-09-05 12:27:02 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * configure.ac:
-         configure: Require orc >= 0.4.6 for --compat
-
-2010-09-05 12:20:22 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From ec60217 to d3d9acf
-
-2010-08-27 18:26:49 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Don't use GST_FLOW_IS_FATAL()
-         And don't post error messages if allocating a buffer resulted
-         in WRONG_STATE or UNEXPECTED.
-
-2010-08-27 18:25:31 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * gst/mpegaudioparse/gstxingmux.c:
-         xingmux: Don't ignore WRONG_STATE and NOT_LINKED when pushing data downstream
-
-2010-08-27 18:24:11 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * gst/mpegstream/gstdvddemux.c:
-       * gst/mpegstream/gstmpegdemux.c:
-       * gst/mpegstream/gstmpegparse.c:
-         mpegstream: Don't use GST_FLOW_IS_SUCCESS()
-
-2010-08-27 18:22:45 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: Don't use GST_FLOW_IS_FATAL() and GST_FLOW_IS_SUCCESS()
-
-2010-08-27 18:19:00 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Don't use GST_FLOW_IS_FATAL()
-         And don't post error messages for UNEXPECTED and post an error
-         message if pulling data failed because of NOT_LINKED.
-
-2010-09-04 13:17:53 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * win32/common/config.h:
-         Back to development
-         Temporarily disable -DGST_DISABLE_DEPRECATED for git builds until
-         the code is updated for the GST_FLOW_IS_* macro deprecations.
-
-=== release 0.10.16 ===
-
-2010-09-02 23:59:20 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 0.10.16
-
-2010-09-02 23:58:22 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-         docs: update docs for release
-
-2010-09-02 23:48:05 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * po/LINGUAS:
-       * po/gl.po:
-       * po/id.po:
-       * po/lv.po:
-       * po/ro.po:
-       * po/sv.po:
-         po: update translations
-
-2010-08-30 16:02:24 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * configure.ac:
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         0.10.15.6 pre-release
-
-2010-08-27 17:50:59 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Don't error out on non-critical flow returns
-         Only error out when downstream returns:
-         * NOT_SUPPORTED
-         * ERROR
-         * NOT_NEGOTIATED
-         * NOT_LINKED
-         If we got _UNEXPECTED, we push an EOS downstream (since maybe only one
-         of the streams had gone EOS) and then stop the task silently.
-         In the case of WRONG_STATE we just need to stop silently
-         https://bugzilla.gnome.org/show_bug.cgi?id=600412
-
-2010-08-25 19:02:02 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * configure.ac:
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         0.10.15.5 pre-release
-
-2010-08-25 15:39:33 +0200  Alessandro Decina <alessandro.decina@collabora.co.uk>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         mp3parse: propagate flow errors upstream.
-         Remove a wrong GST_FLOW_IS_FATAL call. When pushing fails, mp3parse should
-         always return the error upstream.
-
-2010-08-21 21:42:25 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * configure.ac:
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         0.10.15.4 pre-release
-
-2010-08-13 17:24:41 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From 3e8db1d to ec60217
-
-2010-08-11 16:46:48 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * win32/common/config.h:
-         0.10.15.3 pre-release
-
-2010-08-11 09:21:43 +0200  Robert Swain <robert.swain@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Fix b-pyramid libx264 API boolean arg for non-boolean issue
-         In X264_BUILD >= 78, b-pyramid became a non-boolean so passing a boolean
-         argument to the option string value causes an error. For < 78 we pass the
-         boolean value, for >= 78 we use the x264_b_pyramid_names[] array which will
-         result in passing 'none' for false and 'strict' for true. Other modes can be
-         set through the option-string property for now.
-         https://bugzilla.gnome.org/show_bug.cgi?id=626577
-
-2010-08-11 00:02:47 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * win32/common/config.h:
-         0.10.15.2 pre-release
-
-2010-08-10 14:37:39 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * gst/synaesthesia/gstsynaesthesia.c:
-         synaesthesia: code cleanups.
-         Remove unused boilerplate for signals. Use _OBJECT variants of logging macros
-         more.
-
-2010-08-10 14:24:01 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * gst/synaesthesia/gstsynaesthesia.c:
-         synaesthesia: use GST_BOILERPLATE macros
-
-2010-08-10 10:59:04 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From bd2054b to 3e8db1d
-
-2010-08-09 00:31:15 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264: fix printf format warning in debug message
-
-2010-08-07 00:09:47 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * docs/plugins/Makefile.am:
-         docs: fix bug passing arguments to gtkdoc-fixref in upload target
-         Missing backslash at end of line meant we weren't passing all arguments
-         to gtkdoc-fixref and we'd get a shell error when doing 'make upload'.
-
-2010-08-05 13:57:26 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From a519571 to bd2054b
-
-2010-08-04 19:28:09 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * configure.ac:
-         configure: Check if the compiler supports ISO C89 or C99 and which parameters are required
-         This first checks what is required for ISO C99 support and sets the relevant
-         compiler parameters and if no C99 compiler is found, it checks for a
-         C89 compiler. This enables us to check for and use C89/C99 functions
-         that gcc hides from us without the correct compiler parameters.
-
-2010-07-29 09:41:49 +0200  Robert Swain <robert.swain@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Fix flushing of delayed frames
-         x264_encoder_encode() should be called with a NULL picture until at least
-         x264_encoder_delayed_frames() returns 0. This fixes what appeared to be a
-         regression in make check due to the recent change in defaults which enabled
-         b-frames and b-pyramid, both of which I believe increase the number of delayed
-         frames when encoding.
-
-2010-07-21 17:24:33 +0200  Robert Swain <robert.swain@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Improve x264enc defaults
-         - medium x264 speed/quality preset
-         - threads defaults to 0 which automatically uses 1.5x number of cpu cores
-         Addresses part of bug #607798
-
-2010-07-21 17:22:48 +0200  Robert Swain <robert.swain@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Fix property description typos
-
-2010-07-22 11:53:04 +0200  Robert Swain <robert.swain@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Add some more debug info
-
-2010-07-21 17:09:20 +0200  Robert Swain <robert.swain@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264enc: Add speed-preset and [psy-]tuning properties
-         Use of a rate control method (pass, bitrate, quantizer, etc properties), a
-         preset and possibly a profile and/or tuning are now the recommended way to
-         configure x264 through x264enc.
-         If a preset/tuning are specified then these will define the default values and
-         the property defaults will be ignored. After this the option-string property is
-         applied, followed by the user-set properties, fast first pass restrictions and
-         finally the profile restrictions.
-         Addresses part of bug #607798
-
-2010-07-21 16:56:06 +0200  Robert Swain <robert.swain@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264enc: Refactor code in preparation for presets/tunings
-         - Make defaults append the appropriate default value to a string. This is
-         needed to differentiate between something user-set and the actual prop
-         default.
-         - Add an internal option string to which _set_property () cases append for the
-         majority of properties.
-         - Use gst_x264_enc_parse_options () to clean up application of settings. This
-         will make order of application with respect to the presets and tunings quite
-         simple.
-         Addresses part of bug #607798
-
-2010-07-21 16:32:11 +0200  Robert Swain <robert.swain@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Update available me types
-         Use the x264_motion_est_names[] array to populate the enum of ME types. This is
-         now self-maintaining.
-
-2010-07-21 15:59:12 +0200  Robert Swain <robert.swain@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Use new libx264 API to affect fast first pass
-         Uses new x264 API to apply reduced complexity values to the parameters to
-         increase encoding speed in the first pass of a multi-pass encode. This does
-         not impact on final quality.
-         Addresses part of bug #607798
-
-2010-07-21 15:52:28 +0200  Robert Swain <robert.swain@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264enc: Add profile property
-         In X264_BUILD >= 86 there is a new API for applying restrictions to an H.264
-         Profile. This makes it easier to achieve Baseline Profile for example.
-         Addresses part of bug #607798
-
-2010-07-21 15:40:27 +0200  Robert Swain <robert.swain@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264enc: Add option-string property
-         Adds support for an x264 format option-string to specify advanced parameters
-         Addresses part of bug #607798
-
-2010-07-22 13:24:37 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/mad/Makefile.am:
-         mad: use right automake variable, should be ID3TAG_{LIBS,CFLAGS} not ID3_{LIBS,CFLAGS}
-         Spotted by syntr0py.
-
-2010-07-20 19:44:00 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: only set timebase on versions where it exists
-
-2010-07-20 16:40:22 +0200  David Hoyt <dhoyt@llnl.gov>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: set appropriate time base
-         Fixes #624786.
-
-2010-06-30 18:45:49 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * tests/check/Makefile.am:
-         tests: add plugin loading whitelist to test environment
-         Only want to load core/-base/-ugly plugins here.
-
-2010-06-28 16:12:12 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * autogen.sh:
-       * configure.ac:
-         Bump automake requirement to 1.10 and autoconf to 2.60
-         For maintainability reasons and $(builddir).
-         See #622944.
-
-2010-06-28 09:34:30 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Fix seeking after last commits
-         Don't handle wrong-state returns as errors to allow seeking to work
-         again.
-
-2010-06-24 19:46:39 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Push all pending data on EOS
-         When on push mode and receiving an EOS event, asfdemux
-         should push all pending data because we might be dealing
-         with a broken file that has a preroll value higher
-         than its actual length.
-
-2010-06-24 19:29:17 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Fix sending eos event for chained asfs
-         Properly push EOS event when finishing a chained asf file
-         in pull mode
-         Fixes #599718
-
-2010-06-24 20:55:33 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * docs/plugins/Makefile.am:
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-       * docs/plugins/inspect/plugin-rmdemux.xml:
-         docs: add rmdemux to docs properly
-         The plugin has been renamed, remove old introspection file.
-
-2010-06-24 18:04:15 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/inspect/plugin-x264.xml:
-         docs: update for recent x264enc changes
-
-2010-06-24 18:03:21 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: fix compiler warning when debugging system in core is disabled
-
-2010-06-24 15:09:44 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From 73ff93a to a519571
-
-2010-06-23 11:05:11 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Allow at least 500ms of preroll.
-         Some files have insanely low preroll values which break the
-         all_streams_prerolled() logic.
-         Fixes #622407
-
-2010-06-22 11:41:42 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: add new h264 caps attribute alignment
-         See #606662.
-
-2010-06-18 14:35:00 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264enc: conditionally expose enhanced upstream capabilities
-         API: GstX264Enc:sliced-threads
-         API: GstX264Enc:sync-lookahead
-         API: GstX264Enc:intra-refresh
-         API: GstX264Enc:mb-tree
-         API: GstX264Enc:rc-lookahead
-         See #607798.
-
-2010-06-17 16:48:59 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * common:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-         docs: update introspected plugin docs for gstdoc-scangobj and other changes
-         Update common for latest gstdoc-scangobj and inspect xml files for
-         escaping and pad template order changes.
-
-2010-06-15 16:50:21 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * common:
-         Automatic update of common submodule
-         From 9339ccc to 35617c2
-
-2010-06-15 16:54:42 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From 5adb1ca to 9339ccc
-
-2010-06-15 16:35:49 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From 57c89b7 to 5adb1ca
-
-2010-06-15 15:50:09 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From c804988 to 57c89b7
-
-2010-06-14 16:59:25 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * configure.ac:
-       * gst/realmedia/rtspreal.c:
-         configure: Update required GLib version to 2.20
-
-2010-06-14 15:33:14 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/a52dec/gsta52dec.c:
-         a52dec: Call orc_init() before trying to get target flags
-
-2010-06-14 14:34:56 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/a52dec/gsta52dec.c:
-         a52dec: Remove debug printf...
-
-2010-06-14 14:34:25 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * configure.ac:
-       * ext/a52dec/Makefile.am:
-       * ext/a52dec/gsta52dec.c:
-         a52dec: Use orc for CPU feature detection and don't check for liboil
-
-2010-06-14 13:27:47 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * configure.ac:
-         configure: Use GLIB_EXTRA_CFLAGS
-
-2010-06-14 13:05:25 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 7a0fdf5 to c804988
-
-2010-06-14 11:35:03 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 6da3bab to 7a0fdf5
-
-2010-06-12 08:29:28 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 733fca9 to 6da3bab
-
-2010-06-09 12:40:26 -0700  David Schleef <ds@schleef.org>
-
-       * common:
-         Automatic update of common submodule
-         From fad145b to 733fca9
-
-2010-06-09 12:34:18 -0700  David Schleef <ds@schleef.org>
-
-       * common:
-         Automatic update of common submodule
-         From 47683c1 to fad145b
-
-2010-06-05 14:11:30 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: pass bitrate on caps
-         Set the bitrate on the caps, some decoders like sipro need this to function
-         properly.
-         Fixes #620007
-
-2010-06-01 23:49:37 -0700  David Schleef <ds@schleef.org>
-
-       * common:
-         Automatic update of common submodule
-         From 17f89e5 to 47683c1
-
-2010-06-01 22:55:22 -0700  David Schleef <ds@schleef.org>
-
-       * common:
-         Automatic update of common submodule
-         From fd7ca04 to 17f89e5
-
-2010-05-31 16:57:42 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Only set i_weighted_pred on versions where it exists
-
-2010-05-20 11:28:47 -0400  Tristan Matthews <tristan@sat.qc.ca>
-
-       * ext/lame/gstlamemp3enc.c:
-         lamemp3enc: implement latency query
-         The encoder's latency is deduced from the framesize. Fixes #618896.
-
-2010-06-01 09:30:33 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/gst-plugins-ugly-plugins.signals:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * win32/common/config.h:
-         Back to development
-
-=== release 0.10.15 ===
-
-2010-05-30 14:21:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 0.10.15
-
-2010-05-30 14:20:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2010-05-30 12:10:29 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-         configure: make implicit GLib and liboil requirements explicit
-         core/base 0.10.26 require GLib >= 2.18 and liboil >= 0.3.14
-
-2010-05-26 23:16:46 -0400  Olivier Crête <tester@tester.ca>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: disable I weighted pred
-         If it is enabled, then it will be main profile instead of baseline.
-         This ensures maximum compatibility of the output stream until the
-         encoder configuration interface gets an overhaul with explicit
-         output profile selection.
-         Fixes #619776.
-
-2010-05-26 12:16:16 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * win32/common/config.h:
-         0.10.14.3 pre-release
-
-2010-05-26 11:52:53 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         po: update translations
-
-2010-05-26 11:55:58 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 357b0db to fd7ca04
-
-2010-05-14 20:06:46 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * win32/common/config.h:
-         0.10.14.2 pre-release
-
-2010-05-14 18:25:38 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 4d67bd6 to 357b0db
-
-2010-05-14 16:02:47 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/realmedia/rmdemux.c:
-       * gst/realmedia/rmutils.c:
-       * gst/realmedia/rmutils.h:
-         rmdemux: add better sipr nibble swap routine
-
-2010-05-13 17:57:57 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: descramble SIPR before pushing out
-         Collect and descramble the SIPR packets before pushing.
-         Descramble ATRAC audio.
-         Fixes #618098
-
-2010-05-13 17:57:02 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/realmedia/rmutils.c:
-       * gst/realmedia/rmutils.h:
-         rm: add function to descramble sipr
-
-2010-01-08 20:51:56 -0500  Olivier Crête <olivier.crete@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264enc: Re-send the received upstream event as-is downstream
-         https://bugzilla.gnome.org/show_bug.cgi?id=606689
-
-2010-05-07 15:33:28 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * ext/amrnb/amrnb.c:
-         amrnbenc: Set rank to GST_RANK_SECONDARY
-
-2010-04-30 19:53:15 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/realmedia/rtspreal.c:
-         rtspreal: use GLib's base64 functions if available
-         Since gst_rtsp_base64_decode_ip() just got deprecated in -base git.
-
-2010-04-28 17:10:36 +0400  Руслан Ижбулатов <lrn1986@gmail.com>
-
-       * ext/amrnb/amrnbdec.h:
-       * ext/amrnb/amrnbenc.h:
-       * ext/amrwbdec/amrwbdec.h:
-         amr: Use correct includes (as pkg-config suggests)
-         Fixes #617078
-
-2010-04-27 13:15:47 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * gst/ac3parse/.gitignore:
-       * gst/ac3parse/Makefile.am:
-       * gst/ac3parse/README:
-       * gst/ac3parse/ac3parse.vcproj:
-       * gst/ac3parse/gstac3parse.c:
-       * gst/ac3parse/gstac3parse.h:
-         ac3parse: remove unported 0.8 plugin
-         New ac3parse lives in gst-plugin-bad. Remove this to avoid confusion.
-
-2010-04-27 12:25:37 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         docs: adding a mp3decoder as well is useful
-
-2010-04-27 11:39:51 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-         docs: massage section index
-
-2010-04-27 11:39:11 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * ext/amrwbdec/amrwbdec.c:
-       * ext/amrwbdec/amrwbdec.h:
-         amrwbdec: move define to source to avoid hiding it from the docs
-
-2010-04-27 11:38:28 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * ext/cdio/gstcdiocddasrc.c:
-         docs: remove short_desc, it is taken from element details
-
-2010-04-27 11:37:52 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * gst/synaesthesia/gstsynaesthesia.c:
-         docs: fix sections docs for synaesthesia
-
-2010-04-27 11:02:15 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * docs/plugins/Makefile.am:
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         docs: add docs for mp3parse
-
-2010-04-20 17:23:04 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst-plugins-ugly.doap:
-         doap: update repository info from cvs->git and maintainers
-
-2010-04-23 14:41:42 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From fc85867 to 4d67bd6
-
-2010-04-13 16:59:03 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * tests/check/elements/x264enc.c:
-         x264enc: adaptive NALU type checking
-         In particular, be less picky about SEI NALU order, which makes test more
-         robust with respect to changes in libx264.
-         See also #615410.
-
-2010-04-16 21:10:58 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: adaptive x264 header NAL layout handling
-         Fixes #615410.
-
-2010-04-15 16:31:23 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstrtpasfdepay.c:
-         asfdepay: we require a dynamic payload type
-         Add an extra caps property that restricts the depayloader to only accept dynamic
-         payload types.
-
-2010-04-15 07:20:20 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * configure.ac:
-         configure: Drop -Wcast-align
-         Commit message copied from core's commit from Benjamin Otte:
-         246f5dba96a5b50bb74621af67b30942cca72af5
-         Apparently gcc warns that GstMiniObject is not castable to
-         GstEvent/Message/Buffer due to them containing 64bit variables, even
-         though ARM hackers claim that those only need 4byte alignment. And as
-         long as gcc behaves that way, this warning is not very useful.
-         So we'll remove the warning until this problem is fixed.
-         Fixes #615698
-
-2010-04-14 09:27:14 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: copy over all buffer flags when copying buffers.
-         Avoids losing the tff/rff video buffer flags
-
-2010-03-14 12:16:21 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/asfpacket.c:
-         asfdemux: Make a table static to avoid having to always allocate it.
-
-2010-04-13 16:31:25 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: fix up avcC header construction
-         Fix off-by-one introduced by commit 35dd89951d8bb1c094da65480e4197efdfb4e93c
-         for BUILD_X264 < 76.
-         Also fixes #610089.
-
-2010-04-13 13:16:41 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: parameterize libx264 provided NAL layout in codec-data creation
-
-2010-04-12 12:43:05 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * configure.ac:
-         configure: Remove -Wundef flag
-         Same fix as for #615161
-
-2010-04-09 11:23:22 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From fdf023d to fc85867
-
-2010-04-09 09:55:14 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst-libs/gst/gettext.h:
-         i18n: #if ENABLE_NLS -> #ifdef ENABLE_NLS to fix compiler warning
-
-2010-03-30 00:36:38 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * common:
-       * ext/Makefile.am:
-       * gst/Makefile.am:
-         build: build plugins in parallel where possible, if make -jN is used
-
-2010-03-26 17:08:23 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * Makefile.am:
-         build: add cruft alert for common/shave*
-
-2010-03-25 19:40:33 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * win32/MANIFEST:
-         Fix make distcheck
-         Remove removed file win32/common/config.h.in from MANIFEST.
-
-2010-03-24 19:35:03 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/synaesthesia/synaescope.c:
-       * gst/synaesthesia/synaescope.h:
-         synaestesia: Fix old-style prototype
-
-2010-03-24 19:07:11 +0300  Руслан Ижбулатов <lrn1986@gmail.com>
-
-       * gst/realmedia/rmutils.c:
-         Fix pointer type.
-         Fixes #613815
-
-2010-03-24 18:55:32 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * common:
-         Automatic update of common submodule
-         From 55cd514 to c1d07dd
-
-2010-03-24 11:27:40 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * configure.ac:
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbenc.c:
-       * ext/cdio/gstcdiocddasrc.h:
-       * ext/dvdread/dvdreadsrc.c:
-       * ext/lame/gstlame.h:
-       * ext/lame/gstlamemp3enc.h:
-       * ext/lame/plugin.c:
-       * ext/mad/gstmad.c:
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-       * gst/mpegaudioparse/gstxingmux.c:
-       * gst/mpegstream/gstdvddemux.c:
-       * gst/mpegstream/gstmpegdemux.c:
-       * gst/mpegstream/gstmpegparse.c:
-       * gst/realmedia/asmrules.c:
-       * gst/realmedia/pnmsrc.c:
-       * gst/realmedia/pnmsrc.h:
-       * gst/realmedia/rdtdepay.h:
-       * gst/realmedia/rdtmanager.c:
-       * gst/realmedia/rtspreal.c:
-         build: Add all kinds of compiler warning flags and fix the resulting warnings
-
-2010-03-19 00:03:53 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/amrnb/Makefile.am:
-       * ext/amrwbdec/Makefile.am:
-       * ext/sidplay/Makefile.am:
-       * gst/asfdemux/Makefile.am:
-       * gst/mpegaudioparse/Makefile.am:
-         build: fix up Makefile.am
-         Mostly just add $(GST_BASE_CFLAGS) where they're missing and fix
-         the order a bit here and there (see docs/random/moving-plugins).
-
-2010-03-19 00:02:40 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * win32/common/config.h.in:
-         win32: remove win32-specific config.h.in copy that's not used any longer
-         The win32 config.h is now generated from the top-level config.h.in.
-
-2010-03-18 15:53:14 +0100  Benjamin Otte <otte@redhat.com>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbenc.c:
-       * ext/amrwbdec/amrwbdec.c:
-       * ext/cdio/gstcdiocddasrc.c:
-       * ext/dvdread/dvdreadsrc.c:
-       * ext/lame/gstlame.c:
-       * ext/mad/gstmad.c:
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * gst/ac3parse/gstac3parse.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstrtpasfdepay.c:
-       * gst/asfdemux/gstrtspwms.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/iec958/ac3iec.c:
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-       * gst/mpegaudioparse/gstxingmux.c:
-       * gst/mpegstream/gstdvddemux.c:
-       * gst/mpegstream/gstmpegdemux.c:
-       * gst/mpegstream/gstmpegparse.c:
-       * gst/mpegstream/gstrfc2250enc.c:
-       * gst/realmedia/pnmsrc.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rdtdepay.c:
-       * gst/realmedia/rdtmanager.c:
-       * gst/realmedia/rmdemux.c:
-       * gst/realmedia/rtspreal.c:
-       * gst/synaesthesia/gstsynaesthesia.c:
-         gst_element_class_set_details => gst_element_class_set_details_simple
-
-2010-03-16 15:05:06 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Put pixel-aspect-ratio from input into the src pad caps
-         Fixes bug #612995.
-
-2010-03-12 13:59:53 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * common:
-         Automatic update of common submodule
-         From e272f71 to 55cd514
-
-2010-03-11 11:21:19 +0100  Benjamin Otte <otte@redhat.com>
-
-       * common:
-         Automatic update of common submodule
-         From df8a7c8 to e272f71
-
-2010-03-10 22:13:45 +0100  Benjamin Otte <otte@redhat.com>
-
-       * configure.ac:
-         Update CXXFLAGS, too
-
-2010-03-10 21:01:20 +0100  Benjamin Otte <otte@redhat.com>
-
-       * configure.ac:
-         Update for recent changes to common submodule
-         This just replaces every "$ERROR_CFLAGS" usage with a usage of
-         "$WARNING_CFLAGS $ERROR_CFLAGS" to get the same functionality as
-         previously.
-         Actually using that separation will happen later.
-
-2010-03-10 21:52:30 +0100  Benjamin Otte <otte@redhat.com>
-
-       * common:
-         Automatic update of common submodule
-         From 9720a7d to df8a7c8
-
-2010-03-10 20:44:18 +0100  Benjamin Otte <otte@redhat.com>
-
-       * common:
-         Automatic update of common submodule
-         From 0b6e072 to 9720a7d
-
-2010-03-10 16:10:17 +0100  Benjamin Otte <otte@redhat.com>
-
-       * common:
-         Automatic update of common submodule
-         From 7cc5eb4 to 0b6e072
-
-2010-03-10 01:10:52 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 7aa65b5 to 7cc5eb4
-
-2010-03-09 21:40:26 +0000  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 44ecce7 to 7aa65b5
-
-2010-02-26 15:43:58 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * configure.ac:
-         configure: Use automake 1.11 silent rules instead of shave if available
-         This makes sure that we use something that is still maintained and
-         also brings back libtool 1.5 support.
-
-2010-03-09 17:42:11 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * win32/common/config.h:
-         Back to development
-
-=== release 0.10.14 ===
-
-2010-03-06 01:13:25 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
-       * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 0.10.14
-
-2010-03-06 01:10:09 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/el.po:
-       * po/en_GB.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sl.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2010-03-03 22:52:12 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * win32/common/config.h:
-         0.10.13.4 pre-release
-
-2010-02-22 19:13:11 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-       * tests/check/elements/x264enc.c:
-         x264enc: Replace 'avc-sample' with 'avc' in caps
-         In the element and in its tests
-         Fixes #606662
-
-2010-03-01 14:07:20 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Don't set durations of 0 on outgoing buffers.
-         Some (broken) streams don't have the extended stream properties in
-         the header, resulting in applying a duration of zero on outgoing
-         buffers.
-         Fixes #611473
-
-2010-03-01 14:05:58 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/asfpacket.c:
-         asfdemux: Make sure we always set proper payload duration.
-         Some (broken) streams will have a delta of 0, resulting in outgoing
-         buffers having durations of 0.
-         Fixes #611473
-
-2010-02-24 01:40:34 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * win32/common/config.h:
-         0.10.13.3 pre-release
-
-2010-02-19 10:13:34 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/asfpacket.c:
-         asfdemux: Make sure we don't end up with negative timestamps.
-         Some files have payload with timestamps smaller than the preroll duration.
-         Instead of blindly substracting the preroll value (and ending up with
-         insanely high timestamps on the outgoing buffers), we make sure we
-         never go below 0.
-         Fixes #610432
-
-2010-02-19 01:07:08 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * win32/common/config.h:
-         0.10.13.2 pre-release
-         Update core/base requirement to 0.10.26, since that's more likely
-         to be the actual requirement.
-
-2010-02-19 01:06:44 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * po/LINGUAS:
-       * po/el.po:
-       * po/sl.po:
-         po: update translations
-
-2010-02-16 14:08:12 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * tests/check/elements/x264enc.c:
-         x264enc: add caps check to x264enc unit test
-         Add some minimal caps checking to x264enc unit test.
-         See #610089.
-
-2010-02-16 13:25:11 +0000  Vittorio Palmisano <vpalmisano@gmail.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: fix up avcC header construction and playback by flash players
-         Fix off-by-one bug when constructing the avcC header chunk: we
-         wrote wrong profile info into the header. The first byte in the
-         SPS NAL we get from x264 is the nal type, not the profile_idc.
-         Also add some debug logging.
-         Fixes #610089.
-
-2010-02-16 12:59:54 +0100  Robert Swain <robert.swain@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Improve seek behaviour for audio-only with no index
-         Instead of seeking to seek_time - 5s in the hope of hitting a keyframe
-         for video, we can just seek to seek_time instead.
-
-2010-02-16 00:24:32 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-         configure: fix up GST_CXXFLAGS properly
-         We don't want C specific flags in GST_CXXFLAGS, so base it on the
-         GST_CFLAGS that only contains the pkg-config CFLAGS but none of
-         the GST_OPTION_CFLAGS. Also, we only need the local includes once.
-
-2010-02-11 01:12:43 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * MAINTAINERS:
-         Update MAINTAINERS, add myself
-
-2010-02-15 23:16:32 +0200  Stefan Kost <ensonic@users.sf.net>
-
-       * configure.ac:
-         configure: base GST_CXXFLAGS on --cflags from pkg-config
-         pkg-config sets GST_CFLAGS and GST_LIBS. We need to use CFLAGS as a starting
-         point for for both C and CXX settings.
-
-2010-02-14 23:18:44 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 96dc793 to 44ecce7
-
-2010-02-01 01:33:22 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * Makefile.am:
-       * configure.ac:
-       * win32/common/.gitignore:
-       * win32/common/config.h:
-         win32: change how win32/common/config.h is updated
-         Generate win32/common/config.h-new directly from config.h.in,
-         using shell variables in configure and some hard-coded information.
-         Change top-level makefile so that 'make win32-update' copies the
-         generated file to win32/common/config.h, which we keep in source
-         control. It's kept in source control so that the git tree is
-         buildable from VS.
-         This change is similar to the ones applied a while ago to GStreamer
-         core, gst-plugins-base and gst-plugins-good and prevents configure
-         from changing files in source control. The generated config.h
-         should be ok, but needs testing.
-
-2010-01-31 13:03:33 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/realmedia/rtspreal.c:
-         rtspreal: don't construct config header with uninitialised bytes
-         Turns out 4 + 4 + 2 + (4 * 2) is actually 18 and not 22. This avoids
-         a presumably unintentional padding of uninitialised bytes at the end
-         of the CONT tags chunk, which should be harmless but causes warnings
-         in valgrind (see #608533 for a test URL).
-
-2010-01-30 19:12:24 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/realmedia/rtspreal.c:
-         rtspreal: add finalize function so we can free streams and rulebook
-         Fix memory leak in Real RTSP component (#608533).
-
-2010-01-30 19:10:45 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/realmedia/rtspreal.c:
-         rtspreal: fix minor memory leak
-         Caps take their own reference when a buffer is added to them, so
-         unref buffer after adding it to caps (#608533).
-
-2010-01-30 19:06:34 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/realmedia/rdtdepay.c:
-         rdtdepay: unref input buffer when done
-         Fixes memory leak, see #608533.
-
-2010-01-30 15:19:56 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 15d47a6 to 96dc793
-
-2010-01-29 19:47:03 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264enc: make use of Access Unit delimiters configurable
-         API: GstX264Enc:aud
-
-2010-01-22 15:40:28 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * gst/asfdemux/asfpacket.c:
-         asfdemux: Do not subtract padding twice
-         Only subtract implicit padding if an explicit one isn't
-         provided. Avoids subtracting it twice and causing
-         parsing errors.
-         Fixes #607698
-
-2010-01-22 16:55:14 +0200  Stefan Kost <ensonic@users.sf.net>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/mpegstream/gstmpegpacketize.c:
-         assert: g_assert_not_reached() cannot replace return statement
-         Fix build with assert being turned off.
-
-2010-01-20 00:55:12 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 14cec89 to 15d47a6
-
-2010-01-18 18:01:55 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Don't forget to update flow variable
-         Forgot to update the return value in the loop.
-
-2010-01-18 17:49:06 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Check flow return on every push
-         We previously only aggregated flow returns after the while(push) loop,
-         which meant that in some cases we would end-up not properly aggregating
-         the flow returns.
-         This is based on the same flow aggregation algorithm as oggdemux.
-
-2010-01-11 16:14:44 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Add stream-format to output caps
-         Adds stream-format to output caps of x264enc that
-         informs if the stream is in bytestream of avc format.
-         Fixes #606662
-
-2010-01-11 12:23:35 +0100  Arnaud Patard <apatard@mandriva.com>
-
-       * gst/mpegaudioparse/gstxingmux.c:
-         xingmux: Fix unaligned memory access
-         ARM/SPARC need 32bit alignment but xingmux accesses possibly
-         unaligned memory, which leads to SIGBUS.
-         Fixes bug #586464.
-
-2010-01-07 14:36:47 -0800  Michael Smith <msmith@songbirdnest.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Use GST_STR_NULL in a couple of places.
-         Fixes crashing on some of the log statements on win32.
-
-2010-01-07 16:36:08 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: Parse and post bitrate for streams
-         Parse the bitrate of the streams and post their tags.
-         Fixes #599299
-
-2010-01-07 13:54:21 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: Post bitrate tag
-         If stream bitrate object is available, post the bitrate
-         tags.
-         Fixes #599297
-
-2010-01-04 15:19:25 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-       * gst/mpegaudioparse/gstmpegaudioparse.h:
-         mp3parse: minor validation check of (Xing, VBRI) metadata
-         ... to detect e.g. a truncated file, rendering some of the metadata invalid.
-
-2010-01-04 14:59:06 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         mp3parse: use proper total_time and total_bytes in various cases
-         The correct basis for (Xing, VBRI) seek table calculations is the
-         byte size and duration provided by that metadata, rather than some
-         other (possibly even estimated) one.  This also prevents an infinite
-         conversion loop in (unlikely) case where a TOC is provided without
-         such corresponding (duration) metdata.
-
-2009-12-08 19:55:04 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-       * gst/mpegaudioparse/gstmpegaudioparse.h:
-         mp3parse: conserve stop time for non-accurate seek
-         Use the same strategy as accurate seeks to store
-         pending non-accurate seeks to avoid overwriting non-definite
-         stop times. When doing non-accurate seeks our position
-         reporting might drift off by some secs and the stream can
-         end up before it should.
-         Fixes #603695
-
-2009-12-21 19:12:59 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 47cb23a to 14cec89
-
-2009-12-18 16:04:12 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/amrwbdec/amrwb.c:
-         amrwbdec: give decoder a rank so decodebin/playbin will use it
-
-2009-12-08 19:01:50 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         mp3parse: return false when we can't seek
-         When upstream can't seek, we return false as well
-
-2009-12-02 11:21:22 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * ext/lame/gstlame.c:
-       * ext/lame/gstlamemp3enc.c:
-         lame: Avoid crash when seeking before negotiating
-         lame's 'lgv' variable is only initialized when the caps
-         is negotiated, whenever a seek happens before that, it would
-         attempt to call a function on an empty pointer, causing the crash.
-         Fixes #603515
-
-2009-12-01 15:08:07 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 87bf428 to 47cb23a
-
-2009-12-01 14:17:50 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From da4c75c to 87bf428
-
-2009-11-27 18:56:13 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * common:
-         Automatic update of common submodule
-         From 53a2485 to da4c75c
-
-2009-11-26 15:54:45 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         mp3parse: fix non-flushing seek
-         Specifically, in addition to clearing lots of variables/offsets
-         when receiving newsegment, also clear leftover data to match.
-
-2009-11-20 21:32:31 -0500  Olivier Crête <olivier.crete@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         x264enc: Make upstream GstForceKeyUnit thread-safe
-         Also send the GstForceKeyUnit event downstream when an upstream on is received,
-         allowing muxers or payloaders to take appropriate actions.
-         https://bugzilla.gnome.org/show_bug.cgi?id=602556
-
-2009-11-19 10:31:25 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From a3e3ce4 to 53a2485
-
-2009-11-18 09:58:39 +0100  Benjamin Gaignard <benjamin@gaignard.net>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Don't call strlen() on NULL pointers
-         Fixes bug #602280.
-
-2009-11-09 15:02:05 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Remove old pads when new ones are added
-         The old pads were being removed before adding the new ones,
-         we should add the new ones first.
-         Fixes #599718
-
-2009-11-09 13:30:45 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: Handle chained asfs on pull mode
-         Adds chained asfs handling to pull mode. It now checks if
-         there is a new asf header after the last packet (when it
-         is possible to know how many packets are) or it tries
-         checking if a processed packet that fails is an header
-         object.
-         Fixes #599718
-
-2009-11-09 10:24:46 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: properly do chained asfs on push mode
-         To properly do chained asfs work with playbin2, we need to
-         push eos on the old pads before removing them.
-         Fixes #599718
-
-2009-10-27 17:48:03 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: add support for chained asfs (push mode)
-         Adds support for detecting and playing chained asfs
-         in push mode. asfdemux tries to detect a new asf start
-         by identifying the header object guid in a input buffer.
-         When it finds it, it resets its state, removing its pads
-         and creates new ones for the new file.
-
-2009-11-05 18:33:09 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: fix two small leaks
-
-2009-11-05 18:19:58 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: prefer WM/TrackNumber over WM/Track, it's more reliable
-         WM/Track has a 0 base but is often wrongly written as starting from 1,
-         so not as reliable as WM/TrackNumber which always starts from 1.
-
-2009-11-05 18:11:55 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: WM/Track starts counting from 0, adjust to start from 1
-
-2009-11-05 18:11:14 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: map WM/TrackNumber to GST_TAG_TRACK_NUMBER as well
-         There's both WM/Track and WM/TrackNumber.
-
-2009-11-04 15:52:09 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * ext/a52dec/gsta52dec.c:
-         a52dec: Fix debug statement: Pass pos variable instead of time() function
-
-2009-11-04 15:50:17 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * gst/dvdsub/gstdvdsubdec.c:
-         dvdsubdec: Fix printf format string warning
-
-2009-11-04 15:46:04 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Fix bogus variable used uninitialised warnings
-
-2009-11-04 13:55:39 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * po/Makevars:
-         po: Don't create backup .po files
-         As well as preventing creation of useless backup files, it works
-         around a bug in gettext 0.17 on OS/X
-
-2009-10-29 11:39:13 -0700  Michael Smith <msmith@songbirdnest.com>
-
-       * gst/asfdemux/asfpacket.c:
-         asfdemux: fix c99-style comments.
-
-2009-10-29 10:34:17 -0700  Michael Smith <msmith@songbirdnest.com>
-
-       * gst/asfdemux/asfpacket.c:
-         asfdemux: accept fragments in a continued packet where the subsequent fragments declare a size of 0. Fixes bug 600037.
-
-2009-10-27 12:33:24 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/realmedia/rmutils.c:
-         rmutils: fix byteswapping
-         fix the byteswapping code that was wrong because of the side effects of the
-         READ/WRITE macros.
-         Fixes #599676
-
-2009-10-20 20:00:44 +0100  Robert Swain <robert.swain@gmail.com>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: Adapt to slightly modified x264 API
-         Fixes #599095.
-
-2009-10-26 17:31:19 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
-
-       * gst/asfdemux/asfpacket.c:
-         asfdemux: careful to avoid crash on bogus data
-         When receiving bogus data, we have to avoid subtracting a value
-         larger than 'size' from 'size' variable, resulting in a wrap
-         that would make 'size' a really large bogus value.
-         Fixes #599333
-
-2009-10-26 00:56:37 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * win32/common/config.h:
-         win32: Commit bumped version number
-
-2009-10-17 13:46:13 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         mpegaudioparse: Don't use expensive glib ways to get an enum nick.
-         Fixes #598761
-         This removes a good 50% of processing time for parsing a buffer.
-         We do this by simply... getting the nicks that we already have handy
-         instead of going through the expensive glib system.
-
-2009-10-24 20:36:41 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * configure.ac:
-         configure.ac: And back to development we go...
-
-=== release 0.10.13 ===
-
-2009-10-21 17:16:00 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * common:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * gst-plugins-ugly.doap:
-       * win32/common/config.h:
-         Release 0.10.13
-
-2009-10-21 17:02:42 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/en_GB.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2009-10-16 10:16:55 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From 85d1530 to 0702fe1
-
-2009-10-15 23:56:55 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * ChangeLog:
-       * configure.ac:
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/en_GB.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-       * win32/common/config.h:
-         0.10.12.3 pre-release
-
-2009-10-14 10:41:48 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * common:
-         Automatic update of common submodule
-         From a3e3ce4 to 85d1530
-
-2009-10-13 13:05:32 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * ext/a52dec/gsta52dec.c:
-         a52dec: Fix reference leak on all input buffers in 'dvd mode'
-         https://bugzilla.gnome.org/show_bug.cgi?id=598272
-
-2009-10-12 13:54:27 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * ChangeLog:
-       * configure.ac:
-       * po/LINGUAS:
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/de.po:
-       * po/en_GB.po:
-       * po/es.po:
-       * po/eu.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/lv.po:
-       * po/ms.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-       * win32/common/config.h:
-         0.10.12.2 pre-release
-
-2009-10-12 11:31:22 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * docs/plugins/gst-plugins-ugly-plugins.args.new:
-       * docs/plugins/gst-plugins-ugly-plugins.signals.new:
-         docs: Remove files accidentally added
-         Remove the gst-plugins-ugly-plugins.args.new and
-         gst-plugins-ugly-plugins.signals.new files, that appear
-         to have been accidentally added in commit
-         f5d046a0b034f9bd7274291f7131ee5db1a30052
-
-2009-09-16 00:00:28 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * ext/a52dec/gsta52dec.c:
-         a52dec: Add some debugging for new segment events
-
-2009-10-11 16:18:37 +0200  Josep Torra <n770galaxy@gmail.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: fix warning in macosx snow leopard
-
-2009-10-11 16:16:09 +0200  Josep Torra <n770galaxy@gmail.com>
-
-       * gst/mpegstream/gstmpegparse.c:
-         mpegstream: fix warning in macosx snow leopard
-
-2009-10-11 16:14:08 +0200  Josep Torra <n770galaxy@gmail.com>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         mpegaudioparse: fix warning in macosx snow leopard
-
-2009-10-11 16:09:11 +0200  Josep Torra <n770galaxy@gmail.com>
-
-       * gst/dvdsub/gstdvdsubdec.c:
-         dvdsubdec: fix warning on macosx snow leopard
-
-2009-10-11 16:06:25 +0200  Josep Torra <n770galaxy@gmail.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: fix warning in macosx snow leopard
-
-2009-10-08 19:58:25 +0300  René Stadler <rene.stadler@nokia.com>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         mp3parse: don't fail SEEKING query when upstream query fails for TIME format
-
-2009-10-08 11:01:03 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * common:
-         Automatic update of common submodule
-         From 19fa4f3 to a3e3ce4
-
-2009-10-07 14:22:09 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/realmedia/rdtmanager.c:
-         build: fprintf, sprintf, sscanf need stdio.h
-
-2009-10-02 18:27:11 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * ext/mad/gstmad.c:
-         mad: add missing include to fix the build
-
-2009-10-05 12:13:51 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-         dvdlpcm: whitespace fixes
-
-2009-10-04 22:51:41 +0100  Christian F.K. Schaller <christian.schaller@collabora.co.uk>
-
-       * gst-plugins-ugly.spec.in:
-         update spec file
-
-2009-10-02 15:22:38 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * configure.ac:
-         x264enc: adjust configure checking to changed upstream
-
-2009-10-01 18:58:42 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         x264enc: conditionally adjust to new upstream API
-         Fixes #596517.
-
-2009-09-24 17:49:52 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-       * gst/mpegaudioparse/gstmpegaudioparse.h:
-         mpegaudioparse: prevent infinite (re)syncing
-         Conflicts:
-         gst/mpegaudioparse/gstmpegaudioparse.c
-
-2009-09-22 12:13:38 -0700  Michael Smith <msmith@songbirdnest.com>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         mp3parse: Refactor checking for sync. Make resyncing more reliable.
-         Previously, we could get false sync relatively easily - it sometimes happened
-         on real files. This cleans the code up a fair bit, and makes it require more
-         confirmation that we've found valid sync before continuing.
-
-2009-09-17 16:12:29 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         mpegaudioparse: ensure 2 valid headers in a row when resyncing
-
-2009-09-11 10:05:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/mpegstream/gstdvddemux.c:
-         dvddemux: remove bogus ifndef
-
-2009-09-05 10:23:49 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 94f95e3 to 19fa4f3
-
-2009-09-01 12:22:39 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Fix GstIndex handling, incl. refcounting and NULL indizes
-
-2009-08-31 13:42:27 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/dvdsub/gstdvdsubparse.c:
-         dvdsubparse: GstAdapter is not a GstObject and should be freed with g_object_unref
-
-2009-08-24 13:59:05 -0700  David Schleef <ds@schleef.org>
-
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbenc.c:
-         Remove Ronald Bultje from Authors field
-         Replaced with "GStreamer maintainers
-         <gstreamer-devel@lists.sourceforge.net>" or just removed,
-         depending on the number of other authors.
-
-2009-08-24 13:57:14 -0700  David Schleef <ds@schleef.org>
-
-       * gst/asfdemux/Makefile.am:
-       * gst/asfdemux/gstasfmux.c:
-       * gst/asfdemux/gstasfmux.h:
-         asfdemux: Remove old non-built asfmux code
-         Remove so people don't confuse it with the new asfmux code
-         in -bad.
-
-2009-08-23 13:35:46 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/a52dec/gsta52dec.c:
-         a52dec: Only add the MM_ACCEL_DJBFFT flag if it's defined
-         It's not defined for older liba52 versions.
-
-2009-08-23 13:34:32 +0200  Mart Raudsepp <leio@gentoo.org>
-
-       * ext/a52dec/gsta52dec.c:
-         a52dec: Allow liba52 to use djbfft based IMDCT transform
-         liba52 in a52dec-0.7.4 does not have any MMX, MMXEXT or 3DNOW based
-         IMDCT transform acceleration. It does however have a software based
-         acceleration using the djbfft library (D.J. Bernstein's library for
-         fourier transforms - Extremely fast library for floating-point
-         convolution). So allow liba52 to use it through the MM_ACCEL_DJBFFT
-         flag.
-         The liba52 copy in MPlayer sources does have SSE, 3dnowext, 3dnow
-         and AltiVec implementations, but those are checked for first, and
-         djbfft is chosen only if none of those is available - good in the
-         case of some distributions including a port of the MPlayer changes
-         in their system a52dec library.
-         The down and upmix code in liba52 doesn't seem to be disturbed by
-         this additional MM_ACCEL flag and will still use MMX, SSE or 3DNOW
-         versions if passed from oil_cpu_get_flags (SSE currently is not).
-         Fixes bug #592787.
-
-2009-08-17 17:31:10 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * configure.ac:
-         amr: Use opencore-amr pkg-config files if possible
-         This makes it possible to build the plugins when the libraries
-         are installed at non-standard locations.
-         Fixes bug #591348.
-
-2009-08-14 12:07:40 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         mpegaudioparse: use metadata (xing, vbri) provided bytesize for conversions
-         Metadata provided seek tables are consistent with metadata's view of
-         total size, which typically matches real size, but need not do so
-         (e.g. a truncated file).  Fixes seeking and position reporting
-         in such truncated files (although duration based on metadata may then
-         still be incorrect).
-
-2009-08-10 22:22:39 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-         configure: bump core/base requirements to released versions
-         to avoid confusion.
-
-2009-08-04 10:44:43 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * configure.ac:
-         configure: Remove all mentions to the id3tag plugin which was removed
-
-2009-08-01 08:43:21 +0200  Marvin Schmidt <marvin_schmidt@gmx.net>
-
-       * configure.ac:
-         mad: make check for mad independent of the check for id3tag
-         Fixes bug #590432.
-
-2009-07-31 00:25:43 -0300  Thiago Santos <thiagoss@embedded.ufcg.edu.br>
-
-       * gst/asfdemux/gstrtpasfdepay.c:
-         rtpasfdepay: set padding size to the correct value
-         asf packets in rtp packets should come with their padding fields
-         set to 0 and the depayload must update them to the correct
-         value before pushing downstream
-
-2009-07-27 20:12:20 +0200  Iago Toral <itoral@igalia.com>
-
-       * configure.ac:
-       * docs/plugins/Makefile.am:
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-       * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-amrwbdec.xml:
-       * ext/Makefile.am:
-       * ext/amrnb/GstAmrnbEnc.prs:
-       * ext/amrnb/Makefile.am:
-       * ext/amrnb/README:
-       * ext/amrnb/amrnb.c:
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbdec.h:
-       * ext/amrnb/amrnbenc.c:
-       * ext/amrnb/amrnbenc.h:
-       * ext/amrnb/amrnbparse.c:
-       * ext/amrnb/amrnbparse.h:
-       * ext/amrwbdec/Makefile.am:
-       * ext/amrwbdec/README:
-       * ext/amrwbdec/amrwb.c:
-       * ext/amrwbdec/amrwbdec.c:
-       * ext/amrwbdec/amrwbdec.h:
-         amr: Add AMR-WB decoder and AMR-NB encoder and decoder
-         These are based on the OpenCore codecs.
-         Fixes bug #584890.
-
-2009-07-24 00:43:07 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * common:
-         Automatic update of common submodule
-         From fedaaee to 94f95e3
-
-2009-07-22 11:10:38 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * LICENSE_readme:
-       * REQUIREMENTS:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-       * docs/plugins/gst-plugins-ugly-plugins.args.new:
-       * docs/plugins/gst-plugins-ugly-plugins.signals.new:
-       * docs/plugins/inspect/plugin-dvdnav.xml:
-       * ext/Makefile.am:
-       * ext/dvdnav/.gitignore:
-       * ext/dvdnav/Makefile.am:
-       * ext/dvdnav/README:
-       * ext/dvdnav/dvdnavsrc.c:
-       * ext/dvdnav/dvdnavsrc.h:
-       * ext/dvdnav/gst-dvd:
-       * ext/dvdread/dvdreadsrc.c:
-       * gst-plugins-ugly.spec.in:
-       * po/POTFILES.in:
-         dvdnav: remove dvdnav plugin
-         Remove dvdnav plugin, it has no future. resindvd is the plugin to
-         use for dvd playback. Note that dvdnav was never really enabled
-         in -ugly, you had to edit configure.ac to get it built.
-
-2009-06-20 14:31:06 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * tests/check/elements/mpeg2dec.c:
-         mpeg2dec: Fix unused variables compiler warnings in unit test
-
-2009-06-26 15:21:12 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * autogen.sh:
-         autogen.sh: Use printf instead of 'echo -n'. Check for automake-1.1[01]
-         Check for more automake command variants. Use printf instead of 'echo -n'
-         for portability
-
-2009-07-13 12:24:14 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 5845b63 to fedaaee
-
-2009-02-10 13:25:54 +0000  Tim-Philipp Muller <tpm@mini.centricular.net>
-
-       * .gitignore:
-         Make git ignore more files
-
-2009-06-29 11:10:42 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Refactor multiple packet pull.
-         This also fixes a bug by which the first buffer (in a multi-packet mode)
-         passed to asf_demux_parse_packet() would have a GST_BUFFER_SIZE of the
-         full incoming buffer and not just of the single asf packet.
-         Fixes corrupted frames introduced by latest commit.
-
-2009-06-29 10:58:49 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: use the right accurate field
-         Remove accurate variable and its faulty use because the real variable is an
-         instance variable.
-
-2009-06-28 17:48:11 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/asfpacket.c:
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Sprinkle branch prediction macros accross the code
-
-2009-06-28 17:43:12 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Delay newsegment handling until we have a keyframe.
-         We now have a chance for packets to be collected before we send out the
-         newsegment. If we're not in accurate seeking (keyunit) it will set
-         the segment start/time to the keyframe's timestamp.
-
-2009-06-28 17:39:23 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Remove useless check. We already have checked for it above.
-
-2009-06-28 17:31:11 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: No longer queue GOPs now that seeking is fixed.
-         We now *always* seek to the keyframe just before our requested position.
-         When we encounter the first keyframe and we were not accurate (therefore doing
-         keyframe seeking), we update the segment start position to the keyframe timestamp.
-
-2009-06-28 17:42:44 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: Store the accurate seeking flag
-
-2009-06-28 17:04:00 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Use the average frame duration for buffers without a duration.
-         This will still cause some timestamp jitter, but giving a hint as to the duration
-         rather than nothing seems to be a better idea.
-         Also, this allows some scenarios (like remuxing with asfmux) to estimate the total
-         duration using the accumulated packet duration (which will be correct).
-
-2009-06-28 17:02:17 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: Use index entry packet count to optimize seeking.
-         The simple index entries also contain the number of packets one needs
-         to retrieve at a given position to get a full keyframe. We therefore
-         use that information to retrieve all those packets in one buffer when
-         working in pull-mode.
-
-2009-06-26 20:52:29 -0300  Thiago Santos <thiagoss@embedded.ufcg.edu.br>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Do not try to free const pointer
-         In gst_asf_demux_chain_headers, when 'goto wrong_type' was called
-         asfdemux tried to free a const pointer that had been cast to a
-         normal pointer variable.
-
-2009-06-26 20:44:09 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Use presentation timestamp when searching in the index.
-         We need to take the preroll into account... else we end up too early.
-
-2009-06-26 13:43:16 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * common:
-         Automatic update of common submodule
-         From f3bb51b to 5845b63
-
-2009-06-26 13:35:38 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Convert index entry from presentation time to timestamps.
-         We weren't taking the preroll into account previously, meaning that we
-         were always seeking preroll nanoseconds too early... resulting in a lot
-         of dropped packets (which are before the start time).
-         This brings quit a bit closer to as-fast-as-possible seeking in asf files.
-
-2009-06-26 10:58:56 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * common:
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Fix byte array metadata handling.
-         We basically discard byte array metadata. Should be trivial to adapt
-         to storing the pointers if we need it later on.
-
-2009-06-26 10:41:28 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: Handle PAR/interlaced information stored in packet payload.
-         This is the 'other' way to store non 1/1 PAR in asf streams (by storing it
-         in the ASF Packet payload extensions).
-
-2009-06-26 10:40:39 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: Store/Handle global metadata (not specific to one stream).
-         This allows us to store (and handle) PAR information which might be stored there.
-
-2009-06-25 18:24:56 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         mpegaudioparse: fix Xing inverse seek table building
-
-2009-06-24 15:15:37 +0100  Jan Schmidt <jan.schmidt@sun.com>
-
-       * common:
-         Automatic update of common submodule
-         From f3bb51b to f810030
-
-2009-06-23 16:45:00 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: don't try to free a NULL taglist
-
-2009-06-23 02:14:00 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: post tags only after we've created our source pads
-         Post global tags only after we've added our source pads, so that
-         tag events get sent downstream in addition to tag messages posted
-         on the bus. This makes sure tags can be picked up automatically
-         when transcoding, but also by tagreadbin/playbin2. Fixes #519721.
-         While we're at it, also add a container-format tag.
-
-2009-06-23 01:37:01 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: use new bytereader functions for image tag parsing
-
-2009-06-22 18:53:56 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: remove some more unused variables
-
-2009-06-19 17:25:58 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: plug buffer leaking
-
-2009-06-22 17:36:21 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstrtpasfdepay.c:
-         asfdepay: guard against dropped buffers
-         If a buffer was dropped, we might request data from the adapter that is not
-         there and then we get a NULL buffer.
-
-2009-06-22 17:16:58 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: set DISCONT on streams
-         When we receive a DISCONT as input, don't clear our complete state but simply
-         mark a discont that will be put on the next buffer. The code will be able to
-         handle and throw away incomplete data.
-         Add some more debug info.
-         Remove an unused variable.
-
-2009-06-22 17:15:52 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstrtpasfdepay.c:
-         asfdepay: set DELTA_UNIT flag correctly
-         Only set the DELTA_UNIT flag when we are not dealing with a keyframe.
-         Add some more debug info.
-
-2009-06-22 13:37:58 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: fix latency calculations
-         We need to check for -1 as an invalid timestamp, not 1.
-
-2009-06-16 09:45:59 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-       * gst/mpegaudioparse/gstmpegaudioparse.h:
-         mp3parse: don't put every single frame into the index
-         Let's not put every single mp3 frame in our index, a few frames per
-         second should be more than enough. For now use an index interval
-         of 100ms-500ms depending on the upstream size, to keep the index at
-         a reasonable size. Factor out the code that adds the index entry
-         into a separate function for better code readability.
-
-2009-06-16 01:40:42 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-       * gst/mpegaudioparse/gstmpegaudioparse.h:
-         mp3parse: assume seekability only if we know the upstream size
-         While technically upstream may be seekable even if it doesn't know
-         the exact size, I can't think of a use case where this distincation
-         is relevant in practice, so for now just assume we're not seekable
-         if upstream doesn't provide us with a size. Makes sure we don't
-         build a seek index when streaming internet radio with sources that
-         pretend to be seekable until you try to actually seek.
-
-2009-06-19 17:46:12 +0100  Christian Schaller <christian.schaller@collabora.co.uk>
-
-       * gst-plugins-ugly.spec.in:
-         Fix x264 requirement in SPEC file
-
-2009-06-19 15:01:46 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-       * gst/realmedia/rdtmanager.c:
-         x264enc, rdtmanager: fix compilation with debugging disabled
-
-2009-06-11 13:48:22 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * common:
-       * docs/plugins/Makefile.am:
-         docs: Bump common. Fix comment in the docs Makefile.am
-
-2009-06-18 20:26:04 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * configure.ac:
-       * win32/common/config.h:
-         Back to development -> 0.10.12.1
-
-2009-06-18 08:54:17 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * gst-plugins-ugly.doap:
-         Add 0.10.12 release to the doap file
-
-=== release 0.10.12 ===
-
-2009-06-18 08:34:54 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
-       * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-synaesthesia.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * win32/common/config.h:
-         Release 0.10.12
-
-2009-06-18 08:34:46 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * po/bg.po:
-       * po/id.po:
-       * po/it.po:
-       * po/nl.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2009-06-18 08:04:40 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/en_GB.po:
-       * po/es.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2009-06-05 22:10:02 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * configure.ac:
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/en_GB.po:
-       * po/es.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-       * win32/common/config.h:
-         0.10.11.2 pre-release
-
-2009-06-05 22:07:31 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * win32/common/config.h.in:
-         win32: Remove #undef inline from the win32 config.h
-
-2009-06-05 20:53:57 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * ext/mad/Makefile.am:
-       * ext/mad/gstid3tag.c:
-       * ext/mad/gstmad.c:
-       * ext/mad/gstmad.h:
-         mad, id3mux: (re)move broken, unmaintained and unloved id3mux element
-         It will be reborn with a shiny new code base under its hood in -bad.
-         See #581756 and #565764.
-
-2009-06-05 19:48:28 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * tests/check/pipelines/.gitignore:
-         gitignore: Ignore some built files in the test area
-
-2009-06-05 19:46:17 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-synaesthesia.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-         docs: Update plugin inspect files
-
-2009-06-05 19:25:54 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * configure.ac:
-       * docs/plugins/Makefile.am:
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-       * docs/plugins/inspect/plugin-x264.xml:
-       * ext/Makefile.am:
-       * gst-plugins-ugly.spec.in:
-       * tests/check/Makefile.am:
-       * tests/check/elements/.gitignore:
-         Moved 'x264enc' from -bad to -ugly
-
-2009-05-25 11:18:57 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         [MOVED FROM BAD 28/28] x264enc: add multipass-cache-file property
-         Fixes #583627
-
-2009-05-09 23:47:39 +0100  Christian Schaller <christian.schaller@collabora.co.uk>
-
-       * ext/x264/GstX264Enc.prs:
-         [MOVED FROM BAD 27/28] Remove wrong stuff from preset file
-
-2009-05-09 12:42:25 +0100  Christian Schaller <christian.schaller@collabora.co.uk>
-
-       * ext/x264/GstX264Enc.prs:
-         [MOVED FROM BAD 26/28] Add a more representative example preset file for x264
-
-2009-05-07 17:53:42 +0100  Christian Schaller <christian.schaller@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         [MOVED FROM BAD 25/28] Add ranks to various muxers and encoders in -bad
-
-2009-04-30 00:06:36 +0300  Stefan Kost <ensonic@users.sf.net>
-
-       * ext/x264/GstX264Enc.prs:
-       * ext/x264/Makefile.am:
-       * ext/x264/gstx264enc.c:
-         [MOVED FROM BAD 24/28] x264enc: add preset support
-         Add preset iface and a (dummy) preset file as a starting point.
-
-2009-04-29 16:57:36 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * ext/x264/gstx264enc.c:
-         [MOVED FROM BAD 23/28] x264enc: add some documentation on profile
-
-2009-04-09 23:53:39 +0200  Janin Kolenc <janin.kolenc at marand.si>
-
-       * ext/x264/gstx264enc.c:
-       * ext/x264/gstx264enc.h:
-         [MOVED FROM BAD 22/28] x264enc: add force keyframe event handling
-         Use the GstForceKeyUnit event to force a keyframe.
-         Fixes #578112.
-
-2009-01-05 10:28:58 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-         [MOVED FROM BAD 21/28] ext/x264/gstx264enc.c: Use hyphen in property name, perform safety buffer size check prior to mem access, and some mo...
-         Original commit message from CVS:
-         * ext/x264/gstx264enc.c: (gst_x264_enc_class_init),
-         (gst_x264_enc_header_buf), (gst_x264_enc_encode_frame):
-         Use hyphen in property name, perform safety buffer size check
-         prior to mem access, and some more parentheses in macro.
-
-2009-01-02 01:44:11 +0000  Alessandro Decina <alessandro.d@gmail.com>
-
-         [MOVED FROM BAD 20/28] ext/apexsink/Makefile.am: Link against -lgcrpyto for RSA_new and RSA_free.
-         Original commit message from CVS:
-         * ext/apexsink/Makefile.am:
-         Link against -lgcrpyto for RSA_new and RSA_free.
-         * ext/faac/gstfaac.c:
-         * ext/x264/gstx264enc.c:
-         Fix compiler warnings.
-
-2008-11-14 19:52:24 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-         [MOVED FROM BAD 19/28] ext/x264/gstx264enc.c: Construct source caps in more conventional (and correct) manner.
-         Original commit message from CVS:
-         * ext/x264/gstx264enc.c: (gst_x264_enc_set_src_caps):
-         Construct source caps in more conventional (and correct) manner.
-
-2008-11-04 12:42:30 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         [MOVED FROM BAD 18/28] Don't install static libs for plugins. Fixes #550851 for -bad.
-         Original commit message from CVS:
-         * ext/alsaspdif/Makefile.am:
-         * ext/amrwb/Makefile.am:
-         * ext/apexsink/Makefile.am:
-         * ext/arts/Makefile.am:
-         * ext/artsd/Makefile.am:
-         * ext/audiofile/Makefile.am:
-         * ext/audioresample/Makefile.am:
-         * ext/bz2/Makefile.am:
-         * ext/cdaudio/Makefile.am:
-         * ext/celt/Makefile.am:
-         * ext/dc1394/Makefile.am:
-         * ext/dirac/Makefile.am:
-         * ext/directfb/Makefile.am:
-         * ext/divx/Makefile.am:
-         * ext/dts/Makefile.am:
-         * ext/faac/Makefile.am:
-         * ext/faad/Makefile.am:
-         * ext/gsm/Makefile.am:
-         * ext/hermes/Makefile.am:
-         * ext/ivorbis/Makefile.am:
-         * ext/jack/Makefile.am:
-         * ext/jp2k/Makefile.am:
-         * ext/ladspa/Makefile.am:
-         * ext/lcs/Makefile.am:
-         * ext/libfame/Makefile.am:
-         * ext/libmms/Makefile.am:
-         * ext/metadata/Makefile.am:
-         * ext/mpeg2enc/Makefile.am:
-         * ext/mplex/Makefile.am:
-         * ext/musepack/Makefile.am:
-         * ext/musicbrainz/Makefile.am:
-         * ext/mythtv/Makefile.am:
-         * ext/nas/Makefile.am:
-         * ext/neon/Makefile.am:
-         * ext/ofa/Makefile.am:
-         * ext/polyp/Makefile.am:
-         * ext/resindvd/Makefile.am:
-         * ext/sdl/Makefile.am:
-         * ext/shout/Makefile.am:
-         * ext/snapshot/Makefile.am:
-         * ext/sndfile/Makefile.am:
-         * ext/soundtouch/Makefile.am:
-         * ext/spc/Makefile.am:
-         * ext/swfdec/Makefile.am:
-         * ext/tarkin/Makefile.am:
-         * ext/theora/Makefile.am:
-         * ext/timidity/Makefile.am:
-         * ext/twolame/Makefile.am:
-         * ext/x264/Makefile.am:
-         * ext/xine/Makefile.am:
-         * ext/xvid/Makefile.am:
-         * gst-libs/gst/app/Makefile.am:
-         * gst-libs/gst/dshow/Makefile.am:
-         * gst/aiffparse/Makefile.am:
-         * gst/app/Makefile.am:
-         * gst/audiobuffer/Makefile.am:
-         * gst/bayer/Makefile.am:
-         * gst/cdxaparse/Makefile.am:
-         * gst/chart/Makefile.am:
-         * gst/colorspace/Makefile.am:
-         * gst/dccp/Makefile.am:
-         * gst/deinterlace/Makefile.am:
-         * gst/deinterlace2/Makefile.am:
-         * gst/dvdspu/Makefile.am:
-         * gst/festival/Makefile.am:
-         * gst/filter/Makefile.am:
-         * gst/flacparse/Makefile.am:
-         * gst/flv/Makefile.am:
-         * gst/games/Makefile.am:
-         * gst/h264parse/Makefile.am:
-         * gst/librfb/Makefile.am:
-         * gst/mixmatrix/Makefile.am:
-         * gst/modplug/Makefile.am:
-         * gst/mpeg1sys/Makefile.am:
-         * gst/mpeg4videoparse/Makefile.am:
-         * gst/mpegdemux/Makefile.am:
-         * gst/mpegtsmux/Makefile.am:
-         * gst/mpegvideoparse/Makefile.am:
-         * gst/mve/Makefile.am:
-         * gst/nsf/Makefile.am:
-         * gst/nuvdemux/Makefile.am:
-         * gst/overlay/Makefile.am:
-         * gst/passthrough/Makefile.am:
-         * gst/pcapparse/Makefile.am:
-         * gst/playondemand/Makefile.am:
-         * gst/rawparse/Makefile.am:
-         * gst/real/Makefile.am:
-         * gst/rtjpeg/Makefile.am:
-         * gst/rtpmanager/Makefile.am:
-         * gst/scaletempo/Makefile.am:
-         * gst/sdp/Makefile.am:
-         * gst/selector/Makefile.am:
-         * gst/smooth/Makefile.am:
-         * gst/smoothwave/Makefile.am:
-         * gst/speed/Makefile.am:
-         * gst/speexresample/Makefile.am:
-         * gst/stereo/Makefile.am:
-         * gst/subenc/Makefile.am:
-         * gst/tta/Makefile.am:
-         * gst/vbidec/Makefile.am:
-         * gst/videodrop/Makefile.am:
-         * gst/videosignal/Makefile.am:
-         * gst/virtualdub/Makefile.am:
-         * gst/vmnc/Makefile.am:
-         * gst/y4m/Makefile.am:
-         * sys/acmenc/Makefile.am:
-         * sys/cdrom/Makefile.am:
-         * sys/dshowdecwrapper/Makefile.am:
-         * sys/dshowsrcwrapper/Makefile.am:
-         * sys/dvb/Makefile.am:
-         * sys/dxr3/Makefile.am:
-         * sys/fbdev/Makefile.am:
-         * sys/oss4/Makefile.am:
-         * sys/qcam/Makefile.am:
-         * sys/qtwrapper/Makefile.am:
-         * sys/vcd/Makefile.am:
-         * sys/wininet/Makefile.am:
-         * win32/common/config.h:
-         Don't install static libs for plugins. Fixes #550851 for -bad.
-
-2008-10-27 17:01:22 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-         [MOVED FROM BAD 17/28] ext/x264/gstx264enc.c: Adapt to slightly modified x264 API.  Fixes #555238.
-         Original commit message from CVS:
-         * ext/x264/gstx264enc.c: (gst_x264_enc_init_encoder):
-         Adapt to slightly modified x264 API.  Fixes #555238.
-
-2008-08-12 16:13:15 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-         [MOVED FROM BAD 16/28] ext/x264/gstx264enc.*: Do not deal with duplicated input (timestamps).  If needed, a generic element can do so.
-         Original commit message from CVS:
-         * ext/x264/gstx264enc.c: (gst_x264_enc_reset),
-         (gst_x264_enc_chain), (gst_x264_enc_encode_frame):
-         * ext/x264/gstx264enc.h:
-         Do not deal with duplicated input (timestamps).  If needed,
-         a generic element can do so.
-         Do not manipulate input timestamps on the way out,
-         since that shifts the timeline and A/V sync.
-
-2008-08-12 15:41:48 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-         [MOVED FROM BAD 15/28] docs/plugins/gst-plugins-bad-plugins.args: Integrate new properties into documentation.
-         Original commit message from CVS:
-         * docs/plugins/gst-plugins-bad-plugins.args:
-         Integrate new properties into documentation.
-         * ext/x264/gstx264enc.c: (gst_x264_enc_class_init),
-         (gst_x264_enc_init), (gst_x264_enc_init_encoder),
-         (gst_x264_enc_set_property), (gst_x264_enc_get_property):
-         Fix up API prior to eventual plugin move.
-         API: GstX264Enc:pass (provides more options, and changed to enum)
-
-2008-08-12 13:08:39 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-         [MOVED FROM BAD 14/28] Add documentation and unit test for x264enc.
-         Original commit message from CVS:
-         * docs/plugins/Makefile.am:
-         * docs/plugins/gst-plugins-bad-plugins-docs.sgml:
-         * docs/plugins/gst-plugins-bad-plugins-sections.txt:
-         * ext/x264/gstx264enc.c:
-         * tests/check/Makefile.am:
-         * tests/check/elements/x264enc.c: (setup_x264enc),
-         (cleanup_x264enc), (GST_START_TEST), (x264enc_suite), (main):
-         Add documentation and unit test for x264enc.
-
-2008-08-11 17:24:58 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-         [MOVED FROM BAD 13/28] ext/x264/gstx264enc.c: Allocate some buffers in more adaptive and economical fashion.
-         Original commit message from CVS:
-         * ext/x264/gstx264enc.c: (gst_x264_enc_init),
-         (gst_x264_enc_header_buf), (gst_x264_enc_encode_frame):
-         Allocate some buffers in more adaptive and economical fashion.
-
-2008-08-11 15:16:14 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-         [MOVED FROM BAD 12/28] configure.ac: Check for sufficiently up-to-date x264 API.
-         Original commit message from CVS:
-         * configure.ac:
-         Check for sufficiently up-to-date x264 API.
-         * ext/x264/gstx264enc.c: (gst_x264_enc_pass_get_type),
-         (gst_x264_enc_base_init), (gst_x264_enc_class_init),
-         (gst_x264_enc_init), (gst_x264_enc_init_encoder),
-         (gst_x264_enc_set_property), (gst_x264_enc_get_property):
-         * ext/x264/gstx264enc.h:
-         Expose some more parameters of the x264 encoder as properties.
-
-2008-08-08 15:07:12 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-         [MOVED FROM BAD 11/28] ext/x264/gstx264enc.c: Coding style and layout; re-order some functions in more typical and natural flow.
-         Original commit message from CVS:
-         * ext/x264/gstx264enc.c: (gst_x264_enc_log_callback),
-         (gst_x264_enc_finalize), (gst_x264_enc_header_buf),
-         (gst_x264_enc_set_src_caps), (gst_x264_enc_sink_set_caps),
-         (gst_x264_enc_flush_frames):
-         Coding style and layout; re-order some functions in more
-         typical and natural flow.
-
-2008-08-08 14:19:16 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-         [MOVED FROM BAD 10/28] ext/x264/: Use GQueue in stead of custom queue code.
-         Original commit message from CVS:
-         * ext/x264/Makefile.am:
-         * ext/x264/gstx264enc.c: (gst_x264_enc_set_src_caps),
-         (gst_x264_enc_sink_set_caps), (gst_x264_enc_init),
-         (gst_x264_enc_reset), (gst_x264_enc_finalize),
-         (gst_x264_enc_flush_frames), (gst_x264_enc_sink_event),
-         (gst_x264_enc_chain), (gst_x264_enc_encode_frame),
-         (gst_x264_enc_change_state), (gst_x264_enc_set_property):
-         * ext/x264/gstx264enc.h:
-         Use GQueue in stead of custom queue code.
-         Factorize flushing out encoder delayed frames.
-         Factorize initialization and state change reset.
-
-2008-08-08 10:56:02 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-         [MOVED FROM BAD 09/28] Use configure-generated _stdint.h.
-         Original commit message from CVS:
-         * ext/x264/gstx264enc.h:
-         * sys/fbdev/gstfbdevsink.c:
-         Use configure-generated _stdint.h.
-
-2008-08-08 10:13:36 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-         [MOVED FROM BAD 08/28] ext/x264/: Use video format library and GST_WRITE_*_BE macros where applicable.
-         Original commit message from CVS:
-         * ext/x264/Makefile.am:
-         * ext/x264/gstx264enc.c: (gst_x264_enc_header_buf),
-         (gst_x264_enc_sink_set_caps), (gst_x264_enc_base_init),
-         (gst_x264_enc_class_init), (gst_x264_enc_log_callback),
-         (gst_x264_enc_init), (gst_x264_enc_init_encoder),
-         (gst_x264_enc_finalize), (gst_x264_enc_chain),
-         (gst_x264_enc_encode_frame), (plugin_init):
-         * ext/x264/gstx264enc.h:
-         Use video format library and GST_WRITE_*_BE macros where applicable.
-         Use finalize in stead of dispose.
-         Set up debug category and log callback.
-
-2008-06-04 11:33:21 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         [MOVED FROM BAD 07/28] ext/x264/gstx264enc.c: Try harder not to crash when we get an EOS event but haven't set up the encoder yet (as may ha...
-         Original commit message from CVS:
-         * ext/x264/gstx264enc.c: (gst_x264_enc_header_buf),
-         (gst_x264_enc_sink_event), (gst_x264_enc_chain),
-         (gst_x264_enc_encode_frame):
-         Try harder not to crash when we get an EOS event but haven't set
-         up the encoder yet (as may happen when upstream errors out with
-         not-negotiated, for example). Also, always push the EOS event
-         downstream.
-
-2007-12-11 16:26:07 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         [MOVED FROM BAD 06/28] ext/x264/gstx264enc.c: Fix caps memleak.
-         Original commit message from CVS:
-         * ext/x264/gstx264enc.c: (gst_x264_enc_set_src_caps):
-         Fix caps memleak.
-
-2007-10-26 17:18:41 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         [MOVED FROM BAD 05/28] ext/x264/gstx264enc.c: Fix build against the libx264 version that ships with debian stable.
-         Original commit message from CVS:
-         * ext/x264/gstx264enc.c:
-         Fix build against the libx264 version that ships with debian stable.
-
-2007-09-24 10:53:37 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         [MOVED FROM BAD 04/28] Massive leak fixing, plus code cleanups.
-         Original commit message from CVS:
-         * ext/audioresample/gstaudioresample.c:
-         * ext/x264/gstx264enc.c:
-         * gst/dvdspu/gstdvdspu.c:
-         * gst/dvdspu/gstdvdspu.h:
-         * gst/festival/gstfestival.c:
-         * gst/h264parse/gsth264parse.c:
-         * gst/mpegtsparse/mpegtspacketizer.c:
-         * gst/mpegtsparse/mpegtsparse.c:
-         * gst/multifile/gstmultifilesink.c:
-         * gst/multifile/gstmultifilesrc.c:
-         * gst/nuvdemux/gstnuvdemux.c:
-         * sys/dshowsrcwrapper/gstdshowaudiosrc.c:
-         * sys/dshowsrcwrapper/gstdshowvideosrc.c:
-         * sys/vcd/vcdsrc.c:
-         Massive leak fixing, plus code cleanups.
-
-2007-07-18 07:35:32 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         [MOVED FROM BAD 03/28] Add stdlib include (free, atoi, exit).
-         Original commit message from CVS:
-         * examples/app/appsrc_ex.c:
-         * examples/switch/switcher.c:
-         * ext/neon/gstneonhttpsrc.c:
-         * ext/timidity/gstwildmidi.c:
-         * ext/x264/gstx264enc.c:
-         * gst/mve/mveaudioenc.c: (mve_compress_audio):
-         * gst/rtpmanager/gstrtpclient.c:
-         * gst/rtpmanager/gstrtpjitterbuffer.c:
-         * gst/spectrum/demo-audiotest.c:
-         * gst/spectrum/demo-osssrc.c:
-         * sys/dvb/gstdvbsrc.c:
-         Add stdlib include (free, atoi, exit).
-
-2007-05-15 21:23:53 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         [MOVED FROM BAD 02/28] ext/x264/gstx264enc.c (gst_x264_enc_init_encoder): This needs a version check.
-         Original commit message from CVS:
-         * ext/x264/gstx264enc.c (gst_x264_enc_init_encoder):
-         This needs a version check.
-         * gst/bayer/Makefile.am:
-         Fix the build.
-
-2007-03-25 13:06:26 +0000  Michal Benes <michal.benes@itonis.tv>
-
-         [MOVED FROM BAD 01/28] Add libx264-based h264 encoder plugin (#421110). Probably doesn't handle 'odd' widths and heights correctly yet.
-         Original commit message from CVS:
-         Patch by: Michal Benes <michal.benes at itonis tv>
-         Patch by: Josef Zlomek <josef.zlomek at itonis tv>
-         * configure.ac:
-         * ext/Makefile.am:
-         * ext/x264/Makefile.am:
-         * ext/x264/gstx264enc.c: (gst_x264_enc_me_get_type),
-         (gst_x264_enc_analyse_get_type),
-         (gst_x264_enc_timestamp_queue_init),
-         (gst_x264_enc_timestamp_queue_free),
-         (gst_x264_enc_timestamp_queue_put),
-         (gst_x264_enc_timestamp_queue_get), (gst_x264_enc_header_buf),
-         (gst_x264_enc_set_src_caps), (gst_x264_enc_sink_set_caps),
-         (gst_x264_enc_base_init), (gst_x264_enc_class_init),
-         (gst_x264_enc_init), (gst_x264_enc_init_encoder),
-         (gst_x264_enc_close_encoder), (gst_x264_enc_dispose),
-         (gst_x264_enc_sink_event), (gst_x264_enc_chain),
-         (gst_x264_enc_encode_frame), (gst_x264_enc_change_state),
-         (gst_x264_enc_set_property), (gst_x264_enc_get_property),
-         (plugin_init):
-         * ext/x264/gstx264enc.h:
-         Add libx264-based h264 encoder plugin (#421110). Probably doesn't
-         handle 'odd' widths and heights correctly yet.
-
-2009-06-05 01:51:20 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: nicer metadata extraction of genre tags in some cases
-         Handle pseudo-strings like "(5)" and map them to the ID3v1 genre
-         that they presumably stand for.
-
-2009-06-05 01:32:07 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: parse WM/Picture tags to extract cover art
-         Fixes #583112.
-
-2009-05-31 20:20:30 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * REQUIREMENTS:
-         docs: fix http links for amr libs in REQUIREMENTS
-
-2009-05-29 20:07:14 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: fix bogus flow return handling in eos handler
-         Don't overwrite the origin flow return by whatever flow we get
-         when trying to push the remaining internally queued payloads.
-         We want to do our eos logic, ie. send an EOS event or segment-done
-         message in any case. Makes things EOS properly when an EOS event
-         is forced upon the pipeline so that the source returns
-         FLOW_UNEXPECTED to a pulling asfdemux. Should fix #582056.
-
-2009-05-29 19:52:58 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * win32/common/config.h:
-         win32: update config.h
-
-2009-05-22 19:27:35 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-         configure: bump core/base requirements to released versions
-
-2009-05-22 19:26:27 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * autogen.sh:
-       * configure.ac:
-         autogen: move the -Wno-portability for automake into configure.ac
-
-2009-05-27 00:16:30 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * gst/dvdlpcmdec/Makefile.am:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-         dvdlpcmdec: Add multichannel channel maps, and send some tags
-         Add a multichannel map to the output caps, and send at least a CODEC and
-         BITRATE tag. I'm not too sure about the 5.1 and 7.1 channel maps. I have
-         no samples and can't find info about the channel ordering, but this is
-         better than nothing.
-
-2009-05-26 17:19:54 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * common:
-         Automatic update of common submodule
-         From 888e0a2 to c572721
-
-2009-05-22 10:20:46 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * common:
-         Automatic update of common submodule
-         From 6ab11d1 to 888e0a2
-
-2009-05-21 15:18:06 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * gst/dvdsub/gstdvdsubdec.c:
-         dvdsubdec: Remove some dead code
-         Remove some redundant memset - gobject memory is already initalised to 0.
-         Remove a commented out line leftover from the previous commit
-
-2009-05-21 14:20:22 +0100  Kapil Agrawal <kapil@mediamagictechnologies.com>
-
-       * gst/dvdsub/gstdvdsubdec.c:
-       * gst/dvdsub/gstdvdsubdec.h:
-         dvdsubdec: Support ARGB output
-         Negotiate to and render into ARGB buffers directly if the peer supports it.
-         Fixes: #580869
-
-2009-05-19 00:51:49 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * ext/a52dec/gsta52dec.c:
-         a52dec: Reconcile code with dtsdec
-         Perform some cleanups based on the dtsdec code such as using the boilerplate
-         macro and static pad template functions.
-         Add some documentation. Don't register a change in flags until we synch on
-         another frame successfully.
-
-2009-05-14 12:32:16 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/lame/gstlamemp3enc.c:
-         lamemp3enc: Improve debugging a bit
-
-2009-05-13 19:32:16 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Revert ranking switch with ffdec_mpeg2video. Fixes #574461
-
-2009-05-13 01:55:16 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * po/Makevars:
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/en_GB.po:
-       * po/es.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         po: avoid conflicts of local *.po files with files in git
-         Make it so that filenames and line numbers are only stored in the *.pot file
-         (which is not in git), but not in the individual *.po files. This information
-         is hardly useful for translators in our case, and it should avoid the constant
-         conflicts of local *.po files with the ones in git which are caused by the
-         source files changing and the line numbers being updated. This commit might
-         cause one last merge conflict for you, which you can work around with
-         "git checkout po/*.po" before merging or pulling. After that there should
-         (hopefully) not be any more local modifications of these files (unless
-         someone committed additions or changes to translated strings and the
-         *.po files haven't been updated yet, that is).
-
-2009-05-12 19:22:07 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * ext/lame/gstlamemp3enc.c:
-         lamemp3enc: add Since tag to gtk-doc chunk
-
-2009-05-13 01:46:00 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * tests/check/elements/mpeg2dec.c:
-         checks: fix mpeg2dec unit test again after interlace addition to caps
-
-2009-05-12 20:34:20 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: work around old mpeg2dec versions
-         The repeat first field flag was introduced in 0.5.0 so conditionally disable its
-         detection and just assume no rff is used. This fixes the compilation.
-         Fixes #582375
-
-2009-05-12 20:24:02 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mpeg2dec/Makefile.am:
-         mpeg2dec: link to gstvideo
-         Fix compilation by adding the right include directories and linking to the video
-         library.
-
-2009-05-12 11:57:04 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/asfpacket.c:
-         asfdemux: Downgrade simple statements from WARNING to DEBUG
-
-2009-05-11 12:37:46 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/asfheaders.c:
-       * gst/asfdemux/asfheaders.h:
-       * gst/asfdemux/asfpacket.c:
-       * gst/asfdemux/asfpacket.h:
-         asf: Detect more payload extensions.
-         These should help fix interlaced/PAR issues with more files.
-
-2009-05-12 11:44:13 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/mpeg2dec/gstmpeg2dec.h:
-         mpeg2dec: Implement interlaced support.
-         Expand the debugging statements to show more picture information.
-
-2009-05-12 11:19:00 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Lower rank to MARGINAL to make ffdec_mpeg2video the default
-         ffdec_mpeg2video is much faster, fixes bug #574461.
-
-2009-05-10 16:53:07 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/lame/gstlamemp3enc.c:
-         lamemp3enc: Don't write a Xing header
-
-2009-05-10 11:17:25 +0200  Marc-Andre Lureau <marcandre.lureau@gmail.com>
-
-       * autogen.sh:
-         Run libtoolize before aclocal
-         This unbreaks the build in some cases. Fixes bug #582021
-
-2009-05-09 15:28:18 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: use 64bit safe scaling functions.
-         Got this to fail when seeking in a 14GB file (the value in bytes is
-         bigger than 2**32).
-
-2009-05-09 10:57:34 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         mpegaudioparse: remove some pointless g_return_if_fail()s
-
-2009-05-08 14:24:47 +0100  Christian Schaller <christian.schaller@collabora.co.uk>
-
-       * ext/twolame/gsttwolame.c:
-         Switch twolame to primary rank
-
-2009-05-07 17:59:52 +0100  Christian Schaller <christian.schaller@collabora.co.uk>
-
-       * ext/lame/gstlame.c:
-       * ext/lame/gstlamemp3enc.c:
-       * ext/twolame/gsttwolame.c:
-         Add ranks to mp3 encoders
-
-2009-05-07 17:57:17 +0100  Christian Schaller <christian.schaller@collabora.co.uk>
-
-       * gst-plugins-ugly.spec.in:
-         Add twolame plugin to spec file
-
-2009-05-02 18:11:06 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/asfdemux/asfpacket.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: use upstream segment and timestamps for some interpolation
-         This should particularly help in case of upstream live src, e.g. rtspsrc,
-         and especially so if it has to perform fallback to TCP.
-
-2009-05-07 11:09:59 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/gstrtpasfdepay.c:
-         rtpasfdepay: Add support for fragmented packet (L == 0).
-         This happens with rtp-over-udp.
-
-2009-05-07 10:10:02 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/lame/gstlamemp3enc.c:
-         lamemp3enc: Fixup the bitrate only for CBR
-         Additionally clarify some property descriptions.
-
-2009-05-06 21:47:17 +0200  Alessandro Decina <alessandro.d@gmail.com>
-
-       * ext/lame/gstlamemp3enc.c:
-         lame: fix format string in debug statement
-
-2009-05-06 15:37:44 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         mp3parse: Don't reject valid Xing tables of contents
-         Some Xing headers apparently start the TOC at byte 1 instead of 0. Don't
-         reject them because of it, just subtract the initial offset when reading
-         the table.
-
-2009-05-06 15:27:01 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         mp3parse: Allow more bits to change in headers during resynch
-         Be more lenient about what we accept as changing bits in a header - basically,
-         only require that the mp3 sync marker is present, for the mpeg version,
-         layer and samplerate.
-         Fixes: #581464
-
-2009-05-06 13:17:35 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * ext/mad/gstmad.c:
-         mad: Add duration of incoming/outgoing buffers in debug statements
-
-2009-05-06 13:15:30 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         mpegaudioparse: Remove useless checks for valid buffer duration.
-         The buffer duration is set to a valid value at the very top of
-         emit_frame(), we therefore don't need to check it later on.
-
-2009-05-06 13:13:35 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         mpegaudioparse: Fix stop condition for outputting buffers.
-         Some mp3 streams have an offset in timestamps, requiring us to push the
-         frame *AFTER* segment.stop in order for the decoder to be able to push
-         all data up to the segment.stop position.
-
-2009-05-02 16:51:11 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/asfdemux/asfpacket.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: 0-base timestamps consistently (whether or not streaming)
-         This also makes timestamps (more) consistent before and after a possible
-         seek, and moreover makes for reasonable position reporting in live stream
-         (whose payload timestamps should not be taken for granted).
-
-2009-05-02 13:45:22 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: report initial latency due to internal preroll queue
-
-2009-05-02 13:44:48 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: enhance debug statement and refactor some initialization
-
-2009-05-02 13:44:11 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: handle FIXME; activate pads after internal preroll also when streaming
-
-2009-05-02 11:12:51 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/asfdemux/asfpacket.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: handle FIXME; normalize preroll
-
-2009-05-02 16:08:03 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         asfdemux: fixes for streaming mode
-         * Improve newsegment handling, e.g. upstream might live in TIME.
-         * Only send newsegment if we have needed info.
-         * Avoid reading past end of data section.
-
-2009-05-01 18:08:15 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: fixes/enhancements for streaming mode
-         * Do not rock the boat by reacting to FLUSH_START.
-         * Try to handle TIME seeking by seeking upstream in BYTES.
-         * Handle SEEKING query.
-
-2009-05-05 16:38:19 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * configure.ac:
-       * ext/lame/gstlamemp3enc.c:
-         lame: fix compilation with LAME versions < 3.98
-         lame_set_VBR_quality(), which takes a floating point value for the
-         quality, has been added only in v3.98. Use lame_set_VBR_q(), which
-         takes quality as an integer, for older LAME versions.
-         Fixes #581341.
-
-2009-05-04 20:39:14 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * win32/common/config.h:
-         win32: update config.h to git
-         Until someone ports the new win32 config.h logic from the
-         other modules to -ugly.
-
-2009-05-04 12:53:06 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
-         Update docs
-
-2009-05-04 12:51:29 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/lame/gstlamemp3enc.c:
-         lamemp3enc: Add a note to the encoding-engine-quality property
-         that says, that this does not affect the bitrate at all.
-
-2009-05-04 12:48:43 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/lame/gstlame.c:
-       * ext/lame/gstlamemp3enc.c:
-         lame: Implement preset interface
-
-2009-05-04 12:47:03 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/twolame/gsttwolame.c:
-         twolame: Implement preset interface
-
-2009-04-30 10:21:40 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * ext/lame/gstlamemp3enc.c:
-       * ext/lame/gstlamemp3enc.h:
-         lamemp3enc: Remove fast-vbr property and rename vbr-quality to quality
-
-2009-04-30 10:16:45 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/lame/gstlame.c:
-       * ext/lame/gstlamemp3enc.c:
-         lame/lamemp3enc: Fix memory leak on FLUSH_STOP
-
-2009-04-30 10:14:54 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/lame/gstlame.c:
-         lame: Deprecate the lame element
-
-2009-04-30 10:13:05 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * docs/plugins/Makefile.am:
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-synaesthesia.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-         Update docs
-
-2009-04-30 10:10:08 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/lame/gstlamemp3enc.c:
-         lame: Update example pipelines with the new properties
-
-2009-04-29 19:01:44 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * ext/lame/Makefile.am:
-       * ext/lame/gstlame.c:
-       * ext/lame/gstlamemp3enc.c:
-       * ext/lame/gstlamemp3enc.h:
-       * ext/lame/plugin.c:
-         lame: Add lamemp3enc element with much simplified interface
-         This deprecates the lame element and fixes bug #494528.
-
-2009-04-23 09:04:41 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/asfpacket.c:
-         asfpacket: Fix pull-mode timestamping handling.
-         The problem that happens is the following:
-         * A packet with multiple payloads comes in
-         * Those payloads get handled one by one
-         * The first payload contains the first audio payload with timestamp A
-         * The second payload contains the first video (key)frame with timestamp V (where V < A)
-         With the previous code, the following would happen:
-         * the first payload gets processed, then passed to queue_for_stream
-         * queue_for_stream detects it's the first valid timestamp received and stores
-         first_ts = A
-         * the second payload gets processed, then pass to queue_for_stream
-         * queue_for_stream detects the timestamp is lower than first_ts... and
-         discards it... resulting in losing the first keyframe of the video stream
-         We've been having this issue for *ages*... it's just that nobody noticed it
-         that much with playbin. But with playbin2's aggresive multiqueue handling, this
-         will result in multiqueue not being able to preroll (because the video decoder will
-         be dropping a ton of buffers before (maybe) receiving the next keyframe).
-         Tested with over 200 asf files, and they all play the first frame correctly now,
-         even the most braindead ones.
-
-2009-04-21 14:12:06 -0700  Michael Smith <msmith@songbirdnest.com>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-       * gst/mpegaudioparse/gstmpegaudioparse.h:
-         mp3parse: don't build seek table if we can't seek.
-         Fixes #573720 - unbounded memory usage increase when listening to mp3
-         stream for a long time.
-
-2009-04-21 22:13:32 +0100  Jan Schmidt <thaytan@noraisin.net>
-
-       * common:
-         Automatic update of common submodule
-         From b3941ea to 6ab11d1
-
-2009-04-21 20:17:57 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-       * gst/mpegaudioparse/gstxingmux.c:
-         mpegaudioparse: Remove dead assignment and duplicate code
-
-2009-04-21 20:21:11 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: Actually return the return value for the seek handling.
-
-2009-04-21 20:20:02 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/mpegstream/gstmpegdemux.c:
-       * gst/mpegstream/gstmpegparse.c:
-         mpegstream: Remove dead assignments.
-         The duplicate assignment of update_time was weird... but it seems normal
-         that it's indeed the second statement which is the valid one.
-
-2009-04-21 20:17:19 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * ext/amrnb/amrnbparse.c:
-         armnb: Remove unused variable, adapt debug message accordingly.
-
-2009-04-21 20:15:56 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/dvdsub/gstdvdsubdec.c:
-       * gst/mpegstream/gstdvddemux.c:
-       * gst/mpegstream/gstmpegclock.c:
-         dvdsub/mpegstream: _class_init: Remove unused class variables
-
-2009-04-19 14:03:58 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: Initialize flow for a corner case.
-         This might be caused by entering the if() line 1214 and then not having
-         any activated_streams.. resulting in reaching line 1267 without having
-         any valid flow value.
-
-2009-04-19 14:03:38 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * ext/twolame/gsttwolame.c:
-         twolame: Remove unneeded variable, value assigned was never read.
-
-2009-04-19 14:03:19 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         mpeg2dec: Remove dead assignment. Value overwritten later on.
-
-2009-04-19 14:02:44 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * ext/mad/gstmad.c:
-         mad: Remove dead assignment and variables given values which are never read.
-
-2009-04-19 14:02:03 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * ext/lame/gstlame.c:
-         lame: Remove unneeded variable, it's assigned a value never read.
-
-2009-04-19 13:59:24 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: Remove dead assignment, value is being overwritten before being read.
-
-2009-04-19 13:58:31 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/realmedia/rmdemux.c:
-         rmdemux: Remove unused accurate flag.
-         I couldn't see any reason why this was there in the first place.
-
-2009-04-19 13:57:59 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/realmedia/asmrules.c:
-       * gst/realmedia/rdtdepay.c:
-         realmedia: Remove dead assignments. The results are never read.
-
-2009-04-19 13:57:10 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/realmedia/gstrdtbuffer.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rdtmanager.c:
-       * gst/realmedia/rmdemux.c:
-         realmedia: Remove useless variables, only being used once (or not).
-
-2009-04-19 13:55:24 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * gst/asfdemux/gstrtspwms.c:
-       * gst/realmedia/pnmsrc.c:
-       * gst/realmedia/rdtdepay.c:
-       * gst/realmedia/rtspreal.c:
-         remove empty method implementations.
-
-2009-04-18 08:12:08 +0200  Josep Torra <n770galaxy@gmail.com>
-
-       * gst/asfdemux/gstrtspwms.c:
-         rtspwms: fix condition to detect extension commands for WMS
-         Reply with OK to the extension commands for WMS.
-
-2009-04-15 11:09:56 +0200  Josep Torra <n770galaxy@gmail.com>
-
-       * gst/realmedia/rtspreal.c:
-         realmedia: add special Real header to DESCRIBE message only for Real servers
-         Add headers that are specific to real only if a real server had been
-         detected by the OPTIONS message.
-
-2009-04-14 19:16:46 +0200  David Hoyt <dhoyt at llnl.gov>
-
-       * gst/synaesthesia/synaescope.c:
-         synaesthesia: fix compilation on windows
-         Fix compilation under MSVC due to references to headers
-         that are not available with the MS SDKs.
-         Fixes #578524
-
-2009-04-14 10:54:37 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstrtspwms.c:
-         rtspwms: reply to extension commands
-         Reply with OK to the extension commands for WMS.
-
-2009-04-14 10:53:51 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstrtpasfdepay.c:
-         asfdepay: fix a comment
-
-2009-04-14 10:53:33 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/gstasfdemux.c:
-         asfdemux: add some more debugging
-
-2009-04-14 10:51:45 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * configure.ac:
-         configure.ac: require git -base
-         We require 0.10.22.1 of -base for the new Match-If and ETag headers in RTSP.
-
-2009-04-09 20:21:46 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
-
-       * gst/realmedia/rtspreal.c:
-         realmedia: add special Real header to SETUP message only for Real servers
-         Fixes playback of Windows Media RTSP streams and other non-Real RTSP
-         streams where the server errors out because it can't handle the
-         Real-specific 'Required: com.real.retain-entity-for-setup' header
-         we've been adding unconditionally in the recent past.
-         For reference:
-         rtsp://66.111.34.191:601/broadcast/alnour.rm
-         rtsp://195.134.224.231/snowboard_100.wmv
-
-2009-04-08 11:44:53 -0700  Michael Smith <msmith@songbirdnest.com>
-
-       * configure.ac:
-       * gst/asfdemux/Makefile.am:
-         asfdemux: link to all required libraries including indirectly used ones.
-         On win32, we're required to link to all the libraries used - including
-         ones only indirectly used by other libs. So, add gstaudio, gsttag, and
-         (for windows only) winsock.
-
-2009-04-04 21:19:23 +0300  Felipe Contreras <felipe.contreras@gmail.com>
-
-       * common:
-         Automatic update of common submodule
-         From d0ea89e to b3941ea
-
-2009-04-04 14:54:41 +0200  Edward Hervey <bilboed@bilboed.com>
-
-       * common:
-         Automatic update of common submodule
-         From f8b3d91 to d0ea89e
-
-2009-03-26 20:23:14 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-         dvdlpcmdec: Fix factory klass, It's a 'Decoder', not a 'Demuxer'.
-
-2009-03-25 16:39:06 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/realmedia/rtspreal.c:
-       * gst/realmedia/rtspreal.h:
-         realrtsp: add more headers
-         Parse the ETag from the describe method and pass the sessionid as the value for
-         the If-Match header is subsequent setup calls.
-         Fixes support for more RealMedia RTSP streams.
-
-2009-03-22 13:08:48 -0700  David Schleef <ds@schleef.org>
-
-       * configure.ac:
-         twolame: bump requirement to 0.3.10
-         0.3.10 is the first version with the float32 encoder functions.
-         Fixes #576305.
-
-2009-03-22 20:15:24 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * configure.ac:
-         back to development -> 0.10.11.1
-
-=== release 0.10.11 ===
-
-2009-03-21 01:05:22 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * gst-plugins-ugly.doap:
-       * po/cs.po:
-       * win32/common/config.h:
-         Release 0.10.11
-
-2009-03-21 00:28:29 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/en_GB.po:
-       * po/es.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/ja.po:
-       * po/lt.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/tr.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-
-2009-03-13 16:45:08 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * configure.ac:
-       * win32/common/config.h:
-         0.10.10.3 pre-release
-
-2009-03-13 16:40:38 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * po/fi.po:
-       * po/id.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/sv.po:
-         po: Update translations from upstream
-
-2009-03-13 16:38:08 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * po/LINGUAS:
-       * po/tr.po:
-         po: Add Turkish translation
-
-2009-03-13 19:23:12 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-       * gst/mpegaudioparse/gstmpegaudioparse.h:
-         mp3parse: Fix glitches in the output when playing (for e.g.) AVI
-         Don't introduce glitches in the output by a) relaxing the threshold for
-         taking upstream timestamps in preference to our calculated timestamps and
-         b) only set the discont flag on outgoing buffers in response to an incoming
-         discont buffer.
-         Fixes: #575046
-
-2009-03-12 15:57:31 +0100  Alessandro Decina <alessandro.decina@collabora.co.uk>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         mp3parse: fix deadlock with accurate seeks.
-         Release pending_accurate_seeks_lock before forwarding the seek event upstream.
-         Fixes #575068.
-
-2009-03-10 00:22:35 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * configure.ac:
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/ca.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/en_GB.po:
-       * po/es.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/lt.po:
-       * po/mt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-       * win32/common/config.h:
-         0.10.10.2 pre-release
-         Bump version number, update translations and win32 config.h
-
-2009-03-10 00:19:01 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * po/LINGUAS:
-       * po/ja.po:
-         po: Add Japanese translation
-
-2009-03-10 00:10:20 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * configure.ac:
-       * docs/plugins/Makefile.am:
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * docs/plugins/inspect/plugin-synaesthesia.xml:
-       * docs/plugins/inspect/plugin-twolame.xml:
-       * ext/Makefile.am:
-       * po/POTFILES.in:
-         Moved twolame from Bad to Ugly
-
-2008-11-04 12:42:30 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         [MOVED FROM BAD] Don't install static libs for plugins. Fixes #550851 for -bad.
-         Original commit message from CVS:
-         * ext/alsaspdif/Makefile.am:
-         * ext/amrwb/Makefile.am:
-         * ext/apexsink/Makefile.am:
-         * ext/arts/Makefile.am:
-         * ext/artsd/Makefile.am:
-         * ext/audiofile/Makefile.am:
-         * ext/audioresample/Makefile.am:
-         * ext/bz2/Makefile.am:
-         * ext/cdaudio/Makefile.am:
-         * ext/celt/Makefile.am:
-         * ext/dc1394/Makefile.am:
-         * ext/dirac/Makefile.am:
-         * ext/directfb/Makefile.am:
-         * ext/divx/Makefile.am:
-         * ext/dts/Makefile.am:
-         * ext/faac/Makefile.am:
-         * ext/faad/Makefile.am:
-         * ext/gsm/Makefile.am:
-         * ext/hermes/Makefile.am:
-         * ext/ivorbis/Makefile.am:
-         * ext/jack/Makefile.am:
-         * ext/jp2k/Makefile.am:
-         * ext/ladspa/Makefile.am:
-         * ext/lcs/Makefile.am:
-         * ext/libfame/Makefile.am:
-         * ext/libmms/Makefile.am:
-         * ext/metadata/Makefile.am:
-         * ext/mpeg2enc/Makefile.am:
-         * ext/mplex/Makefile.am:
-         * ext/musepack/Makefile.am:
-         * ext/musicbrainz/Makefile.am:
-         * ext/mythtv/Makefile.am:
-         * ext/nas/Makefile.am:
-         * ext/neon/Makefile.am:
-         * ext/ofa/Makefile.am:
-         * ext/polyp/Makefile.am:
-         * ext/resindvd/Makefile.am:
-         * ext/sdl/Makefile.am:
-         * ext/shout/Makefile.am:
-         * ext/snapshot/Makefile.am:
-         * ext/sndfile/Makefile.am:
-         * ext/soundtouch/Makefile.am:
-         * ext/spc/Makefile.am:
-         * ext/swfdec/Makefile.am:
-         * ext/tarkin/Makefile.am:
-         * ext/theora/Makefile.am:
-         * ext/timidity/Makefile.am:
-         * ext/twolame/Makefile.am:
-         * ext/x264/Makefile.am:
-         * ext/xine/Makefile.am:
-         * ext/xvid/Makefile.am:
-         * gst-libs/gst/app/Makefile.am:
-         * gst-libs/gst/dshow/Makefile.am:
-         * gst/aiffparse/Makefile.am:
-         * gst/app/Makefile.am:
-         * gst/audiobuffer/Makefile.am:
-         * gst/bayer/Makefile.am:
-         * gst/cdxaparse/Makefile.am:
-         * gst/chart/Makefile.am:
-         * gst/colorspace/Makefile.am:
-         * gst/dccp/Makefile.am:
-         * gst/deinterlace/Makefile.am:
-         * gst/deinterlace2/Makefile.am:
-         * gst/dvdspu/Makefile.am:
-         * gst/festival/Makefile.am:
-         * gst/filter/Makefile.am:
-         * gst/flacparse/Makefile.am:
-         * gst/flv/Makefile.am:
-         * gst/games/Makefile.am:
-         * gst/h264parse/Makefile.am:
-         * gst/librfb/Makefile.am:
-         * gst/mixmatrix/Makefile.am:
-         * gst/modplug/Makefile.am:
-         * gst/mpeg1sys/Makefile.am:
-         * gst/mpeg4videoparse/Makefile.am:
-         * gst/mpegdemux/Makefile.am:
-         * gst/mpegtsmux/Makefile.am:
-         * gst/mpegvideoparse/Makefile.am:
-         * gst/mve/Makefile.am:
-         * gst/nsf/Makefile.am:
-         * gst/nuvdemux/Makefile.am:
-         * gst/overlay/Makefile.am:
-         * gst/passthrough/Makefile.am:
-         * gst/pcapparse/Makefile.am:
-         * gst/playondemand/Makefile.am:
-         * gst/rawparse/Makefile.am:
-         * gst/real/Makefile.am:
-         * gst/rtjpeg/Makefile.am:
-         * gst/rtpmanager/Makefile.am:
-         * gst/scaletempo/Makefile.am:
-         * gst/sdp/Makefile.am:
-         * gst/selector/Makefile.am:
-         * gst/smooth/Makefile.am:
-         * gst/smoothwave/Makefile.am:
-         * gst/speed/Makefile.am:
-         * gst/speexresample/Makefile.am:
-         * gst/stereo/Makefile.am:
-         * gst/subenc/Makefile.am:
-         * gst/tta/Makefile.am:
-         * gst/vbidec/Makefile.am:
-         * gst/videodrop/Makefile.am:
-         * gst/videosignal/Makefile.am:
-         * gst/virtualdub/Makefile.am:
-         * gst/vmnc/Makefile.am:
-         * gst/y4m/Makefile.am:
-         * sys/acmenc/Makefile.am:
-         * sys/cdrom/Makefile.am:
-         * sys/dshowdecwrapper/Makefile.am:
-         * sys/dshowsrcwrapper/Makefile.am:
-         * sys/dvb/Makefile.am:
-         * sys/dxr3/Makefile.am:
-         * sys/fbdev/Makefile.am:
-         * sys/oss4/Makefile.am:
-         * sys/qcam/Makefile.am:
-         * sys/qtwrapper/Makefile.am:
-         * sys/vcd/Makefile.am:
-         * sys/wininet/Makefile.am:
-         * win32/common/config.h:
-         Don't install static libs for plugins. Fixes #550851 for -bad.
-
-2008-09-02 09:56:44 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         [MOVED FROM BAD] Enable/fix up translations for these plugins.
-         Original commit message from CVS:
-         * ext/resindvd/plugin.c: (plugin_init):
-         * ext/resindvd/resindvdsrc.c:
-         * ext/twolame/gsttwolame.c: (plugin_init):
-         * gst/aiffparse/aiffparse.c: (plugin_init):
-         Enable/fix up translations for these plugins.
-         * po/LINGUAS:
-         Add 'ca' to LINGUAS.
-         * po/POTFILES.in:
-         * po/POTFILES.skip:
-         Add more files for translation and more files which tools
-         should skip.
-
-2008-08-07 14:34:03 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         [MOVED FROM BAD] ext/twolame/gsttwolame.*: Allow raw float samples as input for encoding.
-         Original commit message from CVS:
-         * ext/twolame/gsttwolame.c: (gst_two_lame_sink_setcaps),
-         (gst_two_lame_chain):
-         * ext/twolame/gsttwolame.h:
-         Allow raw float samples as input for encoding.
-
-2008-08-02 17:39:13 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         [MOVED FROM BAD] Add TwoLAME MP2 encoding element, based on the LAME element.
-         Original commit message from CVS:
-         * configure.ac:
-         * ext/Makefile.am:
-         * ext/twolame/Makefile.am:
-         * ext/twolame/gsttwolame.c: (gst_two_lame_mode_get_type),
-         (gst_two_lame_padding_get_type), (gst_two_lame_emphasis_get_type),
-         (gst_two_lame_release_memory), (gst_two_lame_finalize),
-         (gst_two_lame_base_init), (gst_two_lame_class_init),
-         (gst_two_lame_src_setcaps), (gst_two_lame_sink_setcaps),
-         (gst_two_lame_init), (gst_two_lame_set_property),
-         (gst_two_lame_get_property), (gst_two_lame_sink_event),
-         (gst_two_lame_chain), (gst_two_lame_setup),
-         (gst_two_lame_change_state), (gst_two_lame_get_default_settings),
-         (plugin_init):
-         * ext/twolame/gsttwolame.h:
-         Add TwoLAME MP2 encoding element, based on the LAME element.
-
-2009-03-09 23:13:20 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * common:
-         Automatic update of common submodule
-         From 7032163 to f8b3d91
-
-2009-03-08 12:05:57 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From ffa738d to 7032163
-
-2009-03-08 11:21:32 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 3f13e4e to ffa738d
-
-2009-03-07 11:47:06 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 3c7456b to 3f13e4e
-
-2009-03-07 10:47:13 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * common:
-         Automatic update of common submodule
-         From 57c83f2 to 3c7456b
-
-2009-03-06 12:30:36 -0800  Michael Smith <msmith@songbirdnest.com>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         mp3parse: be more conservative when changing layer/rate/etc.
-         Don't allow a change in sample rate/channels/layer/version unless we can
-         see another frame at the correct offset. Prevents accidently flipping
-         due to simple single-bit corruption.
-
-2009-03-04 16:52:59 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * gst/realmedia/realhash.c:
-         rmdemux: Fix strict-aliasing warnings.
-         Use existing GST_READ_UINT32 and GST_WRITE_UINT32 macros instead of
-         hand-rolled ones.
-
-2009-03-04 16:15:00 +0200  René Stadler <mail@renestadler.de>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         mpegaudioparse: Remove empty lines added by buggy indent.
-
-2009-02-27 13:41:58 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         mpegaudioparse: Provide SEEKING query handling.
-         Since SEEK event handling might perform some conversion
-         from TIME to BYTES, do not let upstream fool application
-         into (TIME) seeking not being possible.
-
-2009-02-25 13:34:05 -0800  Michael Smith <msmith@songbirdnest.com>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-         mp3parse: fix accurate seeks to near 0
-         Integer underflow made accurate seeks to near zero fail and seek to
-         completely the wrong place. Fix by clamping to zero, since we can't seek
-         to negative times anyway.
-
-2009-02-25 20:52:08 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * common:
-       * configure.ac:
-         build: Update shave init statement for changes in common. Bump common.
-
-2009-02-25 18:19:20 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/realmedia/rtspreal.c:
-         rtspreal: ignore data streams. Fixes #527112
-         Ignore data streams when parsing the SDP as they don't contain anything we need
-         to put in the realmedia header.
-
-2009-02-25 11:32:37 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * common:
-         Automatic update of common submodule
-         From 9cf8c9b to a6ce5c6
-
-2009-02-24 15:25:16 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * ext/mad/gstid3tag.c:
-         Forward unknown events
-         Forward unknown events upstream instead of dropping them. Also return the result
-         of the seek event instead of a fixed value.
-
-2009-02-23 10:50:50 +0200  Stefan Kost <ensonic@users.sf.net>
-
-       * gst/asfdemux/gstrtpasfdepay.c:
-         rtpasfdepay: Fix the build by adding the needed include for atoi.
-
-2009-02-22 19:19:12 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * configure.ac:
-       * docs/plugins/Makefile.am:
-         Use shave for the build output
-
-2009-02-22 16:00:02 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * common:
-         Automatic update of common submodule
-         From 5d7c9cc to 9cf8c9b
-
-2009-02-22 14:22:30 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/asfdemux/gstasf.c:
-       * gst/asfdemux/gstrtpasfdepay.c:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rdtdepay.c:
-       * gst/synaesthesia/gstsynaesthesia.c:
-       * gst/synaesthesia/synaescope.c:
-         Fix indentation.
-
-2009-02-22 14:21:22 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * gst/realmedia/pnmsrc.c:
-         pnmsrc: Error out gracefully if location is NULL. Run gst-indent
-
-2009-02-21 11:13:55 -0800  David Schleef <ds@schleef.org>
-
-       * common:
-         Automatic update of common submodule
-         From 80c627d to 5d7c9cc
-
-2009-02-20 15:53:34 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/realmedia/Makefile.am:
-       * gst/realmedia/pnmsrc.c:
-       * gst/realmedia/pnmsrc.h:
-       * gst/realmedia/rademux.c:
-       * gst/realmedia/rademux.h:
-       * gst/realmedia/realmedia.c:
-       * gst/realmedia/rmdemux.c:
-       * gst/realmedia/rmdemux.h:
-         Add pnm:// uri source
-         Add a new utri handler for pnm:// that for now just redirects to the same uri
-         with the rtsp:// protocol, which usually works nowadays.
-         Separate the registration of the various plugins into a separate source file.
-
-2009-02-20 13:48:08 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/asfdemux/Makefile.am:
-       * gst/asfdemux/gstasf.c:
-       * gst/asfdemux/gstrtpasfdepay.c:
-       * gst/asfdemux/gstrtpasfdepay.h:
-         Add ASF depayloader
-         Add ASF depayloader based on latest public MicroSoft docs (MS-RTSP).
-         Fixes #335067.
-
-2009-02-19 19:10:53 +0000  Zaheer Merali <zaheerabbas@merali.org>
-
-       * ext/mad/gstmad.c:
-         mad: remove log line added in error
-
-2009-02-19 19:08:10 +0000  Zaheer Merali <zaheerabbas@merali.org>
-
-       * ext/mad/gstmad.c:
-         mad: just flush data when seeing BADDATAPTR instead of going into error state
-
-2009-02-18 12:55:16 +0100  Roland Moser <rmoser@gmx.at>
-
-       * gst/realmedia/rmdemux.c:
-         Fix parsing of the flags in rmdemux
-         Fix parsing of the flags in version 1 realmedia streams.
-         Fixes #571358.
-
-2009-02-09 12:03:15 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * common:
-         Bump revision to use for common submodule.
-
-2009-01-30 22:27:05 +0200  Stefan Kost <ensonic@users.sf.net>
-
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-         Add releaseinfo with online url.
-
-2009-01-30 17:34:27 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * common:
-         Bump common
-
-2009-01-30 14:35:40 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
-
-       * gst/asfdemux/asfpacket.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         Remove redundant push_mode struct member
-
-2009-01-30 09:04:46 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * autogen.sh:
-         Fix previous commit, wasn't actually setting up a symbolic link
-
-2009-01-30 08:56:33 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * autogen.sh:
-       * common:
-         Use a symbolic link for the pre-commit client-side hook
-
-2009-01-30 08:56:24 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * .gitignore:
-         Ignore some more files
-
-2009-01-26 22:40:10 +0200  Stefan Kost <ensonic@users.sf.net>
-
-       * gst/synaesthesia/synaescope.c:
-       * gst/synaesthesia/synaescope.h:
-         Precalculate some size dependent variables. Demystify the height scaling a bit.
-         Adds more comments to the code about the height scaling. RIght now only certain heights are screen filling.
-
-2009-01-26 21:26:46 +0200  Stefan Kost <ensonic@users.sf.net>
-
-         Merge branch 'master' of ssh://git.freedesktop.org/git/gstreamer/gst-plugins-ugly
-
-2009-01-26 20:12:41 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/realmedia/rdtdepay.c:
-         Set flags on the realmedia chunks
-         Set the keyframe flags from the RDT packet to the realmedia chunk so that the
-         descrambler can be reset on keyframes. Fixes #556714.
-
-2009-01-26 20:10:36 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
-
-       * gst/realmedia/gstrdtbuffer.c:
-       * gst/realmedia/gstrdtbuffer.h:
-         Add method to get RDT flags
-         Add a method to get the RDT flags. We need these flags to mark keyframes to
-         reset the descrambing queue. See #556714.
-
-2009-01-26 10:00:57 +0100  Hans de Goede <jwrdegoede@fedoraproject.org>
-
-       * gst/asfdemux/asfpacket.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-         Add seeking support to asfdemux in push mode
-         Fixes bug #568836.
-
-2009-01-26 09:57:26 +0100  Hans de Goede <jwrdegoede@fedoraproject.org>
-
-       * gst/asfdemux/asfpacket.c:
-         Drop packets with an invalid replicated data length
-         Drop packets with an invalid replicated data length
-         instead of continuing with an invalid timestamp
-         and uninitialized payload metadata.
-         All other code assumes that the timestamps are valid.
-
-2009-01-25 22:31:52 +0200  Stefan Kost <ensonic@users.sf.net>
-
-       * gst/synaesthesia/synaescope.h:
-         Change comment to refer to right variable.
-
-2009-01-24 23:27:08 +0200  Stefan Kost <ensonic@users.sf.net>
-
-       * gst/synaesthesia/gstsynaesthesia.c:
-       * gst/synaesthesia/gstsynaesthesia.h:
-       * gst/synaesthesia/synaescope.c:
-       * gst/synaesthesia/synaescope.h:
-         Bring synaesthesia to next century.
-         Do proper size negotiation. Change engine API to allow resizes. Small cleanups elsewhere.
-
-2009-01-23 17:51:00 -0800  David Schleef <ds@schleef.org>
-
-       * gst/asfdemux/gstasfdemux.c:
-         Fix leak of converted string
-
-2009-01-23 23:44:01 +0000  Jan Schmidt <thaytan@noraisin.net>
-
-       * .gitignore:
-       * po/.gitignore:
-         Add more to the gitignores
-
-2009-01-23 23:59:38 +0200  Stefan Kost <ensonic@users.sf.net>
-
-       * gst/synaesthesia/gstsynaesthesia.c:
-         Make synaesthesia build again.
-         _init() has no params.
-
-2009-01-22 18:15:36 +0200  Stefan Kost <ensonic@users.sf.net>
-
-       * common:
-         Update common snapshot.
-
-2009-01-22 13:50:09 +0100  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * common:
-         Fix pre-commit hook
-
-2009-01-22 06:14:31 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * autogen.sh:
-       * common:
-         Install and use pre-commit indentation hook from common
-
-2009-01-21 04:32:33 +0100  Edward Hervey <bilboed@bilboed.com>
-
-       * autogen.sh:
-         autogen.sh : Use git submodule
-
-2009-01-08 08:19:25 +0000  Yves Lefebvre <ivanohe@abacom.com>
-
-         gst/mpegstream/: Fix some caps leaks. Fixes bug #564885.
-         Original commit message from CVS:
-         Patch by: Yves Lefebvre <ivanohe at abacom dot com>
-         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_get_video_stream),
-         (gst_dvd_demux_get_audio_stream),
-         (gst_dvd_demux_get_subpicture_stream), (gst_dvd_demux_reset):
-         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_init_stream),
-         (gst_mpeg_demux_get_video_stream),
-         (gst_mpeg_demux_get_audio_stream), (gst_mpeg_demux_reset):
-         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_chain):
-         Fix some caps leaks. Fixes bug #564885.
-
-2009-01-02 00:43:53 +0000  Alessandro Decina <alessandro.d@gmail.com>
-
-         ext/cdio/gstcdio.c: Remove unused format argument.
-         Original commit message from CVS:
-         * ext/cdio/gstcdio.c:
-         Remove unused format argument.
-
-2008-12-13 20:41:40 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         win32/common/: Hardcode cpu for win32 build, just like we do in the other modules, to remove VCS conflicts and incons...
-         Original commit message from CVS:
-         * win32/common/.cvsignore:
-         * win32/common/config.h:
-         * win32/common/config.h.in:
-         Hardcode cpu for win32 build, just like we do in the other modules,
-         to remove VCS conflicts and inconsistent defines between modules,
-         and update version defines to CVS.
-
-2008-12-13 16:29:38 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         m4/Makefile.am: Removed two more .m4 that aren't shipped with gettext 0.17 anymore.
-         Original commit message from CVS:
-         * m4/Makefile.am:
-         Removed two more .m4 that aren't shipped with gettext 0.17 anymore.
-
-2008-12-13 13:01:49 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         m4/Makefile.am: inttypes.m4 hasn't been available since gettext-0.15, and since we now require gettext >= 0.17 ... we...
-         Original commit message from CVS:
-         * m4/Makefile.am:
-         inttypes.m4 hasn't been available since gettext-0.15, and since we now
-         require gettext >= 0.17 ... we can remove it from the list of files to
-         dist.
-
-2008-12-10 15:42:21 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/mpegaudioparse/gstmpegaudioparse.*: Do an initial class_ref on an internal enum type from within the class_init f...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c: (channel_mode_class),
-         (GST_TYPE_MP3_CHANNEL_MODE), (mp3_type_frame_length_from_header),
-         (gst_mp3parse_emit_frame), (mp3parse_get_query_types):
-         * gst/mpegaudioparse/gstmpegaudioparse.h:
-         Do an initial class_ref on an internal enum type from within the
-         class_init function so that there aren't any issues when multiple
-         mp3parse elements are started in separate threads at the same
-         time. (Why we use an enum type here if the tag is registered as
-         a string type, I don't know). Also remove custom UNUSED macro
-         and use GLib's instead.
-
-2008-12-04 20:11:33 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         configure.ac: Apparently AC_CONFIG_MACRO_DIR breaks when using more than one macro directory, reverting last change.
-         Original commit message from CVS:
-         * configure.ac:
-         Apparently AC_CONFIG_MACRO_DIR breaks when using more
-         than one macro directory, reverting last change.
-
-2008-12-04 19:48:20 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         configure.ac: Set AC_CONFIG_MACRO_DIR to common/m4 to point autoconf to our M4 macros.
-         Original commit message from CVS:
-         * configure.ac:
-         Set AC_CONFIG_MACRO_DIR to common/m4 to point autoconf to
-         our M4 macros.
-
-2008-12-01 14:39:34 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         ext/mpeg2dec/gstmpeg2dec.c: Last change introduced a regression that made mpeg2dec handle some 4:2:2 videos as 4:4:4....
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_negotiate_format):
-         Last change introduced a regression that made mpeg2dec handle
-         some 4:2:2 videos as 4:4:4. Fixes bug #562086.
-
-2008-11-29 13:33:37 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         Require gettext 0.17 because older versions don't mix with libtool 2.2. At build time an older gettext version will s...
-         Original commit message from CVS:
-         Patch by: Cygwin Ports maintainer
-         <yselkowitz at users dot sourceforge dot net>
-         * autogen.sh:
-         * configure.ac:
-         Require gettext 0.17 because older versions don't mix with libtool
-         2.2. At build time an older gettext version will still work.
-         Fixes bug #556091.
-
-2008-11-25 03:44:06 +0000  David Schleef <ds@schleef.org>
-
-         ext/mpeg2dec/gstmpeg2dec.*: Add support for 4:4:4 video.  Fixes #562086
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c:
-         * ext/mpeg2dec/gstmpeg2dec.h:
-         Add support for 4:4:4 video.  Fixes #562086
-
-2008-11-24 09:51:39 +0000  Simon Holm Thøgersen <odie@cs.aau.dk>
-
-         ext/mpeg2dec/gstmpeg2dec.c: Add support for the STATE_SEQUENCE_MODIFIED state in mpeg2dec >= 0.5.0. Fixes bug #562065.
-         Original commit message from CVS:
-         Patch by: Simon Holm Thøgersen <odie at cs dot aau dot dk>
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_chain):
-         Add support for the STATE_SEQUENCE_MODIFIED state in mpeg2dec
-         >= 0.5.0. Fixes bug #562065.
-
-2008-11-20 21:31:19 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/asfdemux/gstasfdemux.c: Remove duplicate and broken code for the streaming case and simply reuse the much better ...
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_chain):
-         Remove duplicate and broken code for the streaming case and simply reuse
-         the much better working pull based code. Fixes #560348.
-
-2008-11-20 20:42:33 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         configure.ac: Back to development -> 0.10.10.1
-         Original commit message from CVS:
-         * configure.ac:
-         Back to development -> 0.10.10.1
-
-=== release 0.10.10 ===
-
-2008-11-19 14:30:44 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * gst-plugins-ugly.doap:
-       * po/LINGUAS:
-         Release 0.10.10 - "Under the House"
-         Original commit message from CVS:
-         Release 0.10.10 - "Under the House"
-
-2008-11-19 13:59:12 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-       * po/bg.po:
-       * po/ca.po:
-       * po/da.po:
-       * po/id.po:
-       * po/it.po:
-       * po/mt.po:
-       * po/vi.po:
-         Update .po files
-         Original commit message from CVS:
-         Update .po files
-
-2008-11-17 09:53:39 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         ext/sidplay/Makefile.am: Use GST_CXXFLAGS for C++ code instead of GST_CFLAGS. The latter could contain CFLAGS that do...
-         Original commit message from CVS:
-         * ext/sidplay/Makefile.am:
-         Use GST_CXXFLAGS for C++ code instead of GST_CFLAGS. The latter could
-         contain CFLAGS that do not exist for C++, like -Wvla or
-         -Wdeclaration-after-statement. Fixes bug #561161.
-
-2008-11-12 23:19:55 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         configure.ac: 0.10.9.3 pre-release
-         Original commit message from CVS:
-         * configure.ac:
-         0.10.9.3 pre-release
-
-2008-11-11 17:14:46 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/asfdemux/gstasfdemux.c: Only copy sane aspect ratio values on the caps. Fixes #559682.
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_video_stream):
-         Only copy sane aspect ratio values on the caps. Fixes #559682.
-
-2008-11-06 13:29:37 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-       * ChangeLog:
-         Add bug number to the mp3parse mpeg 2.5 fix
-         Original commit message from CVS:
-         Add bug number to the mp3parse mpeg 2.5 fix
-
-2008-11-05 11:03:07 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/amrnb/amrnbdec.*: Add a property to select the amr variant. Fixes #424070.
-         Original commit message from CVS:
-         * ext/amrnb/amrnbdec.c: (gst_amrnb_variant_get_type),
-         (gst_amrnbdec_class_init), (gst_amrnbdec_set_property),
-         (gst_amrnbdec_get_property), (gst_amrnbdec_chain):
-         * ext/amrnb/amrnbdec.h:
-         Add a property to select the amr variant. Fixes #424070.
-
-2008-11-03 11:31:49 +0000  Tal Shalif <tshalif@nargila.org>
-
-         gst/mpegstream/: Fix memmory corruption due to not storing the new updated pointer after a g_renew(). Fixes #558896.
-         Original commit message from CVS:
-         Patch by: Tal Shalif <tshalif at nargila dot org>
-         * gst/mpegstream/gstdvddemux.c:
-         (gst_dvd_demux_get_subpicture_stream):
-         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_get_video_stream),
-         (gst_mpeg_demux_get_audio_stream):
-         Fix memmory corruption due to not storing the new updated pointer
-         after a g_renew(). Fixes #558896.
-
-2008-10-30 14:50:41 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         tests/check/Makefile.am: Blacklist cdiocddasrc from state-change tests. Fixes #558277.
-         Original commit message from CVS:
-         * tests/check/Makefile.am:
-         Blacklist cdiocddasrc from state-change tests. Fixes #558277.
-
-2008-10-24 20:44:13 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         configure.ac: oops, forgot to bump the version back to devel after the last release 0.10.9.1
-         Original commit message from CVS:
-         * configure.ac:
-         oops, forgot to bump the version back to devel
-         after the last release 0.10.9.1
-
-2008-10-24 12:47:05 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/rmdemux.c: Add suport for mpeg4 and aac audio. See #556714.
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
-         (gst_rmdemux_descramble_mp4a_audio),
-         (gst_rmdemux_handle_scrambled_packet):
-         Add suport for mpeg4 and aac audio. See #556714.
-
-2008-10-14 19:28:05 +0000  Michael Smith <msmith@xiph.org>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Calculate samples per frame correctly for "MPEG 2.5" layer 3.
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         Calculate samples per frame correctly for "MPEG 2.5" layer 3.
-         Fixes skipping on these files.
-
-2008-10-14 12:51:41 +0000  Robin Stocker <robin@nibor.org>
-
-         ext/mpeg2dec/gstmpeg2dec.*: Prefer the container's PAR over the stream's PAR if it's given in the srcpad caps. Fixes ...
-         Original commit message from CVS:
-         Patch by: Robin Stocker <robin at nibor dot org>
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
-         (handle_sequence), (gst_mpeg2dec_setcaps):
-         * ext/mpeg2dec/gstmpeg2dec.h:
-         Prefer the container's PAR over the stream's PAR if it's
-         given in the srcpad caps. Fixes bug #556184.
-
-2008-10-13 18:10:25 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         Don't install static libs for plugins. Fixes #550851 for ugly.
-         Original commit message from CVS:
-         * ext/a52dec/Makefile.am:
-         * ext/amrnb/Makefile.am:
-         * ext/cdio/Makefile.am:
-         * ext/dvdnav/Makefile.am:
-         * ext/dvdread/Makefile.am:
-         * ext/lame/Makefile.am:
-         * ext/mad/Makefile.am:
-         * ext/mpeg2dec/Makefile.am:
-         * ext/sidplay/Makefile.am:
-         * gst/ac3parse/Makefile.am:
-         * gst/asfdemux/Makefile.am:
-         * gst/dvdlpcmdec/Makefile.am:
-         * gst/dvdsub/Makefile.am:
-         * gst/iec958/Makefile.am:
-         * gst/mpegaudioparse/Makefile.am:
-         * gst/mpegstream/Makefile.am:
-         * gst/realmedia/Makefile.am:
-         * gst/synaesthesia/Makefile.am:
-         Don't install static libs for plugins. Fixes #550851 for ugly.
-
-2008-10-13 09:04:15 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Post a GST_ELEMENT_ERROR if we get EOS before seeing any valid frames. Partia...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_sink_event):
-         Post a GST_ELEMENT_ERROR if we get EOS before seeing any valid
-         frames. Partially fixes bug #552237.
-
-2008-10-09 09:23:00 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         ext/amrnb/amrnbparse.c: use #defines for HEADER. Unref the object in _sink_activate_pull().
-         Original commit message from CVS:
-         * ext/amrnb/amrnbparse.c:
-         use #defines for HEADER. Unref the object in _sink_activate_pull().
-
-2008-10-08 13:59:57 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/mad/gstmad.*: track discont on incomming buffers and set discont on outgoing buffers.
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (gst_mad_src_event), (gst_mad_chain),
-         (gst_mad_change_state):
-         * ext/mad/gstmad.h:
-         track discont on incomming buffers and set discont on outgoing
-         buffers.
-         Pass unknown events upstreams instead of dropping them.
-
-2008-09-28 17:33:43 +0000  Sameer Naik <sameer.subscriptions@damagehead.com>
-
-         ext/mpeg2dec/gstmpeg2dec.*: Fix compilation with --disable-index. Fixes bug #554150.
-         Original commit message from CVS:
-         Patch by: Sameer Naik <sameer dot subscriptions at damagehead dot com>
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_class_init),
-         (handle_slice), (gst_mpeg2dec_sink_event),
-         (gst_mpeg2dec_src_event):
-         * ext/mpeg2dec/gstmpeg2dec.h:
-         Fix compilation with --disable-index. Fixes bug #554150.
-
-2008-09-28 17:31:37 +0000  Sameer Naik <sameer.subscriptions@damagehead.com>
-
-         ext/mad/gstmad.*: Fix compilation with --disable-index. Fixes bug #554142.
-         Original commit message from CVS:
-         Patch by: Sameer Naik <sameer dot subscriptions at damagehead dot com>
-         * ext/mad/gstmad.c: (gst_mad_class_init), (gst_mad_dispose),
-         (gst_mad_src_event), (gst_mad_chain):
-         * ext/mad/gstmad.h:
-         Fix compilation with --disable-index. Fixes bug #554142.
-
-2008-09-27 00:20:48 +0000  Thijs Vermeir <thijsvermeir@gmail.com>
-
-         ext/a52dec/gsta52dec.*: Fix channel re-negotiation on a change of the incoming stream.
-         Original commit message from CVS:
-         * ext/a52dec/gsta52dec.c:
-         * ext/a52dec/gsta52dec.h:
-         Fix channel re-negotiation on a change of the incoming stream.
-         Patch By: Thijs Vermeir <thijsvermeir@gmail.com>
-         Fixes: #551660
-
-2008-09-26 14:39:42 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/amrnb/amrnbenc.*: Pass the discont flag from the input buffer on to the output buffer in the AMR encoder.
-         Original commit message from CVS:
-         * ext/amrnb/amrnbenc.c: (gst_amrnbenc_chain),
-         (gst_amrnbenc_state_change):
-         * ext/amrnb/amrnbenc.h:
-         Pass the discont flag from the input buffer on to the output buffer in
-         the AMR encoder.
-
-2008-09-26 10:04:35 +0000  Benoit Fouet <benoit.fouet@purplelabs.com>
-
-         ext/amrnb/amrnbparse.*: Add flush seek handler. Fixes #536274.
-         Original commit message from CVS:
-         Patch by: Benoit Fouet <benoit dot fouet at purplelabs dot com>
-         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
-         (gst_amrnbparse_handle_pull_seek),
-         (gst_amrnbparse_handle_push_seek), (gst_amrnbparse_src_event),
-         (gst_amrnbparse_sink_activate_push),
-         (gst_amrnbparse_sink_activate_pull):
-         * ext/amrnb/amrnbparse.h:
-         Add flush seek handler. Fixes #536274.
-
-2008-09-26 09:57:02 +0000  Benoit Fouet <benoit.fouet@purplelabs.com>
-
-         ext/amrnb/amrnbparse.*: Fix the duration query. Fixes #536226.
-         Original commit message from CVS:
-         Patch by: Benoit Fouet <benoit dot fouet at purplelabs dot com>
-         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_query),
-         (gst_amrnbparse_chain), (gst_amrnbparse_loop),
-         (gst_amrnbparse_state_change):
-         * ext/amrnb/amrnbparse.h:
-         Fix the duration query. Fixes #536226.
-         Also set caps on the pads and buffers more correctly.
-
-2008-09-02 09:43:10 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         po/LINGUAS: Add 'ca' to LINGUAS.
-         Original commit message from CVS:
-         * po/LINGUAS:
-         Add 'ca' to LINGUAS.
-
-2008-08-28 09:57:30 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         gst/asfdemux/gstasfdemux.c: Fix aggregated GST_FLOW_RETURN check for when to send an error message on the bus.
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_loop):
-         Fix aggregated GST_FLOW_RETURN check for when to send an error message
-         on the bus.
-         Re-fixes #546859
-
-2008-08-27 15:55:05 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/rdtdepay.*: Parse other values from the incomming caps.
-         Original commit message from CVS:
-         * gst/realmedia/rdtdepay.c: (gst_rdt_depay_init),
-         (gst_rdt_depay_setcaps), (gst_rdt_depay_sink_event),
-         (create_segment_event), (gst_rdt_depay_push),
-         (gst_rdt_depay_handle_data), (gst_rdt_depay_change_state):
-         * gst/realmedia/rdtdepay.h:
-         Parse other values from the incomming caps.
-         Add event handler to handle flushing and segments.
-         Create segment events.
-         * gst/realmedia/rdtjitterbuffer.c: (rdt_jitter_buffer_insert):
-         Do skew correction based on RDT timestamps.
-         * gst/realmedia/rdtmanager.c: (activate_session),
-         (gst_rdt_manager_parse_caps), (gst_rdt_manager_setcaps),
-         (create_recv_rtp):
-         Parse caps to get the clockrate needed for the jitterbuffer.
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_video_packet):
-         Apply timestamp fixup after correcting for initial timestamp and
-         internal base timestamp corrections.
-
-2008-08-27 11:28:50 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/rdtdepay.*: Check seqnum gaps and drop duplicate packets or mark outgoing buffers with a DISCONT flag w...
-         Original commit message from CVS:
-         * gst/realmedia/rdtdepay.c: (gst_rdt_depay_handle_data),
-         (gst_rdt_depay_change_state):
-         * gst/realmedia/rdtdepay.h:
-         Check seqnum gaps and drop duplicate packets or mark outgoing buffers
-         with a DISCONT flag when needed.
-         * gst/realmedia/rdtmanager.c: (gst_rdt_manager_query_src):
-         Report the configure latency instead of a hardcoded value.
-
-2008-08-27 10:02:06 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/rdtmanager.c: Include the new rdt jitterbuffer in the session manager.
-         Original commit message from CVS:
-         * gst/realmedia/rdtmanager.c: (create_session), (activate_session),
-         (free_session), (gst_rdt_manager_query_src),
-         (gst_rdt_manager_src_activate_push),
-         (gst_rdt_manager_handle_data_packet), (gst_rdt_manager_chain_rdt),
-         (gst_rdt_manager_loop), (create_recv_rtp):
-         Include the new rdt jitterbuffer in the session manager.
-
-2008-08-27 09:58:00 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/rdtdepay.*: Use new RDT parsing helper functions.
-         Original commit message from CVS:
-         * gst/realmedia/rdtdepay.c: (gst_rdt_depay_class_init),
-         (gst_rdt_depay_finalize), (gst_rdt_depay_setcaps),
-         (gst_rdt_depay_push), (gst_rdt_depay_handle_data),
-         (gst_rdt_depay_chain), (gst_rdt_depay_change_state):
-         * gst/realmedia/rdtdepay.h:
-         Use new RDT parsing helper functions.
-         Copy discont flags correctly.
-         Push the header from the chain function instead of the setcaps function.
-         Copy incomming timestamp to the output buffers instead of doing magic
-         with the RDT timestamps.
-
-2008-08-27 09:52:49 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/: Add first support for parsing RDT messages.
-         Original commit message from CVS:
-         * gst/realmedia/Makefile.am:
-         * gst/realmedia/gstrdtbuffer.c: (gst_rdt_buffer_validate_data),
-         (gst_rdt_buffer_validate), (gst_rdt_buffer_get_packet_count),
-         (read_packet_header), (gst_rdt_buffer_get_first_packet),
-         (gst_rdt_packet_move_to_next), (gst_rdt_packet_get_type),
-         (gst_rdt_packet_get_length), (gst_rdt_packet_to_buffer),
-         (gst_rdt_buffer_compare_seqnum), (gst_rdt_packet_data_get_seq),
-         (gst_rdt_packet_data_peek_data),
-         (gst_rdt_packet_data_get_stream_id),
-         (gst_rdt_packet_data_get_timestamp):
-         * gst/realmedia/gstrdtbuffer.h:
-         Add first support for parsing RDT messages.
-         * gst/realmedia/rdtjitterbuffer.c: (rdt_jitter_buffer_class_init),
-         (rdt_jitter_buffer_init), (rdt_jitter_buffer_finalize),
-         (rdt_jitter_buffer_new), (rdt_jitter_buffer_reset_skew),
-         (calculate_skew), (rdt_jitter_buffer_insert),
-         (rdt_jitter_buffer_pop), (rdt_jitter_buffer_peek),
-         (rdt_jitter_buffer_flush), (rdt_jitter_buffer_num_packets),
-         (rdt_jitter_buffer_get_ts_diff):
-         * gst/realmedia/rdtjitterbuffer.h:
-         Add first version of an RDT jitterbuffer.
-
-2008-08-27 09:47:17 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/rmdemux.*: Keep track of the first timestamp of the stream and add this to the outgoing buffer timestam...
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_init),
-         (find_seek_offset_time), (gst_rmdemux_reset), (gst_rmdemux_chain),
-         (gst_rmdemux_parse_mdpr), (gst_rmdemux_descramble_cook_audio),
-         (gst_rmdemux_descramble_dnet_audio),
-         (gst_rmdemux_parse_video_packet), (gst_rmdemux_parse_audio_packet):
-         * gst/realmedia/rmdemux.h:
-         Keep track of the first timestamp of the stream and add this to the
-         outgoing buffer timestamps so that we can handle live streams.
-         Set discont flag on the first buffers and after a seek.
-
-=== release 0.10.9 ===
-
-2008-08-26 23:06:04 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-cdio.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * gst-plugins-ugly.doap:
-         Release 0.10.9
-         Original commit message from CVS:
-         Release 0.10.9
-
-2008-08-26 22:56:30 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/en_GB.po:
-       * po/es.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/hu.po:
-       * po/id.po:
-       * po/it.po:
-       * po/lt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-         Original commit message from CVS:
-         Update .po files
-
-2008-08-26 15:35:43 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         ext/a52dec/gsta52dec.c: Set up a default time segment for output when receiving an incoming byte segment (as for raw ...
-         Original commit message from CVS:
-         * ext/a52dec/gsta52dec.c:
-         Set up a default time segment for output when receiving
-         an incoming byte segment (as for raw AC3 files).
-         Fixes: #548194
-
-2008-08-12 09:16:13 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         0.10.8.2 pre-release.
-         Original commit message from CVS:
-         * configure.ac:
-         * docs/plugins/Makefile.am:
-         * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-         * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-         * docs/plugins/gst-plugins-ugly-plugins.args:
-         * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-         * docs/plugins/gst-plugins-ugly-plugins.interfaces:
-         * docs/plugins/inspect/plugin-a52dec.xml:
-         * docs/plugins/inspect/plugin-asf.xml:
-         * docs/plugins/inspect/plugin-cdio.xml:
-         * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-         * docs/plugins/inspect/plugin-dvdread.xml:
-         * docs/plugins/inspect/plugin-dvdsub.xml:
-         * docs/plugins/inspect/plugin-iec958.xml:
-         * docs/plugins/inspect/plugin-lame.xml:
-         * docs/plugins/inspect/plugin-mad.xml:
-         * docs/plugins/inspect/plugin-mpeg2dec.xml:
-         * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-         * docs/plugins/inspect/plugin-mpegstream.xml:
-         * docs/plugins/inspect/plugin-realmedia.xml:
-         * docs/plugins/inspect/plugin-siddec.xml:
-         * ext/Makefile.am:
-         0.10.8.2 pre-release.
-         * po/LINGUAS:
-         * po/POTFILES.in:
-         * po/id.po:
-         Add new translation.
-
-2008-08-11 18:44:35 +0000  Michael Smith <msmith@xiph.org>
-
-         gst/asfdemux/gstasfdemux.c: Properly aggregate flow returns for both push and pull mode, so we shut down if all pads ...
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c:
-         Properly aggregate flow returns for both push and pull mode, so we shut
-         down if all pads are unlinked.
-         Fixes #546859.
-
-2008-08-07 16:14:42 +0000  Frederic Crozat <fcrozat@mandriva.org>
-
-         Make sure gettext returns translations in UTF-8 encoding rather than in the current locale encoding (#546822).
-         Original commit message from CVS:
-         Patch by: Frederic Crozat <fcrozat@mandriva.org>
-         * ext/dvdread/dvdreadsrc.c: (plugin_init):
-         * ext/lame/gstlame.c: (plugin_init):
-         * gst/asfdemux/gstasf.c: (plugin_init):
-         Make sure gettext returns translations in UTF-8 encoding rather
-         than in the current locale encoding (#546822).
-
-2008-07-31 14:35:40 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Don't recurse from mp3parse_bytepos_to_time() to mp3parse_total_time() if we'...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_sink_event), (gst_mp3parse_emit_frame),
-         (mp3parse_total_time), (mp3parse_bytepos_to_time):
-         Don't recurse from mp3parse_bytepos_to_time() to mp3parse_total_time()
-         if we're called from there already. Otherwise we end up in a endless
-         recursion and crash with a stack overflow.
-         This can happen when a Xing or VBRI header with TOC exists but it
-         doesn't contain the total time. Fixes bug #545370.
-
-2008-07-31 14:24:27 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         ext/lame/gstlame.c: Use the default for the strict-iso property too.
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_class_init),
-         (gst_lame_get_default_settings):
-         Use the default for the strict-iso property too.
-         Allow a bitrate setting of 0, which lets lame choose the default value
-         and which makes it possible to set the compression-ratio property.
-
-2008-07-29 16:57:16 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         ext/lame/gstlame.*: Get the defaults settings of LAME in the plugin initialization function and return FALSE here if ...
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_class_init), (gst_lame_init),
-         (gst_lame_chain), (gst_lame_get_default_settings), (plugin_init):
-         * ext/lame/gstlame.h:
-         Get the defaults settings of LAME in the plugin initialization
-         function and return FALSE here if something goes wrong. This removes
-         the hacky failing instance init function.
-         Use LAMEs default value for all settings instead of overwriting some
-         of them. Overwriting some of them gives unexpected results if one only
-         sets a preset. Fixes bug #498004.
-
-2008-07-27 15:56:27 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         ext/lame/gstlame.c: Use LAME's default for the min/max/mean VBR bitrate. Setting our own defaults will restrict the b...
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_init):
-         Use LAME's default for the min/max/mean VBR bitrate. Setting our own
-         defaults will restrict the bitrate when using the presets in a bad way.
-         Fixes bug #498004.
-
-2008-07-27 11:01:12 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         Put the MPEG audio version into the caps as "mpegaudioversion".
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_sink_setcaps):
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (mp3_type_frame_length_from_header), (mp3_caps_create),
-         (gst_mp3parse_chain):
-         Put the MPEG audio version into the caps as "mpegaudioversion".
-         This is different from "mpegversion".
-
-2008-07-22 18:25:08 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         ext/lame/gstlame.*: Fix build with lame >= 3.97. The padding type and cwlimit settings are deprecated now and the fun...
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_class_init), (gst_lame_init),
-         (gst_lame_set_property), (gst_lame_get_property), (gst_lame_setup):
-         * ext/lame/gstlame.h:
-         Fix build with lame >= 3.97. The padding type and cwlimit settings
-         are deprecated now and the function declarations are hidden in the
-         headers so deprecate the GObject properties for them and remove them
-         in 0.11. Fixes bug #544039.
-
-2008-07-13 10:13:06 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         ext/mpeg2dec/gstmpeg2dec.c: Don't allow width/height outside the spec (i.e. smaller than 16 and higher than 4096). Su...
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c: (handle_sequence):
-         Don't allow width/height outside the spec (i.e. smaller than 16
-         and higher than 4096). Such files are corrupted ones and setting
-         caps that are not a subset of the template caps confuses playbin.
-         Fixes bug #542646.
-
-2008-07-11 12:30:22 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         ext/sidplay/Makefile.am: Fix the build.
-         Original commit message from CVS:
-         * ext/sidplay/Makefile.am:
-         Fix the build.
-
-2008-07-08 14:01:51 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         configure.ac: Don't include ERROR_CFLAGS in GST_CXXFLAGS as it might include flags that are invalid for C++.
-         Original commit message from CVS:
-         * configure.ac:
-         Don't include ERROR_CFLAGS in GST_CXXFLAGS as it might include
-         flags that are invalid for C++.
-
-2008-07-05 18:57:30 +0000  Tal Shalif <tshalif@nargila.org>
-
-         ext/dvdnav/dvdnavsrc.c: Prevent double free. Fixes bug #541697.
-         Original commit message from CVS:
-         Patch by: Tal Shalif <tshalif at nargila dot org>
-         * ext/dvdnav/dvdnavsrc.c: (gst_dvd_nav_src_stop):
-         Prevent double free. Fixes bug #541697.
-
-2008-07-05 15:56:56 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-         gst/mpegstream/: Resend tags event after a FLUSH (seek) to support prerolling a partial pipeline.
-         Original commit message from CVS:
-         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_base_init),
-         (gst_dvd_demux_get_audio_stream),
-         (gst_dvd_demux_get_subpicture_stream),
-         (gst_dvd_demux_parse_packhead), (gst_dvd_demux_reset):
-         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_init),
-         (gst_mpeg_demux_process_event), (gst_mpeg_demux_init_stream),
-         (gst_mpeg_demux_parse_packhead), (gst_mpeg_demux_reset):
-         * gst/mpegstream/gstmpegdemux.h:
-         Resend tags event after a FLUSH (seek) to support prerolling
-         a partial pipeline.
-
-2008-07-03 13:12:26 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         Use correct error code for encrypted streams.
-         Original commit message from CVS:
-         * configure.ac:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_object):
-         Use correct error code for encrypted streams.
-
-2008-07-02 07:49:19 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-         gst/mpegstream/gstmpegdemux.c: Bridge gaps in stream by NEWSEGMENT sending.  Fixes #540194.
-         Original commit message from CVS:
-         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer),
-         (gst_mpeg_demux_sync_stream_to_time):
-         Bridge gaps in stream by NEWSEGMENT sending.  Fixes #540194.
-
-2008-06-27 12:58:35 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
-
-         ext/dvdread/dvdreadsrc.c: Allow and implement non-flushing and/or segment seek (mainly in TIME and chapter format).
-         Original commit message from CVS:
-         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_read),
-         (gst_dvd_read_src_create), (gst_dvd_read_src_handle_seek_event):
-         Allow and implement non-flushing and/or segment seek
-         (mainly in TIME and chapter format).
-         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_event),
-         (gst_dvd_demux_get_subpicture_stream),
-         (gst_dvd_demux_synchronise_pads),
-         (gst_dvd_demux_sync_stream_to_time):
-         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_process_event),
-         (gst_mpeg_demux_send_subbuffer),
-         (gst_mpeg_demux_sync_stream_to_time),
-         (gst_mpeg_streams_reset_cur_ts):
-         * gst/mpegstream/gstmpegdemux.h:
-         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_process_event),
-         (gst_mpeg_parse_pad_added), (gst_mpeg_parse_handle_src_query):
-         Delegate a query to upstream if it can't be handled.
-         Make segment stop aware.
-         Fix (subtitle) stream synchronization.
-         Add some debug statements.
-
-2008-06-26 10:40:03 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Fix build on macosx.
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c: (head_check):
-         Fix build on macosx.
-
-2008-06-13 06:57:21 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         Add missing elements to docs. Restore alphabetical order in section file. Document mad (it was included in docs alrea...
-         Original commit message from CVS:
-         * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-         * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-         * ext/a52dec/gsta52dec.c:
-         * ext/amrnb/amrnbdec.c:
-         * ext/amrnb/amrnbenc.c:
-         * ext/amrnb/amrnbparse.c:
-         * ext/lame/gstlame.c:
-         * ext/mad/gstmad.c:
-         * ext/sidplay/gstsiddec.cc:
-         * gst/asfdemux/gstrtspwms.c:
-         * gst/mpegaudioparse/gstxingmux.c:
-         * gst/realmedia/rademux.c:
-         * gst/realmedia/rdtmanager.c:
-         * gst/realmedia/rtspreal.c:
-         * gst/synaesthesia/gstsynaesthesia.c:
-         Add missing elements to docs. Restore alphabetical order in section
-         file. Document mad (it was included in docs already).
-         Fix doc-markup: use convinience syntax for examples
-         (produces valid docbook), add several refsec2 when we have several
-         titles. Fix some types.
-
-2008-06-13 05:52:17 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         Do not use short_description in section docs for elements. We extract them from element details and there will be war...
-         Original commit message from CVS:
-         * ext/lame/gstlame.c:
-         * ext/sidplay/gstsiddec.cc:
-         * gst/mpegaudioparse/gstxingmux.c:
-         Do not use short_description in section docs for elements. We extract
-         them from element details and there will be warnings if they differ.
-
-2008-06-09 20:02:05 +0000  Benjamin Kampmann <benjamin@fluendo.com>
-
-         ext/cdio/: Also extract album title and album genre from CD-TEXT if available (#537021).
-         Original commit message from CVS:
-         Patch by: Benjamin Kampmann  <benjamin at fluendo dot com>
-         * ext/cdio/gstcdio.c: (gst_cdio_get_cdtext),
-         (gst_cdio_add_cdtext_album_tags):
-         * ext/cdio/gstcdio.h:
-         * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_open):
-         Also extract album title and album genre from CD-TEXT if
-         available (#537021).
-
-2008-06-09 07:51:00 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Don't mark MPEG headers with emphasis == 0x2 as invalid. This emphasis value ...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c: (head_check):
-         Don't mark MPEG headers with emphasis == 0x2 as invalid. This
-         emphasis value is reserved but unfortunately files with that
-         value exist and the information is not important for the decoder
-         anyway. Fixes bug #537235.
-
-2008-06-07 18:48:54 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         Require libcdio >= 0.76.
-         Original commit message from CVS:
-         * configure.ac:
-         * ext/cdio/gstcdio.c:
-         * ext/cdio/gstcdio.h:
-         * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_open):
-         Require libcdio >= 0.76.
-
-2008-06-02 15:44:57 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/a52dec/gsta52dec.c: Drain queued buffers before forwarding the segment event.
-         Original commit message from CVS:
-         * ext/a52dec/gsta52dec.c: (gst_a52dec_sink_event):
-         Drain queued buffers before forwarding the segment event.
-
-2008-06-02 11:59:07 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/a52dec/gsta52dec.*: Add segment handling, buffer clipping and basic reverse playback.
-         Original commit message from CVS:
-         * ext/a52dec/gsta52dec.c: (clear_queued), (flush_queued),
-         (gst_a52dec_drain), (gst_a52dec_push), (gst_a52dec_sink_event),
-         (gst_a52dec_chain), (gst_a52dec_change_state):
-         * ext/a52dec/gsta52dec.h:
-         Add segment handling, buffer clipping and basic reverse playback.
-
-2008-05-28 11:43:01 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         Random doc of the day. Also print human readable format of newsegment in log message if we complain about it.
-         Original commit message from CVS:
-         * docs/plugins/Makefile.am:
-         * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-         * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-         * docs/plugins/gst-plugins-ugly-plugins.args:
-         * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-         * docs/plugins/gst-plugins-ugly-plugins.interfaces:
-         * docs/plugins/inspect/plugin-a52dec.xml:
-         * docs/plugins/inspect/plugin-amrnb.xml:
-         * docs/plugins/inspect/plugin-asf.xml:
-         * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-         * docs/plugins/inspect/plugin-dvdread.xml:
-         * docs/plugins/inspect/plugin-dvdsub.xml:
-         * docs/plugins/inspect/plugin-iec958.xml:
-         * docs/plugins/inspect/plugin-lame.xml:
-         * docs/plugins/inspect/plugin-mad.xml:
-         * docs/plugins/inspect/plugin-mpeg2dec.xml:
-         * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-         * docs/plugins/inspect/plugin-mpegstream.xml:
-         * docs/plugins/inspect/plugin-realmedia.xml:
-         * docs/plugins/inspect/plugin-siddec.xml:
-         * docs/plugins/inspect/plugin-synaesthesia.xml:
-         * ext/a52dec/gsta52dec.c:
-         Random doc of the day. Also print human readable format of newsegment
-         in log message if we complain about it.
-
-2008-05-26 09:06:54 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/a52dec/gsta52dec.*: Mark discont on outgoing buffers after receiving a DISCONT buffer or when we have a decoding ...
-         Original commit message from CVS:
-         * ext/a52dec/gsta52dec.c: (gst_a52dec_init), (gst_a52dec_push),
-         (gst_a52dec_sink_event), (gst_a52dec_handle_frame),
-         (gst_a52dec_chain), (gst_a52dec_change_state):
-         * ext/a52dec/gsta52dec.h:
-         Mark discont on outgoing buffers after receiving a DISCONT buffer or
-         when we have a decoding error.
-         We don't need to clear the cache when we receive a NEWSEGMENT event.
-         Clear buffer cache in DISCONT.
-         Add beginnings of GstSegment handling.
-
-2008-05-26 07:41:24 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/mpegaudioparse/gstxingmux.c: Fix alignment issues that caused SIGBUS on some architectures.
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstxingmux.c: (generate_xing_header):
-         Fix alignment issues that caused SIGBUS on some architectures.
-
-2008-05-25 21:30:40 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/ac3parse/gstac3parse.c: Fix alignment issue which isn't really an issue at all because the plugin hasn't been por...
-         Original commit message from CVS:
-         * gst/ac3parse/gstac3parse.c: (gst_ac3parse_chain):
-         Fix alignment issue which isn't really an issue at all because
-         the plugin hasn't been ported to 0.10 yet.
-
-2008-05-25 21:03:41 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         configure.ac: Back to devel -> 0.10.8.1
-         Original commit message from CVS:
-         * configure.ac:
-         Back to devel -> 0.10.8.1
-
-=== release 0.10.8 ===
-
-2008-05-21 23:03:13 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * gst-plugins-ugly.doap:
-       * po/LINGUAS:
-         Release 0.10.8
-         Original commit message from CVS:
-         Release 0.10.8
-
-2008-05-21 22:43:42 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-       * common:
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/en_GB.po:
-       * po/es.po:
-       * po/fi.po:
-       * po/fr.po:
-       * po/hu.po:
-       * po/it.po:
-       * po/lt.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/ru.po:
-       * po/sk.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-         Original commit message from CVS:
-         Update .po files
-
-2008-05-19 21:38:16 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         configure.ac: 0.10.7.4 pre-release
-         Original commit message from CVS:
-         * configure.ac:
-         0.10.7.4 pre-release
-
-2008-05-19 15:07:07 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         ext/mad/gstmad.c: Fix inconsistent use of rate and channels.
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (gst_mad_convert_src), (gst_mad_chain):
-         Fix inconsistent use of rate and channels.
-         Fixes #533581
-
-2008-05-19 10:23:46 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/rmdemux.c: Flush timestamp correction variables on a flush. Fixes #533832.
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_send_event):
-         Flush timestamp correction variables on a flush. Fixes #533832.
-
-2008-05-19 10:02:41 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-       * ChangeLog:
-       * common:
-       * configure.ac:
-         Commit 0.10.7.3 pre-rel marker
-         Original commit message from CVS:
-         Commit 0.10.7.3 pre-rel marker
-
-2008-05-13 09:33:09 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         gst/realmedia/rmdemux.c: Properly aggregate GstFlowReturn from downstream in order to properly stop, and doing that a...
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_video_packet):
-         Properly aggregate GstFlowReturn from downstream in order to properly
-         stop, and doing that as early as possible.
-         Fixes #532807
-
-2008-05-10 15:32:41 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         configure.ac: 0.10.7.2 pre-release
-         Original commit message from CVS:
-         * configure.ac:
-         0.10.7.2 pre-release
-
-2008-05-10 00:44:00 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         Always let FLUSH_START events flow downstream.
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (gst_mad_sink_event):
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_sink_event):
-         Always let FLUSH_START events flow downstream.
-
-2008-05-07 08:00:24 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         configure.ac: Error out if we don't have the required core/base versions.
-         Original commit message from CVS:
-         * configure.ac:
-         Error out if we don't have the required core/base versions.
-
-2008-05-06 17:53:26 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/rmdemux.c: Fix video timestamps by adjusting it with the first timestamp found.
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_mdpr),
-         (gst_rmdemux_fix_timestamp), (gst_rmdemux_parse_video_packet),
-         (gst_rmdemux_parse_audio_packet), (gst_rmdemux_parse_packet):
-         Fix video timestamps by adjusting it with the first timestamp found.
-         Don't assume we have a complete fragment when flushing the adapter,
-         packets might have been lost or the stream might just be broken.
-
-2008-05-06 10:30:18 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/rdtmanager.c: Set Rank to NONE so that we don't accidentally try to autoplug the rdtmanager.
-         Original commit message from CVS:
-         * gst/realmedia/rdtmanager.c: (gst_rdt_manager_plugin_init):
-         Set Rank to NONE so that we don't accidentally try to autoplug the
-         rdtmanager.
-
-2008-05-05 08:43:38 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Send a new duration message if the average bitrate changed and we don't know ...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_emit_frame):
-         Send a new duration message if the average bitrate changed and
-         we don't know the duration from the Xing or VBRI header.
-         Fixes bug #321857.
-
-2008-04-30 17:16:47 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/rtspreal.*: Move assembly rule parsing to the place where we parse the SDP as it's also there that we c...
-         Original commit message from CVS:
-         * gst/realmedia/rtspreal.c: (rtsp_ext_real_before_send),
-         (rtsp_ext_real_parse_sdp), (rtsp_ext_real_stream_select):
-         * gst/realmedia/rtspreal.h:
-         Move assembly rule parsing to the place where we parse the SDP as it's
-         also there that we create the MDPR and we need the currently selected
-         asmrule in order to select the right MTLI.
-         Fixes #529359.
-
-2008-04-29 17:34:19 +0000  Michael Smith <msmith@xiph.org>
-
-         gst/realmedia/: Include generated "_stdint.h" instead of <stdint.h> which might not exist on some systems.
-         Original commit message from CVS:
-         * gst/realmedia/realhash.c:
-         * gst/realmedia/rtspreal.c:
-         Include generated "_stdint.h" instead of <stdint.h> which might not
-         exist on some systems.
-
-2008-04-25 23:10:54 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         ext/sidplay/gstsiddec.cc: Cast NULL sentinels to void * as NULL is defined as an integer constant in most environment...
-         Original commit message from CVS:
-         * ext/sidplay/gstsiddec.cc:
-         Cast NULL sentinels to void * as NULL is defined as an integer
-         constant in most environments when using C++ and it's size might
-         be different from a pointer. Fixes #529488.
-
-2008-04-22 12:11:30 +0000  Edgard Lima <edgard.lima@indt.org.br>
-
-       * ChangeLog:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstrtspwms.c:
-         Fix "unused var" compiler error when --disable-gst-debug is used.
-         Original commit message from CVS:
-         Fix "unused var" compiler error when --disable-gst-debug is used.
-
-2008-04-17 20:58:00 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/amrnb/amrnbparse.c: We should also stop the streaming task when we get a NOT_LINKED flow return, which is not cov...
-         Original commit message from CVS:
-         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_loop):
-         We should also stop the streaming task when we get a NOT_LINKED
-         flow return, which is not covered by FLOW_IS_FATAL.
-
-2008-04-17 10:24:32 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         ext/: gst_atomic_int_set ==> g_atomic_int_set
-         Original commit message from CVS:
-         * ext/cdio/gstcdiocddasrc.c:
-         * ext/dv/gstdvdemux.c:
-         gst_atomic_int_set ==> g_atomic_int_set
-
-2008-04-11 08:09:55 +0000  Julien Moutte <julien@moutte.net>
-
-         gst/mpegaudioparse/gstxingmux.c: Fix argument formats.
-         Original commit message from CVS:
-         2008-04-11  Julien Moutte  <julien@fluendo.com>
-         * gst/mpegaudioparse/gstxingmux.c: (generate_xing_header): Fix
-         argument formats.
-
-2008-04-06 08:57:33 +0000  Damien Lespiau <damien.lespiau@gmail.com>
-
-         configure.ac: Actually build dlls when cross-compiling with mingw32.
-         Original commit message from CVS:
-         Patch by: Damien Lespiau <damien dot lespiau at gmail dot com>
-         * configure.ac:
-         Actually build dlls when cross-compiling with mingw32.
-         Fixes bug #526247.
-
-2008-04-04 19:04:20 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         Depend on GLib 2.12 and use it unconditionally as we do in other modules too already.
-         Original commit message from CVS:
-         * configure.ac:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (mpeg_audio_seek_entry_free):
-         * gst/mpegaudioparse/gstxingmux.c: (gst_xing_seek_entry_free):
-         Depend on GLib 2.12 and use it unconditionally as we do in other
-         modules too already.
-
-2008-04-03 15:21:50 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/mpegaudioparse/: Use GSlice for allocating the seek table entries if we compile with
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (mpeg_audio_seek_entry_new), (mpeg_audio_seek_entry_free),
-         (gst_mp3parse_reset), (gst_mp3parse_emit_frame):
-         * gst/mpegaudioparse/gstxingmux.c: (gst_xing_seek_entry_new),
-         (gst_xing_seek_entry_free), (gst_xing_mux_finalize), (xing_reset),
-         (gst_xing_mux_chain):
-         Use GSlice for allocating the seek table entries if we compile with
-         GLib 2.10 or newer.
-
-2008-04-01 14:39:24 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/asfdemux/gstasfdemux.c: Remove some debug code.
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c:
-         (gst_asf_demux_process_ext_stream_props):
-         Remove some debug code.
-
-2008-04-01 14:29:32 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/asfdemux/gstasfdemux.c: Guard against division by 0 and fall back to 25/1 framerate.
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c:
-         (gst_asf_demux_process_ext_stream_props):
-         Guard against division by 0 and fall back to 25/1 framerate.
-
-2008-04-01 14:00:32 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/asfdemux/gstasfdemux.c: Instead of adding a fixes 25/1 framerate to the video caps, use the average frame duratio...
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_video_stream),
-         (gst_asf_demux_process_ext_stream_props):
-         Instead of adding a fixes 25/1 framerate to the video caps, use the
-         average frame duration in the extended properties of the video stream as
-         the framerate. Fixes #524346.
-
-2008-03-21 14:15:27 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         configure.ac: Check if the compiler supports do { } while (0) macros. This fixes a warning when compiling with g++ 4....
-         Original commit message from CVS:
-         * configure.ac:
-         Check if the compiler supports do { } while (0) macros. This fixes
-         a warning when compiling with g++ 4.3, resulting in a build failure
-         because of -Werror.
-
-2008-03-19 11:01:25 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/asmrules.c: make ) also a delimiter for rules.
-         Original commit message from CVS:
-         * gst/realmedia/asmrules.c: (gst_asm_scan_string), (main):
-         make ) also a delimiter for rules.
-         Skip \\ when scanning strings.
-         Add new testcase for these problems.
-
-2008-03-12 16:09:48 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Don't take the stream lock when caching events. This is not necessary and res...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_sink_event):
-         Don't take the stream lock when caching events. This is not necessary
-         and results in a deadlock when seeking with rhythmbox (but not with
-         totem or banshee for some reason).
-
-2008-03-10 15:17:24 +0000  Pizpot Gargravarr <pgargravarr@siriuscybernetics.org>
-
-         gst/realmedia/rtspreal.c: Add the version field when creating the CONT chunk resulting in the Author, Comment and Cop...
-         Original commit message from CVS:
-         Patch by: Pizpot Gargravarr <pgargravarr at siriuscybernetics dot org>
-         * gst/realmedia/rtspreal.c: (rtsp_ext_real_parse_sdp):
-         Add the version field when creating the CONT chunk resulting in
-         the Author, Comment and Copyright tags not being parsed correctly.
-         Fixes #521459.
-
-2008-03-10 15:13:10 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Remove trailing newlines from debug statements.
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_sink_event), (gst_mp3parse_chain):
-         Remove trailing newlines from debug statements.
-
-2008-03-04 22:54:21 +0000  Simone Gotti <simone.gotti@email.it>
-
-         ext/dvdnav/dvdnavsrc.*: Apply patch that adds some seeking support to dvdnav, and fixes it in various other ways. Thi...
-         Original commit message from CVS:
-         * ext/dvdnav/dvdnavsrc.c:
-         * ext/dvdnav/dvdnavsrc.h:
-         Apply patch that adds some seeking support to dvdnav, and fixes it
-         in various other ways. This doesn't make dvdnavsrc fully functional,
-         but moves it forward.
-         Fixes: #476149
-         Patch By: Simone Gotti <simone.gotti@email.it>
-         * ext/dvdnav/gst-dvd:
-         Update the simple dvdnavsrc gst-launch example to work for 0.10
-
-2008-03-03 12:50:56 +0000  Peter Kjellerstedt <pkj@axis.com>
-
-         configure.ac: Use AG_GST_CHECK_PLUGIN and AG_GST_DISABLE_PLUGIN to simplify which plug-ins are included/excluded. (#4...
-         Original commit message from CVS:
-         * configure.ac:
-         Use AG_GST_CHECK_PLUGIN and AG_GST_DISABLE_PLUGIN to simplify which
-         plug-ins are included/excluded. (#498222)
-
-2008-02-27 15:23:51 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         Push EOS, FLUSH_STOP and NEWSEGMENT immediately instead of dropping and leaking them.
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (gst_mad_sink_event):
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_sink_event):
-         Push EOS, FLUSH_STOP and NEWSEGMENT immediately instead
-         of dropping and leaking them.
-
-2008-02-27 13:18:57 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         Cache all events except EOS if we still have to send a NEWSEGMENT event. This will let TAG events be forwarded until ...
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (gst_mad_dispose), (gst_mad_sink_event),
-         (gst_mad_chain):
-         * ext/mad/gstmad.h:
-         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_dispose),
-         (gst_mp3parse_sink_event), (gst_mp3parse_emit_frame):
-         * gst/mpegaudioparse/gstmpegaudioparse.h:
-         Cache all events except EOS if we still have to send a NEWSEGMENT
-         event. This will let TAG events be forwarded until after decodebin
-         to an encoder for example as decodebin only links the pads
-         after NEWSEGMENT. Fixes bug #518933.
-
-2008-02-27 12:48:41 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/mpegaudioparse/gstxingmux.c: Write Xing header at the correct position in the MP3 frame for stereo files. Fixes b...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstxingmux.c: (get_xing_offset):
-         Write Xing header at the correct position in the MP3 frame for
-         stereo files. Fixes bug #518676.
-
-2008-02-23 12:35:53 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         Check for and define ERROR_CXXFLAGS and GST_CXXFLAGS and use them when building C++ code (#516509).
-         Original commit message from CVS:
-         * configure.ac:
-         * ext/sidplay/Makefile.am:
-         Check for and define ERROR_CXXFLAGS and GST_CXXFLAGS and use them
-         when building C++ code (#516509).
-
-2008-02-22 14:55:57 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/lame/gstlame.c: Fix broken GST_ELEMENT_ERROR macro, fixes compile with the Sun
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_sink_setcaps):
-         Fix broken GST_ELEMENT_ERROR macro, fixes compile with the Sun
-         Workshop 12 compiler, but probably also crashes (#517985).
-
-2008-02-22 07:11:17 +0000  Thiago Sousa Santos <thiagoss@lcc.ufcg.edu.br>
-
-         gst/mpegaudioparse/gstmpegaudioparse.*: Post channel mode and CRC as tags. Fixes bug #504493.
-         Original commit message from CVS:
-         Patch by: Thiago Sousa Santos <thiagoss at lcc dot ufcg dot edu dot br>
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3_channel_mode_get_type),
-         (mp3_type_frame_length_from_header), (gst_mp3parse_class_init),
-         (gst_mp3parse_reset), (gst_mp3parse_emit_frame),
-         (gst_mp3parse_chain):
-         * gst/mpegaudioparse/gstmpegaudioparse.h:
-         Post channel mode and CRC as tags. Fixes bug #504493.
-
-2008-02-22 06:27:11 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         ext/dvdnav/dvdnavsrc.c: Correctly chain up to the parent's finalize function.
-         Original commit message from CVS:
-         * ext/dvdnav/dvdnavsrc.c: (gst_dvd_nav_src_finalize):
-         Correctly chain up to the parent's finalize function.
-
-2008-02-22 06:25:28 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Try a bit harder to get valid timestamps, especially if upstream gives us one...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_emit_frame), (gst_mp3parse_chain):
-         Try a bit harder to get valid timestamps, especially if upstream
-         gives us one and we are at the first frame or resyncing.
-         Return UNEXPECTED if we get a valid timestamp that is outside of
-         our configured segment. After all changes done so far this doesn't
-         seem to cause any regression, please test.
-
-2008-02-22 06:19:41 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/asfdemux/gstasfdemux.c: If we don't have the position to seek to in our index first try to convert from TIME to B...
-         Original commit message from CVS:
-         Patch by:
-         Hans de Goede <j dot w dot r dot degoede at hhs dot nl>
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_seek_event):
-         If we don't have the position to seek to in our index first try
-         to convert from TIME to BYTES upstream and only if that fails
-         too use the old hack to simply seek to an earlier position
-         and let the sink drop everything before segment start.
-         Partially fixes bug #469930.
-
-2008-02-21 23:54:25 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         configure.ac: Back to development...
-         Original commit message from CVS:
-         * configure.ac:
-         Back to development...
-
-=== release 0.10.7 ===
-
-2008-02-21 00:15:22 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
-       * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
-       * docs/plugins/gst-plugins-ugly-plugins.signals:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-realmedia.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-       * gst-plugins-ugly.doap:
-       * po/LINGUAS:
-         Release 0.10.7 - I Cheated Time
-         Original commit message from CVS:
-         Release 0.10.7 - I Cheated Time
-
-2008-02-20 23:51:56 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/bg.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/en_GB.po:
-       * po/es.po:
-       * po/fi.po:
-       * po/hu.po:
-       * po/it.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/pl.po:
-       * po/pt_BR.po:
-       * po/sk.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/uk.po:
-       * po/vi.po:
-       * po/zh_CN.po:
-         Update .po files
-         Original commit message from CVS:
-         Update .po files
-
-2008-02-18 20:40:29 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         tests/check/Makefile.am: Exclude dvdreadsrc from the states test too.
-         Original commit message from CVS:
-         * tests/check/Makefile.am:
-         Exclude dvdreadsrc from the states test too.
-
-2008-02-18 10:25:16 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Handler buffers without valid timestamp more correctly: Don't drop them and d...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_emit_frame):
-         Handler buffers without valid timestamp more correctly: Don't drop
-         them and don't use the invalid timestamp to calculate the next
-         timestamp. Fixes bug #516811.
-
-2008-02-18 05:16:44 +0000  Tal Shalif <tshalif@nargila.org>
-
-         ext/dvdread/dvdreadsrc.c: Add some gint64 casts to prevent 32 bit integer overflows.
-         Original commit message from CVS:
-         Patch by: Tal Shalif <tshalif at nargila dot org>
-         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_create),
-         (gst_dvd_read_src_do_seek), (gst_dvd_read_src_do_position_query):
-         Add some gint64 casts to prevent 32 bit integer overflows.
-         Fixes bug #516989.
-
-2008-02-17 18:49:30 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Revert previous commit to mp3parse, as it breaks playback of AVI files.
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         Revert previous commit to mp3parse, as it breaks playback
-         of AVI files.
-
-2008-02-14 13:58:42 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Return GST_FLOW_UNEXPECTED if we get data that is after our configured segmen...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_emit_frame):
-         Return GST_FLOW_UNEXPECTED if we get data that is after our
-         configured segment. This makes upstream go EOS immediately instead
-         of sending us the complete stream. Also improve debugging a bit.
-
-2008-02-13 22:57:54 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         ext/dvdread/dvdreadsrc.c: Fix regression in DVD seeking - when a pack we expect to be a NAV block turns out not to be...
-         Original commit message from CVS:
-         * ext/dvdread/dvdreadsrc.c:
-         Fix regression in DVD seeking - when a pack we
-         expect to be a NAV block turns out not to be, scan forwards
-         for up to 2MB (at most ~1sec) until we find one.
-         Fixes: #516278
-
-2008-02-12 21:42:19 +0000  Sébastien Moutte <sebastien@moutte.net>
-
-         win32/vs6/libgstmpegaudioparse.dsp: Add xing files to VS project file.
-         Original commit message from CVS:
-         * win32/vs6/libgstmpegaudioparse.dsp:
-         Add xing files to VS project file.
-
-2008-02-11 13:31:06 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/dvdsub/gstdvdsubparse.c: Stop leaking src pad templates. Fixes bug #515708.
-         Original commit message from CVS:
-         * gst/dvdsub/gstdvdsubparse.c: (gst_dvd_sub_parse_init):
-         Stop leaking src pad templates. Fixes bug #515708.
-
-2008-02-11 13:29:07 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/mpegaudioparse/gstxingmux.c: Correctly write the size in bytes on big endian systems.
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstxingmux.c: (generate_xing_header):
-         Correctly write the size in bytes on big endian systems.
-         Fixes bug #515725.
-
-2008-02-11 09:13:33 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         ext/lame/gstlame.c: Don't leak the allowed caps.
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_setup):
-         Don't leak the allowed caps.
-         * tests/check/pipelines/lame.c: (GST_START_TEST):
-         Stop leaking all buffers. Fixes bug #515575.
-
-2008-02-08 10:17:11 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         gst/mpegaudioparse/plugin.c: Commit new file I forgot to add.
-         Original commit message from CVS:
-         * gst/mpegaudioparse/plugin.c:
-         Commit new file I forgot to add.
-
-2008-02-08 01:09:53 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         configure.ac: Make DISABLE_DEPRECATED defined *only* during CVS, not during pre-releases or releases.
-         Original commit message from CVS:
-         * configure.ac:
-         Make DISABLE_DEPRECATED defined *only* during CVS, not during
-         pre-releases or releases.
-
-2008-02-08 00:44:19 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-       * ChangeLog:
-         Mention bug 511497 fixed in previous commit
-         Original commit message from CVS:
-         Mention bug 511497 fixed in previous commit
-
-2008-02-08 00:36:51 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         Move xingmux from -bad.
-         Original commit message from CVS:
-         * docs/plugins/Makefile.am:
-         * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-         * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-         * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-         * gst/mpegaudioparse/Makefile.am:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         * gst/mpegaudioparse/gstxingmux.c:
-         * tests/check/Makefile.am:
-         * tests/check/elements/.cvsignore:
-         Move xingmux from -bad.
-
-2008-02-07 19:25:08 +0000  Sébastien Moutte <sebastien@moutte.net>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Use gst_guint64_to_gdouble for conversion
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:(mp3parse_time_to_bytepos):
-         Use gst_guint64_to_gdouble for conversion
-         * win32/vs6/libgstasfdemux.dsp:
-         * win32/vs6/libgstdvdsub.dsp:
-         * win32/vs6/libgstrealmedia.dsp:
-         Update project dependencies and add new source files
-
-2008-02-04 14:27:32 +0000  Zaheer Abbas Merali <zaheerabbas@merali.org>
-
-         ext/mpeg2dec/gstmpeg2dec.c: Reset decoder when handling sequence where libmpeg2 has set frame period to 0, probably d...
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c:
-         Reset decoder when handling sequence where libmpeg2 has set
-         frame period to 0, probably due to a corrupt packet.
-         Fixes bug #514297
-
-2008-01-29 19:10:38 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Don't set new caps on the srcpad everytime the bitrate or MPEG version change...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3_caps_create),
-         (gst_mp3parse_chain):
-         Don't set new caps on the srcpad everytime the bitrate or MPEG
-         version changes but calculate new spf value when the MPEG version
-         changes.
-
-2008-01-23 10:34:40 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         Add documentation for the xingheader plugin.
-         Original commit message from CVS:
-         * docs/plugins/Makefile.am:
-         * docs/plugins/gst-plugins-bad-plugins-docs.sgml:
-         * docs/plugins/gst-plugins-bad-plugins-sections.txt:
-         * gst/xingheader/gstxingmux.c:
-         * gst/xingheader/gstxingmux.h:
-         Add documentation for the xingheader plugin.
-         * tests/check/elements/xingmux.c: (GST_START_TEST):
-         Set element state to PLAYING before doing something else.
-
-2008-01-23 10:11:44 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         tests/check/: Add simple unit test for the xingmux element.
-         Original commit message from CVS:
-         * tests/check/Makefile.am:
-         * tests/check/elements/.cvsignore:
-         * tests/check/elements/xingmux.c: (setup_xingmux),
-         (cleanup_xingmux), (GST_START_TEST), (xingmux_suite), (main):
-         * tests/check/elements/xingmux_testdata.h:
-         Add simple unit test for the xingmux element.
-         * gst/xingheader/gstxingmux.c: (generate_xing_header),
-         (gst_xing_mux_finalize), (xing_reset):
-         Fix a memleak and invalid seek tables with less than 100 MP3 frames.
-
-2008-01-21 13:35:02 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         docs/plugins/: Add the real and rtsp elements and update the lists.
-         Original commit message from CVS:
-         * docs/plugins/Makefile.am:
-         * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-         * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-         Add the real and rtsp elements and update the lists.
-         * docs/plugins/inspect/plugin-amrnb.xml:
-         * docs/plugins/inspect/plugin-asf.xml:
-         * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-         * docs/plugins/inspect/plugin-dvdsub.xml:
-         * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-         * docs/plugins/inspect/plugin-mpegstream.xml:
-         * docs/plugins/inspect/plugin-realmedia.xml:
-         * docs/plugins/inspect/plugin-siddec.xml:
-         * docs/plugins/inspect/plugin-synaesthesia.xml:
-         Regenerate docs.
-         * gst/iec958/ac3_padder.c:
-         * gst/iec958/ac3_padder.h:
-         Do not use gtk-doc style comments for non gtk-doc comments. Note -
-         there are functions defined using extern in the .c file - does that
-         make sense?
-
-2008-01-21 12:43:37 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         ext/mad/gstmad.c: Chain up at the end of the function.
-         Original commit message from CVS:
-         * ext/mad/gstmad.c:
-         Chain up at the end of the function.
-
-2008-01-19 16:04:14 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         ext/mad/gstid3tag.c: Don't add pad templates for the base class but only in the subclasses.
-         Original commit message from CVS:
-         * ext/mad/gstid3tag.c: (gst_id3_tag_class_init):
-         Don't add pad templates for the base class but only in the
-         subclasses.
-
-2008-01-17 17:26:48 +0000  Zaheer Abbas Merali <zaheerabbas@merali.org>
-
-         ext/lame/gstlame.*: Fix the case where you initially have stereo input, and so lame's mode is not set to mono, and th...
-         Original commit message from CVS:
-         * ext/lame/gstlame.c:
-         * ext/lame/gstlame.h:
-         Fix the case where you initially have stereo input, and so lame's
-         mode is not set to mono, and then you get input with mono audio and
-         soon after you get stereo input again. What happened before this
-         commit is that it would keep the encoding mode as mono. It should
-         change it back to the one requested by the app (or the default one)
-         if not requested.
-
-2008-01-15 17:18:31 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Interpolate the VBRI seek table entries to get better results, support 3 byte...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_handle_first_frame), (mp3parse_time_to_bytepos),
-         (mp3parse_bytepos_to_time):
-         Interpolate the VBRI seek table entries to get better results,
-         support 3 byte seek table entries and prevent overflows in the
-         seek table by adding the relative offsets when using the seek
-         table in a large enough data type.
-
-2008-01-14 15:02:13 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/mpegaudioparse/gstmpegaudioparse.*: Add support for seeking based on the VBRI seek table. Might make sense to use...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_reset),
-         (gst_mp3parse_handle_first_frame), (mp3parse_time_to_bytepos),
-         (mp3parse_bytepos_to_time):
-         * gst/mpegaudioparse/gstmpegaudioparse.h:
-         Add support for seeking based on the VBRI seek table. Might make
-         sense to use interpolation in the table later to get hopefully a
-         bit more accurate values.
-
-2008-01-14 11:41:32 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/mpeg2dec/gstmpeg2dec.c: Fix compilation error. Fixes #509313.
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c: (clear_queued), (flush_queued),
-         (handle_picture), (handle_slice):
-         Fix compilation error. Fixes #509313.
-
-2008-01-14 11:24:57 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         ext/lame/gstlame.c: Use gst_util_uint64_scale instead of gst_util_uint64_scale_int as 8 * GST_SECOND is too large for...
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_sink_event):
-         Use gst_util_uint64_scale instead of gst_util_uint64_scale_int
-         as 8 * GST_SECOND is too large for int.
-
-2008-01-14 10:52:20 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/xingheader/gstxingmux.c: Bitrate is 4 bits, not 8 so check for 0xe as maximum value instead of 0xfe.
-         Original commit message from CVS:
-         * gst/xingheader/gstxingmux.c: (generate_xing_header):
-         Bitrate is 4 bits, not 8 so check for 0xe as maximum value instead
-         of 0xfe.
-
-2008-01-14 10:42:48 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/mpegaudioparse/gstmpegaudioparse.*: Add initial support for reading VBRI headers as found in VBR files created by...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_reset),
-         (gst_mp3parse_emit_frame), (gst_mp3parse_handle_first_frame),
-         (mp3parse_total_bytes), (mp3parse_total_time):
-         * gst/mpegaudioparse/gstmpegaudioparse.h:
-         Add initial support for reading VBRI headers as found in VBR files
-         created by some Fraunhofer encoders. Currently we only read the
-         number of frames and bytes (and calculate duration, etc from this)
-         but there is also a seek table that we currently don't use.
-
-2008-01-14 09:17:47 +0000  Mark Nauwelaerts <manauw@syknet.be>
-
-         ext/lame/gstlame.c: Correctly set number of channels when using mono-encoding mode and fix the duration calculation o...
-         Original commit message from CVS:
-         Patch by: Mark Nauwelaerts <manauw at syknet dot be>
-         * ext/lame/gstlame.c: (gst_lame_sink_setcaps),
-         (gst_lame_sink_event):
-         Correctly set number of channels when using mono-encoding mode
-         and fix the duration calculation of the EOS buffer.
-
-2008-01-14 09:13:29 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Guard against 0 values in the Xing header as frame count and byte count and c...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_handle_first_frame):
-         Guard against 0 values in the Xing header as frame count and
-         byte count and calculate the bitrate when we have all values
-         we need and not before.
-
-2008-01-14 09:09:49 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/xingheader/gstxingmux.c: Remove accidentially leftover debug printf.
-         Original commit message from CVS:
-         * gst/xingheader/gstxingmux.c: (generate_xing_header):
-         Remove accidentially leftover debug printf.
-
-2008-01-14 08:56:31 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/xingheader/gstxingmux.c: Choose smallest possible frame size for the Xing header, properly set the timestamp, dur...
-         Original commit message from CVS:
-         * gst/xingheader/gstxingmux.c: (has_xing_header),
-         (generate_xing_header), (gst_xing_mux_chain),
-         (gst_xing_mux_sink_event):
-         Choose smallest possible frame size for the Xing header, properly
-         set the timestamp, duration and offset on the outgoing buffers,
-         only send NEWSEGMENT events in BYTE format downstream and also
-         drop VBRI headers if already existing.
-
-2008-01-12 09:22:06 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/xingheader/: Major cleanup and rewrite of xingmux with less bugs and new features:
-         Original commit message from CVS:
-         * gst/xingheader/Makefile.am:
-         * gst/xingheader/gstxingmux.c: (parse_header), (get_xing_offset),
-         (has_xing_header), (generate_xing_header),
-         (gst_xing_mux_base_init), (gst_xing_mux_finalize), (xing_reset),
-         (gst_xing_mux_init), (gst_xing_mux_chain),
-         (gst_xing_mux_sink_event), (gst_xing_mux_change_state):
-         * gst/xingheader/gstxingmux.h:
-         Major cleanup and rewrite of xingmux with less bugs and new features:
-         - Handles other layers as 3
-         - Write TOC
-
-2008-01-10 17:24:09 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/mad/gstmad.c: Call g_type_class_ref() from a thread-safe context and not from the streaming thread to avoid GLib ...
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (GST_TYPE_MAD_MODE),
-         (GST_TYPE_MAD_EMPHASIS), (GST_TAG_EMPHASIS), (CHECK_HEADER):
-         Call g_type_class_ref() from a thread-safe context and not
-         from the streaming thread to avoid GLib screwing up (see
-         bug #349410 and #493432). Comment out unused code.
-
-2008-01-10 15:24:08 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/mpeg2dec/gstmpeg2dec.*: Add buffer clipping.
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c: (clear_queued), (flush_queued),
-         (handle_picture), (clip_buffer), (handle_slice),
-         (gst_mpeg2dec_chain), (gst_mpeg2dec_sink_event),
-         (gst_mpeg2dec_change_state):
-         * ext/mpeg2dec/gstmpeg2dec.h:
-         Add buffer clipping.
-         Add basic reverse playback support. Not complete yet when dealing with
-         non-closed GOPs.
-
-2008-01-10 12:28:19 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         autogen.sh: Add -Wno-portability to the automake parameters to stop warnings about GNU make extensions being used. We...
-         Original commit message from CVS:
-         * autogen.sh:
-         Add -Wno-portability to the automake parameters to stop warnings
-         about GNU make extensions being used. We require GNU make in almost
-         every Makefile anyway.
-         * configure.ac:
-         Use AM_PROG_CC_C_O as a compiler that accepts both -c and -o
-         at the same time is required for per target flags.
-
-2008-01-09 13:51:38 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         Makefile.am: Include lcov.mak to allow building coverage reports.
-         Original commit message from CVS:
-         * Makefile.am:
-         Include lcov.mak to allow building coverage reports.
-
-2008-01-08 19:42:38 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         Make sure that the Xing TOC starts with 0 and the entries are increasing over time. Otherwise it's broken and should ...
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (mpg123_parse_xing_header):
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_handle_first_frame):
-         Make sure that the Xing TOC starts with 0 and the entries
-         are increasing over time. Otherwise it's broken and should
-         be skipped. Fixes bug #507821.
-
-2008-01-08 16:31:29 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/gstasfdemux.*: Parse metadata object and extract pixel aspect ratio. Fixes #507844.
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (asfdemux_dbg), (gst_asf_demux_reset),
-         (gst_asf_demux_add_video_stream),
-         (gst_asf_demux_process_ext_content_desc),
-         (gst_asf_demux_get_metadata_for_stream),
-         (gst_asf_demux_process_metadata), (gst_asf_demux_process_object),
-         (gst_asf_demux_change_state):
-         * gst/asfdemux/gstasfdemux.h:
-         Parse metadata object and extract pixel aspect ratio. Fixes #507844.
-
-2007-12-31 21:41:52 +0000  David Schleef <ds@schleef.org>
-
-         docs/plugins/.cvsignore: Add *-undeclared.txt
-         Original commit message from CVS:
-         * docs/plugins/.cvsignore:
-         Add *-undeclared.txt
-
-2007-12-21 14:01:06 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/rdtmanager.*: Implement some more signals that rtspsrc connects to.
-         Original commit message from CVS:
-         * gst/realmedia/rdtmanager.c:
-         (gst_rdt_manager_marshal_VOID__UINT_UINT),
-         (gst_rdt_manager_class_init):
-         * gst/realmedia/rdtmanager.h:
-         Implement some more signals that rtspsrc connects to.
-         Fixes #504671.
-
-2007-12-18 09:07:53 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         Makefile.am: Include common/win32.mak for CRLF check of win32 project files (see #393626).
-         Original commit message from CVS:
-         * Makefile.am:
-         Include common/win32.mak for CRLF check of win32 project
-         files (see #393626).
-
-2007-12-13 11:20:11 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Don't post SEGMENT_START messages on the bus, only the element driving the pi...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_sink_event), (mp3parse_handle_seek):
-         Don't post SEGMENT_START messages on the bus, only the element
-         driving the pipeline should do that.
-
-2007-12-09 04:29:35 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         configure.ac: Don't define GST_DISABLE_DEPRECATED for releases. Fixes #498181.
-         Original commit message from CVS:
-         * configure.ac:
-         Don't define GST_DISABLE_DEPRECATED for releases. Fixes #498181.
-
-2007-12-03 19:05:20 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/mpeg2dec/gstmpeg2dec.h: Use G_GINT64_CONSTANT, fixes compilation with MSVC 6.0.
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.h:
-         Use G_GINT64_CONSTANT, fixes compilation with MSVC 6.0.
-         Fixes #500808.
-
-2007-11-20 12:15:51 +0000  Julien Moutte <julien@moutte.net>
-
-         gst/realmedia/rtspreal.c: Fix build on Mac OS X.
-         Original commit message from CVS:
-         2007-11-20  Julien MOUTTE  <julien@moutte.net>
-         * gst/realmedia/rtspreal.c: (rtsp_ext_real_parse_sdp): Fix build
-         on Mac OS X.
-
-2007-11-19 11:38:49 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Restore the segment handling logic.
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         Restore the segment handling logic.
-         Please don't do behavioural changes under the heading of 'leak fixes'
-         or 'whitespace changes', people.
-
-2007-11-19 09:50:58 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Plug some leaks.
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         Plug some leaks.
-
-2007-11-13 06:57:57 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         gst/asfdemux/gstasfdemux.c: Sync _activate_pull() a little more with other demuxers.
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c:
-         Sync _activate_pull() a little more with other demuxers.
-
-2007-11-11 20:41:32 +0000  Thijs Vermeir <thijsvermeir@gmail.com>
-
-         gst/mpegstream/gstmpegdemux.c: recognize the padding stream
-         Original commit message from CVS:
-         * gst/mpegstream/gstmpegdemux.c:
-         recognize the padding stream
-
-2007-10-31 14:33:03 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/gstasfdemux.c: Convert tags that come as string into the type required by
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_ext_content_desc):
-         Convert tags that come as string into the type required by
-         GstTagList.
-
-2007-10-30 12:27:32 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Remove some more broken code, it seems to clip even when it should not.
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_emit_frame):
-         Remove some more broken code, it seems to clip even when it should not.
-         See #491305.
-
-2007-10-30 11:13:49 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: When the element is not driving the streaming thread it is not supposed to em...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_emit_frame):
-         When the element is not driving the streaming thread it is not supposed
-         to emit EOS or post SEGMENT done. It is allowed to return UNEXPECTED
-         upstream when it detects EOS. See #491305.
-
-2007-10-13 15:13:34 +0000  Mark Nauwelaerts <mnauw@users.sourceforge.net>
-
-         gst/dvdsub/: Add dvd subtitle parser, which just packetizes the input stream. This is needed to mux dvd subtitles int...
-         Original commit message from CVS:
-         Patch by: Mark Nauwelaerts <mnauw at users.sourceforge.net>
-         * gst/dvdsub/Makefile.am:
-         * gst/dvdsub/gstdvdsubdec.c:
-         * gst/dvdsub/gstdvdsubparse.c:
-         * gst/dvdsub/gstdvdsubparse.h:
-         Add dvd subtitle parser, which just packetizes the input
-         stream. This is needed to mux dvd subtitles into matroska
-         files, since the muxer expects unfragmented and properly
-         timestamped input (#415754).
-
-2007-10-10 12:02:30 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         configure.ac: Update requirements from past CVS versions to released versions (0.10.14 in this case).
-         Original commit message from CVS:
-         * configure.ac:
-         Update requirements from past CVS versions to released
-         versions (0.10.14 in this case).
-         * ext/sidplay/gstsiddec.cc:
-         Fix compilation with g++-4.2.
-
-2007-10-08 17:51:33 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         gst/realmedia/: Fix some compiler warnings shown on Forte.
-         Original commit message from CVS:
-         * gst/realmedia/asmrules.c: (gst_asm_scan_parse_expression),
-         (gst_asm_scan_parse_condition):
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_video_packet):
-         Fix some compiler warnings shown on Forte.
-
-2007-10-05 08:51:44 +0000  Gautier Portet <kassoulet@gmail.com>
-
-         gst/xingheader/gstxingmux.c: The size of the Xing header is actually 417 as it's rounded to the next smaller integer....
-         Original commit message from CVS:
-         Patch by: Gautier Portet <kassoulet at gmail dot com>
-         * gst/xingheader/gstxingmux.c:
-         The size of the Xing header is actually 417 as it's rounded to the
-         next smaller integer. Fixes #397759.
-         * gst/xingheader/gstxingmux.c: (xing_generate_header),
-         (xing_push_header):
-         Some random cleanup, add FIXMEs and TODOs and check if the newsegment
-         event to the beginning was successful before pushing the header again.
-
-2007-09-29 17:11:16 +0000  Sébastien Moutte <sebastien@moutte.net>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Use gst_util_guint64_to_gdouble for conversions.
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3parse_time_to_bytepos),
-         (mp3parse_bytepos_to_time):
-         Use gst_util_guint64_to_gdouble for conversions.
-         * win32/vs6/libgstmad.dsp:
-         Add a link to libgstaudio.
-
-2007-09-26 13:40:35 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/lame/gstlame.c: Fix up case where there is no peer, in which case _get_allowed_caps() will return NULL.
-         Original commit message from CVS:
-         * ext/lame/gstlame.c:
-         Fix up case where there is no peer, in which case
-         _get_allowed_caps() will return NULL.
-
-2007-09-25 13:20:27 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/lame/gstlame.c: Use GST_PTR_FORMAT to print caps in debug statement.
-         Original commit message from CVS:
-         * ext/lame/gstlame.c:
-         Use GST_PTR_FORMAT to print caps in debug statement.
-
-2007-09-25 09:16:05 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         configure.ac: Use AG_GST_ARG_WITH_PLUGINS, AG_GST_ARG_ENABLE_EXTERNAL and
-         Original commit message from CVS:
-         * configure.ac:
-         Use AG_GST_ARG_WITH_PLUGINS, AG_GST_ARG_ENABLE_EXTERNAL and
-         AG_GST_ARG_ENABLE_EXPERIMENTAL instead of duplicating those macros
-         in configure.ac.
-
-2007-09-24 10:26:21 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         ext/lame/gstlame.c: Allow fixing the sample rate lame converts to by negotiating fixed sample rate on the src pad caps.
-         Original commit message from CVS:
-         * ext/lame/gstlame.c:
-         Allow fixing the sample rate lame converts to by negotiating fixed
-         sample rate on the src pad caps.
-         Add docs for it.
-         * tests/check/Makefile.am:
-         * tests/check/pipelines/lame.c:
-         Add a check for it.
-
-2007-09-22 18:22:12 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         po/: Updated translations.
-         Original commit message from CVS:
-         * po/LINGUAS:
-         * po/da.po:
-         Updated translations.
-
-2007-09-22 18:20:50 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         po/pl.po: Added Polish translation.
-         Original commit message from CVS:
-         translated by: Jakub Bogusz <qboosh@pld-linux.org>
-         * po/pl.po:
-         Added Polish translation.
-
-2007-09-22 18:19:08 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         po/fi.po: Added Finnish translation.
-         Original commit message from CVS:
-         translated by: Ilkka Tuohela <hile@iki.fi>
-         * po/fi.po:
-         Added Finnish translation.
-
-2007-09-22 18:17:52 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         po/es.po: Added Spanish translation.
-         Original commit message from CVS:
-         translated by: Jorge González González <aloriel@gmail.com>
-         * po/es.po:
-         Added Spanish translation.
-
-2007-09-22 18:17:08 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         po/bg.po: Added Bulgarian translation.
-         Original commit message from CVS:
-         translated by: Alexander Shopov <ash@contact.bg>
-         * po/bg.po:
-         Added Bulgarian translation.
-
-2007-09-20 11:47:52 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         gst/iec958/ac3iec.c: Chainup in finalize.
-         Original commit message from CVS:
-         * gst/iec958/ac3iec.c:
-         Chainup in finalize.
-         * tests/check/Makefile.am:
-         * tests/check/generic/states.c:
-         Improved state change unit test.
-
-2007-09-19 18:20:41 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         Ignore registries in any format.
-         Original commit message from CVS:
-         * docs/plugins/.cvsignore:
-         * tests/check/.cvsignore:
-         Ignore registries in any format.
-
-2007-09-08 20:54:54 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         configure.ac: Use AC_TRY_COMPILE instead of AC_TRY_RUN to check for a define in the lame headers.  This has the advan...
-         Original commit message from CVS:
-         * configure.ac:
-         Use AC_TRY_COMPILE instead of AC_TRY_RUN to check for a
-         define in the lame headers.  This has the advantage that
-         it should still work when we're cross-compiling (#452025).
-
-2007-08-24 15:55:03 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         gst/dvdlpcmdec/gstdvdlpcmdec.c: Add other allowed rates to the pad templates.
-         Original commit message from CVS:
-         * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-         Add other allowed rates to the pad templates.
-         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_dispose):
-         Reset the parser to release memory in dispose.
-
-2007-08-17 06:56:53 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         ext/: Fix more leaks.
-         Original commit message from CVS:
-         * ext/amrnb/amrnbdec.c:
-         * ext/amrnb/amrnbenc.c:
-         * ext/amrnb/amrnbparse.c:
-         * ext/sidplay/gstsiddec.cc:
-         Fix more leaks.
-
-2007-08-16 14:49:11 +0000  Daniel Charles <dcharles@ti.com>
-
-         ext/amrnb/amrnbenc.*: Add property to select the BandMode of the AMR encoder.
-         Original commit message from CVS:
-         Patch by: Daniel Charles <dcharles at ti dot com>
-         * ext/amrnb/amrnbenc.c: (gst_amrnbenc_bandmode_get_type),
-         (gst_amrnbenc_set_property), (gst_amrnbenc_get_property),
-         (gst_amrnbenc_base_init), (gst_amrnbenc_class_init),
-         (gst_amrnbenc_chain), (gst_amrnbenc_state_change):
-         * ext/amrnb/amrnbenc.h:
-         Add property to select the BandMode of the AMR encoder.
-         See #466442.
-
-2007-08-16 12:15:32 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         gst/realmedia/asmrules.c: Make ro memory to share.
-         Original commit message from CVS:
-         * gst/realmedia/asmrules.c:
-         Make ro memory to share.
-
-2007-08-16 11:52:57 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/mpegaudioparse/gstmpegaudioparse.*: Queue segment event and push it after we know the caps on the pad or else an ...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_sink_event), (gst_mp3parse_emit_frame):
-         * gst/mpegaudioparse/gstmpegaudioparse.h:
-         Queue segment event and push it after we know the caps on the pad or
-         else an autoplugger might not have plugged the element yet and the
-         segment is lost.
-
-2007-08-16 07:17:13 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         gst/iec958/ac3iec.c: Fix tests.
-         Original commit message from CVS:
-         * gst/iec958/ac3iec.c:
-         Fix tests.
-
-2007-08-16 06:48:13 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         tests/check/: Add generic state-change test suite to help to fi leaks.
-         Original commit message from CVS:
-         * tests/check/Makefile.am:
-         * tests/check/generic/.cvsignore:
-         * tests/check/generic/states.c:
-         Add generic state-change test suite to help to fi leaks.
-
-2007-08-09 10:57:11 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         po/: Added Portuguese (Brazilian) translation.
-         Original commit message from CVS:
-         translated by: Raphael Higino <phhigino@gmail.com>
-         * po/LINGUAS:
-         * po/pt_BR.po:
-         Added Portuguese (Brazilian) translation.
-
-2007-08-09 10:55:59 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         po/: Updated translations.
-         Original commit message from CVS:
-         * po/hu.po:
-         * po/nl.po:
-         * po/sv.po:
-         * po/uk.po:
-         Updated translations.
-
-2007-08-07 11:50:44 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/rmdemux.c: Activate timestamp fixing code.
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_fix_timestamp),
-         (gst_rmdemux_parse_video_packet):
-         Activate timestamp fixing code.
-
-2007-08-07 10:57:09 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/rmdemux.c: Do fragment collection in the demuxer so that we can now work with both ffmpeg and realvideo...
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_reset),
-         (gst_rmdemux_chain), (gst_rmdemux_parse_mdpr),
-         (gst_rmdemux_fix_timestamp), (gst_rmdemux_parse_video_packet),
-         (gst_rmdemux_parse_audio_packet), (gst_rmdemux_parse_packet):
-         Do fragment collection in the demuxer so that we can now work with
-         both ffmpeg and realvideodec to decoder real video content.
-
-2007-08-04 12:59:24 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         gst/realmedia/asmrules.c: Include stdlib.h.
-         Original commit message from CVS:
-         * gst/realmedia/asmrules.c:
-         Include stdlib.h.
-
-2007-08-03 16:21:19 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/rdtmanager.c: Fix caps.
-         Original commit message from CVS:
-         * gst/realmedia/rdtmanager.c:
-         Fix caps.
-
-2007-08-03 16:11:09 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/rtspreal.c: Disable UDP transport for now.
-         Original commit message from CVS:
-         * gst/realmedia/rtspreal.c: (rtsp_ext_real_get_transports),
-         (rtsp_ext_real_parse_sdp), (rtsp_ext_real_stream_select):
-         Disable UDP transport for now.
-
-2007-08-03 16:09:01 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/: Add simple rdt manager.
-         Original commit message from CVS:
-         * gst/realmedia/Makefile.am:
-         * gst/realmedia/rdtmanager.c: (find_session_by_id),
-         (create_session), (free_session), (gst_rdt_manager_base_init),
-         (gst_rdt_manager_marshal_BOXED__UINT_UINT),
-         (gst_rdt_manager_class_init), (gst_rdt_manager_init),
-         (gst_rdt_manager_finalize), (gst_rdt_manager_query_src),
-         (gst_rdt_manager_chain_rtp), (gst_rdt_manager_chain_rtcp),
-         (gst_rdt_manager_set_property), (gst_rdt_manager_get_property),
-         (gst_rdt_manager_provide_clock), (gst_rdt_manager_change_state),
-         (create_recv_rtp), (create_recv_rtcp), (create_rtcp),
-         (gst_rdt_manager_request_new_pad), (gst_rdt_manager_release_pad),
-         (gst_rdt_manager_plugin_init):
-         * gst/realmedia/rdtmanager.h:
-         * gst/realmedia/rmdemux.c: (plugin_init):
-         Add simple rdt manager.
-
-2007-08-03 14:19:50 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/rdtdepay.c: Fix the encoding-name so that it matches what the rtsp extension sets.
-         Original commit message from CVS:
-         * gst/realmedia/rdtdepay.c:
-         Fix the encoding-name so that it matches what the rtsp extension sets.
-
-2007-08-02 19:37:41 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/: Use g_hash_table_destroy instead of _unref which is too new.
-         Original commit message from CVS:
-         * gst/realmedia/asmrules.c: (gst_asm_node_free),
-         (gst_asm_node_evaluate), (gst_asm_scan_new), (gst_asm_scan_free),
-         (gst_asm_scan_string), (gst_asm_scan_number),
-         (gst_asm_scan_identifier), (gst_asm_scan_print_token),
-         (gst_asm_scan_next_token), (gst_asm_rule_free),
-         (gst_asm_rule_add_property), (gst_asm_scan_parse_operand),
-         (gst_asm_scan_parse_expression), (gst_asm_scan_parse_condition),
-         (gst_asm_scan_parse_property), (gst_asm_scan_parse_rule),
-         (gst_asm_rule_evaluate), (gst_asm_rule_book_new),
-         (gst_asm_rule_book_n_rules), (gst_asm_rule_book_free),
-         (gst_asm_rule_book_match), (main):
-         * gst/realmedia/rtspreal.c: (rtsp_ext_real_parse_sdp),
-         (rtsp_ext_real_stream_select), (gst_rtsp_real_plugin_init):
-         Use g_hash_table_destroy instead of _unref which is too new.
-
-2007-08-02 19:30:05 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/.cvsignore: Add test to ignore.
-         Original commit message from CVS:
-         * gst/realmedia/.cvsignore:
-         Add test to ignore.
-         * gst/realmedia/Makefile.am:
-         * gst/realmedia/asmrules.c: (gst_asm_node_new),
-         (gst_asm_node_free), (gst_asm_operator_eval),
-         (gst_asm_node_evaluate), (gst_asm_scan_new), (gst_asm_scan_free),
-         (gst_asm_scan_string), (gst_asm_scan_number),
-         (gst_asm_scan_identifier), (gst_asm_scan_print_token),
-         (gst_asm_scan_next_token), (gst_asm_rule_new), (gst_asm_rule_free),
-         (gst_asm_rule_add_property), (gst_asm_scan_parse_operand),
-         (gst_asm_scan_parse_expression), (gst_asm_scan_parse_condition),
-         (gst_asm_scan_parse_property), (gst_asm_scan_parse_rule),
-         (gst_asm_rule_evaluate), (gst_asm_rule_book_new),
-         (gst_asm_rule_book_n_rules), (gst_asm_rule_book_free),
-         (gst_asm_rule_book_match), (main):
-         * gst/realmedia/asmrules.h:
-         Added asembler rule book parser and evaluator.
-         * gst/realmedia/rtspreal.c: (rtsp_ext_real_parse_sdp),
-         (rtsp_ext_real_stream_select), (gst_rtsp_real_plugin_init):
-         * gst/realmedia/rtspreal.h:
-         Keep per stream config info.
-         Parse and evaluate asm rule books for stream selection.
-
-2007-07-31 19:16:44 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         gst/realmedia/rtspreal.c: Include stdlib.
-         Original commit message from CVS:
-         * gst/realmedia/rtspreal.c:
-         Include stdlib.
-
-2007-07-27 16:39:45 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/: Split out hash code in separate file.
-         Original commit message from CVS:
-         * gst/realmedia/Makefile.am:
-         * gst/realmedia/realhash.c: (hash), (call_hash),
-         (gst_rtsp_ext_real_calc_response_and_checksum):
-         * gst/realmedia/realhash.h:
-         * gst/realmedia/rtspreal.c: (rtsp_ext_real_get_transports),
-         (rtsp_ext_real_after_send), (rtsp_ext_real_stream_select):
-         Split out hash code in separate file.
-
-2007-07-27 10:12:55 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/: Fix include paths and link dependecies for rtsp extension.
-         Original commit message from CVS:
-         * gst/asfdemux/Makefile.am:
-         * gst/asfdemux/gstrtspwms.c: (gst_rtsp_wms_parse_sdp), (_do_init),
-         (gst_rtsp_wms_class_init):
-         * gst/realmedia/Makefile.am:
-         * gst/realmedia/rtspreal.c: (rtsp_ext_real_get_transports),
-         (rtsp_ext_real_before_send), (rtsp_ext_real_after_send),
-         (rtsp_ext_real_parse_sdp), (rtsp_ext_real_stream_select),
-         (_do_init), (gst_rtsp_real_class_init):
-         Fix include paths and link dependecies for rtsp extension.
-
-2007-07-26 15:52:43 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/: Add RealMedia RTSP extension module. It has rank NONE until it is fully functional.
-         Original commit message from CVS:
-         * gst/realmedia/Makefile.am:
-         * gst/realmedia/rmdemux.c: (plugin_init):
-         * gst/realmedia/rtspreal.c: (rtsp_ext_real_get_transports),
-         (rtsp_ext_real_before_send), (rtsp_ext_real_after_send), (hash),
-         (call_hash), (rtsp_ext_real_calc_response_and_checksum),
-         (rtsp_ext_real_parse_sdp), (rtsp_ext_real_stream_select),
-         (_do_init), (gst_rtsp_real_base_init), (gst_rtsp_real_class_init),
-         (gst_rtsp_real_init), (gst_rtsp_real_finalize),
-         (gst_rtsp_real_change_state), (gst_rtsp_real_extension_init),
-         (gst_rtsp_real_plugin_init):
-         * gst/realmedia/rtspreal.h:
-         Add RealMedia RTSP extension module. It has rank NONE until it is fully
-         functional.
-
-2007-07-25 18:38:42 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/asfdemux/: Move WMS RTSP extension from -good to here.
-         Original commit message from CVS:
-         * gst/asfdemux/Makefile.am:
-         * gst/asfdemux/gstasf.c: (plugin_init):
-         * gst/asfdemux/gstrtspwms.c: (gst_rtsp_wms_before_send),
-         (gst_rtsp_wms_after_send), (gst_rtsp_wms_parse_sdp),
-         (gst_rtsp_wms_configure_stream), (_do_init),
-         (gst_rtsp_wms_base_init), (gst_rtsp_wms_class_init),
-         (gst_rtsp_wms_init), (gst_rtsp_wms_finalize),
-         (gst_rtsp_wms_change_state), (gst_rtsp_wms_extension_init):
-         * gst/asfdemux/gstrtspwms.h:
-         Move WMS RTSP extension from -good to here.
-         Port it to the new pluggable extension interface.
-
-2007-07-24 06:58:41 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         ext/mad/Makefile.am: Link to audio helper from plugins-base.
-         Original commit message from CVS:
-         * ext/mad/Makefile.am:
-         Link to audio helper from plugins-base.
-
-2007-07-24 05:05:29 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         Use the new buffer clipping function from gstaudio here and require gst-plugins-base CVS.
-         Original commit message from CVS:
-         * configure.ac:
-         * ext/mad/gstmad.c: (gst_mad_chain):
-         Use the new buffer clipping function from gstaudio here and
-         require gst-plugins-base CVS.
-
-2007-07-23 09:07:19 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         configure.ac: Sync liboil check with plugins-base. Add libm check.
-         Original commit message from CVS:
-         * configure.ac:
-         Sync liboil check with plugins-base. Add libm check.
-         * gst/synaesthesia/Makefile.am:
-         Link against libm. We're using sqrt here.
-
-2007-07-20 07:58:25 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         gst/asfdemux/gstasfdemux.c: Include stdlib.
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c:
-         Include stdlib.
-
-2007-07-20 07:41:57 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         ext/annodex/Makefile.am: Fix CFLAGS/LIBS.
-         Original commit message from CVS:
-         * ext/annodex/Makefile.am:
-         Fix CFLAGS/LIBS.
-         * ext/cdio/gstcdiocddasrc.c:
-         * ext/libpng/gstpngdec.c: (gst_pngdec_task):
-         Include stdlib
-         * ext/cairo/Makefile.am:
-         * gst/videofilter/Makefile.am:
-         * tests/examples/level/Makefile.am:
-         Use $(LIBM) instead of -lm
-
-2007-07-18 17:51:55 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/mpegaudioparse/gstmpegaudioparse.*: Save some memory for each frame by only saving the start timestamp and start ...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_reset),
-         (gst_mp3parse_emit_frame), (mp3parse_handle_seek):
-         * gst/mpegaudioparse/gstmpegaudioparse.h:
-         Save some memory for each frame by only saving the start timestamp
-         and start byte position instead of additionally the stop timestamp
-         and stop byte position. This requires us to use a doubly-linked list
-         but still saves 8-12 bytes per frame.
-
-2007-07-16 09:14:18 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         ext/mad/gstmad.c: Fix buffer clipping to correctly clip to the segment stop.
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (clip_outgoing_buffer):
-         Fix buffer clipping to correctly clip to the segment stop.
-
-2007-07-15 19:39:46 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Fix a calculation that was causing mp3parse to drop every incoming frame when...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_emit_frame):
-         Fix a calculation that was causing mp3parse to drop every incoming
-         frame when upstream delivered a segment in TIME format, breaking
-         playback of all mpeg system streams.
-
-2007-07-13 16:46:35 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         Remove bogus check for libcheck, since we check for gstreamer-check and it pulls in the required info from and we wer...
-         Original commit message from CVS:
-         * Makefile.am:
-         * configure.ac:
-         * tests/Makefile.am:
-         Remove bogus check for libcheck, since we check for
-         gstreamer-check and it pulls in the required info from
-         and we weren't actually _using_ the information for
-         libcheck ourselves anyway.
-
-2007-07-13 16:27:56 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/mpegaudioparse/gstmpegaudioparse.*: Implement accurate seeking in mpegaudioparse. Fixes #308312.
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_reset),
-         (gst_mp3parse_init), (gst_mp3parse_dispose),
-         (gst_mp3parse_sink_event), (mp3parse_seek_table_last_entry),
-         (gst_mp3parse_emit_frame), (gst_mp3parse_chain),
-         (mp3parse_handle_seek), (mp3parse_src_query):
-         * gst/mpegaudioparse/gstmpegaudioparse.h:
-         Implement accurate seeking in mpegaudioparse. Fixes #308312.
-         Also implement segment seeks.
-
-2007-07-13 15:46:13 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         ext/mad/gstmad.*: Implement buffer clipping and use GST_BOILERPLATE instead of manual
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (_do_init), (gst_mad_init), (index_seek),
-         (normal_seek), (gst_mad_sink_event), (clip_outgoing_buffer),
-         (gst_mad_chain), (gst_mad_change_state):
-         * ext/mad/gstmad.h:
-         Implement buffer clipping and use GST_BOILERPLATE instead of manual
-         GType magic. Part one of bug #308312.
-
-2007-07-12 11:21:23 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         configure.ac: Use pkg-config to locate check.
-         Original commit message from CVS:
-         * configure.ac:
-         Use pkg-config to locate check.
-
-2007-07-11 23:18:14 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         Fix build against core CVS by not using deprecated API. Bump requirements for new API (overdue anyway).
-         Original commit message from CVS:
-         * configure.ac:
-         * ext/mpeg2dec/gstmpeg2dec.c: (crop_buffer):
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_descramble_buffer):
-         * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain_raw):
-         Fix build against core CVS by not using deprecated API. Bump
-         requirements for new API (overdue anyway).
-
-2007-07-09 06:05:48 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         REQUIREMENTS: Also add amr-libs here and update a little.
-         Original commit message from CVS:
-         * REQUIREMENTS:
-         Also add amr-libs here and update a little.
-
-2007-07-06 17:59:29 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         docs/plugins/inspect/: Add inspect file for synaesthesia so the docs can be built even if the plugin isn't built yet....
-         Original commit message from CVS:
-         * docs/plugins/inspect/plugin-dvdnav.xml:
-         * docs/plugins/inspect/plugin-realmedia.xml:
-         * docs/plugins/inspect/plugin-synaesthesia.xml:
-         Add inspect file for synaesthesia so the docs can be built even if
-         the plugin isn't built yet. Fixes #454311. Also add inspect files
-         for dvdnavsrc and realmedia.
-
-2007-07-05 08:44:30 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         docs/plugins/Makefile.am: Simplify --extra-dir as gtkdoc scans recursively.
-         Original commit message from CVS:
-         * docs/plugins/Makefile.am:
-         Simplify --extra-dir as gtkdoc scans recursively.
-
-2007-07-03 13:05:01 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         And yet more docs enabled.
-         Original commit message from CVS:
-         * docs/plugins/Makefile.am:
-         * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-         * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-         * gst/synaesthesia/Makefile.am:
-         * gst/synaesthesia/gstsynaesthesia.c:
-         * gst/synaesthesia/gstsynaesthesia.h:
-         And yet more docs enabled.
-
-2007-07-03 11:55:45 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         docs/plugins/: Add new docs. Scan c++ files too.
-         Original commit message from CVS:
-         * docs/plugins/Makefile.am:
-         * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-         * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-         * docs/plugins/inspect/plugin-a52dec.xml:
-         * docs/plugins/inspect/plugin-amrnb.xml:
-         * docs/plugins/inspect/plugin-asf.xml:
-         * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-         * docs/plugins/inspect/plugin-dvdsub.xml:
-         * docs/plugins/inspect/plugin-iec958.xml:
-         * docs/plugins/inspect/plugin-lame.xml:
-         * docs/plugins/inspect/plugin-mad.xml:
-         * docs/plugins/inspect/plugin-mpeg2dec.xml:
-         * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-         * docs/plugins/inspect/plugin-mpegstream.xml:
-         Add new docs. Scan c++ files too.
-         * ext/amrnb/amrnbdec.c: (gst_amrnbdec_base_init),
-         (gst_amrnbdec_event):
-         * ext/amrnb/amrnbenc.c: (gst_amrnbenc_base_init):
-         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_base_init),
-         (gst_amrnbparse_loop):
-         Add documentation headers.
-         * ext/mad/gstmad.c:
-         * ext/mad/gstmad.h:
-         Refactor for docs.
-
-2007-07-01 19:12:32 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Use GST_BOILERPLATE instead of manual GType magic.
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_base_init),
-         (gst_mp3parse_init):
-         Use GST_BOILERPLATE instead of manual GType magic.
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_handle_first_frame), (mp3parse_time_to_bytepos),
-         (mp3parse_bytepos_to_time):
-         * gst/mpegaudioparse/gstmpegaudioparse.h:
-         Implement seeking, byte->time, time->byte conversions with the Xing
-         seek table if available. This allows better at least a bit more
-         accurate seeks and file position reporting.
-
-2007-06-28 20:33:51 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Copy the complete Xing seek table in the 100 byte array instead of copying th...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_handle_first_frame):
-         Copy the complete Xing seek table in the 100 byte array instead of
-         copying the first byte 100 times.
-         * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3parse_total_bytes),
-         (mp3parse_total_time), (mp3parse_time_to_bytepos):
-         Add seeking support based on the Xing header but comment it out for
-         now as it seems to yield worse result than the other method.
-         Also use gst_pad_query_peer_duration() instead of getting the peer pad
-         ourself, creating a new GstQuery, etc.
-
-2007-06-25 12:46:47 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         docs/plugins/: Update docs with caps info.
-         Original commit message from CVS:
-         * docs/plugins/gst-plugins-ugly-plugins.args:
-         * docs/plugins/inspect/plugin-a52dec.xml:
-         * docs/plugins/inspect/plugin-amrnb.xml:
-         * docs/plugins/inspect/plugin-asf.xml:
-         * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-         * docs/plugins/inspect/plugin-dvdread.xml:
-         * docs/plugins/inspect/plugin-dvdsub.xml:
-         * docs/plugins/inspect/plugin-iec958.xml:
-         * docs/plugins/inspect/plugin-lame.xml:
-         * docs/plugins/inspect/plugin-mad.xml:
-         * docs/plugins/inspect/plugin-mpeg2dec.xml:
-         * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-         * docs/plugins/inspect/plugin-mpegstream.xml:
-         Update docs with caps info.
-
-2007-06-25 12:25:09 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         po/POTFILES.in: Make sure dvdnav strings get translated too (no reason not to have them in the .po file, even if the ...
-         Original commit message from CVS:
-         * po/POTFILES.in:
-         Make sure dvdnav strings get translated too (no reason not to have
-         them in the .po file, even if the plugin is disabled for now).
-         Fixes #450879.
-
-2007-06-25 11:46:24 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         ext/amrnb/: Add newsegment and discont handling. Some code cleanups.
-         Original commit message from CVS:
-         * ext/amrnb/amrnbdec.c: (gst_amrnbdec_base_init),
-         (gst_amrnbdec_event), (gst_amrnbdec_chain),
-         (gst_amrnbdec_state_change):
-         * ext/amrnb/amrnbdec.h:
-         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_base_init),
-         (gst_amrnbparse_loop):
-         Add newsegment and discont handling. Some code cleanups.
-
-2007-06-25 07:55:51 +0000  David Schleef <ds@schleef.org>
-
-         ext/dvdread/dvdreadsrc.c: check for an error from
-         Original commit message from CVS:
-         * ext/dvdread/dvdreadsrc.c: check for an error from
-         DVDReadBlocks() correctly.
-
-2007-06-25 07:22:10 +0000  David Schleef <ds@schleef.org>
-
-         ext/dvdread/dvdreadsrc.c: If we can't read a nav packet, or it doesn't look like a nav packet, that's an error.  Prev...
-         Original commit message from CVS:
-         * ext/dvdread/dvdreadsrc.c:
-         If we can't read a nav packet, or it doesn't look like a nav
-         packet, that's an error.  Previous behavior was to look at
-         the next packet; I can't find any justification for doing that.
-         Fixes: #358891.
-
-2007-06-23 22:57:29 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         po/it.po: Updated Italian translation.
-         Original commit message from CVS:
-         * po/it.po:
-         Updated Italian translation.
-
-2007-06-23 11:22:39 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         po/vi.po: Updated Vietnames translation.
-         Original commit message from CVS:
-         * po/vi.po:
-         Updated Vietnames translation.
-
-2007-06-23 11:21:54 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         po/: Added Chinese (simplified) translation.
-         Original commit message from CVS:
-         contributed by: Wenzheng Hu <db_lobster@163.com>
-         * po/LINGUAS:
-         * po/zh_CN.po:
-         Added Chinese (simplified) translation.
-
-2007-06-22 14:27:18 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         MAINTAINERS: Updating all the maintainers files
-         Original commit message from CVS:
-         * MAINTAINERS:
-         Updating all the maintainers files
-
-2007-06-22 10:57:06 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         Fix leaks some more.
-         Original commit message from CVS:
-         * ext/amrnb/amrnbdec.c: (gst_amrnbdec_init):
-         * gst/ac3parse/gstac3parse.c: (gst_ac3parse_init):
-         * gst/asfdemux/gstasfmux.c: (gst_asfmux_init):
-         * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_init):
-         * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_init):
-         * gst/iec958/ac3iec.c: (ac3iec_init):
-         * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_init):
-         Fix leaks some more.
-
-2007-06-21 14:33:58 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: "She's leaking me", said valgrind.
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_init):
-         "She's leaking me", said valgrind.
-
-2007-06-19 14:40:20 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Fix "pad caps are not a real subset of its template caps" warning.
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3_caps_create):
-         Fix "pad caps are not a real subset of its template caps" warning.
-
-2007-06-19 14:15:50 +0000  Laurent Glayal <spglegle@yahoo.fr>
-
-         ext/amrnb/amrnbdec.c: Don't leak the adapter, unref it in a new finalize method instead.
-         Original commit message from CVS:
-         Patch by: Laurent Glayal <spglegle at yahoo dot fr>
-         * ext/amrnb/amrnbdec.c: (gst_amrnbdec_class_init),
-         (gst_amrnbdec_finalize):
-         Don't leak the adapter, unref it in a new finalize method instead.
-         Fixes #448782.
-
-2007-06-19 10:43:26 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         configure.ac: Back to CVS
-         Original commit message from CVS:
-         * configure.ac:
-         Back to CVS
-         * gst-plugins-ugly.doap:
-         Add 0.10.6 to the list of releases.
-
-=== release 0.10.6 ===
-
-2007-06-19 10:31:04 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-         Release 0.10.6
-         Original commit message from CVS:
-         Release 0.10.6
-
-2007-06-19 10:21:25 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/cs.po:
-       * po/da.po:
-       * po/en_GB.po:
-       * po/hu.po:
-       * po/it.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/uk.po:
-       * po/vi.po:
-         Update .po files
-         Original commit message from CVS:
-         Update .po files
-
-2007-06-15 09:31:16 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         win32/vs6/: Convert line endings to CRLF and mark as binary files.
-         Original commit message from CVS:
-         * win32/vs6/gst_plugins_ugly.dsw:
-         * win32/vs6/libgstac3parse.dsp:
-         * win32/vs6/libgstasfdemux.dsp:
-         * win32/vs6/libgstdvdlpcmdec.dsp:
-         * win32/vs6/libgstdvdsub.dsp:
-         * win32/vs6/libgstiec958.dsp:
-         * win32/vs6/libgstlame.dsp:
-         * win32/vs6/libgstmad.dsp:
-         * win32/vs6/libgstmpegaudioparse.dsp:
-         * win32/vs6/libgstmpegstream.dsp:
-         * win32/vs6/libgstrealmedia.dsp:
-         * win32/vs6/libgstsynaesthesia.dsp:
-         Convert line endings to CRLF and mark as binary files.
-
-2007-06-13 14:29:39 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/dvdnav/dvdnavsrc.c: Don't forget to unlock when setting the device property, or we'll sooner or later deadlock.
-         Original commit message from CVS:
-         * ext/dvdnav/dvdnavsrc.c: (gst_dvd_nav_src_set_property):
-         Don't forget to unlock when setting the device property, or
-         we'll sooner or later deadlock.
-
-2007-06-12 21:46:10 +0000  Sébastien Moutte <sebastien@moutte.net>
-
-         gst/dvdsub/gstdvdsubdec.c: Use gst_util_guint64_to_gdouble for conversion.
-         Original commit message from CVS:
-         * gst/dvdsub/gstdvdsubdec.c:(gst_dvd_sub_dec_parse_subpic):
-         Use gst_util_guint64_to_gdouble for conversion.
-         * win32/vs6/libgstasfdemux.dsp:
-         Add asfpacket.c to the build.
-
-2007-06-08 08:39:43 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         gst/mpegaudioparse/gstmpegaudioparse.*: If the Xing header provides a total time, use it to calculate the correct ave...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_reset),
-         (gst_mp3parse_emit_frame), (gst_mp3parse_handle_first_frame):
-         * gst/mpegaudioparse/gstmpegaudioparse.h:
-         If the Xing header provides a total time, use it to calculate the
-         correct average bitrate immediately, instead of sending updates as
-         we parse the stream.
-
-2007-06-05 21:47:29 +0000  by Mark Nauwelaerts <manauw@skynet.be>
-
-         gst/dvdsub/gstdvdsubdec.c: Use GstClockTime instead of guint for a time variable to prevent overflows on too large su...
-         Original commit message from CVS:
-         Patch by by: Mark Nauwelaerts <manauw at skynet dot be>
-         * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_parse_subpic):
-         Use GstClockTime instead of guint for a time variable to prevent
-         overflows on too large subtitle durations. Fixes #444514.
-
-2007-05-31 22:33:26 +0000  Mark Nauwelaerts <manauw@skynet.be>
-
-         gst/dvdsub/gstdvdsubdec.c: Clear state when handling the serialized FLUSH_STOP event instead of the FLUSH_START event...
-         Original commit message from CVS:
-         Patch by: Mark Nauwelaerts <manauw at skynet be>
-         * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_sink_event):
-         Clear state when handling the serialized FLUSH_STOP event instead of
-         the FLUSH_START event, thereby making sure we don't free buffers the
-         chain function is still using. Fixes dvdsubdec crashing when flusing
-         or seeking (#442706).
-
-2007-05-23 11:16:09 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Initialise variable to make fc4 build bot happy.
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
-         Initialise variable to make fc4 build bot happy.
-
-2007-05-21 15:11:45 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/mpegstream/gstmpegdemux.c: Add sanity check so we don't abort for broken or non-MPEG streams, but instead error o...
-         Original commit message from CVS:
-         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer):
-         Add sanity check so we don't abort for broken or non-MPEG streams,
-         but instead error out. Fixes crashes/aborts for when our typefinder
-         wrongly identifies quicktime files as mpeg (which should be fixed in
-         -base now too). (#440120).
-
-2007-05-18 09:35:17 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-       * ChangeLog:
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbenc.c:
-       * ext/amrnb/amrnbparse.c:
-         ext/amrnb/amrnbdec.c (gst_amrnbdec_debug, GST_CAT_DEFAULT, block_size, _do_init, gst_amrnbdec_base_init, gst_amrnbdec...
-         Original commit message from CVS:
-         * ext/amrnb/amrnbdec.c (gst_amrnbdec_debug, GST_CAT_DEFAULT,
-         block_size, _do_init, gst_amrnbdec_base_init,
-         gst_amrnbdec_class_init, gst_amrnbdec_init):
-         * ext/amrnb/amrnbenc.c (gst_amrnbenc_debug, GST_CAT_DEFAULT, _do_init,
-         gst_amrnbenc_base_init, gst_amrnbenc_class_init, gst_amrnbenc_init):
-         * ext/amrnb/amrnbparse.c (gst_amrnbparse_debug, GST_CAT_DEFAULT,
-         block_size, _do_init, gst_amrnbparse_base_init,
-         gst_amrnbparse_class_init, gst_amrnbparse_init):
-         First round of cleanups, that use GST_BOILERPLATE, GST_ELEMENT_DETAILS,
-         GST_DEBUG_FUNCPTR and add log-category.
-
-2007-05-18 08:42:25 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         gst/mpegaudioparse/gstmpegaudioparse.*: Implement parsing of Xing headers from the first frame of the stream, and use...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (mp3_type_frame_length_from_header), (gst_mp3parse_reset),
-         (gst_mp3parse_emit_frame), (gst_mp3parse_handle_first_frame),
-         (gst_mp3parse_chain), (mp3parse_total_bytes),
-         (mp3parse_total_time):
-         * gst/mpegaudioparse/gstmpegaudioparse.h:
-         Implement parsing of Xing headers from the first frame of the stream,
-         and use it to report duration correctly where possible.
-
-2007-05-16 19:15:13 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/realmedia/rmdemux.c: After descrambling, push the packets out as individual packets instead of one big descramble...
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_descramble_cook_audio):
-         After descrambling, push the packets out as individual packets
-         instead of one big descrambled buffer. Makes cook audio decoding
-         work with the 'realaudiodec' decoder from gst-plugins-bad.
-
-2007-05-16 19:07:45 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/realmedia/rmdemux.*: Remember first timestamp encountered in stream and re-timestamp stream to start from zero (f...
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_init),
-         (gst_rmdemux_sink_event), (gst_rmdemux_perform_seek),
-         (gst_rmdemux_reset), (gst_rmdemux_chain), (gst_rmdemux_add_stream),
-         (gst_rmdemux_parse_packet):
-         * gst/realmedia/rmdemux.h:
-         Remember first timestamp encountered in stream and re-timestamp
-         stream to start from zero (fixes #397219); only send one newsegment
-         event, not two; when seeking, send newsegment events from the
-         streaming thread and not from the seeking thread.
-
-2007-05-16 12:48:43 +0000  Mark Nauwelaerts <manauw@skynet.be>
-
-         gst/mpegstream/: Reset last_flow values for the various streams after a flushing seek, otherwise we might aggregate w...
-         Original commit message from CVS:
-         Based on patch by: Mark Nauwelaerts  <manauw skynet be>
-         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_event):
-         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_class_init),
-         (gst_mpeg_demux_process_event), (gst_mpeg_streams_reset_last_flow):
-         * gst/mpegstream/gstmpegdemux.h:
-         Reset last_flow values for the various streams after a flushing
-         seek, otherwise we might aggregate wrong flow returns afterwards
-         that will make upstream pause silently. This should fix seeking
-         in DVDs and also fix the Thoggen cropping dialog (#438610).
-
-2007-05-07 13:51:43 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/gstasfdemux.*: Activate streams (ie. add the pads to the element) depending on whether we actually get d...
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_reset),
-         (gst_asf_demux_chain_headers),
-         (gst_asf_demux_parse_data_object_start), (all_streams_prerolled),
-         (gst_asf_demux_have_mutually_exclusive_active_stream),
-         (gst_asf_demux_check_activate_streams),
-         (gst_asf_demux_find_stream_with_complete_payload),
-         (gst_asf_demux_push_complete_payloads), (gst_asf_demux_loop),
-         (gst_asf_demux_activate_ext_props_streams),
-         (gst_asf_demux_process_object):
-         * gst/asfdemux/gstasfdemux.h:
-         Activate streams (ie. add the pads to the element) depending on
-         whether we actually get data for those streams within the ASF
-         preroll value specified. Currently only done in pull-mode though
-         (this will fix problems with playbin hanging on mms streams once
-         we use this in push-mode as well).
-
-2007-05-04 11:04:16 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/: Make all timestamps start from zero in pull-mode too; some small clean-ups and FIXMEs here and there.
-         Original commit message from CVS:
-         * gst/asfdemux/asfpacket.c: (gst_asf_payload_queue_for_stream):
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_reset),
-         (gst_asf_demux_init), (gst_asf_demux_push_complete_payloads),
-         (gst_asf_demux_process_file):
-         * gst/asfdemux/gstasfdemux.h:
-         Make all timestamps start from zero in pull-mode too; some small
-         clean-ups and FIXMEs here and there.
-
-2007-05-01 11:10:31 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/asfpacket.c: If packet size is specified within the packet and smaller than the actual packet size, don'...
-         Original commit message from CVS:
-         * gst/asfdemux/asfpacket.c: (gst_asf_demux_parse_payload),
-         (gst_asf_demux_parse_packet):
-         If packet size is specified within the packet and smaller than
-         the actual packet size, don't parse beyond the size specified in
-         the packet (this makes us parse some cases of packets with single
-         compressed payloads cleanly, see e.g stream from #431318). Also
-         add a sanity check when parsing compressed single payloads.
-
-2007-05-01 09:19:13 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/: Seeking improvements: honour the KEY_UNIT seek flag; after a seek, only send data from the keyframe ri...
-         Original commit message from CVS:
-         * gst/asfdemux/asfpacket.c: (gst_asf_payload_queue_for_stream):
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_seek_index_lookup),
-         (gst_asf_demux_handle_seek_event),
-         (gst_asf_demux_push_complete_payloads):
-         Seeking improvements: honour the KEY_UNIT seek flag; after a seek, only
-         send data from the keyframe right before the new segment start to
-         make sure the decoder doesn't have to decode more than absolutely
-         necessary.
-
-2007-04-30 15:36:00 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/: Implement payload extension system/extended replicated data parsing, so we can extract payload duratio...
-         Original commit message from CVS:
-         * gst/asfdemux/asfheaders.c:
-         * gst/asfdemux/asfheaders.h:
-         * gst/asfdemux/asfpacket.c:
-         (asf_payload_parse_replicated_data_extensions),
-         (gst_asf_demux_parse_payload):
-         * gst/asfdemux/asfpacket.h:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_free_stream),
-         (gst_asf_demux_push_complete_payloads),
-         (gst_asf_demux_process_ext_stream_props):
-         * gst/asfdemux/gstasfdemux.h:
-         Implement payload extension system/extended replicated data parsing,
-         so we can extract payload durations if they're specified.
-
-2007-04-30 11:41:22 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/: Refactor stream parse/activation a bit (stream activation heuristics are still the same though); some ...
-         Original commit message from CVS:
-         * gst/asfdemux/asfheaders.h:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_free_stream),
-         (gst_asf_demux_reset), (gst_asf_demux_parse_data_object_start),
-         (gst_asf_demux_loop), (gst_asf_demux_setup_pad),
-         (gst_asf_demux_add_audio_stream), (gst_asf_demux_activate_stream),
-         (gst_asf_demux_parse_stream_object),
-         (gst_asf_demux_process_ext_stream_props),
-         (gst_asf_demux_process_queued_extended_stream_objects),
-         (gst_asf_demux_activate_ext_props_streams),
-         (gst_asf_demux_process_object):
-         * gst/asfdemux/gstasfdemux.h:
-         Refactor stream parse/activation a bit (stream activation heuristics
-         are still the same though); some more clean-ups.
-
-2007-04-28 12:23:16 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         win32/common/.cvsignore: Ignore generated config.h file to make build bot happy.
-         Original commit message from CVS:
-         * win32/common/.cvsignore:
-         Ignore generated config.h file to make build bot happy.
-
-2007-04-28 10:49:17 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/: Init debug category before using it.
-         Original commit message from CVS:
-         * gst/asfdemux/gstasf.c: (plugin_init):
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init):
-         * gst/asfdemux/gstasfdemux.h:
-         Init debug category before using it.
-
-2007-04-27 18:39:21 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/gstasfdemux.c: Fix silly bug when we can't pull as much data as we want; don't forget to announce pendin...
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_pull_data),
-         (gst_asf_demux_push_complete_payloads), (gst_asf_demux_loop):
-         Fix silly bug when we can't pull as much data as we want; don't
-         forget to announce pending tags in the new packet parsing code.
-
-2007-04-25 17:23:33 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         Generate a win32 config.h into win32/common and add to MANIFEST so it gets disted (#393890). Looks like win32/common/...
-         Original commit message from CVS:
-         * configure.ac:
-         * win32/MANIFEST:
-         Generate a win32 config.h into win32/common and add to MANIFEST so
-         it gets disted (#393890). Looks like win32/common/config.h.in needs
-         some work though.
-
-2007-04-22 22:41:20 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/amrnb/amrnbparse.c: Fix pull mode operation some more: send newsegment event before sending data; handle EOS and ...
-         Original commit message from CVS:
-         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_get_type),
-         (gst_amrnbparse_class_init), (gst_amrnbparse_init),
-         (gst_amrnbparse_pull_header), (gst_amrnbparse_loop):
-         Fix pull mode operation some more: send newsegment event before
-         sending data; handle EOS and fatal flow returns a bit better; don't
-         leak buffers in some cases. Misc. minor cleanups. Fixes #431707.
-
-2007-04-20 20:57:56 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/: New packet parsing code: should put halfway decent timestamps on buffers, and might even set the appro...
-         Original commit message from CVS:
-         * gst/asfdemux/Makefile.am:
-         * gst/asfdemux/asfpacket.c: (asf_packet_read_varlen_int),
-         (asf_packet_create_payload_buffer),
-         (asf_payload_find_previous_fragment),
-         (gst_asf_payload_queue_for_stream), (gst_asf_demux_parse_payload),
-         (gst_asf_demux_parse_packet):
-         * gst/asfdemux/asfpacket.h:
-         * gst/asfdemux/gstasfdemux.c:
-         (gst_asf_demux_reset_stream_state_after_discont),
-         (gst_asf_demux_push_complete_payloads), (gst_asf_demux_loop),
-         (gst_asf_demux_setup_pad), (gst_asf_demux_descramble_buffer),
-         (gst_asf_demux_process_chunk):
-         * gst/asfdemux/gstasfdemux.h:
-         New packet parsing code: should put halfway decent timestamps on
-         buffers, and might even set the appropriate keyframe/discont buffer
-         flags from time to time (and even if it doesn't, I'm at least able
-         to debug this code); only used in pull-mode so far. Still needs
-         some more work, like payload extensions parsing and proper flow
-         aggregation, and stream activation based on preroll. Stay tuned.
-
-2007-04-20 17:32:00 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/: Some clean-ups and small fixes: rename asf_stream_context structure to
-         Original commit message from CVS:
-         * gst/asfdemux/asfheaders.h:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_free_stream),
-         (gst_asf_demux_seek_index_lookup),
-         (gst_asf_demux_handle_seek_event), (gst_asf_demux_get_stream),
-         (gst_asf_demux_setup_pad), (gst_asf_demux_add_video_stream),
-         (gst_asf_demux_process_ext_content_desc),
-         (gst_asf_demux_process_file), (gst_asf_demux_descramble_segment),
-         (gst_asf_demux_push_buffer), (gst_asf_demux_process_chunk),
-         (gst_asf_demux_process_segment), (gst_asf_demux_handle_data):
-         * gst/asfdemux/gstasfdemux.h:
-         Some clean-ups and small fixes: rename asf_stream_context structure to
-         AsfStream; inline some three-line utility functions that are only used
-         once anyway and get rid of their associated helper structs; make debug
-         category global so that it is used by the debug statements in the other
-         file as well; simplify gst_asf_demux_get_stream(); fix accidental
-         implicit initialisation of stream->last_buffer_timestamp to 0, which
-         would lead to missing timestamps on the first buffer; put fourcc format
-         into video caps to make certain proprietary wmv decoders happy (for the
-         case of WMVA in particular); play_time is offset by preroll as well, so
-         fix overreporting of duration for some files.
-
-2007-04-17 10:21:50 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/gstasfdemux.c: Printf format fixes.
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_seek_event),
-         (gst_asf_demux_pull_indices):
-         Printf format fixes.
-
-2007-04-16 16:30:50 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/mpegstream/gstmpegparse.c: Post an error message if EOS wasn't handled by anything downstream.
-         Original commit message from CVS:
-         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_process_event),
-         (gst_mpeg_parse_send_event):
-         Post an error message if EOS wasn't handled by anything downstream.
-         This should fix playbin freezing/hanging with small VobSub subtitle
-         files (background: not-linked flow returns from downstream are
-         ignored for a while at the beginning, so if the file is small
-         upstream will never get a not-linked flow return even if nothing
-         is connected downstream). (#429960).
-
-2007-04-16 15:15:07 +0000  Michael Smith <msmith@xiph.org>
-
-         ext/amrnb/amrnbparse.c: Rewrite terminally broken sinkpad activation code. and push mode activation doesn't leave the...
-         Original commit message from CVS:
-         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
-         (gst_amrnbparse_sink_activate),
-         (gst_amrnbparse_sink_activate_pull):
-         Rewrite terminally broken sinkpad activation code.
-         Now actually supports pull-mode activation (didn't before), and push
-         mode activation doesn't leave the sinkpad flushing.
-
-2007-04-12 13:38:03 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/: Make asfdemux work in pull mode where possible. If there's an index at the end of the file, read it an...
-         Original commit message from CVS:
-         * gst/asfdemux/asfheaders.c:
-         * gst/asfdemux/asfheaders.h:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_free_stream),
-         (gst_asf_demux_reset), (gst_asf_demux_init),
-         (gst_asf_demux_activate), (gst_asf_demux_activate_push),
-         (gst_asf_demux_activate_pull), (gst_asf_demux_sink_event),
-         (gst_asf_demux_seek_index_lookup),
-         (gst_asf_demux_reset_stream_state_after_discont),
-         (gst_asf_demux_handle_seek_event),
-         (gst_asf_demux_handle_src_event), (gst_asf_demux_chain_headers),
-         (gst_asf_demux_chain), (gst_asf_demux_pull_data),
-         (gst_asf_demux_pull_indices),
-         (gst_asf_demux_parse_data_object_start),
-         (gst_asf_demux_pull_headers), (gst_asf_demux_loop),
-         (gst_asf_demux_setup_pad), (gst_asf_demux_process_file),
-         (gst_asf_demux_process_simple_index),
-         (gst_asf_demux_process_object),
-         (gst_asf_demux_send_event_unlocked), (gst_asf_demux_push_buffer),
-         (gst_asf_demux_handle_data), (gst_asf_demux_change_state):
-         * gst/asfdemux/gstasfdemux.h:
-         Make asfdemux work in pull mode where possible. If there's an index
-         at the end of the file, read it and use it for seeking purposes.
-
-2007-04-12 10:19:18 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/synaesthesia/gstsynaesthesia.c: Some timestamp fixes.
-         Original commit message from CVS:
-         * gst/synaesthesia/gstsynaesthesia.c: (gst_synaesthesia_init),
-         (gst_synaesthesia_sink_setcaps), (gst_synaesthesia_src_setcaps),
-         (gst_synaesthesia_chain), (gst_synaesthesia_change_state):
-         Some timestamp fixes.
-         * gst/synaesthesia/synaescope.c: (synaescope_coreGo):
-         Fix for 64-bit machines.
-
-2007-04-12 10:10:22 +0000  René Stadler <mail@renestadler.de>
-
-         gst/realmedia/rmdemux.*: Make rmdemux handle any number of logical streams. Fixes #428698.
-         Original commit message from CVS:
-         Patch by: René Stadler <mail at renestadler dot de>
-         * gst/realmedia/rmdemux.c: (find_seek_offset_bytes),
-         (find_seek_offset_time), (gst_rmdemux_reset),
-         (gst_rmdemux_get_stream_by_id), (gst_rmdemux_send_event),
-         (gst_rmdemux_add_stream), (gst_rmdemux_combine_flows):
-         * gst/realmedia/rmdemux.h:
-         Make rmdemux handle any number of logical streams. Fixes #428698.
-
-2007-04-05 13:48:52 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * po/nl.po:
-         update dutch
-         Original commit message from CVS:
-         update dutch
-
-2007-04-05 13:48:12 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         po/: Added Danish translation.
-         Original commit message from CVS:
-         submitted by: Mogens Jaeger <mogens@jaeger.tf>
-         * po/LINGUAS:
-         * po/da.po:
-         Added Danish translation.
-
-2007-03-28 16:01:06 +0000  Zaheer Abbas Merali <zaheerabbas@merali.org>
-
-         po/.cvsignore: Add pot.
-         Original commit message from CVS:
-         * po/.cvsignore:
-         Add pot.
-
-2007-03-27 12:02:49 +0000  Julien Moutte <julien@moutte.net>
-
-         ext/mad/gstmad.c: Generate a perfect stream and try to adapt to incoming timestamps lack of precision up to half a fr...
-         Original commit message from CVS:
-         2007-03-27  Julien MOUTTE  <julien@moutte.net>
-         * ext/mad/gstmad.c: (gst_mad_chain): Generate a perfect
-         stream and try to adapt to incoming timestamps lack of
-         precision up to half a frame. This allows generating
-         a perfect stream even with muxed formats like FLV where
-         the timestamps are stored in milliseconds.
-
-2007-03-22 21:44:45 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/realmedia/rmdemux.c: Remove unused zlib.h include. Fixes #421594.
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c:
-         Remove unused zlib.h include. Fixes #421594.
-
-2007-03-21 12:53:57 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         ext/lame/gstlame.c: Disable the bitrate checking when the user has requested
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_setup):
-         Disable the bitrate checking when the user has requested
-         Free Format mode, as all bitrates less than the maximum
-         are valid then.
-
-2007-03-14 15:21:41 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         po/: Update translations.
-         Original commit message from CVS:
-         * po/hu.po:
-         * po/it.po:
-         * po/sv.po:
-         Update translations.
-
-2007-03-12 17:26:13 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         ext/mad/gstmad.c: When handling seeks, don't convert -1 start or stop values to a bogus byte position - pass them ups...
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (gst_mad_convert_sink), (gst_mad_convert_src):
-         When handling seeks, don't convert -1 start or stop values to a bogus
-         byte position - pass them upstream as -1.
-
-2007-03-12 10:47:01 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         gst/mpegaudioparse/gstmpegaudioparse.*: Implement seeking via average bitrate, and position+duration querying in mp3p...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (mp3_type_frame_length_from_header), (gst_mp3parse_reset),
-         (gst_mp3parse_init), (gst_mp3parse_sink_event),
-         (gst_mp3parse_emit_frame), (gst_mp3parse_chain),
-         (gst_mp3parse_change_state), (mp3parse_time_to_bytepos),
-         (mp3parse_bytepos_to_time), (mp3parse_total_bytes),
-         (mp3parse_total_time), (mp3parse_handle_seek),
-         (mp3parse_src_event), (mp3parse_src_query),
-         (mp3parse_get_query_types), (plugin_init):
-         * gst/mpegaudioparse/gstmpegaudioparse.h:
-         Implement seeking via average bitrate, and position+duration
-         querying in mp3parse. Later, it will support frame-accurate seeking by
-         building a seek table as it parses.
-         Add 'parsed=false' to the sink pad caps, and 'parsed=true' to the src
-         pad caps. Bump the priority to PRIMARY+1 so that it is autoplugged
-         before any extant MP3 decoder plugin. This allows us to remove framing
-         support from the decoders, if we want, and will provide them with
-         accurate seeking automatically once it is finished.
-         Fix the handling of MPEG-1 Layer 1 files.
-         Partially fix timestamping of packets arriving from a demuxer by
-         queueing the incoming timestamp until the next packet starts, rather
-         than applying it immediately to the next pushed buffer.
-
-2007-03-10 15:56:26 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/gstasfdemux.c: Printf format fix.
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_header_ext):
-         Printf format fix.
-
-2007-03-04 17:13:19 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         ext/cdio/gstcdiocddasrc.c: Make sure we always destroy our libcdio handle.
-         Original commit message from CVS:
-         * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_open),
-         (gst_cdio_cdda_src_finalize):
-         Make sure we always destroy our libcdio handle.
-
-2007-03-02 16:08:17 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/cdio/gstcdiocddasrc.c: Small code cleanups.
-         Original commit message from CVS:
-         * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_probe_devices),
-         (gst_cdio_cdda_src_read_sector), (gst_cdio_cdda_src_open),
-         (gst_cdio_cdda_src_finalize):
-         Small code cleanups.
-         Don't use pad_alloc as the base class cannot deal with the error codes.
-
-2007-03-02 13:01:48 +0000  Zaheer Abbas Merali <zaheermerali@gmail.com>
-
-         ext/mpeg2dec/gstmpeg2dec.c: Never post a (fatal) error message on the bus on decoding errors. We should only do this ...
-         Original commit message from CVS:
-         Patch by: Zaheer Abbas Merali  <zaheermerali at gmail com>
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_chain):
-         Never post a (fatal) error message on the bus on decoding errors. We
-         should only do this if we can't recover, but mpeg2dec can always
-         recover. This is needed for DVB streams, for example, where there
-         may be temporary glitches in the stream. Instead of an error
-         message, post a warning message on the bus for every N decoding
-         errors. Fixes #370020.
-
-2007-02-28 19:30:35 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         configure.ac: Convert to new AG_GST style.
-         Original commit message from CVS:
-         * configure.ac:
-         Convert to new AG_GST style.
-
-2007-02-28 18:41:38 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         ext/lame/gstlame.c: Display sensible defaults and limits for the vbr-min/max/mean properties. Fix the 'hard-limit' VB...
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_class_init), (gst_lame_init),
-         (gst_lame_setup):
-         Display sensible defaults and limits for the
-         vbr-min/max/mean properties. Fix the 'hard-limit' VBR min
-         property - it's supposed to be a boolean 0/1 value.
-
-2007-02-28 16:01:08 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         ext/lame/gstlame.c: Initialise the variables so gcc doesn't complain about possibly uninitialised uses, even though t...
-         Original commit message from CVS:
-         * ext/lame/gstlame.c:
-         Initialise the variables so gcc doesn't complain about possibly
-         uninitialised uses, even though they can't actually happen.
-
-2007-02-28 15:52:23 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/dvdlpcmdec/gstdvdlpcmdec.*: Implement all sample rates.
-         Original commit message from CVS:
-         * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcm_reset),
-         (update_timestamps), (parse_header), (gst_dvdlpcmdec_chain_dvd),
-         (gst_dvdlpcmdec_chain_raw), (dvdlpcmdec_sink_event):
-         * gst/dvdlpcmdec/gstdvdlpcmdec.h:
-         Implement all sample rates.
-         Implement sample permutation a little smarter avoiding a memcpy.
-         Fix timestamps, use segments, fix seeking.
-
-2007-02-28 15:49:35 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         Document siddec.
-         Original commit message from CVS:
-         * docs/plugins/Makefile.am:
-         * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-         * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-         * docs/plugins/inspect/plugin-siddec.xml:
-         * ext/sidplay/gstsiddec.cc:
-         * ext/sidplay/gstsiddec.h:
-         Document siddec.
-
-2007-02-21 16:02:33 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         ext/lame/gstlame.c: Fix up bitrate checking macro.  Make it give us a
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_sink_setcaps),
-         (gst_lame_set_property), (gst_lame_setup):
-         Fix up bitrate checking macro.  Make it give us a
-         GST_ELEMENT_WARNING message so the application has a chance of
-         reporting this to the user.  Move the checking to _setup, so we
-         are sure it runs in the READY state, when we hope to have a pipeline
-         and a bus that is not flushing.
-         This fixes e.g. using 96 kbit/sec as a bitrate.
-
-2007-02-15 19:55:55 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/gstasfdemux.*: Parse advanced mutual exclusion object and only add pads for 'hidden' streams (those in a...
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_file),
-         (gst_asf_demux_process_advanced_mutual_exclusion),
-         (gst_asf_demux_process_queued_extended_stream_objects),
-         (gst_asf_demux_process_object), (gst_asf_demux_change_state):
-         * gst/asfdemux/gstasfdemux.h:
-         Parse advanced mutual exclusion object and only add pads for
-         'hidden' streams (those in an extended stream header) that are
-         mutually exclusive with an already existing 'main stream' if
-         the broadcasting flag is not set. If the broadcasting flag is set,
-         assume that data for this stream isn't sent. (This should ideally be
-         solved better by making playbin more robust against this and/or by
-         making mmssrc send some information downstream about which streams
-         will be streamed). Fixes #353116.
-
-2007-02-13 12:00:59 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         gst/synaesthesia/: Move all the mutable engine state into a structure so that multiple element instances can run with...
-         Original commit message from CVS:
-         * gst/synaesthesia/gstsynaesthesia.c:
-         (gst_synaesthesia_class_init), (gst_synaesthesia_init),
-         (gst_synaesthesia_finalize), (gst_synaesthesia_chain):
-         * gst/synaesthesia/synaescope.c: (synaescope_coreGo),
-         (synaescope32), (synaescope_set_data), (synaesthesia_update),
-         (synaesthesia_init), (synaesthesia_new), (synaesthesia_close):
-         * gst/synaesthesia/synaescope.h:
-         Move all the mutable engine state into a structure so that
-         multiple element instances can run without interfering.
-
-2007-02-13 09:15:41 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         Add crossreferences to glib/gobject/gstream docs.
-         Original commit message from CVS:
-         * configure.ac:
-         * docs/plugins/Makefile.am:
-         Add crossreferences to glib/gobject/gstream docs.
-
-2007-02-12 12:46:20 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         gst/synaesthesia/: More source cleanups and add FIXME comments.
-         Original commit message from CVS:
-         * gst/synaesthesia/gstsynaesthesia.c: (gst_synaesthesia_init),
-         (gst_synaesthesia_sink_setcaps), (gst_synaesthesia_src_getcaps),
-         (gst_synaesthesia_src_setcaps), (gst_synaesthesia_chain),
-         (plugin_init):
-         * gst/synaesthesia/synaescope.c: (synaescope_coreGo),
-         (synaescope8):
-         More source cleanups and add FIXME comments.
-
-2007-02-11 13:42:45 +0000  Sébastien Moutte <sebastien@moutte.net>
-
-         gst/realmedia/rmdemux.c: Use gst_guint64_to_gdouble for conversions.
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c:(gst_rmdemux_parse_indx_data):
-         Use gst_guint64_to_gdouble for conversions.
-         * gst/synaesthesia/synaescope.c:
-         Define M_PI and do not include <pthread.h> and
-         <sys/time.h> for G_OS_WIN32
-         * win32/vs6/libgstrealmedia.dsp:
-         * win32/vs6/synaesthesia.dsp:
-         Update projects files.
-         * win32/common/config.h.in:
-         Add config.h.in for autogen of config.h
-
-2007-02-11 10:51:42 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         configure.ac: Add --enable-experimental support. Activate synaesthesia when building with --enable-experimental. Fix ...
-         Original commit message from CVS:
-         * configure.ac:
-         Add --enable-experimental support. Activate synaesthesia when building
-         with --enable-experimental. Fix --enable external configure switch
-         description.
-
-2007-02-09 16:24:45 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/lame/gstlame.*: On receiving EOS, we try to push a last buffer with the remaining samples. Don't do that if we go...
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_sink_event), (gst_lame_chain),
-         (gst_lame_change_state):
-         * ext/lame/gstlame.h:
-         On receiving EOS, we try to push a last buffer with the remaining
-         samples. Don't do that if we got an unclean flow return on the last
-         gst_pad_push(), downstream might not handle this very gracefully
-         (see #403168).
-         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
-         Pass flow returns upstream (helps #403168).
-
-2007-02-09 08:03:09 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         gst/synaesthesia/gstsynaesthesia.c: check result of gst_pad_push() in _chain.
-         Original commit message from CVS:
-         * gst/synaesthesia/gstsynaesthesia.c:
-         (gst_synaesthesia_class_init), (gst_synaesthesia_init),
-         (gst_synaesthesia_sink_setcaps), (gst_synaesthesia_src_getcaps),
-         (gst_synaesthesia_chain), (plugin_init):
-         check result of gst_pad_push() in _chain.
-
-2007-02-09 07:48:50 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         gst/synaesthesia/: Added docs (not yet added to gst-plugins-ugl/docs/plugins as plugin is not built by default). Fixe...
-         Original commit message from CVS:
-         * gst/synaesthesia/Makefile.am:
-         * gst/synaesthesia/gstsynaesthesia.c:
-         (gst_synaesthesia_class_init), (gst_synaesthesia_init),
-         (gst_synaesthesia_sink_setcaps), (gst_synaesthesia_src_getcaps),
-         (gst_synaesthesia_chain), (plugin_init):
-         * gst/synaesthesia/synaescope.c:
-         * gst/synaesthesia/synaescope.h:
-         Added docs (not yet added to gst-plugins-ugl/docs/plugins as plugin is not
-         built by default). Fixed Makefile.am. Fixed license headers (its GPL as it
-         is derived from GPL code). Fixed GST_SYNAESTHESIA_CLASS macro. Added
-         GST_DEBUG_FUNCPTR. Reflowed _setcaps. Updated pad setup in _init. Fix
-         possible leak in _chain. (#356882)
-
-2007-02-08 21:07:27 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/: Refactor and clean up header parsing and chain function a bit; get rid of some cruft; make header pars...
-         Original commit message from CVS:
-         * gst/asfdemux/asfheaders.c:
-         * gst/asfdemux/asfheaders.h:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_init),
-         (gst_asf_demux_sink_event), (gst_asf_demux_handle_seek_event),
-         (gst_asf_demux_identify_guid), (asf_demux_peek_object),
-         (gst_asf_demux_chain_headers), (gst_asf_demux_chain),
-         (gst_asf_demux_setup_pad), (gst_asf_demux_process_stream),
-         (gst_asf_demux_process_ext_content_desc),
-         (gst_asf_demux_get_object_header), (gst_asf_demux_process_header),
-         (gst_asf_demux_process_file), (gst_asf_demux_process_comment),
-         (gst_asf_demux_process_bitrate_props_object),
-         (gst_asf_demux_process_header_ext),
-         (gst_asf_demux_process_language_list),
-         (gst_asf_demux_process_ext_stream_props),
-         (gst_asf_demux_process_queued_extended_stream_objects),
-         (gst_asf_demux_process_object), (gst_asf_demux_change_state):
-         * gst/asfdemux/gstasfdemux.h:
-         Refactor and clean up header parsing and chain function a bit; get
-         rid of some cruft; make header parsing a tad more robust, fixing
-         #403188.
-
-2007-02-01 11:12:25 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/gstasfdemux.c: Post an error if we receive an EOS event while still waiting for the
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_sink_event):
-         Post an error if we receive an EOS event while still waiting for the
-         ASF header object to come through.
-
-2007-01-24 17:36:36 +0000  Xavier B <xavierb@gmail.com>
-
-         gst/asfdemux/gstasfdemux.c: Guard places where we assume that a certain amount of data is available better against le...
-         Original commit message from CVS:
-         Patch by: Xavier B. <xavierb gmail com>
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_get_guid),
-         (gst_asf_demux_add_audio_stream), (gst_asf_demux_add_video_stream),
-         (gst_asf_demux_process_ext_content_desc),
-         (gst_asf_demux_process_data),
-         (gst_asf_demux_process_language_list),
-         (gst_asf_demux_process_ext_stream_props),
-         (gst_asf_demux_process_segment), (gst_asf_demux_handle_data):
-         Guard places where we assume that a certain amount of data is
-         available better against less data being available (should fix
-         infamous assertion crasher bug #336370). Also fixes a small
-         memory leak.
-
-2007-01-11 12:49:23 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/realmedia/: Add demuxer for RealAudio files (#349779).
-         Original commit message from CVS:
-         * gst/realmedia/Makefile.am:
-         * gst/realmedia/rademux.c:
-         * gst/realmedia/rademux.h:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
-         (gst_rmdemux_descramble_dnet_audio), (gst_rmdemux_plugin_init):
-         * gst/realmedia/rmutils.c: (gst_rm_utils_descramble_dnet_buffer):
-         * gst/realmedia/rmutils.h:
-         Add demuxer for RealAudio files (#349779).
-
-2007-01-07 13:37:19 +0000  Sébastien Moutte <sebastien@moutte.net>
-
-         Makefile.am: Add win32/MANIFEST to EXTRA_DIST so win32 files will be include in the next release.
-         Original commit message from CVS:
-         * Makefile.am:
-         Add win32/MANIFEST to EXTRA_DIST so win32 files will
-         be include in the next release.
-         * win32/MANIFEST:
-         Remove win32/common/config.h is which is not autogenerated yet.
-
-2006-12-30 20:01:35 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         ext/lame/gstlame.c: warn when outgoing sample rate is different from incoming
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_sink_setcaps), (gst_lame_chain):
-         warn when outgoing sample rate is different from incoming
-
-2006-12-29 14:51:19 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: All sample-rates < 32khz come from the LSF extensions, which only use 1 granu...
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
-         All sample-rates < 32khz come from the LSF extensions, which only
-         use 1 granule. Fixes parsing of 22.05khz, 24khz and 16khz files.
-         Use gst_util_uint64_scale because we can.
-
-2006-12-22 13:06:24 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         tests/check/elements/amrnbenc.c: and fix compilation of this test
-         Original commit message from CVS:
-         * tests/check/elements/amrnbenc.c: (setup_amrnbenc),
-         (cleanup_amrnbenc):
-         and fix compilation of this test
-
-2006-12-22 12:41:52 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         tests/check/elements/: re-apply as it was -bad and not -ugly that is frozen, doh
-         Original commit message from CVS:
-         * tests/check/elements/amrnbenc.c: (setup_amrnbenc),
-         (cleanup_amrnbenc):
-         * tests/check/elements/mpeg2dec.c: (setup_mpeg2dec),
-         (cleanup_mpeg2dec):
-         re-apply as it was -bad and not -ugly that is frozen, doh
-
-2006-12-21 12:50:00 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         tests/check/elements/: revert my freeze breakage
-         Original commit message from CVS:
-         * tests/check/elements/amrnbenc.c: (setup_amrnbenc),
-         (cleanup_amrnbenc):
-         * tests/check/elements/mpeg2dec.c: (setup_mpeg2dec),
-         (cleanup_mpeg2dec):
-         revert my freeze breakage
-
-2006-12-21 08:16:41 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         gst/asfdemux/gstasfdemux.c: add a comment about a future change
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c:
-         (gst_asf_demux_get_gst_tag_from_tag_name),
-         (gst_asf_demux_process_ext_content_desc):
-         add a comment about a future change
-         * tests/check/elements/amrnbenc.c: (setup_amrnbenc),
-         (cleanup_amrnbenc):
-         * tests/check/elements/mpeg2dec.c: (setup_mpeg2dec),
-         (cleanup_mpeg2dec):
-         consistent pad (de)activation
-
-2006-12-15 18:26:41 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/gstasfdemux.c: Update query_types function too.
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_get_src_query_types):
-         Update query_types function too.
-
-2006-12-15 18:25:17 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/realmedia/rmdemux.c: Implement SEEKING query, make query function thread-safe.
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_src_query),
-         (gst_rmdemux_src_query_types):
-         Implement SEEKING query, make query function thread-safe.
-
-2006-12-15 17:59:47 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/realmedia/rmdemux.c: Use alignment-safe macros here too (subbuffers ...); guard against hypothetical memory acces...
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_descramble_dnet_audio):
-         Use alignment-safe macros here too (subbuffers ...); guard against
-         hypothetical memory access beyond our given buffer in the case
-         where the buffer size is not a multiple of 2.
-
-2006-12-15 17:54:48 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/gstasfdemux.*: Don't crash in the seek event handling code when playtime is 0, as may be the case with l...
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_seek_event),
-         (gst_asf_demux_process_data), (gst_asf_demux_process_file),
-         (gst_asf_demux_handle_src_query), (gst_asf_demux_change_state):
-         * gst/asfdemux/gstasfdemux.h:
-         Don't crash in the seek event handling code when playtime is 0,
-         as may be the case with live streams (#386218). Implement SEEKING
-         query so applications can query seekability without second-guessing
-         based on whether we have a duration or not.
-
-2006-12-15 11:12:21 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         add doap file
-         Original commit message from CVS:
-         * Makefile.am:
-         * gst-plugins-ugly.doap:
-         * gst-plugins-ugly.spec.in:
-         add doap file
-
-2006-12-14 12:05:49 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/mpegstream/gstmpegparse.c: Use our alignment-safe macros here too, since we can't assume that
-         Original commit message from CVS:
-         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead):
-         Use our alignment-safe macros here too, since we can't assume that
-         GST_BUFFER_DATA is aligned (these are subbuffers we're dealing with
-         here).
-
-2006-12-14 11:49:39 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/realmedia/rmdemux.c: Also, don't read the index for a stream a second time when operating in pull-mode and reachi...
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_indx_data):
-         Also, don't read the index for a stream a second time when
-         operating in pull-mode and reaching the end of the file.
-
-2006-12-14 11:25:00 +0000  Roland Kay <roland.kay@ox.compsoc.net>
-
-         gst/realmedia/rmdemux.c: Don't leak stream index (#385292).
-         Original commit message from CVS:
-         Patch by: Roland Kay  <roland.kay at ox compsoc net>
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_reset):
-         Don't leak stream index (#385292).
-
-2006-12-14 10:15:24 +0000  Roland Kay <roland.kay@ox.compsoc.net>
-
-         ext/lame/gstlame.*: Fix leak (by calling lame_init_params() before lame_close()); handle
-         Original commit message from CVS:
-         Based on patch by: Roland Kay  <roland.kay at ox compsoc net>
-         * ext/lame/gstlame.c: (gst_lame_init), (gst_lame_chain),
-         (gst_lame_setup):
-         * ext/lame/gstlame.h:
-         Fix leak (by calling lame_init_params() before lame_close()); handle
-         NULL return from lame_init() more gracefully. Fixes #385311.
-
-2006-12-14 09:57:12 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         configure.ac: Back to CVS
-         Original commit message from CVS:
-         * configure.ac:
-         Back to CVS
-
-=== release 0.10.5 ===
-
-2006-12-13 21:04:12 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-         Release 0.10.5
-         Original commit message from CVS:
-         Release 0.10.5
-
-2006-12-12 21:09:16 +0000  David Schleef <ds@schleef.org>
-
-         gst/mpegstream/gstmpegparse.c: Use the GST_READ macro I meant to in the previous checkin.  see #385192.  You can have...
-         Original commit message from CVS:
-         * gst/mpegstream/gstmpegparse.c: Use the GST_READ macro I meant
-         to in the previous checkin.  see #385192.  You can have your
-         cheese back now.
-
-2006-12-12 20:56:58 +0000  David Schleef <ds@schleef.org>
-
-         gst/mpegstream/gstmpegparse.c: Fix unaligned load that loads from the dereferenced integer, not the pointer itself.  ...
-         Original commit message from CVS:
-         * gst/mpegstream/gstmpegparse.c: Fix unaligned load that loads
-         from the dereferenced integer, not the pointer itself.  Fixes
-         #385192.
-         I'm takin ur cheese!
-
-2006-12-12 10:29:32 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-       * ChangeLog:
-         ChangeLog surgery: fix bug number
-         Original commit message from CVS:
-         ChangeLog surgery: fix bug number
-
-2006-12-12 10:24:40 +0000  Roland Kay <roland.kay@ox.compsoc.net>
-
-         gst/realmedia/rmdemux.c: For version 4 streams, read the extra codec data size from the header instead of assuming it...
-         Original commit message from CVS:
-         Based on patch by: Roland Kay  <roland.kay at ox compsoc net>
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_mdpr):
-         For version 4 streams, read the extra codec data size from the
-         header instead of assuming it is always 16 (also read it from the
-         right position) (#384989). For version 4 and 5 streams, check that
-         the specified extra codec data size doesn't make us read beyond the
-         chunk boundary (#384989).
-
-2006-12-10 21:27:03 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-       * po/af.po:
-       * po/az.po:
-       * po/cs.po:
-       * po/en_GB.po:
-       * po/hu.po:
-       * po/it.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/uk.po:
-       * po/vi.po:
-         Update .po files
-         Original commit message from CVS:
-         Update .po files
-
-2006-11-21 12:33:25 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/mpeg2dec/gstmpeg2dec.c: Cosmetic changes: fix misleading debug statement, update comment, add cast.
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_alloc_sized_buf):
-         Cosmetic changes: fix misleading debug statement, update
-         comment, add cast.
-
-2006-11-21 12:15:58 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         ext/mpeg2dec/gstmpeg2dec.*: Align buffers to a 16 byte boundary so the altivec optimisations don't crash. Fixes #327350.
-         Original commit message from CVS:
-         Patch by: Sebastian Dröge  <slomo@circular-chaos.org>
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
-         (gst_mpeg2dec_reset), (gst_mpeg2dec_alloc_sized_buf),
-         (gst_mpeg2dec_alloc_buffer), (init_dummybuf), (handle_slice):
-         * ext/mpeg2dec/gstmpeg2dec.h:
-         Align buffers to a 16 byte boundary so the altivec optimisations
-         don't crash. Fixes #327350.
-
-2006-11-20 15:52:42 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/gstasfdemux.c: The availability of extra codec data isn't something that warrants debug messages at WARN...
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_audio_stream):
-         The availability of extra codec data isn't something that
-         warrants debug messages at WARNING level (see #376958).
-
-2006-11-19 13:08:30 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/mpegstream/: Fix flow value combination; this fixes playbin/totem locking up if a VobSub file is specified as sub...
-         Original commit message from CVS:
-         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_base_init),
-         (gst_dvd_demux_class_init), (gst_dvd_demux_combine_flows),
-         (gst_dvd_demux_send_subbuffer):
-         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_class_init),
-         (gst_mpeg_demux_init_stream), (gst_mpeg_demux_parse_packet),
-         (gst_mpeg_demux_parse_pes), (gst_mpeg_demux_combine_flows),
-         (gst_mpeg_demux_send_subbuffer):
-         * gst/mpegstream/gstmpegdemux.h:
-         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_process_event),
-         (gst_mpeg_parse_chain):
-         Fix flow value combination; this fixes playbin/totem locking up if
-         a VobSub file is specified as subtitle file (#334322). Flow value
-         combination should only happen once we are fairly sure we've got all
-         pads that are available for now. Since there isn't a well-specified
-         time when this is the case in MPEG, we'll just assume this is the
-         case once there has been a certain number of packets for each
-         stream we've found so far.
-
-2006-11-15 13:57:21 +0000  Jan Arne Petersen <jpetersen@jpetersen.org>
-
-         ext/mpeg2dec/gstmpeg2dec.c: Simplify the framerate code and support more framerates. Fixes #361584.
-         Original commit message from CVS:
-         Patch by: Jan Arne Petersen <jpetersen at jpetersen dot org>
-         * ext/mpeg2dec/gstmpeg2dec.c: (handle_sequence), (handle_slice):
-         Simplify the framerate code and support more framerates. Fixes #361584.
-
-2006-11-15 11:41:39 +0000  Sebastian Dröge <slomo@circular-chaos.org>
-
-         ext/mpeg2dec/gstmpeg2dec.c: Fix minor memleak when creating pads from static pad templates (#369627).
-         Original commit message from CVS:
-         Patch by: Sebastian Dröge  <slomo@circular-chaos.org>
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init):
-         Fix minor memleak when creating pads from static pad templates (#369627).
-         * tests/check/Makefile.am:
-         * tests/check/elements/.cvsignore:
-         * tests/check/elements/mpeg2dec.c: (setup_mpeg2dec),
-         (cleanup_mpeg2dec), (GST_START_TEST), (mpeg2dec_suite), (main):
-         Add unit tests for mpeg2dec (#369627).
-
-2006-11-14 10:31:11 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-       * ChangeLog:
-         give credit
-         Original commit message from CVS:
-         give credit
-
-2006-11-14 10:29:37 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/lame/gstlame.*: Make lame timestamp flushed eos buffer by some additional timestamp accounting. Fixes #374760.
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_sink_event), (gst_lame_chain),
-         (gst_lame_change_state):
-         * ext/lame/gstlame.h:
-         Make lame timestamp flushed eos buffer by some additional timestamp
-         accounting. Fixes #374760.
-
-2006-11-13 17:01:15 +0000  Michael Smith <msmith@xiph.org>
-
-         gst/mpegaudioparse/gstmpegaudioparse.*: Make timestamp handling in mp3parse saner; now works for at least simple cases.
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (mp3_type_frame_length_from_header), (gst_mp3parse_reset),
-         (gst_mp3parse_init), (gst_mp3parse_dispose),
-         (gst_mp3parse_sink_event), (gst_mp3parse_chain), (head_check),
-         (gst_mp3parse_change_state):
-         * gst/mpegaudioparse/gstmpegaudioparse.h:
-         Make timestamp handling in mp3parse saner; now works for at least
-         simple cases.
-
-2006-11-13 16:23:22 +0000  Michael Smith <msmith@xiph.org>
-
-         gst/mpegaudioparse/: Bring mp3parse into the 21st century.
-         Original commit message from CVS:
-         * gst/mpegaudioparse/Makefile.am:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (mp3_type_frame_length_from_header), (gst_mp3parse_class_init),
-         (gst_mp3parse_reset), (gst_mp3parse_init), (gst_mp3parse_dispose),
-         (gst_mp3parse_sink_event), (gst_mp3parse_chain), (head_check),
-         (gst_mp3parse_change_state), (plugin_init):
-         * gst/mpegaudioparse/gstmpegaudioparse.h:
-         Bring mp3parse into the 21st century.
-         Use its own debug category, use gstadapter, format nicely to 80
-         columns, and fix incorrect handling of 32 kHz and less files.
-
-2006-11-03 09:52:12 +0000  Sebastian Droege <slomo@ubuntu.com>
-
-         ext/mpeg2dec/gstmpeg2dec.*: libmpeg2 requires its output buffers to start at a 16byte aligned address or the altivec ...
-         Original commit message from CVS:
-         Patch by: Sebastian Droege <slomo at ubuntu dot com>
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_finalize),
-         (gst_mpeg2dec_alloc_buffer), (init_dummybuf), (handle_slice):
-         * ext/mpeg2dec/gstmpeg2dec.h:
-         libmpeg2 requires its output buffers to start at a 16byte aligned
-         address or the altivec optimizations will explode.
-
-2006-11-02 14:43:11 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/cdio/: Move CD-TEXT utility function into common file so it can also be used by a future cdioparanoiasrc.
-         Original commit message from CVS:
-         * ext/cdio/gstcdio.c: (gst_cdio_get_cdtext):
-         * ext/cdio/gstcdio.h:
-         * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_open):
-         Move CD-TEXT utility function into common file so it can also be
-         used by a future cdioparanoiasrc.
-
-2006-10-19 10:17:14 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/dvdread/dvdreadsrc.c: Use dsi_pack.dsi_gi.vobu_ea correctly, add some more debugging information (fixes #340433).
-         Original commit message from CVS:
-         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_read):
-         Use dsi_pack.dsi_gi.vobu_ea correctly, add some more debugging
-         information (fixes #340433).
-
-2006-10-16 18:07:23 +0000  Josep Torra Valles <josep@fluendo.com>
-
-         gst/: Misc. fixes for problems discovered by Forte (different return types in function declaration and definition, po...
-         Original commit message from CVS:
-         Patch by: Josep Torra Valles  <josep at fluendo com>
-         * gst/iec958/ac3_padder.c: (ac3p_init):
-         * gst/mpegstream/gstmpegparse.c:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_parse__rmf),
-         (gst_rmdemux_parse_prop), (gst_rmdemux_parse_mdpr),
-         (gst_rmdemux_parse_indx), (gst_rmdemux_parse_indx_data),
-         (gst_rmdemux_parse_data), (gst_rmdemux_parse_cont),
-         (gst_rmdemux_parse_packet):
-         Misc. fixes for problems discovered by Forte (different return types
-         in function declaration and definition, pointer arithmetics with
-         void pointers). Fixes #362639.
-
-2006-10-13 19:11:26 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/dvdread/dvdreadsrc.c: Don't announce audio or subtitle streams that aren't really present, it makes dvddemux crea...
-         Original commit message from CVS:
-         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_goto_title):
-         Don't announce audio or subtitle streams that aren't really present,
-         it makes dvddemux create pads that will never carry any data, which
-         is not good.
-
-2006-10-13 14:45:11 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/lame/gstlame.c: Round up not allowed bitrates to the next higher allowed one (Closes: #361140).
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_set_property):
-         Round up not allowed bitrates to the next higher allowed one
-         (Closes: #361140).
-
-2006-10-13 14:19:24 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         Add docs for lame and lame to docs. Specify allowed bitrates in the properties description (#361140). Canonicalise ob...
-         Original commit message from CVS:
-         * docs/plugins/Makefile.am:
-         * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-         * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
-         * ext/lame/gstlame.c: (gst_lame_class_init):
-         * ext/lame/gstlame.h:
-         Add docs for lame and lame to docs. Specify allowed bitrates
-         in the properties description (#361140). Canonicalise object
-         property names (ie. use hyphen instead of underscore).
-         * docs/plugins/inspect/plugin-a52dec.xml:
-         * docs/plugins/inspect/plugin-amrnb.xml:
-         * docs/plugins/inspect/plugin-asf.xml:
-         * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-         * docs/plugins/inspect/plugin-dvdread.xml:
-         * docs/plugins/inspect/plugin-dvdsub.xml:
-         * docs/plugins/inspect/plugin-iec958.xml:
-         * docs/plugins/inspect/plugin-lame.xml:
-         * docs/plugins/inspect/plugin-mad.xml:
-         * docs/plugins/inspect/plugin-mpeg2dec.xml:
-         * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-         * docs/plugins/inspect/plugin-mpegstream.xml:
-         * docs/plugins/inspect/plugin-siddec.xml:
-         Update version to CVS.
-
-2006-10-13 10:00:27 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         Add i18n magic to lame plugin. Throw decent error message when we fail to setup the encoder (#361140, 361151); misc. ...
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_sink_setcaps),
-         (gst_lame_set_property), (gst_lame_get_property), (gst_lame_chain),
-         (plugin_init):
-         * po/POTFILES.in:
-         Add i18n magic to lame plugin. Throw decent error message when we
-         fail to setup the encoder (#361140, 361151); misc. minor clean-ups.
-
-2006-10-10 17:02:05 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/rdtdepay.c: Change caps to x-rdt, because it's not x-rtp.
-         Original commit message from CVS:
-         * gst/realmedia/rdtdepay.c: (gst_rdt_depay_base_init),
-         (gst_rdt_depay_init), (gst_rdt_depay_setcaps),
-         (gst_rdt_depay_chain), (gst_rdt_depay_change_state):
-         Change caps to x-rdt, because it's not x-rtp.
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
-         (gst_rmdemux_parse_mdpr), (gst_rmdemux_parse_packet),
-         (gst_rmdemux_plugin_init):
-         Activate pad before adding to the element.
-         Return the combined stream return values after pad_alloc.
-
-2006-10-10 16:58:32 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/mpeg2dec/gstmpeg2dec.*: Add some debugging to timestamp handling.
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c: (handle_slice):
-         * ext/mpeg2dec/gstmpeg2dec.h:
-         Add some debugging to timestamp handling.
-         Make sure we don't convert invalid timestamps.
-
-2006-10-09 12:09:14 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/: Active pads before adding them to the running element. Don't assert on non-BYTE format newsegment events in asf...
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_sink_event),
-         (gst_asf_demux_setup_pad), (gst_asf_demux_process_segment):
-         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_get_audio_stream),
-         (gst_dvd_demux_get_subpicture_stream):
-         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_get_video_stream),
-         (gst_mpeg_demux_get_audio_stream),
-         (gst_mpeg_demux_get_private_stream):
-         Active pads before adding them to the running element. Don't assert
-         on non-BYTE format newsegment events in asfdemux.
-
-2006-10-05 17:07:52 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         Printf format fixes.
-         Original commit message from CVS:
-         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_goto_title),
-         (gst_dvd_read_src_handle_seek_event):
-         * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
-         * ext/mad/gstmad.c: (gst_mad_src_query), (gst_mad_chain):
-         * ext/sidplay/gstsiddec.cc:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_parse_data):
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_loop),
-         (gst_rmdemux_parse_packet):
-         Printf format fixes.
-
-2006-10-03 10:55:42 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/: Added RDT depayloader.
-         Original commit message from CVS:
-         * gst/realmedia/Makefile.am:
-         * gst/realmedia/rdtdepay.c: (gst_rdt_depay_base_init),
-         (gst_rdt_depay_class_init), (gst_rdt_depay_init),
-         (gst_rdt_depay_setcaps), (gst_rdt_depay_chain),
-         (gst_rdt_depay_set_property), (gst_rdt_depay_get_property),
-         (gst_rdt_depay_change_state), (gst_rdt_depay_plugin_init):
-         * gst/realmedia/rdtdepay.h:
-         Added RDT depayloader.
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_mdpr),
-         (gst_rmdemux_plugin_init), (plugin_init):
-         Remove unused function.
-         Added some more mime-types.
-
-2006-09-28 21:44:49 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         gst/dvdlpcmdec/gstdvdlpcmdec.c: If an incoming timestamp is within one sample of our current timestamp, then keep it....
-         Original commit message from CVS:
-         * gst/dvdlpcmdec/gstdvdlpcmdec.c: (update_timestamps):
-         If an incoming timestamp is within one sample of our current
-         timestamp, then keep it. This prevents imprecision in the
-         PTS (which only has 90khz granularity) from affecting our stream.
-
-2006-09-28 09:16:38 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/mpegstream/gstmpegparse.c: Reflow code so that compiler doesn't complain about possible use of uninitialised vari...
-         Original commit message from CVS:
-         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_handle_src_query):
-         Reflow code so that compiler doesn't complain about possible use
-         of uninitialised variable any longer; but just in case, initialise
-         it anyway; also take object ref in query function and do peer pad
-         stuff in a more thread-safe way.
-
-2006-09-27 09:54:01 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/dvdread/dvdreadsrc.c: Init a variable to make compilers happy.
-         Original commit message from CVS:
-         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_do_convert_query):
-         Init a variable to make compilers happy.
-
-2006-09-21 13:34:59 +0000  Martin Zlomek <martin.zlomek@itonis.tv>
-
-         gst/mpegstream/: Send newsegment updates for sparse streams (#350778).
-         Original commit message from CVS:
-         Patch by: Martin Zlomek <martin dot zlomek at itonis dot tv>
-         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_reset),
-         (gst_dvd_demux_sync_stream_to_time):
-         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer),
-         (gst_mpeg_demux_synchronise_pads),
-         (gst_mpeg_demux_sync_stream_to_time):
-         Send newsegment updates for sparse streams (#350778).
-
-2006-09-20 16:18:24 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         ext/dvdread/dvdreadsrc.c: fix compile warning
-         Original commit message from CVS:
-         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_do_convert_query):
-         fix compile warning
-
-2006-09-20 16:16:18 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * configure.ac:
-         bump the nano bitches
-         Original commit message from CVS:
-         bump the nano bitches
-
-2006-09-20 11:55:00 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         configure.ac: As another attempt, synaesthesia can be enabled by passing
-         Original commit message from CVS:
-         * configure.ac:
-         As another attempt, synaesthesia can be enabled by passing
-         --with-plugins="synaesthesia" to configure
-
-2006-09-20 11:12:22 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         configure.ac: Don't build synaesthesia by default, until someone confirms that it is okay (filed as #356882)
-         Original commit message from CVS:
-         * configure.ac:
-         Don't build synaesthesia by default, until someone confirms that it
-         is okay (filed as #356882)
-
-2006-09-20 11:11:26 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         configure.ac: Don't build synaesthesia by default, until someone confirms that it is okay (filed as #356882)
-         Original commit message from CVS:
-         * configure.ac:
-         Don't build synaesthesia by default, until someone confirms that it
-         is okay (filed as #356882)
-
-2006-09-18 12:29:09 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         Port synaesthesia.
-         Original commit message from CVS:
-         * configure.ac:
-         * gst/synaesthesia/Makefile.am:
-         * gst/synaesthesia/gstsynaesthesia.c: (gst_synaesthesia_init),
-         (gst_synaesthesia_sink_setcaps), (gst_synaesthesia_src_getcaps),
-         (gst_synaesthesia_src_setcaps), (gst_synaesthesia_chain),
-         (gst_synaesthesia_change_state), (plugin_init):
-         Port synaesthesia.
-
-2006-09-16 21:58:48 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         More G_OBJECT macro fixing.
-         Original commit message from CVS:
-         * ext/mad/gstid3tag.c:
-         * gst/mpegstream/gstrfc2250enc.h:
-         * gst/synaesthesia/gstsynaesthesia.c:
-         More G_OBJECT macro fixing.
-
-2006-09-15 16:14:15 +0000  Yves Lefebvre <ivanohe@abacom.com>
-
-         ext/mpeg2dec/gstmpeg2dec.c: Fix initialisation dummy buffer, the offsets are relative to the start of the buffers. Fi...
-         Original commit message from CVS:
-         Patch by: Yves Lefebvre <ivanohe at abacom dot com>
-         * ext/mpeg2dec/gstmpeg2dec.c: (init_dummybuf):
-         Fix initialisation dummy buffer, the offsets are relative to the start
-         of the buffers. Fixes #356004.
-
-2006-09-12 10:14:29 +0000  Christian Schaller <uraeus@gnome.org>
-
-       * gst-plugins-ugly.spec.in:
-         update spec file
-         Original commit message from CVS:
-         update spec file
-
-2006-09-09 15:22:58 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/dvdread/dvdreadsrc.c: Add convert query (needed for later when we just operate in time format and let the base so...
-         Original commit message from CVS:
-         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_read):
-         Add convert query (needed for later when we just operate in time
-         format and let the base source class handle all the seeking stuff).
-
-2006-09-07 16:05:31 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         gst/asfdemux/gstasfdemux.c: Erm, lets properly fix it. The only non-text tag that we support is the track-number and ...
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c:
-         (gst_asf_demux_get_gst_tag_from_tag_name),
-         (gst_asf_demux_process_ext_content_desc):
-         Erm, lets properly fix it. The only non-text tag that we support is
-         the track-number and that is an UINT. asfdemux was returning a GValue
-         initialized as INT. Further the Track and not the TrackNumber tag
-         (the latter is a string too).
-
-2006-09-07 14:08:42 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         gst/asfdemux/gstasfdemux.c: Skip tags that are unknown (was producing an uninialized GValue).
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c:
-         (gst_asf_demux_get_gst_tag_from_tag_name),
-         (gst_asf_demux_process_ext_content_desc):
-         Skip tags that are unknown (was producing an uninialized GValue).
-
-2006-09-01 16:21:43 +0000  from Michal Benes <michal.benes@itonis.tv>
-
-         ext/a52dec/gsta52dec.*: Add two things to a52dec: configure the exact output format for ac3 decoding through properti...
-         Original commit message from CVS:
-         * ext/a52dec/gsta52dec.c: (gst_a52dec_mode_get_type),
-         (gst_a52dec_class_init), (gst_a52dec_init), (gst_a52dec_channels),
-         (gst_a52dec_handle_frame), (gst_a52dec_change_state),
-         (gst_a52dec_set_property), (gst_a52dec_get_property):
-         * ext/a52dec/gsta52dec.h:
-         Patch from from Michal Benes <michal.benes@itonis.tv>:
-         Add two things to a52dec: configure the exact output format for ac3
-         decoding through properties, if desired.
-         By default, configure an output format preferred by downstream. Now
-         that audioconvert lists caps by preference, this means that a52dec
-         can do downmixing (iff required) rather than audioconvert, so it can
-         use the ac3 downmix levels from the bitstream.
-
-2006-08-31 13:04:31 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         Add missing GST_LIBS to the link flags
-         Original commit message from CVS:
-         * ext/lame/Makefile.am:
-         * ext/mpeg2dec/Makefile.am:
-         * gst/dvdlpcmdec/Makefile.am:
-         * gst/dvdsub/Makefile.am:
-         * gst/mpegaudioparse/Makefile.am:
-         Add missing GST_LIBS to the link flags
-
-2006-08-29 13:28:41 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         configure.ac: Up requirements to core 0.10.6 for gst_event_new_new_segment_full().
-         Original commit message from CVS:
-         * configure.ac:
-         Up requirements to core 0.10.6 for gst_event_new_new_segment_full().
-
-2006-08-27 20:46:54 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         gst/mpegstream/gstmpegpacketize.c: fix build for debug disabled
-         Original commit message from CVS:
-         * gst/mpegstream/gstmpegpacketize.c: (gst_mpeg_packetize_new):
-         fix build for debug disabled
-
-2006-08-22 15:52:16 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/gstasfdemux.c: Use static pad templates with ANY caps for the source pads for simplicity and to avoid wa...
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init),
-         (gst_asf_demux_add_audio_stream), (gst_asf_demux_add_video_stream):
-         Use static pad templates with ANY caps for the source pads for
-         simplicity and to avoid warnings when creating pads for unhandled
-         codec IDs (#351795).
-
-2006-08-16 10:34:57 +0000  Michal Benes <michal.benes@itonis.tv>
-
-         ext/mad/gstmad.c: Fix timestamping in mad by only activating a new timestamp when the previous frame has been decoded...
-         Original commit message from CVS:
-         Patch by: Michal Benes <michal dot benes at itonis dot tv>
-         * ext/mad/gstmad.c: (gst_mad_chain):
-         Fix timestamping in mad by only activating a new timestamp when the
-         previous frame has been decoded. Fixes #350723.
-         Also clean up some of the non fatal warnings when the input buffer is
-         too small to decode a header.
-
-=== release 0.10.4 ===
-
-2006-08-14 11:15:09 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-rmdemux.xml:
-       * docs/plugins/inspect/plugin-siddec.xml:
-         releasing 0.10.4
-         Original commit message from CVS:
-         releasing 0.10.4
-
-2006-08-14 11:06:29 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * po/af.po:
-       * po/az.po:
-       * po/cs.po:
-       * po/en_GB.po:
-       * po/hu.po:
-       * po/it.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/uk.po:
-       * po/vi.po:
-         Update .po files
-         Original commit message from CVS:
-         Update .po files
-
-2006-08-14 10:19:41 +0000  Wim Taymans <wim@fluendo.com>
-
-         ext/a52dec/gsta52dec.c: Instead of forwarding the event in the wrong format, unref it and set a boolean that we still...
-         Original commit message from CVS:
-         Patch by: Wim Taymans <wim at fluendo dot com>
-         * ext/a52dec/gsta52dec.c: (gst_a52dec_sink_event):
-         Instead of forwarding the event in the wrong format, unref it and set
-         a boolean that we still need to send it in the streaming thread.
-         Fixes #350554
-
-2006-08-14 09:50:26 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         ext/dvdread/dvdreadsrc.c: Put debug category initialization before use of GST_DEBUG, in order to remove a fatal warni...
-         Original commit message from CVS:
-         Patch by: Edward Hervey (edward at fluendo dot com)
-         * ext/dvdread/dvdreadsrc.c: (plugin_init):
-         Put debug category initialization before use of GST_DEBUG, in order
-         to remove a fatal warning.  Fixes #350895
-
-2006-08-08 13:23:27 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/dvdsub/gstdvdsubdec.c: Set rank to NONE for the time being until we make playbin handle subtitle pictures again (...
-         Original commit message from CVS:
-         * gst/dvdsub/gstdvdsubdec.c: (plugin_init):
-         Set rank to NONE for the time being until we make playbin handle
-         subtitle pictures again (dvdsubdec seems to be a bit shaky at
-         times when seeking, so it's probably better if it doesn't get
-         autoplugged for the time being).
-
-2006-08-07 19:01:40 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/realmedia/rmdemux.c: Handle audio streams with stream_version 3 properly; warn about unknown stream versions; han...
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
-         (gst_rmdemux_parse_mdpr):
-         Handle audio streams with stream_version 3 properly; warn about
-         unknown stream versions; handle unknown fourccs a tad more
-         gracefully (setting bogus caps). Also, use GST_FOURCC_ARGS
-         with GST_FOURCC_FORMAT.
-
-2006-08-07 16:25:45 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/dvdread/dvdreadsrc.c: Error out properly if this is an interactive DVD (fixes #345694).
-         Original commit message from CVS:
-         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_goto_title):
-         Error out properly if this is an interactive DVD (fixes #345694).
-
-2006-08-07 16:18:33 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         ext/a52dec/gsta52dec.c: When the first_access is 1 or 0, we should copy the timestamp from the incoming buffer if the...
-         Original commit message from CVS:
-         * ext/a52dec/gsta52dec.c: (gst_a52dec_chain):
-         When the first_access is 1 or 0, we should copy the timestamp from
-         the incoming buffer if there is one.
-
-2006-08-07 14:01:33 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/a52dec/gsta52dec.c: Use GST_ELEMENT_ERROR for error reporting; post errors in some more places; remove superfluou...
-         Original commit message from CVS:
-         * ext/a52dec/gsta52dec.c: (gst_a52dec_channels), (gst_a52dec_push),
-         (gst_a52dec_reneg), (gst_a52dec_handle_frame), (gst_a52dec_chain):
-         Use GST_ELEMENT_ERROR for error reporting; post errors in some
-         more places; remove superfluous newlines from debug statements.
-
-2006-08-07 09:17:01 +0000  Frédéric Riss <frederic.riss@gmail.com>
-
-         gst/dvdsub/gstdvdsubdec.c: which happens when you use macros that got changed during the last unstable cycle because ...
-         Original commit message from CVS:
-         Patch by: Frédéric Riss  <frederic.riss at gmail com>
-         * gst/dvdsub/gstdvdsubdec.c: (gst_send_subtitle_frame):
-         Don't set negative durations on outgoing buffers (#350044),
-         which happens when you use macros that got changed during
-         the last unstable cycle because they were thought not to
-         be used anywhere.
-
-2006-08-06 19:47:40 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/dvdread/dvdreadsrc.*: Add basic support for time-based seeking; set timestamps on outgoing buffers if we have the...
-         Original commit message from CVS:
-         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_stop),
-         (gst_dvd_read_src_goto_chapter),
-         (gst_dvd_read_src_get_chapter_starts),
-         (gst_dvd_read_src_goto_title), (gst_dvd_read_src_get_next_cell),
-         (gst_dvd_read_src_get_time_for_sector),
-         (gst_dvd_read_src_get_sector_from_time), (gst_dvd_read_src_read),
-         (gst_dvd_read_src_handle_seek_event), (gst_dvd_read_src_do_seek),
-         (gst_dvd_read_src_goto_sector):
-         * ext/dvdread/dvdreadsrc.h:
-         Add basic support for time-based seeking; set timestamps on
-         outgoing buffers if we have them; create table with
-         chapter to time mapping when opening a title; rename
-         gst_dvd_read_src_get_next_cell_for() to _get_next_cell() and
-         make it take an explicit pgc argument; fix up some debugging
-         messages so that title/chapter numbers are printed as starting
-         from 1 for easier readability.
-
-2006-08-04 13:05:01 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/realmedia/: Factor out some code into rmutils.[ch]; when reading strings, don't read beyond the available data; r...
-         Original commit message from CVS:
-         * gst/realmedia/Makefile.am:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_mdpr),
-         (gst_rmdemux_parse_cont):
-         * gst/realmedia/rmutils.c: (gst_rm_utils_read_string8),
-         (gst_rm_utils_read_string16), (gst_rm_utils_read_tags):
-         * gst/realmedia/rmutils.h:
-         Factor out some code into rmutils.[ch]; when reading
-         strings, don't read beyond the available data; read
-         metadata strings correctly (string length is 16 bits
-         here, not just 8).
-
-2006-07-31 09:53:05 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         Fix dist by including gst-libs/
-         Original commit message from CVS:
-         * Makefile.am:
-         * configure.ac:
-         * gst/asfdemux/gstasfdemux.c:
-         Fix dist by including gst-libs/
-
-2006-07-29 11:20:30 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         Make custom error messages translatable.
-         Original commit message from CVS:
-         * ext/dvdread/dvdreadsrc.c: (plugin_init):
-         * po/POTFILES.in:
-         Make custom error messages translatable.
-         * gst/asfdemux/gstasf.c: (plugin_init):
-         Remove setlocale() call, doesn't seem to be needed or recommended for
-         plugins, at least not according to gstreamer/docs/random/i18n.
-
-2006-07-28 15:15:15 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/: Error out when the stream is encrypted (rather than feeding garbage to the decoders). Fixes #349025.
-         Original commit message from CVS:
-         * gst/asfdemux/Makefile.am:
-         * gst/asfdemux/asfheaders.c:
-         * gst/asfdemux/asfheaders.h:
-         * gst/asfdemux/gstasf.c: (plugin_init):
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_object):
-         Error out when the stream is encrypted (rather than feeding
-         garbage to the decoders). Fixes #349025.
-
-2006-07-28 15:11:42 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         Add/enable autofoo magic for translations.
-         Original commit message from CVS:
-         * Makefile.am:
-         * autogen.sh:
-         * configure.ac:
-         * po/POTFILES.in:
-         Add/enable autofoo magic for translations.
-
-2006-07-28 13:28:19 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/realmedia/rmdemux.c: Don't leak streams, strings or caps. Get rid of unnecessary getcaps() function.
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_reset),
-         (gst_rmdemux_change_state), (gst_rmdemux_add_stream),
-         (gst_rmdemux_parse_cont), (gst_rmdemux_descramble_cook_audio),
-         (gst_rmdemux_handle_scrambled_packet), (gst_rmdemux_parse_packet):
-         Don't leak streams, strings or caps. Get rid of unnecessary
-         getcaps() function.
-
-2006-07-27 20:34:25 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/realmedia/rmdemux.c: Descramble cook audio streams before sending them to the decoder. Fixes #347292.
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_class_init),
-         (gst_rmdemux_init), (gst_rmdemux_chain), (gst_rmdemux_add_stream),
-         (gst_rmdemux_parse_mdpr), (gst_rmdemux_parse_data),
-         (gst_rmdemux_stream_clear_cached_subpackets),
-         (gst_rmdemux_descramble_cook_audio),
-         (gst_rmdemux_descramble_dnet_audio),
-         (gst_rmdemux_handle_scrambled_packet), (gst_rmdemux_parse_packet):
-         Descramble cook audio streams before sending them to the
-         decoder. Fixes #347292.
-         Also miscellaneous clean-ups and log-level changes.
-
-2006-07-26 17:09:04 +0000  Zaheer Abbas Merali <zaheerabbas@merali.org>
-
-         ext/lame/gstlame.c: Fix lame putting lots of 0's at start of mp3.  Fixes bug #348786.
-         Original commit message from CVS:
-         2006-07-26  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-         * ext/lame/gstlame.c: (gst_lame_setup):
-         Fix lame putting lots of 0's at start of mp3.  Fixes bug #348786.
-
-2006-07-21 11:01:55 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/sidplay/gstsiddec.*: Remove old metadata thing.
-         Original commit message from CVS:
-         * ext/sidplay/gstsiddec.cc:
-         * ext/sidplay/gstsiddec.h:
-         Remove old metadata thing.
-
-2006-07-15 13:33:38 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/gstasfdemux.c: Find language codes for audio streams if they are available.
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c:
-         (gst_asf_demux_get_ext_stream_props_for_stream),
-         (gst_asf_demux_add_audio_stream), (gst_asf_demux_change_state):
-         Find language codes for audio streams if they are available.
-
-2006-07-14 13:02:53 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/: Parse extended stream properties objects and stream objects hidden inside them (but delay creation of ...
-         Original commit message from CVS:
-         * gst/asfdemux/asfheaders.h:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_get_obj_stream),
-         (gst_asf_demux_process_stream),
-         (gst_asf_demux_process_language_list),
-         (gst_asf_demux_process_ext_stream_props),
-         (gst_asf_demux_process_queued_extended_stream_objects),
-         (gst_asf_demux_process_object), (gst_asf_demux_change_state):
-         * gst/asfdemux/gstasfdemux.h:
-         Parse extended stream properties objects and stream objects
-         hidden inside them (but delay creation of the appropriate
-         pads until after all the 'normal' stream objects have been
-         dealt with) (#343763). Also parse language list object.
-
-2006-07-13 11:28:32 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/rmdemux.*: Cleanups, use GstSegment for seeking.
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_class_init),
-         (gst_rmdemux_finalize), (gst_rmdemux_src_event),
-         (find_seek_offset_time), (gst_rmdemux_perform_seek),
-         (gst_rmdemux_src_query), (gst_rmdemux_change_state),
-         (gst_rmdemux_loop), (gst_rmdemux_chain), (gst_rmdemux_send_event),
-         (gst_rmdemux_add_stream), (gst_rmdemux_parse_mdpr),
-         (gst_rmdemux_combine_flows), (gst_rmdemux_parse_packet):
-         * gst/realmedia/rmdemux.h:
-         Cleanups, use GstSegment for seeking.
-         Fix error handling.
-         Combine flow return from all streams.
-
-2006-07-11 22:46:47 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/cdio/gstcdiocddasrc.c: Remove g_assert that shouldn't be there.
-         Original commit message from CVS:
-         * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_close):
-         Remove g_assert that shouldn't be there.
-
-2006-07-10 11:52:58 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/mpeg2dec/gstmpeg2dec.c: Fix refcounting when cropping. Fixes #341677.
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c: (crop_buffer), (handle_slice):
-         Fix refcounting when cropping. Fixes #341677.
-
-2006-07-09 14:07:31 +0000  Grzegorz Lukasik <hauserx@gmail.com>
-
-         gst/asfdemux/gstasfdemux.c: Fix typo. Closes #347029.
-         Original commit message from CVS:
-         Patch by: Grzegorz Lukasik <hauserx at gmail dot com>
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_video_stream),
-         (gst_asf_demux_process_segment):
-         Fix typo. Closes #347029.
-
-2006-07-08 20:29:56 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/gstasfdemux.c: Skip chunks for unknown streams properly. Fixes broken sound and/or video for files that ...
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_chunk):
-         Skip chunks for unknown streams properly. Fixes broken sound
-         and/or video for files that have additional streams that
-         we don't recognise yet (e.g. if they are embedded in extended
-         stream properties). Partly fixes #343763.
-
-2006-07-07 19:26:40 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/: Add some more GUIDs and make debug log more readable and easier to follow when parsing the headers.
-         Original commit message from CVS:
-         * gst/asfdemux/asfheaders.c:
-         * gst/asfdemux/asfheaders.h:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_identify_guid),
-         (gst_asf_demux_process_header), (gst_asf_demux_push_obj),
-         (gst_asf_demux_pop_obj), (gst_asf_demux_process_object),
-         (gst_asf_demux_change_state):
-         * gst/asfdemux/gstasfdemux.h:
-         Add some more GUIDs and make debug log more readable
-         and easier to follow when parsing the headers.
-
-2006-06-30 11:26:22 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/dvdread/dvdreadsrc.*: Rewrite seeking code and make seeking in DVDs work (#337834).
-         Original commit message from CVS:
-         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_init),
-         (gst_dvd_read_src_is_seekable), (gst_dvd_read_src_class_init),
-         (gst_dvd_read_src_stop), (gst_dvd_read_src_goto_title),
-         (gst_dvd_read_src_create), (gst_dvd_read_src_handle_seek_event),
-         (gst_dvd_read_src_do_seek), (gst_dvd_read_src_src_event):
-         * ext/dvdread/dvdreadsrc.h:
-         Rewrite seeking code and make seeking in DVDs work (#337834).
-
-2006-06-29 14:31:55 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         autogen.sh: Check for automake-1.9 as well.
-         Original commit message from CVS:
-         * autogen.sh:
-         Check for automake-1.9 as well.
-
-2006-06-29 12:25:15 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/dvdread/dvdreadsrc.c: Make check stronger.
-         Original commit message from CVS:
-         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_is_nav_pack):
-         Make check stronger.
-
-2006-06-28 11:20:03 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/gstasfdemux.*: Handle unknown codec IDs/fourccs properly (#345879); send tag events after newsegment eve...
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_setup_pad),
-         (gst_asf_demux_add_audio_stream), (gst_asf_demux_add_video_stream),
-         (gst_asf_demux_push_buffer):
-         * gst/asfdemux/gstasfdemux.h:
-         Handle unknown codec IDs/fourccs properly (#345879); send tag
-         events after newsegment event; fix use of GST_FOURCC_FORMAT
-         macro.
-
-2006-06-23 16:29:41 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         ext/a52dec/gsta52dec.c: Call the channel positions get_type() method in plugin_init to ensure that it isn't simultane...
-         Original commit message from CVS:
-         * ext/a52dec/gsta52dec.c: (plugin_init):
-         Call the channel positions get_type() method in plugin_init
-         to ensure that it isn't simultaneously called later from
-         multiple threads.
-
-2006-06-23 12:24:56 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/mpegstream/: Also flush packetizer cache when we get a buffer that has the
-         Original commit message from CVS:
-         * gst/mpegstream/gstmpegpacketize.c:
-         (gst_mpeg_packetize_flush_cache), (gst_mpeg_packetize_put):
-         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_chain):
-         Also flush packetizer cache when we get a buffer that has the
-         DISCONT flag set; update current byte position from buffer
-         offset after a flush.
-
-2006-06-23 11:22:04 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/mpegstream/: Flush packetizer cache when we get a FLUSH_STOP event; remove unused source pad member from packetiz...
-         Original commit message from CVS:
-         * gst/mpegstream/gstmpegpacketize.c: (gst_mpeg_packetize_new),
-         (gst_mpeg_packetize_flush_cache), (gst_mpeg_packetize_destroy),
-         (gst_mpeg_packetize_read):
-         * gst/mpegstream/gstmpegpacketize.h:
-         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_process_event),
-         (gst_mpeg_parse_change_state):
-         Flush packetizer cache when we get a FLUSH_STOP event;
-         remove unused source pad member from packetizer; add debug
-         category for packetizer.
-
-2006-06-23 09:28:28 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         ext/a52dec/gsta52dec.c: Treat dual-mono as stereo. It should really be output on 2 separate pads, but isn't for now.
-         Original commit message from CVS:
-         * ext/a52dec/gsta52dec.c: (gst_a52dec_channels), (plugin_init):
-         Treat dual-mono as stereo. It should really be output on 2 separate
-         pads, but isn't for now.
-
-2006-06-19 15:16:43 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/mpeg2dec/gstmpeg2dec.c: Assume 4:3 DAR rather than 4:3 PAR (#345184).
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_negotiate_format):
-         Assume 4:3 DAR rather than 4:3 PAR (#345184).
-
-2006-06-19 11:59:14 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/mpeg2dec/gstmpeg2dec.c: Assume pixel-aspect-ratio of 4:3 if libmpeg2dec doesn't give us any PAR whatsoever (rathe...
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_negotiate_format):
-         Assume pixel-aspect-ratio of 4:3 if libmpeg2dec doesn't give us
-         any PAR whatsoever (rather than using 0/0, which will lead to
-         an abort later on). Fixes #345184.
-
-2006-06-17 19:35:41 +0000  Michael Dominic K <mdk@mdk.org.pl>
-
-         ext/mad/gstmad.c: Send newsegment event before calling gst_pad_alloc_buffer_and_set_caps(), makes mad behave better i...
-         Original commit message from CVS:
-         Patch by: Michael Dominic K.  < mdk at mdk org pl>
-         * ext/mad/gstmad.c: (gst_mad_chain):
-         Send newsegment event before calling
-         gst_pad_alloc_buffer_and_set_caps(), makes mad behave better
-         in connection with pad blocking (#342594). While we're at it,
-         do some minor clean-ups.
-
-2006-06-17 14:48:04 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         configure.ac: Fix --disable-external (can't set conditionals conditionally, #343602).
-         Original commit message from CVS:
-         * configure.ac:
-         Fix --disable-external (can't set conditionals conditionally,
-         #343602).
-
-2006-06-15 17:10:09 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/a52dec/Makefile.am: ... and then he said "When you go and fix the build you better make sure you have some spare ...
-         Original commit message from CVS:
-         * ext/a52dec/Makefile.am:
-         ... and then he said "When you go and fix the build you
-         better make sure you have some spare backslashes in your
-         pocket".
-
-2006-06-13 15:46:09 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/sidplay/gstsiddec.cc: Fix copyright, email addresses and descriptions.
-         Original commit message from CVS:
-         * ext/sidplay/gstsiddec.cc:
-         Fix copyright, email addresses and descriptions.
-         Use saner defaults for arguments. Fixes #344667.
-         constify some stuff.
-         Fix memleaks.
-         Add tags.
-         Fix negotiation to do mono/44100 by default.
-         Post error messages.
-         Use _scale_int where possible.
-
-2006-06-12 14:09:20 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/dvdnav/.cvsignore: More ignore
-         Original commit message from CVS:
-         * ext/dvdnav/.cvsignore:
-         More ignore
-
-2006-06-12 13:49:42 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         tests/check/elements/amrnbenc.c: Init memory before feeding it to the encoder to make the valgrind test succeed.
-         Original commit message from CVS:
-         * tests/check/elements/amrnbenc.c: (push_data):
-         Init memory before feeding it to the encoder to make
-         the valgrind test succeed.
-
-2006-06-12 13:27:18 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         gst/asfdemux/.cvsignore: More ignore
-         Original commit message from CVS:
-         * gst/asfdemux/.cvsignore:
-         More ignore
-
-2006-06-11 20:38:54 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         .cvsignore: Ignore files generated by 'make dist'.
-         Original commit message from CVS:
-         * .cvsignore:
-         Ignore files generated by 'make dist'.
-
-2006-06-11 17:08:11 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         update build files
-         Original commit message from CVS:
-         * autogen.sh:
-         * configure.ac:
-         * ext/a52dec/Makefile.am:
-         * ext/dvdnav/Makefile.am:
-         * ext/dvdread/Makefile.am:
-         * ext/lame/Makefile.am:
-         * ext/mad/Makefile.am:
-         * ext/mpeg2dec/Makefile.am:
-         * ext/sidplay/Makefile.am:
-         update build files
-
-2006-06-11 13:57:18 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         autogen.sh: require am17
-         Original commit message from CVS:
-         * autogen.sh:
-         require am17
-         * configure.ac:
-         * ext/annodex/Makefile.am:
-         * ext/cdio/Makefile.am:
-         * ext/dv/Makefile.am:
-         * ext/esd/Makefile.am:
-         * ext/flac/Makefile.am:
-         * ext/gdk_pixbuf/Makefile.am:
-         * ext/ladspa/Makefile.am:
-         * ext/libcaca/Makefile.am:
-         * ext/speex/Makefile.am:
-         * ext/taglib/Makefile.am:
-         * sys/oss/Makefile.am:
-         * sys/sunaudio/Makefile.am:
-         * sys/ximage/Makefile.am:
-         clean up build further
-
-2006-06-07 17:05:48 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/mpeg2dec/gstmpeg2dec.*: Simplify and don't leak our buffer pool.
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_finalize),
-         (gst_mpeg2dec_reset), (clear_buffers), (handle_picture),
-         (gst_mpeg2dec_sink_convert), (gst_mpeg2dec_src_convert),
-         (gst_mpeg2dec_change_state):
-         * ext/mpeg2dec/gstmpeg2dec.h:
-         Simplify and don't leak our buffer pool.
-         Use _scale_int.
-         Remove unfixed bug number from previous ChangeLog entry.
-
-2006-06-07 16:15:42 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/mpeg2dec/gstmpeg2dec.*: Fix padtemplate as we can now do fractional framerates.
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_base_init),
-         (gst_mpeg2dec_class_init), (gst_mpeg2dec_init),
-         (gst_mpeg2dec_finalize), (gst_mpeg2dec_reset),
-         (gst_mpeg2dec_qos_reset), (gst_mpeg2dec_alloc_buffer),
-         (gst_mpeg2dec_negotiate_format), (init_dummybuf),
-         (handle_sequence), (handle_picture), (handle_slice),
-         (gst_mpeg2dec_chain), (gst_mpeg2dec_sink_event),
-         (gst_mpeg2dec_src_event), (gst_mpeg2dec_change_state):
-         * ext/mpeg2dec/gstmpeg2dec.h:
-         Fix padtemplate as we can now do fractional framerates.
-         Small cleanups.
-         Use GstSegment.
-         Add simple frame dropping QoS.
-         Precalc buffer output sizes and UV offsets.
-         Always give libmpeg2 a valid fbuf when it wants one.
-         don't trust libmpeg to discard our buffers but manage it
-         ourselves.
-         Fixes #343627, #327350, #335288
-
-2006-06-05 20:57:12 +0000  Sébastien Moutte <sebastien@moutte.net>
-
-         win32/MANIFEST: Add a manifest for futures ugly win32 releases.
-         Original commit message from CVS:
-         * win32/MANIFEST:
-         Add a manifest for futures ugly win32 releases.
-         * gst/iec958/ac3iec.c: (ac3iec_chain_raw):
-         Move bufcaps declaration at the begining of the instructions
-         block.
-
-2006-06-01 22:00:26 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
-         Original commit message from CVS:
-         * ext/alsaspdif/alsaspdifsink.h:
-         * ext/amrwb/gstamrwbdec.h:
-         * ext/amrwb/gstamrwbenc.h:
-         * ext/amrwb/gstamrwbparse.h:
-         * ext/arts/gst_arts.h:
-         * ext/artsd/gstartsdsink.h:
-         * ext/audiofile/gstafparse.h:
-         * ext/audiofile/gstafsink.h:
-         * ext/audiofile/gstafsrc.h:
-         * ext/audioresample/gstaudioresample.h:
-         * ext/bz2/gstbz2dec.h:
-         * ext/bz2/gstbz2enc.h:
-         * ext/dirac/gstdiracdec.h:
-         * ext/directfb/dfbvideosink.h:
-         * ext/divx/gstdivxdec.h:
-         * ext/divx/gstdivxenc.h:
-         * ext/dts/gstdtsdec.h:
-         * ext/faac/gstfaac.h:
-         * ext/gsm/gstgsmdec.h:
-         * ext/gsm/gstgsmenc.h:
-         * ext/ivorbis/vorbisenc.h:
-         * ext/libfame/gstlibfame.h:
-         * ext/nas/nassink.h:
-         * ext/neon/gstneonhttpsrc.h:
-         * ext/polyp/polypsink.h:
-         * ext/sdl/sdlaudiosink.h:
-         * ext/sdl/sdlvideosink.h:
-         * ext/shout/gstshout.h:
-         * ext/snapshot/gstsnapshot.h:
-         * ext/sndfile/gstsf.h:
-         * ext/swfdec/gstswfdec.h:
-         * ext/tarkin/gsttarkindec.h:
-         * ext/tarkin/gsttarkinenc.h:
-         * ext/theora/theoradec.h:
-         * ext/wavpack/gstwavpackdec.h:
-         * ext/wavpack/gstwavpackparse.h:
-         * ext/xine/gstxine.h:
-         * ext/xvid/gstxviddec.h:
-         * ext/xvid/gstxvidenc.h:
-         * gst/cdxaparse/gstcdxaparse.h:
-         * gst/cdxaparse/gstcdxastrip.h:
-         * gst/colorspace/gstcolorspace.h:
-         * gst/festival/gstfestival.h:
-         * gst/freeze/gstfreeze.h:
-         * gst/gdp/gstgdpdepay.h:
-         * gst/gdp/gstgdppay.h:
-         * gst/modplug/gstmodplug.h:
-         * gst/mpeg1sys/gstmpeg1systemencode.h:
-         * gst/mpeg1videoparse/gstmp1videoparse.h:
-         * gst/mpeg2sub/gstmpeg2subt.h:
-         * gst/mpegaudioparse/gstmpegaudioparse.h:
-         * gst/multifilesink/gstmultifilesink.h:
-         * gst/overlay/gstoverlay.h:
-         * gst/playondemand/gstplayondemand.h:
-         * gst/qtdemux/qtdemux.h:
-         * gst/rtjpeg/gstrtjpegdec.h:
-         * gst/rtjpeg/gstrtjpegenc.h:
-         * gst/smooth/gstsmooth.h:
-         * gst/smoothwave/gstsmoothwave.h:
-         * gst/spectrum/gstspectrum.h:
-         * gst/speed/gstspeed.h:
-         * gst/stereo/gststereo.h:
-         * gst/switch/gstswitch.h:
-         * gst/tta/gstttadec.h:
-         * gst/tta/gstttaparse.h:
-         * gst/videodrop/gstvideodrop.h:
-         * gst/xingheader/gstxingmux.h:
-         * sys/directdraw/gstdirectdrawsink.h:
-         * sys/directsound/gstdirectsoundsink.h:
-         * sys/dxr3/dxr3audiosink.h:
-         * sys/dxr3/dxr3spusink.h:
-         * sys/dxr3/dxr3videosink.h:
-         * sys/qcam/gstqcamsrc.h:
-         * sys/vcd/vcdsrc.h:
-         Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
-
-2006-06-01 21:11:41 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
-         Original commit message from CVS:
-         * ext/a52dec/gsta52dec.h:
-         * ext/amrnb/amrnbdec.h:
-         * ext/amrnb/amrnbenc.h:
-         * ext/amrnb/amrnbparse.h:
-         * ext/mpeg2dec/gstmpeg2dec.h:
-         * ext/sidplay/gstsiddec.h:
-         * gst/ac3parse/gstac3parse.h:
-         * gst/asfdemux/gstasfdemux.h:
-         * gst/asfdemux/gstasfmux.h:
-         * gst/dvdlpcmdec/gstdvdlpcmdec.h:
-         * gst/iec958/ac3iec.h:
-         * gst/mpegaudioparse/gstmpegaudioparse.h:
-         * gst/mpegstream/gstdvddemux.h:
-         * gst/mpegstream/gstmpegclock.h:
-         * gst/mpegstream/gstmpegdemux.h:
-         * gst/mpegstream/gstmpegparse.h:
-         Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
-
-2006-05-27 11:35:11 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         README: Replace current README (containing the release notes from some 0.9.x version) with a proper README taken from...
-         Original commit message from CVS:
-         * README:
-         Replace current README (containing the release notes from
-         some 0.9.x version) with a proper README taken from the core.
-
-2006-05-24 15:56:13 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/amrnb/: Sortof first quick cleanup of all this mess...
-         Original commit message from CVS:
-         * ext/amrnb/amrnbdec.c: (gst_amrnbdec_event), (gst_amrnbdec_chain):
-         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
-         (gst_amrnbparse_sink_event), (gst_amrnbparse_chain),
-         (gst_amrnbparse_sink_activate), (gst_amrnbparse_state_change):
-         * ext/amrnb/amrnbparse.h:
-         Sortof first quick cleanup of all this mess...
-         Don't crap out on empty and invalid FTs but treat them as
-         empty packets, the decoder handles them fine.
-         Fixes #342222.
-
-2006-05-22 08:24:09 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/gstasf.c: Call gst_riff_init() so the riff debug category gets set up before it is being used.
-         Original commit message from CVS:
-         * gst/asfdemux/gstasf.c: (plugin_init):
-         Call gst_riff_init() so the riff debug category gets set up
-         before it is being used.
-
-2006-05-19 13:55:11 +0000  Michael Smith <msmith@xiph.org>
-
-         gst/iec958/: Write rate into the caps, for the allowed ac3 rates. Some minor cleanups.
-         Original commit message from CVS:
-         * gst/iec958/ac3_padder.c: (ac3p_parse):
-         * gst/iec958/ac3_padder.h:
-         * gst/iec958/ac3iec.c: (ac3iec_init), (ac3iec_set_property),
-         (ac3iec_chain_raw), (ac3iec_change_state):
-         * gst/iec958/ac3iec.h:
-         Write rate into the caps, for the allowed ac3 rates. Some minor
-         cleanups.
-
-2006-05-18 13:00:21 +0000  James Doc Livingston <doclivingston@gmail.com>
-
-         ext/mad/gstid3tag.c: Do tag merging correctly (#339918). Output taglists properly in debug statements too while we're...
-         Original commit message from CVS:
-         Patch by: James "Doc" Livingston  <doclivingston gmail com>
-         * ext/mad/gstid3tag.c: (gst_id3_tag_get_tag_to_render):
-         Do tag merging correctly (#339918). Output taglists
-         properly in debug statements too while we're at it.
-
-2006-05-11 16:17:44 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         ext/a52dec/gsta52dec.c: Add more debug
-         Original commit message from CVS:
-         * ext/a52dec/gsta52dec.c: (gst_a52dec_chain):
-         Add more debug
-         * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcm_reset),
-         (gst_dvdlpcmdec_init), (update_timestamps),
-         (gst_dvdlpcmdec_chain_dvd), (gst_dvdlpcmdec_chain_raw),
-         (dvdlpcmdec_sink_event):
-         * gst/dvdlpcmdec/gstdvdlpcmdec.h:
-         If we have a first_access offset but no current timestamp (might
-         happen after a seek), then calculate a start time for the first
-         portion so that it will align with the timestamp given for the
-         first_access portion.
-         If a new-segment arrives with format time, store the start
-         time as a failsafe timestamp in case we never get any further
-         timestamp info (unlikely)
-         Mask out the 'frame number' section of the incoming header so
-         that we don't consider it to be changing on every buffer and
-         reset the caps constantly.
-         Use gst_util_uint64_scale for duration calculation
-
-2006-05-11 14:34:10 +0000  Michael Smith <msmith@xiph.org>
-
-         gst/dvdlpcmdec/gstdvdlpcmdec.c: Fix timestamping for cases where the first_access parameter is 4.
-         Original commit message from CVS:
-         * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain_dvd):
-         Fix timestamping for cases where the first_access parameter is 4.
-         Ensure we don't overrun buffers in other cases.
-
-2006-05-10 14:40:03 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/gstasfdemux.c: Fix silly bug when reading metadata (#341254).
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_get_string):
-         Fix silly bug when reading metadata (#341254).
-
-2006-05-08 11:57:26 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         autogen.sh: libtoolize on Darwin/MacOSX is called glibtoolize
-         Original commit message from CVS:
-         * autogen.sh: (CONFIGURE_DEF_OPT):
-         libtoolize on Darwin/MacOSX is called glibtoolize
-
-2006-05-06 11:38:30 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/lame/gstlame.*: Remove tag writing from lame (which was completely broken anyway, #329184). Leaving GstTagSetter ...
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_get_type),
-         (gst_lame_release_memory), (gst_lame_init), (gst_lame_sink_event),
-         (gst_lame_setup), (gst_lame_change_state):
-         * ext/lame/gstlame.h:
-         Remove tag writing from lame (which was completely broken
-         anyway, #329184). Leaving GstTagSetter interface around for
-         now, albeit non-functional. Should be removed completely
-         in 0.11. Use the 'id3v2mux' plugin from -good for writing
-         tags.
-
-2006-05-06 00:18:31 +0000  Maciej Katafiasz <mathrick@mathrick.org>
-
-       * ChangeLog:
-       * ext/dvdread/dvdreadsrc.c:
-       * gst/asfdemux/gstasfdemux.c:
-         Add semicolons after GST_BOILERPLATE[_FULL] so that indent doesn't mess up following lines.
-         Original commit message from CVS:
-         Add semicolons after GST_BOILERPLATE[_FULL] so that indent doesn't mess up following lines.
-
-2006-05-05 08:23:39 +0000  Andres Salomon <dilinger@debian.org>
-
-         ext/lame/gstlame.c: Fix typo (comma vs. semicolon) (#340710).
-         Original commit message from CVS:
-         Patch by: Andres Salomon  <dilinger at debian org>
-         * ext/lame/gstlame.c: (gst_lame_sink_event):
-         Fix typo (comma vs. semicolon) (#340710).
-
-2006-05-04 08:24:52 +0000  Lutz Müller <lutz@topfrose.de>
-
-         ext/mad/gstmad.c: Make mad the second element to support the highly useful
-         Original commit message from CVS:
-         Patch by: Lutz Müller <lutz at topfrose de>
-         * ext/mad/gstmad.c: (gst_mad_init), (gst_mad_src_query):
-         Make mad the second element to support the highly useful
-         FORMATS query (#340594)
-
-2006-05-02 10:28:48 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         ext/mpeg2dec/gstmpeg2dec.c: Remember the query duration format before passing it upstream since it could have been mo...
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_sink_convert),
-         (gst_mpeg2dec_src_query):
-         Remember the query duration format before passing it upstream since it
-         could have been modified.
-         Add GST_WARNING_OBJECT in sink convert function to detail why the
-         conversion didn't work.
-
-2006-04-25 21:56:37 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         Define GstElementDetails as const and also static (when defined as global)
-         Original commit message from CVS:
-         * ext/amrwb/gstamrwbdec.c:
-         * ext/amrwb/gstamrwbenc.c:
-         * ext/amrwb/gstamrwbparse.c:
-         * ext/arts/gst_arts.c:
-         * ext/artsd/gstartsdsink.c:
-         * ext/audiofile/gstafparse.c:
-         * ext/audiofile/gstafsink.c:
-         * ext/audiofile/gstafsrc.c:
-         * ext/audioresample/gstaudioresample.c:
-         * ext/bz2/gstbz2dec.c:
-         * ext/bz2/gstbz2enc.c:
-         * ext/cdaudio/gstcdaudio.c:
-         * ext/directfb/dfbvideosink.c:
-         * ext/divx/gstdivxdec.c:
-         * ext/divx/gstdivxenc.c:
-         * ext/dts/gstdtsdec.c: (gst_dtsdec_base_init):
-         * ext/faac/gstfaac.c: (gst_faac_base_init):
-         * ext/faad/gstfaad.c:
-         * ext/gsm/gstgsmdec.c:
-         * ext/gsm/gstgsmenc.c:
-         * ext/hermes/gsthermescolorspace.c:
-         * ext/ivorbis/vorbisfile.c:
-         * ext/lcs/gstcolorspace.c:
-         * ext/libfame/gstlibfame.c:
-         * ext/libmms/gstmms.c: (gst_mms_base_init):
-         * ext/musepack/gstmusepackdec.c: (gst_musepackdec_base_init):
-         * ext/musicbrainz/gsttrm.c: (gst_musicbrainz_base_init):
-         * ext/nas/nassink.c: (gst_nassink_base_init):
-         * ext/neon/gstneonhttpsrc.c:
-         * ext/sdl/sdlaudiosink.c:
-         * ext/sdl/sdlvideosink.c:
-         * ext/shout/gstshout.c:
-         * ext/snapshot/gstsnapshot.c:
-         * ext/sndfile/gstsf.c:
-         * ext/swfdec/gstswfdec.c:
-         * ext/tarkin/gsttarkindec.c:
-         * ext/tarkin/gsttarkinenc.c:
-         * ext/theora/theoradec.c:
-         * ext/wavpack/gstwavpackdec.c: (gst_wavpack_dec_base_init):
-         * ext/wavpack/gstwavpackparse.c: (gst_wavpack_parse_base_init):
-         * ext/xvid/gstxviddec.c:
-         * ext/xvid/gstxvidenc.c:
-         * gst/cdxaparse/gstcdxaparse.c: (gst_cdxa_parse_base_init):
-         * gst/cdxaparse/gstcdxastrip.c: (gst_cdxastrip_base_init):
-         * gst/chart/gstchart.c:
-         * gst/colorspace/gstcolorspace.c:
-         * gst/deinterlace/gstdeinterlace.c:
-         * gst/equalizer/gstiirequalizer.c: (gst_iir_equalizer_base_init):
-         * gst/festival/gstfestival.c:
-         * gst/filter/gstbpwsinc.c:
-         * gst/filter/gstiir.c:
-         * gst/filter/gstlpwsinc.c:
-         * gst/freeze/gstfreeze.c:
-         * gst/games/gstpuzzle.c: (gst_puzzle_base_init):
-         * gst/librfb/gstrfbsrc.c:
-         * gst/mixmatrix/mixmatrix.c:
-         * gst/mpeg1sys/gstmpeg1systemencode.c:
-         * gst/mpeg1videoparse/gstmp1videoparse.c:
-         * gst/mpeg2sub/gstmpeg2subt.c:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         * gst/multifilesink/gstmultifilesink.c:
-         * gst/overlay/gstoverlay.c:
-         * gst/passthrough/gstpassthrough.c:
-         * gst/playondemand/gstplayondemand.c:
-         * gst/qtdemux/qtdemux.c:
-         * gst/rtjpeg/gstrtjpegdec.c:
-         * gst/rtjpeg/gstrtjpegenc.c:
-         * gst/smooth/gstsmooth.c:
-         * gst/smoothwave/gstsmoothwave.c:
-         * gst/spectrum/gstspectrum.c:
-         * gst/speed/gstspeed.c:
-         * gst/stereo/gststereo.c:
-         * gst/switch/gstswitch.c:
-         * gst/tta/gstttadec.c: (gst_tta_dec_base_init):
-         * gst/tta/gstttaparse.c: (gst_tta_parse_base_init):
-         * gst/vbidec/gstvbidec.c:
-         * gst/videocrop/gstvideocrop.c:
-         * gst/videodrop/gstvideodrop.c:
-         * gst/virtualdub/gstxsharpen.c:
-         * gst/xingheader/gstxingmux.c: (gst_xing_mux_base_init):
-         * gst/y4m/gsty4mencode.c:
-         * sys/cdrom/gstcdplayer.c:
-         * sys/directdraw/gstdirectdrawsink.c:
-         * sys/directsound/gstdirectsoundsink.c:
-         * sys/glsink/glimagesink.c:
-         * sys/qcam/gstqcamsrc.c:
-         * sys/v4l2/gstv4l2src.c:
-         * sys/vcd/vcdsrc.c: (gst_vcdsrc_base_init):
-         * sys/ximagesrc/ximagesrc.c:
-         Define GstElementDetails as const and also static (when defined as
-         global)
-
-2006-04-25 21:47:03 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         Define GstElementDetails as const and also static (when defined as global)
-         Original commit message from CVS:
-         * ext/mad/gstid3tag.c:
-         * ext/mad/gstmad.c:
-         * gst/ac3parse/gstac3parse.c:
-         * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-         * gst/synaesthesia/gstsynaesthesia.c:
-         Define GstElementDetails as const and also static (when defined as
-         global)
-
-2006-04-25 21:39:40 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         Define GstElementDetails as const and also static (when defined as global)
-         Original commit message from CVS:
-         * ext/aalib/gstaasink.c:
-         * ext/annodex/gstcmmldec.c:
-         * ext/annodex/gstcmmlenc.c:
-         * ext/cairo/gsttextoverlay.c:
-         * ext/cairo/gsttimeoverlay.c:
-         * ext/cdio/gstcdiocddasrc.c:
-         * ext/dv/gstdvdec.c:
-         * ext/dv/gstdvdemux.c:
-         * ext/esd/esdmon.c:
-         * ext/esd/esdsink.c:
-         * ext/flac/gstflacenc.c:
-         * ext/flac/gstflactag.c:
-         * ext/gconf/gstgconfaudiosink.c: (gst_gconf_audio_sink_base_init):
-         * ext/gconf/gstgconfaudiosrc.c: (gst_gconf_audio_src_base_init):
-         * ext/gconf/gstgconfvideosink.c: (gst_gconf_video_sink_base_init):
-         * ext/gconf/gstgconfvideosrc.c: (gst_gconf_video_src_base_init):
-         * ext/gdk_pixbuf/pixbufscale.c:
-         * ext/hal/gsthalaudiosink.c: (gst_hal_audio_sink_base_init):
-         * ext/hal/gsthalaudiosrc.c: (gst_hal_audio_src_base_init):
-         * ext/jpeg/gstjpegdec.c:
-         * ext/jpeg/gstjpegenc.c:
-         * ext/jpeg/gstsmokedec.c:
-         * ext/jpeg/gstsmokeenc.c:
-         * ext/libcaca/gstcacasink.c:
-         * ext/libmng/gstmngdec.c:
-         * ext/libmng/gstmngenc.c:
-         * ext/libpng/gstpngdec.c:
-         * ext/libpng/gstpngenc.c:
-         * ext/mikmod/gstmikmod.c:
-         * ext/raw1394/gstdv1394src.c:
-         * ext/shout2/gstshout2.c: (gst_shout2send_init):
-         * ext/shout2/gstshout2.h:
-         * ext/speex/gstspeexdec.c:
-         * ext/speex/gstspeexenc.c:
-         * gst/alpha/gstalpha.c:
-         * gst/alpha/gstalphacolor.c:
-         * gst/apetag/gstapedemux.c:
-         * gst/auparse/gstauparse.c:
-         * gst/autodetect/gstautoaudiosink.c:
-         (gst_auto_audio_sink_base_init):
-         * gst/autodetect/gstautovideosink.c:
-         (gst_auto_video_sink_base_init):
-         * gst/avi/gstavidemux.c: (gst_avi_demux_base_init):
-         * gst/avi/gstavimux.c: (gst_avimux_base_init):
-         * gst/cutter/gstcutter.c:
-         * gst/debug/breakmydata.c:
-         * gst/debug/efence.c:
-         * gst/debug/gstnavigationtest.c:
-         * gst/debug/gstnavseek.c:
-         * gst/debug/negotiation.c:
-         * gst/debug/progressreport.c:
-         * gst/debug/testplugin.c:
-         * gst/effectv/gstaging.c:
-         * gst/effectv/gstdice.c:
-         * gst/effectv/gstedge.c:
-         * gst/effectv/gstquark.c:
-         * gst/effectv/gstrev.c:
-         * gst/effectv/gstshagadelic.c:
-         * gst/effectv/gstvertigo.c:
-         * gst/effectv/gstwarp.c:
-         * gst/flx/gstflxdec.c:
-         * gst/goom/gstgoom.c:
-         * gst/icydemux/gsticydemux.c:
-         * gst/id3demux/gstid3demux.c:
-         * gst/interleave/deinterleave.c:
-         * gst/interleave/interleave.c:
-         * gst/law/alaw-decode.c: (gst_alawdec_base_init):
-         * gst/law/alaw-encode.c: (gst_alawenc_base_init):
-         * gst/law/mulaw-decode.c: (gst_mulawdec_base_init):
-         * gst/law/mulaw-encode.c: (gst_mulawenc_base_init):
-         * gst/level/gstlevel.c:
-         * gst/matroska/matroska-demux.c: (gst_matroska_demux_base_init):
-         * gst/matroska/matroska-mux.c: (gst_matroska_mux_base_init):
-         * gst/median/gstmedian.c:
-         * gst/monoscope/gstmonoscope.c:
-         * gst/multipart/multipartdemux.c:
-         * gst/multipart/multipartmux.c:
-         * gst/oldcore/gstaggregator.c:
-         * gst/oldcore/gstfdsink.c:
-         * gst/oldcore/gstmd5sink.c:
-         * gst/oldcore/gstmultifilesrc.c:
-         * gst/oldcore/gstpipefilter.c:
-         * gst/oldcore/gstshaper.c:
-         * gst/oldcore/gststatistics.c:
-         * gst/rtp/gstasteriskh263.c:
-         * gst/rtp/gstrtpL16depay.c:
-         * gst/rtp/gstrtpL16pay.c:
-         * gst/rtp/gstrtpamrdepay.c:
-         * gst/rtp/gstrtpamrpay.c:
-         * gst/rtp/gstrtpdepay.c:
-         * gst/rtp/gstrtpgsmpay.c:
-         * gst/rtp/gstrtph263pay.c:
-         * gst/rtp/gstrtph263pdepay.c:
-         * gst/rtp/gstrtph263ppay.c:
-         * gst/rtp/gstrtpilbcdepay.c:
-         * gst/rtp/gstrtpmp4gpay.c:
-         * gst/rtp/gstrtpmp4vdepay.c:
-         * gst/rtp/gstrtpmp4vpay.c:
-         * gst/rtp/gstrtpmpadepay.c:
-         * gst/rtp/gstrtpmpapay.c:
-         * gst/rtp/gstrtppcmadepay.c:
-         * gst/rtp/gstrtppcmapay.c:
-         * gst/rtp/gstrtppcmudepay.c:
-         * gst/rtp/gstrtppcmupay.c:
-         * gst/rtp/gstrtpspeexdepay.c:
-         * gst/rtp/gstrtpspeexpay.c:
-         * gst/rtsp/gstrtpdec.c:
-         * gst/rtsp/gstrtspsrc.c:
-         * gst/smpte/gstsmpte.c:
-         * gst/udp/gstdynudpsink.c:
-         * gst/udp/gstmultiudpsink.c:
-         * gst/udp/gstudpsink.c:
-         * gst/udp/gstudpsrc.c:
-         * gst/videobox/gstvideobox.c:
-         * gst/videofilter/gstgamma.c: (gst_gamma_base_init):
-         * gst/videofilter/gstvideobalance.c:
-         * gst/videofilter/gstvideoflip.c:
-         * gst/videofilter/gstvideotemplate.c:
-         (gst_videotemplate_base_init):
-         * gst/videomixer/videomixer.c:
-         * gst/wavparse/gstwavparse.c: (gst_wavparse_base_init),
-         (gst_wavparse_class_init), (gst_wavparse_dispose),
-         (gst_wavparse_reset), (gst_wavparse_init),
-         (gst_wavparse_perform_seek), (gst_wavparse_peek_chunk_info),
-         (gst_wavparse_peek_chunk), (gst_wavparse_stream_headers),
-         (gst_wavparse_parse_stream_init), (gst_wavparse_send_event),
-         (gst_wavparse_add_src_pad), (gst_wavparse_stream_data),
-         (gst_wavparse_chain), (gst_wavparse_srcpad_event),
-         (gst_wavparse_sink_activate), (gst_wavparse_sink_activate_pull),
-         (gst_wavparse_change_state):
-         * gst/wavparse/gstwavparse.h:
-         * sys/oss/gstossmixerelement.c:
-         * sys/oss/gstosssink.c:
-         * sys/oss/gstosssrc.c:
-         * sys/osxaudio/gstosxaudioelement.c:
-         * sys/osxaudio/gstosxaudiosink.c:
-         * sys/osxaudio/gstosxaudiosrc.c:
-         * sys/sunaudio/gstsunaudiomixer.c:
-         * sys/sunaudio/gstsunaudiosink.c:
-         Define GstElementDetails as const and also static (when defined as
-         global)
-
-2006-04-25 12:17:02 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/dvdnav/dvdnavsrc.c: Fix name of custom event (use same as dvdreadsrc).
-         Original commit message from CVS:
-         * ext/dvdnav/dvdnavsrc.c: (gst_dvd_nav_src_push_titlelang_event):
-         Fix name of custom event (use same as dvdreadsrc).
-         * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_chain),
-         (gst_dvd_sub_dec_sink_event), (gst_dvd_sub_dec_handle_dvd_event):
-         Fix event parsing (the event name is in the structure, not the
-         name of the structure itself); also fix indentation after
-         boilerplate macro.
-
-2006-04-23 09:49:14 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/mad/gstid3tag.c: Change debug category to 'id3mux'.
-         Original commit message from CVS:
-         * ext/mad/gstid3tag.c: (plugin_init):
-         Change debug category to 'id3mux'.
-
-2006-04-22 18:49:01 +0000  Alexander Lancaster <alexl@users.sourceforge.net>
-
-         ext/mad/gstid3tag.c: When acting as a muxer, set caps on outgoing buffers and set caps on source pad (fixes #323658)....
-         Original commit message from CVS:
-         Patch by: Alexander Lancaster  <alexl at users sourceforge net>
-         * ext/mad/gstid3tag.c: (gst_id3_tag_get_caps), (gst_id3_tag_init),
-         (gst_id3_tag_sink_event), (gst_id3_tag_src_link),
-         (gst_id3_tag_chain):
-         When acting as a muxer, set caps on outgoing buffers and set caps
-         on source pad (fixes #323658). Remove unused application/x-gst-tags
-         cruft from the 0.6 days.
-
-2006-04-21 20:37:43 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/mad/gstmad.c: .. and DEFAULT queries should work too. Use magic gst util scale functions in some places.
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (gst_mad_convert_sink), (gst_mad_convert_src),
-         (gst_mad_src_query), (gst_mad_chain):
-         .. and DEFAULT queries should work too. Use magic gst util scale
-         functions in some places.
-
-2006-04-21 19:31:47 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/mad/gstmad.c: Fix duration query in BYTES format (#336824).
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (gst_mad_src_query):
-         Fix duration query in BYTES format (#336824).
-
-2006-04-21 12:40:41 +0000  Ed Catmur <ed@catmur.co.uk>
-
-         ext/lame/gstlame.c: Don't crash if we get an EOS event before the encoder has been set up (#339287).
-         Original commit message from CVS:
-         Patch by: Ed Catmur  <ed at catmur dot co dot uk>
-         * ext/lame/gstlame.c: (gst_lame_sink_event):
-         Don't crash if we get an EOS event before the encoder
-         has been set up (#339287).
-
-2006-04-21 11:17:08 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/dvdread/dvdreadsrc.c: Move errors out of the normal code flow.
-         Original commit message from CVS:
-         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_start),
-         (gst_dvd_read_src_goto_title), (gst_dvd_read_src_read),
-         (gst_dvd_read_src_create), (gst_dvd_read_src_goto_sector):
-         Move errors out of the normal code flow.
-         Don't send eos, basesrc will do that for us when needed.
-
-2006-04-21 10:50:17 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/mpegstream/: Do state changes correctly
-         Original commit message from CVS:
-         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_change_state):
-         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_change_state):
-         * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_change_state):
-         Do state changes correctly
-
-2006-04-13 19:08:20 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/mpeg2dec/gstmpeg2dec.c: Can't use gst_pad_alloc_buffer*() when we are going to crop the image before sending it o...
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_alloc_sized_buf),
-         (gst_mpeg2dec_alloc_buffer):
-         Can't use gst_pad_alloc_buffer*() when we are going to crop
-         the image before sending it out. Downstream basetransform-based
-         elements will complain about the wrong unit size otherwise
-         (when not operating in passthrough-mode at least).
-         Const-ify some static variables and do some minor clean-ups.
-         Use I420 macros for size/offsets (not really necessary in this
-         particular context, but this kind of code gets copy'n'pasted).
-
-2006-04-13 18:21:08 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/mpegstream/gstmpegpacketize.*: g_malloc() can't fail, we don't need to handle this. Same for gst_buffer_new_and_a...
-         Original commit message from CVS:
-         * gst/mpegstream/gstmpegpacketize.c: (gst_mpeg_packetize_put),
-         (read_cache):
-         * gst/mpegstream/gstmpegpacketize.h:
-         g_malloc() can't fail, we don't need to handle this. Same for
-         gst_buffer_new_and_alloc().
-         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_chain):
-         klass->send_buffer() should have the same semantics as
-         gst_pad_push(), ie. ownership of the buffer is transfered,
-         so we never have to unref the buffer no matter what the flow
-         return value was.
-
-2006-04-12 16:21:17 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * tests/check/gst-plugins-ugly.supp:
-         one more suppression for FC4
-         Original commit message from CVS:
-         one more suppression for FC4
-
-2006-04-10 16:58:24 +0000  Michael Smith <msmith@xiph.org>
-
-       * tests/check/gst-plugins-ugly.supp:
-         The AMR encoder sucks giant sucky things through a sucky object with a giant sucking machine. More suppressions.
-         Original commit message from CVS:
-         The AMR encoder sucks giant sucky things through a sucky object with a giant
-         sucking machine. More suppressions.
-
-2006-04-10 14:47:11 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         add test for amrnbenc, enable test infrastructure, and fix a leak
-         Original commit message from CVS:
-         add test for amrnbenc, enable test infrastructure, and fix a leak
-         * common/check.mak:
-         allow for specifying more than one suppressions file in SUPPRESSIONS
-         * Makefile.am:
-         * tests/Makefile.am:
-         * tests/check/.cvsignore:
-         * tests/check/Makefile.am:
-         * tests/check/elements/.cvsignore:
-         * configure.ac:
-         add tests/check
-         * tests/check/gst-plugins-ugly.supp:
-         add suppressions for libs used by -ugly
-         * tests/check/elements/amrnbenc.c: (buffer_new), (buffer_unref),
-         (setup_amrnbenc), (cleanup_amrnbenc), (push_data),
-         (GST_START_TEST), (amrnbenc_suite), (main):
-         add a simple test for encoding amr
-         * ext/amrnb/amrnbenc.c: (gst_amrnbenc_init):
-         fix pad template leaks
-
-2006-04-10 11:48:29 +0000  Michael Smith <msmith@xiph.org>
-
-         ext/amrnb/amrnbenc.c: Plug big leak in AMR encoder.
-         Original commit message from CVS:
-         * ext/amrnb/amrnbenc.c: (gst_amrnbenc_chain):
-         Plug big leak in AMR encoder.
-
-2006-04-09 18:09:40 +0000  Sébastien Moutte <sebastien@moutte.net>
-
-         ext/mad/gstmad.c: move GstIndexEntry *entry variable declaration before the first instruction
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (index_seek):
-         move GstIndexEntry *entry variable declaration before
-         the first instruction
-         * ext/mad/gstmad.c:
-         remove debug macros with variable number of parameter by using
-         GST_DEBUG for WIN32
-         * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_parse_subpic):
-         use gst_guint64_to_gdouble for conversions
-         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_sync_stream_to_time):
-         replace __FUNCTION__ which is not supported by MSVC by the current function name
-         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_reset):
-         remove LL suffix by using G_GINT64_CONSTANT
-         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead),(gst_mpeg_parse_get_rate):
-         use gst_guint64_to_gdouble for conversions
-         * gst/mpegstream/gstmpegparse.h:
-         remove LL suffix by using G_GINT64_CONSTANT
-         * win32/vs6:
-         add project files for tagac3parse, asfdemux, dvdlpcmdec, dvdsub, iec958, lame,
-         mad, mpegaudioparse, mpegstream, realmedia, synaesthesia
-
-2006-04-08 21:42:19 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         Fix #337365 (g_type_class_ref <-> g_type_class_peek_parent)
-         Original commit message from CVS:
-         * ext/amrnb/amrnbdec.c: (gst_amrnbdec_class_init):
-         * ext/amrnb/amrnbenc.c: (gst_amrnbenc_class_init):
-         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_class_init):
-         * ext/mad/gstmad.c: (gst_mad_class_init):
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_class_init):
-         * gst/ac3parse/gstac3parse.c: (gst_ac3parse_class_init):
-         * gst/asfdemux/gstasfmux.c: (gst_asfmux_class_init):
-         * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_class_init):
-         * gst/iec958/ac3iec.c: (ac3iec_class_init):
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_class_init):
-         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_class_init):
-         * gst/mpegstream/gstmpegclock.c: (gst_mpeg_clock_class_init):
-         * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_class_init):
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_class_init):
-         * gst/synaesthesia/gstsynaesthesia.c:
-         (gst_synaesthesia_class_init):
-         Fix #337365 (g_type_class_ref <-> g_type_class_peek_parent)
-
-2006-04-07 09:14:26 +0000  Fabrizio Gennari <fabrizio.ge@tiscali.it>
-
-         gst/asfdemux/gstasfdemux.c: Send newsegment event only once per pad, fixes #336550.
-         Original commit message from CVS:
-         Patch by: Fabrizio Gennari  <fabrizio dot ge at tiscali dot it>
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_sink_event),
-         (gst_asf_demux_push_buffer):
-         Send newsegment event only once per pad, fixes #336550.
-
-2006-04-06 11:35:26 +0000  j^ <j@bootlab.org>
-
-         Unify the long descriptions in the plugin details (#337263).
-         Original commit message from CVS:
-         Patch by: j^  <j at bootlab dot org>
-         * ext/amrwb/gstamrwbdec.c:
-         * ext/amrwb/gstamrwbenc.c:
-         * ext/amrwb/gstamrwbparse.c:
-         * ext/arts/gst_arts.c:
-         * ext/artsd/gstartsdsink.c:
-         * ext/audiofile/gstafparse.c:
-         * ext/audiofile/gstafsink.c:
-         * ext/audiofile/gstafsrc.c:
-         * ext/cdaudio/gstcdaudio.c:
-         * ext/directfb/dfbvideosink.c:
-         * ext/divx/gstdivxdec.c:
-         * ext/divx/gstdivxenc.c:
-         * ext/dts/gstdtsdec.c: (gst_dtsdec_base_init):
-         * ext/faac/gstfaac.c: (gst_faac_base_init):
-         * ext/faad/gstfaad.c:
-         * ext/gsm/gstgsmdec.c:
-         * ext/gsm/gstgsmenc.c:
-         * ext/hermes/gsthermescolorspace.c:
-         * ext/ivorbis/vorbisfile.c:
-         * ext/lcs/gstcolorspace.c:
-         * ext/libfame/gstlibfame.c:
-         * ext/libmms/gstmms.c: (gst_mms_base_init):
-         * ext/musicbrainz/gsttrm.c: (gst_musicbrainz_base_init):
-         * ext/nas/nassink.c: (gst_nassink_base_init):
-         * ext/neon/gstneonhttpsrc.c:
-         * ext/polyp/polypsink.c: (gst_polypsink_base_init):
-         * ext/sdl/sdlaudiosink.c:
-         * ext/sdl/sdlvideosink.c:
-         * ext/shout/gstshout.c:
-         * ext/snapshot/gstsnapshot.c:
-         * ext/sndfile/gstsf.c:
-         * ext/tarkin/gsttarkindec.c:
-         * ext/tarkin/gsttarkinenc.c:
-         * ext/theora/theoradec.c:
-         * ext/wavpack/gstwavpackdec.c: (gst_wavpack_dec_base_init):
-         * ext/wavpack/gstwavpackparse.c: (gst_wavpack_parse_base_init):
-         * ext/xvid/gstxviddec.c:
-         * ext/xvid/gstxvidenc.c:
-         * gst/cdxaparse/gstcdxaparse.c: (gst_cdxa_parse_base_init):
-         * gst/cdxaparse/gstcdxastrip.c: (gst_cdxastrip_base_init):
-         * gst/chart/gstchart.c:
-         * gst/equalizer/gstiirequalizer.c: (gst_iir_equalizer_base_init):
-         * gst/festival/gstfestival.c:
-         * gst/filter/gstiir.c:
-         * gst/filter/gstlpwsinc.c:
-         * gst/freeze/gstfreeze.c:
-         * gst/games/gstpuzzle.c: (gst_puzzle_base_init):
-         * gst/mixmatrix/mixmatrix.c:
-         * gst/mpeg1sys/gstmpeg1systemencode.c:
-         * gst/mpeg1videoparse/gstmp1videoparse.c:
-         * gst/mpeg2sub/gstmpeg2subt.c:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         * gst/multifilesink/gstmultifilesink.c:
-         * gst/overlay/gstoverlay.c:
-         * gst/passthrough/gstpassthrough.c:
-         * gst/playondemand/gstplayondemand.c:
-         * gst/qtdemux/qtdemux.c:
-         * gst/rtjpeg/gstrtjpegdec.c:
-         * gst/rtjpeg/gstrtjpegenc.c:
-         * gst/smooth/gstsmooth.c:
-         * gst/tta/gstttadec.c: (gst_tta_dec_base_init):
-         * gst/tta/gstttaparse.c: (gst_tta_parse_base_init):
-         * gst/videocrop/gstvideocrop.c:
-         * gst/videodrop/gstvideodrop.c:
-         * gst/virtualdub/gstxsharpen.c:
-         * gst/xingheader/gstxingmux.c: (gst_xing_mux_base_init):
-         * gst/y4m/gsty4mencode.c:
-         Unify the long descriptions in the plugin details (#337263).
-
-2006-04-05 10:02:34 +0000  Christian Schaller <uraeus@gnome.org>
-
-       * gst-plugins-ugly.spec.in:
-         fix version numbering
-         Original commit message from CVS:
-         fix version numbering
-
-2006-04-05 09:18:35 +0000  Christian Schaller <uraeus@gnome.org>
-
-       * common:
-       * gst-plugins-ugly.spec.in:
-         add dvdsub plugin to spec
-         Original commit message from CVS:
-         add dvdsub plugin to spec
-
-2006-04-01 15:43:46 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         docs/plugins/: add siddec
-         Original commit message from CVS:
-         * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-         * docs/plugins/inspect/plugin-siddec.xml:
-         add siddec
-         * ext/dvdnav/dvdnavsrc.c:
-         doc fixes
-
-2006-04-01 15:30:56 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * common:
-       * configure.ac:
-       * ext/sidplay/Makefile.am:
-         disable use of AS_LIBTOOL_TAGS, it doesn't work correctly
-         Original commit message from CVS:
-         disable use of AS_LIBTOOL_TAGS, it doesn't work correctly
-
-2006-04-01 14:08:36 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * docs/plugins/.gitignore:
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-         ignore more
-         Original commit message from CVS:
-         ignore more
-
-2006-04-01 14:08:11 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * common:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-asf.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-dvdread.xml:
-       * docs/plugins/inspect/plugin-dvdsub.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-mpegstream.xml:
-       * docs/plugins/inspect/plugin-rmdemux.xml:
-         update plugin inspect files
-         Original commit message from CVS:
-         update plugin inspect files
-
-2006-04-01 10:09:10 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * gst/mpegaudioparse/gstxingmux.c:
-         rework build; add translations for v4l2
-         Original commit message from CVS:
-         rework build; add translations for v4l2
-
-2006-04-01 09:54:39 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         configure.ac: rework similarly to other modules
-         Original commit message from CVS:
-         * configure.ac:
-         rework similarly to other modules
-         * ext/a52dec/gsta52dec.c:
-         * ext/amrnb/amrnb.c:
-         * ext/dvdnav/dvdnavsrc.c:
-         * ext/dvdread/dvdreadsrc.c:
-         * ext/lame/gstlame.c:
-         * ext/mad/gstid3tag.c:
-         * ext/mpeg2dec/gstmpeg2dec.c:
-         * ext/sidplay/gstsiddec.cc:
-         * gst/asfdemux/gstasf.c:
-         * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-         * gst/dvdsub/gstdvdsubdec.c:
-         * gst/iec958/ac3iec.c:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         * gst/mpegstream/gstmpegstream.c:
-         * gst/realmedia/rmdemux.c: (plugin_init):
-         use the correct defines
-
-2006-04-01 09:53:17 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * common:
-       * docs/.gitignore:
-       * docs/plugins/.gitignore:
-         ignore more
-         Original commit message from CVS:
-         ignore more
-
-2006-03-31 11:13:50 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ChangeLog:
-       * common:
-       * configure.ac:
-         back to HEAD
-         Original commit message from CVS:
-         back to HEAD
-
-=== release 0.10.3 ===
-
-2006-03-31 11:10:46 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.signals:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-rmdemux.xml:
-         releasing 0.10.3
-         Original commit message from CVS:
-         releasing 0.10.3
-
-2006-03-30 15:37:00 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         better/unified long descriptions
-         Original commit message from CVS:
-         * ext/aalib/gstaasink.c:
-         * ext/annodex/gstcmmldec.c:
-         * ext/annodex/gstcmmlenc.c:
-         * ext/cairo/gsttextoverlay.c:
-         * ext/cairo/gsttimeoverlay.c:
-         * ext/cdio/gstcdiocddasrc.c:
-         * ext/dv/gstdvdec.c:
-         * ext/esd/esdmon.c:
-         * ext/esd/esdsink.c:
-         * ext/flac/gstflacdec.c:
-         * ext/flac/gstflacenc.c:
-         * ext/flac/gstflactag.c:
-         * ext/gconf/gstgconfaudiosink.c: (gst_gconf_audio_sink_base_init):
-         * ext/gconf/gstgconfaudiosrc.c: (gst_gconf_audio_src_base_init):
-         * ext/gconf/gstgconfvideosink.c: (gst_gconf_video_sink_base_init):
-         * ext/gconf/gstgconfvideosrc.c: (gst_gconf_video_src_base_init):
-         * ext/gdk_pixbuf/gstgdkpixbuf.c:
-         * ext/gdk_pixbuf/pixbufscale.c:
-         * ext/hal/gsthalaudiosink.c: (gst_hal_audio_sink_base_init):
-         * ext/hal/gsthalaudiosrc.c: (gst_hal_audio_src_base_init):
-         * ext/jpeg/gstjpegdec.c:
-         * ext/jpeg/gstjpegenc.c:
-         * ext/jpeg/gstsmokedec.c:
-         * ext/jpeg/gstsmokeenc.c:
-         * ext/libcaca/gstcacasink.c:
-         * ext/libmng/gstmngdec.c:
-         * ext/libmng/gstmngenc.c:
-         * ext/libpng/gstpngdec.c:
-         * ext/libpng/gstpngenc.c:
-         * ext/mikmod/gstmikmod.c:
-         * ext/raw1394/gstdv1394src.c:
-         * ext/shout2/gstshout2.c:
-         * ext/speex/gstspeexdec.c:
-         * ext/speex/gstspeexenc.c:
-         * gst/alpha/gstalpha.c:
-         * gst/alpha/gstalphacolor.c:
-         * gst/auparse/gstauparse.c:
-         * gst/autodetect/gstautoaudiosink.c:
-         (gst_auto_audio_sink_base_init):
-         * gst/autodetect/gstautovideosink.c:
-         (gst_auto_video_sink_base_init):
-         * gst/avi/gstavimux.c: (gst_avimux_base_init):
-         * gst/cutter/gstcutter.c:
-         * gst/debug/breakmydata.c:
-         * gst/debug/efence.c:
-         * gst/debug/gstnavigationtest.c:
-         * gst/debug/negotiation.c:
-         * gst/debug/progressreport.c:
-         * gst/debug/testplugin.c:
-         * gst/effectv/gstaging.c:
-         * gst/effectv/gstdice.c:
-         * gst/effectv/gstedge.c:
-         * gst/effectv/gstquark.c:
-         * gst/effectv/gstrev.c:
-         * gst/effectv/gstvertigo.c:
-         * gst/effectv/gstwarp.c:
-         * gst/flx/gstflxdec.c:
-         * gst/goom/gstgoom.c:
-         * gst/interleave/deinterleave.c:
-         * gst/interleave/interleave.c:
-         * gst/law/alaw-decode.c: (gst_alawdec_base_init):
-         * gst/law/alaw-encode.c: (gst_alawenc_base_init):
-         * gst/law/mulaw-decode.c: (gst_mulawdec_base_init):
-         * gst/law/mulaw-encode.c: (gst_mulawenc_base_init):
-         * gst/level/gstlevel.c:
-         * gst/matroska/matroska-demux.c: (gst_matroska_demux_base_init):
-         * gst/matroska/matroska-mux.c: (gst_matroska_mux_base_init):
-         * gst/median/gstmedian.c:
-         * gst/monoscope/gstmonoscope.c:
-         * gst/multipart/multipartdemux.c:
-         * gst/multipart/multipartmux.c:
-         * gst/oldcore/gstmd5sink.c:
-         * gst/oldcore/gstmultifilesrc.c:
-         * gst/oldcore/gstpipefilter.c:
-         * gst/oldcore/gstshaper.c:
-         * gst/oldcore/gststatistics.c:
-         * gst/rtp/gstasteriskh263.c:
-         * gst/rtp/gstrtpL16depay.c:
-         * gst/rtp/gstrtpL16pay.c:
-         * gst/rtp/gstrtpamrdepay.c:
-         * gst/rtp/gstrtpamrpay.c:
-         * gst/rtp/gstrtpdepay.c:
-         * gst/rtp/gstrtpgsmpay.c:
-         * gst/rtp/gstrtph263pay.c:
-         * gst/rtp/gstrtph263pdepay.c:
-         * gst/rtp/gstrtph263ppay.c:
-         * gst/rtp/gstrtpmp4gpay.c:
-         * gst/rtp/gstrtpmp4vdepay.c:
-         * gst/rtp/gstrtpmp4vpay.c:
-         * gst/rtp/gstrtpmpadepay.c:
-         * gst/rtp/gstrtpmpapay.c:
-         * gst/rtp/gstrtppcmadepay.c:
-         * gst/rtp/gstrtppcmapay.c:
-         * gst/rtp/gstrtppcmudepay.c:
-         * gst/rtp/gstrtppcmupay.c:
-         * gst/rtp/gstrtpspeexdepay.c:
-         * gst/rtp/gstrtpspeexpay.c:
-         * gst/rtsp/gstrtpdec.c:
-         * gst/smpte/gstsmpte.c:
-         * gst/videobox/gstvideobox.c:
-         * gst/videofilter/gstgamma.c: (gst_gamma_base_init):
-         * gst/videofilter/gstvideobalance.c:
-         * gst/videofilter/gstvideoflip.c:
-         * gst/videofilter/gstvideotemplate.c:
-         (gst_videotemplate_base_init):
-         * gst/videomixer/videomixer.c:
-         * gst/wavenc/gstwavenc.c:
-         * gst/wavparse/gstwavparse.c: (gst_wavparse_base_init):
-         better/unified long descriptions
-         Fixed #336602
-         Some cleanups to auparse, don't send multiple newsegments.
-
-2006-03-29 11:31:55 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/mpegstream/gstmpegparse.c: Don't unref event unconditionally after giving away ownership (gst_pad_push_event(), g...
-         Original commit message from CVS:
-         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_handle_src_event):
-         Don't unref event unconditionally after giving away ownership
-         (gst_pad_push_event(), gst_pad_send_event() and
-         gst_pad_event_default() take ownership of the event
-         passed to them). Fixes warnings/crashes caused by
-         navigation events.
-
-2006-03-28 20:19:31 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/mpegstream/gstmpegdemux.c: Don't ref NULL caps (private streams have NULL caps) (#336387); also, no need to set c...
-         Original commit message from CVS:
-         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer):
-         Don't ref NULL caps (private streams have NULL caps) (#336387);
-         also, no need to set caps on the same buffer twice.
-
-2006-03-28 19:44:51 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/mpegstream/: Don't leak element and pad names in error messages, use
-         Original commit message from CVS:
-         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_event),
-         (gst_dvd_demux_handle_dvd_event), (gst_dvd_demux_get_audio_stream),
-         (gst_dvd_demux_get_subpicture_stream):
-         * gst/mpegstream/gstmpegdemux.c:
-         (gst_mpeg_demux_sync_stream_to_time):
-         Don't leak element and pad names in error messages, use
-         GST_DEBUG_PAD_NAME instead. Add some more debug code.
-
-2006-03-28 19:29:39 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/dvdread/dvdreadsrc.c: Name the structure in the custom event with the language codes for the audio and subtitle s...
-         Original commit message from CVS:
-         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_init),
-         (gst_dvd_read_src_goto_title), (gst_dvd_read_src_read):
-         Name the structure in the custom event with the
-         language codes for the audio and subtitle streams
-         actually like dvddemux expects it to be named.
-         Set caps on source pad and outgoing buffers.
-
-2006-03-28 16:06:05 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/lame/gstlame.*: Make xingheader property non-functional, it's broken anyway after all (use xingmux instead).
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_init), (gst_lame_set_property),
-         (gst_lame_get_property), (gst_lame_setup):
-         * ext/lame/gstlame.h:
-         Make xingheader property non-functional, it's broken anyway
-         after all (use xingmux instead).
-
-2006-03-28 15:10:18 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/lame/gstlame.c: On EOS, flush encoder and send remaining data. Fix return value handling in sink event function.
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_sink_event):
-         On EOS, flush encoder and send remaining data. Fix
-         return value handling in sink event function.
-
-2006-03-27 14:04:08 +0000  Jürg Billeter <j@bitron.ch>
-
-         ext/dvdread/dvdreadsrc.c: Fix wrong check for started flag when setting the 'device' property.
-         Original commit message from CVS:
-         Patch by: Jürg Billeter  <j at bitron dot ch>
-         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_set_property):
-         Fix wrong check for started flag when setting the 'device' property.
-         We want to allow it when the source is NOT started yet and ignore it
-         when the source is running.
-
-2006-03-27 10:39:03 +0000  Fabrizio Gennari <fabrizio.ge@tiscali.it>
-
-         gst/asfdemux/gstasfdemux.*: Subtract first timestamp from timestamps, so that stream starts from 0; makes live stream...
-         Original commit message from CVS:
-         Patch by: Fabrizio Gennari  <fabrizio dot ge at tiscali dot it>
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_setup_pad),
-         (gst_asf_demux_process_chunk):
-         * gst/asfdemux/gstasfdemux.h:
-         Subtract first timestamp from timestamps, so that
-         stream starts from 0; makes live streams that don't
-         start at 0 work again (fixes #317310, #336097).
-
-2006-03-27 10:09:43 +0000  Christian Kirbach <christian.kirbach@googlemail.com>
-
-         configure.ac: Remove CXX tag from AS_LIBTOOL_TAGS, just like we did for
-         Original commit message from CVS:
-         Patch by: Christian Kirbach
-         * configure.ac:
-         Remove CXX tag from AS_LIBTOOL_TAGS, just like we did for
-         -good. Fixes build on some systems (#331838).
-
-2006-03-24 19:47:37 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/realmedia/rmdemux.c: Extract more tags and also post codec name tag on the bus so this shows up in totem and naut...
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
-         (gst_rmdemux_parse_cont):
-         Extract more tags and also post codec name tag on the
-         bus so this shows up in totem and nautilus.
-
-2006-03-24 19:06:41 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/realmedia/rmdemux.c: Extra data usually goes into the caps as 'codec_data', not as first buffer into the stream.
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
-         (gst_rmdemux_fill_audio_packet), (gst_rmdemux_parse_packet):
-         Extra data usually goes into the caps as 'codec_data', not
-         as first buffer into the stream.
-         Need to byte swap AC3 content in realmedia files for some
-         reason (fixes #331588).
-
-2006-03-24 12:08:39 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/realmedia/rmdemux.c: When operating in pull mode, post an error message on the bus when all source pads are unlin...
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_init),
-         (gst_rmdemux_validate_offset), (gst_rmdemux_loop),
-         (gst_rmdemux_parse_mdpr), (gst_rmdemux_parse_packet):
-         When operating in pull mode, post an error message on the
-         bus when all source pads are unlinked or some other fatal
-         error occured (#323023). Regrade some recurring debug messages
-         to LOG level. Convert c++-style comments into C-style ones.
-
-2006-03-24 11:42:31 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/realmedia/rmdemux.*: Handle unlinked source pads properly and stop if all source pads are unlinked (#323023).
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_perform_seek),
-         (gst_rmdemux_loop), (gst_rmdemux_chain), (gst_rmdemux_send_event),
-         (gst_rmdemux_all_source_pads_unlinked),
-         (gst_rmdemux_at_least_one_stream_flowok), (gst_rmdemux_add_stream),
-         (gst_rmdemux_parse_packet):
-         * gst/realmedia/rmdemux.h:
-         Handle unlinked source pads properly and stop if all source pads
-         are unlinked (#323023).
-
-2006-03-23 18:17:34 +0000  Michal Benes <michal.benes@xeris.cz>
-
-         gst/mpegstream/: Timestamps in mpeg stream are 32-bit numbers. Therefore, with a clock_freq of 90kHz this timestamp o...
-         Original commit message from CVS:
-         Patch by: Michal Benes <michal dot benes at xeris dot cz>
-         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_init),
-         (gst_mpeg_demux_parse_packet), (gst_mpeg_demux_parse_pes),
-         (gst_mpeg_demux_send_subbuffer), (gst_mpeg_demux_reset):
-         * gst/mpegstream/gstmpegdemux.h:
-         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead):
-         Timestamps in mpeg stream are 32-bit numbers. Therefore, with a
-         clock_freq of 90kHz this timestamp overflows every ~13 hours. This
-         situation really happens when grabbing DVB streams. Current
-         mpegdemuxer can not handle this situation correctly and it
-         restarts counting gstreamer timestamps from zero.
-         Fixes #326598.
-
-2006-03-15 22:01:40 +0000  Michael Smith <msmith@xiph.org>
-
-         ext/a52dec/gsta52dec.*: Fix #334550: failure to play raw AC3 files due to segment problems.
-         Original commit message from CVS:
-         * ext/a52dec/gsta52dec.c: (gst_a52dec_sink_event),
-         (gst_a52dec_chain_raw), (gst_a52dec_change_state):
-         * ext/a52dec/gsta52dec.h:
-         Fix #334550: failure to play raw AC3 files due to segment problems.
-
-2006-03-15 13:43:42 +0000  Christophe Fergeau <teuf@gnome.org>
-
-         ext/lame/gstlame.c: use GST_DEBUG_FUNCPTR more often.
-         Original commit message from CVS:
-         Patch by: Christophe Fergeau  <teuf gnome org>
-         * ext/lame/gstlame.c: (gst_lame_release_memory),
-         (gst_lame_finalize), (gst_lame_class_init),
-         (gst_lame_sink_setcaps), (gst_lame_init), (gst_lame_sink_event),
-         (gst_lame_change_state):
-         Fix some memory leaks (#333345), use GST_DEBUG_FUNCPTR more often.
-
-2006-03-14 19:41:17 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/mad/gstmad.c: Include AUDIO_CODEC tag with tags posted if input is not framed (#334258). Use _scale() util functi...
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (gst_mad_convert_sink), (gst_mad_update_info),
-         (gst_mad_sink_event), (gst_mad_change_state):
-         Include AUDIO_CODEC tag with tags posted if input is not
-         framed (#334258). Use _scale() util functions in more places.
-
-2006-03-12 11:00:33 +0000  Christophe Fergeau <teuf@gnome.org>
-
-         ext/lame/gstlame.c: mark the xing-header property as BROKEN (see http://bugzilla.gnome.org/show_bug.cgi?id=330317#c19...
-         Original commit message from CVS:
-         2006-03-12  Christophe Fergeau  <teuf@gnome.org>
-         Reviewed by: Tim-Philipp Müller  <tim at centricular dot net>
-         * ext/lame/gstlame.c: (gst_lame_class_init): mark the xing-header
-         property as BROKEN (see
-         http://bugzilla.gnome.org/show_bug.cgi?id=330317#c19 for an
-         explanation why it's broken).
-
-2006-03-11 11:12:30 +0000  Christophe Fergeau <teuf@gnome.org>
-
-         added new element to add Xing headers to MP3 files (this allows decoder to figure out the length of VBR files)
-         Original commit message from CVS:
-         2006-03-11  Christophe Fergeau  <teuf@gnome.org>
-         Reviewed by: Tim-Philipp Müller  <tim at centricular dot net>
-         * configure.ac:
-         * gst/xingheader/Makefile.am:
-         * gst/xingheader/gstxingmux.c:
-         * gst/xingheader/gstxingmux.h: added new element to add Xing headers
-         to MP3 files (this allows decoder to figure out the length of VBR
-         files)
-
-2006-03-07 11:19:55 +0000  Alex Lancaster <alexlan@fedoraproject.org>
-
-         ext/mad/gstid3tag.c: Add support for writing the GST_TAG_ALBUM_VOLUME_NUMBER
-         Original commit message from CVS:
-         * ext/mad/gstid3tag.c: (tag_list_to_id3_tag_foreach):
-         Add support for writing the GST_TAG_ALBUM_VOLUME_NUMBER
-         tag (#333683, patch by: Alex Lancaster).
-
-2006-03-02 20:03:00 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/amrnb/: Further fancyfication.
-         Original commit message from CVS:
-         * ext/amrnb/amrnbdec.c: (gst_amrnbdec_init),
-         (gst_amrnbdec_setcaps), (gst_amrnbdec_chain),
-         (gst_amrnbdec_state_change):
-         * ext/amrnb/amrnbenc.c: (gst_amrnbenc_init),
-         (gst_amrnbenc_setcaps), (gst_amrnbenc_chain),
-         (gst_amrnbenc_state_change):
-         * ext/amrnb/amrnbenc.h:
-         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
-         (gst_amrnbparse_query):
-         Further fancyfication.
-         Use _take to get writable data from the adapter.
-         Precalc packet duration.
-         Handle disconts.
-         Forward _push to upstream.
-         Post error messages when something goes wrong.
-         Remove old code in amrnbparse.
-         Don't ignore query results from upstream.
-
-2006-03-02 18:45:40 +0000  Michael Smith <msmith@xiph.org>
-
-         ext/amrnb/amrnbenc.c: The AMR encoder writes into the audio buffers it processes, so use gst_buffer_make_writable() o...
-         Original commit message from CVS:
-         * ext/amrnb/amrnbenc.c: (gst_amrnbenc_chain):
-         The AMR encoder writes into the audio buffers it processes, so
-         use gst_buffer_make_writable() on buffers we might (they go through
-         an adapter, so there can be copying going on later anyway) be
-         encoding.
-
-2006-03-01 12:35:09 +0000  Jens Granseuer <jensgr@gmx.net>
-
-         gst/mpegstream/gstmpegparse.c: Declare variables at the beginning of a block and make
-         Original commit message from CVS:
-         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_pad_added),
-         (gst_mpeg_parse_handle_src_query):
-         Declare variables at the beginning of a block and make
-         gcc-2.9x happy (fixes #328957; patch by: Jens Granseuer).
-
-2006-03-01 09:55:49 +0000  Fabrizio <fabrizio.ge@tiscali.it>
-
-         gst/asfdemux/gstasfdemux.c: Read packet size, sequence and padsize in right order again
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_data):
-         Read packet size, sequence and padsize in right order again
-         (fixes #332796; patch by: Fabrizio Gennari).
-
-2006-02-28 13:50:02 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         gst/iec958/ac3iec.c: Set a proper klass (Codec/Muxer/Audio) for the ElementDetails.
-         Original commit message from CVS:
-         * gst/iec958/ac3iec.c:
-         Set a proper klass (Codec/Muxer/Audio) for the ElementDetails.
-
-2006-02-27 18:37:47 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         configure.ac: Make the id3tag and mad checks check for both a header and the appropriate library if the pkg-config is...
-         Original commit message from CVS:
-         * configure.ac:
-         Make the id3tag and mad checks check for both a header and the
-         appropriate library if the pkg-config is missing. (Closes #331842)
-         Split the id3tag and mad checks into 2 pieces. Sometime soon I might
-         do the same for the plugins themselves.
-
-2006-02-27 14:49:05 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/mpeg2dec/gstmpeg2dec.*: Don't treat STATE_INVALID as fatal error; throw an error only after five consecutive deco...
-         Original commit message from CVS:
-         Reviewed by: Tim-Philipp Müller  <tim at centricular dot net>
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
-         (gst_mpeg2dec_reset), (gst_mpeg2dec_chain):
-         * ext/mpeg2dec/gstmpeg2dec.h:
-         Don't treat STATE_INVALID as fatal error; throw an error
-         only after five consecutive decoding errors. Makes decoding
-         mpeg streams more robust and fixes playback of joined clips
-         (#300682).
-
-2006-02-26 22:33:33 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/dvdnav/dvdnavsrc.h: Oops. forgot to add this one.
-         Original commit message from CVS:
-         * ext/dvdnav/dvdnavsrc.h:
-         Oops. forgot to add this one.
-
-2006-02-26 21:25:01 +0000  Julien Moutte <julien@moutte.net>
-
-         ext/Makefile.am: Fix dist-check.
-         Original commit message from CVS:
-         2006-02-26  Julien MOUTTE  <julien@moutte.net>
-         * ext/Makefile.am: Fix dist-check.
-
-2006-02-26 18:01:15 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         configure.ac: Disable dvdnavsrc for now.
-         Original commit message from CVS:
-         * configure.ac:
-         Disable dvdnavsrc for now.
-
-2006-02-26 17:55:05 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         dvdnavsrc ported to 0.10, for the most part at least. Not quite ready for prime time yet though.
-         Original commit message from CVS:
-         * configure.ac:
-         * ext/Makefile.am:
-         * ext/dvdnav/Makefile.am:
-         * ext/dvdnav/dvdnavsrc.c: (gst_dvd_nav_src_base_init),
-         (gst_dvd_nav_src_class_init), (gst_dvd_nav_src_check_get_range),
-         (gst_dvd_nav_src_init), (gst_dvd_nav_src_finalize),
-         (gst_dvd_nav_src_is_open), (gst_dvd_nav_src_set_property),
-         (gst_dvd_nav_src_get_property), (gst_dvd_nav_src_set_clock),
-         (gst_dvd_nav_src_tca_seek), (gst_dvd_nav_src_update_streaminfo),
-         (gst_dvd_nav_src_set_domain), (gst_dvd_nav_src_update_highlight),
-         (gst_dvd_nav_src_user_op), (dvdnav_get_event_name),
-         (dvdnav_get_read_domain_name), (gst_dvd_nav_src_print_event),
-         (gst_dvd_nav_src_make_dvd_event),
-         (gst_dvd_nav_src_structure_set_uint64),
-         (gst_dvd_nav_src_push_dvd_nav_packet_event),
-         (gst_dvd_nav_src_push_clut_change_event), (read_vts_info),
-         (gst_dvd_nav_src_push_titlelang_event),
-         (gst_dvd_nav_src_process_next_block), (gst_dvd_nav_src_create),
-         (gst_dvd_nav_src_start), (gst_dvd_nav_src_stop),
-         (gst_dvd_nav_src_handle_navigation_event),
-         (gst_dvd_nav_src_handle_seek_event), (gst_dvd_nav_src_src_event),
-         (gst_dvd_nav_src_query_position), (gst_dvd_nav_src_query_duration),
-         (gst_dvd_nav_src_query), (gst_dvd_nav_src_uri_get_type),
-         (gst_dvd_nav_src_uri_get_protocols), (gst_dvd_nav_src_uri_get_uri),
-         (gst_dvd_nav_src_uri_set_uri), (gst_dvd_nav_src_uri_handler_init),
-         (gst_dvd_nav_src_do_init), (plugin_init):
-         dvdnavsrc ported to 0.10, for the most part at least. Not quite
-         ready for prime time yet though.
-
-2006-02-23 20:08:58 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/cdio/Makefile.am: Add GST_BASE_CFLAGS and GST_BASE_LIBS (seems to be required for Cygwin, see #317048)
-         Original commit message from CVS:
-         * ext/cdio/Makefile.am:
-         Add GST_BASE_CFLAGS and GST_BASE_LIBS (seems to be
-         required for Cygwin, see #317048)
-         * gst/rtp/gstasteriskh263.c:
-         Cygwin has includes for both the unix network socket API
-         and the windows API, but only one can be included, so fix
-         includes to only use one or the other, prefering the unxi
-         one (#317048).
-
-2006-02-22 14:54:54 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         Port dvdsubdec to 0.10
-         Original commit message from CVS:
-         * configure.ac:
-         * gst/dvdsub/Makefile.am:
-         * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_base_init),
-         (gst_dvd_sub_dec_class_init), (gst_dvd_sub_dec_init),
-         (gst_dvd_sub_dec_finalize), (gst_dvd_sub_dec_src_event),
-         (gst_dvd_sub_dec_get_event_delay), (gst_dvd_sub_dec_parse_subpic),
-         (gst_get_nibble), (gst_setup_palette), (gst_get_rle_code),
-         (gst_draw_rle_line), (gst_dvd_sub_dec_merge_title),
-         (gst_send_empty_fill), (gst_send_subtitle_frame),
-         (gst_dvd_sub_dec_advance_time), (gst_dvd_sub_dec_chain),
-         (gst_dvd_sub_dec_sink_event), (gst_dvd_sub_dec_handle_dvd_event),
-         (plugin_init):
-         * gst/dvdsub/gstdvdsubdec.h:
-         Port dvdsubdec to 0.10
-
-2006-02-21 16:24:10 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         gst/mpegstream/gstdvddemux.c: Push the rank up to SECONDARY+1 so that dvddemux is preferred over mpegdemux for MPEG-2...
-         Original commit message from CVS:
-         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_plugin_init):
-         Push the rank up to SECONDARY+1 so that dvddemux is preferred over
-         mpegdemux for MPEG-2 video streams.
-
-2006-02-20 19:16:10 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         configure.ac: Bump nano back to CVS
-         Original commit message from CVS:
-         * configure.ac:
-         Bump nano back to CVS
-
-=== release 0.10.2 ===
-
-2006-02-20 19:13:54 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         configure.ac: releasing 0.10.2, "Season to Taste"
-         Original commit message from CVS:
-         * configure.ac:
-         releasing 0.10.2, "Season to Taste"
-
-2006-02-19 23:45:34 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         configure.ac: releasing 0.10.1.3 prelease for 0.10.2
-         Original commit message from CVS:
-         * configure.ac:
-         releasing 0.10.1.3 prelease for 0.10.2
-
-2006-02-17 17:58:44 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/asfdemux/gstasfdemux.c: In sink event handler, release object lock again _before_ sending EOS event downstream (#...
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_sink_event):
-         In sink event handler, release object lock again
-         _before_ sending EOS event downstream (#313838).
-
-2006-02-17 17:54:37 +0000  Christian Schaller <uraeus@gnome.org>
-
-       * ChangeLog:
-       * gst/asfdemux/gstasf.c:
-         fix rank of asfdemux
-         Original commit message from CVS:
-         fix rank of asfdemux
-
-2006-02-17 15:08:28 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         configure.ac: releasing 0.10.1.2 prelease for 0.10.2
-         Original commit message from CVS:
-         * configure.ac:
-         releasing 0.10.1.2 prelease for 0.10.2
-
-2006-02-17 15:02:30 +0000  Christian Schaller <uraeus@gnome.org>
-
-       * gst-plugins-ugly.spec.in:
-         latest updates
-         Original commit message from CVS:
-         latest updates
-
-2006-02-17 11:51:12 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/mpeg2dec/gstmpeg2dec.c: When we need to crop the output buffer, make sure we create a buffer of the right size an...
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c: (crop_copy_i420_buffer),
-         (crop_copy_i422_buffer), (crop_buffer):
-         When we need to crop the output buffer, make sure we
-         create a buffer of the right size and respect the implicit
-         striding used for I420 elsewhere in GStreamer (#331301).
-
-2006-02-17 11:19:34 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/cdio/gstcdio.c: Init debug category (#331253).
-         Original commit message from CVS:
-         * ext/cdio/gstcdio.c: (plugin_init):
-         Init debug category (#331253).
-
-2006-02-17 10:24:56 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         gst/asfdemux/gstasfdemux.c: Do not error out on non-recognized streams. Ignore them and allow playback of the other s...
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_stream):
-         Do not error out on non-recognized streams. Ignore them and allow
-         playback of the other streams.
-
-2006-02-17 10:10:40 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         gst/dvdlpcmdec/gstdvdlpcmdec.c: Add a small sanity check for LPCM reading.
-         Original commit message from CVS:
-         * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain_dvd):
-         Add a small sanity check for LPCM reading.
-
-2006-02-17 09:54:43 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         gst/asfdemux/gstasfdemux.c: Take into account the file properties preroll value for timestamping/newsegment. It's wei...
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_file):
-         Take into account the file properties preroll value for
-         timestamping/newsegment. It's weird this value was commented out.
-
-2006-02-16 17:57:59 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/asfdemux/Makefile.am: More asf makefile fixing.
-         Original commit message from CVS:
-         * gst/asfdemux/Makefile.am:
-         More asf makefile fixing.
-
-2006-02-16 17:16:06 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/lame/gstlame.c: Fix up lame a bit.
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_init), (gst_lame_chain),
-         (gst_lame_change_state):
-         Fix up lame a bit.
-         Apply patch #319782 by Gautier Portet.
-
-2006-02-16 11:14:11 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         gst/asfdemux/Makefile.am: But we do need to link against the riff libraryr.
-         Original commit message from CVS:
-         * gst/asfdemux/Makefile.am:
-         But we do need to link against the riff libraryr.
-
-2006-02-16 11:08:51 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         gst/asfdemux/Makefile.am: We don't want asfmux.c yet.
-         Original commit message from CVS:
-         * gst/asfdemux/Makefile.am:
-         We don't want asfmux.c yet.
-
-2006-02-16 09:50:43 +0000  Jon Trowbridge <trow@ximian.com>
-
-         ext/mad/gstmad.c: Port fixes for bugs 314771, 308772, 140237, and 302625
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (gst_mad_init), (scale), (gst_mad_update_info),
-         (gst_mad_sink_event), (gst_mad_check_caps_reset), (gst_mad_chain),
-         (gst_mad_change_state):
-         Port fixes for bugs 314771, 308772, 140237, and 302625
-         from 0.8 (Patch by Jonathan Matthew, Fixes #329575)
-         Use GST_EVENT_FLUSH_STOP to clear data from the current input
-         buffer, to avoid using it for any future decoding.
-
-2006-02-15 15:48:07 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         asfdemux ported to 0.10. Does still need a bit of work (seems like there's something funky going on when timestamping...
-         Original commit message from CVS:
-         * configure.ac:
-         * gst/asfdemux/asfheaders.c: (gst_asf_identify_guid),
-         (gst_asf_get_guid_nick):
-         * gst/asfdemux/asfheaders.h:
-         * gst/asfdemux/gstasf.c: (plugin_init):
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init),
-         (gst_asf_demux_class_init), (gst_asf_demux_init),
-         (gst_asf_demux_sink_event), (gst_asf_demux_handle_seek_event),
-         (gst_asf_demux_handle_src_event),
-         (gst_asf_demux_get_current_offset), (gst_asf_demux_chain),
-         (gst_asf_demux_skip_bytes), (gst_asf_demux_identify_guid),
-         (gst_asf_demux_get_uint8), (gst_asf_demux_get_uint16),
-         (gst_asf_demux_get_uint32), (gst_asf_demux_get_uint64),
-         (gst_asf_demux_get_var_length), (gst_asf_demux_get_buffer),
-         (gst_asf_demux_get_bytes), (gst_asf_demux_get_string),
-         (gst_asf_demux_get_guid), (gst_asf_demux_get_obj_file),
-         (gst_asf_demux_get_bitrate_record),
-         (gst_asf_demux_get_obj_comment), (gst_asf_demux_get_obj_header),
-         (gst_asf_demux_get_obj_header_ext), (gst_asf_demux_get_obj_stream),
-         (gst_asf_demux_get_replicated_data), (gst_asf_demux_get_obj_data),
-         (gst_asf_demux_get_obj_data_correction),
-         (gst_asf_demux_get_stream_audio),
-         (gst_asf_demux_get_stream_correction),
-         (gst_asf_demux_get_stream_video),
-         (gst_asf_demux_get_stream_video_format),
-         (gst_asf_demux_get_stream), (gst_asf_demux_setup_pad),
-         (gst_asf_demux_add_audio_stream), (gst_asf_demux_add_video_stream),
-         (gst_asf_demux_process_stream),
-         (gst_asf_demux_get_gst_tag_from_tag_name),
-         (gst_asf_demux_commit_taglist),
-         (gst_asf_demux_process_ext_content_desc),
-         (gst_asf_demux_get_object_header), (gst_asf_demux_process_data),
-         (gst_asf_demux_process_header), (gst_asf_demux_process_file),
-         (gst_asf_demux_process_comment),
-         (gst_asf_demux_process_bitrate_props_object),
-         (gst_asf_demux_process_header_ext), (gst_asf_demux_process_object),
-         (gst_asf_demux_descramble_segment),
-         (gst_asf_demux_element_send_event),
-         (gst_asf_demux_send_event_unlocked), (gst_asf_demux_push_buffer),
-         (gst_asf_demux_process_chunk), (gst_asf_demux_process_segment),
-         (gst_asf_demux_handle_data), (gst_asf_demux_parse_data),
-         (gst_asf_demux_get_src_query_types),
-         (gst_asf_demux_handle_src_query), (gst_asf_demux_change_state):
-         * gst/asfdemux/gstasfdemux.h:
-         asfdemux ported to 0.10. Does still need a bit of work (seems like
-         there's something funky going on when timestamping video frames).
-         The seeking code is likely to make Wim cry, but hey, at least it
-         compiles.
-
-2006-02-15 10:18:39 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/amrnb/amrnbdec.c: Some more comments.
-         Original commit message from CVS:
-         * ext/amrnb/amrnbdec.c: (gst_amrnbdec_setcaps),
-         (gst_amrnbdec_chain), (gst_amrnbdec_state_change):
-         Some more comments.
-         * ext/mpeg2dec/gstmpeg2dec.c: (crop_buffer), (handle_slice):
-         Applied patch from Fabrizio Gennari, fixes #330844.
-
-2006-02-14 14:57:18 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/dvdread/dvdreadsrc.*: Let's try to play the title the user set via the URI handler or via properties instead of a...
-         Original commit message from CVS:
-         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_init),
-         (gst_dvd_read_src_class_init), (gst_dvd_read_src_start),
-         (gst_dvd_read_src_stop), (gst_dvd_read_src_goto_title),
-         (gst_dvd_read_src_set_property), (gst_dvd_read_src_get_property),
-         (gst_dvd_read_src_uri_get_uri), (gst_dvd_read_src_uri_set_uri):
-         * ext/dvdread/dvdreadsrc.h:
-         Let's try to play the title the user set via the URI handler or
-         via properties instead of always playing the first title. Also,
-         Also, count title/chapter/angle number in URI and properties
-         from 1 rather than 0.
-
-2006-02-13 14:09:26 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/dvdread/dvdreadsrc.c: Don't implement GstBaseSrc::get_size or GstBaseSrc::is_seekable, otherwise GstBaseSrc will ...
-         Original commit message from CVS:
-         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_class_init),
-         (gst_dvd_read_src_get_size), (gst_dvd_read_src_do_seek),
-         (gst_dvd_read_src_do_duration_query):
-         Don't implement GstBaseSrc::get_size or GstBaseSrc::is_seekable,
-         otherwise GstBaseSrc will think we can operate pull_range based,
-         which we don't really, and typefinding will fail miserably.
-         Also, make seeking work somewhat (only works with flumpegdemux
-         at the moment, mpegstream needs fixing for that first).
-
-2006-02-13 14:00:35 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/dvdread/dvdreadsrc.c: Only allocate buffer once we know exactly how much we need, rather than gratuitously alloca...
-         Original commit message from CVS:
-         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_read),
-         (gst_dvd_read_src_create), (gst_dvd_read_src_src_event):
-         Only allocate buffer once we know exactly how much we need,
-         rather than gratuitously allocating 2MB-buffers all the time
-         even if we usually need much less than that. Also, demote
-         a debug message from DEBUG to LOG level.
-
-2006-02-10 12:40:54 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/dvdread/dvdreadsrc.c: Add some more debugging and fix duration query in BYTES.
-         Original commit message from CVS:
-         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_class_init),
-         (gst_dvd_read_src_seekable), (gst_dvd_read_src_get_size),
-         (gst_dvd_read_src_do_seek), (gst_dvd_read_src_do_duration_query),
-         (gst_dvd_read_src_do_position_query):
-         Add some more debugging and fix duration query in BYTES.
-
-2006-02-09 17:27:57 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         Half-baked port to 0.10. Needs some love in the seeking department, but at least it does something.
-         Original commit message from CVS:
-         * configure.ac:
-         * ext/Makefile.am:
-         * ext/dvdread/Makefile.am:
-         * ext/dvdread/dvdreadsrc.c:
-         * ext/dvdread/dvdreadsrc.h:
-         Half-baked port to 0.10. Needs some love
-         in the seeking department, but at least
-         it does something.
-         * ext/dvdread/stream_labels.c:
-         * ext/dvdread/stream_labels.h:
-         Remove these (we use ISO-639 language codes internally; applications
-         that want to translate those into language names for display to the
-         user should rely on the iso-codes package for that).
-
-2006-02-06 15:55:28 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/amrnb/amrnbdec.*: Fix amrnbdec, handle events, take copy from adapter since the decoder apparently writes in the ...
-         Original commit message from CVS:
-         * ext/amrnb/amrnbdec.c: (gst_amrnbdec_init),
-         (gst_amrnbdec_setcaps), (gst_amrnbdec_event), (gst_amrnbdec_chain),
-         (gst_amrnbdec_state_change):
-         * ext/amrnb/amrnbdec.h:
-         Fix amrnbdec, handle events, take copy from adapter since the decoder
-         apparently writes in the source data.
-         Use some _scale_int, and precalc duration.
-         Fix some leaks, post ERROR messages.
-
-2006-02-06 11:34:23 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         docs/plugins/: Add cdio plugin to docs.
-         Original commit message from CVS:
-         * docs/plugins/Makefile.am:
-         * docs/plugins/gst-plugins-good-plugins-docs.sgml:
-         * docs/plugins/gst-plugins-good-plugins-sections.txt:
-         * docs/plugins/inspect/plugin-cdio.xml:
-         Add cdio plugin to docs.
-         * ext/cdio/gstcdiocddasrc.c:
-         Add gtk-doc blurb.
-         * ext/cdio/gstcdio.c:
-         The plugin is called 'cdio' not 'cddio'.
-
-2006-02-04 15:22:02 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/realmedia/rmdemux.c: One source pad not being linked is not an error condition when we're still parsing the heade...
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream):
-         One source pad not being linked is not an error condition when we're
-         still parsing the header. In this case (e.g. where we don't have a
-         suitable decoder installed) just pretend everything is fine, so that
-         the demuxer will actually go on to signal no-more-pads when done
-         parsing the header, otherwise  decodebin/playbin will never post the
-         appropriate error message if decoders are not available.
-
-2006-02-03 18:24:54 +0000  Edgard Lima <edgard.lima@indt.org.br>
-
-       * ChangeLog:
-       * common:
-       * ext/mad/gstid3tag.c:
-       * gst/realmedia/rmdemux.c:
-         Just make it compile with --disable-gst-debug.
-         Original commit message from CVS:
-         Just make it compile with --disable-gst-debug.
-
-2006-01-31 22:03:30 +0000  Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
-
-         ext/mad/gstmad.c: Merge patch from Radoslaw Szkodzinski (bug 326734)
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (gst_mad_convert_src), (scale),
-         (gst_mad_check_caps_reset), (gst_mad_chain):
-         Merge patch from Radoslaw Szkodzinski (bug 326734)
-
-2006-01-30 22:00:18 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         ext/mad/gstid3tag.c: fixing Gdate handling enabling mux/demux mode switching adding better debug output
-         Original commit message from CVS:
-         * ext/mad/gstid3tag.c: (tag_list_to_id3_tag_foreach),
-         (gst_id3_tag_get_tag_to_render), (gst_id3_tag_sink_event),
-         (gst_id3_tag_src_link), (gst_id3_tag_send_tag_event),
-         (gst_id3_tag_chain):
-         fixing Gdate handling
-         enabling mux/demux mode switching
-         adding better debug output
-
-2006-01-30 18:57:45 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/mpegstream/gstmpegparse.c: If we haven't set caps on a source pad yet, the caps on the pad are NULL, not un-fixed...
-         Original commit message from CVS:
-         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_send_buffer):
-         If we haven't set caps on a source pad yet, the caps on the
-         pad are NULL, not un-fixed. Set caps on outgoing buffers.
-
-2006-01-23 18:37:16 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/lame/gstlame.*: Contrary to what the const char in the lame API might suggest, lame expects us to keep the string...
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_finalize), (gst_lame_class_init),
-         (gst_lame_init), (add_one_tag), (gst_lame_set_metadata):
-         * ext/lame/gstlame.h:
-         Contrary to what the const char in the lame API might suggest,
-         lame expects us to keep the strings we pass to id3tag_set_foo()
-         around; it doesn't free them either though, so we have to store
-         them somewhere and free them later when we can be sure lame
-         doesn't need them any longer.
-
-2006-01-23 15:02:04 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/lame/gstlame.c: don't pass an uninitialised string pointer to lame if we don't know how to handle the tag type, a...
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (add_one_tag):
-         Fix handling of GST_TAG_DATE (#311679), don't pass an
-         uninitialised string pointer to lame if we don't know
-         how to handle the tag type, and fix minor memory leak.
-
-2006-01-23 10:15:27 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/mad/gstmad.c: Fix debug message.
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (gst_mad_chain):
-         Fix debug message.
-
-2006-01-22 12:00:46 +0000  Martin Soto <martinsoto@users.sourceforge.net>
-
-         gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_process_event): Erase spurious call to gst_segment_set_newsegment.
-         Original commit message from CVS:
-         2006-01-22  Martin Soto  <martinsoto@users.sourceforge.net>
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_process_event):
-         Erase spurious call to gst_segment_set_newsegment.
-         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_process_event): Call
-         the superclass method when handling NEWSEGMENT events.
-         (gst_dvd_demux_handle_dvd_event): Get rid of dvd-audio-shutdown
-         and dvd-audio-restart event handling. There are currently less
-         hackish ways of handling the sparse audio stream problem.
-
-2006-01-20 14:18:20 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         fix up error domains, error strings, and use of translation
-         Original commit message from CVS:
-         2006-01-20  Thomas Vander Stichele  <thomas at apestaart dot org>
-         * ext/dvdnav/dvdnavsrc.c: (if):
-         * ext/dvdread/stream_labels.c:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_segment):
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_loop):
-         fix up error domains, error strings, and use of translation
-         * po/POTFILES.in:
-         fix up this file, even though none of them are actually marked
-         for build yet.
-
-2006-01-19 21:32:05 +0000  Martin Soto <martinsoto@users.sourceforge.net>
-
-         gst/mpegstream/gstmpegparse.h (struct _GstMPEGParse): gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_reset) (gst_mpeg_...
-         Original commit message from CVS:
-         2006-01-19  Martin Soto  <martinsoto@users.sourceforge.net>
-         * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParse):
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_reset)
-         (gst_mpeg_parse_process_event, gst_mpeg_parse_parse_packhead)
-         (gst_mpeg_parse_change_state):
-         Make timestamp adjustment somewhat milder. Actual timestamps are
-         now sent unmodified unless an actual gap is found in the
-         stream. This should fix time display when playing most MPEG
-         files.
-
-2006-01-19 00:10:51 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/cdio/: Fix build for libcdio versions >= 76; give slightly lower rank than cdparanoia.
-         Original commit message from CVS:
-         * ext/cdio/gstcdio.c: (gst_cdio_add_cdtext_field), (plugin_init):
-         * ext/cdio/gstcdio.h:
-         * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_get_cdtext):
-         Fix build for libcdio versions >= 76; give slightly lower rank
-         than cdparanoia.
-
-2006-01-18 19:30:36 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         Port libcdio cdda source, formerly known as cddasrc, now known as cdiocddasrc (fixes #323327). Should also read CD-TE...
-         Original commit message from CVS:
-         * configure.ac:
-         * ext/Makefile.am:
-         * ext/cdio/Makefile.am:
-         * ext/cdio/gstcdio.c:
-         * ext/cdio/gstcdio.h:
-         * ext/cdio/gstcdiocddasrc.c:
-         * ext/cdio/gstcdiocddasrc.h:
-         Port libcdio cdda source, formerly known as cddasrc, now known as
-         cdiocddasrc (fixes #323327). Should also read CD-TEXT if available,
-         but that's not tested (fixes #317658).
-
-2006-01-18 09:30:00 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         gst/mpegstream/gstmpegdemux.c: tss tss... always set caps on outgoing buffer.
-         Original commit message from CVS:
-         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer):
-         tss tss... always set caps on outgoing buffer.
-
-2006-01-17 14:16:52 +0000  Christian Schaller <uraeus@gnome.org>
-
-       * gst-plugins-ugly.spec.in:
-         update spec file
-         Original commit message from CVS:
-         update spec file
-
-2006-01-13 19:30:31 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ChangeLog:
-       * configure.ac:
-         back to HEAD
-         Original commit message from CVS:
-         back to HEAD
-
-=== release 0.10.1 ===
-
-2006-01-13 19:25:42 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-rmdemux.xml:
-         releasing 0.10.1
-         Original commit message from CVS:
-         releasing 0.10.1
-
-2006-01-11 11:44:02 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ChangeLog:
-       * configure.ac:
-         prerelease
-         Original commit message from CVS:
-         prerelease
-
-2006-01-10 11:43:37 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         Pass unhandled queries upstream (useful e.g. for SEEKING query)
-         Original commit message from CVS:
-         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_query):
-         * ext/mad/gstid3tag.c: (gst_id3_tag_src_query):
-         * ext/mad/gstmad.c: (gst_mad_src_query):
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_src_query):
-         * ext/sidplay/gstsiddec.cc:
-         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_handle_src_query):
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_src_query):
-         Pass unhandled queries upstream (useful e.g. for SEEKING query)
-         (fixes #325652; based on patch by: Philippe); make rmdemux return
-         FALSE for position queries, instead of setting -1 as value and
-         returning TRUE.
-
-2006-01-05 21:36:49 +0000  Martin Soto <martinsoto@users.sourceforge.net>
-
-         gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_adjust_ts)
-         Original commit message from CVS:
-         2006-01-05  Martin Soto  <martinsoto@users.sourceforge.net>
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_adjust_ts)
-         (gst_mpeg_parse_process_event, gst_mpeg_parse_pad_added): Don't
-         rewrite timestamps in the case segments are being set from
-         upstream, but use timestamps unmodified. Also send proper position
-         values. This allows for correct time display and makes queries
-         work in sink elements.
-         * gst/mpegstream/gstdvddemux.h:
-         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_init)
-         (gst_dvd_demux_handle_dvd_event, gst_dvd_demux_send_subbuffer):
-         Rename flush_filter to segment_filter, which is better represents
-         what the arreibute does.
-         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_process_event):
-         Activate segment filtering when a timestamp discontinuity is seen.
-
-2006-01-04 15:17:15 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/mad/gstmad.c: Don't forget that we need to send out a newsegment event after a restart even if we don't have enou...
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (gst_mad_chain):
-         Don't forget that we need to send out a newsegment event after a
-         restart even if we don't have enough data to decode a frame right
-         now.
-
-2005-12-30 23:51:46 +0000  Martin Soto <martinsoto@users.sourceforge.net>
-
-         gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event): Use the new "audio-shutdown" and "audio-restart" DVD e...
-         Original commit message from CVS:
-         2005-12-31  Martin Soto  <martinsoto@users.sourceforge.net>
-         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event):
-         Use the new "audio-shutdown" and "audio-restart" DVD events
-         instead of the "spu-still-frame" event to shutdown and restart
-         the audio pipeline.
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_adjust_ts):
-         Check for cases where the segment-based adjustment calculation
-         would produce negative values (which result in an overflow) and
-         return GST_CLOCK_TIME_NONE instead.
-         * gst/mpegstream/gstdvddemux.h:
-         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_init)
-         (gst_dvd_demux_process_event, gst_dvd_demux_send_subbuffer):
-         Add a mechanism to discard audio buffers with timestamps outside
-         the currently set segment. This was causing (sometimes serious)
-         synchronization problems after seeking in DVDs with LPCM audio,
-         since VOBUs usually contain audio material that lies outside the
-         timestamp range specified by the header.
-
-2005-12-30 16:25:05 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         ext/mad/gstid3tag.c: Remove lingering reference to GstID3Demux
-         Original commit message from CVS:
-         * ext/mad/gstid3tag.c: (gst_id3_tag_get_type):
-         Remove lingering reference to GstID3Demux
-         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_pes):
-         Don't output debug saying padding streams are unknown type,
-         because they're not
-
-2005-12-27 19:06:08 +0000  Martin Soto <martinsoto@users.sourceforge.net>
-
-         gst/mpegstream/gstdvddemux.c (AUDIO_CAPS)
-         Original commit message from CVS:
-         2005-12-27  Martin Soto  <martinsoto@users.sourceforge.net>
-         * gst/mpegstream/gstdvddemux.c (AUDIO_CAPS)
-         (gst_dvd_demux_get_audio_stream): Use audio/x-lpcm as mimetype for
-         LPCM.
-         * gstmpegdemux.h:
-         * gstmpegdemux.c (gst_mpeg_demux_get_video_stream)
-         (gst_mpeg_demux_get_audio_stream):
-         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_get_video_stream)
-         (gst_dvd_demux_get_audio_stream)
-         (gst_dvd_demux_get_subpicture_stream)
-         (gst_dvd_demux_send_subbuffer):
-         Send current* pad buffers with appropriate caps.
-
-2005-12-26 17:48:32 +0000  Martin Soto <martinsoto@users.sourceforge.net>
-
-         gst/iec958/ac3iec.*: (NORMAL_CAPS_DEF, RAW_AUDIO_CAPS_DEF, ac3iec_class_init)
-         Original commit message from CVS:
-         2005-12-26  Martin Soto  <martinsoto@users.sourceforge.net>
-         * gst/iec958/ac3iec.h:
-         * gst/iec958/ac3iec.c:
-         (NORMAL_CAPS_DEF, RAW_AUDIO_CAPS_DEF, ac3iec_class_init)
-         (ac3iec_init, ac3iec_set_property, ac3iec_get_property): Add a
-         raw-audio property to ac3iec958 that allows setting the source pad
-         caps to raw audio instead of audio/x-iec958. This makes it
-         possible to use ac3iec958 together with the normal alsasink
-         element to drive an external receiver that autodetects AC3
-         content.
-
-2005-12-23 15:48:04 +0000  Michael Smith <msmith@xiph.org>
-
-         gst/iec958/ac3iec.*: Accept audio/x-ac3 and audio/ac3 to ac3iec958 element.
-         Original commit message from CVS:
-         * gst/iec958/ac3iec.c: (ac3iec_init), (ac3iec_setcaps),
-         (ac3iec_chain_dvd):
-         * gst/iec958/ac3iec.h:
-         Accept audio/x-ac3 and audio/ac3 to ac3iec958 element.
-
-2005-12-21 10:25:34 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/mpeg2dec/gstmpeg2dec.c: When getting a seek event, first check if the upstream element can handle it and only do ...
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_src_event):
-         When getting a seek event, first check if the upstream element
-         can handle it and only do our own seek stuff when it can't
-         (should fix #322856).
-
-2005-12-21 09:58:43 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/mpeg2dec/gstmpeg2dec.c: Really convert to BYTES format when we want to convert to bytes (use right variable; fixe...
-         Original commit message from CVS:
-         Reviewed by: Tim-Philipp Müller  <tim at centricular dot net>
-         * ext/mpeg2dec/gstmpeg2dec.c: (normal_seek):
-         Really convert to BYTES format when we want to convert
-         to bytes (use right variable; fixes #322856).
-
-2005-12-19 17:26:47 +0000  Martin Soto <martinsoto@users.sourceforge.net>
-
-         Big mpegparse clean up, second round:
-         Original commit message from CVS:
-         2005-12-19  Martin Soto  <martinsoto@users.sourceforge.net>
-         Big mpegparse clean up, second round:
-         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event):
-         Send and EOS event down the audio pipeline when an still frame
-         event arrives. This prevents the pipeline from locking when a
-         still menu comes directly after a flush.
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_reset):
-         Don't send a newsegment in reset.
-         (gst_mpeg_parse_adjust_ts): Check for invalid timestamps.
-         (gst_mpeg_parse_handle_newsegment, gst_mpeg_parse_process_event):
-         Move the code of handle_newsegment to process_event. Send a
-         NEWSEGMENT after FLUSH_STOP.
-         (gst_mpeg_parse_change_state): Send a NEWSEGMENT right after
-         moving to PAUSED.
-         * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_send_event)
-         (gst_mpeg_demux_class_init): Don't override send_event.
-         * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_init)
-         (gst_mpeg_demux_send_event, gst_mpeg_demux_send_subbuffer)
-         (gst_mpeg_demux_reset):
-         * gst/mpegstream/gstmpegdemux.h:  Get rid of just_flushed
-         attribute.
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_process_event):
-         Reset the mpegparse element after a flush.
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_handle_newsegment):
-         Don't forward events.
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_process_event):
-         * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass):
-         handle_newsegment is not a virtual method anymore.
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_send_newsegment)
-         (gst_mpeg_parse_reset, gst_mpeg_parse_class_init):
-         * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass): Get
-         rid of send_newsegment virtual method.
-         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_process_event): Only
-         handle DVD events and call the superclass method for other event
-         types.
-         * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_send_event): Don't
-         override process_event anymore.
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_event)
-         (gst_mpeg_parse_process_event): Move actual event processing to
-         process event so that subclasses can properly override or extend
-         it.
-         * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass):
-         Eliminate time parameter in process event.
-         * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_init)
-         (gst_mpeg_demux_parse_packet, gst_mpeg_demux_parse_pes)
-         (gst_mpeg_demux_send_subbuffer):
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_class_init)
-         (gst_mpeg_parse_parse_packhead, gst_mpeg_parse_event)
-         (gst_mpeg_parse_chain): Use the new adjust_ts method instead of
-         adding the value of the adjust attribute.
-         * gst/mpegstream/gstmpegdemux.h (struct _GstMPEGVideoStream): Get
-         rid of the adjust attribute. Now all timestamp adjustments are
-         performed by mpegparse using the current segment.
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_adjust_ts)
-         (gst_mpeg_parse_class_init): Implement the adjust_ts method based
-         on the adjust attribute for SCR values and the current segment.
-         * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass): New
-         adjust_ts virtual method to adjust timestamps for outgoing
-         buffers.
-         * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_send_newsegment)
-         (gst_mpeg_demux_parse_packet): Don't override send_newsegment.
-         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_class_init)
-         (gst_dvd_demux_handle_newsegment): Don't override
-         handle_newsegment.
-         (gst_dvd_demux_process_event, gst_dvd_demux_handle_dvd_event):
-         Check for DVD events in process_event instead of
-         handle_dvd_event.
-         * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass):
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_handle_newsegment)
-         (gst_mpeg_parse_send_newsegment, gst_mpeg_parse_send_event):
-         * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_process_event)
-         (gst_mpeg_demux_send_event):
-         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_process_event)
-         (gst_dvd_demux_handle_dvd_event):
-         Eliminate the time parameter in send_event.
-
-2005-12-18 15:08:15 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         ext/mad/gstid3tag.c: Fix typefinding in id3demux, and then remove it in favour of the new LGPL id3demux in gst-plugin...
-         Original commit message from CVS:
-         * ext/mad/gstid3tag.c: (gst_id3_tag_do_typefind),
-         (gst_id3_tag_do_caps_nego), (gst_id3_tag_chain), (plugin_init):
-         Fix typefinding in id3demux, and then remove it in favour
-         of the new LGPL id3demux in gst-plugins-good
-         * ext/mad/gstmad.c: (gst_mad_dispose):
-         dispose can run more than once.
-
-2005-12-16 21:56:32 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         gst/asfdemux/gstasfmux.c: change some char* into char[]
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfmux.c: (gst_asfmux_file_start):
-         change some char* into char[]
-
-2005-12-15 17:06:10 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         gst/realmedia/rmdemux.c: Remove memleak from unused GstRMDemuxStream
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream):
-         Remove memleak from unused GstRMDemuxStream
-
-2005-12-12 19:17:11 +0000  Michael Smith <msmith@xiph.org>
-
-         ext/mad/gstid3tag.c: Use the correct function to free typefind factory list.
-         Original commit message from CVS:
-         * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list),
-         (gst_id3_tag_do_typefind):
-         Use the correct function to free typefind factory list.
-
-2005-12-09 18:38:53 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/mad/gstmad.c: For position and duration queries in TIME format, try the peer first (might be a demuxer).
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (gst_mad_src_query):
-         For position and duration queries in TIME format, try the peer
-         first (might be a demuxer).
-
-2005-12-08 12:45:09 +0000  Martin Soto <martinsoto@users.sourceforge.net>
-
-         gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_newsegment): Properly handle non contiguous VOBUs by adding the se...
-         Original commit message from CVS:
-         2005-12-08  Martin Soto  <martinsoto@users.sourceforge.net>
-         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_newsegment):
-         Properly handle non contiguous VOBUs by adding the segment accum
-         field to the adjust value.
-         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_class_init)
-         (gst_dvd_demux_init, gst_dvd_demux_handle_newsegment): Extend
-         handle_newsegment to prevent sending actual newsegment events and
-         use tiemstamp rewriting instead.
-         (gst_dvd_demux_handle_dvd_event): Don't send a newsegment after
-         dvd-lang-codes.
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_handle_newsegment)
-         (gst_mpeg_parse_event):
-         * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass):
-         Add a new parameter to handle_newsegment to allow controlling
-         whether newsegment events are forwarded or not.
-         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_init)
-         (gst_dvd_demux_handle_dvd_event, gst_dvd_demux_send_subbuffer)
-         (gst_dvd_demux_reset):
-         last_end_ptm and discont_time aren't necessary anymore, since
-         timestamp adjustment is now replaced by newsegment events.
-         (gst_dvd_demux_init): Prevent MPEGParse from adjusting
-         timestamps.
-         * gst/mpegstream/gstdvddemux.h:
-         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event):
-         Don't handle dvd-nav-packet events anymore, since the are now
-         replaced by standard newsegment events.
-         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_init)
-         (gst_dvd_demux_handle_dvd_event, gst_dvd_demux_send_subbuffer)
-         (gst_dvd_demux_change_state):
-         * gst/mpegstream/gstdvddemux.h:
-         Get rid of the ignore_next_newmedia_discont hack.
-         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_class_init)
-         (gst_dvd_demux_handle_newsegment):
-         * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_class_init)
-         (gst_mpeg_demux_handle_newsegment): Don't override
-         handle_newsegment anymore. It was only necessary to handle
-         NEWMEDIA events.
-         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_process_event)
-         (gst_dvd_demux_handle_dvd_event, gst_dvd_demux_set_cur_audio)
-         (gst_dvd_demux_set_cur_subpicture):
-         Reactivate handling of DVD events.
-         * gst/mpegstream/gstmpegparse.c (normal_seek)
-         (gst_mpeg_parse_handle_src_event)
-         (gst_mpeg_parse_handle_src_query):
-         First attempt at reenabling seek.
-         * gst/mpegstream/gstmpegparse.h:
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_init)
-         (gst_mpeg_parse_update_streaminfo)
-         (gst_mpeg_parse_get_rate)
-         (gst_mpeg_parse_convert, gst_mpeg_parse_get_src_query_types)
-         (gst_mpeg_parse_handle_src_query):
-         * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_new_output_pad):
-         Make queries work again.
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_reset)
-         (gst_mpeg_parse_handle_newsegment)
-         (gst_mpeg_parse_send_newsegment, gst_mpeg_parse_pad_added)
-         (gst_mpeg_parse_chain, gst_mpeg_parse_handle_src_event):
-         * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParse):
-         Get rid of the newsegment_pending attribute, and rely instead on
-         proper timestamp adjustment.
-         * gst/mpegstream/gstmpegparse.c
-         (gst_mpeg_parse_get_src_event_masks): Erase.
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_init):
-         Initialize fields before creating pads to prevent the pad creation
-         callback from failing.
-         (gst_mpeg_parse_reset): Initialize new fields, and change
-         initialization order to match the order in the structure.
-         (gst_mpeg_parse_handle_newsegment): Forward new segment events
-         whenever possible, and update the current segment.
-         (gst_mpeg_parse_send_newsegment): Update the current segment and
-         pending_newsegment.
-         (gst_mpeg_parse_pad_added): Use the current segment to send
-         newsegment events to new pads.
-         (gst_mpeg_parse_chain): Properly add adjust time to sent buffers
-         and events. Properly update newsegment_pending.
-         * gst/mpegstream/gstmpegparse.h       (struct _GstMPEGParse):
-         New fields do_adjust and current_segment.
-         * gst/mpegstream/gstmpegdemux.c:
-         * gst/mpegstream/gstdvddemux.c:
-         * gst/mpegstream/gstmpegparse.h:
-         Rename handle_discont virtual method to handle_newsegment. Erase
-         some (already commented out support) for old NEW_MEDIA events.
-         * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParse):
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_init)
-         (gst_mpeg_parse_reset, gst_mpeg_parse_handle_discont)
-         (gst_mpeg_parse_pad_added, gst_mpeg_parse_parse_packhead)
-         (gst_mpeg_parse_event, gst_mpeg_parse_chain):
-         Erase the "pending_scr" field, and replace it by a slightly
-         different handling of the current SCR. Document code blocks in
-         parse_packhead and chain.
-
-2005-12-07 11:50:10 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         ext/mad/gstid3tag.c: g_warning() are only for really fatal warnings. If we can't decode a tag, just ignore that tag a...
-         Original commit message from CVS:
-         * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
-         g_warning() are only for really fatal warnings. If we can't decode a
-         tag, just ignore that tag and do a GST_WARNING.
-
-2005-12-06 19:48:07 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ChangeLog:
-       * ext/a52dec/gsta52dec.h:
-       * ext/dvdread/dvdreadsrc.h:
-       * ext/lame/gstlame.h:
-       * ext/mad/gstid3tag.c:
-       * ext/mad/gstmad.c:
-       * ext/mad/gstmad.h:
-       * ext/mpeg2dec/gstmpeg2dec.h:
-       * ext/sidplay/gstsiddec.h:
-       * gst/ac3parse/gstac3parse.c:
-       * gst/ac3parse/gstac3parse.h:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfdemux.h:
-       * gst/iec958/ac3iec.h:
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-       * gst/mpegaudioparse/gstmpegaudioparse.h:
-       * gst/mpegstream/gstdvddemux.h:
-       * gst/mpegstream/gstmpegclock.h:
-       * gst/mpegstream/gstmpegdemux.h:
-       * gst/mpegstream/gstmpegpacketize.h:
-       * gst/mpegstream/gstmpegparse.c:
-       * gst/mpegstream/gstmpegparse.h:
-       * gst/mpegstream/gstrfc2250enc.c:
-       * gst/mpegstream/gstrfc2250enc.h:
-       * gst/realmedia/rmdemux.c:
-       * gst/realmedia/rmdemux.h:
-       * gst/synaesthesia/synaescope.c:
-         expand tabs
-         Original commit message from CVS:
-         expand tabs
-
-2005-12-05 18:12:24 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * configure.ac:
-         back to HEAD
-         Original commit message from CVS:
-         back to HEAD
-
-=== release 0.10.0 ===
-
-2005-12-05 18:04:06 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-rmdemux.xml:
-         releasing 0.10.0
-         Original commit message from CVS:
-         releasing 0.10.0
-
-2005-12-05 13:03:40 +0000  Andy Wingo <wingo@pobox.com>
-
-         Update for alloc_buffer changes.
-         Original commit message from CVS:
-         2005-12-05  Andy Wingo  <wingo@pobox.com>
-         * ext/a52dec/gsta52dec.c: (gst_a52dec_push):
-         * ext/mad/gstmad.c: (gst_mad_chain):
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_alloc_buffer):
-         * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain_raw):
-         * gst/iec958/ac3iec.c: (ac3iec_chain_raw):
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
-         (gst_rmdemux_parse_packet): Update for alloc_buffer changes.
-
-2005-12-05 09:33:32 +0000  Andy Wingo <wingo@pobox.com>
-
-         ext/mad/gstid3tag.c (plugin_init): Remove id3tag -- there's just id3demux and id3mux now. Fixes #323199.
-         Original commit message from CVS:
-         2005-12-05  Andy Wingo  <wingo@pobox.com>
-         * ext/mad/gstid3tag.c (plugin_init): Remove id3tag -- there's just
-         id3demux and id3mux now. Fixes #323199.
-
-2005-12-04 22:36:51 +0000  Christian Schaller <uraeus@gnome.org>
-
-       * gst-plugins-ugly.spec.in:
-         update spec file for latest changes
-         Original commit message from CVS:
-         update spec file for latest changes
-
-2005-12-02 12:28:03 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         fix silly Makefile.am bug so they link correctly again
-         Original commit message from CVS:
-         * ext/amrnb/Makefile.am:
-         * gst/realmedia/Makefile.am:
-         fix silly Makefile.am bug so they link correctly again
-
-2005-12-01 19:18:24 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * configure.ac:
-         back to HEAD
-         Original commit message from CVS:
-         back to HEAD
-
-=== release 0.9.7 ===
-
-2005-12-01 19:14:57 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * common:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-rmdemux.xml:
-       * docs/random/LICENSE:
-       * docs/random/PORTED_09:
-         releasing 0.9.7
-         Original commit message from CVS:
-         releasing 0.9.7
-
-2005-12-01 15:49:59 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ChangeLog:
-       * common:
-       * ext/amrnb/Makefile.am:
-       * gst/realmedia/Makefile.am:
-         Don't know how these escaped my eye before.  Fix link flags.
-         Original commit message from CVS:
-         Don't know how these escaped my eye before.  Fix link flags.
-
-2005-11-30 18:37:24 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * common:
-       * examples/Makefile.am:
-       * examples/capsfilter/Makefile.am:
-       * examples/capsfilter/capsfilter1.c:
-       * examples/gob/Makefile.am:
-       * examples/gob/gst-identity2.gob:
-       * examples/gstplay/.gitignore:
-       * examples/gstplay/Makefile.am:
-       * examples/gstplay/player.c:
-       * examples/indexing/.gitignore:
-       * examples/indexing/Makefile.am:
-       * examples/indexing/indexmpeg.c:
-       * examples/level/Makefile.am:
-       * examples/level/README:
-       * examples/level/demo.c:
-       * examples/level/plot.c:
-       * examples/stats/Makefile.am:
-       * examples/stats/mp2ogg.c:
-       * examples/switch/.gitignore:
-       * examples/switch/Makefile.am:
-       * examples/switch/switcher.c:
-         no examples
-         Original commit message from CVS:
-         no examples
-
-2005-11-29 11:26:35 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/mpegstream/: Ref events before sending them to multiple pads, after all gst_pad_send_event() takes ownership of e...
-         Original commit message from CVS:
-         Reviewed by: Tim-Philipp Müller  <tim at centricular dot net>
-         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_event):
-         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_send_newsegment),
-         (gst_mpeg_parse_send_event):
-         Ref events before sending them to multiple pads, after all
-         gst_pad_send_event() takes ownership of events. Don't leak
-         events that have not been handled (fixes #322745).
-
-2005-11-28 19:13:51 +0000  Martin Soto <martinsoto@users.sourceforge.net>
-
-         gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event)
-         Original commit message from CVS:
-         2005-11-28  Martin Soto  <martinsoto@users.sourceforge.net>
-         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event)
-         (gst_dvd_demux_handle_dvd_event): Erase code to prevent mpegparse
-         from making timestamp adjustments. This will have to be re-added
-         in some form in the near future, but in order to do that, some nav
-         packet parsing will be necessary in mpegdemux.
-         * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParse):
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_init)
-         (g_value_set_int, gst_mpeg_parse_set_property)
-         Get rid of do_adjust and use_adjust. Rename max_discont to
-         max_src_gap.
-         (gst_mpeg_parse_parse_packhead): When max_scr_gap has a value of
-         -1, no adjustment is made.
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_class_init):
-         Rename max_discont property to max_scr_gap. Erase "adjust"
-         property.
-         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_send_event): Don't
-         override send_event anymore, base class does the job.
-         * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_send_event):
-         Base class now does most of the work.
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_send_event):
-         Generalize to forwarding the event to all source pads in the
-         element.
-         * gst/mpegstream/gstmpegparse.h:
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_class_init)
-         (gst_mpeg_parse_init, gst_mpeg_parse_set_clock)
-         (gst_mpeg_parse_chain, gst_mpeg_parse_get_property)
-         (gst_mpeg_parse_set_property):
-         Clock synchronization doesn't make sense anymore for a
-         demultiplexer.
-
-2005-11-28 18:54:09 +0000  Michael Smith <msmith@xiph.org>
-
-         gst/realmedia/rmdemux.c: Don't treat normal EOS as a fatal error.
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_loop):
-         Don't treat normal EOS as a fatal error.
-
-2005-11-28 15:47:01 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         ext/mad/gstmad.c: Proper warning statements,
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (gst_mad_chain):
-         Proper warning statements,
-         Don't error if the src pad isn't linked when pushing.
-         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_change_state):
-         Proper state_change, avoids borkage when going to READY
-
-2005-11-27 15:34:00 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * configure.ac:
-       * gst-libs/Makefile.am:
-       * gst-libs/README:
-       * gst-libs/ext/.gitignore:
-       * gst-libs/gst/media-info/.gitignore:
-       * gst-libs/gst/play/.gitignore:
-       * gst-libs/gst/play/play.h:
-       * gst-libs/gst/play/play.vcproj:
-         no need for an AS_LIBTOOL call
-         Original commit message from CVS:
-         no need for an AS_LIBTOOL call
-
-2005-11-27 14:34:34 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * Makefile.am:
-       * common:
-       * gst-plugins-ugly.spec.in:
-         add ACLOCAL_AMFLAGS; remove old stuff from spec changelog
-         Original commit message from CVS:
-         add ACLOCAL_AMFLAGS; remove old stuff from spec changelog
-
-2005-11-25 17:02:41 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         ext/mpeg2dec/gstmpeg2dec.c: Prime libmpeg2's pumps with some null custom buffers to ensure it doesn't ask us to disca...
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c: (handle_sequence):
-         Prime libmpeg2's pumps with some null custom buffers
-         to ensure it doesn't ask us to discard garbage later yay.
-
-2005-11-25 17:01:46 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         ext/mpeg2dec/gstmpeg2dec.c: Prime libmpeg2's pumps with some null custom buffers to ensure it ask us to discard garba...
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c: (handle_sequence):
-         Prime libmpeg2's pumps with some null custom buffers
-         to ensure it ask us to discard garbage later yay.
-
-2005-11-25 14:50:19 +0000  Michael Smith <msmith@xiph.org>
-
-         ext/a52dec/gsta52dec.*: Accept AC3 in audio/x-private1-ac3 format, which includes
-         Original commit message from CVS:
-         * ext/a52dec/gsta52dec.c: (gst_a52dec_init),
-         (gst_a52dec_sink_setcaps), (gst_a52dec_chain),
-         (gst_a52dec_chain_raw):
-         * ext/a52dec/gsta52dec.h:
-         Accept AC3 in audio/x-private1-ac3 format, which includes
-         DVD-specific headers, as well as raw AC3, for compatibility with
-         some demuxers.
-
-2005-11-25 00:03:52 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         ext/mad/gstmad.c: When pad_alloc returns other-than-GST_FLOW_OK and mad exits early, skip frame synthesis and consume...
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (gst_mad_chain):
-         When pad_alloc returns other-than-GST_FLOW_OK and mad exits early,
-         skip frame synthesis and consume input data as if we'd done the
-         decode. Makes mad not error when the src pad is not connected.
-         (#319784)
-
-2005-11-24 13:58:55 +0000  Martin Soto <martinsoto@users.sourceforge.net>
-
-       * ChangeLog:
-         Erase old CVS conflict line.
-         Original commit message from CVS:
-         Erase old CVS conflict line.
-
-2005-11-24 13:52:49 +0000  Martin Soto <martinsoto@users.sourceforge.net>
-
-         gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_class_init) (gst_mpeg_parse_handle_discont, gst_mpeg_parse_send_newsegm...
-         Original commit message from CVS:
-         2005-11-23  Martin Soto  <martinsoto@users.sourceforge.net>
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_class_init)
-         (gst_mpeg_parse_handle_discont, gst_mpeg_parse_send_newsegment)
-         (gst_mpeg_parse_chain):
-         * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_class_init)
-         (gst_mpeg_demux_send_newsegment):
-         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_send_subbuffer):
-         * gst/mpegstream/gstmpegparse.h:
-         Rename send_discont method to send_newsegment and add parameters
-         to handle actual segments. Adapt code all around to run with the
-         new name and signature.
-         * gst/mpegstream/gstmpegdemux.c:
-         * gst/mpegstream/gstmpegparse.c:
-         * gst/mpegstream/gstdvddemux.c:
-         Convert to GST_BOILERPLATE.
-
-2005-11-24 12:23:04 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * configure.ac:
-         fix AS_LIBTOOL call
-         Original commit message from CVS:
-         fix AS_LIBTOOL call
-
-2005-11-23 21:26:35 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * Makefile.am:
-         add a torture target
-         Original commit message from CVS:
-         add a torture target
-
-2005-11-23 20:05:47 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ChangeLog:
-       * configure.ac:
-         back to HEAD
-         Original commit message from CVS:
-         back to HEAD
-
-=== release 0.9.6 ===
-
-2005-11-23 19:57:04 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/gst-plugins-ugly-plugins.signals:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-rmdemux.xml:
-         releasing 0.9.6
-         Original commit message from CVS:
-         releasing 0.9.6
-
-2005-11-23 00:26:42 +0000  Michael Smith <msmith@xiph.org>
-
-         gst/realmedia/rmdemux.c: Fractional framerates.
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_sink_event),
-         (gst_rmdemux_src_event), (gst_rmdemux_validate_offset),
-         (find_seek_offset_bytes), (find_seek_offset_time),
-         (gst_rmdemux_perform_seek), (gst_rmdemux_src_query),
-         (gst_rmdemux_loop), (gst_rmdemux_fourcc_isplausible),
-         (gst_rmdemux_chain), (gst_rmdemux_send_event),
-         (gst_rmdemux_add_stream), (gst_rmdemux_parse_mdpr),
-         (gst_rmdemux_parse_packet):
-         Fractional framerates.
-
-2005-11-23 00:12:24 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         ext/mpeg2dec/gstmpeg2dec.*: Use fractional framerates
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c: (src_templ),
-         (gst_mpeg2dec_negotiate_format), (handle_sequence),
-         (gst_mpeg2dec_sink_event):
-         * ext/mpeg2dec/gstmpeg2dec.h:
-         Use fractional framerates
-
-2005-11-22 19:07:13 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/mpegstream/gstmpegparse.c: set_clock returns a boolean.
-         Original commit message from CVS:
-         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_set_clock):
-         set_clock returns a boolean.
-
-2005-11-22 18:39:36 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/mad/gstmad.c: Fix seeking even more by sending the newsegment event with the right parameters. Should fix queryin...
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (gst_mad_chain):
-         Fix seeking even more by sending the newsegment event with the
-         right parameters. Should fix querying in playbin/totem after
-         a seek.
-
-2005-11-22 17:39:36 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/mad/gstmad.c: Fix seeking in stand-alone mode. Fix nonexistant enum value introduced in previous commit. Improve ...
-         Original commit message from CVS:
-         * ext/mad/gstmad.c: (gst_mad_mode_get_type), (gst_mad_src_query),
-         (normal_seek), (gst_mad_sink_event), (gst_mad_chain):
-         Fix seeking in stand-alone mode. Fix nonexistant enum value
-         introduced in previous commit. Improve debug messages here and
-         there. Actually return a proper return value in the sink event
-         handler.
-
-2005-11-22 17:15:25 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ext/lame/gstlame.c:
-         doh
-         Original commit message from CVS:
-         doh
-
-2005-11-22 17:04:38 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ChangeLog:
-       * ext/lame/gstlame.c:
-       * ext/mad/gstmad.c:
-       * ext/sidplay/gstsiddec.cc:
-         fix up GValueEnum
-         Original commit message from CVS:
-         fix up GValueEnum
-
-2005-11-22 12:39:29 +0000  Andy Wingo <wingo@pobox.com>
-
-       * ChangeLog:
-       * ext/lame/gstlame.c:
-       * ext/mad/gstid3tag.c:
-       * ext/sidplay/gstsiddec.cc:
-         Update for gst_tag_setter API changes.
-         Original commit message from CVS:
-         2005-11-22  Andy Wingo  <wingo@pobox.com>
-         * Update for gst_tag_setter API changes.
-
-2005-11-22 11:55:32 +0000  Andy Wingo <wingo@pobox.com>
-
-       * ChangeLog:
-       * ext/a52dec/gsta52dec.c:
-       * ext/mad/gstid3tag.c:
-       * ext/mad/gstmad.c:
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-       * gst/mpegstream/gstdvddemux.c:
-       * gst/mpegstream/gstmpegparse.c:
-       * gst/realmedia/rmdemux.c:
-         ext/a52dec/gsta52dec.c (gst_a52dec_sink_event) ext/mad/gstid3tag.c (gst_id3_tag_sink_event) ext/mad/gstmad.c (gst_mad...
-         Original commit message from CVS:
-         2005-11-22  Andy Wingo  <wingo@pobox.com>
-         * ext/a52dec/gsta52dec.c (gst_a52dec_sink_event)
-         * ext/mad/gstid3tag.c (gst_id3_tag_sink_event)
-         * ext/mad/gstmad.c (gst_mad_chain)
-         * gst/mpegaudioparse/gstmpegaudioparse.c
-         (gst_mp3parse_sink_event)
-         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event)
-         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_handle_discont)
-         (gst_mpeg_parse_send_discont, gst_mpeg_parse_pad_added)
-         * gst/realmedia/rmdemux.c (gst_rmdemux_perform_seek)
-         (gst_rmdemux_chain, gst_rmdemux_add_stream): Run update-funcnames.
-
-2005-11-22 11:39:06 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/mad/Makefile.am: libgsttagedit => libgsttag
-         Original commit message from CVS:
-         * ext/mad/Makefile.am:
-         libgsttagedit => libgsttag
-
-2005-11-21 23:50:02 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         ext/lame/gstlame.c: Don't take the stream lock
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_sink_event):
-         Don't take the stream lock
-
-2005-11-21 17:34:30 +0000  Andy Wingo <wingo@pobox.com>
-
-         ext/: Don't take the stream lock.
-         Original commit message from CVS:
-         2005-11-21  Andy Wingo  <wingo@pobox.com>
-         * ext/sidplay/gstsiddec.cc (gst_siddec_sink_event):
-         * ext/mpeg2dec/gstmpeg2dec.c (gst_mpeg2dec_sink_event):
-         * ext/mad/gstmad.c (gst_mad_sink_event):
-         * ext/a52dec/gsta52dec.c (gst_a52dec_sink_event): Don't take the
-         stream lock.
-         * gst/realmedia/rmdemux.c (gst_rmdemux_perform_seek): Update for
-         stream lock changes.
-
-2005-11-21 16:36:44 +0000  Andy Wingo <wingo@pobox.com>
-
-         *.*: Ran scripts/update-macros. Oh yes.
-         Original commit message from CVS:
-         2005-11-21  Andy Wingo  <wingo@pobox.com>
-         * *.h:
-         * *.c: Ran scripts/update-macros. Oh yes.
-
-2005-11-21 15:12:43 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/mpegstream/: Filler events have beem removed for now.
-         Original commit message from CVS:
-         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_event):
-         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_process_event):
-         Filler events have beem removed for now.
-
-2005-11-21 14:08:45 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         gst/: Update for GST_FOURCC_FORMAT API change.
-         Original commit message from CVS:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_video_stream):
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_chain),
-         (gst_rmdemux_add_stream), (gst_rmdemux_parse_mdpr):
-         Update for GST_FOURCC_FORMAT API change.
-
-2005-11-21 10:32:55 +0000  Edward Hervey <bilboed@bilboed.com>
-
-         gst/: Modifications for disapearance of GST_PAD_IS_USABLE()
-         Original commit message from CVS:
-         * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain_raw):
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_chain),
-         (gst_rmdemux_add_stream), (gst_rmdemux_parse_mdpr),
-         (gst_rmdemux_parse_packet):
-         Modifications for disapearance of GST_PAD_IS_USABLE()
-
-2005-11-18 16:14:00 +0000  Michael Smith <msmith@xiph.org>
-
-         gst/iec958/ac3iec.c: Remove some setcaps brokenness.
-         Original commit message from CVS:
-         * gst/iec958/ac3iec.c: (ac3iec_init), (ac3iec_chain_dvd):
-         Remove some setcaps brokenness.
-         Don't crash on bad input.
-
-2005-11-15 22:46:23 +0000  Johan Dahlin <johan@gnome.org>
-
-         ext/mad/gstid3tag.c (gst_mad_id3_to_tag_list): unset GValues after calling transform.
-         Original commit message from CVS:
-         * ext/mad/gstid3tag.c (gst_mad_id3_to_tag_list): unset GValues after
-         calling transform.
-         (gst_id3_tag_do_typefind): Unref caps
-         * ext/mad/gstmad.c (gst_mad_check_caps_reset): Ditto
-
-2005-11-15 21:00:44 +0000  Johan Dahlin <johan@gnome.org>
-
-       * ext/mad/gstmad.c:
-         remove accidentally commited hack
-         Original commit message from CVS:
-         remove accidentally commited hack
-
-2005-11-15 20:30:53 +0000  Johan Dahlin <johan@gnome.org>
-
-       * ext/mad/gstmad.c:
-         free pad templates
-         Original commit message from CVS:
-         free pad templates
-
-2005-11-15 14:19:38 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/mpeg2dec/gstmpeg2dec.c: Set DELTA_UNIT flag on outgoing buffers if this is NOT a keyframe; nice-ify debug message...
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c: (handle_slice),
-         (gst_mpeg2dec_sink_event):
-         Set DELTA_UNIT flag on outgoing buffers if this is NOT a keyframe;
-         nice-ify debug message in event handler; add CHECKME.
-         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_event),
-         (gst_dvd_demux_send_event), (gst_dvd_demux_process_private),
-         (gst_dvd_demux_send_subbuffer), (gst_dvd_demux_reset),
-         (gst_dvd_demux_sync_stream_to_time):
-         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_class_init),
-         (gst_mpeg_demux_process_event), (gst_mpeg_demux_send_event),
-         (gst_mpeg_demux_handle_discont), (gst_mpeg_demux_new_output_pad),
-         (gst_mpeg_demux_parse_packet), (gst_mpeg_demux_parse_pes),
-         (gst_mpeg_demux_send_subbuffer), (gst_mpeg_demux_process_private),
-         (gst_mpeg_demux_sync_stream_to_time),
-         (gst_mpeg_demux_handle_src_event), (gst_mpeg_demux_reset):
-         * gst/mpegstream/gstmpegdemux.h:
-         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_init),
-         (gst_mpeg_parse_handle_discont), (gst_mpeg_parse_send_buffer),
-         (gst_mpeg_parse_process_event), (gst_mpeg_parse_send_discont),
-         (gst_mpeg_parse_send_event), (gst_mpeg_parse_event),
-         (gst_mpeg_parse_chain):
-         * gst/mpegstream/gstmpegparse.h:
-         Get rid of GST_PAD_IS_USABLE and fix GstFlowReturn vs. gboolean
-         return value confusion (gst_pad_push vs. gst_pad_send_event and
-         gst_pad_push_event); pass flow return values to caller;
-         miscellaneous fixes and clean-ups.
-
-2005-11-15 08:37:00 +0000  Christian Schaller <uraeus@gnome.org>
-
-       * gst/mpegstream/gstdvddemux.c:
-         set rank to secondary until it works 100%
-         Original commit message from CVS:
-         set rank to secondary until it works 100%
-
-2005-11-15 07:59:58 +0000  Christian Schaller <uraeus@gnome.org>
-
-       * gst-plugins-ugly.spec.in:
-         add mpegstream plugin to spec file
-         Original commit message from CVS:
-         add mpegstream plugin to spec file
-
-2005-11-14 22:18:21 +0000  Martin Soto <martinsoto@users.sourceforge.net>
-
-         gst/mpegstream/Makefile.am (noinst_HEADERS): Add gstrfc2250enc.h.
-         Original commit message from CVS:
-         2005-11-14  Martin Soto  <soto@localhost.localdomain>
-         * gst/mpegstream/Makefile.am (noinst_HEADERS): Add
-         gstrfc2250enc.h.
-
-2005-11-14 21:20:21 +0000  Josef Zlomek <josef.zlomek@xeris.cz>
-
-         partially port the mpegstream plugin to GStreamer 0.9.
-         Original commit message from CVS:
-         2005-11-14  Martin Soto  <martinsoto@users.sourceforge.net>
-         * configure.ac:
-         * gst/mpegstream/Makefile.am:
-         * gst/mpegstream/gstdvddemux.c:
-         * gst/mpegstream/gstdvddemux.h:
-         * gst/mpegstream/gstmpegdemux.c:
-         * gst/mpegstream/gstmpegdemux.h:
-         * gst/mpegstream/gstmpegpacketize.c:
-         * gst/mpegstream/gstmpegpacketize.h:
-         * gst/mpegstream/gstmpegparse.c:
-         * gst/mpegstream/gstmpegparse.h:
-         * gst/mpegstream/gstmpegstream.c:
-         * gst/mpegstream/gstrfc2250enc.c:
-         * gst/mpegstream/gstrfc2250enc.h:
-         Applied patch from Josef Zlomek <josef.zlomek@xeris.cz> to
-         partially port the mpegstream plugin to GStreamer 0.9.
-
-2005-11-14 17:13:20 +0000  Andy Wingo <wingo@pobox.com>
-
-         configure.ac (GST_PLUGIN_LDFLAGS): -no-undefined for better debugging, allows dll builds on windows. Fixes #316076.
-         Original commit message from CVS:
-         2005-11-14  Andy Wingo  <wingo@pobox.com>
-         * configure.ac (GST_PLUGIN_LDFLAGS): -no-undefined for better
-         debugging, allows dll builds on windows. Fixes #316076.
-
-2005-11-11 19:37:33 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ChangeLog:
-       * configure.ac:
-         back to head
-         Original commit message from CVS:
-         back to head
-
-=== release 0.9.5 ===
-
-2005-11-11 19:35:55 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ChangeLog:
-       * NEWS:
-       * RELEASE:
-       * common:
-       * configure.ac:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-rmdemux.xml:
-         releasing 0.9.5
-         Original commit message from CVS:
-         releasing 0.9.5
-
-2005-10-27 21:50:11 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/mpeg2dec/gstmpeg2dec.c: Forward GstFlowReturn about everywhere.
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_reset),
-         (gst_mpeg2dec_alloc_buffer), (gst_mpeg2dec_negotiate_format),
-         (handle_sequence), (handle_picture), (handle_slice),
-         (gst_mpeg2dec_chain), (gst_mpeg2dec_src_query), (normal_seek),
-         (gst_mpeg2dec_src_event), (gst_mpeg2dec_change_state):
-         Forward GstFlowReturn about everywhere.
-         Handle seeking correctly.
-
-2005-10-27 17:26:13 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/mpeg2dec/gstmpeg2dec.c: Small cleanups in refcounting.
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_negotiate_format),
-         (handle_sequence), (handle_slice), (gst_mpeg2dec_chain),
-         (gst_mpeg2dec_src_query), (gst_mpeg2dec_change_state):
-         Small cleanups in refcounting.
-
-2005-10-26 16:45:04 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/mpeg2dec/gstmpeg2dec.*: Removed lots of dubious code.
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
-         (gst_mpeg2dec_dispose), (gst_mpeg2dec_reset),
-         (gst_mpeg2dec_alloc_buffer), (gst_mpeg2dec_negotiate_format),
-         (handle_sequence), (handle_picture):
-         * ext/mpeg2dec/gstmpeg2dec.h:
-         Removed lots of dubious code.
-         Handle flushing and seeking correctly. Still leaks though...
-
-2005-10-24 13:37:47 +0000  Christian Schaller <uraeus@gnome.org>
-
-       * ChangeLog:
-       * configure.ac:
-         port plugins listing changes
-         Original commit message from CVS:
-         port plugins listing changes
-
-2005-10-23 23:06:09 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ChangeLog:
-       * configure.ac:
-         back to HEAD
-         Original commit message from CVS:
-         back to HEAD
-
-=== release 0.9.4 ===
-
-2005-10-23 22:44:44 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ChangeLog:
-       * Makefile.am:
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins.args:
-       * docs/plugins/gst-plugins-ugly-plugins.signals:
-       * docs/plugins/inspect/plugin-a52dec.xml:
-       * docs/plugins/inspect/plugin-amrnb.xml:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpeg2dec.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-rmdemux.xml:
-       * gst/realmedia/rmdemux.c:
-       * po/POTFILES.in:
-         releasing 0.9.4
-         Original commit message from CVS:
-         releasing 0.9.4
-
-2005-10-23 14:32:49 +0000  Julien Moutte <julien@moutte.net>
-
-         gst/realmedia/rmdemux.c: STOPPED->FAILED
-         Original commit message from CVS:
-         2005-10-23  Julien MOUTTE  <julien@moutte.net>
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_loop): STOPPED->FAILED
-
-2005-10-21 16:22:00 +0000  Christian Schaller <uraeus@gnome.org>
-
-       * gst-plugins-ugly.spec.in:
-         add packaging of a52dec
-         Original commit message from CVS:
-         add packaging of a52dec
-
-2005-10-21 11:58:38 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/rmdemux.c: Set correct stream time in newsegment event.
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_validate_offset),
-         (gst_rmdemux_perform_seek), (gst_rmdemux_src_query):
-         Set correct stream time in newsegment event.
-
-2005-10-20 22:43:04 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ext/Makefile.am:
-         fix distcheck
-         Original commit message from CVS:
-         fix distcheck
-
-2005-10-20 22:40:07 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ChangeLog:
-       * ext/Makefile.am:
-         fix distcheck
-         Original commit message from CVS:
-         fix distcheck
-
-2005-10-20 09:51:58 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/a52dec/: Re-enable CPU flags, use liboil to get them.
-         Original commit message from CVS:
-         * ext/a52dec/Makefile.am:
-         * ext/a52dec/gsta52dec.c: (gst_a52dec_base_init),
-         (gst_a52dec_class_init), (gst_a52dec_sink_event),
-         (gst_a52dec_change_state):
-         * ext/a52dec/gsta52dec.h:
-         Re-enable CPU flags, use liboil to get them.
-
-2005-10-20 09:00:30 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         Port AC3 decoder to 0.9 (#318849).
-         Original commit message from CVS:
-         Reviewed by: Tim-Philipp Müller  <tim at centricular dot net>
-         * configure.ac:
-         * ext/a52dec/Makefile.am:
-         * ext/a52dec/gsta52dec.c:
-         * ext/a52dec/gsta52dec.h:
-         Port AC3 decoder to 0.9 (#318849).
-
-2005-10-20 08:30:33 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/sidplay/gstsiddec.cc: Small fixes and more error messages.
-         Original commit message from CVS:
-         * ext/sidplay/gstsiddec.cc:
-         Small fixes and more error messages.
-
-2005-10-19 16:01:35 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         API change fixen.
-         Original commit message from CVS:
-         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_query),
-         (gst_amrnbparse_state_change):
-         * ext/mad/gstid3tag.c: (gst_id3_tag_src_query):
-         * ext/mad/gstmad.c: (gst_mad_get_query_types), (gst_mad_src_query):
-         * ext/mpeg2dec/gstmpeg2dec.c:
-         * ext/sidplay/gstsiddec.cc:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_validate_offset),
-         (gst_rmdemux_src_query), (gst_rmdemux_src_query_types):
-         API change fixen.
-
-2005-10-19 12:43:28 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         configure.ac: GST_DOC has been renamed to GST_DOCBOOK_CHECK
-         Original commit message from CVS:
-         * configure.ac:
-         GST_DOC has been renamed to GST_DOCBOOK_CHECK
-
-2005-10-19 09:47:31 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         configure.ac: some docs I had
-         Original commit message from CVS:
-         * configure.ac:
-         some docs I had
-         * ext/amrnb/amrnbenc.c: (gst_amrnbenc_chain):
-         trivial fixes
-
-2005-10-18 13:23:22 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/realmedia/rmdemux.c: segment-start/done API change.
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_validate_offset),
-         (gst_rmdemux_perform_seek):
-         segment-start/done API change.
-
-2005-10-17 17:50:45 +0000  Michael Smith <msmith@xiph.org>
-
-       * ChangeLog:
-       * common:
-       * gst/iec958/ac3iec.c:
-         Set buffer durations on IEC958 buffers.
-         Original commit message from CVS:
-         Set buffer durations on IEC958 buffers.
-
-2005-10-16 17:06:42 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         configure.ac: Fix glib check
-         Original commit message from CVS:
-         * configure.ac:
-         Fix glib check
-
-2005-10-13 19:14:25 +0000  Tim-Philipp Müller <tim@centricular.net>
-
-         ext/mad/gstid3tag.c: Fix handling of GST_TAG_DATE, which is now of type GST_TYPE_DATE.
-         Original commit message from CVS:
-         * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
-         Fix handling of GST_TAG_DATE, which is now of type GST_TYPE_DATE.
-
-2005-10-13 15:29:56 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         examples/stats/mp2ogg.c: yes, typo fixes
-         Original commit message from CVS:
-         * examples/stats/mp2ogg.c:
-         yes, typo fixes
-
-2005-10-12 14:30:36 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         renamed GST_FLAGS macros to GST_OBJECT_FLAGS moved bitshift from macro to enum definition
-         Original commit message from CVS:
-         * examples/indexing/indexmpeg.c: (main):
-         * ext/a52dec/gsta52dec.c: (gst_a52dec_init):
-         * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_is_open),
-         (dvdnavsrc_set_property), (dvdnavsrc_open), (dvdnavsrc_close),
-         (dvdnavsrc_event), (dvdnavsrc_convert), (dvdnavsrc_query):
-         * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_set_property),
-         (dvdreadsrc_srcpad_query), (dvdreadsrc_get),
-         (dvdreadsrc_open_file), (dvdreadsrc_close_file):
-         * ext/dvdread/dvdreadsrc.h:
-         * ext/lame/gstlame.h:
-         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_init):
-         * gst/asfdemux/gstasfmux.c: (gst_asfmux_init):
-         * gst/iec958/ac3iec.h:
-         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_init):
-         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_init):
-         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_init):
-         * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_init):
-         * gst/synaesthesia/gstsynaesthesia.c: (gst_synaesthesia_init):
-         renamed GST_FLAGS macros to GST_OBJECT_FLAGS
-         moved bitshift from macro to enum definition
-
-2005-10-11 16:37:16 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         newsegment API update.
-         Original commit message from CVS:
-         * ext/mad/gstid3tag.c: (gst_id3_tag_sink_event):
-         * ext/mad/gstmad.c: (gst_mad_chain):
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_sink_event), (gst_mp3parse_chain):
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_perform_seek),
-         (gst_rmdemux_chain), (gst_rmdemux_add_stream):
-         newsegment API update.
-
-2005-10-06 13:14:38 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/amrnb/amrnbdec.c: Mark invalid frame sizes
-         Original commit message from CVS:
-         * ext/amrnb/amrnbdec.c:
-         Mark invalid frame sizes
-         * ext/mad/gstmad.c: (gst_mad_init), (gst_mad_chain):
-         UNUSABLE is not to be used here, just push out stuff so
-         probes can continue linking or making the pad usable.
-
-2005-10-05 11:25:51 +0000  Michael Smith <msmith@xiph.org>
-
-       * ChangeLog:
-       * gst/realmedia/rmdemux.c:
-         Improve seek error-resilience.
-         Original commit message from CVS:
-         Improve seek error-resilience.
-         Better error handling generally.
-
-2005-10-03 17:59:55 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ChangeLog:
-       * configure.ac:
-         back to head
-         Original commit message from CVS:
-         back to head
-
-=== release 0.9.3 ===
-
-2005-10-03 17:49:44 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ChangeLog:
-       * NEWS:
-       * README:
-       * configure.ac:
-       * ext/sidplay/Makefile.am:
-         release time
-         Original commit message from CVS:
-         release time
-
-2005-09-30 16:43:12 +0000  Michael Smith <msmith@xiph.org>
-
-       * gst/realmedia/rmdemux.h:
-         Forgot to commit this file. I hate Nano.
-         Original commit message from CVS:
-         Forgot to commit this file. I hate Nano.
-
-2005-09-30 16:39:47 +0000  Michael Smith <msmith@xiph.org>
-
-       * ChangeLog:
-       * common:
-       * gst/realmedia/rmdemux.c:
-         Sanity checks and memory leak fixes for real demuxer
-         Original commit message from CVS:
-         Sanity checks and memory leak fixes for real demuxer
-
-2005-09-29 13:44:15 +0000  Michael Smith <msmith@xiph.org>
-
-         gst/realmedia/rmdemux.c: Real demuxer fixes. Make it more bulletproof against bad data, identify a few more stream ty...
-         Original commit message from CVS:
-         * gst/realmedia/rmdemux.c: (gst_rmdemux_src_event),
-         (gst_rmdemux_perform_seek), (gst_rmdemux_loop),
-         (gst_rmdemux_send_event), (gst_rmdemux_add_stream),
-         (gst_rmdemux_parse_mdpr), (gst_rmdemux_parse_packet):
-         Real demuxer fixes. Make it more bulletproof against bad data,
-         identify a few more stream types.
-         Fix seeking so that it works (at least with the seek example
-         program; it still fails with totem).
-
-2005-09-26 14:41:23 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/mpegaudioparse/gstmpegaudioparse.c: Set correct caps on buffers too.
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c:
-         (gst_mp3parse_sink_event), (gst_mp3parse_chain):
-         Set correct caps on buffers too.
-
-2005-09-26 14:31:53 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/mpegaudioparse/gstmpegaudioparse.*: Put timestamps on buffers.
-         Original commit message from CVS:
-         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_init),
-         (gst_mp3parse_sink_event), (gst_mp3parse_chain):
-         * gst/mpegaudioparse/gstmpegaudioparse.h:
-         Put timestamps on buffers.
-
-2005-09-21 22:21:22 +0000  Flavio Oliveira <flavio.oliveira@indt.org.br>
-
-       * ChangeLog:
-       * ext/amrnb/amrnbenc.c:
-         Changed amrnbenc description, it is an encoder, not decoder.
-         Original commit message from CVS:
-         Changed amrnbenc description, it is an encoder, not decoder.
-
-2005-09-21 16:21:45 +0000  Michael Smith <msmith@xiph.org>
-
-       * ChangeLog:
-       * gst/iec958/ac3_padder.c:
-       * gst/iec958/ac3_padder.h:
-       * gst/iec958/ac3iec.c:
-         Various changes to AC3->IEC958 framer. Mostly to make our IEC958 headers and dump the frame (as a probable sync failu...
-         Original commit message from CVS:
-         Various changes to AC3->IEC958 framer. Mostly to make our IEC958 headers
-         more accurate, and to check AC3 checksums (both of them in each frame),
-         and dump the frame (as a probable sync failure) if they don't match.
-         General code cleanup, improved comments. Changed to not construct the
-         header backwards, and not byteswap everything else. If we end up needing
-         to do little-endian output, we should swap in the element doing the
-         output (AC3 is big-endian).
-
-2005-09-20 17:37:54 +0000  Christian Schaller <uraeus@gnome.org>
-
-       * gst-plugins-ugly.spec.in:
-         fix spec file for ugly
-         Original commit message from CVS:
-         fix spec file for ugly
-
-2005-09-19 23:25:07 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * docs/plugins/inspect/plugin-lame.xml:
-         revert empty commit
-         Original commit message from CVS:
-         revert empty commit
-
-2005-09-19 23:24:12 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * docs/plugins/scan.stamp:
-         whoops, wrong files
-         Original commit message from CVS:
-         whoops, wrong files
-
-2005-09-19 23:21:31 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         docs/plugins/gst-plugins-ugly-plugins.*: commit missing files
-         Original commit message from CVS:
-         * docs/plugins/gst-plugins-ugly-plugins.args:
-         * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
-         * docs/plugins/gst-plugins-ugly-plugins.interfaces:
-         * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
-         commit missing files
-         * docs/plugins/inspect/plugin-lame.xml:
-         update
-
-2005-09-19 16:44:13 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * Makefile.am:
-       * common:
-       * gst-plugins-ugly.spec.in:
-         add check-valgrind target
-         Original commit message from CVS:
-         add check-valgrind target
-
-2005-09-19 13:46:35 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * docs/plugins/scanobj-build.stamp:
-         add stamp
-         Original commit message from CVS:
-         add stamp
-
-2005-09-19 11:07:40 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/lame/gstlame.c: Set caps on outgoing buffers.
-         Original commit message from CVS:
-         * ext/lame/gstlame.c: (gst_lame_chain):
-         Set caps on outgoing buffers.
-
-2005-09-16 16:04:28 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ChangeLog:
-       * ext/lame/gstlame.c:
-       * ext/lame/gstlame.h:
-         clean up further so we don't try to set up five times for a simple pipeline
-         Original commit message from CVS:
-         clean up further so we don't try to set up five times for
-         a simple pipeline
-
-2005-09-16 15:43:08 +0000  Michael Smith <msmith@xiph.org>
-
-       * ChangeLog:
-       * common:
-       * gst/iec958/ac3iec.c:
-         Set setcaps function on sink pad, not source pad. Produce correct caps on output buffers.
-         Original commit message from CVS:
-         Set setcaps function on sink pad, not source pad. Produce correct caps
-         on output buffers.
-
-2005-09-11 17:53:12 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * common:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-rmdemux.xml:
-         update inspect with source
-         Original commit message from CVS:
-         update inspect with source
-
-2005-09-07 13:42:44 +0000  Stefan Kost <ensonic@users.sourceforge.net>
-
-         ext/mad/gstid3tag.c: gsttaginterface.h -> gsttagsetter.h
-         Original commit message from CVS:
-         * ext/mad/gstid3tag.c:
-         gsttaginterface.h -> gsttagsetter.h
-
-2005-09-06 14:06:51 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * configure.ac:
-         back to HEAD
-         Original commit message from CVS:
-         back to HEAD
-
-=== release 0.9.1 ===
-
-2005-09-06 14:05:40 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * ChangeLog:
-       * NEWS:
-       * README:
-       * RELEASE:
-       * autogen.sh:
-       * configure.ac:
-         releasing 0.9.2
-         Original commit message from CVS:
-         releasing 0.9.2
-
-2005-09-06 12:00:33 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         ext/amrnb/: State change function updates.
-         Original commit message from CVS:
-         * ext/amrnb/amrnbdec.c: (gst_amrnbdec_state_change):
-         * ext/amrnb/amrnbenc.c: (gst_amrnbenc_state_change):
-         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_state_change):
-         State change function updates.
-
-2005-09-05 17:24:20 +0000  Jan Schmidt <thaytan@mad.scientist.com>
-
-         ext/mpeg2dec/gstmpeg2dec.c: GST_CAT_SEEK disappeared from the public API at some point
-         Original commit message from CVS:
-         * ext/mpeg2dec/gstmpeg2dec.c:
-         GST_CAT_SEEK disappeared from the public API at some point
-
-2005-09-05 11:42:10 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * gst/iec958/ac3_padder.c:
-       * gst/iec958/ac3_padder.h:
-         doc fixes
-         Original commit message from CVS:
-         doc fixes
-
-2005-09-04 19:28:29 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * Makefile.am:
-       * autogen.sh:
-       * common:
-       * configure.ac:
-       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
-       * docs/plugins/inspect-build.stamp:
-       * docs/plugins/inspect.stamp:
-       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
-       * docs/plugins/inspect/plugin-iec958.xml:
-       * docs/plugins/inspect/plugin-lame.xml:
-       * docs/plugins/inspect/plugin-mad.xml:
-       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
-       * docs/plugins/inspect/plugin-rmdemux.xml:
-         docs for ugly plugins
-         Original commit message from CVS:
-         docs for ugly plugins
-
-2005-09-02 18:01:33 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * gst-plugins-ugly.spec.in:
-       * gst/iec958/Makefile.am:
-         build fixes
-         Original commit message from CVS:
-         build fixes
-
-2005-09-02 17:04:39 +0000  Michael Smith <msmith@xiph.org>
-
-       * ChangeLog:
-       * gst/iec958/ac3iec.c:
-         Accept audio/x-private1-a3c on sink pad
-         Original commit message from CVS:
-         Accept audio/x-private1-a3c on sink pad
-
-2005-09-02 17:01:14 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * gst-plugins-ugly.spec.in:
-         spec updates
-         Original commit message from CVS:
-         spec updates
-
-2005-09-02 15:43:54 +0000  Andy Wingo <wingo@pobox.com>
-
-       * examples/gstplay/player.c:
-       * examples/stats/mp2ogg.c:
-       * ext/a52dec/gsta52dec.c:
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbenc.c:
-       * ext/amrnb/amrnbparse.c:
-       * ext/dvdnav/dvdnavsrc.c:
-       * ext/dvdread/dvdreadsrc.c:
-       * ext/lame/gstlame.c:
-       * ext/mad/gstid3tag.c:
-       * ext/mad/gstmad.c:
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * gst/ac3parse/gstac3parse.c:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfmux.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/iec958/ac3iec.c:
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-       * gst/mpegstream/gstdvddemux.c:
-       * gst/mpegstream/gstmpegdemux.c:
-       * gst/mpegstream/gstmpegparse.c:
-       * gst/mpegstream/gstrfc2250enc.c:
-       * gst/realmedia/rmdemux.c:
-       * gst/synaesthesia/gstsynaesthesia.c:
-         All plugins updated for element state changes.
-         Original commit message from CVS:
-         2005-09-02  Andy Wingo  <wingo@pobox.com>
-         * All plugins updated for element state changes.
-
-2005-09-02 14:19:17 +0000  Michael Smith <msmith@xiph.org>
-
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/iec958/ac3iec.c:
-         Fix return types in setcaps functions
-         Original commit message from CVS:
-         Fix return types in setcaps functions
-
-2005-09-02 13:37:13 +0000  Michael Smith <msmith@xiph.org>
-
-       * ChangeLog:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/iec958/ac3iec.c:
-         Changes to correctly use first_access parameter in ac3 and lpcm plugins.
-         Original commit message from CVS:
-         Changes to correctly use first_access parameter in ac3 and lpcm plugins.
-         Some general cleanups in iec958 framer.
-
-2005-09-01 21:07:34 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * common:
-       * m4/Makefile.am:
-       * m4/as-arts.m4:
-       * m4/esd.m4:
-       * m4/gst-alsa.m4:
-       * m4/gst-artsc.m4:
-       * m4/gst-matroska.m4:
-       * m4/ogg.m4:
-       * m4/vorbis.m4:
-         fix distcheck; remove some old m4s
-         Original commit message from CVS:
-         fix distcheck; remove some old m4s
-
-2005-09-01 17:31:21 +0000  Michael Smith <msmith@xiph.org>
-
-       * ChangeLog:
-       * configure.ac:
-       * gst/iec958/Makefile.am:
-       * gst/iec958/ac3_padder.c:
-       * gst/iec958/ac3_padder.h:
-       * gst/iec958/ac3iec.c:
-       * gst/iec958/ac3iec.h:
-         AC3 -> IEC958 (S/PDIF) framer, based on Martin Soto's 0.8 plugin
-         Original commit message from CVS:
-         AC3 -> IEC958 (S/PDIF) framer, based on Martin Soto's 0.8 plugin
-
-2005-09-01 11:52:34 +0000  Wim Taymans <wim.taymans@gmail.com>
-
-         gst/dvdlpcmdec/gstdvdlpcmdec.c: Cleanups, fixed header parsing and stripping.
-         Original commit message from CVS:
-         * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_setcaps),
-         (gst_dvdlpcmdec_chain_dvd), (gst_dvdlpcmdec_chain_raw),
-         (gst_dvdlpcmdec_change_state):
-         Cleanups, fixed header parsing and stripping.
-
-2005-09-01 11:34:39 +0000  Michael Smith <msmith@xiph.org>
-
-       * ChangeLog:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-         Use the right bytes when parsing the LPCM dvd header
-         Original commit message from CVS:
-         Use the right bytes when parsing the LPCM dvd header
-
-2005-09-01 11:16:15 +0000  Michael Smith <msmith@xiph.org>
-
-       * ChangeLog:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-         Return the correct values from chain function
-         Original commit message from CVS:
-         Return the correct values from chain function
-
-2005-09-01 10:04:53 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-       * common:
-       * docs/Makefile.am:
-       * docs/plugins/.gitignore:
-       * docs/random/ChangeLog-0.8:
-       * docs/version.entities.in:
-         adding doc stuff
-         Original commit message from CVS:
-         adding doc stuff
-
-2005-08-31 19:37:08 +0000  Michael Smith <msmith@xiph.org>
-
-       * ChangeLog:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.h:
-         Restructure LPCM decoder to not expect the demuxer to parse the LPCM header; instead do this internally. Also support...
-         Original commit message from CVS:
-         Restructure LPCM decoder to not expect the demuxer to parse the LPCM
-         header; instead do this internally. Also support the old way, using
-         a different mime-type. CVS:
-
-2001-12-17 18:37:01 +0000  Thomas Vander Stichele <thomas@apestaart.org>
-
-         building up speed
-         Original commit message from CVS:
-         building up speed
-
diff --git a/MAINTAINERS b/MAINTAINERS
deleted file mode 100644 (file)
index 72aac8e..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-GStreamer is currently maintained by the consensus of a number
-of people, including, but not limited to:
-
- Jan Schmidt <thaytan@noraisin.net>
- Wim Taymans <wim.taymans@gmail.com>
- David Schleef <ds@schleef.org>
- Tim-Philipp Müller <tim centricular net>
- Sebastian Dröge <slomo@coaxion.net>
-
-Maintainer-related issues should be addressed to:
-
-  gstreamer-devel@lists.freedesktop.org
diff --git a/NEWS b/NEWS
deleted file mode 100644 (file)
index 0e581c3..0000000
--- a/NEWS
+++ /dev/null
@@ -1,299 +0,0 @@
-GStreamer 1.20 Release Notes
-
-GStreamer 1.20 has not been released yet. It is scheduled for release
-around October/November 2021.
-
-1.19.x is the unstable development version that is being developed in
-the git main branch and which will eventually result in 1.20, and 1.19.2
-is the current development release in that series
-
-It is expected that feature freeze will be in early October 2021,
-followed by one or two 1.19.9x pre-releases and the new 1.20 stable
-release around October/November 2021.
-
-1.20 will be backwards-compatible to the stable 1.18, 1.16, 1.14, 1.12,
-1.10, 1.8, 1.6,, 1.4, 1.2 and 1.0 release series.
-
-See https://gstreamer.freedesktop.org/releases/1.20/ for the latest
-version of this document.
-
-Last updated: Wednesday 22 September 2021, 18:00 UTC (log)
-
-Introduction
-
-The GStreamer team is proud to announce a new major feature release in
-the stable 1.x API series of your favourite cross-platform multimedia
-framework!
-
-As always, this release is again packed with many new features, bug
-fixes and other improvements.
-
-Highlights
-
--   this section will be completed in due course
-
-Major new features and changes
-
-Noteworthy new features and API
-
--   this section will be filled in in due course
-
-New elements
-
--   this section will be filled in in due course
-
-New element features and additions
-
--   this section will be filled in in due course
-
-Plugin and library moves
-
--   this section will be filled in in due course
-
--   There were no plugin moves or library moves in this cycle.
-
-Plugin removals
-
-The following elements or plugins have been removed:
-
--   this section will be filled in in due course
-
-Miscellaneous API additions
-
--   this section will be filled in in due course
-
-Miscellaneous performance, latency and memory optimisations
-
--   this section will be filled in in due course
-
-Miscellaneous other changes and enhancements
-
--   this section will be filled in in due course
-
-Tracing framework and debugging improvements
-
--   this section will be filled in in due course
-
-Tools
-
--   this section will be filled in in due course
-
-GStreamer RTSP server
-
--   this section will be filled in in due course
-
-GStreamer VAAPI
-
--   this section will be filled in in due course
-
-GStreamer OMX
-
--   this section will be filled in in due course
-
-GStreamer Editing Services and NLE
-
--   this section will be filled in in due course
-
-GStreamer validate
-
--   this section will be filled in in due course
-
-GStreamer Python Bindings
-
--   this section will be filled in in due course
-
-GStreamer C# Bindings
-
--   this section will be filled in in due course
-
-GStreamer Rust Bindings and Rust Plugins
-
-The GStreamer Rust bindings are released separately with a different
-release cadence that’s tied to gtk-rs, but the latest release has
-already been updated for the upcoming new GStreamer 1.20 API.
-
-gst-plugins-rs, the module containing GStreamer plugins written in Rust,
-has also seen lots of activity with many new elements and plugins.
-
-What follows is a list of elements and plugins available in
-gst-plugins-rs, so people don’t miss out on all those potentially useful
-elements that have no C equivalent.
-
--   FIXME: add new elements
-
-Rust audio plugins
-
--   audiornnoise: New element for audio denoising which implements the
-    noise removal algorithm of the Xiph RNNoise library, in Rust
--   rsaudioecho: Port of the audioecho element from gst-plugins-good
-    rsaudioloudnorm: Live audio loudness normalization element based on
-    the FFmpeg af_loudnorm filter
--   claxondec: FLAC lossless audio codec decoder element based on the
-    pure-Rust claxon implementation
--   csoundfilter: Audio filter that can use any filter defined via the
-    Csound audio programming language
--   lewtondec: Vorbis audio decoder element based on the pure-Rust
-    lewton implementation
-
-Rust video plugins
-
--   cdgdec/cdgparse: Decoder and parser for the CD+G video codec based
-    on a pure-Rust CD+G implementation, used for example by karaoke CDs
--   cea608overlay: CEA-608 Closed Captions overlay element
--   cea608tott: CEA-608 Closed Captions to timed-text (e.g. VTT or SRT
-    subtitles) converter
--   tttocea608: CEA-608 Closed Captions from timed-text converter
--   mccenc/mccparse: MacCaption Closed Caption format encoder and parser
--   sccenc/sccparse: Scenarist Closed Caption format encoder and parser
--   dav1dec: AV1 video decoder based on the dav1d decoder implementation
-    by the VLC project
--   rav1enc: AV1 video encoder based on the fast and pure-Rust rav1e
-    encoder implementation
--   rsflvdemux: Alternative to the flvdemux FLV demuxer element from
-    gst-plugins-good, not feature-equivalent yet
--   rsgifenc/rspngenc: GIF/PNG encoder elements based on the pure-Rust
-    implementations by the image-rs project
-
-Rust text plugins
-
--   textwrap: Element for line-wrapping timed text (e.g. subtitles) for
-    better screen-fitting, including hyphenation support for some
-    languages
-
-Rust network plugins
-
--   reqwesthttpsrc: HTTP(S) source element based on the Rust
-    reqwest/hyper HTTP implementations and almost feature-equivalent
-    with the main GStreamer HTTP source souphttpsrc
--   s3src/s3sink: Source/sink element for the Amazon S3 cloud storage
--   awstranscriber: Live audio to timed text transcription element using
-    the Amazon AWS Transcribe API
-
-Generic Rust plugins
-
--   sodiumencrypter/sodiumdecrypter: Encryption/decryption element based
-    on libsodium/NaCl
--   togglerecord: Recording element that allows to pause/resume
-    recordings easily and considers keyframe boundaries
--   fallbackswitch/fallbacksrc: Elements for handling potentially
-    failing (network) sources, restarting them on errors/timeout and
-    showing a fallback stream instead
--   threadshare: Set of elements that provide alternatives for various
-    existing GStreamer elements but allow to share the streaming threads
-    between each other to reduce the number of threads
--   rsfilesrc/rsfilesink: File source/sink elements as replacements for
-    the existing filesrc/filesink elements
-
-Build and Dependencies
-
--   this section will be filled in in due course
-
-gst-build
-
--   this section will be filled in in due course
-
-Cerbero
-
-Cerbero is a meta build system used to build GStreamer plus dependencies
-on platforms where dependencies are not readily available, such as
-Windows, Android, iOS and macOS.
-
-General improvements
-
--   this section will be filled in in due course
-
-macOS / iOS
-
--   this section will be filled in in due course
-
-Windows
-
--   this section will be filled in in due course
-
-Windows MSI installer
-
--   this section will be filled in in due course
-
-Linux
-
--   this section will be filled in in due course
-
-Android
-
--   this section will be filled in in due course
-
-Platform-specific changes and improvements
-
-Android
-
--   this section will be filled in in due course
-
-macOS and iOS
-
--   this section will be filled in in due course
-
-Windows
-
--   this section will be filled in in due course
-
-Linux
-
--   this section will be filled in in due course
-
-Documentation improvements
-
--   this section will be filled in in due course
-
-Possibly Breaking Changes
-
--   this section will be filled in in due course
--   MPEG-TS SCTE-35 API changes (FIXME: flesh out)
--   gst_parse_launch() and friends now error out on non-existing
-    properties on top-level bins where they would silently fail and
-    ignore those before.
-
-Known Issues
-
--   this section will be filled in in due course
-
--   There are a couple of known WebRTC-related regressions/blockers:
-
-    -   webrtc: DTLS setup with Chrome is broken
-    -   webrtcbin: First keyframe is usually lost
-
-Contributors
-
--   this section will be filled in in due course
-
-… and many others who have contributed bug reports, translations, sent
-suggestions or helped testing.
-
-Stable 1.20 branch
-
-After the 1.20.0 release there will be several 1.20.x bug-fix releases
-which will contain bug fixes which have been deemed suitable for a
-stable branch, but no new features or intrusive changes will be added to
-a bug-fix release usually. The 1.20.x bug-fix releases will be made from
-the git 1.20 branch, which will be a stable branch.
-
-1.20.0
-
-1.20.0 is scheduled to be released around October/November 2021.
-
-Schedule for 1.22
-
-Our next major feature release will be 1.22, and 1.21 will be the
-unstable development version leading up to the stable 1.22 release. The
-development of 1.21/1.22 will happen in the git main branch.
-
-The plan for the 1.22 development cycle is yet to be confirmed.
-
-1.22 will be backwards-compatible to the stable 1.20, 1.18, 1.16, 1.14,
-1.12, 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0 release series.
-
-------------------------------------------------------------------------
-
-These release notes have been prepared by Tim-Philipp Müller with
-contributions from …
-
-License: CC BY-SA 4.0
diff --git a/README b/README
deleted file mode 100644 (file)
index c95e53e..0000000
--- a/README
+++ /dev/null
@@ -1,252 +0,0 @@
-GStreamer 1.19.x development series
-
-WHAT IT IS
-----------
-
-This is GStreamer, a framework for streaming media.
-
-WHERE TO START
---------------
-
-We have a website at
-
-  https://gstreamer.freedesktop.org
-
-Our documentation, including tutorials, API reference and FAQ can be found at
-
-  https://gstreamer.freedesktop.org/documentation/
-
-You can subscribe to our mailing lists:
-
-  https://lists.freedesktop.org/mailman/listinfo/gstreamer-announce
-
-  https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
-
-We track bugs, feature requests and merge requests (patches) in GitLab at
-
-  https://gitlab.freedesktop.org/gstreamer/
-
-You can join us on IRC - #gstreamer on irc.freenode.org
-
-GStreamer 1.0 series
---------------------
-
-Starring
-
-  GSTREAMER
-
-The core around which all other modules revolve.  Base functionality and
-libraries, some essential elements, documentation, and testing.
-
-  BASE
-
-A well-groomed and well-maintained collection of GStreamer plug-ins and
-elements, spanning the range of possible types of elements one would want
-to write for GStreamer.  
-
-And introducing, for the first time ever, on the development screen ...
-
-  THE GOOD
-
- --- "Such ingratitude.  After all the times I've saved your life."
-
-A collection of plug-ins you'd want to have right next to you on the
-battlefield.  Shooting sharp and making no mistakes, these plug-ins have it
-all: good looks, good code, and good licensing.  Documented and dressed up
-in tests.  If you're looking for a role model to base your own plug-in on,
-here it is.
-
-If you find a plot hole or a badly lip-synced line of code in them,
-let us know - it is a matter of honour for us to ensure Blondie doesn't look
-like he's been walking 100 miles through the desert without water.
-
-  THE UGLY
-
-  --- "When you have to shoot, shoot.  Don't talk."
-
-There are times when the world needs a color between black and white.
-Quality code to match the good's, but two-timing, backstabbing and ready to
-sell your freedom down the river.  These plug-ins might have a patent noose
-around their neck, or a lock-up license, or any other problem that makes you
-think twice about shipping them.
-
-We don't call them ugly because we like them less.  Does a mother love her
-son less because he's not as pretty as the other ones ? No  - she commends
-him on his great personality.  These plug-ins are the life of the party.
-And we'll still step in and set them straight if you report any unacceptable
-behaviour - because there are two kinds of people in the world, my friend:
-those with a rope around their neck and the people who do the cutting.
-
-  THE BAD
-
-  --- "That an accusation?"
-
-No perfectly groomed moustache or any amount of fine clothing is going to
-cover up the truth - these plug-ins are Bad with a capital B. 
-They look fine on the outside, and might even appear to get the job done, but
-at the end of the day they're a black sheep. Without a golden-haired angel
-to watch over them, they'll probably land in an unmarked grave at the final
-showdown.
-
-Don't bug us about their quality - exercise your Free Software rights,
-patch up the offender and send us the patch on the fastest steed you can
-steal from the Confederates. Because you see, in this world, there's two
-kinds of people, my friend: those with loaded guns and those who dig.
-You dig.
-
-The Lowdown
------------
-
-  --- "I've never seen so many plug-ins wasted so badly."
-
-GStreamer Plug-ins has grown so big that it's hard to separate the wheat from
-the chaff.  Also, distributors have brought up issues about the legal status
-of some of the plug-ins we ship.  To remedy this, we've divided the previous
-set of available plug-ins into four modules:
-
-- gst-plugins-base: a small and fixed set of plug-ins, covering a wide range
-  of possible types of elements; these are continuously kept up-to-date
-  with any core changes during the development series.
-
-  - We believe distributors can safely ship these plug-ins.
-  - People writing elements should base their code on these elements.
-  - These elements come with examples, documentation, and regression tests.
-
-- gst-plugins-good: a set of plug-ins that we consider to have good quality
-  code, correct functionality, our preferred license (LGPL for the plug-in
-  code, LGPL or LGPL-compatible for the supporting library).
-
-  - We believe distributors can safely ship these plug-ins.
-  - People writing elements should base their code on these elements.
-- gst-plugins-ugly: a set of plug-ins that have good quality and correct
-  functionality, but distributing them might pose problems.  The license
-  on either the plug-ins or the supporting libraries might not be how we'd
-  like. The code might be widely known to present patent problems.
-
-  - Distributors should check if they want/can ship these plug-ins.
-  - People writing elements should base their code on these elements.
-
-- gst-plugins-bad: a set of plug-ins that aren't up to par compared to the
-  rest.  They might be close to being good quality, but they're missing
-  something - be it a good code review, some documentation, a set of tests,
-  a real live maintainer, or some actual wide use.
-  If the blanks are filled in they might be upgraded to become part of
-  either gst-plugins-good or gst-plugins-ugly, depending on the other factors.
-
-  - If the plug-ins break, you can't complain - instead, you can fix the
-    problem and send us a patch, or bribe someone into fixing them for you.
-  - New contributors can start here for things to work on.
-
-PLATFORMS
----------
-
-- Linux is of course fully supported
-- FreeBSD is reported to work; other BSDs should work too; same for Solaris
-- MacOS works, binary 1.x packages can be built using the cerbero build tool
-- Windows works; binary 1.x packages can be built using the cerbero build tool
-  - MSys/MinGW builds
-  - Microsoft Visual Studio builds are also available and supported
-- Android works, binary 1.x packages can be built using the cerbero build tool
-- iOS works
-
-INSTALLING FROM PACKAGES
-------------------------
-
-You should always prefer installing from packages first.  GStreamer is
-well-maintained for a number of distributions, including Fedora, Debian,
-Ubuntu, Mandrake, Arch Linux, Gentoo, ...
-
-Only in cases where you:
-
- - want to hack on GStreamer
- - want to verify that a bug has been fixed
- - do not have a sane distribution
-
-should you choose to build from source tarballs or git.
-
-Find more information about the various packages at
-
-  https://gstreamer.freedesktop.org/download/
-
-COMPILING FROM SOURCE TARBALLS
-------------------------------
-
-- again, make sure that you really need to install from source!
-  If GStreamer is one of your first projects ever that you build from source,
-  consider taking on an easier project.
-
-- you need a recent version of Meson installed, see
-
-    http://mesonbuild.com/Getting-meson.html
-
-  and
-
-    https://gitlab.freedesktop.org/gstreamer/gst-build/blob/master/README.md
-
-- run
-
-    meson build
-    ninja -C build
-
-  to build GStreamer.
-
-- if you want to install it (not required, but what you usually want to do), run
-
-    ninja -C build install
-
-- try out a simple test:
-  gst-launch-1.0 -v fakesrc num_buffers=5 ! fakesink
-  (If you didn't install GStreamer, run `./build/tools/gst-launch-1.0`)
-
-  If it outputs a bunch of messages from fakesrc and fakesink, everything is
-  ok.
-
-  If it did not work, keep in mind that you might need to adjust the
-  PATH and/or LD_LIBRARY_PATH environment variables to make the system
-  find GStreamer in the prefix where you installed (by default that is /usr/local).
-
-- After this, you're ready to install gst-plugins, which will provide the
-  functionality you're probably looking for by now, so go on and read
-  that README.
-
-COMPILING FROM GIT
-------------------
-
-You can build an uninstalled GStreamer from git for development or testing
-purposes without affecting your system installation.
-
-Get started with:
-
-    git clone https://gitlab.freedesktop.org/gstreamer/gst-build
-    meson build
-    ninja -C build
-    ninja -C build uninstalled
-
-For more information, see the `gst-build` module and its documentation:
-
-  https://gitlab.freedesktop.org/gstreamer/gst-build/blob/master/README.md
-
-
-PLUG-IN DEPENDENCIES AND LICENSES
----------------------------------
-
-GStreamer is developed under the terms of the LGPL (see COPYING file for
-details). Some of our plug-ins however rely on libraries which are available
-under other licenses. This means that if you are distributing an application
-which has a non-GPL compatible license (for instance a closed-source
-application) with GStreamer, you have to make sure not to distribute GPL-linked
-plug-ins.
-
-When using GPL-linked plug-ins, GStreamer is for all practical reasons
-under the GPL itself.
-
-HISTORY
--------
-
-The fundamental design comes from the video pipeline at Oregon Graduate
-Institute, as well as some ideas from DirectMedia.  It's based on plug-ins that
-will provide the various codec and other functionality.  The interface
-hopefully is generic enough for various companies (ahem, Apple) to release
-binary codecs for Linux, until such time as they get a clue and release the
-source.
diff --git a/README.static-linking b/README.static-linking
deleted file mode 100644 (file)
index 6d8299b..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-=================================
- GStreamer Static Linking README
-=================================
-
-DRAFT, April 2013
-
-
-   I. INTRODUCTION
-
-It is possible to link GStreamer libraries, plugins and applications
-statically, both in case of free/libre/open-source software applications
-and proprietary applications. On some platforms static linking may even
-be required.
-
-However, distributing statically linked binaries using GStreamer usually
-requires additional effort to stay compliant with the GNU LGPL v2.1 license.
-
-The purpose of this document is to draw attention to this fact, and to
-summarise in layman's terms what we believe is required from anyone
-distributing statically linked GStreamer binaries. Most of this also
-applies to dynamically linked GStreamer binaries.
-
-
-   II. DISCLAIMER
-
-This document is not legal advice, nor is it comprehensive. It may use
-words in ways that do not match the definition or use in the license
-text. It may even be outright wrong. Read the license text for all the
-details, it is the only legally binding document in this respect.
-
-This document is primarily concerned with the implications for the
-distribution of binaries based on LGPL-licensed software as imposed by
-the LGPL license, but there may be other restrictions to the distribution
-of such binaries, such as terms and conditions of distribution channels
-(e.g. "app stores").
-
-
-   III. THE SPIRIT OF THE LGPL LICENSE
-
-The GNU LGPL v2.1 license allows use of such-licensed software by
-proprietary applications, but still aims to ensure that at least the
-LGPL-licensed software parts remain free under all circumstances. This
-means any changes to LGPL-licensed source code must be documented and
-be made available on request to those who received binaries of the
-software. It also means that it must be possible to make changes to the
-LGPL-licensed software parts and make the application use those, as far
-as that is possible. And that recipients of an application using
-LGPL-licensed software are made aware of their rights according to the
-LGPL license.
-
-In an environment where GStreamer libraries and plugins are used as
-dynamically-loaded shared objects (DLL/.so/.dyn files), this is usually
-not a big problem, because it is fairly easy to compile a modified version
-of the GStreamer libraries or LGPL plugins, and the application will/should
-just pick up and use the modified version automatically. All that is needed
-is for the original, LGPL-licensed source code and source code modifications
-to be made available, and for a way to build the libraries or plugins for
-the platform required (usually that will be using the build system scripts
-that come with GStreamer, and using the typical build environment on the
-system in question, but where that is not the case the needed build scripts
-and/or tools would need to be provided as well).
-
-
-   IV. THINGS YOU NEED TO DO
-
-  * You must tell users of your application that you are using LGPL-licensed
-    software, which LGPL-licensed software exactly, and you must provide them
-    with a copy of the license so they know their rights under the LGPL.
-
-  * You must provide (on request) all the source code and all the changes
-    or additions you have made to the LGPL-licensed software you are using.
-
-    For GStreamer code we would recommend that the changes be provided either
-    in form of a branch in a git repository, or as a set of "git format-patch"-
-    style patches against a GStreamer release or a snapshot of a GStreamer git
-    repository. The patches should ideally say what was changed and why it
-    was changed, and there should ideally be separate patches for independent
-    changes.
-
-  * You must provide a way for users of your application to make changes to
-    the LGPL-licensed parts of the code, and re-create a full application
-    binary with the changes (using the standard toolchain and tools of the
-    target platform; if you are using a custom toolchain or custom tools
-    you must provide these and document how to use them to create a new
-    application binary).
-
-    Note that this of course does not mean that the user is allowed to
-    re-distribute the changed application. Nor does it mean that you have
-    to provide your proprietary source code - it is sufficient to provide a
-    ready-made compiled object file that can be relinked into an application
-    binary with the re-compiled LGPL components.
-
-
-   V. THINGS TO LOOK OUT FOR
-
-While most GStreamer plugins and the libraries they depend on are licensed
-under the LGPL or even more permissive licenses, that is not the case for
-all plugins and libraries used, esp. those in the gst-plugins-ugly or
-some of those in the gst-plugins-bad set of plugins.
-
-When statically linking proprietary code, care must be taken not to
-statically link plugins or libraries that are licensed under less permissive
-terms than the LGPL, such as e.g. GPL-licensed libraries.
-
-
-   VI. SPECIAL CONSIDERATIONS FOR SPECIFIC USE-CASES
-
-
-   1. Proprietary GStreamer/GLib-based Application On iOS
-
-Let's assume an individual or a company wants to distribute a proprietary
-iOS application that is built on top of GStreamer and GLib through
-Apple's App Store. At the time of writing the Apple iPhone developer
-agreement didn’t allow the bundling of shared libraries, so distributing
-a proprietary iOS application with shared libraries is only possible using
-distribution mechanisms outside of the App Store and/or only to jailbroken
-devices, a prospect that may not appeal to our individual or company. So the
-only alternative then is to link everything statically, which means the
-obligations mentioned above come into play.
-
-
-   2. Example: Jabber on iOS
-
-Tandberg (now Cisco) created a Jabber application for iOS, based on GStreamer.
-On request they provided an LGPL compliance bundle in form of a zip file, with
-roughly the following contents:
-
-buildapp.sh
-readme.txt
-Jabber/Jabber-Info.plist
-Jabber/libip.a [236MB binary with proprietary code]
-Jabber/main.mm
-Jabber/xcconfig/Application.xcconfig
-Jabber/xcconfig/Debug.xcconfig
-Jabber/xcconfig/Release.xcconfig
-Jabber/xcconfig/Shared.xcconfig
-Jabber/Resources/*.lproj/Localizable.strings
-Jabber/Resources/{Images,Audio,Sounds,IB,Message Styles,Emoticons,Fonts}/*
-Jabber/Resources/*
-Jabber.xcodeproj/project.pbxproj
-Jabber.xcodeproj/project.xcworkspace/contents.xcworkspacedata
-opensource/build/config.site
-opensource/build/m4/movi.m4
-opensource/build/scripts/clean-deps.sh
-opensource/build/scripts/fixup-makefile.sh
-opensource/build/scripts/MoviMaker.py
-opensource/build.sh
-opensource/env.sh
-opensource/Makefile
-opensource/external/glib/*
-opensource/external/gstreamer/{gstreamer,gst-plugins-*}/*
-opensource/external/openssl/*
-opensource/external/proxy-libintl/*
-opensource/toolchain/darwin-x86/bin/{misc autotoools,m4,glib-mkenums,glib-genmarshal,libtool,pkg-config,etc.}
-opensource/toolchain/darwin-x86/share/{aclocal,aclocal-1.11,autoconf,automake-1.11,libtool}/*
-opensource/toolchain/darwin-x86/share/Config.pm
-opensource/toolchain/darwin-x86/share/Config.pm.movi.in
-patches/glib/glib.patch
-patches/gst-plugins-bad/gst-plugins-bad.patch
-patches/gst-plugins-base/gst-plugins-base.patch
-patches/gst-plugins-good/gst-plugins-good.patch
-patches/gstreamer/gstreamer.patch
-patches/openssl/openssl.patch
-
-readme.txt starts with "This Readme file describes how to build the Cisco 
-Jabber for iPad application. You need to install Xcode, but the final package
-is built by running buildapp.sh." and describes how to build project,
-prerequisites, the procedure in detail, and a "How to Include Provisioning
-Profile Manually / Alternate Code Signing Instructions" section.
-
-
-   3. Random Links Which May Be Of Interest
-
-[0] http://multinc.com/2009/08/24/compatibility-between-the-iphone-app-store-and-the-lgpl/
diff --git a/RELEASE b/RELEASE
deleted file mode 100644 (file)
index cef054a..0000000
--- a/RELEASE
+++ /dev/null
@@ -1,96 +0,0 @@
-This is GStreamer gst-plugins-ugly 1.19.2.
-
-GStreamer 1.19 is the development branch leading up to the next major
-stable version which will be 1.20.
-
-The 1.19 development series adds new features on top of the 1.18 series and is
-part of the API and ABI-stable 1.x release series of the GStreamer multimedia
-framework.
-
-Full release notes will one day be found at:
-
-  https://gstreamer.freedesktop.org/releases/1.20/
-
-Binaries for Android, iOS, Mac OS X and Windows will usually be provided
-shortly after the release.
-
-This module will not be very useful by itself and should be used in conjunction
-with other GStreamer modules for a complete multimedia experience.
-
- - gstreamer: provides the core GStreamer libraries and some generic plugins
-
- - gst-plugins-base: a basic set of well-supported plugins and additional
-                     media-specific GStreamer helper libraries for audio,
-                     video, rtsp, rtp, tags, OpenGL, etc.
-
- - gst-plugins-good: a set of well-supported plugins under our preferred
-                     license
-
- - gst-plugins-ugly: a set of well-supported plugins which might pose
-                     problems for distributors
-
- - gst-plugins-bad: a set of plugins of varying quality that have not made
-                    their way into one of core/base/good/ugly yet, for one
-                    reason or another. Many of these are are production quality
-                    elements, but may still be missing documentation or unit
-                    tests; others haven't passed the rigorous quality testing
-                    we expect yet.
-
- - gst-libav: a set of codecs plugins based on the ffmpeg library. This is
-                    where you can find audio and video decoders and encoders
-                    for a wide variety of formats including H.264, AAC, etc.
-
- - gstreamer-vaapi: hardware-accelerated video decoding and encoding using
-                    VA-API on Linux. Primarily for Intel graphics hardware.
-
- - gst-omx: hardware-accelerated video decoding and encoding, primarily for
-                    embedded Linux systems that provide an OpenMax
-                    implementation layer such as the Raspberry Pi.
-
- - gst-rtsp-server: library to serve files or streaming pipelines via RTSP
-
- - gst-editing-services: library an plugins for non-linear editing
-
-==== Download ====
-
-You can find source releases of gstreamer in the download
-directory: https://gstreamer.freedesktop.org/src/gstreamer/
-
-The git repository and details how to clone it can be found at
-https://gitlab.freedesktop.org/gstreamer/
-
-==== Homepage ====
-
-The project's website is https://gstreamer.freedesktop.org/
-
-==== Support and Bugs ====
-
-We have recently moved from GNOME Bugzilla to GitLab on freedesktop.org
-for bug reports and feature requests:
-
-  https://gitlab.freedesktop.org/gstreamer
-
-Please submit patches via GitLab as well, in form of Merge Requests. See
-
-  https://gstreamer.freedesktop.org/documentation/contribute/
-
-for more details.
-
-For help and support, please subscribe to and send questions to the
-gstreamer-devel mailing list (see below for details).
-
-There is also a #gstreamer IRC channel on the Freenode IRC network.
-
-==== Developers ====
-
-GStreamer source code repositories can be found on GitLab on freedesktop.org:
-
-  https://gitlab.freedesktop.org/gstreamer
-
-and can also be cloned from there and this is also where you can submit
-Merge Requests or file issues for bugs or feature requests.
-
-Interested developers of the core library, plugins, and applications should
-subscribe to the gstreamer-devel list:
-
-  https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
diff --git a/REQUIREMENTS b/REQUIREMENTS
deleted file mode 100644 (file)
index cb0cfbd..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-GStreamer uses a *large* array of tools and libraries, most of which are
-optional.  We have attempted to make sure that any code that depends on
-optional libraries doesn't get built unless you have those libraries.  If
-you find this not to be the case, please, let us know by filing a bug
-report at http://bugzilla.gnome.org/.
-
-
-Required tools:
-===============
-
-An extra set of tools is required if you wish to build GStreamer out of
-git (using autogen.sh):
-
-autoconf 2.52 or better 
-automake 1.5
-gettext 0.11.5
-libtool v1.4 or better
-pkgconfig 0.9.0 or better (http://www.freedesktop.org/software/pkgconfig/)
-
-Required libraries:
-===================
-
-The core GStreamer libraries. See the gstreamer/ module in GStreamer cvs, or
-the version that corresponds to this plugin release.
-
-Optional libraries:
-===================
-
-This file lists supporting libraries for which gst-plugins contains plugins,
-as well as their minimum version.  You can find the corresponding plugins in
-ext/(library)
-
-a52dec         (for the a52dec AC-3 decoder)
-                       http://liba52.sourceforge.net/
-opencore-amr (for the AMR-NB decoder and encoder and the AMR-WB decoder)
-                       http://sourceforge.net/projects/opencore-amr/
-libdvdread     (for the dvdreadsrc)
-                       http://www.dtek.chalmers.se/groups/dvd/
-                       (optional: libcss for encrypted DVDs)
-mpeg2dec       (for mpeg2 related plugins and dvd playback)
-                       http://libmpeg2.sourceforge.net/
-liborc         (for the liborc optimization library)
-                       http://code.entropywave.com/download/orc/
-cdio           (for the cdio CDDA CD audio source)
-                       http://savannah.gnu.org/projects/libcdio/
-x264           (for the x264enc H.264 encoder)
-                       http://www.videolan.org/developers/x264.html
-sidplay                FIXME
diff --git a/docs/all_index.md b/docs/all_index.md
deleted file mode 100644 (file)
index 4577a79..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
----
-short-description: Plugins from gst-plugins-ugly
-...
-
-# Plugins
-
diff --git a/docs/gst_api_version.in b/docs/gst_api_version.in
deleted file mode 100644 (file)
index efa22cd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-@GST_API_VERSION@
diff --git a/docs/gst_plugins_cache.json b/docs/gst_plugins_cache.json
deleted file mode 100644 (file)
index e3290a1..0000000
+++ /dev/null
@@ -1,2015 +0,0 @@
-{
-    "a52dec": {
-        "description": "Decodes ATSC A/52 encoded audio streams",
-        "elements": {
-            "a52dec": {
-                "author": "David I. Lehn <dlehn@users.sourceforge.net>",
-                "description": "Decodes ATSC A/52 encoded audio streams",
-                "hierarchy": [
-                    "GstA52Dec",
-                    "GstAudioDecoder",
-                    "GstElement",
-                    "GstObject",
-                    "GInitiallyUnowned",
-                    "GObject"
-                ],
-                "klass": "Codec/Decoder/Audio/Converter",
-                "long-name": "ATSC A/52 audio decoder",
-                "pad-templates": {
-                    "sink": {
-                        "caps": "audio/x-ac3:\naudio/ac3:\naudio/x-private1-ac3:\n",
-                        "direction": "sink",
-                        "presence": "always"
-                    },
-                    "src": {
-                        "caps": "audio/x-raw:\n         format: F32LE\n         layout: interleaved\n           rate: [ 4000, 96000 ]\n       channels: [ 1, 6 ]\n",
-                        "direction": "src",
-                        "presence": "always"
-                    }
-                },
-                "properties": {
-                    "drc": {
-                        "blurb": "Use Dynamic Range Compression",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "false",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gboolean",
-                        "writable": true
-                    },
-                    "lfe": {
-                        "blurb": "LFE",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "false",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gboolean",
-                        "writable": true
-                    },
-                    "mode": {
-                        "blurb": "Decoding Mode (default 3f2r)",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": " (0)",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "GstA52DecMode",
-                        "writable": true
-                    }
-                },
-                "rank": "secondary"
-            }
-        },
-        "filename": "gsta52dec",
-        "license": "GPL",
-        "other-types": {
-            "GstA52DecMode": {
-                "kind": "enum",
-                "values": [
-                    {
-                        "desc": "Mono",
-                        "name": "mono",
-                        "value": "1"
-                    },
-                    {
-                        "desc": "Stereo",
-                        "name": "stereo",
-                        "value": "2"
-                    },
-                    {
-                        "desc": "3 Front",
-                        "name": "3f",
-                        "value": "3"
-                    },
-                    {
-                        "desc": "2 Front, 1 Rear",
-                        "name": "2f1r",
-                        "value": "4"
-                    },
-                    {
-                        "desc": "3 Front, 1 Rear",
-                        "name": "3f1r",
-                        "value": "5"
-                    },
-                    {
-                        "desc": "2 Front, 2 Rear",
-                        "name": "2f2r",
-                        "value": "6"
-                    },
-                    {
-                        "desc": "3 Front, 2 Rear",
-                        "name": "3f2r",
-                        "value": "7"
-                    },
-                    {
-                        "desc": "Dolby",
-                        "name": "dolby",
-                        "value": "10"
-                    }
-                ]
-            }
-        },
-        "package": "GStreamer Ugly Plug-ins",
-        "source": "gst-plugins-ugly",
-        "tracers": {},
-        "url": "Unknown package origin"
-    },
-    "amrnb": {
-        "description": "Adaptive Multi-Rate Narrow-Band",
-        "elements": {
-            "amrnbdec": {
-                "author": "GStreamer maintainers <gstreamer-devel@lists.freedesktop.org>",
-                "description": "Adaptive Multi-Rate Narrow-Band audio decoder",
-                "hierarchy": [
-                    "GstAmrnbDec",
-                    "GstAudioDecoder",
-                    "GstElement",
-                    "GstObject",
-                    "GInitiallyUnowned",
-                    "GObject"
-                ],
-                "klass": "Codec/Decoder/Audio",
-                "long-name": "AMR-NB audio decoder",
-                "pad-templates": {
-                    "sink": {
-                        "caps": "audio/AMR:\n           rate: 8000\n       channels: 1\n",
-                        "direction": "sink",
-                        "presence": "always"
-                    },
-                    "src": {
-                        "caps": "audio/x-raw:\n         format: S16LE\n         layout: interleaved\n           rate: 8000\n       channels: 1\n",
-                        "direction": "src",
-                        "presence": "always"
-                    }
-                },
-                "properties": {
-                    "variant": {
-                        "blurb": "The decoder variant",
-                        "conditionally-available": false,
-                        "construct": true,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "IF1 (0)",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "GstAmrnbVariant",
-                        "writable": true
-                    }
-                },
-                "rank": "primary"
-            },
-            "amrnbenc": {
-                "author": "Wim Taymans <wim.taymans@gmail.com>",
-                "description": "Adaptive Multi-Rate Narrow-Band audio encoder",
-                "hierarchy": [
-                    "GstAmrnbEnc",
-                    "GstAudioEncoder",
-                    "GstElement",
-                    "GstObject",
-                    "GInitiallyUnowned",
-                    "GObject"
-                ],
-                "interfaces": [
-                    "GstPreset"
-                ],
-                "klass": "Codec/Encoder/Audio",
-                "long-name": "AMR-NB audio encoder",
-                "pad-templates": {
-                    "sink": {
-                        "caps": "audio/x-raw:\n         format: S16LE\n         layout: interleaved\n           rate: 8000\n       channels: 1\n",
-                        "direction": "sink",
-                        "presence": "always"
-                    },
-                    "src": {
-                        "caps": "audio/AMR:\n           rate: 8000\n       channels: 1\n",
-                        "direction": "src",
-                        "presence": "always"
-                    }
-                },
-                "properties": {
-                    "band-mode": {
-                        "blurb": "Encoding Band Mode (Kbps)",
-                        "conditionally-available": false,
-                        "construct": true,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "MR122 (7)",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "GstAmrnbEncBandMode",
-                        "writable": true
-                    }
-                },
-                "rank": "secondary"
-            }
-        },
-        "filename": "gstamrnb",
-        "license": "unknown",
-        "other-types": {
-            "GstAmrnbEncBandMode": {
-                "kind": "enum",
-                "values": [
-                    {
-                        "desc": "MR475",
-                        "name": "MR475",
-                        "value": "0"
-                    },
-                    {
-                        "desc": "MR515",
-                        "name": "MR515",
-                        "value": "1"
-                    },
-                    {
-                        "desc": "MR59",
-                        "name": "MR59",
-                        "value": "2"
-                    },
-                    {
-                        "desc": "MR67",
-                        "name": "MR67",
-                        "value": "3"
-                    },
-                    {
-                        "desc": "MR74",
-                        "name": "MR74",
-                        "value": "4"
-                    },
-                    {
-                        "desc": "MR795",
-                        "name": "MR795",
-                        "value": "5"
-                    },
-                    {
-                        "desc": "MR102",
-                        "name": "MR102",
-                        "value": "6"
-                    },
-                    {
-                        "desc": "MR122",
-                        "name": "MR122",
-                        "value": "7"
-                    },
-                    {
-                        "desc": "MRDTX",
-                        "name": "MRDTX",
-                        "value": "8"
-                    }
-                ]
-            },
-            "GstAmrnbVariant": {
-                "kind": "enum",
-                "values": [
-                    {
-                        "desc": "IF1",
-                        "name": "IF1",
-                        "value": "0"
-                    },
-                    {
-                        "desc": "IF2",
-                        "name": "IF2",
-                        "value": "1"
-                    }
-                ]
-            }
-        },
-        "package": "GStreamer Ugly Plug-ins",
-        "source": "gst-plugins-ugly",
-        "tracers": {},
-        "url": "Unknown package origin"
-    },
-    "amrwbdec": {
-        "description": "Adaptive Multi-Rate Wide-Band Decoder",
-        "elements": {
-            "amrwbdec": {
-                "author": "Renato Araujo <renato.filho@indt.org.br>",
-                "description": "Adaptive Multi-Rate Wideband audio decoder",
-                "hierarchy": [
-                    "GstAmrwbDec",
-                    "GstAudioDecoder",
-                    "GstElement",
-                    "GstObject",
-                    "GInitiallyUnowned",
-                    "GObject"
-                ],
-                "klass": "Codec/Decoder/Audio",
-                "long-name": "AMR-WB audio decoder",
-                "pad-templates": {
-                    "sink": {
-                        "caps": "audio/AMR-WB:\n           rate: 16000\n       channels: 1\n",
-                        "direction": "sink",
-                        "presence": "always"
-                    },
-                    "src": {
-                        "caps": "audio/x-raw:\n         format: S16LE\n         layout: interleaved\n           rate: 16000\n       channels: 1\n",
-                        "direction": "src",
-                        "presence": "always"
-                    }
-                },
-                "properties": {},
-                "rank": "primary"
-            }
-        },
-        "filename": "gstamrwbdec",
-        "license": "unknown",
-        "other-types": {},
-        "package": "GStreamer Ugly Plug-ins",
-        "source": "gst-plugins-ugly",
-        "tracers": {},
-        "url": "Unknown package origin"
-    },
-    "asf": {
-        "description": "Demuxes and muxes audio and video in Microsofts ASF format",
-        "elements": {
-            "asfdemux": {
-                "author": "Owen Fraser-Green <owen@discobabe.net>",
-                "description": "Demultiplexes ASF Streams",
-                "hierarchy": [
-                    "GstASFDemux",
-                    "GstElement",
-                    "GstObject",
-                    "GInitiallyUnowned",
-                    "GObject"
-                ],
-                "klass": "Codec/Demuxer",
-                "long-name": "ASF Demuxer",
-                "pad-templates": {
-                    "audio_%%u": {
-                        "caps": "ANY",
-                        "direction": "src",
-                        "presence": "sometimes"
-                    },
-                    "sink": {
-                        "caps": "video/x-ms-asf:\n",
-                        "direction": "sink",
-                        "presence": "always"
-                    },
-                    "video_%%u": {
-                        "caps": "ANY",
-                        "direction": "src",
-                        "presence": "sometimes"
-                    }
-                },
-                "rank": "secondary",
-                "signals": {}
-            },
-            "rtpasfdepay": {
-                "author": "Tim-Philipp Müller <tim centricular net>, Wim Taymans <wim.taymans@gmail.com>",
-                "description": "Extracts ASF streams from RTP",
-                "hierarchy": [
-                    "GstRtpAsfDepay",
-                    "GstRTPBaseDepayload",
-                    "GstElement",
-                    "GstObject",
-                    "GInitiallyUnowned",
-                    "GObject"
-                ],
-                "klass": "Codec/Depayloader/Network",
-                "long-name": "RTP ASF packet depayloader",
-                "pad-templates": {
-                    "sink": {
-                        "caps": "application/x-rtp:\n          media: { (string)application, (string)video, (string)audio }\n        payload: [ 96, 127 ]\n     clock-rate: [ 1, 2147483647 ]\n  encoding-name: X-ASF-PF\n",
-                        "direction": "sink",
-                        "presence": "always"
-                    },
-                    "src": {
-                        "caps": "video/x-ms-asf:\n",
-                        "direction": "src",
-                        "presence": "always"
-                    }
-                },
-                "properties": {},
-                "rank": "marginal"
-            },
-            "rtspwms": {
-                "author": "Wim Taymans <wim.taymans@gmail.com>",
-                "description": "Extends RTSP so that it can handle WMS setup",
-                "hierarchy": [
-                    "GstRTSPWMS",
-                    "GstElement",
-                    "GstObject",
-                    "GInitiallyUnowned",
-                    "GObject"
-                ],
-                "interfaces": [
-                    "GstRTSPExtension"
-                ],
-                "klass": "Network/Extension/Protocol",
-                "long-name": "WMS RTSP Extension",
-                "rank": "secondary"
-            }
-        },
-        "filename": "gstasf",
-        "license": "LGPL",
-        "other-types": {},
-        "package": "GStreamer Ugly Plug-ins",
-        "source": "gst-plugins-ugly",
-        "tracers": {},
-        "url": "Unknown package origin"
-    },
-    "cdio": {
-        "description": "Read audio from audio CDs",
-        "elements": {
-            "cdiocddasrc": {
-                "author": "Tim-Philipp Müller <tim centricular net>",
-                "description": "Read audio from CD using libcdio",
-                "hierarchy": [
-                    "GstCdioCddaSrc",
-                    "GstAudioCdSrc",
-                    "GstPushSrc",
-                    "GstBaseSrc",
-                    "GstElement",
-                    "GstObject",
-                    "GInitiallyUnowned",
-                    "GObject"
-                ],
-                "interfaces": [
-                    "GstURIHandler"
-                ],
-                "klass": "Source/File",
-                "long-name": "CD audio source (CDDA)",
-                "pad-templates": {
-                    "src": {
-                        "caps": "audio/x-raw:\n         format: S16LE\n         layout: interleaved\n           rate: 44100\n       channels: 2\n",
-                        "direction": "src",
-                        "presence": "always"
-                    }
-                },
-                "properties": {
-                    "read-speed": {
-                        "blurb": "Read from device at the specified speed (-1 = default)",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "-1",
-                        "max": "100",
-                        "min": "-1",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gint",
-                        "writable": true
-                    }
-                },
-                "rank": "secondary - 1"
-            }
-        },
-        "filename": "gstcdio",
-        "license": "GPL",
-        "other-types": {},
-        "package": "GStreamer Ugly Plug-ins",
-        "source": "gst-plugins-ugly",
-        "tracers": {},
-        "url": "Unknown package origin"
-    },
-    "dvdlpcmdec": {
-        "description": "Decode DVD LPCM frames into standard PCM",
-        "elements": {
-            "dvdlpcmdec": {
-                "author": "Jan Schmidt <jan@noraisin.net>, Michael Smith <msmith@fluendo.com>",
-                "description": "Decode DVD LPCM frames into standard PCM audio",
-                "hierarchy": [
-                    "GstDvdLpcmDec",
-                    "GstAudioDecoder",
-                    "GstElement",
-                    "GstObject",
-                    "GInitiallyUnowned",
-                    "GObject"
-                ],
-                "klass": "Codec/Decoder/Audio",
-                "long-name": "DVD LPCM Audio decoder",
-                "pad-templates": {
-                    "sink": {
-                        "caps": "audio/x-private1-lpcm:\naudio/x-private2-lpcm:\naudio/x-private-ts-lpcm:\naudio/x-lpcm:\n          width: { (int)16, (int)20, (int)24 }\n           rate: { (int)32000, (int)44100, (int)48000, (int)96000 }\n       channels: [ 1, 8 ]\n  dynamic_range: [ 0, 255 ]\n       emphasis: { (boolean)true, (boolean)false }\n           mute: { (boolean)true, (boolean)false }\n",
-                        "direction": "sink",
-                        "presence": "always"
-                    },
-                    "src": {
-                        "caps": "audio/x-raw:\n         format: { S16BE, S24BE }\n         layout: interleaved\n           rate: { (int)32000, (int)44100, (int)48000, (int)96000 }\n       channels: [ 1, 8 ]\n",
-                        "direction": "src",
-                        "presence": "always"
-                    }
-                },
-                "properties": {},
-                "rank": "primary"
-            }
-        },
-        "filename": "gstdvdlpcmdec",
-        "license": "LGPL",
-        "other-types": {},
-        "package": "GStreamer Ugly Plug-ins",
-        "source": "gst-plugins-ugly",
-        "tracers": {},
-        "url": "Unknown package origin"
-    },
-    "dvdread": {
-        "description": "Access a DVD with dvdread",
-        "elements": {
-            "dvdreadsrc": {
-                "author": "Erik Walthinsen <omega@cse.ogi.edu>",
-                "description": "Access a DVD title/chapter/angle using libdvdread",
-                "hierarchy": [
-                    "GstDvdReadSrc",
-                    "GstPushSrc",
-                    "GstBaseSrc",
-                    "GstElement",
-                    "GstObject",
-                    "GInitiallyUnowned",
-                    "GObject"
-                ],
-                "interfaces": [
-                    "GstURIHandler"
-                ],
-                "klass": "Source/File/DVD",
-                "long-name": "DVD Source",
-                "pad-templates": {
-                    "src": {
-                        "caps": "video/mpeg:\n    mpegversion: 2\n   systemstream: true\n",
-                        "direction": "src",
-                        "presence": "always"
-                    }
-                },
-                "properties": {
-                    "angle": {
-                        "blurb": "angle",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "1",
-                        "max": "999",
-                        "min": "1",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gint",
-                        "writable": true
-                    },
-                    "chapter": {
-                        "blurb": "chapter",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "1",
-                        "max": "999",
-                        "min": "1",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gint",
-                        "writable": true
-                    },
-                    "device": {
-                        "blurb": "DVD device location",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "/dev/dvd",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gchararray",
-                        "writable": true
-                    },
-                    "title": {
-                        "blurb": "title",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "1",
-                        "max": "999",
-                        "min": "1",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gint",
-                        "writable": true
-                    }
-                },
-                "rank": "none"
-            }
-        },
-        "filename": "gstdvdread",
-        "license": "GPL",
-        "other-types": {},
-        "package": "GStreamer Ugly Plug-ins",
-        "source": "gst-plugins-ugly",
-        "tracers": {},
-        "url": "Unknown package origin"
-    },
-    "dvdsub": {
-        "description": "DVD subtitle parser and decoder",
-        "elements": {
-            "dvdsubdec": {
-                "author": "Wim Taymans <wim.taymans@gmail.com>, Jan Schmidt <thaytan@mad.scientist.com>",
-                "description": "Decodes DVD subtitles into AYUV video frames",
-                "hierarchy": [
-                    "GstDvdSubDec",
-                    "GstElement",
-                    "GstObject",
-                    "GInitiallyUnowned",
-                    "GObject"
-                ],
-                "klass": "Codec/Decoder/Video",
-                "long-name": "DVD subtitle decoder",
-                "pad-templates": {
-                    "sink": {
-                        "caps": "subpicture/x-dvd:\n",
-                        "direction": "sink",
-                        "presence": "always"
-                    },
-                    "src": {
-                        "caps": "video/x-raw:\n         format: { AYUV, ARGB }\n          width: 720\n         height: 576\n      framerate: 0/1\n",
-                        "direction": "src",
-                        "presence": "always"
-                    }
-                },
-                "rank": "none"
-            },
-            "dvdsubparse": {
-                "author": "Mark Nauwelaerts <mnauw@users.sourceforge.net>",
-                "description": "Parses and packetizes DVD subtitle streams",
-                "hierarchy": [
-                    "GstDvdSubParse",
-                    "GstElement",
-                    "GstObject",
-                    "GInitiallyUnowned",
-                    "GObject"
-                ],
-                "klass": "Codec/Parser/Subtitle",
-                "long-name": "DVD subtitle parser",
-                "pad-templates": {
-                    "sink": {
-                        "caps": "subpicture/x-dvd:\n",
-                        "direction": "sink",
-                        "presence": "always"
-                    },
-                    "src": {
-                        "caps": "subpicture/x-dvd:\n         parsed: true\n",
-                        "direction": "src",
-                        "presence": "always"
-                    }
-                },
-                "rank": "none"
-            }
-        },
-        "filename": "gstdvdsub",
-        "license": "LGPL",
-        "other-types": {},
-        "package": "GStreamer Ugly Plug-ins",
-        "source": "gst-plugins-ugly",
-        "tracers": {},
-        "url": "Unknown package origin"
-    },
-    "mpeg2dec": {
-        "description": "LibMpeg2 decoder",
-        "elements": {
-            "mpeg2dec": {
-                "author": "Wim Taymans <wim.taymans@chello.be>",
-                "description": "Uses libmpeg2 to decode MPEG video streams",
-                "hierarchy": [
-                    "GstMpeg2dec",
-                    "GstVideoDecoder",
-                    "GstElement",
-                    "GstObject",
-                    "GInitiallyUnowned",
-                    "GObject"
-                ],
-                "klass": "Codec/Decoder/Video",
-                "long-name": "mpeg1 and mpeg2 video decoder",
-                "pad-templates": {
-                    "sink": {
-                        "caps": "video/mpeg:\n    mpegversion: [ 1, 2 ]\n   systemstream: false\n",
-                        "direction": "sink",
-                        "presence": "always"
-                    },
-                    "src": {
-                        "caps": "video/x-raw:\n         format: { YV12, I420, Y42B, Y444 }\n          width: [ 16, 4096 ]\n         height: [ 16, 4096 ]\n      framerate: [ 0/1, 2147483647/1 ]\n",
-                        "direction": "src",
-                        "presence": "always"
-                    }
-                },
-                "properties": {},
-                "rank": "secondary"
-            }
-        },
-        "filename": "gstmpeg2dec",
-        "license": "GPL",
-        "other-types": {},
-        "package": "GStreamer Ugly Plug-ins",
-        "source": "gst-plugins-ugly",
-        "tracers": {},
-        "url": "Unknown package origin"
-    },
-    "realmedia": {
-        "description": "RealMedia support plugins",
-        "elements": {
-            "pnmsrc": {
-                "author": "Wim Taymans <wim.taymans@gmail.com>",
-                "description": "Receive data over the network via PNM",
-                "hierarchy": [
-                    "GstPNMSrc",
-                    "GstPushSrc",
-                    "GstBaseSrc",
-                    "GstElement",
-                    "GstObject",
-                    "GInitiallyUnowned",
-                    "GObject"
-                ],
-                "interfaces": [
-                    "GstURIHandler"
-                ],
-                "klass": "Source/Network",
-                "long-name": "PNM packet receiver",
-                "pad-templates": {
-                    "src": {
-                        "caps": "application/vnd.rn-realmedia:\n",
-                        "direction": "src",
-                        "presence": "always"
-                    }
-                },
-                "properties": {
-                    "location": {
-                        "blurb": "Location of the PNM url to read",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "NULL",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gchararray",
-                        "writable": true
-                    }
-                },
-                "rank": "marginal"
-            },
-            "rademux": {
-                "author": "Tim-Philipp Müller <tim centricular net>",
-                "description": "Demultiplex a RealAudio file",
-                "hierarchy": [
-                    "GstRealAudioDemux",
-                    "GstElement",
-                    "GstObject",
-                    "GInitiallyUnowned",
-                    "GObject"
-                ],
-                "klass": "Codec/Demuxer",
-                "long-name": "RealAudio Demuxer",
-                "pad-templates": {
-                    "sink": {
-                        "caps": "application/x-pn-realaudio:\n",
-                        "direction": "sink",
-                        "presence": "always"
-                    },
-                    "src": {
-                        "caps": "ANY",
-                        "direction": "src",
-                        "presence": "sometimes"
-                    }
-                },
-                "rank": "secondary",
-                "signals": {}
-            },
-            "rdtdepay": {
-                "author": "Lutz Mueller <lutz at topfrose dot de>, Wim Taymans <wim@fluendo.com>",
-                "description": "Extracts RealMedia from RDT packets",
-                "hierarchy": [
-                    "GstRDTDepay",
-                    "GstElement",
-                    "GstObject",
-                    "GInitiallyUnowned",
-                    "GObject"
-                ],
-                "klass": "Codec/Depayloader/Network",
-                "long-name": "RDT packet parser",
-                "pad-templates": {
-                    "sink": {
-                        "caps": "application/x-rdt:\n          media: application\n     clock-rate: [ 1, 2147483647 ]\n  encoding-name: X-REAL-RDT\n",
-                        "direction": "sink",
-                        "presence": "always"
-                    },
-                    "src": {
-                        "caps": "application/vnd.rn-realmedia:\n",
-                        "direction": "src",
-                        "presence": "always"
-                    }
-                },
-                "rank": "marginal"
-            },
-            "rdtmanager": {
-                "author": "Wim Taymans <wim.taymans@gmail.com>",
-                "description": "Accepts raw RTP and RTCP packets and sends them forward",
-                "hierarchy": [
-                    "GstRDTManager",
-                    "GstElement",
-                    "GstObject",
-                    "GInitiallyUnowned",
-                    "GObject"
-                ],
-                "klass": "Codec/Parser/Network",
-                "long-name": "RTP Decoder",
-                "pad-templates": {
-                    "recv_rtcp_sink_%%u": {
-                        "caps": "application/x-rtcp:\n",
-                        "direction": "sink",
-                        "presence": "request"
-                    },
-                    "recv_rtp_sink_%%u": {
-                        "caps": "application/x-rdt:\n",
-                        "direction": "sink",
-                        "presence": "request"
-                    },
-                    "recv_rtp_src_%%u_%%u_%%u": {
-                        "caps": "application/x-rdt:\n",
-                        "direction": "src",
-                        "presence": "sometimes"
-                    },
-                    "rtcp_src_%%u": {
-                        "caps": "application/x-rtcp:\n",
-                        "direction": "src",
-                        "presence": "request"
-                    }
-                },
-                "properties": {
-                    "latency": {
-                        "blurb": "Amount of ms to buffer",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "200",
-                        "max": "-1",
-                        "min": "0",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "guint",
-                        "writable": true
-                    }
-                },
-                "rank": "none",
-                "signals": {
-                    "clear-pt-map": {
-                        "args": [],
-                        "return-type": "void",
-                        "when": "last"
-                    },
-                    "on-bye-ssrc": {
-                        "args": [
-                            {
-                                "name": "arg0",
-                                "type": "guint"
-                            },
-                            {
-                                "name": "arg1",
-                                "type": "guint"
-                            }
-                        ],
-                        "return-type": "void",
-                        "when": "last"
-                    },
-                    "on-bye-timeout": {
-                        "args": [
-                            {
-                                "name": "arg0",
-                                "type": "guint"
-                            },
-                            {
-                                "name": "arg1",
-                                "type": "guint"
-                            }
-                        ],
-                        "return-type": "void",
-                        "when": "last"
-                    },
-                    "on-npt-stop": {
-                        "args": [
-                            {
-                                "name": "arg0",
-                                "type": "guint"
-                            },
-                            {
-                                "name": "arg1",
-                                "type": "guint"
-                            }
-                        ],
-                        "return-type": "void",
-                        "when": "last"
-                    },
-                    "on-timeout": {
-                        "args": [
-                            {
-                                "name": "arg0",
-                                "type": "guint"
-                            },
-                            {
-                                "name": "arg1",
-                                "type": "guint"
-                            }
-                        ],
-                        "return-type": "void",
-                        "when": "last"
-                    },
-                    "request-pt-map": {
-                        "args": [
-                            {
-                                "name": "arg0",
-                                "type": "guint"
-                            },
-                            {
-                                "name": "arg1",
-                                "type": "guint"
-                            }
-                        ],
-                        "return-type": "GstCaps",
-                        "when": "last"
-                    }
-                }
-            },
-            "rmdemux": {
-                "author": "David Schleef <ds@schleef.org>",
-                "description": "Demultiplex a RealMedia file into audio and video streams",
-                "hierarchy": [
-                    "GstRMDemux",
-                    "GstElement",
-                    "GstObject",
-                    "GInitiallyUnowned",
-                    "GObject"
-                ],
-                "klass": "Codec/Demuxer",
-                "long-name": "RealMedia Demuxer",
-                "pad-templates": {
-                    "audio_%%u": {
-                        "caps": "ANY",
-                        "direction": "src",
-                        "presence": "sometimes"
-                    },
-                    "sink": {
-                        "caps": "application/vnd.rn-realmedia:\n",
-                        "direction": "sink",
-                        "presence": "always"
-                    },
-                    "video_%%u": {
-                        "caps": "ANY",
-                        "direction": "src",
-                        "presence": "sometimes"
-                    }
-                },
-                "rank": "primary",
-                "signals": {}
-            },
-            "rtspreal": {
-                "author": "Wim Taymans <wim.taymans@gmail.com>",
-                "description": "Extends RTSP so that it can handle RealMedia setup",
-                "hierarchy": [
-                    "GstRTSPReal",
-                    "GstElement",
-                    "GstObject",
-                    "GInitiallyUnowned",
-                    "GObject"
-                ],
-                "interfaces": [
-                    "GstRTSPExtension"
-                ],
-                "klass": "Network/Extension/Protocol",
-                "long-name": "RealMedia RTSP Extension",
-                "rank": "marginal"
-            }
-        },
-        "filename": "gstrealmedia",
-        "license": "LGPL",
-        "other-types": {},
-        "package": "GStreamer Ugly Plug-ins",
-        "source": "gst-plugins-ugly",
-        "tracers": {},
-        "url": "Unknown package origin"
-    },
-    "sid": {
-        "description": "Uses libsidplay to decode .sid files",
-        "elements": {
-            "siddec": {
-                "author": "Wim Taymans <wim.taymans@gmail.com>",
-                "description": "Use libsidplay to decode SID audio tunes",
-                "hierarchy": [
-                    "GstSidDec",
-                    "GstElement",
-                    "GstObject",
-                    "GInitiallyUnowned",
-                    "GObject"
-                ],
-                "klass": "Codec/Decoder/Audio",
-                "long-name": "Sid decoder",
-                "pad-templates": {
-                    "sink": {
-                        "caps": "audio/x-sid:\n",
-                        "direction": "sink",
-                        "presence": "always"
-                    },
-                    "src": {
-                        "caps": "audio/x-raw:\n         format: { S16LE, U16LE, S8, U8 }\n         layout: interleaved\n           rate: [ 8000, 48000 ]\n       channels: [ 1, 2 ]\n",
-                        "direction": "src",
-                        "presence": "always"
-                    }
-                },
-                "properties": {
-                    "blocksize": {
-                        "blurb": "Size in bytes to output per buffer",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "4096",
-                        "max": "-1",
-                        "min": "1",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "guint",
-                        "writable": true
-                    },
-                    "clock": {
-                        "blurb": "clock",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "pal (1)",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "GstSidClock",
-                        "writable": true
-                    },
-                    "filter": {
-                        "blurb": "filter",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "true",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gboolean",
-                        "writable": true
-                    },
-                    "force-speed": {
-                        "blurb": "force_speed",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "false",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gboolean",
-                        "writable": true
-                    },
-                    "measured-volume": {
-                        "blurb": "measured_volume",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "true",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gboolean",
-                        "writable": true
-                    },
-                    "memory": {
-                        "blurb": "memory",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "bank-switching (32)",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "GstSidMemory",
-                        "writable": true
-                    },
-                    "metadata": {
-                        "blurb": "Metadata",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "GstCaps",
-                        "writable": false
-                    },
-                    "mos8580": {
-                        "blurb": "mos8580",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "false",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gboolean",
-                        "writable": true
-                    },
-                    "tune": {
-                        "blurb": "tune",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "0",
-                        "max": "100",
-                        "min": "0",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gint",
-                        "writable": true
-                    }
-                },
-                "rank": "primary"
-            }
-        },
-        "filename": "gstsid",
-        "license": "GPL",
-        "other-types": {
-            "GstSidClock": {
-                "kind": "enum",
-                "values": [
-                    {
-                        "desc": "PAL",
-                        "name": "pal",
-                        "value": "1"
-                    },
-                    {
-                        "desc": "NTSC",
-                        "name": "ntsc",
-                        "value": "2"
-                    }
-                ]
-            },
-            "GstSidMemory": {
-                "kind": "enum",
-                "values": [
-                    {
-                        "desc": "Bank Switching",
-                        "name": "bank-switching",
-                        "value": "32"
-                    },
-                    {
-                        "desc": "Transparent ROM",
-                        "name": "transparent-rom",
-                        "value": "33"
-                    },
-                    {
-                        "desc": "Playsid Environment",
-                        "name": "playsid-environment",
-                        "value": "34"
-                    }
-                ]
-            }
-        },
-        "package": "GStreamer Ugly Plug-ins",
-        "source": "gst-plugins-ugly",
-        "tracers": {},
-        "url": "Unknown package origin"
-    },
-    "x264": {
-        "description": "libx264-based H264 plugins",
-        "elements": {
-            "x264enc": {
-                "author": "Josef Zlomek <josef.zlomek@itonis.tv>, Mark Nauwelaerts <mnauw@users.sf.net>",
-                "description": "H264 Encoder",
-                "hierarchy": [
-                    "GstX264Enc",
-                    "GstVideoEncoder",
-                    "GstElement",
-                    "GstObject",
-                    "GInitiallyUnowned",
-                    "GObject"
-                ],
-                "interfaces": [
-                    "GstPreset"
-                ],
-                "klass": "Codec/Encoder/Video",
-                "long-name": "x264enc",
-                "pad-templates": {
-                    "sink": {
-                        "caps": "video/x-raw:\n      framerate: [ 0/1, 2147483647/1 ]\n          width: [ 1, 2147483647 ]\n         height: [ 1, 2147483647 ]\n         format: { Y444, Y42B, I420, YV12, NV12, Y444_10LE, I422_10LE, I420_10LE }\n",
-                        "direction": "sink",
-                        "presence": "always"
-                    },
-                    "src": {
-                        "caps": "video/x-h264:\n      framerate: [ 0/1, 2147483647/1 ]\n          width: [ 1, 2147483647 ]\n         height: [ 1, 2147483647 ]\n  stream-format: { (string)avc, (string)byte-stream }\n      alignment: au\n        profile: { (string)high-4:4:4, (string)high-4:2:2, (string)high-10, (string)high, (string)main, (string)baseline, (string)constrained-baseline, (string)high-4:4:4-intra, (string)high-4:2:2-intra, (string)high-10-intra }\n",
-                        "direction": "src",
-                        "presence": "always"
-                    }
-                },
-                "properties": {
-                    "analyse": {
-                        "blurb": "Partitions to consider",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "(none)",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "GstX264EncAnalyse",
-                        "writable": true
-                    },
-                    "aud": {
-                        "blurb": "Use AU (Access Unit) delimiter",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "true",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gboolean",
-                        "writable": true
-                    },
-                    "b-adapt": {
-                        "blurb": "Automatically decide how many B-frames to use",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "true",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gboolean",
-                        "writable": true
-                    },
-                    "b-pyramid": {
-                        "blurb": "Keep some B-frames as references",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "false",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gboolean",
-                        "writable": true
-                    },
-                    "bframes": {
-                        "blurb": "Number of B-frames between I and P",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "0",
-                        "max": "16",
-                        "min": "0",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "guint",
-                        "writable": true
-                    },
-                    "bitrate": {
-                        "blurb": "Bitrate in kbit/sec",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "2048",
-                        "max": "2048000",
-                        "min": "1",
-                        "mutable": "playing",
-                        "readable": true,
-                        "type": "guint",
-                        "writable": true
-                    },
-                    "byte-stream": {
-                        "blurb": "Generate byte stream format of NALU",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "false",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gboolean",
-                        "writable": true
-                    },
-                    "cabac": {
-                        "blurb": "Enable CABAC entropy coding",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "true",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gboolean",
-                        "writable": true
-                    },
-                    "dct8x8": {
-                        "blurb": "Adaptive spatial transform size",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "false",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gboolean",
-                        "writable": true
-                    },
-                    "frame-packing": {
-                        "blurb": "Set frame packing mode for Stereoscopic content",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "auto (-1)",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "GstX264EncFramePacking",
-                        "writable": true
-                    },
-                    "insert-vui": {
-                        "blurb": "Insert VUI NAL in stream",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "true",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gboolean",
-                        "writable": true
-                    },
-                    "interlaced": {
-                        "blurb": "Interlaced material",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "false",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gboolean",
-                        "writable": true
-                    },
-                    "intra-refresh": {
-                        "blurb": "Use Periodic Intra Refresh instead of IDR frames",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "false",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gboolean",
-                        "writable": true
-                    },
-                    "ip-factor": {
-                        "blurb": "Quantizer factor between I- and P-frames",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "1.4",
-                        "max": "2",
-                        "min": "0",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gfloat",
-                        "writable": true
-                    },
-                    "key-int-max": {
-                        "blurb": "Maximal distance between two key-frames (0 for automatic)",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "0",
-                        "max": "2147483647",
-                        "min": "0",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "guint",
-                        "writable": true
-                    },
-                    "mb-tree": {
-                        "blurb": "Macroblock-Tree ratecontrol",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "true",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gboolean",
-                        "writable": true
-                    },
-                    "me": {
-                        "blurb": "Integer pixel motion estimation method",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "hex (1)",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "GstX264EncMe",
-                        "writable": true
-                    },
-                    "multipass-cache-file": {
-                        "blurb": "Filename for multipass cache file",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "x264.log",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gchararray",
-                        "writable": true
-                    },
-                    "noise-reduction": {
-                        "blurb": "Noise reduction strength",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "0",
-                        "max": "100000",
-                        "min": "0",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "guint",
-                        "writable": true
-                    },
-                    "option-string": {
-                        "blurb": "String of x264 options (overridden by element properties) in the format \"key1=value1:key2=value2\".",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gchararray",
-                        "writable": true
-                    },
-                    "pass": {
-                        "blurb": "Encoding pass/type",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "cbr (0)",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "GstX264EncPass",
-                        "writable": true
-                    },
-                    "pb-factor": {
-                        "blurb": "Quantizer factor between P- and B-frames",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "1.3",
-                        "max": "2",
-                        "min": "0",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gfloat",
-                        "writable": true
-                    },
-                    "psy-tune": {
-                        "blurb": "Preset name for psychovisual tuning options",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "none (0)",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "GstX264EncPsyTune",
-                        "writable": true
-                    },
-                    "qp-max": {
-                        "blurb": "Maximum quantizer",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "51",
-                        "max": "63",
-                        "min": "0",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "guint",
-                        "writable": true
-                    },
-                    "qp-min": {
-                        "blurb": "Minimum quantizer",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "10",
-                        "max": "63",
-                        "min": "0",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "guint",
-                        "writable": true
-                    },
-                    "qp-step": {
-                        "blurb": "Maximum quantizer difference between frames",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "4",
-                        "max": "63",
-                        "min": "0",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "guint",
-                        "writable": true
-                    },
-                    "quantizer": {
-                        "blurb": "Constant quantizer or quality to apply",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "21",
-                        "max": "50",
-                        "min": "0",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "guint",
-                        "writable": true
-                    },
-                    "rc-lookahead": {
-                        "blurb": "Number of frames for frametype lookahead",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "40",
-                        "max": "250",
-                        "min": "0",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gint",
-                        "writable": true
-                    },
-                    "ref": {
-                        "blurb": "Number of reference frames",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "3",
-                        "max": "16",
-                        "min": "1",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "guint",
-                        "writable": true
-                    },
-                    "sliced-threads": {
-                        "blurb": "Low latency but lower efficiency threading",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "false",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gboolean",
-                        "writable": true
-                    },
-                    "speed-preset": {
-                        "blurb": "Preset name for speed/quality tradeoff options (can affect decode compatibility - impose restrictions separately for your target decoder)",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "medium (6)",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "GstX264EncPreset",
-                        "writable": true
-                    },
-                    "sps-id": {
-                        "blurb": "SPS and PPS ID number",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "0",
-                        "max": "31",
-                        "min": "0",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "guint",
-                        "writable": true
-                    },
-                    "subme": {
-                        "blurb": "Subpixel motion estimation and partition decision quality: 1=fast, 10=best",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "1",
-                        "max": "10",
-                        "min": "1",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "guint",
-                        "writable": true
-                    },
-                    "sync-lookahead": {
-                        "blurb": "Number of buffer frames for threaded lookahead (-1 for automatic)",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "-1",
-                        "max": "250",
-                        "min": "-1",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gint",
-                        "writable": true
-                    },
-                    "threads": {
-                        "blurb": "Number of threads used by the codec (0 for automatic)",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "0",
-                        "max": "2147483647",
-                        "min": "0",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "guint",
-                        "writable": true
-                    },
-                    "trellis": {
-                        "blurb": "Enable trellis searched quantization",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "true",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gboolean",
-                        "writable": true
-                    },
-                    "tune": {
-                        "blurb": "Preset name for non-psychovisual tuning options",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "(none)",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "GstX264EncTune",
-                        "writable": true
-                    },
-                    "vbv-buf-capacity": {
-                        "blurb": "Size of the VBV buffer in milliseconds",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "600",
-                        "max": "10000",
-                        "min": "0",
-                        "mutable": "playing",
-                        "readable": true,
-                        "type": "guint",
-                        "writable": true
-                    },
-                    "weightb": {
-                        "blurb": "Weighted prediction for B-frames",
-                        "conditionally-available": false,
-                        "construct": false,
-                        "construct-only": false,
-                        "controllable": false,
-                        "default": "false",
-                        "mutable": "null",
-                        "readable": true,
-                        "type": "gboolean",
-                        "writable": true
-                    }
-                },
-                "rank": "primary"
-            }
-        },
-        "filename": "gstx264",
-        "license": "GPL",
-        "other-types": {
-            "GstX264EncAnalyse": {
-                "kind": "flags",
-                "values": [
-                    {
-                        "desc": "i4x4",
-                        "name": "i4x4",
-                        "value": "0x00000001"
-                    },
-                    {
-                        "desc": "i8x8",
-                        "name": "i8x8",
-                        "value": "0x00000002"
-                    },
-                    {
-                        "desc": "p8x8",
-                        "name": "p8x8",
-                        "value": "0x00000010"
-                    },
-                    {
-                        "desc": "p4x4",
-                        "name": "p4x4",
-                        "value": "0x00000020"
-                    },
-                    {
-                        "desc": "b8x8",
-                        "name": "b8x8",
-                        "value": "0x00000100"
-                    }
-                ]
-            },
-            "GstX264EncFramePacking": {
-                "kind": "enum",
-                "values": [
-                    {
-                        "desc": "Automatic (use incoming video information)",
-                        "name": "auto",
-                        "value": "-1"
-                    },
-                    {
-                        "desc": "checkerboard - Left and Right pixels alternate in a checkerboard pattern",
-                        "name": "checkerboard",
-                        "value": "0"
-                    },
-                    {
-                        "desc": "column interleaved - Alternating pixel columns represent Left and Right views",
-                        "name": "column-interleaved",
-                        "value": "1"
-                    },
-                    {
-                        "desc": "row interleaved - Alternating pixel rows represent Left and Right views",
-                        "name": "row-interleaved",
-                        "value": "2"
-                    },
-                    {
-                        "desc": "side by side - The left half of the frame contains the Left eye view, the right half the Right eye view",
-                        "name": "side-by-side",
-                        "value": "3"
-                    },
-                    {
-                        "desc": "top bottom - L is on top, R on bottom",
-                        "name": "top-bottom",
-                        "value": "4"
-                    },
-                    {
-                        "desc": "frame interleaved - Each frame contains either Left or Right view alternately",
-                        "name": "frame-interleaved",
-                        "value": "5"
-                    }
-                ]
-            },
-            "GstX264EncMe": {
-                "kind": "enum",
-                "values": [
-                    {
-                        "desc": "dia",
-                        "name": "dia",
-                        "value": "0"
-                    },
-                    {
-                        "desc": "hex",
-                        "name": "hex",
-                        "value": "1"
-                    },
-                    {
-                        "desc": "umh",
-                        "name": "umh",
-                        "value": "2"
-                    },
-                    {
-                        "desc": "esa",
-                        "name": "esa",
-                        "value": "3"
-                    },
-                    {
-                        "desc": "tesa",
-                        "name": "tesa",
-                        "value": "4"
-                    }
-                ]
-            },
-            "GstX264EncPass": {
-                "kind": "enum",
-                "values": [
-                    {
-                        "desc": "Constant Bitrate Encoding",
-                        "name": "cbr",
-                        "value": "0"
-                    },
-                    {
-                        "desc": "Constant Quantizer",
-                        "name": "quant",
-                        "value": "4"
-                    },
-                    {
-                        "desc": "Constant Quality",
-                        "name": "qual",
-                        "value": "5"
-                    },
-                    {
-                        "desc": "VBR Encoding - Pass 1",
-                        "name": "pass1",
-                        "value": "17"
-                    },
-                    {
-                        "desc": "VBR Encoding - Pass 2",
-                        "name": "pass2",
-                        "value": "18"
-                    },
-                    {
-                        "desc": "VBR Encoding - Pass 3",
-                        "name": "pass3",
-                        "value": "19"
-                    }
-                ]
-            },
-            "GstX264EncPreset": {
-                "kind": "enum",
-                "values": [
-                    {
-                        "desc": "No preset",
-                        "name": "None",
-                        "value": "0"
-                    },
-                    {
-                        "desc": "ultrafast",
-                        "name": "ultrafast",
-                        "value": "1"
-                    },
-                    {
-                        "desc": "superfast",
-                        "name": "superfast",
-                        "value": "2"
-                    },
-                    {
-                        "desc": "veryfast",
-                        "name": "veryfast",
-                        "value": "3"
-                    },
-                    {
-                        "desc": "faster",
-                        "name": "faster",
-                        "value": "4"
-                    },
-                    {
-                        "desc": "fast",
-                        "name": "fast",
-                        "value": "5"
-                    },
-                    {
-                        "desc": "medium",
-                        "name": "medium",
-                        "value": "6"
-                    },
-                    {
-                        "desc": "slow",
-                        "name": "slow",
-                        "value": "7"
-                    },
-                    {
-                        "desc": "slower",
-                        "name": "slower",
-                        "value": "8"
-                    },
-                    {
-                        "desc": "veryslow",
-                        "name": "veryslow",
-                        "value": "9"
-                    },
-                    {
-                        "desc": "placebo",
-                        "name": "placebo",
-                        "value": "10"
-                    }
-                ]
-            },
-            "GstX264EncPsyTune": {
-                "kind": "enum",
-                "values": [
-                    {
-                        "desc": "No tuning",
-                        "name": "none",
-                        "value": "0"
-                    },
-                    {
-                        "desc": "Film",
-                        "name": "film",
-                        "value": "1"
-                    },
-                    {
-                        "desc": "Animation",
-                        "name": "animation",
-                        "value": "2"
-                    },
-                    {
-                        "desc": "Grain",
-                        "name": "grain",
-                        "value": "3"
-                    },
-                    {
-                        "desc": "PSNR",
-                        "name": "psnr",
-                        "value": "4"
-                    },
-                    {
-                        "desc": "SSIM",
-                        "name": "ssim",
-                        "value": "5"
-                    }
-                ]
-            },
-            "GstX264EncTune": {
-                "kind": "flags",
-                "values": [
-                    {
-                        "desc": "Still image",
-                        "name": "stillimage",
-                        "value": "0x00000001"
-                    },
-                    {
-                        "desc": "Fast decode",
-                        "name": "fastdecode",
-                        "value": "0x00000002"
-                    },
-                    {
-                        "desc": "Zero latency",
-                        "name": "zerolatency",
-                        "value": "0x00000004"
-                    }
-                ]
-            }
-        },
-        "package": "GStreamer Ugly Plug-ins",
-        "source": "gst-plugins-ugly",
-        "tracers": {},
-        "url": "Unknown package origin"
-    },
-    "xingmux": {
-        "description": "Add XING tags to mpeg audio files",
-        "elements": {
-            "xingmux": {
-                "author": "Christophe Fergeau <teuf@gnome.org>",
-                "description": "Adds a Xing header to the beginning of a VBR MP3 file",
-                "hierarchy": [
-                    "GstXingMux",
-                    "GstElement",
-                    "GstObject",
-                    "GInitiallyUnowned",
-                    "GObject"
-                ],
-                "klass": "Formatter/Muxer/Metadata",
-                "long-name": "MP3 Xing muxer",
-                "pad-templates": {
-                    "sink": {
-                        "caps": "audio/mpeg:\n    mpegversion: 1\n          layer: [ 1, 3 ]\n",
-                        "direction": "sink",
-                        "presence": "always"
-                    },
-                    "src": {
-                        "caps": "audio/mpeg:\n    mpegversion: 1\n          layer: [ 1, 3 ]\n",
-                        "direction": "src",
-                        "presence": "always"
-                    }
-                },
-                "rank": "marginal"
-            }
-        },
-        "filename": "gstxingmux",
-        "license": "LGPL",
-        "other-types": {},
-        "package": "GStreamer Ugly Plug-ins",
-        "source": "gst-plugins-ugly",
-        "tracers": {},
-        "url": "Unknown package origin"
-    }
-}
\ No newline at end of file
diff --git a/docs/index.md b/docs/index.md
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/docs/meson.build b/docs/meson.build
deleted file mode 100644 (file)
index 5b377e3..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-build_hotdoc = false
-
-required_hotdoc_extensions = ['gst-extension']
-plugins_cache = join_paths(meson.current_source_dir(), 'gst_plugins_cache.json')
-if gst_dep.type_name() == 'internal'
-    gst_proj = subproject('gstreamer')
-    plugins_cache_generator = gst_proj.get_variable('plugins_cache_generator')
-else
-    plugins_cache_generator = find_program(join_paths(gst_dep.get_pkgconfig_variable('libexecdir'), 'gstreamer-' + api_version, 'gst-plugins-doc-cache-generator'),
-        required: false)
-endif
-
-if plugins.length() == 0
-    message('All ugly plugins have been disabled')
-elif plugins_cache_generator.found()
-    plugins_doc_dep = custom_target('ugly-plugins-doc-cache',
-        command: [plugins_cache_generator, plugins_cache, '@OUTPUT@', '@INPUT@'],
-        input: plugins,
-        output: 'gst_plugins_cache.json',
-        build_always_stale: true,
-    )
-else
-    warning('GStreamer plugin inspector for documentation not found, can\'t update the cache')
-endif
-
-hotdoc_p = find_program('hotdoc', required: get_option('doc'))
-if not hotdoc_p.found()
-    message('Hotdoc not found, not building the documentation')
-    subdir_done()
-endif
-
-hotdoc_req = '>= 0.11.0'
-hotdoc_version = run_command(hotdoc_p, '--version').stdout()
-if not hotdoc_version.version_compare(hotdoc_req)
-    if get_option('doc').enabled()
-        error('Hotdoc version @0@ not found, got @1@'.format(hotdoc_req, hotdoc_version))
-    else
-        message('Hotdoc version @0@ not found, got @1@'.format(hotdoc_req, hotdoc_version))
-        subdir_done()
-    endif
-endif
-
-hotdoc = import('hotdoc')
-foreach extension: required_hotdoc_extensions
-    if not hotdoc.has_extensions(extension)
-        if get_option('doc').enabled()
-            error('Documentation enabled but @0@ missing'.format(extension))
-        endif
-
-        message('@0@ extension not found, not building documentation'.format(extension))
-        subdir_done()
-    endif
-endforeach
-
-build_hotdoc = true
-docconf = configuration_data()
-docconf.set('GST_API_VERSION', api_version)
-
-configure_file(input : 'gst_api_version.in',
-               output : 'gst_api_version.md',
-               configuration : docconf)
-
-root_rel = '..'
-excludes = []
-foreach f: []
-    excludes += [join_paths(meson.current_source_dir(), root_rel, '..', f)]
-endforeach
-
-libs_doc = []
-plugins_doc = []
-list_plugin_res = run_command(python3, '-c',
-'''
-import sys
-import json
-
-with open("@0@") as f:
-        print(':'.join(json.load(f).keys()), end='')
-'''.format(plugins_cache))
-
-assert(list_plugin_res.returncode() == 0,
-  'Could not list plugins from @0@'.format(plugins_cache))
-
-foreach plugin_name: list_plugin_res.stdout().split(':')
-    plugins_doc += [hotdoc.generate_doc(plugin_name,
-        project_version: api_version,
-        sitemap: 'sitemap.txt',
-        index: 'index.md',
-        gst_index: 'index.md',
-        gst_smart_index: true,
-        gst_c_sources: [
-            join_paths(root_rel, 'sys/*/*.[ch]'),
-            join_paths(root_rel, 'ext/*/*.[ch]'),
-            join_paths(root_rel, 'gst/*/*.[ch]'),
-        ],
-        gst_c_source_filters: excludes,
-        dependencies: [gst_dep, plugins],
-        gst_order_generated_subpages: true,
-        disable_incremental_build: true,
-        gst_cache_file: plugins_cache,
-        gst_plugin_name: plugin_name,
-    )]
-endforeach
diff --git a/docs/random/ChangeLog-0.8 b/docs/random/ChangeLog-0.8
deleted file mode 100644 (file)
index 0c62918..0000000
+++ /dev/null
@@ -1,17692 +0,0 @@
-2005-08-31  Michael Smith <msmith@fluendo.com>
-
-       * configure.ac:
-       * gst/dvdlpcmdec/Makefile.am:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcm_reset),
-       (gst_dvdlpcmdec_init), (gst_dvdlpcmdec_link), (update_timestamps),
-       (gst_dvdlpcmdec_chain):
-       * gst/dvdlpcmdec/gstdvdlpcmdec.h:
-         Port LPCM decoder to 0.9
-
-2005-08-30  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * configure.ac:
-         Remove plugins that should have disappeared.
-
-2005-08-30  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * autogen.sh:
-       * configure.ac:
-         Make autogen work again.
-
-2005-08-30  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-       * ext/Makefile.am:
-       * ext/aalib/Makefile.am:
-       * ext/aalib/gstaasink.c:
-       * ext/aalib/gstaasink.h:
-       * ext/cairo/Makefile.am:
-       * ext/cairo/gstcairo.c:
-       * ext/cairo/gsttextoverlay.c:
-       * ext/cairo/gsttextoverlay.h:
-       * ext/cairo/gsttimeoverlay.c:
-       * ext/cairo/gsttimeoverlay.h:
-       * ext/dv/Makefile.am:
-       * ext/dv/NOTES:
-       * ext/dv/demo-play.c:
-       * ext/dv/gstdv.c:
-       * ext/dv/gstdvdec.c:
-       * ext/dv/gstdvdec.h:
-       * ext/dv/gstdvdemux.c:
-       * ext/dv/gstdvdemux.h:
-       * ext/esd/Makefile.am:
-       * ext/esd/README:
-       * ext/esd/esdmon.c:
-       * ext/esd/esdmon.h:
-       * ext/esd/esdsink.c:
-       * ext/esd/esdsink.h:
-       * ext/esd/gstesd.c:
-       * ext/flac/Makefile.am:
-       * ext/flac/flac_compat.h:
-       * ext/flac/gstflac.c:
-       * ext/flac/gstflacdec.c:
-       * ext/flac/gstflacdec.h:
-       * ext/flac/gstflacenc.c:
-       * ext/flac/gstflacenc.h:
-       * ext/flac/gstflactag.c:
-       * ext/flac/gstflactag.h:
-       * ext/gconf/Makefile.am:
-       * ext/gconf/gconf.c:
-       * ext/gconf/gconf.h:
-       * ext/gconf/gstgconfaudiosink.c:
-       * ext/gconf/gstgconfaudiosink.h:
-       * ext/gconf/gstgconfelements.c:
-       * ext/gconf/gstgconfelements.h:
-       * ext/gconf/gstgconfvideosink.c:
-       * ext/gconf/gstgconfvideosink.h:
-       * ext/gdk_pixbuf/Makefile.am:
-       * ext/gdk_pixbuf/gst_loader.c:
-       * ext/gdk_pixbuf/gstgdkanimation.c:
-       * ext/gdk_pixbuf/gstgdkanimation.h:
-       * ext/gdk_pixbuf/gstgdkpixbuf.c:
-       * ext/gdk_pixbuf/gstgdkpixbuf.h:
-       * ext/gdk_pixbuf/pixbufscale.c:
-       * ext/gdk_pixbuf/pixbufscale.h:
-       * ext/jpeg/Makefile.am:
-       * ext/jpeg/README:
-       * ext/jpeg/gstjpeg.c:
-       * ext/jpeg/gstjpegdec.c:
-       * ext/jpeg/gstjpegdec.h:
-       * ext/jpeg/gstjpegenc.c:
-       * ext/jpeg/gstjpegenc.h:
-       * ext/jpeg/gstsmokedec.c:
-       * ext/jpeg/gstsmokedec.h:
-       * ext/jpeg/gstsmokeenc.c:
-       * ext/jpeg/gstsmokeenc.h:
-       * ext/jpeg/smokecodec.c:
-       * ext/jpeg/smokecodec.h:
-       * ext/jpeg/smokeformat.h:
-       * ext/ladspa/Makefile.am:
-       * ext/ladspa/gstladspa.c:
-       * ext/ladspa/gstladspa.h:
-       * ext/ladspa/gstsignalprocessor.c:
-       * ext/ladspa/gstsignalprocessor.h:
-       * ext/ladspa/load.c:
-       * ext/ladspa/search.c:
-       * ext/ladspa/utils.h:
-       * ext/libcaca/Makefile.am:
-       * ext/libcaca/gstcacasink.c:
-       * ext/libcaca/gstcacasink.h:
-       * ext/libmng/Makefile.am:
-       * ext/libmng/gstmng.c:
-       * ext/libmng/gstmng.h:
-       * ext/libmng/gstmngdec.c:
-       * ext/libmng/gstmngdec.h:
-       * ext/libmng/gstmngenc.c:
-       * ext/libmng/gstmngenc.h:
-       * ext/libpng/Makefile.am:
-       * ext/libpng/gstpng.c:
-       * ext/libpng/gstpng.h:
-       * ext/libpng/gstpngdec.c:
-       * ext/libpng/gstpngdec.h:
-       * ext/libpng/gstpngenc.c:
-       * ext/libpng/gstpngenc.h:
-       * ext/mikmod/Makefile.am:
-       * ext/mikmod/README:
-       * ext/mikmod/drv_gst.c:
-       * ext/mikmod/gstmikmod.c:
-       * ext/mikmod/gstmikmod.h:
-       * ext/mikmod/mikmod_reader.c:
-       * ext/mikmod/mikmod_types.c:
-       * ext/mikmod/mikmod_types.h:
-       * ext/pango/Makefile.am:
-       * ext/pango/gsttextoverlay.c:
-       * ext/pango/gsttextoverlay.h:
-       * ext/pango/gsttimeoverlay.c:
-       * ext/pango/gsttimeoverlay.h:
-       * ext/raw1394/Makefile.am:
-       * ext/raw1394/gst1394.c:
-       * ext/raw1394/gstdv1394src.c:
-       * ext/raw1394/gstdv1394src.h:
-       * ext/shout2/Makefile.am:
-       * ext/shout2/gstshout2.c:
-       * ext/shout2/gstshout2.h:
-       * ext/speex/Makefile.am:
-       * ext/speex/gstspeex.c:
-       * ext/speex/gstspeexdec.c:
-       * ext/speex/gstspeexdec.h:
-       * ext/speex/gstspeexenc.c:
-       * ext/speex/gstspeexenc.h:
-       * gst/avi/.cvsignore:
-       * gst/avi/Makefile.am:
-       * gst/avi/README:
-       * gst/avi/avi-ids.h:
-       * gst/avi/avi.vcproj:
-       * gst/avi/gstavi.c:
-       * gst/avi/gstavidemux.c:
-       * gst/avi/gstavidemux.h:
-       * gst/avi/gstavimux.c:
-       * gst/avi/gstavimux.h:
-       * gst/level/gstlevel.c: (gst_level_transform):
-       * sys/Makefile.am:
-       * sys/oss/.cvsignore:
-       * sys/oss/Makefile.am:
-       * sys/oss/gst-i18n-plugin.h:
-       * sys/oss/gstossaudio.c:
-       * sys/oss/gstossdmabuffer.c:
-       * sys/oss/gstossdmabuffer.h:
-       * sys/oss/gstosshelper.c:
-       * sys/oss/gstosshelper.h:
-       * sys/oss/gstossmixer.c:
-       * sys/oss/gstossmixer.h:
-       * sys/oss/gstossmixerelement.c:
-       * sys/oss/gstossmixerelement.h:
-       * sys/oss/gstossmixertrack.c:
-       * sys/oss/gstossmixertrack.h:
-       * sys/oss/gstosssink.c:
-       * sys/oss/gstosssink.h:
-       * sys/oss/gstosssrc.c:
-       * sys/oss/gstosssrc.h:
-       * sys/oss/oss_probe.c:
-       * sys/osxaudio/Makefile.am:
-       * sys/osxaudio/gstosxaudio.c:
-       * sys/osxaudio/gstosxaudioelement.c:
-       * sys/osxaudio/gstosxaudioelement.h:
-       * sys/osxaudio/gstosxaudiosink.c:
-       * sys/osxaudio/gstosxaudiosink.h:
-       * sys/osxaudio/gstosxaudiosrc.c:
-       * sys/osxaudio/gstosxaudiosrc.h:
-       * sys/osxvideo/Makefile.am:
-       * sys/osxvideo/cocoawindow.h:
-       * sys/osxvideo/cocoawindow.m:
-       * sys/osxvideo/osxvideosink.h:
-       * sys/osxvideo/osxvideosink.m:
-         all these plugins are moved to gst-plugins-good
-
-2005-08-28  Flavio Oliveira  <flavio.oliveira@indt.org.br>
-
-       * gst/wavenc/gstwavenc.c: Ported to GStreamer 0.9.
-       Need to fix performance issues.
-
-2005-08-28  Andy Wingo  <wingo@pobox.com>
-
-       * Updates for two-arg init from GST_BOILERPLATE.
-
-       * ext/ladspa/gstsignalprocessor.c (gst_signal_processor_init): Use
-       the second arg for the class, because G_OBJECT_GET_CLASS (self)
-       returns the wrong thing.
-       (gst_signal_processor_add_pad_from_template): Make pads of the
-       right type.
-
-       * ext/ladspa/gstladspa.c (gst_ladspa_class_get_param_spec): Make
-       writable param specs G_PARAM_CONSTRUCT so default values work.
-       (gst_ladspa_init): Use the second arg for the class.
-
-2005-08-26  Andy Wingo  <wingo@pobox.com>
-
-       * ext/ladspa/gstladspa.c: 
-       * ext/ladspa/gstladspa.h: Finish porting, still doesn't work but
-       it does compile and register. I have more features than you.
-       
-       * ext/ladspa/gstsignalprocessor.h: 
-       * ext/ladspa/gstsignalprocessor.c: Updates, bug fixen.
-
-2005-08-26  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/effectv/gstquark.c: (gst_quarktv_init),
-       (gst_quarktv_change_state):
-         do proper cleanup/creation, fixes state changes
-
-2005-08-25  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * gst/level/gstlevel.c: (gst_level_message_new):
-       Revert unpopular change for GST_MESSAGE_SRC to GObject.
-
-2005-08-25  Andy Wingo  <wingo@pobox.com>
-
-       * ext/ladspa/gstladspa.h: 
-       * ext/ladspa/gstladspa.c: Halfway-ported. Doesn't compile yet.
-
-       * ext/ladspa/gstsignalprocessor.h:
-       * ext/ladspa/gstsignalprocessor.c: New files, the start of a base
-       class for DSP elements.
-
-       * configure.ac: Sort the external libs checks, add a ladspa check,
-       output the ladspa makefile.
-
-2005-08-25  Owen Fraser-Green  <owen@discobabe.net>
-
-       * gst/realmedia/rmdemux.c (gst_rmdemux_loop, gst_rmdemux_chain):
-       Fixed EOS.
-       (gst_rmdemux_parse_indx_data, gst_rmdemux_parse_indx): Handle
-       malformed index headers where the packet size is incorrect.
-
-2005-08-24  Andy Wingo  <wingo@pobox.com>
-
-       * ext/dv/gstdvdemux.c (gst_dvdemux_demux_frame): Send out valid
-       segment end timestamps.
-
-2005-08-24  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-       * ext/Makefile.am:
-         lame and mpegaudioparse seem to work
-       * gst/videobox/gstvideobox.c: (gst_video_box_class_init),
-       (gst_video_box_transform_caps), (gst_video_box_get_unit_size):
-         update for basetransform changes
-
-2005-08-24  Jan Schmidt  <thaytan@mad.scientist.com>
-       * gst/level/gstlevel.c: (gst_level_message_new):
-         GST_MESSAGE_SRC became a GObject
-
-2005-08-23  Stefan Kost  <ensonic@users.sf.net>
-
-       * ext/speex/gstspeexenc.h:
-         Fixed include path of adapter
-
-2005-08-23  Wim Taymans  <wim@fluendo.com>
-
-       * ext/speex/gstspeexdec.c: (gst_speex_dec_class_init):
-       * ext/speex/gstspeexenc.c: (gst_speexenc_class_init):
-       Fix property warning.
-
-2005-08-23  Wim Taymans  <wim@fluendo.com>
-
-       * gst/rtp/gstrtpamrdec.c: (gst_rtpamrdec_init),
-       (gst_rtpamrdec_sink_setcaps), (gst_rtpamrdec_chain):
-       * gst/rtp/gstrtpamrenc.c: (gst_rtpamrenc_class_init),
-       (gst_rtpamrenc_init), (gst_rtpamrenc_chain):
-       * gst/rtp/gstrtph263penc.c: (gst_rtph263penc_class_init),
-       (gst_rtph263penc_flush), (gst_rtph263penc_chain):
-       Small updates, RFC reference to payload encoders.
-
-2005-08-23  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * configure.ac:
-       * ext/Makefile.am:
-       * ext/speex/Makefile.am:
-       * ext/speex/gstspeex.c: (plugin_init):
-       * ext/speex/gstspeexdec.c: (speex_get_query_types),
-       (gst_speex_dec_init), (speex_dec_src_query), (speex_dec_src_event),
-       (speex_dec_event), (speex_dec_chain):
-         Port speexdec. Leads to some unfamiliar warnings on console,
-         but works otherwise.
-
-2005-08-23  Andy Wingo  <wingo@pobox.com>
-
-       * sys/oss/gstosssrc.c (gst_oss_src_open): Set the device-name
-       property after opening the mixer.
-
-       * sys/oss/gstosssrc.c: 
-       * sys/oss/gstosssrc.h: Easy to implement a mixer, eh...
-
-       * sys/oss/gstossmixerelement.h:
-       * sys/oss/gstossmixerelement.c: Added mixer element like
-       alsamixer.
-
-       * sys/oss/Makefile.am: 
-       * sys/oss/gstossaudio.c: Register the ossmixer element.
-       
-       * sys/oss/gstossmixer.h:
-       * sys/oss/gstossmixer.c: Refactored to be more like alsamixer.
-
-       * sys/oss/gstossmixertrack.h:
-       * sys/oss/gstossmixertrack.c: Split out from gstossmixer.[ch],
-       like gstalsamixer.
-
-       * sys/oss/gstosssrc.c:
-       * sys/oss/gstosssink.c: Where before we used a gstosselement
-       object as a helper library, now just call functions from
-       gstosshelper.
-
-       * sys/oss/gstosshelper.h:
-       * sys/oss/gstosshelper.c: Made a real library. Removed
-       propertyprobe for now, should add it back later.
-       
-       * sys/oss/gstosselement.h:
-       * sys/oss/gstosselement.c: Removed, we don't have a shared base
-       class.
-       
-       * sys/oss/gstosshelper.c (gst_oss_helper_probe_caps): Search
-       higher-to-lower, makes 16 bit appear earlier in the caps, which
-       makes it preferred.
-
-       * sys/oss/gstosssrc.h: 
-       * sys/oss/gstosssrc.c: Totally ported, dude.
-
-       * sys/oss/Makefile.am:
-       * sys/oss/gstossaudio.c: Add osssrc.
-       
-       * sys/oss/gstosssink.c: We do native byte order.
-
-2005-08-23  Owen Fraser-Green  <owen@discobabe.net>
-
-       * gst/realmedia/rmdemux.c (gst_rmdemux_src_event): Fixed bug
-       causing events to be passed wrong way.
-       (gst_rmdemux_parse_packet): Avoid accidentally skipping audio.
-
-2005-08-22  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_init),
-       (gst_id3_tag_sink_event), (gst_id3_tag_do_caps_nego),
-       (gst_id3_tag_chain), (gst_id3_tag_change_state), (plugin_init):
-         Works a bit better now, but still needs a rewrite to use
-         get_range instead of this seeking nastiness.
-
-2005-08-22  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * configure.ac:
-       * ext/Makefile.am:
-       * ext/flac/Makefile.am:
-       * ext/flac/gstflac.c: (plugin_init):
-       * ext/flac/gstflacdec.c: (flacdec_get_type), (gst_flacdec_init),
-       (gst_flacdec_update_metadata), (gst_flacdec_seek),
-       (gst_flacdec_tell), (gst_flacdec_length), (gst_flacdec_read),
-       (gst_flacdec_write), (gst_flacdec_loop),
-       (gst_flacdec_get_src_query_types), (gst_flacdec_src_query),
-       (gst_flacdec_src_event), (gst_flacdec_sink_activate),
-       (gst_flacdec_sink_activate_pull), (gst_flacdec_change_state):
-       * ext/flac/gstflacdec.h:
-         Port flacdec (seeking is still slow'ish).
-
-2005-08-22  Owen Fraser-Green  <owen@discobabe.net>
-
-       * gst/realmedia/rmdemux.c: 
-       (gst_rmdemux_perform_seek, gst_rmdemux_parse_packet): 
-       Seeking improvements.
-
-2005-08-19  Wim Taymans  <wim@fluendo.com>
-
-       * gst/udp/gstmultiudpsink.c: (gst_multiudpsink_class_init):
-       Remove get_time code that is both wrong and unneeded.
-
-2005-08-19  Wim Taymans  <wim@fluendo.com>
-
-       * gst/rtp/gstrtph263penc.c: (gst_rtph263penc_class_init),
-       (gst_rtph263penc_flush), (gst_rtph263penc_chain),
-       (gst_rtph263penc_set_property), (gst_rtph263penc_get_property):
-       * gst/rtp/gstrtph263penc.h:
-       Added configurable pt and ssrc, to be merged in the caps or
-       a base class...
-
-2005-08-19  Wim Taymans  <wim@fluendo.com>
-
-       * gst/rtp/gstrtph263pdec.c: (gst_rtph263pdec_init),
-       (gst_rtph263pdec_chain):
-       * gst/rtp/gstrtph263penc.c: (gst_rtph263penc_class_init),
-       (gst_rtph263penc_flush), (gst_rtph263penc_chain):
-       Some cleanups in the h263p (de)payloaders.
-
-2005-08-19  Wim Taymans  <wim@fluendo.com>
-
-       * ext/amrnb/amrnbdec.c:
-       * ext/amrnb/amrnbenc.c: (gst_amrnbenc_setcaps):
-       * ext/amrnb/amrnbparse.c:
-       Update caps with audio/AMR.
-       
-       * gst/rtp/gstrtpamrdec.c: (gst_rtpamrdec_init),
-       (gst_rtpamrdec_sink_setcaps), (gst_rtpamrdec_chain),
-       (gst_rtpamrdec_change_state):
-       * gst/rtp/gstrtpamrdec.h:
-       * gst/rtp/gstrtpamrenc.c: (gst_rtpamrenc_class_init),
-       (gst_rtpamrenc_init), (gst_rtpamrenc_chain):
-       Dont set FT headers twice, it was already in the encoded
-       bitstream.
-       
-       * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_send), (gst_rtspsrc_open),
-       (gst_rtspsrc_close), (gst_rtspsrc_play):
-       * gst/rtsp/rtspconnection.c: (parse_line):
-       Cleanups
-       
-       * gst/udp/gstudpsrc.c: (gst_udpsrc_class_init),
-       (gst_udpsrc_create), (gst_udpsrc_set_property),
-       (gst_udpsrc_get_property):
-       * gst/udp/gstudpsrc.h:
-       Added caps property, we need this soon to type the buffers.
-
-2005-08-18  Wim Taymans  <wim@fluendo.com>
-
-       * gst/rtp/gstrtpamrdec.c: (gst_rtpamrdec_init),
-       (gst_rtpamrdec_chain):
-       Fix up amr depayloader a bit.
-
-       * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_send), (gst_rtspsrc_open),
-       (gst_rtspsrc_close), (gst_rtspsrc_play):
-       Look for options result in Public and Allow header fields..
-       spec says Allow but some servers return Public...
-
-2005-08-18  Wim Taymans  <wim@fluendo.com>
-
-       * gst/rtp/gstrtpamrenc.c: (gst_rtpamrenc_class_init),
-       (gst_rtpamrenc_init), (gst_rtpamrenc_chain),
-       (gst_rtpamrenc_set_property), (gst_rtpamrenc_get_property):
-       * gst/rtp/gstrtpamrenc.h:
-       Added payload_type and ssrc properties to the payloader.
-
-       * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_send), (gst_rtspsrc_open),
-       (gst_rtspsrc_close), (gst_rtspsrc_play):
-       Options need to be stripped and are in the Public header field.
-
-       * gst/rtsp/rtspurl.c: (rtsp_url_parse):
-       Fix url / parsing...
-
-
-2005-08-18  Wim Taymans  <wim@fluendo.com>
-
-       * gst/rtp/Makefile.am:
-       * gst/rtp/gstrtp.c: (plugin_init):
-       * gst/rtp/gstrtpamrdec.c: (gst_rtpamrdec_get_type),
-       (gst_rtpamrdec_base_init), (gst_rtpamrdec_class_init),
-       (gst_rtpamrdec_init), (gst_rtpamrdec_chain),
-       (gst_rtpamrdec_set_property), (gst_rtpamrdec_get_property),
-       (gst_rtpamrdec_change_state), (gst_rtpamrdec_plugin_init):
-       * gst/rtp/gstrtpamrdec.h:
-       * gst/rtp/gstrtpamrenc.c: (gst_rtpamrenc_get_type),
-       (gst_rtpamrenc_base_init), (gst_rtpamrenc_class_init),
-       (gst_rtpamrenc_init), (gst_rtpamrenc_chain),
-       (gst_rtpamrenc_set_property), (gst_rtpamrenc_get_property),
-       (gst_rtpamrenc_change_state), (gst_rtpamrenc_plugin_init):
-       * gst/rtp/gstrtpamrenc.h:
-       * gst/rtp/gstrtpmpaenc.c: (gst_rtpmpaenc_class_init),
-       (gst_rtpmpaenc_flush), (gst_rtpmpaenc_chain):
-       Added very simplistic amr payloader. depayloader does not
-       work yet.
-
-2005-08-18  Wim Taymans  <wim@fluendo.com>
-
-       * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_send), (gst_rtspsrc_open),
-       (gst_rtspsrc_close), (gst_rtspsrc_play), (gst_rtspsrc_pause),
-       (gst_rtspsrc_change_state):
-       * gst/rtsp/gstrtspsrc.h:
-       * gst/rtsp/rtspdefs.c: (rtsp_method_as_text), (rtsp_find_method):
-       * gst/rtsp/rtspdefs.h:
-       * gst/rtsp/rtsptransport.c: (rtsp_transport_parse):
-       Handle RTSP defaults better.
-       Issue OPTIONS request to figure out what we are allowed to do.
-       Make the methods a bitfield so we can easily collect supported 
-       options.
-       Fix rtsp_find_method.
-       Do proper RTSP connection shutdown.
-
-2005-08-18  Wim Taymans  <wim@fluendo.com>
-
-       * gst/rtp/Makefile.am:
-       * gst/rtp/gstrtp-common.h:
-       * gst/rtp/gstrtp.c: (plugin_init):
-       * gst/rtp/gstrtpL16enc.h:
-       * gst/rtp/gstrtpdec.c: (gst_rtpdec_get_type),
-       (gst_rtpdec_class_init), (gst_rtpdec_chain_rtp),
-       (gst_rtpdec_chain_rtcp), (gst_rtpdec_change_state),
-       (gst_rtpdec_plugin_init):
-       * gst/rtp/gstrtph263pdec.c: (gst_rtph263pdec_get_type),
-       (gst_rtph263pdec_base_init), (gst_rtph263pdec_class_init),
-       (gst_rtph263pdec_init), (gst_rtph263pdec_chain),
-       (gst_rtph263pdec_set_property), (gst_rtph263pdec_get_property),
-       (gst_rtph263pdec_change_state), (gst_rtph263pdec_plugin_init):
-       * gst/rtp/gstrtph263pdec.h:
-       * gst/rtp/gstrtph263penc.c: (gst_rtph263penc_get_type),
-       (gst_rtph263penc_base_init), (gst_rtph263penc_class_init),
-       (gst_rtph263penc_init), (gst_rtph263penc_flush),
-       (gst_rtph263penc_chain), (gst_rtph263penc_set_property),
-       (gst_rtph263penc_get_property), (gst_rtph263penc_change_state),
-       (gst_rtph263penc_plugin_init):
-       * gst/rtp/gstrtph263penc.h:
-       * gst/rtp/gstrtpmpadec.c: (gst_rtpmpadec_get_type),
-       (gst_rtpmpadec_base_init), (gst_rtpmpadec_class_init),
-       (gst_rtpmpadec_init), (gst_rtpmpadec_chain),
-       (gst_rtpmpadec_set_property), (gst_rtpmpadec_get_property),
-       (gst_rtpmpadec_change_state), (gst_rtpmpadec_plugin_init):
-       * gst/rtp/gstrtpmpadec.h:
-       * gst/rtp/gstrtpmpaenc.c: (gst_rtpmpaenc_get_type),
-       (gst_rtpmpaenc_base_init), (gst_rtpmpaenc_class_init),
-       (gst_rtpmpaenc_init), (gst_rtpmpaenc_flush), (gst_rtpmpaenc_chain),
-       (gst_rtpmpaenc_set_property), (gst_rtpmpaenc_get_property),
-       (gst_rtpmpaenc_change_state), (gst_rtpmpaenc_plugin_init):
-       * gst/rtp/gstrtpmpaenc.h:
-       * gst/rtp/rtp-packet.c:
-       * gst/rtp/rtp-packet.h:
-       Remove old code that is now in gst-libs/gst/rtp/.
-       Added some payload/depayloaders.
-
-       * gst/udp/gstudpsink.c: (gst_udpsink_class_init):
-       Fix port number range.
-
-2005-08-17  Wim Taymans  <wim@fluendo.com>
-
-       * configure.ac:
-       Added mpegaudioparse
-
-       * ext/lame/gstlame.c: (gst_lame_src_getcaps),
-       (gst_lame_src_setcaps), (gst_lame_sink_setcaps),
-       (gst_lame_sink_event), (gst_lame_chain):
-       Some cleanups.
-       Fix memleak.
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-       (gst_mp3parse_class_init), (gst_mp3parse_init),
-       (gst_mp3parse_chain), (gst_mp3parse_change_state):
-       * gst/mpegaudioparse/gstmpegaudioparse.h:
-       Ported mpegaudioparse
-
-2005-08-17  Wim Taymans  <wim@fluendo.com>
-
-       * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_open), (gst_rtspsrc_play):
-       Support absolute control urls too.
-
-2005-08-16  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_parse_stream),
-       (gst_avi_demux_stream_header):
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
-       (gst_qtdemux_add_stream), (qtdemux_parse_tree):
-         Uncomment metadata and codec-name handling.
-
-2005-08-16  Wim Taymans  <wim@fluendo.com>
-
-       * configure.ac:
-       * ext/amrnb/amrnbparse.c: (gst_amrnbparse_read_header):
-       Fix compile warning.
-
-       * ext/lame/gstlame.c: (gst_lame_class_init),
-       (gst_lame_src_getcaps), (gst_lame_src_setcaps),
-       (gst_lame_sink_setcaps), (gst_lame_init), (gst_lame_sink_event),
-       (gst_lame_chain), (gst_lame_change_state):
-       * ext/lame/gstlame.h:
-       Port lame plugin
-
-2005-08-16  Andy Wingo  <wingo@pobox.com>
-
-       * ext/dv/gstdvdemux.c (gst_dvdemux_flush): Use gst_adapter_take so
-       we have our own copy of the data.
-       (gst_dvdemux_demux_video): Set the take() data as malloc_data so
-       it will get freed later.
-
-       * ext/raw1394/gstdv1394src.c (gst_dv1394src_iso_receive): Note
-       license info in the source code -- was only in the commit log
-       before.
-
-       * ext/dv/gstdvdec.h:
-       * ext/dv/gstdvdec.c: Only decodes systemstream=FALSE dv video --
-       old pipelines using dvdec should probably have a dvdemux first.
-
-       * ext/dv/gstdvdemux.h:
-       * ext/dv/gstdvdemux.c: Split out from dvdec, chunks the incoming
-       systemstream=TRUE data into frames, sets caps data, and spits out
-       PCM audio in addition to systemstream=FALSE video frames. Operates
-       in chain mode only for now; should make a getrange version as
-       well.
-
-       * ext/dv/gstdv.c: New file, registers the libgstdv plugin.
-
-       * ext/dv/Makefile.am: Library name changed to libgstdv. Split
-       dvdec into dvdemux and dvdec.
-
-2005-08-16  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/faad/gstfaad.c: (gst_faad_event), (gst_faad_chain):
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header):
-         Handle _push() return values.
-
-2005-08-15  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/faad/gstfaad.c: (gst_faad_event):
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header):
-         Fix debug.
-
-2005-08-15  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/qtdemux/qtdemux.c: (qtdemux_parse_trak),
-       (qtdemux_video_caps):
-         Forwardport from 0.8 to implement RLE.
-
-2005-08-15  Wim Taymans  <wim@fluendo.com>
-
-       * gst/rtsp/README:
-       Added rtsp server implementation docs.
-
-2005-08-14  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/aalib/gstaasink.c:
-         aalib is LGPL, so this plugin can be LGPL
-       * ext/arts/gst_arts.c: (plugin_init):
-         rename, we don't like underscores
-       * ext/audiofile/gstaf.c:
-       * ext/sndfile/gstsf.c:
-         rename, we like a descriptive plugin name
-       * ext/gconf/gstgconfelements.c:
-         change description a little
-       * ext/musicbrainz/gsttrm.c:
-         musicbrainz is LGPL, so plugin can be LGPL
-       * ext/raw1394/gst1394.c:
-         rename, we like all-digit names
-       * gst/equalizer/gstiirequalizer.c:
-       * gst/fdsrc/gstfdsrc.c:
-       * gst/multifilesink/gstmultifilesink.c:
-         rename
-       * gst/virtualdub/gstvirtualdub.c:
-         use GST_PLUGIN_DEFINE
-       * sys/dxr3/dxr3init.c:
-         only uses system headers, and code is LGPL, so plugin is LGPL
-
-2005-08-13  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * ext/mad/Makefile.am:
-       * gst/avi/Makefile.am:
-       * gst/effectv/Makefile.am:
-       * gst/udp/Makefile.am:
-       * gst/wavparse/Makefile.am:
-         Use -lgstfoo-@GST_MAJORMINOR@ instead of -lgstfoo-0.9
-
-2005-08-12  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_decode_indirect),
-       (gst_jpeg_dec_decode_direct), (gst_jpeg_dec_chain):
-         Fix decoding of pictures with certain uneven or unaligned
-         widths where jpeglib needs more horizontal padding than our
-         I420 buffers provide, resulting in blocky artifacts at the
-         left side of the picture (#164176). 
-         Also make use of our shiny new GST_ROUND_N() macros.
-
-2005-08-11  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_init), (gst_jpeg_dec_chain),
-       (gst_jpeg_dec_change_state):
-       * ext/jpeg/gstjpegdec.h:
-         Fix crashes/invalid memory access for pictures that have a height
-         that is not a multiple of 16 (or rather: v_samp_factor * DCTSIZE).
-         
-         Also fix the state change function for downwards state changes
-         (need to chain up to parent before destroying our resources, to 
-         make sure pads get deactivated and our chain function isn't
-         running and using those very same resources in another thread).
-
-         The jpeg line buffer only needs to be v_samp_factor*DCTSIZE lines
-         per plane, not picture_height lines; allocate that on the stack.
-
-2005-08-10  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * gst/wavparse/gstwavparse.c: (gst_wavparse_stream_headers),
-       (gst_wavparse_stream_data):
-         Add some fixes from 0.8 branch: allow 24/32bps songs and
-         blockalign samples to the header-specified size, if any
-         (#311070); error out on channels==0 or bitrate==0 
-         (#309043, #304588).
-
-2005-08-10  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/level/gstlevel.c: (gst_level_init), (gst_level_set_caps),
-       (gst_level_transform):
-       * gst/level/gstlevel.h:
-         remove unused MS struct member
-         don't reset the CS values for channels on every _chain, so that
-         level actually correctly calculates the RMS value.  sigh.
-         calculate RMS values correctly for peak and decay peak sums;
-         before we were signalling them as if they already were amplitude
-         and not power values.  sigh.
-       Remind me to not try and pretend I'm writing DSP code.
-
-2005-08-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/faad/gstfaad.c: (gst_faad_class_init), (gst_faad_setcaps):
-         Add debug category, remove Close() call that made it crash
-         whenever reusing, renegotiating or anything; Close() actually
-         free()s the handle and should only be called on READY->NULL.
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header):
-         Actually set caps on buffer (in addition to pad), also.
-
-2005-08-10  Owen Fraser-Green  <owen@discobabe.net>
-
-       * gst/realmedia/rmdemux.c (gst_rmdemux_sink_activate) 
-       (gst_rmdemux_sink_activate_push, gst_rmdemux_sink_activate_pull) 
-       (gst_rmdemux_loop, gst_rmdemux_src_event) 
-       (gst_rmdemux_perform_seek, gst_rmdemux_src_query): Implemented
-       push-pull and seeking.
-
-2005-08-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/faad/gstfaad.c: (gst_faad_event):
-         Sign/unsign mismatch.
-       * configure.ac:
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_class_init),
-       (gst_qtdemux_init), (gst_qtdemux_get_src_query_types),
-       (gst_qtdemux_handle_src_query), (gst_qtdemux_handle_src_event),
-       (plugin_init), (gst_qtdemux_handle_sink_event),
-       (gst_qtdemux_change_state), (gst_qtdemux_loop_header),
-       (qtdemux_sink_activate), (qtdemux_sink_activate_pull),
-       (gst_qtdemux_add_stream), (qtdemux_parse), (qtdemux_parse_tree),
-       (qtdemux_parse_trak), (qtdemux_video_caps), (qtdemux_audio_caps):
-       * gst/qtdemux/qtdemux.h:
-         Half-assed port (hey, it works).
-
-2005-08-09  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_header):
-         Fix AVI header parsing: add missing break statement after
-         GST_RIFF_INFO_LIST parsing code; gst_riff_read_chunk() has
-         already advanced the avi->offset, no need to do it twice
-         (fixes MovieOfMovies.avi).
-
-2005-08-09  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_init),
-       (gst_jpeg_dec_setcaps), (gst_jpeg_dec_chain),
-       (gst_jpeg_dec_change_state):
-       * ext/jpeg/gstjpegdec.h:
-         Make mjpeg actually work and skip jpeg data parsing if we
-         know that the input is packetized (ie. each input buffer
-         is exactly one jpeg frame).
-
-2005-08-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/mad/gstmad.c: (gst_mad_init), (gst_mad_chain):
-         It'd be nice if I could listen to my mp3 files, so send out an
-         initial discont, as the sink apparently wants.
-
-2005-08-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_event),
-       (gst_avi_demux_handle_seek):
-         Fix seeking (or, well, fix threading issue where a variable was
-         set before a lock was taken and was already unset before that
-         same lock was taken and was thus no longer in existance when it
-         actually had to be used).
-
-2005-08-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_process_next_entry):
-         Mixing binary and logical operators is not going to work; fix
-         position-querying in Totem.
-
-2005-08-08  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * ext/faad/gstfaad.c: (gst_faad_base_init), (gst_faad_class_init),
-       (gst_faad_init), (gst_faad_setcaps), (gst_faad_srcgetcaps),
-       (gst_faad_event), (gst_faad_update_caps), (gst_faad_chain),
-       (gst_faad_change_state):
-       * ext/faad/gstfaad.h:
-         Fix negotiation (#310932) and miscellaneous other stuff. Probably
-         still needs some more work.
-
-2005-08-08  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_init),
-       (gst_jpeg_dec_setcaps), (gst_jpeg_dec_chain):
-         Add setcaps() function (for mjpeg).
-
-2005-08-08  Andy Wingo  <wingo@pobox.com>
-
-       * ext/esd/esdsink.c (gst_esdsink_getcaps): Seems that wierd
-       va_list caps setting function was borked. Fixed esdsink.
-
-       * sys/oss/gstosssink.c (gst_oss_sink_open, gst_oss_sink_close) 
-       (gst_oss_sink_prepare, gst_oss_sink_unprepare): Update for newer
-       audiosink api.
-
-       * ext/raw1394/gstdv1394src.c (gst_dv1394src_get_property) 
-       (gst_dv1394src_set_property): Style. All about the style.
-
-       * ext/esd/esdsink.c (gst_esdsink_getcaps): Return specific caps
-       only if in READY or higher (i.e., if _open() has been called.)
-       (gst_esdsink_open, gst_esdsink_close, gst_esdsink_prepare) 
-       (gst_esdsink_unprepare): Update for audiosink changes.
-       (gst_esdsink_change_state): Die!
-
-2005-08-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/jpeg/Makefile.am:
-         Fix compile.
-
-2005-08-08  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * configure.ac:
-       * ext/Makefile.am:
-       * ext/jpeg/Makefile.am:
-       * ext/jpeg/gstjpeg.c: (plugin_init):
-       * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_get_type),
-       (gst_jpeg_dec_finalize), (gst_jpeg_dec_base_init),
-       (gst_jpeg_dec_class_init), (gst_jpeg_dec_fill_input_buffer),
-       (gst_jpeg_dec_init_source), (gst_jpeg_dec_skip_input_data),
-       (gst_jpeg_dec_resync_to_restart), (gst_jpeg_dec_term_source),
-       (gst_jpeg_dec_my_output_message), (gst_jpeg_dec_my_emit_message),
-       (gst_jpeg_dec_my_error_exit), (gst_jpeg_dec_init),
-       (is_jpeg_start_marker), (is_jpeg_end_marker),
-       (gst_jpeg_dec_find_jpeg_header), (gst_jpeg_dec_ensure_header),
-       (gst_jpeg_dec_have_end_marker),
-       (gst_jpeg_dec_parse_tag_has_entropy_segment),
-       (gst_jpeg_dec_parse_image_data), (gst_jpeg_dec_chain),
-       (gst_jpeg_dec_change_state):
-       * ext/jpeg/gstjpegdec.h:
-         Port jpegdec to 0.9; handles 'progressive loading' now, ie. input does
-         no longer need to be one single buffer.
-
-2005-08-04  Andy Wingo  <wingo@pobox.com>
-
-       * sys/oss/gstossaudio.c (plugin_init): Second-class citizen.
-
-       * gst/videobox/gstvideobox.c (gst_video_box_get_size): Update for
-       API changes.
-
-       * configure.ac (DEFAULT_AUDIOSINK, DEFAULT_VIDEOSINK): Set to
-       autoaudiosink and autovideosink.
-
-2005-08-04  Edward Hervey  <edward@fluendo.com>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_reset),
-       (gst_avi_demux_parse_stream), (gst_avi_demux_process_next_entry):
-       You need to allocatate (len+1) characters to store a len size string.
-       Also don't stop the processing task if the output pad is not linked.
-
-2005-08-03  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/gconf/gstgconfaudiosink.c: (gst_gconf_audio_sink_reset),
-       (gst_gconf_audio_sink_init), (do_toggle_element),
-       (cb_toggle_element), (gst_gconf_audio_sink_change_state):
-       * ext/gconf/gstgconfaudiosink.h:
-       * ext/gconf/gstgconfvideosink.c: (gst_gconf_video_sink_reset),
-       (gst_gconf_video_sink_init), (do_toggle_element),
-       (cb_toggle_element), (gst_gconf_video_sink_change_state):
-       * ext/gconf/gstgconfvideosink.h:
-       * gst/autodetect/gstautoaudiosink.c: (gst_auto_audio_sink_reset),
-       (gst_auto_audio_sink_init), (gst_auto_audio_sink_detect),
-       (gst_auto_audio_sink_change_state):
-       * gst/autodetect/gstautoaudiosink.h:
-       * gst/autodetect/gstautovideosink.c: (gst_auto_video_sink_reset),
-       (gst_auto_video_sink_init), (gst_auto_video_sink_detect),
-       (gst_auto_video_sink_change_state):
-       * gst/autodetect/gstautovideosink.h:
-         Use new ghostpad API; now they actually work in Totem, also.
-
-2005-08-03  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/libpng/Makefile.am:
-         Fix uninstalled build.
-
-2005-08-02  Edward Hervey  <edward@fluendo.com>
-
-       * configure.ac:
-       * ext/Makefile.am:
-       * ext/libpng/Makefile.am:
-       * ext/libpng/gstpng.c:
-       * ext/libpng/gstpngenc.c:
-       Ported pngenc , still have to port pngdec...
-
-2005-08-01  Stefan Kost  <ensonic@users.sf.net>
-
-       reviewed by: <delete if not using a buddy>
-
-       * configure.ac:
-       * ext/ladspa/Makefile.am:
-       * ext/ladspa/gstladspa.c: (gst_ladspa_init), (gst_ladspa_loop),
-       (gst_ladspa_chain), (gst_ladspa_get), (plugin_init):
-       * ext/ladspa/gstladspa.h:
-          deactivate and remove dparams (libgstcontrol)
-
-2005-07-27  Wim Taymans  <wim@fluendo.com>
-
-       * ext/faad/gstfaad.c: (gst_faad_event):
-       Compile fixes.
-
-2005-07-27  Wim Taymans  <wim@fluendo.com>
-
-       * ext/amrnb/amrnbparse.c: (gst_amrnbparse_event),
-       (gst_amrnbparse_loop):
-       * ext/dv/gstdvdec.c: (gst_dvdec_handle_sink_event),
-       (gst_dvdec_handle_src_event), (gst_dvdec_decode_frame):
-       * ext/mad/gstid3tag.c: (gst_id3_tag_src_event),
-       (gst_id3_tag_sink_event), (gst_id3_tag_chain):
-       * ext/mad/gstmad.c: (gst_mad_src_query), (index_seek),
-       (normal_seek), (gst_mad_sink_event), (gst_mad_chain):
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/shout2/gstshout2.c: (gst_shout2send_event):
-       * ext/sidplay/gstsiddec.cc:
-       * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_event),
-       (gst_avi_demux_send_event), (gst_avi_demux_stream_header),
-       (gst_avi_demux_handle_seek), (gst_avi_demux_process_next_entry):
-       * gst/goom/gstgoom.c: (gst_goom_event):
-       * gst/realmedia/rmdemux.c: (gst_rmdemux_sink_event),
-       (gst_rmdemux_chain), (gst_rmdemux_send_event),
-       (gst_rmdemux_add_stream):
-       * gst/wavparse/gstwavparse.c: (gst_wavparse_handle_seek),
-       (gst_wavparse_stream_headers), (gst_wavparse_stream_data),
-       (gst_wavparse_loop), (gst_wavparse_srcpad_event):
-       Various event updates and cleanups.
-
-2005-07-25  Christian Schaller  <uraeus@gnome.org>
-
-
-       * gst-plugins.spec.in: add silence and videoflip
-       * gst/videofilter/Makefile.am: add missing header to noinst
-
-2005-07-25  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/videofilter/Makefile.am:
-       * gst/videofilter/gstgamma.c: (gst_gamma_setup):
-       * gst/videofilter/gstvideobalance.c: (gst_videobalance_setup):
-       * gst/videofilter/gstvideofilter.c: (gst_videofilter_class_init),
-       (gst_videofilter_getcaps), (gst_videofilter_setcaps),
-       (gst_videofilter_init), (gst_videofilter_chain),
-       (gst_videofilter_set_property), (gst_videofilter_get_property),
-       (gst_videofilter_setup), (gst_videofilter_class_add_pad_templates):
-       * gst/videofilter/gstvideofilter.h:
-       * gst/videofilter/gstvideoflip.c: (gst_videoflip_init),
-       (gst_videoflip_set_property), (gst_videoflip_get_property),
-       (plugin_init), (gst_videoflip_setup), (gst_videoflip_planar411):
-         forward port from 0.9 and enable videoflip now that it works
-
-2005-07-23  Edward Hervey  <edward@fluendo.com>
-
-       * configure.ac:
-       * gst/silence/Makefile.am:
-       * gst/silence/gstsilence.h:
-       * gst/silence/gstsilence.c:
-       Ported silence to 0.9 using GstBaseSrc ... 180 lines :)
-
-2005-07-22  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/mad/gstmad.c: (gst_mad_src_event):
-         First try forwarding events, makes seeking in AVI files with mp3
-         audio work again.
-
-2005-07-20  Andy Wingo  <wingo@pobox.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c (gst_mpeg2dec_sink_event): Signedness
-       fix.
-
-2005-07-20  Edward Hervey  <edward@fluendo.com>
-
-       * configure.ac: 
-       * gst/wavparse/gstwavparse.c: 
-       * gst/wavparse/gstwavparse.h:
-       * gst/wavparse/Makefile.am:
-       Ported wavparse to 0.9 . Playing, seeking and state changes work.
-       Could need more loving on the headers though.
-
-2005-07-20  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * configure.ac:
-       * ext/Makefile.am:
-       * ext/gconf/Makefile.am:
-       * ext/gconf/gconf.c: (gst_bin_find_unconnected_pad),
-       (gst_gconf_render_bin_from_description),
-       (gst_gconf_get_default_video_sink):
-       * ext/gconf/gstgconfaudiosink.c: (gst_gconf_audio_sink_base_init),
-       (gst_gconf_audio_sink_class_init), (gst_gconf_audio_sink_dispose),
-       (cb_toggle_element), (gst_gconf_audio_sink_change_state):
-       * ext/gconf/gstgconfelements.h:
-       * ext/gconf/gstgconfvideosink.c: (gst_gconf_video_sink_base_init),
-       (gst_gconf_video_sink_class_init), (gst_gconf_video_sink_dispose),
-       (cb_toggle_element), (gst_gconf_video_sink_change_state):
-       * gst/autodetect/gstautoaudiosink.c:
-       (gst_auto_audio_sink_base_init), (gst_auto_audio_sink_class_init),
-       (gst_auto_audio_sink_detect), (gst_auto_audio_sink_change_state):
-       * gst/autodetect/gstautovideosink.c:
-       (gst_auto_video_sink_base_init), (gst_auto_video_sink_class_init),
-       (gst_auto_video_sink_find_best), (gst_auto_video_sink_detect):
-         Port auto/gconfsinks to 0.9. They actually appear to work here in
-         Totem as well, making them actually useful.
-
-2005-07-20  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/faad/Makefile.am:
-         Fix uninstalled build.
-
-2005-07-19  Wim Taymans  <wim@fluendo.com>
-
-       * sys/oss/gstosssink.c: (gst_oss_sink_get_format),
-       (gst_oss_sink_open):
-       Parse spec to set correct oss values.
-
-2005-07-19  Edgard N. A. G. Lima <edgard.lima@indt.org.br>
-
-        * configure.ac
-       * ext/Makefile.am
-       * ext/amrnb/amrnbdec.c
-       * ext/amrnb/amrnbenc.c
-       * ext/amrnb/amrnbparse.c
-       * ext/faad/gstfaad.c
-       * ext/mpeg2dec/gstmpeg2dec.c
-       Ported amrnb, faad, mpeg2dec to 0.9
-
-2005-07-19  Andy Wingo  <wingo@pobox.com>
-
-       * ext/dv/gstdvdec.c (gst_dvdec_decode_video): Set the proper
-       framerate on the outbound buffer.
-
-       * ext/dv/gstdvdec.c (gst_dvdec_decode_video): Don't clobber
-       alloc_buffer's return value.
-       (gst_dvdec_decode_frame): Handle unlinked pads with grace and
-       agility.
-
-       * ext/dv/gstdvdec.h: Fix signedness error.
-
-2005-07-19  Wim Taymans  <wim@fluendo.com>
-
-       * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_src_convert),
-       (gst_dvdec_sink_convert), (gst_dvdec_get_src_query_types),
-       (gst_dvdec_src_query), (gst_dvdec_get_sink_query_types),
-       (gst_dvdec_sink_query), (gst_dvdec_send_event),
-       (gst_dvdec_handle_sink_event), (gst_dvdec_handle_src_event),
-       (gst_dvdec_decode_audio), (gst_dvdec_decode_video),
-       (gst_dvdec_decode_frame), (gst_dvdec_flush), (gst_dvdec_chain):
-       * ext/dv/gstdvdec.h:
-       Implemented seeking in dvdec.
-
-2005-07-19  Andy Wingo  <wingo@pobox.com>
-
-       * ext/Makefile.am: Enable dvdev and raw1394src.
-
-2005-07-18  Andy Wingo  <wingo@pobox.com>
-
-       * configure.ac: Use AS_LIBTOOL_TAGS. Fix crap gettext commit
-       comment.
-
-2005-07-18  Wim Taymans  <wim@fluendo.com>
-
-       * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_add_element),
-       (gst_rtspsrc_play):
-       Fix for core changes.
-
-2005-07-18  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_sink_event):
-         When returning to NORMAL state after reading tags,
-         pass on the discont event.
-
-2005-07-18  Wim Taymans  <wim@fluendo.com>
-
-       * gst/realmedia/rmdemux.c: (gst_rmdemux_sink_event),
-       (gst_rmdemux_change_state), (gst_rmdemux_chain),
-       (gst_rmdemux_get_stream_by_id), (gst_rmdemux_send_event),
-       (gst_rmdemux_add_stream):
-       Send discont event before pushing first buffer.
-
-2005-07-17  Philippe Khalaf <burger@speedy.org>
-
-       * gst/fdsrc/gstfdsrc.c:
-       Removed #include <gst_private.h>
-
-2005-07-16  Philippe Khalaf <burger@speedy.org>
-
-       * gst/fdsrc/gstfdsrc.c:
-       * gst/fdsrc/gstfdsrc.h:
-       * gst/fdsrc/Makefile.am:
-       Moved fdsrc 0.9 port from gstreamer/gst/elements to here.
-
-2005-07-16  Wim Taymans  <wim@fluendo.com>
-
-       * ext/mad/gstmad.c: (gst_mad_src_query), (gst_mad_sink_event),
-       (gst_mad_chain):
-       Add convert function for proper timestamp calculations.
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_send_event),
-       (gst_avi_demux_stream_header), (gst_avi_demux_handle_seek),
-       (gst_avi_demux_process_next_entry), (gst_avi_demux_loop):
-       Send out initial discont.
-
-2005-07-15  Wim Taymans  <wim@fluendo.com>
-
-       * gst/level/gstlevel.c: (gst_level_transform):
-       * gst/videobox/gstvideobox.c: (gst_video_box_class_init),
-       (gst_video_box_get_size), (gst_video_box_transform):
-       Port to new base class.
-
-2005-07-14  Wim Taymans  <wim@fluendo.com>
-
-       * ext/raw1394/gstdv1394src.c: (gst_dv1394src_get_type),
-       (gst_dv1394src_class_init), (gst_dv1394src_init),
-       (gst_dv1394src_iso_receive), (gst_dv1394src_create),
-       (gst_dv1394src_change_state), (gst_dv1394src_query):
-       It's PUSH_SRC now.
-
-2005-07-14  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/udp/gstudpsrc.c: (gst_udpsrc_get_type),
-       (gst_udpsrc_class_init):
-         more autistic cleanliness in functions/names/defines
-
-
-2005-07-10  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/aalib/gstaasink.c: (gst_aasink_get_type),
-       (gst_aasink_class_init), (gst_aasink_init):
-       * ext/esd/esdsink.c: (gst_esdsink_get_type),
-       (gst_esdsink_class_init):
-       * ext/libcaca/gstcacasink.c: (gst_cacasink_get_type),
-       (gst_cacasink_class_init), (gst_cacasink_init):
-       * ext/shout2/gstshout2.c: (gst_shout2send_get_type),
-       (gst_shout2send_class_init), (gst_shout2send_init):
-       * gst/udp/gstdynudpsink.c: (gst_dynudpsink_get_type),
-       (gst_dynudpsink_class_init):
-       * gst/udp/gstmultiudpsink.c: (gst_multiudpsink_get_type),
-       (gst_multiudpsink_class_init):
-         more macro splitting
-
-2005-07-08  Andy Wingo  <wingo@pobox.com>
-
-       * sys/oss/: Port from THREADED+wim's fixes.
-
-       * gst/avi/Makefile.am (libgstavi_la_CFLAGS): No gettext hacks, the
-       defines come from config.h.
-
-       * autogen.sh: Run autopoint, etc.
-
-       * Makefile.am (DIST_SUBDIRS, SUBDIRS): Go into po/.
-
-       * configure.ac: Add gettext stuff.
-
-2005-07-07  Wim Taymans  <wim@fluendo.com>
-
-       * gst/videobox/gstvideobox.c: (gst_video_box_init),
-       (gst_video_box_transform_caps), (gst_video_box_set_caps):
-       Logic was reversed. Needs some  more fixes in the transform
-       function to include AYUV output.
-       Moved AYUV as prefered format.
-
-2005-07-07  Wim Taymans  <wim@fluendo.com>
-
-       * configure.ac:
-       * ext/dv/Makefile.am:
-       * ext/dv/gstdvdec.c: (gst_dvdec_class_init), (gst_dvdec_init),
-       (gst_dvdec_get_src_query_types), (gst_dvdec_src_query),
-       (gst_dvdec_handle_sink_event), (gst_dvdec_handle_src_event),
-       (gst_dvdec_video_getcaps), (gst_dvdec_video_setcaps),
-       (gst_dvdec_decode_audio), (gst_dvdec_decode_video),
-       (gst_dvdec_decode_frame), (gst_dvdec_chain),
-       (gst_dvdec_change_state), (gst_dvdec_set_property),
-       (gst_dvdec_get_property), (plugin_init):
-       * ext/dv/gstdvdec.h:
-       * ext/esd/esdsink.c: (gst_esdsink_class_init):
-       Ported DVdec to 0.9.
-       Parent of esdsink is GstAudioSink.
-
-2005-07-07  Wim Taymans  <wim@fluendo.com>
-
-       * configure.ac:
-       * ext/raw1394/Makefile.am:
-       * ext/raw1394/gstdv1394src.c: (gst_dv1394src_get_type),
-       (gst_dv1394src_class_init), (gst_dv1394src_init),
-       (gst_dv1394src_iso_receive), (gst_dv1394src_create),
-       (gst_dv1394src_change_state), (gst_dv1394src_convert),
-       (gst_dv1394src_get_query_types), (gst_dv1394src_query):
-       * ext/raw1394/gstdv1394src.h:
-       Ported the 1394 source to 0.9.
-
-2005-07-07  Wim Taymans  <wim@fluendo.com>
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_get_query_types):
-       * ext/mad/gstmad.c: (gst_mad_get_query_types), (gst_mad_src_query):
-       * gst/avi/gstavidemux.c: (gst_avi_demux_get_src_query_types):
-       Remove deprecated/unsed code.
-
-2005-07-06  Edward Hervey  <edward@fluendo.com>
-
-       * gst/udp/gstudpsrc.c: (gst_udpsrc_init): 
-       GST_BASESRC --> GST_BASE_SRC
-
-2005-07-05  Andy Wingo  <wingo@pobox.com>
-
-       * gst/oneton: Removed (replaced by deinterleave).
-
-       * gst/adder:
-       * gst/audioconvert:
-       * gst/audiorate:
-       * gst/audioscale:
-       * gst/ffmpegcolorspace:
-       * gst/playback:
-       * gst/sine:
-       * gst/subparse:
-       * gst/tags:
-       * gst/tcp:
-       * gst/videoscale:
-       * gst/volume: Removed dirs that are now in gst-plugins-base.
-
-2005-07-05  Edward Hervey  <edward@fluendo.com>
-
-       * configure.ac: (GST_PLUGINS_ALL): 
-       videofilter must be compiled first, since other plugins depend ont it.
-
-2005-07-05  Andy Wingo  <wingo@pobox.com>
-
-       * Way, way, way too many files:
-       Remove crack comment from the 2000 era.
-
-2005-07-05  Andy Wingo  <wingo@pobox.com>
-
-       * gst/videobox/gstvideobox.c: Clean up, port to 0.9, use
-       BaseTransform.
-
-       * gst/videobox/Makefile.am: Link to base libs, include
-       plugins-base cflags, dist the README.
-
-       * configure.ac (GST_PLUGIN_ALL, AC_CONFIG_FILES): Add videobox to
-       the build.
-
-2005-07-04  Wim Taymans  <wim@fluendo.com>
-
-       * gst/realmedia/rmdemux.c:
-       I don't think that piece of changelog should go there.
-
-2005-07-04  Andy Wingo  <wingo@pobox.com>
-
-       * examples/level/:
-       * examples/level/Makefile.am:
-       * examples/level/README:
-       * examples/level/demo.c:
-       * examples/level/plot.c: Examples moved out of the source dir. Not
-       updated tho.
-
-       * configure.ac: Add level to the build.
-
-       * gst/level/Makefile.am:
-       * gst/level/gstlevel.h:
-       * gst/level/gstlevel.c: Cleaned up, ported to 0.9.
-
-       * ext/aalib/gstaasink.c (gst_aasink_fixate): Update for newer
-       fixate prototype.
-
-2005-07-03  Owen Fraser-Green  <owen@discobabe.net>
-
-       * gst/realmedia/rmdemux.c (gst_rmdemux_add_stream),
-       (gst_rmdemux_src_getcaps), (gst_rmdemux_chain): 
-       Added getcaps function no_more_pads call
-
-2005-07-01  Philippe Khalaf <burger@speedy.org>
-       * gst/udp/Makefile.am:
-       * gst/udp/gstudp.c:
-       * gst/udp/gstdynudpsink.c: (new)
-       * gst/udp/gstdynudpsink.h: (new)
-         Added new element (udpdynsink) that receives GstNetBuffers and sends the
-         udp packets to the source given in the buffer. It's used by rtpsession
-         element for now.
-       * gst/udp/gstudpsrc.c:
-         Fixed memory leak.
-
-2005-07-01  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * configure.ac:
-       * ext/mad/Makefile.am:
-       * sys/oss/Makefile.am:
-       Roll gstreamer-interfaces-0.9.pc into gstreamer-plugins-base-0.9.pc
-
-2005-07-01  Jan Schmidt  <thaytan@mad.scientist.com>
-       * ext/libcaca/Makefile.am:
-       * ext/mad/Makefile.am:
-       * gst/effectv/Makefile.am:
-       * gst/udp/Makefile.am:
-         Replace GST_PLUGINS_LIBS_* with GST_PLUGINS_BASE_*
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_src_query),
-       (gst_id3_tag_src_event), (gst_id3_tag_sink_event),
-       (gst_id3_tag_chain), (plugin_init):
-       * ext/mad/gstmad.c: (gst_mad_src_query), (gst_mad_chain):
-         Signedness warning fix, use gst_pad_get_peer instead of GST_PAD_PEER
-         in querying and event handling, because we're not holding the pad
-         lock and the peer may disappear.
-       * gst/avi/gstavidemux.c: (gst_avi_demux_parse_subindex),
-       (gst_avi_demux_parse_index), (gst_avi_demux_massage_index):
-         Signedness warning fixes.
-
-       * gst/videofilter/gstvideotemplate.c: (plugin_init):
-         Remove gst_library_load
-
-2005-06-30  Edward Hervey  <edward@fluendo.com>
-
-       * gst/avi/Makefile.am: (libgstavi_la_LIBADD):
-       Added linking to libgstriff-0.9
-       
-       * ext/mad/gstmad.c: (gst_mad_src_query): 
-       check the format of the upstream query and return query if it's the
-       same format as the requested one.
-
-2005-06-30  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query):
-         Compiler pains.
-
-2005-06-30  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * configure.ac:
-       * gst/avi/Makefile.am:
-       * gst/avi/gstavi.c: (plugin_init):
-       * gst/avi/gstavidemux.c: (gst_avi_demux_get_type),
-       (gst_avi_demux_class_init), (gst_avi_demux_init),
-       (gst_avi_demux_reset), (gst_avi_demux_index_next),
-       (gst_avi_demux_index_entry_for_time),
-       (gst_avi_demux_index_entry_for_byte),
-       (gst_avi_demux_index_entry_for_frame), (gst_avi_demux_src_convert),
-       (gst_avi_demux_handle_src_query), (gst_avi_demux_handle_src_event),
-       (gst_avi_demux_parse_file_header), (gst_avi_demux_stream_init),
-       (gst_avi_demux_parse_avih), (gst_avi_demux_parse_superindex),
-       (gst_avi_demux_parse_subindex), (gst_avi_demux_read_subindexes),
-       (gst_avi_demux_parse_stream), (gst_avi_demux_parse_odml),
-       (gst_avi_demux_parse_index), (gst_avi_demux_stream_index),
-       (gst_avi_demux_stream_scan), (gst_avi_demux_massage_index),
-       (gst_avi_demux_stream_header), (gst_avi_demux_handle_seek),
-       (gst_avi_demux_process_next_entry), (gst_avi_demux_stream_data),
-       (gst_avi_demux_loop), (gst_avi_demux_sink_activate),
-       (gst_avi_demux_sink_activate_pull):
-       * gst/avi/gstavidemux.h:
-         Port from -THREADED to HEAD, and fix for latest API changes of
-         the day. Keep avimux dead for now.
-
-2005-06-29  Wim Taymans  <wim@fluendo.com>
-
-       * ext/shout2/gstshout2.c: (gst_shout2send_render):
-       Fix build.
-
-2005-06-29  Andy Wingo  <wingo@pobox.com>
-
-       * gst/videofilter/gstvideoexample.c: Removed gst_library_load, I
-       think. Whatever this plugin actually does, that I don't know.
-
-2005-06-29  Andy Wingo  <wingo@pobox.com>
-
-       * ext/mad/gstid3tag.c (gst_id3_tag_get_event_masks): Reschmoove.
-
-       * ext/mad/gstmad.c (gst_mad_get_event_masks): Remove.
-       (gst_mad_chain): Appease GCC.
-
-       * ext/libcaca/gstcacasink.c (gst_cacasink_setcaps): Signedness.
-
-       * ext/aalib/gstaasink.c (gst_aasink_fixate): Unref caps, not free.
-       (gst_aasink_scale): Signedness.
-
-       * gst/udp/gstudpsink.c (gst_udpsink_get_type): Actually add the
-       URI handler.
-
-       * gst/udp/gstudpsrc.c (gst_udpsrc_start):
-       (gst_udpsrc_create): Signedness.
-
-       * gst/rtsp/sdpmessage.c (sdp_message_parse_buffer): Thanks
-       compiler!
-       (sdp_parse_line): Signedness fix.
-
-       * configure.ac (GST_CFLAGS): GCC strikes back!!! Let the build
-       breakage ensue!!!
-
-       * gst/rtsp/gstrtspsrc.c (gst_rtspsrc_loop, gst_rtspsrc_open):
-       Signedness, unused var fixes.
-       (gst_rtspsrc_close): Unused?
-
-       * gst/realmedia/rmdemux.c (re_hexdump_bytes): Unused.
-
-       * gst/law/mulaw-encode.c (gst_mulawenc_chain): Signeness fix.
-
-       * gst/law/alaw-encode.c (alawenc_getcaps): Remove unneeded
-       declarations. Typo (probably crasher) fix.
-       
-       * gst/law/mulaw-encode.c (mulawdec_getcaps): 
-       * gst/law/mulaw-encode.c (mulawenc_getcaps): 
-       * gst/law/alaw-decode.c (alawdec_getcaps): Same crasher fix.
-
-       * gst/goom/gstgoom.c (gst_goom_init): Hook up the event function.
-
-       * gst/effectv/gstwarp.c (gst_warptv_setup): Signedness fix.
-
-       * gst/effectv/gstdice.c (gst_dicetv_draw): Um, deferencing
-       uninitialized pointer not good.
-
-       * gst/videofilter/gstvideoexample.c (plugin_init): 
-       * gst/videofilter/Makefile.am (libgstvideoexample_la_LIBADD): Link
-       to libgstvideofilter instead of gst_library_load.
-
-       * gst/alpha/gstalpha.c (gst_alpha_chroma_key_i420) 
-       (gst_alpha_chroma_key_ayuv): Signedness fixen.
-
-2005-06-29  Wim Taymans  <wim@fluendo.com>
-
-       * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
-       (gst_rtspsrc_class_init), (gst_rtspsrc_create_stream),
-       (gst_rtspsrc_add_element), (gst_rtspsrc_set_state),
-       (gst_rtspsrc_stream_setup_rtp),
-       (gst_rtspsrc_stream_configure_transport), (find_stream),
-       (gst_rtspsrc_loop), (gst_rtspsrc_open), (gst_rtspsrc_play),
-       (gst_rtspsrc_change_state):
-       Fix case where outpad could not be decided.
-
-2005-06-29  Andy Wingo  <wingo@pobox.com>
-
-       * ext/Makefile.am (MAD_DIR): Add mad to the build.
-
-2005-06-28  Wim Taymans  <wim@fluendo.com>
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_src_link):
-       * gst/udp/gstudpsrc.c: (gst_udpsrc_init):
-       Fix old RPAD macro.
-       basesrc -> base_src
-
-2005-06-27  Wim Taymans  <wim@fluendo.com>
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_src_link):
-       * ext/mad/gstmad.c: (gst_mad_chain):
-       RPAD_ -> PAD
-       Fix args in bufferalloc function call.
-       Makes the mad plugin compile again
-
-2005-06-27  Owen Fraser-Green  <owen@discobabe.net>
-
-       * gst/realmedia/rmdemux.c: Rewrote to use gstadapter. Also parses
-       audio and video header packets for known properties.
-
-2005-06-23  Wim Taymans  <wim@fluendo.com>
-
-       * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
-       (gst_rtspsrc_class_init), (gst_rtspsrc_create_stream),
-       (gst_rtspsrc_add_element), (gst_rtspsrc_set_state),
-       (gst_rtspsrc_stream_setup_rtp),
-       (gst_rtspsrc_stream_configure_transport), (find_stream),
-       (gst_rtspsrc_loop), (gst_rtspsrc_open), (gst_rtspsrc_play),
-       (gst_rtspsrc_change_state):
-       * gst/rtsp/rtspurl.c: (rtsp_url_parse):
-       Make rtspsrc a live source.
-       Don't try to parse NULL urls.
-
-2005-06-23  Wim Taymans  <wim@fluendo.com>
-
-       * gst/udp/gstudpsrc.c: (gst_udpsrc_init):
-       Make udpsrc a live source.
-
-2005-06-02  Wim Taymans  <wim@fluendo.com>
-
-       * gst/udp/Makefile.am:
-       Use versioned net lib.
-
-2005-06-02  Wim Taymans  <wim@fluendo.com>
-
-       * gst/udp/Makefile.am:
-       Fix hack in makefile.
-
-2005-06-02  Andy Wingo  <wingo@pobox.com>
-
-       * ext/mad/gstid3tag.c: Finish porting to 0.9: no more gstdata,
-       check for link functions before calling them, give
-       gst_message_new_tag its own copy of the tag list, set the parser
-       state before sending the event (because in 0.9 events are
-       processed immediately), casting fixes.
-
-       * ext/mad/Makefile.am (libgstmad_la_LDFLAGS): Link with
-       gsttagedit.
-
-2005-06-02  Wim Taymans  <wim@fluendo.com>
-
-       * gst/udp/Makefile.am:
-       * gst/udp/gstmultiudpsink.c: (gst_multiudpsink_get_type),
-       (gst_multiudpsink_base_init), (gst_multiudpsink_class_init),
-       (gst_multiudpsink_init), (gst_multiudpsink_finalize),
-       (gst_multiudpsink_get_times), (gst_multiudpsink_render),
-       (gst_multiudpsink_set_property), (gst_multiudpsink_init_send),
-       (gst_multiudpsink_add), (client_compare), (free_client),
-       (gst_multiudpsink_remove), (gst_multiudpsink_clear),
-       (gst_multiudpsink_get_stats):
-       * gst/udp/gstudpsrc.c: (gst_udpsrc_get_type),
-       (gst_udpsrc_base_init), (gst_udpsrc_class_init),
-       (gst_udpsrc_create), (gst_udpsrc_set_uri), (gst_udpsrc_start),
-       (gst_udpsrc_unlock), (gst_udpsrc_stop):
-       Use NetBuffer and small cleanups.
-       Implement client removal in multiudpsink.
-
-2005-06-02  Wim Taymans  <wim@fluendo.com>
-
-       * gst/rtsp/README:
-       * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
-       (gst_rtspsrc_class_init), (gst_rtspsrc_create_stream),
-       (gst_rtspsrc_add_element), (gst_rtspsrc_set_state),
-       (gst_rtspsrc_stream_setup_rtp),
-       (gst_rtspsrc_stream_configure_transport), (find_stream),
-       (gst_rtspsrc_loop), (gst_rtspsrc_open), (gst_rtspsrc_play),
-       (gst_rtspsrc_change_state):
-       * gst/rtsp/rtsptransport.c: (rtsp_transport_new),
-       (rtsp_transport_init), (parse_mode), (parse_range),
-       (rtsp_transport_parse), (rtsp_transport_free):
-       RTSP cleanups.
-
-2005-06-02  Wim Taymans  <wim@fluendo.com>
-
-       * gst/effectv/gstquark.c: (gst_quarktv_chain):
-       * gst/goom/gstgoom.c: (gst_goom_chain):
-       * gst/videobox/Makefile.am:
-       * gst/videobox/gstvideobox.c: (gst_video_box_class_init),
-       (gst_video_box_init), (gst_video_box_sink_setcaps),
-       (gst_video_box_chain):
-       * gst/videofilter/gstvideofilter.c: (gst_videofilter_chain):
-       * gst/videorate/gstvideorate.c: (gst_videorate_class_init),
-       (gst_videorate_getcaps), (gst_videorate_setcaps),
-       (gst_videorate_init), (gst_videorate_event), (gst_videorate_chain),
-       (gst_videorate_change_state):
-       Bufferalloc changes.
-
-2005-05-25  Wim Taymans  <wim@fluendo.com>
-
-       * ext/mad/gstmad.c: (gst_mad_chain), (gst_mad_change_state):
-       * ext/sidplay/gstsiddec.cc:
-       * gst/alpha/gstalpha.c: (gst_alpha_chain):
-       * gst/goom/gstgoom.c: (gst_goom_chain):
-       No need to take the lock anymore,  core already did
-       that before calling us.
-
-2005-05-25  Wim Taymans  <wim@fluendo.com>
-
-       * ext/amrnb/amrnbdec.c: (gst_amrnbdec_init), (gst_amrnbdec_chain),
-       (gst_amrnbdec_state_change):
-       * ext/amrnb/amrnbenc.c: (gst_amrnbenc_base_init),
-       (gst_amrnbenc_finalize), (gst_amrnbenc_chain),
-       (gst_amrnbenc_state_change):
-       * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
-       (gst_amrnbparse_query), (gst_amrnbparse_chain),
-       (gst_amrnbparse_read_header), (gst_amrnbparse_loop),
-       (gst_amrnbparse_sink_activate), (gst_amrnbparse_state_change):
-       Core already took the lock.
-
-2005-05-19  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * configure.ac:
-       * ext/esd/Makefile.am:
-         Disable tcp elements and esdmon (they don't compile).
-
-2005-05-19  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * Makefile.am:
-       * ext/Makefile.am:
-       * sys/Makefile.am:
-         Make my automake version shut up about undefined variables
-       * gst/goom/gstgoom.c:
-         GstAdapter moved to base objects. 
-
-2005-05-18  Wim Taymans  <wim@fluendo.com>
-
-       * ext/amrnb/Makefile.am:
-       * ext/amrnb/amrnb.c: (plugin_init):
-       * ext/amrnb/amrnbdec.c: (gst_amrnbdec_init),
-       (gst_amrnbdec_setcaps), (gst_amrnbdec_chain),
-       (gst_amrnbdec_state_change):
-       * ext/amrnb/amrnbdec.h:
-       * ext/amrnb/amrnbenc.c: (gst_amrnbenc_get_type),
-       (gst_amrnbenc_base_init), (gst_amrnbenc_class_init),
-       (gst_amrnbenc_init), (gst_amrnbenc_finalize),
-       (gst_amrnbenc_setcaps), (gst_amrnbenc_chain),
-       (gst_amrnbenc_state_change):
-       * ext/amrnb/amrnbenc.h:
-       * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
-       (gst_amrnbparse_query), (gst_amrnbparse_event),
-       (gst_amrnbparse_chain), (gst_amrnbparse_read_header),
-       (gst_amrnbparse_loop), (gst_amrnbparse_sink_activate),
-       (gst_amrnbparse_state_change):
-       * ext/amrnb/amrnbparse.h:
-       Ported AMR decoder/parse.
-       Added AMR encoder.
-
-2005-05-18  Wim Taymans  <wim@fluendo.com>
-
-       * configure.ac:
-       * gst/goom/Makefile.am:
-       * gst/goom/gstgoom.c: (gst_goom_init), (gst_goom_sink_setcaps),
-       (gst_goom_src_setcaps), (gst_goom_src_negotiate), (gst_goom_event),
-       (gst_goom_chain), (gst_goom_change_state), (plugin_init):
-       Ported goom.
-       Added goom and alpha to build.
-
-2005-05-17  Wim Taymans  <wim@fluendo.com>
-
-       * configure.ac:
-       * gst/alpha/Makefile.am:
-       * gst/alpha/gstalpha.c: (gst_alpha_class_init), (gst_alpha_init),
-       (gst_alpha_sink_setcaps), (gst_alpha_chain):
-       Ported alpha,  remove alphacolor as functionality is in
-       ffmpegcolorspace.
-
-2005-05-17  Wim Taymans  <wim@fluendo.com>
-
-       * ext/libcaca/gstcacasink.c: (gst_cacasink_setcaps),
-       (gst_cacasink_render), (gst_cacasink_open), (gst_cacasink_close),
-       (gst_cacasink_change_state):
-       * ext/libcaca/gstcacasink.h:
-       Cleanups.
-
-2005-05-15  David Schleef  <ds@schleef.org>
-
-       Move core plugins out of core.  I don't mind fdsrc/fdsink
-       going back into the core; they were just disabled there, so
-       I moved them.  Some of this stuff could (should) be deleted.
-       * gst/oldcore/Makefile.am:
-       * gst/oldcore/gstaggregator.c:
-       * gst/oldcore/gstaggregator.h:
-       * gst/oldcore/gstelements.c:
-       * gst/oldcore/gstfdsink.c:
-       * gst/oldcore/gstfdsink.h:
-       * gst/oldcore/gstfdsrc.c:
-       * gst/oldcore/gstfdsrc.h:
-       * gst/oldcore/gstmd5sink.c:
-       * gst/oldcore/gstmd5sink.h:
-       * gst/oldcore/gstmultifilesrc.c:
-       * gst/oldcore/gstmultifilesrc.h:
-       * gst/oldcore/gstpipefilter.c:
-       * gst/oldcore/gstpipefilter.h:
-       * gst/oldcore/gstshaper.c:
-       * gst/oldcore/gstshaper.h:
-       * gst/oldcore/gststatistics.c:
-       * gst/oldcore/gststatistics.h:
-
-2005-05-13  Christian Schaller  <uraeus@gnome.org>
-
-       * ext/Makefile.am: dist esd directory
-       * gst-plugins.spec.in: add rtp plugins and esd plugin
-       * gst/effectv/Makefile.am: fix videofilter linking
-       * gst/rtp/Makefile.am: add missing headers 
-       * gst/rtsp/Makefile.am: add missing headers
-
-2005-05-12  Wim Taymans  <wim@fluendo.com>
-
-       * configure.ac:
-       * ext/sidplay/gstsiddec.cc:
-       Add working plugins to build.
-       Make sidplay compile again.
-
-2005-05-12  Wim Taymans  <wim@fluendo.com>
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_src_query):
-       * ext/mad/gstmad.c: (gst_mad_chain):
-       Fix mad and id3tag compilation again.
-
-2005-05-12  Wim Taymans  <wim@fluendo.com>
-
-       * gst/udp/.cvsignore:
-       * gst/udp/Makefile.am:
-       * gst/udp/gstmultiudpsink.c: (gst_multiudpsink_get_type),
-       (gst_multiudpsink_base_init), (gst_multiudpsink_class_init),
-       (gst_multiudpsink_init), (gst_multiudpsink_finalize),
-       (gst_multiudpsink_get_times), (gst_multiudpsink_render),
-       (gst_multiudpsink_set_property), (gst_multiudpsink_get_property),
-       (gst_multiudpsink_init_send), (gst_multiudpsink_close),
-       (gst_multiudpsink_add), (gst_multiudpsink_remove),
-       (gst_multiudpsink_clear), (gst_multiudpsink_get_stats),
-       (gst_multiudpsink_change_state):
-       * gst/udp/gstmultiudpsink.h:
-       * gst/udp/gstudp-marshal.list:
-       * gst/udp/gstudp.c: (plugin_init):
-       * gst/udp/gstudp.h:
-       * gst/udp/gstudpsink.c: (gst_udpsink_get_type),
-       (gst_udpsink_base_init), (gst_udpsink_class_init),
-       (gst_udpsink_init), (gst_udpsink_set_uri),
-       (gst_udpsink_set_property), (gst_udpsink_get_property),
-       (gst_udpsink_uri_get_type), (gst_udpsink_uri_get_protocols),
-       (gst_udpsink_uri_get_uri), (gst_udpsink_uri_set_uri),
-       (gst_udpsink_uri_handler_init):
-       * gst/udp/gstudpsink.h:
-       * gst/udp/gstudpsrc.c: (gst_udpsrc_get_type),
-       (gst_udpsrc_base_init), (gst_udpsrc_class_init),
-       (gst_udpsrc_create), (gst_udpsrc_set_uri), (gst_udpsrc_start),
-       (gst_udpsrc_unlock), (gst_udpsrc_stop):
-       * gst/udp/gstudpsrc.h:
-       Added multifdsink to send UDP to multiple addresses.
-       Cleaned up UDP source/sink elements some more.
-       Make UDP sink extends from multiudpsink.
-
-2005-05-12  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * ext/mad/gstmad.c: (gst_mad_src_query), (gst_mad_sink_event):
-         Make queries actually work (update core first).
-
-2005-05-12  Wim Taymans  <wim@fluendo.com>
-
-       * gst/rtsp/README:
-       * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_get_type),
-       (gst_tcpclientsrc_base_init), (gst_tcpclientsrc_class_init),
-       (gst_tcpclientsrc_init), (gst_tcpclientsrc_getcaps),
-       (gst_tcpclientsrc_stop), (gst_tcpclientsrc_eos),
-       (gst_tcpclientsrc_create), (gst_tcpclientsrc_start):
-       * gst/tcp/gsttcpclientsrc.h:
-       * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_get_type),
-       (gst_tcpserversrc_base_init), (gst_tcpserversrc_class_init),
-       (gst_tcpserversrc_init), (gst_tcpserversrc_create),
-       (gst_tcpserversrc_start), (gst_tcpserversrc_stop):
-       * gst/tcp/gsttcpserversrc.h:
-       * gst/tcp/gsttcpsrc.c: (gst_tcpsrc_get_type),
-       (gst_tcpsrc_base_init), (gst_tcpsrc_class_init), (gst_tcpsrc_init),
-       (gst_tcpsrc_create), (gst_tcpsrc_start), (gst_tcpsrc_stop):
-       * gst/tcp/gsttcpsrc.h:
-       * gst/udp/gstudpsink.c: (gst_udpsink_base_init),
-       (gst_udpsink_init), (gst_udpsink_get_times), (gst_udpsink_render),
-       (gst_udpsink_set_property), (gst_udpsink_get_property),
-       (gst_udpsink_change_state):
-       * gst/udp/gstudpsink.h:
-       * gst/udp/gstudpsrc.c: (gst_udpsrc_get_type),
-       (gst_udpsrc_base_init), (gst_udpsrc_class_init), (gst_udpsrc_init),
-       (gst_udpsrc_create), (gst_udpsrc_set_uri), (gst_udpsrc_start),
-       (gst_udpsrc_stop):
-       * gst/udp/gstudpsrc.h:
-       Make UDP and TCP elements use PushSrc.
-
-
-2005-05-11  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * ext/mad/gstmad.c: (gst_mad_init), (gst_mad_src_query),
-       (index_seek), (normal_seek), (gst_mad_sink_event):
-         Port to new query API and replace gst_pad_convert()
-         and gst_pad_get_formats() usage. gstid3tag looks like
-         it needs some more love before it will work again, if 
-         not a rewrite.
-
-2005-05-12  Zeeshan Ali  <zeenix@gmail.com>
-
-       * gst/effectv/Makefile.am:
-       Fixed the effectv build again.
-
-2005-05-11  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/Makefile.am:
-       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_get_type),
-       (gst_multifdsink_base_init), (gst_multifdsink_class_init),
-       (gst_multifdsink_init), (gst_multifdsink_handle_client_write),
-       (gst_multifdsink_queue_buffer), (gst_multifdsink_render),
-       (gst_multifdsink_change_state):
-       * gst/tcp/gstmultifdsink.h:
-       * gst/tcp/gsttcp.c:
-       * gst/tcp/gsttcpclientsink.c: (gst_tcpclientsink_get_type),
-       (gst_tcpclientsink_base_init), (gst_tcpclientsink_class_init),
-       (gst_tcpclientsink_init), (gst_tcpclientsink_render),
-       (gst_tcpclientsink_set_property), (gst_tcpclientsink_get_property),
-       (gst_tcpclientsink_change_state):
-       * gst/tcp/gsttcpclientsink.h:
-       * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_class_init),
-       (gst_tcpclientsrc_init_receive):
-       * gst/tcp/gsttcpplugin.c: (plugin_init):
-       * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init):
-       * gst/tcp/gsttcpserversink.h:
-       * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_class_init):
-       * gst/tcp/gsttcpsink.c: (gst_tcpsink_get_type),
-       (gst_tcpsink_base_init), (gst_tcpsink_class_init),
-       (gst_tcpsink_setcaps), (gst_tcpsink_init), (gst_tcpsink_get_times),
-       (gst_tcpsink_render), (gst_tcpsink_set_property),
-       (gst_tcpsink_get_property):
-       * gst/tcp/gsttcpsink.h:
-       * gst/tcp/gsttcpsrc.c: (gst_tcpsrc_class_init), (gst_tcpsrc_get):
-       Ported over some sink elements.
-       Sources not ported yet as they require a PushSource base class.
-
-2005-05-11  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * gst/effectv/Makefile.am:
-       * gst/videofilter/Makefile.am:
-         Turn videofilter into a library (private for now)
-
-2005-05-11  Wim Taymans  <wim@fluendo.com>
-
-       * gst/rtsp/README:
-       * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
-       (gst_rtspsrc_class_init), (gst_rtspsrc_create_stream),
-       (gst_rtspsrc_add_element), (gst_rtspsrc_set_state),
-       (gst_rtspsrc_stream_setup_rtp),
-       (gst_rtspsrc_stream_configure_transport), (find_stream),
-       (gst_rtspsrc_loop), (gst_rtspsrc_open), (gst_rtspsrc_play):
-       * gst/rtsp/rtsp.h:
-       * gst/rtsp/rtspconnection.c: (rtsp_connection_create),
-       (rtsp_connection_send), (read_line), (parse_request_line),
-       (parse_line), (read_body), (rtsp_connection_receive),
-       (rtsp_connection_free):
-       * gst/rtsp/rtspconnection.h:
-       * gst/rtsp/rtspdefs.c: (rtsp_find_method):
-       * gst/rtsp/rtspdefs.h:
-       * gst/rtsp/rtspmessage.c: (rtsp_message_set_body),
-       (rtsp_message_take_body):
-       * gst/rtsp/rtspmessage.h:
-       * gst/rtsp/rtspstream.h:
-       * gst/rtsp/sdpmessage.c: (sdp_parse_line):
-       Added README
-       Some cleanups.
-
-2005-05-11  Wim Taymans  <wim@fluendo.com>
-
-       * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
-       (gst_rtspsrc_class_init), (gst_rtspsrc_init),
-       (gst_rtspsrc_create_stream), (gst_rtspsrc_add_element),
-       (gst_rtspsrc_set_state), (gst_rtspsrc_stream_setup_rtp),
-       (gst_rtspsrc_stream_configure_transport), (find_stream),
-       (gst_rtspsrc_loop), (gst_rtspsrc_open), (gst_rtspsrc_close),
-       (gst_rtspsrc_play), (gst_rtspsrc_change_state):
-       * gst/rtsp/gstrtspsrc.h:
-       Setup UDP sources correctly, receives raw data from RTSP
-       compliant servers now.
-
-2005-05-11  Wim Taymans  <wim@fluendo.com>
-
-       * gst/rtsp/.cvsignore:
-       * gst/rtsp/Makefile.am:
-       * gst/rtsp/gstrtsp.c: (plugin_init):
-       * gst/rtsp/gstrtsp.h:
-       * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
-       (gst_rtspsrc_get_type), (gst_rtspsrc_base_init),
-       (gst_rtspsrc_class_init), (gst_rtspsrc_init),
-       (gst_rtspsrc_set_property), (gst_rtspsrc_get_property),
-       (gst_rtspsrc_create_stream), (rtspsrc_add_element),
-       (gst_rtspsrc_stream_setup_rtp),
-       (gst_rtspsrc_stream_configure_transport), (find_stream),
-       (gst_rtspsrc_loop), (gst_rtspsrc_send), (gst_rtspsrc_open),
-       (gst_rtspsrc_close), (gst_rtspsrc_play), (gst_rtspsrc_pause),
-       (gst_rtspsrc_activate), (gst_rtspsrc_change_state):
-       * gst/rtsp/gstrtspsrc.h:
-       * gst/rtsp/rtsp.h:
-       * gst/rtsp/rtspconnection.c: (rtsp_connection_open),
-       (rtsp_connection_create), (append_header), (rtsp_connection_send),
-       (read_line), (read_string), (read_key), (parse_response_status),
-       (parse_line), (read_body), (rtsp_connection_receive),
-       (rtsp_connection_close):
-       * gst/rtsp/rtspconnection.h:
-       * gst/rtsp/rtspdefs.c: (rtsp_init_status), (rtsp_method_as_text),
-       (rtsp_header_as_text), (rtsp_status_as_text),
-       (rtsp_status_to_string), (rtsp_find_header_field):
-       * gst/rtsp/rtspdefs.h:
-       * gst/rtsp/rtspmessage.c: (rtsp_message_new_request),
-       (rtsp_message_init_request), (rtsp_message_new_response),
-       (rtsp_message_init_response), (rtsp_message_init_data),
-       (rtsp_message_add_header), (rtsp_message_remove_header),
-       (rtsp_message_get_header), (rtsp_message_get_header_copy),
-       (rtsp_message_set_body), (rtsp_message_set_body_copy),
-       (rtsp_message_get_body), (rtsp_message_get_body_copy), (dump_mem),
-       (dump_key_value), (rtsp_message_dump):
-       * gst/rtsp/rtspmessage.h:
-       * gst/rtsp/rtspstream.h:
-       * gst/rtsp/rtsptransport.c: (rtsp_transport_new),
-       (rtsp_transport_init), (parse_mode), (parse_range),
-       (rtsp_transport_parse), (rtsp_transport_free):
-       * gst/rtsp/rtsptransport.h:
-       * gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_free):
-       * gst/rtsp/rtspurl.h:
-       * gst/rtsp/sdp.h:
-       * gst/rtsp/sdpmessage.c: (sdp_message_new), (sdp_message_init),
-       (sdp_message_clean), (sdp_message_free), (sdp_media_new),
-       (sdp_media_init), (sdp_message_set_origin),
-       (sdp_message_get_origin), (sdp_message_set_connection),
-       (sdp_message_get_connection), (sdp_message_add_bandwidth),
-       (sdp_message_add_time), (sdp_message_add_zone),
-       (sdp_message_set_key), (sdp_message_get_key),
-       (sdp_message_get_attribute_val), (sdp_message_add_attribute),
-       (sdp_message_add_media), (sdp_media_add_attribute),
-       (sdp_media_add_bandwidth), (sdp_media_add_format),
-       (sdp_media_get_attribute_val), (read_string), (read_string_del),
-       (sdp_parse_line), (sdp_message_parse_buffer), (print_media),
-       (sdp_message_dump):
-       * gst/rtsp/sdpmessage.h:
-       * gst/rtsp/test.c: (main):
-       Ported to 0.9.
-       Set up transports, init UDP ports, init RTP session managers.
-
-2005-05-11  Wim Taymans  <wim@fluendo.com>
-
-       * gst/rtp/Makefile.am:
-       * gst/rtp/gstrtp.c: (plugin_init):
-       * gst/rtp/gstrtpdec.c: (gst_rtpdec_get_type),
-       (gst_rtpdec_class_init), (gst_rtpdec_init), (gst_rtpdec_chain_rtp),
-       (gst_rtpdec_chain_rtcp), (gst_rtpdec_set_property),
-       (gst_rtpdec_get_property), (gst_rtpdec_change_state),
-       (gst_rtpdec_plugin_init):
-       * gst/rtp/gstrtpdec.h:
-       * gst/udp/gstudpsink.c: (gst_udpsink_base_init),
-       (gst_udpsink_get_times), (gst_udpsink_render),
-       (gst_udpsink_change_state):
-       * gst/udp/gstudpsrc.c: (gst_udpsrc_get_type),
-       (gst_udpsrc_base_init), (gst_udpsrc_class_init), (gst_udpsrc_init),
-       (gst_udpsrc_loop), (gst_udpsrc_set_uri), (gst_udpsrc_set_property),
-       (gst_udpsrc_get_property), (gst_udpsrc_init_receive),
-       (gst_udpsrc_activate), (gst_udpsrc_change_state),
-       (gst_udpsrc_uri_get_type), (gst_udpsrc_uri_get_protocols),
-       (gst_udpsrc_uri_get_uri), (gst_udpsrc_uri_set_uri),
-       (gst_udpsrc_uri_handler_init):
-       * gst/udp/gstudpsrc.h:
-       UDP fixes, added uri handler.
-       Added rtpdec that will manage the RTP session in the future.
-
-2005-05-10  Arwed v. Merkatz  <v.merkatz@gmx.net>
-
-       * PORTED_09:
-       * configure.ac:
-       * ext/Makefile.am:
-       * ext/esd/Makefile.am:
-       * ext/esd/esdsink.c: (gst_esdsink_get_type),
-       (gst_esdsink_class_init), (gst_esdsink_init),
-       (gst_esdsink_dispose), (gst_esdsink_change_state),
-       (gst_caps_set_each), (gst_esdsink_getcaps), (gst_esdsink_open),
-       (gst_esdsink_close), (gst_esdsink_write), (gst_esdsink_delay),
-       (gst_esdsink_reset), (gst_esdsink_set_property),
-       (gst_esdsink_get_property), (gst_esdsink_factory_init):
-       * ext/esd/esdsink.h:
-       * ext/esd/gstesd.c: (plugin_init):
-       Ported esdsink plugin
-
-2005-05-10  Wim Taymans  <wim@fluendo.com>
-
-       * gst/udp/Makefile.am:
-       * gst/udp/gstudpsink.c: (gst_udpsink_get_type),
-       (gst_udpsink_base_init), (gst_udpsink_class_init),
-       (gst_udpsink_init), (gst_udpsink_get_times), (gst_udpsink_render),
-       (gst_udpsink_set_property), (gst_udpsink_get_property),
-       (gst_udpsink_init_send), (gst_udpsink_close),
-       (gst_udpsink_change_state):
-       * gst/udp/gstudpsink.h:
-       * gst/udp/gstudpsrc.c: (gst_udpsrc_base_init),
-       (gst_udpsrc_class_init), (gst_udpsrc_init), (gst_udpsrc_loop),
-       (gst_udpsrc_set_property), (gst_udpsrc_get_property),
-       (gst_udpsrc_init_receive), (gst_udpsrc_close),
-       (gst_udpsrc_activate), (gst_udpsrc_change_state):
-       * gst/udp/gstudpsrc.h:
-       Ported udp src/sink.
-
-2005-05-09  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * PORTED_09:
-       * configure.ac:
-       * ext/Makefile.am:
-       * ext/shout2/Makefile.am:
-       * ext/shout2/gstshout2.c: (gst_shout2send_get_type),
-       (gst_shout2send_base_init), (gst_shout2send_class_init),
-       (gst_shout2send_init), (gst_shout2send_event),
-       (gst_shout2send_render), (gst_shout2send_set_property),
-       (gst_shout2send_get_property), (gst_shout2send_setcaps),
-       (gst_shout2send_change_state):
-       * ext/shout2/gstshout2.h:
-
-       Port shout2 plugin
-
-2005-05-08  Zeeshan Ali   <zeenix@gmail.com>
-
-       * configure.ac:
-       * ext/Makefile.am:
-       * ext/libcaca/Makefile.am:
-       * ext/libcaca/gstcacasink.c: (gst_cacasink_get_type),
-       (gst_cacasink_class_init), (gst_cacasink_get_times),
-       (gst_cacasink_setcaps), (gst_cacasink_init), (gst_cacasink_render),
-       (plugin_init):
-       * ext/libcaca/gstcacasink.h:
-       Ported the libcaca plugin.
-
-2005-05-08  Zeeshan Ali  <zeenix@gmail.com>
-
-       * configure.ac:
-       * ext/mad/Makefile.am:
-       * effectv/Makefile.am:
-       Fixed a few things to enable the mad and effectv to be able to find the
-       headers in the gst-plugins-base/gst-libs and to link against the libs
-       in there.
-
-2005-05-07  Zeeshan Ali  <zeenix@gmail.com>
-
-       * configure.ac:
-       Fixed the build by fixing a small mistake of Wim.
-       
-2005-05-06  Wim Taymans  <wim@fluendo.com>
-
-       * configure.ac:
-       * ext/aalib/Makefile.am:
-       * ext/aalib/gstaasink.c: (gst_aasink_get_type),
-       (gst_aasink_class_init), (gst_aasink_fixate), (gst_aasink_setcaps),
-       (gst_aasink_init), (gst_aasink_get_times), (gst_aasink_render),
-       (gst_aasink_set_property), (gst_aasink_get_property),
-       (gst_aasink_open), (gst_aasink_close), (gst_aasink_change_state):
-       * ext/aalib/gstaasink.h:
-       * gst/smpte/Makefile.am:
-       * gst/smpte/gstsmpte.c: (gst_smpte_setcaps), (gst_smpte_init),
-       (gst_smpte_collected):
-       * gst/smpte/gstsmpte.h:
-       Ported 2 more plugins. usgly hack in the Makefile.am though, I'm
-       sure someone will fix it.
-
-2005-05-06  Christian Schaller  <uraeus@gnome.org>
-
-       * configure.ac: add sidplay
-       * ext/Makefile.am: add sidplay
-       * ext/sidplay/Makefile.am: add GST_PLUGINS_CFLAGS
-       * ext/sidplay/gstsiddec.cc: remove bytestream.h
-
-2005-05-06  Christian Schaller  <uraeus@gnome.org>
-
-       * configure.ac: add gst-plugins-libs
-
-2005-05-06  Wim Taymans  <wim@fluendo.com>
-
-       * configure.ac:
-       * ext/sidplay/gstsiddec.cc:
-       * ext/sidplay/gstsiddec.h:
-       Ported sidplay.
-
-2005-05-06  Christian Schaller  <uraeus@gnome.org>
-
-       * configure.ac: 
-       * ext/mad/Makefile.am: add linking of gstinterfaces
-       * ext/mad/gstid3tag.c: (plugin_init): remove library_load
-       * gst-plugins.spec.in: 
-       * gst/effectv/Makefile.am: link to libgstvideofilter
-       * gst/effectv/gsteffectv.c: (plugin_init): same as for mad
-       * gst/videofilter/Makefile.am: make sure videoflip is not built
-
-2005-05-06  Wim Taymans  <wim@fluendo.com>
-
-       * gst/law/alaw-decode.c: (alawdec_getcaps), (alawdec_setcaps),
-       (gst_alawdec_init), (gst_alawdec_chain):
-       * gst/law/alaw-encode.c: (alawenc_getcaps), (alawenc_setcaps),
-       (gst_alawenc_init), (gst_alawenc_chain):
-       * gst/law/mulaw-decode.c: (mulawdec_getcaps), (mulawdec_setcaps),
-       (gst_mulawdec_init), (gst_mulawdec_chain):
-       * gst/law/mulaw-encode.c: (mulawenc_getcaps), (mulawenc_setcaps),
-       (gst_mulawenc_init), (gst_mulawenc_chain):
-       Ported alaw and mulaw plugins to 0.9, fixed the negotiation as
-       well.
-
-2005-05-06  Christian Schaller  <uraeus@gnome.org>
-
-       * ext/alsa: removed plugins that are now in gst-plugins-base
-       * ext/gnomevfs:
-       * ext/theora:
-       * ext/vorbis:
-       * gst/adder:
-       * gst/audioconvert:
-       * gst/ffmpegcolorspace:
-       * gst/typefind:
-       * gst/videofilter: comment out videoflip and gamma plugins
-
-2005-05-06  Christian Schaller  <uraeus@gnome.org>
-
-       * gst-libs: Remove all files as this is in gst-plugins-base now
-       * gst-libs/README: add a remove informing of this move
-
-2005-05-06  Christian Schaller <uraeus@gnome.org> 
-
-       * PORTED_09: update to add videofilter
-       * configure.ac: re-add videofilter
-       * gst/videofilter/Makefile.am: remove videobalance (not ported yet)
-       * gst/videofilter/gstgamma.c: (gst_gamma_class_init):
-       * gst/videofilter/gstvideobalance.c: (gst_videobalance_class_init):
-       * gst/videofilter/gstvideofilter.c: (gst_videofilter_getcaps),
-       (gst_videofilter_setcaps), (gst_videofilter_init),
-       (gst_videofilter_chain), (gst_videofilter_set_output_size):
-       * gst/videofilter/gstvideoflip.c: (gst_videoflip_class_init):
-
-2005-05-06  Christian Schaller <uraeus@gnome.org>
-
-       * ext/mad: ported plugin from threaded branch
-       * gst/effectv: ported plugins from threaded branch
-       * gst/law: enable law plugin as it compiles (Wim will fixor)
-
-2005-05-06  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * configure.ac:
-       fix typo
-
-2005-05-05  Christian Schaller <uraeus@gnome.org>
-
-       * Update configure.ac and Makefiles to only build what is actually
-       ported and not moved into gst-plugins-base
-
-2005-02-22  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-         hunting season on 0.9 is now OPEN
-
-2005-02-22  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/oss/gstosselement.c: (gst_osselement_class_probe_devices):
-         Kick the hell out of gcc for not warning me about a symbol conflict.
-
-2005-02-22  Luca Ognibene  <luogni@tin.it>
-
-       Reviewed by: Tim-Philipp Müller  <tim at centricular dot net>
-
-       * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_link):
-         Don't leak caps string (fixes #168134)
-
-       * ext/jpeg/gstjpegenc.c: (gst_jpegenc_class_init),
-       (gst_jpegenc_init), (gst_jpegenc_finalize),
-       (gst_jpegenc_change_state):
-         Don't leak line buffers and context struct (fixes #168133).
-
-2005-02-21  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * configure.ac:
-       * ext/dirac/gstdiracdec.cc:
-       (gst_diracdec_chain):
-         Since dirac 0.5.0 the framerate in dirac is expressed as a
-         rational number. Fix build and up requirement to 0.5.0, and
-         also pass parameters to gst_diracdec_link in the right order
-         (fixes #167959).
-
-2005-02-21  Maciej Katafiasz  <mathrick@freedesktop.org>
-
-       * ext/faad/gstfaad.c: (gst_faad_sinkconnect), (gst_faad_chain):
-       * ext/faad/gstfaad.h:
-       TEH LONGEST DEBUGGING SESSION EVAR is over. Fix interaction with 
-       certain invalid muxed streams, where some packets will contain 
-       junk after decoder data. Partially fixes #149158.
-
-2005-02-21  Jan Schmidt <thaytan@mad.scientist.com>
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain):
-          Make sure we only write to writable buffers
-
-2005-02-20  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * gst-libs/gst/riff/riff-media.c:
-       (gst_riff_create_audio_caps_with_data):
-         Do actually fix invalid RIFF fmt header values for alaw
-         and mulaw audio instead of just saying so.
-
-       * gst/wavparse/gstwavparse.c: (gst_wavparse_fmt):
-         Give gst_riff_create_audio_caps_with_data() a chance to
-         fix up broken format header fields before extracting any
-         parameters from the header. (fixes #167633)
-
-2005-02-19  Martin Holters  <martin.holters@gmx.de>
-
-       Reviewed by: Tim-Philipp Müller  <tim at centricular dot net>
-
-       * gst/audioconvert/bufferframesconvert.c:
-       (buffer_frames_convert_link):
-         Don't leak othercaps. (fixes #167878)
-
-2005-02-19  Arwed v. Merkatz  <v.merkatz@gmx.net>>
-
-       * configure.ac:
-       * ext/libvisual/visual.c: (gst_visual_srclink),
-       (gst_visual_change_state):
-         Support libvisual 0.2.0.
-
-2005-02-18  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * ext/jpeg/gstjpegdec.c: (gst_jpegdec_chain):
-       * ext/jpeg/gstjpegenc.c: (gst_jpegenc_resync), (gst_jpegenc_chain):
-         Use same rowstrides for I420 as used everywhere else.
-
-2005-02-17  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_invert):
-         Declare variables at beginning of block and make gcc-2.95 happy
-         (fixes # 167482, patch by Gergely Nagy).
-         
-       * gst/tcp/gsttcpclientsrc.c:
-       * gst/tcp/gsttcpclientsrc.h:
-         Move some includes into the header, so that struct sockaddr_in is
-         defined when it should be defined on FreeBSD as well (fixes
-         #167483).
-         
-       * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_init_receive):
-         Don't pass uninitialised values to setsockopt() here either.
-
-2005-02-17  Luca Ognibene  <luogni at tin dot it>
-
-       Reviewed by: Tim-Philipp Müller  <tim at centricular dot net>
-
-       * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_init_send):
-         Don't pass uninitialised values to setsockopt(). (fixes #167704)
-
-2005-02-16  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybin.c: (add_sink):
-         Invert bin_add/link order to workaround deadlock in opt.
-
-2005-02-15  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/modplug/gstmodplug.cc:
-         Add missing break causing position queries to fail.
-
-2005-02-15  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_populate):
-         Granpos can apparently be -1, which screws up calculations...
-
-2005-02-16  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_chain),
-       (gst_ximagesink_send_pending_navigation),
-       (gst_ximagesink_navigation_send_event), (gst_ximagesink_finalize),
-       (gst_ximagesink_init):
-       * sys/ximage/ximagesink.h:
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain),
-       (gst_xvimagesink_send_pending_navigation),
-       (gst_xvimagesink_navigation_send_event),
-       (gst_xvimagesink_finalize), (gst_xvimagesink_init):
-       * sys/xvimage/xvimagesink.h:
-         Use a mutex protected list to marshal navigation
-         events into the stream thread from whichever thread
-         sends them.
-
-2005-02-15  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * gst/speed/demo-mp3.c: (time_tick_cb), (main):
-         Display current position and track length; misc. clean-ups.
-         
-       * gst/speed/gstspeed.c: (speed_get_query_types), (speed_src_query),
-       (speed_init), (speed_chain):
-         Add query function, so that the stream length and current position
-         get adjusted when queried (note that current position queries may
-         still be wrong if the audio sink returns values based on buffer
-         timestamps instead of passing on the query).
-
-2005-02-13  Benjamin Otte  <otte@gnome.org>
-
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link),
-       (gst_audio_convert_channels):
-         create channel conversion matrix when linking
-       * gst/audioconvert/.cvsignore:
-       * gst/audioconvert/Makefile.am:
-       * gst/audioconvert/channelmixtest.c: (main):
-         add (ugly) test that ensures stereo <=> mono conversion works
-         correctly
-
-2005-02-13  Benjamin Otte  <otte@gnome.org>
-
-       * gst/audioconvert/gstchannelmix.h:
-         include missing header file
-       * gst/audioconvert/gstchannelmix.c:
-       (gst_audio_convert_fill_compatible):
-         use same sign for both channels when converting to/from compatible
-         channel. Previously used different signs made the signals cancel
-         each other out and appear like silence. (fixes #167269)
-
-2005-02-12  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * gst/ffmpegcolorspace/avcodec.h:
-       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
-       (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_caps_to_pixfmt),
-       (gst_ffmpegcsp_avpicture_fill):
-       * gst/ffmpegcolorspace/imgconvert.c:
-         Convert to and from YV12 (fixes #156379).
-
-2005-02-12  Julien MOUTTE  <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_new),
-       (gst_ximagesink_sink_link), (gst_ximagesink_change_state),
-       (gst_ximagesink_chain), (gst_ximagesink_set_xwindow_id),
-       (gst_ximagesink_expose), (gst_ximagesink_set_property),
-       (gst_ximagesink_finalize), (gst_ximagesink_init): Protect interface
-        methods from chain and negotiation and vice versa (Fixes #166142).
-       * sys/ximage/ximagesink.h: Add stream_lock.
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_sink_link),
-       (gst_xvimagesink_chain), (gst_xvimagesink_buffer_free),
-       (gst_xvimagesink_buffer_alloc), (gst_xvimagesink_set_xwindow_id),
-       (gst_xvimagesink_expose): Check for xcontext before trying to link.
-
-2005-02-12  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_open):
-         Don't send "Hey! You gave me a NULL pointer you naughty person" as
-         error message when we can't open the DVD device (when dvdnav_open()
-         fails, src->dvdnav is NULL, so dvdnav_err_to_string() will return
-         the above). Send something more useful instead (fixes #167117).
-
-2005-02-11  Julien MOUTTE  <julien@moutte.net>
-
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_put),
-       (gst_xvimagesink_sink_link), (gst_xvimagesink_change_state),
-       (gst_xvimagesink_chain), (gst_xvimagesink_buffer_free),
-       (gst_xvimagesink_buffer_alloc), (gst_xvimagesink_set_xwindow_id),
-       (gst_xvimagesink_expose), (gst_xvimagesink_set_property),
-       (gst_xvimagesink_finalize), (gst_xvimagesink_init): Protect interface
-       methods from chain and negotiation and vice versa (Fixes #166142).
-       Fix a possible bug of images in the buffer pool being discarded because
-       we are looking at the wrong geometry.
-       * sys/xvimage/xvimagesink.h: Add stream_lock.
-
-2005-02-11  David Schleef  <ds@schleef.org>
-
-       * ext/mpeg2dec/gstmpeg2dec.c: (crop_buffer): Change uint to
-       unsigned int. (fixes #167128)
-
-2005-02-11  David Schleef  <ds@schleef.org>
-
-       * gst/librfb/Makefile.am: Testing stuff before committing is
-         for wimps... and people with fast machines.  Fix stupid
-         mistake.
-
-2005-02-11  David Schleef  <ds@schleef.org>
-
-       * configure.ac: Pull in librfb from my CVS tree, because it is
-         too small and annoying to be separate.  Move rfbsrc plugin
-         to gst/.
-       * ext/Makefile.am:
-       * ext/librfb/Makefile.am:
-       * ext/librfb/gstrfbsrc.c:
-       * gst/librfb/Makefile.am:
-       * gst/librfb/gstrfbsrc.c:
-       * gst/librfb/rfb.c:
-       * gst/librfb/rfb.h:
-       * gst/librfb/rfbbuffer.c:
-       * gst/librfb/rfbbuffer.h:
-       * gst/librfb/rfbbytestream.c:
-       * gst/librfb/rfbbytestream.h:
-       * gst/librfb/rfbcontext.h:
-       * gst/librfb/rfbdecoder.c:
-       * gst/librfb/rfbdecoder.h:
-       * gst/librfb/rfbutil.h:
-
-2005-02-10  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * gst/speed/Makefile.am:
-       * gst/speed/demo-mp3.c: (main):
-       * gst/speed/filter.func:
-       * gst/speed/gstspeed.c: (speed_link), (speed_parse_caps),
-       (speed_class_init), (speed_init), (speed_chain_int16),
-       (speed_chain_float32), (speed_chain), (speed_set_property),
-       (speed_get_property), (speed_change_state):
-       * gst/speed/gstspeed.h:
-         Fix speed element and make it chain-based (fixes #156467),
-         and make it handle more than one channel.
-
-2005-02-10  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * ext/dts/gstdtsdec.c: (gst_dtsdec_init), (gst_dtsdec_channels),
-       (gst_dtsdec_handle_event), (gst_dtsdec_handle_frame),
-       (gst_dtsdec_chain), (gst_dtsdec_change_state):
-       * ext/dts/gstdtsdec.h:
-          Don't clobber the stack constructing the channels array.
-         Make the element chain-based. DTS tracks can now be played.
-         
-2005-02-09  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * gst-libs/gst/audio/multichannel.h:
-       * gst-libs/gst/gconf/gconf.h:
-       * gst-libs/gst/idct/idct.h:
-       * gst-libs/gst/media-info/media-info-priv.h:
-       * gst-libs/gst/play/play.h:
-       * gst-libs/gst/resample/private.h:
-       * gst-libs/gst/resample/resample.h:
-       * gst-libs/gst/riff/riff-ids.h:
-       * gst-libs/gst/video/video.h:
-       * gst-libs/gst/video/videosink.h:
-         Add G_BEGIN_DECLS and G_END_DECLS around headers where
-         missing, so that they work when included from C++ code.
-
-2005-02-09  David Schleef  <ds@schleef.org>
-
-       * testsuite/gst-lint: Check for non-statically scoped
-         parent_class variables.  This won't be a problem once
-         plugins are loaded with RTLD_LOCAL.
-
-2005-02-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/mplex/gstmplexibitstream.cc:
-         gcc madness.
-
-2005-02-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstogmparse.c:
-       * gst/debug/gstnavigationtest.c:
-         Die, thou faulty symbol pollutors (non-static parent_class).
-
-2005-02-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/mplex/gstmplexibitstream.cc:
-         Fix event handling (#165525).
-
-2005-02-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/mikmod/gstmikmod.c:
-       * gst/modplug/gstmodplug.cc:
-         Add missing endianness to template (fixes #165509).
-
-2005-02-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_data):
-         Fix wrong order of reading of optional bytes (#165290).
-
-2005-02-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
-         Implement FILLER event awareness.
-
-2005-02-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_convert):
-         Fix track calculations (#166208).
-
-2005-02-08  Gergely Nagy  <algernon@bonehunter.rulez.org>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/libpng/gstpngdec.c: (gst_pngdec_init), (gst_pngdec_chain):
-       * ext/libpng/gstpngenc.c:
-         Fix byte-order, use proper fixed caps. Fixes #164197.
-
-2005-02-08  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * configure.ac:
-         Add dvdlpcmdec 
-
-       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_reset),
-       (free_all_buffers), (gst_mpeg2dec_alloc_buffer):
-         Don't push buffers if the src pad isn't negotiated yet.
-         
-       * gst/audioconvert/gstaudioconvert.c:
-       (gst_audio_convert_buffer_to_default_format),
-       (gst_audio_convert_buffer_from_default_format):
-         Add support for 24-bit width.
-
-       * gst/dvdlpcmdec/.cvsignore:
-       * gst/dvdlpcmdec/Makefile.am:
-       * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_get_type),
-       (gst_dvdlpcmdec_base_init), (gst_dvdlpcmdec_class_init),
-       (gst_dvdlpcm_reset), (gst_dvdlpcmdec_init), (gst_dvdlpcmdec_link),
-       (gst_dvdlpcmdec_chain), (gst_dvdlpcmdec_change_state),
-       (plugin_init):
-       * gst/dvdlpcmdec/gstdvdlpcmdec.h:
-         New decoder for rearranging DVD LPCM into our audio/x-raw-int
-         format. Needs support for the channels maps if someone can find 
-         a DVD LPCM track with > 2 channels.
-
-       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_handle_dvd_event),
-       (gst_dvd_demux_send_discont), (gst_dvd_demux_handle_discont),
-       (gst_dvd_demux_get_audio_stream), (gst_dvd_demux_process_private):
-       * gst/mpegstream/gstdvddemux.h:
-       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_discont),
-       (gst_mpeg_demux_new_output_pad), (gst_mpeg_demux_init_stream),
-       (gst_mpeg_demux_send_subbuffer), (gst_mpeg_demux_handle_src_query):
-       * gst/mpegstream/gstmpegdemux.h:
-       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_reset),
-       (gst_mpeg_parse_parse_packhead), (gst_mpeg_parse_loop),
-       (gst_mpeg_parse_get_rate), (gst_mpeg_parse_convert_src),
-       (gst_mpeg_parse_handle_src_query),
-       (gst_mpeg_parse_handle_src_event):
-         Use audio/x-dvd-lpcm for LPCM output.
-         Add DTS output.
-
-2005-02-08  Gergely Nagy  <algernon@bonehunter.rulez.org>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/alpha/gstalphacolor.c: (gst_alpha_color_sink_link),
-       (transform_rgb), (transform_bgr), (gst_alpha_color_chain):
-         Add BGRA handling (#165736).
-
-2005-02-08  Francis Labonte  <francis_labonte@hotmail.com>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/law/alaw-decode.c: (alawdec_link):
-       * gst/law/alaw-encode.c: (alawenc_link):
-       * gst/law/mulaw-decode.c: (mulawdec_link):
-       * gst/law/mulaw-encode.c: (mulawenc_link):
-         Fix caps memleaks (#166600).
-
-2005-02-08  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * ext/tarkin/mem.h:
-       * ext/tarkin/wavelet.h:
-       * ext/tarkin/yuv.h:
-       * gst/ffmpegcolorspace/avcodec.h:
-         Include "_stdint.h" instead of <stdint.h>. Fixes build on
-         systems that don't have stdint.h, like Solaris9 (fixes #166631).
-
-2005-02-05  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_change_state):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_clear),
-       (gst_xvimagesink_change_state):
-         Clear window on PAUSED->READY instead of READY->PAUSED. Stop
-         Xv video (and thereby regenerate Xv colourkey) in clear() so
-         that PLAY -> READY -> PLAY works (fixes #162504).
-
-2005-02-05  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_getcaps):
-         Switch to list instead of range, since MJPEG-devices really just
-         support decimations, not any size.
-
-2005-02-05  Jan Schmidt  <thaytan@mad.scientist.com>
-       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_open_decoder),
-       (gst_mpeg2dec_reset), (free_all_buffers),
-       (gst_mpeg2dec_alloc_buffer), (handle_sequence):
-       * ext/mpeg2dec/gstmpeg2dec.h:
-         The libmpeg2 user-allocated buffer management is awkward, 
-         to say the least. Hopefully this fixes things.
-
-2005-02-04  Andy Wingo  <wingo@pobox.com>
-
-       * gst/audioconvert/bufferframesconvert.c
-       (buffer_frames_convert_fixate): New function, fixates to 256
-       frames per buffer by default. (Much better than 1.)
-       (buffer_frames_convert_init): Set the fixate function for both src
-       and sink pad.
-       (buffer_frames_convert_link): After success setting nonfixed caps,
-       get the negotiated caps so we can know how many buffer-frames it
-       will be. No idea how this worked at all before.
-
-2005-02-05  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
-       (gst_mpeg2dec_close_decoder), (put_buffer), (check_buffer),
-       (free_buffer), (free_all_buffers), (gst_mpeg2dec_alloc_buffer),
-       (handle_sequence), (handle_picture):
-       * ext/mpeg2dec/gstmpeg2dec.h:
-         Rearrange buffer tracking and refcounting and refactor
-         a little for readability. 
-
-2005-02-04  Jan Schmidt  <thaytan@mad.scientist.com>
-       * sys/v4l/gstv4l.c: (plugin_init):
-       * sys/v4l/gstv4ljpegsrc.c: (gst_v4ljpegsrc_get_type),
-       (gst_v4ljpegsrc_base_init), (gst_v4ljpegsrc_class_init),
-       (gst_v4ljpegsrc_init), (gst_v4ljpegsrc_src_link),
-       (gst_v4ljpegsrc_getcaps), (gst_v4ljpegsrc_get):
-       * sys/v4l/gstv4ljpegsrc.h:
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_open), (gst_v4lsrc_src_link):
-       * sys/v4l/v4l_calls.h:
-       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_palette_name),
-       (gst_v4lsrc_get_fps):
-       * sys/v4l/v4lsrc_calls.h:
-         Add new v4ljpegsrc for handling the ov51x hacky "I'll give
-         you jpeg inside rgb frames" driver.
-         Don't error in the v4lsrc link function, just return 
-         REFUSED.
-
-2005-02-03  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/qcam/gstqcamsrc.c: (gst_qcamsrc_change_state),
-       (gst_qcamsrc_open):
-         Use GST_ELEMENT_ERROR, not g_warning, if open failed.
-
-2005-02-02  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/qtdemux/qtdemux.c: (qtdemux_video_caps):
-         Change caps on MJPEG-B so it doesn't interfere with MJPEG/JPEG.
-
-2005-02-02  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/raw1394/gstdv1394src.c: (gst_dv1394src_change_state):
-         Reset negotiated state on PAUSED->READY.
-
-2005-02-02  David Schleef  <ds@schleef.org>
-
-       * configure.ac: Put DEFAULT_AUDIOSINK in config.h and use
-       whereever possible.  (Fixes #165997)
-       * examples/capsfilter/capsfilter1.c: (main):
-       * examples/dynparams/filter.c: (create_ui):
-       * examples/seeking/cdparanoia.c: (get_track_info), (main):
-       * examples/seeking/chained.c: (main):
-       * examples/seeking/seek.c: (make_mod_pipeline), (make_dv_pipeline),
-       (make_wav_pipeline), (make_flac_pipeline), (make_sid_pipeline),
-       (make_vorbis_pipeline), (make_mp3_pipeline), (make_avi_pipeline),
-       (make_mpeg_pipeline), (make_mpegnt_pipeline):
-       * examples/seeking/spider_seek.c: (make_spider_pipeline):
-       * examples/switch/switcher.c: (main):
-       * ext/dv/demo-play.c: (main):
-       * ext/faad/gstfaad.c: (gst_faad_change_state):
-       * ext/mad/gstmad.c: (gst_mad_chain):
-       * ext/smoothwave/demo-osssrc.c: (main):
-       * gst-libs/gst/gconf/gconf.c: (gst_gconf_set_string),
-       (gst_gconf_render_bin_from_description),
-       (gst_gconf_get_default_audio_sink),
-       (gst_gconf_get_default_video_sink),
-       (gst_gconf_get_default_audio_src),
-       (gst_gconf_get_default_video_src),
-       (gst_gconf_get_default_visualization_element):
-       * gst/level/demo.c: (main):
-       * gst/level/plot.c: (main):
-       * gst/playback/gstplaybin.c: (gen_video_element),
-       (gen_audio_element):
-       * gst/playback/test.c: (gen_video_element), (gen_audio_element):
-       * gst/playondemand/demo-mp3.c: (setup_pipeline):
-       * gst/sine/demo-dparams.c: (main):
-       * gst/spectrum/demo-osssrc.c: (main):
-       * gst/speed/demo-mp3.c: (main):
-       * gst/volume/demo.c: (main):
-       * testsuite/embed/embed.c: (main):
-
-2005-02-02  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * gst/tcp/gsttcpclientsink.c: (gst_tcpclientsink_class_init),
-       (gst_tcpclientsink_finalize):
-       * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_class_init),
-       (gst_tcpclientsrc_finalize):
-       * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init),
-       (gst_tcpserversink_init), (gst_tcpserversink_finalize):
-       * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_class_init),
-       (gst_tcpserversrc_init), (gst_tcpserversrc_finalize):
-         Don't leak the hostname when shutting down.
-         In tcpserversrc, take a copy of the default hostname.
-
-2005-02-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/raw1394/gstdv1394src.c: (gst_dv1394src_iso_receive):
-         Set caps to systemstream=TRUE.
-
-2005-02-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * testsuite/Makefile.am:
-         Fix more OSX buildbots.
-
-2005-02-02  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         Don't send things to NULL PAD_PEERs
-
-       * gst/deinterlace/gstdeinterlace.c: (gst_deinterlace_chain):
-         Copy-on-write the incoming buffer.
-
-       * gst/mpegstream/gstdvddemux.h:
-       * gst/mpegstream/gstmpegclock.h:
-       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead),
-       (normal_seek), (gst_mpeg_demux_handle_src_event):
-       * gst/mpegstream/gstmpegdemux.h:
-       * gst/mpegstream/gstmpegpacketize.h:
-       * gst/mpegstream/gstmpegparse.c:
-       (gst_mpeg_parse_update_streaminfo), (gst_mpeg_parse_reset),
-       (gst_mpeg_parse_handle_discont), (gst_mpeg_parse_parse_packhead),
-       (gst_mpeg_parse_loop), (gst_mpeg_parse_get_rate),
-       (gst_mpeg_parse_convert_src), (gst_mpeg_parse_handle_src_query),
-       (gst_mpeg_parse_handle_src_event), (gst_mpeg_parse_change_state):
-       * gst/mpegstream/gstmpegparse.h:
-       * gst/mpegstream/gstrfc2250enc.h:
-          Various changes to the way time is computed that make seeking and
-         total time estimation much better here.
-         Use G_BEGIN/END_DECLS instead of __cplusplus
-
-       * gst/videocrop/gstvideocrop.c: (gst_video_crop_chain):
-         Use gst_buffer_stamp instead of only copying the TIMESTAMP
-
-2005-02-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/subparse/gstsubparse.c:
-         Fix OSX buildbot.
-
-2005-01-31  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * ext/theora/theoraenc.c: (theora_buffer_from_packet),
-       (theora_enc_chain), (theora_enc_change_state):
-       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_init),
-       (gst_vorbisenc_buffer_from_packet), (gst_vorbisenc_chain),
-       (gst_vorbisenc_change_state):
-       * ext/vorbis/vorbisenc.h:
-         Set granulepos and timestamp correctly for streams not
-         starting at 0, taking into account the initial delay.
-
-2005-01-31  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * gst/mpegstream/gstdvddemux.c:
-         Add audio/x-dts to audio pad template caps
-
-2005-01-30  David Schleef  <ds@schleef.org>
-
-       * ext/polyp/polypsink.c: (gst_polypsink_base_init),
-       (create_context), (gst_polypsink_link): Fix silly endianness
-       bug.  Add some debugging.  Remove float from caps; it doesn't
-       work.  Attempt to get remote audio working.
-
-2005-01-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/qtdemux/qtdemux.c: (qtdemux_video_caps):
-         Add 3IV2 fourcc.
-
-2005-01-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_add_stream), (swap_line),
-       (gst_avi_demux_invert), (gst_avi_demux_process_next_entry),
-       (gst_avi_demux_stream_data):
-       * gst/avi/gstavidemux.h:
-         Invert DIB images. Fixes #132341.
-
-2005-01-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
-       (gst_ffmpegcsp_chain):
-         D'oh, reference the palette data, not the palette structure.
-         Fixes color distortion in #132341.
-
-2005-01-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/videoscale/gstvideoscale.c: (gst_videoscale_link):
-         PAR can be non-fixed when not provided as argument (#162626).
-
-2005-01-29  David Moore  <dcm@acm.org>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
-       (gst_qtdemux_loop_header):
-         Re-apply patch from #142272 that allows non-seekable sources,
-         re-proposed by Daniel Drake <dsd@gentoo.org>.
-
-2005-01-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/rtp/gstrtpgsmenc.c: (gst_rtpgsmenc_init):
-         Use the src template for creating the src pad (#162330).
-
-2005-01-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * configure.ac:
-       * ext/musepack/Makefile.am:
-       * ext/musepack/gstmusepackdec.c: (gst_musepackdec_class_init),
-       (gst_musepackdec_init), (gst_musepackdec_dispose),
-       (gst_musepackdec_src_query), (gst_musepackdec_src_convert),
-       (gst_musepack_stream_init), (gst_musepackdec_loop),
-       (gst_musepackdec_change_state):
-       * ext/musepack/gstmusepackdec.cpp:
-       * ext/musepack/gstmusepackdec.h:
-       * ext/musepack/gstmusepackreader.c: (gst_musepack_reader_peek),
-       (gst_musepack_reader_read), (gst_musepack_reader_seek),
-       (gst_musepack_reader_tell), (gst_musepack_reader_get_size),
-       (gst_musepack_reader_canseek), (gst_musepack_init_reader):
-       * ext/musepack/gstmusepackreader.cpp:
-       * ext/musepack/gstmusepackreader.h:
-         Update to 1.1 API (#165446).
-
-2005-01-28  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/Makefile.am:
-         Unbreak buildbot.
-
-2005-01-28  Andy Wingo  <wingo@pobox.com>
-
-       * ext/dv/gstdvdec.c: Change the pixel aspect ratio of dvdec output
-       to reflect a different dubious internet source. Add a reference
-       and some commentary.
-
-2005-01-28  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gststreamselector.c: (gst_stream_selector_init),
-       (gst_stream_selector_get_caps), (gst_stream_selector_chain):
-       * gst/playback/gststreamselector.h:
-         Be more selective when we're redoing caps negotiation from
-         within the chain function on a stream change.
-
-2005-01-28  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * configure.ac:
-       * ext/Makefile.am:
-       * ext/amrnb/Makefile.am:
-       * ext/amrnb/amrnb.c: (plugin_init):
-       * ext/amrnb/amrnbdec.c: (gst_amrnbdec_get_type),
-       (gst_amrnbdec_base_init), (gst_amrnbdec_class_init),
-       (gst_amrnbdec_init), (gst_amrnbdec_link), (gst_amrnbdec_chain),
-       (gst_amrnbdec_state_change):
-       * ext/amrnb/amrnbdec.h:
-       * ext/amrnb/amrnbparse.c: (gst_amrnbparse_get_type),
-       (gst_amrnbparse_base_init), (gst_amrnbparse_class_init),
-       (gst_amrnbparse_init), (gst_amrnbparse_formats),
-       (gst_amrnbparse_querytypes), (gst_amrnbparse_query),
-       (gst_amrnbparse_handle_event), (gst_amrnbparse_reserve),
-       (gst_amrnbparse_loop), (gst_amrnbparse_state_change):
-       * ext/amrnb/amrnbparse.h:
-         Add support for AMR-NB (mobile phone audio format; #155163, #163286).
-       * gst/typefind/gsttypefindfunctions.c: (plugin_init):
-         Add AMR-NB/-WB raw formats.
-       * ext/alsa/gstalsa.c: (gst_alsa_link):
-         Keep valid time when changing format.
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
-       (qtdemux_parse_trak):
-         Add some more format-specific options (#140141, #143555, #155163).
-
-2005-01-28  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/matroska/matroska-demux.c:
-       (gst_matroska_demux_parse_blockgroup):
-         Fix logic error in timing of subtitle stream synchronization.
-       * gst/typefind/gsttypefindfunctions.c: (qt_type_find):
-         Add skip-chunk, which is found in kodak-camera streams.
-
-2005-01-27  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * po/LINGUAS:
-       * po/vi.po:
-         Adding Vietnamese translation (submitted by Clytie Siddall)
-
-2005-01-27  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstdecodebin.c: (try_to_link_1):
-         Use realpad for signal.
-
-2005-01-27  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/mad/gstid3demuxbin.c: (gst_id3demux_bin_base_init):
-         Fix category so decodebin picks it up.
-
-2005-01-27  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/mad/Makefile.am:
-       * ext/mad/gstid3demuxbin.c: (gst_id3demux_bin_get_type),
-       (gst_id3demux_bin_base_init), (gst_id3demux_bin_class_init),
-       (gst_id3demux_bin_init), (gst_id3demux_bin_remove_pad),
-       (found_type), (gst_id3demux_bin_change_state):
-       * ext/mad/gstid3tag.c: (gst_id3_tag_add_src_pad),
-       (gst_id3_tag_init), (gst_id3_tag_handle_event),
-       (gst_id3_tag_src_link), (gst_id3_tag_chain),
-       (gst_id3_tag_change_state), (plugin_init):
-       * ext/mad/gstmad.h:
-         Add id3demuxbin (which is a simple bin consisting of id3demux
-         and typefind), take over rank from id3demux, remove typefind
-         code from id3demux. Makes all broken mp3s that I know of work,
-         and thereby fixes #152688.
-
-2005-01-27  Edward Hervey  <bilboed@bilboed.com>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/mad/gstmad.c: (gst_mad_src_event):
-       * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_event):
-         Allow seeks on audio pad, make mad forward those (#164826).
-       * gst/audioscale/gstaudioscale.c: (gst_audioscale_chain):
-         Set duration (#165335).
-
-2005-01-27  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_init),
-       (gst_asf_demux_commit_taglist), (gst_asf_demux_process_comment),
-       (gst_asf_demux_process_ext_content_desc),
-       (gst_asf_demux_change_state), (gst_asf_demux_add_audio_stream),
-       (gst_asf_demux_add_video_stream), (gst_asf_demux_setup_pad):
-       * gst/asfdemux/gstasfdemux.h:
-         Improve metadata display, e.g. if the metadata comes before the
-         streams are loaded (which is perfectly valid).
-
-2005-01-27  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * tools/gst-launch-ext-m.m:
-         Fix AVI/ASF pipelines (#165340).
-
-2005-01-26  Amaury Jacquot  <sxpert@esitcom.org>
-       * ext/cairo/gsttextoverlay.c: include  string.h and strings.h to fix
-       build failure on amd64
-
-2005-01-26  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * ext/mad/gstid3tag.c: (mad_id3_parse_latin1_string),
-       (mad_id3_parse_comment_frame), (gst_mad_id3_to_tag_list):
-         Check environment variables GST_ID3V2_TAG_ENCODING,
-         GST_ID3_TAG_ENCODING and GST_TAG_ENCODING for a colon-separated
-         list of character encodings to force interpretation of non-unicode
-         strings stored in an ID3v2 tag to a particular encoding. If none
-         is specified, try to use current locale's encoding, then fall back
-         to ISO-8859-1 (which will always succeed). (Resolves #149274)
-       * gst/tags/gstid3tag.c: (gst_tag_from_id3_tag),
-       (gst_tag_extract_id3v1_string), (gst_tag_list_new_from_id3v1):
-         Check environment variables GST_ID3V1_TAG_ENCODING,
-         GST_ID3_TAG_ENCODING and GST_TAG_ENCODING for a colon-separated
-         list of character encodings to use in case a string encountered
-         in an ID3v1 tag is not valid UTF-8 already. If no encoding is
-         specified, try to use the current locale's encoding, then fall
-         back to ISO-8859-1 (which will always succeed).
-
-2005-01-25  Benjamin Otte  <otte@gnome.org>
-
-       * ext/mad/gstmad.c: (gst_mad_check_caps_reset), (gst_mad_chain):
-         - on half framerate, compute the rate in advance so the comparisons
-           don't compare wrong values
-         - don't use mad_synth/frame_mute anymore, this mirrors mad_decoder
-           behaviour
-         - don't use mad_header_decode anymore, mad_frame_decode does that
-           automatically
-         - when getting rid of consumed bytes, reset the stream's skiplen
-         (fixes #163867)
-
-2005-01-26  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_class_init)
-         Use 1/2 a second for default max_discont, as PES streams from DVB
-         seem to have larger spacings in the SCR. 
-         Fix a typo.
-
-2005-01-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c: (group_commit):
-         Notify delayed stream-info availability.
-
-2005-01-26  Jan Schmidt  <thaytan@mad.scientist.com>
-       * ext/a52dec/gsta52dec.c: (gst_a52dec_push),
-       (gst_a52dec_handle_event), (gst_a52dec_chain):
-       Add some debug output. Check that a discont has a valid
-       time associated.
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event),
-       (gst_alsa_sink_loop):
-       Ignore TAG events. A little extra debug for broken timestamps.
-       * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_init), (dvdnavsrc_loop),
-       (dvdnavsrc_change_state):
-       Ensure we send a discont to engage the link before we send any
-       other events.
-       * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_init),
-       (dvdreadsrc_finalize), (_close), (_open), (_seek_title),
-       (_seek_chapter), (seek_sector), (dvdreadsrc_get),
-       (dvdreadsrc_uri_get_uri), (dvdreadsrc_uri_set_uri):
-       Handle URI of the form dvd://title[,chapter[,angle]]. Currently only
-       dvd://title works in totem because typefinding sends a seek that ends
-       up going back to chapter 1 regardless.
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/mpeg2dec/gstmpeg2dec.h:
-       Output correct timestamps and handle disconts.
-       * ext/ogg/gstoggdemux.c: (get_relative):
-       Small guard against a null dereference.
-       * ext/pango/gsttextoverlay.c: (gst_textoverlay_finalize),
-       (gst_textoverlay_set_property):
-       Free memory when done. Don't call gst_event_filler_get_duration on
-       EOS events. Use GST_LOG and GST_WARNING instead of g_message and
-       g_warning.
-       * ext/smoothwave/gstsmoothwave.c: (gst_smoothwave_init),
-       (draw_line), (gst_smoothwave_dispose), (gst_sw_sinklink),
-       (gst_sw_srclink), (gst_smoothwave_chain):
-       Draw solid lines, prettier colours.
-       * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_init):
-       Add a default palette that'll work for some movies.
-       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_init),
-       (gst_dvd_demux_handle_dvd_event), (gst_dvd_demux_send_discont),
-       (gst_dvd_demux_send_subbuffer), (gst_dvd_demux_reset):
-       * gst/mpegstream/gstdvddemux.h:
-       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_discont),
-       (gst_mpeg_demux_parse_syshead), (gst_mpeg_demux_parse_pes):
-       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_init),
-       (gst_mpeg_parse_handle_discont), (gst_mpeg_parse_parse_packhead):
-       * gst/mpegstream/gstmpegparse.h:
-       Use PTM/NAV events when for timestamp adjustment when connected to 
-       dvdnavsrc. Don't use many discont events where one suffices.
-       * gst/playback/gstplaybasebin.c: (group_destroy),
-       (gen_preroll_element), (gst_play_base_bin_add_element):
-       * gst/playback/gstplaybasebin.h:
-       Make sure we remove subtitles from the same bin we put them in.
-       * gst/subparse/gstsubparse.c: (convert_encoding), (parse_subrip),
-       (gst_subparse_buffer_format_autodetect),
-       (gst_subparse_change_state):
-       Fix some memleaks and invalid accesses.
-       * gst/typefind/gsttypefindfunctions.c: (ogganx_type_find),
-       (oggskel_type_find), (cmml_type_find), (plugin_init):
-       Some typefind functions for Annodex v3.0 files
-       * gst/wavparse/gstwavparse.h:
-       GstRiffReadClass is the correct parent class.
-
-2005-01-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-media.c:
-       (gst_riff_create_video_caps_with_data):
-         Add extradata to huffyuv (fixes #165013).
-       * gst-libs/gst/riff/riff-read.c:
-       (gst_riff_read_strf_vids_with_data):
-         Fix extradata extraction if it is in the chunk size.
-
-2005-01-25  Edward Hervey  <bilboed@bilboed.com>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/effectv/gstquark.c: (gst_quarktv_class_init),
-       (gst_quarktv_change_state), (gst_quarktv_dispose):
-         Memory free'ing location fix (#164708).
-
-2005-01-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c: (group_commit),
-       (gen_preroll_element), (probe_triggered), (gen_source_element),
-       (setup_source), (gst_play_base_bin_change_state),
-       (gst_play_base_bin_add_element):
-         Don't block for streams.
-       * gst/playback/gststreaminfo.c: (stream_info_change_state),
-       (gst_stream_info_set_mute):
-         Use gst_pad_set_active_recursive.
-
-2005-01-25  Andy Wingo  <wingo@pobox.com>
-
-       * sys/v4l/gstv4lelement.c (gst_v4l_iface_supported): Fix compile
-       for #ifndef HAVE_XVIDEO.
-
-2005-01-24  Jeffrey C. Ollie
-
-       reviewed by: Maciej Katafiasz  <mathrick@freedesktop.org>
-
-       * ext/gsm/gstgsmdec.c: (gst_gsmdec_init), (gst_gsmdec_chain):
-       * ext/gsm/gstgsmdec.h:
-       * ext/gsm/gstgsmenc.c: (gst_gsmenc_init), (gst_gsmenc_chain):
-       * ext/gsm/gstgsmenc.h:
-       Fix rate to 8kHz as per spec, removes obscure errors when no rate
-       was given by property. Add proper buffer timestamps and offsets.
-
-2005-01-24  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-media.c:
-       (gst_riff_create_audio_caps_with_data):
-         Audio can be <8000Hz.
-
-2005-01-22  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_change_state):
-         Explicit state change to workaround refcount bugs.
-
-2005-01-22  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavimux.c: (gst_avimux_write_tag),
-       (gst_avimux_riff_get_avi_header):
-         Fix...
-
-2005-01-19  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_element_data),
-       (gst_riff_read_element_data):
-       * gst-libs/gst/riff/riff-read.h:
-         Add _peek version (req'ed in CDXA).
-       * gst/cdxaparse/gstcdxaparse.c: (gst_cdxaparse_init),
-       (gst_cdxaparse_loop):
-         Fix parsing in playbin.
-       * gst/playback/gstdecodebin.c: (close_pad_link):
-         Ignore current_ pads, they cause major annoyance.
-
-2005-01-19  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
-         Safety guard.
-
-2005-01-19  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavimux.c: (gst_avimux_write_tag):
-         Fix padding...
-
-2005-01-19  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/matroska/ebml-read.c: (gst_ebml_read_buffer):
-         Allow for 0-sized buffers. Fixes length query problems in
-         starwars.mkv from the testsuite.
-
-2005-01-19  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * gst/videobox/gstvideobox.c: (gst_video_box_copy_plane_i420),
-       (gst_video_box_i420), (gst_video_box_chain):
-         Fix row strides for I420 (fixes #163159)
-         
-2005-01-19  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead):
-         MPEG2 has a useful rate property, so we can actually use that.
-         For MPEG-1, continue using the bytes/time properties.
-
-2005-01-19  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-media.c:
-       (gst_riff_create_video_caps_with_data),
-       (gst_riff_create_video_template_caps):
-         Add intel-h263.
-
-2005-01-19  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/mad/gstmad.c: (gst_mad_check_caps_reset), (gst_mad_chain):
-         Fail if caps negotiation fails. Should fix #162184, and should
-         definately be in there regardless of it fixing the actual bug.
-       * gst/avi/gstavimux.c: (gst_avimux_get_type), (gst_avimux_init),
-       (gst_avimux_write_tag), (gst_avimux_riff_get_avi_header),
-       (gst_avimux_riff_get_avix_header),
-       (gst_avimux_riff_get_video_header),
-       (gst_avimux_riff_get_audio_header), (gst_avimux_write_index),
-       (gst_avimux_start_file), (gst_avimux_handle_event),
-       (gst_avimux_change_state):
-       * gst/avi/gstavimux.h:
-         Refactor structure writing to use GST_WRITE_UINT macros, add
-         metadata writing support.
-
-2005-01-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gststreaminfo.c: (gst_stream_info_dispose):
-         Elements may already be destroyed when this function is called.
-
-2005-01-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
-       (gst_qtdemux_loop_header), (gst_qtdemux_handle_esds):
-         More memory leak fixes (#149162).
-
-2005-01-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
-       (gst_qtdemux_add_stream):
-         Fix two memleaks.
-
-2005-01-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/faad/gstfaad.c: (gst_faad_srcgetcaps):
-         Argh...
-
-2005-01-17  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/faad/gstfaad.c: (gst_faad_srcgetcaps):
-         Fix off-by-one bug. Fixes warnings during playback of sincity.mp4
-         when fixating to six channels in Totem.
-
-2005-01-17  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * ext/dvdread/dvdreadsrc.c: (get_next_cell_for):
-         Fix compile warnings on Solaris 10 buildbot
-
-2005-01-17  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * ext/dvdread/dvdreadsrc.c: (_read):
-         Don't read beyond the last cell in a chapter (fixes 
-         invalid memory access)
-
-2005-01-17  Tim-Philipp Müller  <tim at centricular dot net>
-
-       * ext/dvdread/stream_labels.c:
-       (dvdreadsrc_get_audio_stream_labels):
-         Use NULL for an empty GList instead of g_list_alloc(); fix 
-         memory leaks; s/LCPM/LPCM/; use g_strdup_printf() instead 
-         of GString (easier to bulk free later)
-
-2005-01-17  Gergely Nagy  <algernon@bonehunter.rulez.org>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
-       (gst_ffmpeg_pixfmt_to_caps):
-         Fix BGRA32 caps (#164209).
-
-2005-01-17  Gergely Nagy  <algernon@bonehunter.rulez.org>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
-       (gst_ffmpeg_caps_to_pixfmt):
-         alpha_mask can be RGBA/ABGR. Fixes #164265.
-
-2005-01-17  Francis Labonte  <francis_labonte@hotmail.com>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/mpeg2dec/gstmpeg2dec.c: (crop_buffer),
-       (gst_mpeg2dec_alloc_buffer):
-       * ext/mpeg2dec/gstmpeg2dec.h:
-         Crop if decoding size is not the actual image size (#163676).
-
-2005-01-17  Steve Baker  <steve@stevebaker.org>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/typefind/gsttypefindfunctions.c: (aiff_type_find),
-       (svx_type_find), (sds_type_find), (ircam_type_find), (plugin_init):
-         Add libsndfile typefind functions (#163309).
-
-2005-01-17  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * tools/gst-launch-ext-m.m:
-         Add .aac, fix .m1v/.m2v (#163891).
-
-2005-01-17  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsaclock.c: (gst_alsa_clock_wait):
-         Sanity check, don't wait endlessly since the clock might not
-         actually run at this point (which is a deadlock). Fixes #164069.
-
-2005-01-16  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c: (probe_triggered):
-         Of course, only pause if group is done...
-
-2005-01-16  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c: (probe_triggered):
-         Thread safety.
-
-2005-01-16  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * ext/swfdec/gstswfdec.c: (gst_swfdec_change_state):
-         Don't return state change success when the parent
-         failed.
-
-2005-01-16  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavimux.c: (gst_avimux_handle_event):
-         Free events (fix memleak in #162905).
-
-2005-01-15  Gergely Nagy  <algernon@bonehunter.rulez.org>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
-       (gst_ffmpeg_caps_to_pixfmt):
-         Fix for depth = 15. Fixes #161675.
-
-2005-01-14  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_getcaps):
-         Set FPS correctly, even for webcams and the like.
-       * sys/v4l/v4l_calls.c: (gst_v4l_set_chan_norm):
-         Don error on setting while capturing.
-
-2005-01-14  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
-
-       * ext/dv/gstdvdec.c:
-       * gst/subparse/gstsubparse.c: (parse_mdvdsub):
-       * gst/y4m/gsty4mencode.c: (gst_y4mencode_sinkconnect):
-         I'm a bad boy. using /1001. to force C to do float division
-         and not integer division (as it did in my last commit)
-         Thanks to David I. Lehn for pointing this mistake.
-
-2005-01-14  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/v4l/gstv4lelement.c: (gst_v4l_iface_supported):
-         Revert Johan´s 1.35->1.36 since it breaks compat.
-
-2005-01-14  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
-
-       * ext/dv/gstdvdec.c:
-       * ext/libfame/gstlibfame.c:
-       * gst/subparse/gstsubparse.c: (parse_mdvdsub):
-       * gst/y4m/gsty4mencode.c: (gst_y4mencode_sinkconnect):
-          replace framerate aproximations by their real value
-          (24000/1001, 30000/1001, 60000/1001)
-          Finish fixing bug #164049
-
-2005-01-13  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/ogg/gstoggmux.c:
-         eos/bos debugging
-       * gst/tcp/gstmultifdsink.c:
-       * gst/tcp/gstmultifdsink.h:
-       * gst/tcp/gsttcp.c:
-       * gst/tcp/gsttcp.h:
-       * gst/tcp/gsttcpclientsink.c:
-       * gst/tcp/gsttcpclientsrc.c:
-       * gst/tcp/gsttcpserversink.c:
-       * gst/tcp/gsttcpserversrc.c:
-         improve reusability of elements after state changes and errors
-         make multifdsink throw away streamheaders when receiving new ones
-
-2005-01-13  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_rates_probe):
-         Fix for if items are already in list...
-
-2005-01-12  Benjamin Otte  <otte@gnome.org>
-
-       * gst/adder/gstadder.c: (gst_adder_loop):
-         fix adder a bit so it doesn't screw up with events as much anymore
-
-2005-01-12  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_link),
-       (pixbufscale_scale), (gst_pixbufscale_chain):
-       * ext/gdk_pixbuf/pixbufscale.h:
-         Incorporate changes from Tim-Philipp Mueller <t.i.m@orange.net>
-         to ensure rowstrides are calculated the same way as 
-         ffmpegcolorspace
-         Use gst_buffer_stamp instead of copying TIMESTAMP manually, so
-         that we pick up duration and offset also.
-
-2005-01-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavimux.c: (gst_avimux_class_init),
-       (gst_avimux_pad_unlink), (gst_avimux_release_pad):
-         Reusability fixes.
-
-2005-01-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_update),
-       (gst_alsa_mixer_get_volume), (gst_alsa_mixer_set_volume),
-       (gst_alsa_mixer_set_mute), (gst_alsa_mixer_set_record),
-       (gst_alsa_mixer_set_option), (gst_alsa_mixer_get_option):
-         Update flags when requested.
-
-2005-01-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_rates_probe):
-         Fix dmix.
-
-2005-01-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
-       (gst_play_base_bin_init), (gst_play_base_bin_dispose),
-       (probe_triggered), (new_decoded_pad), (gen_source_element),
-       (gst_play_base_bin_set_property), (gst_play_base_bin_get_property):
-       * gst/playback/gstplaybasebin.h:
-       * gst/playback/gstplaybin.c: (gst_play_bin_class_init),
-       (gst_play_bin_init), (group_switch), (remove_sinks), (setup_sinks),
-       (gst_play_bin_change_state):
-         Implement group-switch signal for use in apps to clear metadata
-         cache, clean up subtitle, add suburi property instead of # hack,
-         some error-out fixes.
-
-2005-01-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
-         Debug.
-       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_grab_frame):
-         If we got a state change in the _get handler, don't return success.
-
-2005-01-10  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
-
-       * ext/jpeg/gstjpegdec.c: (gst_jpegdec_my_output_message),
-       (gst_jpegdec_my_emit_message), (gst_jpegdec_init):
-         Make jpegdec quiet on MJPEG decoding
-       * gst/asfdemux/README:
-         Fix mimetypes for MJPEG and H263
-
-2005-01-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/theora/theoradec.c: (theora_dec_chain):
-         Fix broken code generation by gcc by swapping arguments.
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_src_query):
-         Fix \n in debug.
-
-2005-01-10  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
-
-       * TODO:
-         delete this file, it is by far outdated
-       * ext/alsa/gstalsa.1: remove
-       * ext/alsa/gstalsa.c: (add_rates), (add_channels), (gst_alsa_caps),
-       (gst_alsa_check_sample_rates), (gst_alsa_rates_probe),
-       (gst_alsa_get_caps):
-         Add HW probing for supported sample rates. Fixes #161704
-
-2005-01-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/audioscale/gstaudioscale.c: (gst_audioscale_chain):
-         Don't crash, biatch! :).
-
-2005-01-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/musepack/gstmusepackreader.cpp:
-       * gst/apetag/apedemux.c: (gst_ape_demux_stream_data):
-         Some work on tags - still doesn't work in playbin...
-       * gst/audioscale/gstaudioscale.c: (gst_audioscale_chain):
-         Handle events...
-
-2005-01-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/qtdemux/qtdemux.c: (qtdemux_parse_tree):
-         Also shove tags on kid pads.
-
-2005-01-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_use_event):
-         Don't bail on unknown events.
-       * gst/audioscale/gstaudioscale.c: (gst_audioscale_chain):
-         Don't crash on events before negotiation.
-       * gst/avi/gstavidemux.c: (gst_avi_demux_add_stream):
-         Send tags on pads, too.
-       * gst/playback/gststreamselector.c:
-       (gst_stream_selector_request_new_pad):
-         Forward events on first pad if no input was selected yet.
-
-2005-01-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c: (setup_substreams):
-         Don't disable streamtype if the stream doesn't exist, since
-         then playing a video after audio will disable both and nothing
-         will happen. Fixes the testsuite.
-
-2005-01-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/v4l/gstv4lxoverlay.c: (gst_v4l_xoverlay_interface_init),
-       (gst_v4l_xoverlay_set_xwindow_id):
-       * sys/v4l2/gstv4l2xoverlay.c: (gst_v4l2_xoverlay_interface_init),
-       (gst_v4l2_xoverlay_set_xwindow_id):
-         Add debug categories, fix overlay disabling.
-
-2005-01-10  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_class_init), (gst_alsa_get_caps):
-       * ext/alsa/gstalsa.h:
-         Add HW probing for period_count/size and buffer_size MIX/MAX
-         Adjust default/user defined value if out of bounds
-         Should fix bug #162024
-
-2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_handle_sink_event):
-         Fix warning (#161191).
-
-2005-01-09  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
-
-       * ext/dvdread/stream_labels.c:
-       (dvdreadsrc_get_audio_stream_labels):
-         Fix warning (init the good variable in switch default)
-
-2005-01-09  Koop Mast  <kwm@rainbow-runner.nl>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/tta/gstttaparse.c: (gst_tta_src_event):
-         Fix gcc-2.95 compile (#163485).
-
-2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * configure.ac:
-       * ext/flac/gstflacenc.c: (gst_flacenc_init),
-       (gst_flacenc_seek_callback), (gst_flacenc_write_callback),
-       (gst_flacenc_tell_callback), (gst_flacenc_chain),
-       (gst_flacenc_change_state):
-       * ext/flac/gstflacenc.h:
-         Update for API change in flac-1.1.1. Update requirement in
-         configure.ac. Fixes #162974.
-
-2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c: (group_destroy):
-         Remove hack to get rid of assert and get rid of unlinked
-         signals properly.
-
-2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c: (setup_source):
-         Set source to NULL so that resources are free'ed. Fixes issues
-         with playback of CDDA and similar device-accessing things.
-
-2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * testsuite/embed/Makefile.am:
-         test->noinst, fix make test in buildbot.
-
-2005-01-09  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
-
-       * ext/dvdread/stream_labels.c: new file
-       * ext/dvdread/stream_labels.h: new file
-       * ext/dvdread/Makefile.am:
-       * ext/dvdread/dvdreadsrc.c: (_seek_title):
-         Extract audio stream label from DVD IFO files.
-         It only dump them on the console for now, still have to
-         make playbin aware of them.
-
-2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c: (setup_source):
-         Fix hanging subs.
-
-2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_init),
-       (gen_preroll_element), (remove_groups), (setup_subtitle),
-       (gen_source_element), (setup_source):
-       * gst/playback/gstplaybasebin.h:
-         Multiple .sub files is just a stupid idea... Fix some threading
-         mistakes. Interestingly, external .sub files cause playbin to
-         hang, I don't know why... Parsing fixes contributed by François
-         Kooman <fkooman@tuxed.net>.
-
-2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * testsuite/embed/Makefile.am:
-         Fix buildbot.
-
-2005-01-09  Gergely Nagy  <algernon@bonehunter.rulez.org>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/libpng/gstpngenc.c: (gst_pngenc_class_init),
-       (gst_pngenc_init), (gst_pngenc_chain), (gst_pngenc_get_property),
-       (gst_pngenc_set_property):
-       * ext/libpng/gstpngenc.h:
-         Add compression level property (#163323).
-
-2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * configure.ac:
-       * examples/capsfilter/capsfilter1.c: (main):
-       * examples/seeking/spider_seek.c: (make_spider_pipeline):
-       * ext/dvdread/Makefile.am:
-       * ext/dvdread/demo-play:
-       * ext/dvdread/demo-play.c:
-       * gconf/gstreamer.schemas.in:
-       * gst-libs/gst/gconf/gconf.c:
-       * sys/v4l/TODO:
-       * testsuite/Makefile.am:
-       * testsuite/embed/Makefile.am:
-       * testsuite/embed/embed.c: (cb_expose), (main):
-         Remove all references to xvideosink, fix examples (#140845).
-       * gst/playback/gstplaybasebin.c: (group_destroy):
-         Apparently, disposal does not unlink - so do explicitely.
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
-         Add debug.
-
-2005-01-09  Maciej Katafiasz <mathrick@freedesktop.org>
-
-       * README: fix PKG_CONFIG_PATH instructions, what was there
-       previously was breaking default search path, not nice. 
-       Fixes #163358
-
-2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/audioscale/gstaudioscale.c: (gst_audioscale_init),
-       (gst_audioscale_chain):
-         %#^@^#@^@#^#@^#@^@#^@#^@#^@#^#@^#@^#@^@#^#@ fix seeking
-         when resampling - how the ^@$^!@^! is this possible?!?
-
-2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_change_state):
-         Reset variables on READY.
-       * gst/matroska/matroska-mux.c: (gst_matroska_mux_request_new_pad),
-       (gst_matroska_mux_loop):
-         Require data before writing header.
-
-2005-01-09  Francis Labonte  <francis_labonte@hotmail.com>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/mad/gstmad.c: (gst_mad_chain):
-         Don't call mad_stream_sync() directly after recovering sync.
-         Fixes #151661.
-
-2005-01-09  Martin Eikermann  <meiker@upb.de>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/snapshot/gstsnapshot.c: (gst_snapshot_class_init),
-       (snapshot_handler), (gst_snapshot_sinkconnect),
-       (gst_snapshot_chain):
-         Allocate resources when required, fix recursive signal emission
-         and fix caps. Fixes #161667.
-
-2005-01-09  Gergely Nagy  <algernon@bonehunter.rulez.org>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/libpng/gstpngdec.c: (gst_pngdec_src_getcaps),
-       (gst_pngdec_chain):
-         Handle only 8-bppc (bits-per-pixel-component) images, better
-         error handling and correct strides. Fixes #163177.
-       * ext/libpng/gstpngenc.c: (gst_pngenc_sinklink),
-       (gst_pngenc_chain):
-         Better error handling. Fixes #163348.
-
-2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_get_type),
-       (dvdnavsrc_uri_get_type), (dvdnavsrc_uri_get_protocols),
-       (dvdnavsrc_uri_get_uri), (dvdnavsrc_uri_set_uri),
-       (dvdnavsrc_uri_handler_init):
-         Add DVD-nav URI (dvdnav://) for Totem testing purposes.
-       * gst/playback/gstplaybasebin.c: (gen_source_element):
-         Add MMS to streaming URIs.
-
-2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_navigation_send_event):
-       * sys/xvimage/xvimagesink.c:
-       (gst_xvimagesink_navigation_send_event):
-         Check for pad availability before sending event.
-
-2005-01-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-plugins.spec.in:
-         Add subparse.
-
-2005-01-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * configure.ac:
-         Since we use functions from CVS, up requirement.
-
-2005-01-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/Makefile.am:
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
-       (group_destroy), (group_commit), (group_is_muted),
-       (gen_preroll_element), (add_stream), (unknown_type),
-       (probe_triggered), (preroll_unlinked), (mute_stream),
-       (silence_stream), (new_decoded_pad), (setup_substreams),
-       (setup_source), (get_active_source), (mute_group_type),
-       (muted_group_change_state), (set_active_source),
-       (gst_play_base_bin_set_property), (gst_play_base_bin_get_property),
-       (play_base_eos), (gst_play_base_bin_change_state):
-       * gst/playback/gstplaybasebin.h:
-       * gst/playback/gstplaybin.c: (add_sink), (setup_sinks):
-       * gst/playback/gststreaminfo.c: (gst_stream_info_class_init),
-       (gst_stream_info_dispose), (stream_info_mute_pad),
-       (stream_info_change_state), (gst_stream_info_set_mute):
-       * gst/playback/gststreamselector.c: (gst_stream_selector_get_type),
-       (gst_stream_selector_base_init), (gst_stream_selector_class_init),
-       (gst_stream_selector_init), (gst_stream_selector_dispose),
-       (gst_stream_selector_get_linked_pad),
-       (gst_stream_selector_get_caps), (gst_stream_selector_link),
-       (gst_stream_selector_get_linked_pads),
-       (gst_stream_selector_request_new_pad), (gst_stream_selector_chain):
-       * gst/playback/gststreamselector.h:
-         Adding stream selection support plus required properties for
-         applications to use this. Fully fixes #100931.
-
-2005-01-08  Benjamin Otte  <otte@gnome.org>
-
-       * gst/games/gstpuzzle.c: (nav_event_handler):
-         - handle nav events differently: forward every event no matter if it
-           was handled or not.
-         - translate events
-         You can now cheat by using navigationtest ! puzzle and moving the
-         mouse close to the edge of a tile. ;)
-
-2005-01-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * configure.ac:
-       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_new):
-       * ext/ogg/gstogmparse.c: (gst_ogm_text_parse_get_type),
-       (gst_ogm_text_parse_base_init), (gst_ogm_text_parse_init),
-       (gst_ogm_parse_get_sink_querytypes), (gst_ogm_parse_sink_convert),
-       (gst_ogm_parse_sink_query), (gst_ogm_parse_chain),
-       (gst_ogm_parse_plugin_init):
-       * ext/pango/gsttextoverlay.c: (gst_textoverlay_linkedpads),
-       (gst_textoverlay_link), (gst_textoverlay_getcaps),
-       (gst_textoverlay_event), (gst_textoverlay_video_chain),
-       (gst_textoverlay_loop), (gst_textoverlay_init), (plugin_init):
-       * ext/pango/gsttextoverlay.h:
-       * gst/matroska/matroska-demux.c: (gst_matroska_demux_add_stream),
-       (gst_matroska_demux_handle_seek_event),
-       (gst_matroska_demux_sync_streams),
-       (gst_matroska_demux_parse_blockgroup),
-       (gst_matroska_demux_subtitle_caps),
-       (gst_matroska_demux_plugin_init):
-       * gst/matroska/matroska-ids.h:
-       * gst/playback/gstdecodebin.c: (close_pad_link):
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_init),
-       (gen_preroll_element), (remove_groups), (add_stream),
-       (new_decoded_pad), (setup_subtitles), (gen_source_element),
-       (setup_source):
-       * gst/playback/gstplaybasebin.h:
-       * gst/playback/gstplaybin.c: (gen_text_element), (setup_sinks):
-       * gst/subparse/Makefile.am:
-       * gst/subparse/gstsubparse.c: (gst_subparse_get_type),
-       (gst_subparse_base_init), (gst_subparse_class_init),
-       (gst_subparse_init), (gst_subparse_formats),
-       (gst_subparse_eventmask), (gst_subparse_event),
-       (gst_subparse_handle_event), (convert_encoding), (get_next_line),
-       (parse_mdvdsub), (parse_mdvdsub_init), (parse_subrip),
-       (parse_subrip_deinit), (parse_subrip_init), (parse_mpsub),
-       (parse_mpsub_deinit), (parse_mpsub_init),
-       (gst_subparse_buffer_format_autodetect),
-       (gst_subparse_format_autodetect), (gst_subparse_loop),
-       (gst_subparse_change_state), (gst_subparse_type_find),
-       (plugin_init):
-       * gst/subparse/gstsubparse.h:
-       * gst/typefind/gsttypefindfunctions.c: (ogmtext_type_find),
-       (plugin_init):
-         Add subtitle support, .sub parser (supports SRT and MPsub),
-         OGM text support, Matroska UTF-8 text support, deadlock fixes
-         all over the place, subtitle awareness in decodebin/playbin
-         and some fixes to textoverlay to handle subtitles in a stream
-         correctly. Fixes #100931.
-
-2005-01-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_src_query):
-         Check for pad availability before doing a query on it.
-
-2005-01-08  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
-
-       * ext/dv/gstdvdec.c:
-         really fix bpp24/32 dvdec caps (classic rgba indeed)
-       * gst/asfdemux/gstasfdemux.c:
-       (gst_asf_demux_process_ext_content_desc):
-         don't send text tags if they are empty (bis repetita)
-
-2005-01-08  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
-
-       * ext/dv/gstdvdec.c:
-        remove unneeded comment from dvdec
-         (related to DV 4CC codes in AVI files)
-         moved them in gstreamer/docs/random/mimetypes
-       * gst/asfdemux/gstasfdemux.c:
-       (gst_asf_demux_process_ext_content_desc):
-        don't send text tags if they are empty
-        fix mem leak on error path
-       * gst/ffmpegcolorspace/avcodec.h:
-       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
-       (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_caps_to_pixfmt),
-       (gst_ffmpegcsp_avpicture_fill):
-       * gst/ffmpegcolorspace/imgconvert.c: (img_get_alpha_info):
-       * gst/ffmpegcolorspace/imgconvert_template.h:
-        adds BGR32 and BGRA32 to ffmpegcolorspace
-         (still bad colors, fixing it on next commit)
-         helps with dvdec outputing BGR32
-
-2005-01-08  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
-
-       * ext/dv/gstdvdec.c:
-        Fix audio caps i just broke (missing ',')
-       * gst/matroska/matroska-mux.c: (gst_matroska_mux_get_type),
-       (gst_matroska_mux_reset):
-        Fix typo + add FIXME about old "x-gst-metadata" crap
-
-2005-01-07  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
-
-       * ext/dv/demo-play.c: (main):
-        xvideosink -> xvimagesink
-       * ext/dv/gstdvdec.c:
-        change rgb 32/32 caps to 24/32 (no alpha)
-        change nb of channels to be a list (2 or 4, not 2)
-        change sample rate to be a list (32, 44.1, 48 kHz) not a range
-       * gst/asfdemux/gstasfdemux.c:
-       (gst_asf_demux_process_ext_content_desc):
-        Add 'date/year' to extracted metadata list
-
-2005-01-07  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_fixate):
-         The return value of fixate_to does not imply that the requested
-         value was set, so don't assume.
-
-2005-01-07  Gergely Nagy  <algernon@bonehunter.rulez.org>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/libpng/gstpngdec.c:
-       * ext/libpng/gstpngenc.c: (gst_pngenc_base_init),
-       (gst_pngenc_sinklink), (gst_pngenc_init), (gst_pngenc_chain):
-       * ext/libpng/gstpngenc.h:
-         Alpha support (encoder; #163161), mime fixage.
-
-2005-01-07  Sebastien Cote  <sc5@hermes.usherb.ca>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/faac/gstfaac.c: (gst_faac_outputformat_get_type),
-       (gst_faac_class_init), (gst_faac_init), (gst_faac_srcconnect),
-       (gst_faac_set_property), (gst_faac_get_property):
-       * ext/faac/gstfaac.h:
-         Allow for ADTS output (#153434).
-
-2005-01-07  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/v4l2/gstv4l2src.c: (gst_v4l2src_getcaps):
-         Fix against template (#150576).
-
-2005-01-06  Benjamin Otte  <otte@gnome.org>
-
-       * gst/games/gstpuzzle.c: (draw_puzzle):
-         don't draw a puzzle if either width or height of tiles would be 0.
-
-2005-01-06  Benjamin Otte  <otte@gnome.org>
-
-       * gst/games/gstpuzzle.c: (gst_puzzle_get_type),
-       (gst_puzzle_class_init), (gst_puzzle_finalize):
-         no memleaks, please
-       (gst_puzzle_create), (gst_puzzle_init),
-       (gst_puzzle_set_property), (gst_puzzle_setup):
-         change initialization code around so we don't reshuffle on resize
-       (draw_puzzle):
-         fix another stupid typo
-
-2005-01-06  Benjamin Otte  <otte@gnome.org>
-
-       * gst/games/gstvideoimage.c: (copy_hline_YUY2):
-         fix stupid typo that borked copying on YUY2
-
-2005-01-06  Benjamin Otte  <otte@gnome.org>
-
-       * gst/games/gstpuzzle.c: (draw_puzzle):
-         fix edges when image sizes aren't multiples of tile sizes
-
-2005-01-06  Benjamin Otte  <otte@gnome.org>
-
-       * gst/games/gstpuzzle.c: (gst_puzzle_base_init):
-         make RGB endianness work correctly
-       (gst_puzzle_show), (gst_puzzle_swap), (gst_puzzle_move):
-         refactor and fix race with initial shuffling
-       (nav_event_handler):
-         allow using the mouse to puzzle
-       (draw_puzzle):
-         insist on tiles having width and height as multiples of 4 to get
-         clean YUV image handling
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
-       (gst_xvimagesink_handle_xevents), (gst_xvimagesink_buffer_alloc):
-         s/DEBUG/LOG/ for common messages
-       (gst_xvimagesink_navigation_send_event):
-         fix mouse event translation to not include screen PAR
-       * sys/ximage/ximagesink.c: (gst_ximagesink_navigation_send_event):
-         fix mouse event translation to actually work
-
-2005-01-06  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
-
-       * gst/asfdemux/gstasfdemux.c:
-       (gst_asf_demux_process_ext_content_desc):
-        Extract TrackNumber metadata + clean up code
-       * gst/games/gstvideoimage.c: (gst_video_image_draw_rectangle):
-        Hope this is the good fix (var used unitialised)
-
-2005-01-06  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/faad/gstfaad.c: (gst_faad_chain):
-         Only increment timestamp if it's valid. Fixes raw AAC streams.
-
-2005-01-06  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * configure.ac:
-       * gst/games/Makefile.am:
-       * gst/games/gstpuzzle.c:
-         add a puzzle game with...
-       * gst/games/gstvideoimage.c:
-       * gst/games/gstvideoimage.h:
-         ... full colorspace support (that includes YUV9 and RGB16)) stolen
-         from videotestsrc and made into something that would be a nice
-         library for a lot of other plugins.
-
-2005-01-06  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
-
-       * configure.ac:
-        don't compile faad plugin if a RC of 2.0 is found
-        Fixes #155346 (and FC1 buildbot)
-       * gst/asfdemux/gstasfdemux.c:
-       (gst_asf_demux_process_ext_content_desc):
-        try to make Solaris compiler happier
-
-2005-01-06  Paul Jack  <pjack@sfaf.org>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/snapshot/gstsnapshot.c: (gst_snapshot_class_init):
-         Fix segfault (#161667).
-
-2005-01-05  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_getcaps):
-         Fix framerate reporting.
-
-2005-01-05  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
-
-       * gst-libs/gst/riff/riff-ids.h:
-       * gst/wavenc/riff.h:
-        Add AMR (VBR and CBR) ids to riff.h audio codec list
-       * gst/asfdemux/gstasfdemux.c:
-       (gst_asf_demux_process_ext_content_desc),
-       (gst_asf_demux_process_object):
-         Retrieve more tags from ASF files (Genre, AlbumTitle, Artist)
-
-2005-01-05  Martin Eikermann  <meiker@upb.de>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_class_init),
-       (gst_dvd_demux_handle_discont):
-       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_class_init),
-       (gst_mpeg_demux_handle_discont):
-         Recreate pads on new-media (#160730).
-       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_new_pad):
-         Send discont even if manager changes timestamps (#161929).
-
-2005-01-05  Sebastien Cote  <sc5@hermes.usherb.ca>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/resample/resample.c: (gst_resample_sinc_ft_s16):
-         Fix invalid memory access (#159211).
-
-2005-01-05  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * examples/gstplay/player.c: (main):
-         Don't iterate.
-       * examples/seeking/seek.c: (fixate), (make_playerbin_pipeline):
-         Add visualizations.
-       * ext/a52dec/gsta52dec.c: (gst_a52dec_push),
-       (gst_a52dec_handle_frame):
-         Set duration.
-       * ext/dvdnav/gst-dvd:
-         Add audioconvert. Fixes #161325.
-       * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_get):
-         Explicitely case to gint64. Possible valgrind error.
-       * gst-libs/gst/play/play.c: (caps_set), (setup_size),
-       (gst_play_tick_callback), (gst_play_change_state),
-       (gst_play_dispose), (gst_play_init), (gst_play_class_init),
-       (gst_play_set_location), (gst_play_get_location),
-       (gst_play_seek_to_time), (gst_play_set_data_src),
-       (gst_play_set_video_sink), (gst_play_set_audio_sink),
-       (gst_play_set_visualization), (gst_play_connect_visualization),
-       (gst_play_get_framerate), (gst_play_get_all_by_interface),
-       (gst_play_new):
-         Use playbin. Fixes #139749 and #147744.
-       * gst/apetag/apedemux.c: (gst_ape_demux_parse_tags):
-         Add genre tag.
-       * gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type),
-       (audioscale_get_type), (gst_audioscale_base_init),
-       (gst_audioscale_class_init), (gst_audioscale_expand_caps),
-       (gst_audioscale_getcaps), (gst_audioscale_fixate),
-       (gst_audioscale_link), (gst_audioscale_get_buffer),
-       (gst_audioscale_decrease_rate), (gst_audioscale_increase_rate),
-       (gst_audioscale_init), (gst_audioscale_dispose),
-       (gst_audioscale_chain), (gst_audioscale_set_property),
-       (gst_audioscale_get_property), (plugin_init):
-         Indent properly.
-       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_private):
-         Fix LPCM.
-       * gst/qtdemux/qtdemux.c: (qtdemux_parse_udta),
-       (qtdemux_tag_add_str), (qtdemux_tag_add_num),
-       (qtdemux_tag_add_gnre), (qtdemux_video_caps):
-         Add more metadata (fixes #162656).
-
-2005-01-05  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-         back to cvs
-
-=== release 0.8.7 ===
-
-2005-01-05  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-         releasing 0.8.7, "Hyperspace"
-
-2005-01-05  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       patch by: Tim-Philipp Müller  <t.i.m@zen.co.uk>
-
-       * gst/playback/gstplaybasebin.c:
-        Fix for #162924 - free caps after use, not before
-
-2005-01-04  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       patch by: Ronald Bultje <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c:
-       * gst/wavparse/gstwavparse.c:
-         Fix for #154773 - fixes playback of small .wav files
-
-2005-01-03  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       patch by: Ronald Bultje <rbultje@ronald.bitfreak.net>
-
-       * gst/audioscale/gstaudioscale.c:
-         Fix for #162819 - make audioscale reusable
-         Fixes playback of more than one file with playbin/totem
-
-2004-12-29  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/ffmpegcolorspace/avcodec.h:
-       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
-       * gst/ffmpegcolorspace/imgconvert.c:
-         clean up the mess that made me cry and avoid needless duplication
-
-2004-12-29  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/ffmpegcolorspace/imgconvert.c:
-         give some indication of why we're segfaulting
-
-2004-12-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * configure.ac:
-         Fix indentation, fix v4l2 plugin detection.
-       * ext/Makefile.am:
-         Fix libmms location (Maciej, use diff -u!).
-       * ext/alsa/gstalsa.c: (gst_alsa_init):
-         Initialize caps cache to NULL.
-       * gst/playback/gstplaybin.c: (gst_play_bin_change_state):
-         Only change state on audiosink if it exists.
-
-2004-12-28  Maciej Katafiasz  <mathrick@mathrick.org>
-
-       * gst/matroska/matroska-demux.c:
-       * gst/matroska/matroska-ids.h:
-       * gst/matroska/matroska-demux.h:
-       Fix Vorbis streams failing to decode in some files, where cluster_time
-       isn't 0, because then it doesn't send codec_priv before actual data.
-       Remove time-based test and replace it with marker set on beginning of
-       new stream
-
-2004-12-28  David Schleef  <ds@schleef.org>
-
-       Merge patch from Ronald fixing problems with streaming
-       text.
-       * ext/cairo/gstcairo.c: (plugin_init):
-       * ext/cairo/gsttextoverlay.c: (gst_textoverlay_render_text),
-       (gst_text_overlay_blit_1), (gst_text_overlay_blit_sub2x2),
-       (gst_textoverlay_video_chain), (gst_textoverlay_loop),
-       (gst_textoverlay_font_init), (gst_textoverlay_init),
-       (gst_textoverlay_set_property):
-       * ext/cairo/gsttextoverlay.h:
-
-2004-12-27  David Schleef  <ds@schleef.org>
-
-       * ext/cairo/gsttextoverlay.c: (gst_textoverlay_render_text),
-       (gst_text_overlay_blit_1), (gst_text_overlay_blit_sub2x2),
-       (gst_textoverlay_video_chain), (gst_textoverlay_loop),
-       (gst_textoverlay_font_init), (gst_textoverlay_init),
-       (gst_textoverlay_set_property): Improvements to actually
-       render text as white on black outline on video, including
-       font selection and horizontal/vertical alignment.  (Ronald's
-       christmas present)
-       * ext/cairo/gsttextoverlay.h:
-
-2004-12-26  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
-
-       * ext/ogg/gstogg.c:
-       * ext/ogg/gstogmparse.c:
-         fix ogm[audio/video]parse plugin registration
-         (riff won't load if bytestream is already loaded)
-
-2004-12-24  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/audioconvert/gstchannelmix.c:
-         fix for GLIB < 2.4
-
-2004-12-24  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * Makefile.am:
-       * configure.ac:
-         disable docs again until it actually passes make distcheck.
-
-2004-12-24  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/qtdemux/qtdemux.c: (qtdemux_type_get), (qtdemux_audio_caps):
-       * gst/typefind/gsttypefindfunctions.c: (q3gp_type_find),
-       (plugin_init):
-         Add 3GP (variables name Q3GP because they can't start with a
-         number). Add samr audio fourcc (used in .3gp files), decoder
-         is work in progress. Also do a GST_WARNING instead of ERROR
-         in case of unknown nodes, to decrease output.
-
-2004-12-24  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * Makefile.am:
-         really fix dist
-
-2004-12-23  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-       * ext/speex/gstspeexdec.h:
-       * ext/speex/gstspeexenc.h:
-         Fixes #158382.  Make speex plugin compatible with both 1.0 and 1.1.
-         Fix detection code in configure.ac
-
-2004-12-23  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/matroska/matroska-demux.c:
-       (gst_matroska_demux_parse_blockgroup):
-         Save position, so that queries give proper return values. Don't
-         know how this could ever have worked before...
-
-2004-12-23  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-         Put additional LAME check inside the conditional.  Fixes #152339
-
-2004-12-23  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index),
-       (gst_avi_demux_stream_scan):
-         Add some more debug. Fix logic error when setting movi offset
-         while reading index.
-
-2004-12-23  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index),
-       (gst_avi_demux_stream_scan), (gst_avi_demux_handle_seek),
-       (gst_avi_demux_process_next_entry):
-         Add some debugging. Better detection of broken indexes and the
-         accompanying index recovery. No infinite loops on state changes
-         when we're still in our loopfunction.
-
-2004-12-22  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * configure.ac:
-         Fix up.
-
-2004-12-22  Archana Shah  <archana.shah@wipro.com>
-
-       Reviewed by:  Ronald S. Bultje <rbultje@ronald.bitfreak.net>
-
-       * sys/sunaudio/gstsunmixer.c: (gst_sunaudiomixer_set_volume):
-         Normalizing the value before setting
-       (gst_sunaudiomixer_get_volume):
-         Normalizing the value after getting. Fixes bug# 161980
-
-2004-12-22  Christian Fredrik Kalager Schaller  <uraeus@gnome.org>
-
-       * Makefile.am: Make sure docs gets disted
-       * docs/Makefile.am: Make sure all needed files get disted
-       * gst-plugins.spec.in: latest updates
-
-2004-12-22  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_add_element):
-       Revert patch 1.38 as clock distribution over schedulers does
-       not work correcly in the core yet.
-
-2004-12-21  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
-
-       * sys/oss/README: remove this file, which predates my birth
-         (and which content is by far outdated)
-
-2004-12-20  Stefan Kost  <ensonic@users.sf.net>
-
-       * Makefile.am:
-       * configure.ac:
-       * docs/Makefile.am:
-       * docs/libs/Makefile.am:
-       * docs/libs/gst-plugins-libs-docs.sgml:
-       * docs/libs/gst-plugins-libs-sections.txt:
-       * docs/libs/tmpl/gstgconf.sgml:
-       * docs/upload.mak:
-       * docs/version.entities.in:
-         Added boilerplate gtk-doc files for plugin-libs documentation.
-
-2004-12-19  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
-
-       * gst/auparse/gstauparse.c: fix int and float audio caps
-
-2004-12-19  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/v4l/gstv4lelement.c: (gst_v4l_iface_supported):
-       * sys/v4l2/gstv4l2element.c: (gst_v4l2_iface_supported):
-         g_assert() can be a macro, don't use #ifdef inside it.
-
-2004-12-19  Edward Hervey  <bilboed@bilboed.com>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/videorate/gstvideorate.c: (gst_videorate_blank_data),
-       (gst_videorate_init), (gst_videorate_chain),
-       (gst_videorate_change_state):
-         Event handling (fixes #159986).
-
-2004-12-19  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-media.c:
-       (gst_riff_create_video_caps_with_data):
-         Add BLZ0 (Blizzard's version of DivX) fourcc.
-
-2004-12-18  David Schleef  <ds@schleef.org>
-
-       * gst/tta/gstttadec.c: (gst_tta_dec_link): And yet another
-       portability fix.
-
-2004-12-18  David Schleef  <ds@schleef.org>
-
-       * gst/tta/ttadec.h: Disable some header code that isn't used
-       and clearly isn't portable.
-
-2004-12-18  David Schleef  <ds@schleef.org>
-
-       * gst/ffmpegcolorspace/imgconvert.c: (get_pix_fmt_info),
-       (avcodec_get_chroma_sub_sample), (avcodec_get_pix_fmt_name),
-       (avcodec_get_pix_fmt), (avpicture_layout),
-       (avcodec_get_pix_fmt_loss), (avg_bits_per_pixel), (img_copy),
-       (get_convert_table_entry), (img_convert), (img_get_alpha_info):
-       Fix code to not use GCC extensions (and c99 extensions that
-       Forte does not like.)
-
-2004-12-19  Tim-Philipp Müller  <t.i.m@zen.co.uk>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/deinterlace/gstdeinterlace.c: (gst_deinterlace_link),
-       (gst_deinterlace_chain):
-         Rowstride fixes. Fixes #161039.
-       * gst/videocrop/gstvideocrop.c: (gst_video_crop_init),
-       (gst_video_crop_get_property), (gst_video_crop_add_to_struct_val),
-       (gst_video_crop_getcaps), (gst_video_crop_link),
-       (gst_video_crop_i420), (gst_video_crop_chain),
-       (gst_video_crop_change_state):
-         Rework of negotiation. Actually works now. Fixes #158650.
-
-2004-12-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/matroska/matroska-demux.c: (gst_matroska_ebmlnum_sint):
-         That was very stupid.
-
-2004-12-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/matroska/matroska-demux.c:
-       (gst_matroska_demux_parse_blockgroup):
-         Fix possible crasher.
-
-2004-12-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/matroska/matroska-demux.c: (gst_matroska_ebmlnum_uint),
-       (gst_matroska_ebmlnum_sint), (gst_matroska_demux_parse_blockgroup):
-         Lace sizes can be zero.
-
-2004-12-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/musepack/gstmusepackdec.cpp:
-         Fetch error return values. Fixes #161624.
-       * gst/apetag/apedemux.c: (gst_ape_demux_stream_data):
-         Really EOS.
-
-2004-12-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index):
-         Work for truncated (unfinished download etc.) files. Fixes #160514.
-
-2004-12-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
-         Fix for integer overflow. Makes #156001 not crash. Probably masks
-         the real bug.
-
-2004-12-17  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/ac3parse/gstac3parse.c: (plugin_init):
-         Parsers never have ranks. Fixes #159651.
-
-2004-12-17  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst/playback/gstdecodebin.c: (compare_ranks):
-         make sure the facotries are ordered the same every time even if they
-         have the same rank by using the name
-       * gst/playback/gstdecodebin.c: (find_compatibles):
-         make sure we don't add factories to the list twice
-
-2004-12-16  David Schleef  <ds@schleef.org>
-
-       * configure.ac: look for musepack headers as musepack/*.h
-       (fixes #159847)
-       * ext/musepack/gstmusepackdec.h: use <musepack/*.h>
-       * ext/musepack/gstmusepackreader.h: same
-
-2004-12-17  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-read.c:
-       (gst_riff_read_strf_auds_with_data):
-         Read extradata correctly (fixes #155879).
-
-2004-12-16  David Schleef  <ds@schleef.org>
-
-       * gst/audioscale/gstaudioscale.c: allow passthru of >2 channel
-       audio.  does _not_ attempt or allow conversion unless channels
-       is 1 or 2.
-
-2004-12-16  Christian Fredrik Kalager Schaller  <uraeus@gnome.org>
-
-       * tools/gst-launch-ext-m.m: fix mpeg and vob pipelines
-
-2004-12-16  David Schleef  <ds@schleef.org>
-
-       * gst/audioscale/gstaudioscale.c: the resample library only
-       handles 1 or 2 channels.  Change caps to compensate.
-
-2004-12-16  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/matroska/matroska-demux.c: (aac_rate_idx), (aac_profile_idx),
-       (gst_matroska_demux_audio_caps):
-         Some MPEG-AAC hacks, because else it doesn't work...
-
-2004-12-16  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-media.c:
-       (gst_riff_create_video_caps_with_data),
-       (gst_riff_create_video_template_caps):
-         Add h264.
-
-2004-12-16  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/audio/Makefile.am:
-         Try to fix buildbot.
-
-2004-12-16  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/tcp/gstmultifdsink.c:
-         Clean up and uniformize debugging.
-
-2004-12-16  Edward Hervey  <bilboed@bilboed.com>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_class_init),
-       (gst_dvd_demux_reset), (gst_dvd_demux_change_state):
-       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_reset),
-       (gst_mpeg_demux_change_state):
-         Reset on ready. Fixes 160276.
-
-2004-12-16  Sebastien Cote  <sc5@hermes.usherb.ca>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
-       (gst_ffmpegcsp_pad_link):
-         Fix memleak (#154815).
-
-2004-12-16  James Bowes  <bowes@cs.dal.ca>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/musicbrainz/gsttrm.c: (gst_musicbrainz_class_init),
-       (gst_musicbrainz_init), (gst_musicbrainz_chain),
-       (gst_musicbrainz_set_property), (gst_musicbrainz_get_property):
-       * ext/musicbrainz/gsttrm.h:
-         Add support for using a proxy server when getting a trm id from
-         the MusicBrainz database (#149613).
-
-2004-12-16  Christophe Fergeau  <teuf@gnome.org>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstdecodebin.c: (new_pad), (close_link):
-       * gst/playback/gstplaybasebin.c: (new_decoded_pad):
-         Fix memleaks (#157233).
-
-2004-12-16  Sebastien Cote  <sc5@hermes.usherb.ca>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/resample/resample.c: (gst_resample_close):
-       * gst-libs/gst/resample/resample.h:
-       * gst/audioscale/gstaudioscale.c:
-         Fix memleak (#159215).
-
-2004-12-16  Toni Willberg  <toniw@iki.fi>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/oss/gstosselement.c: (gst_osselement_probe_caps):
-       * sys/oss/oss_probe.c: (main):
-         Check for mono/stereo support (similar to samplerate probing),
-         fixes #159433. Also add missing copyright header to oss_probe.c.
-
-2004-12-15  David Schleef  <ds@schleef.org>
-
-       * configure.ac: add audioresample and cairo plugins.  Remove
-       HAVE_MMX stuff, because it's not used.
-       * ext/Makefile.am: same
-       * ext/audioresample/Makefile.am: You are not ready for an
-       audio resampling element based on audioresample.
-       * ext/audioresample/gstaudioresample.c:
-       * ext/audioresample/gstaudioresample.h:
-       * ext/cairo/Makefile.am: You are not ready for overlay elements
-       based on cairo.  Don't look too closely, these elements kinda
-       suck right now.
-       * ext/cairo/gstcairo.c: new
-       * ext/cairo/gsttextoverlay.c: new
-       * ext/cairo/gsttextoverlay.h: new
-       * ext/cairo/gsttimeoverlay.c: new
-       * ext/cairo/gsttimeoverlay.h: new
-       * gst-libs/gst/media-info/media-info-priv.h: fix compile
-       problem with compilers that don't support variadic macros.
-
-2004-12-15  Balamurali Viswanathan  <balamurali.viswanathan@wipro.com>
-
-       Reviewed by:  David Schleef  <ds@schleef.org>
-
-       * sys/sunaudio/gstsunaudio.c: (plugin_init):  Apply patch from
-       Bala, registering sunaudiosrc (oops!), and cleaning up code a
-       bit.  Also ran indent-gst.
-       * sys/sunaudio/gstsunaudiosrc.c: (gst_sunaudiosrc_init),
-       (gst_sunaudiosrc_change_state), (gst_sunaudiosrc_get),
-       (gst_sunaudiosrc_setparams):
-
-2004-12-14  David Schleef  <ds@schleef.org>
-
-       * gst/festival/gstfestival.c: (gst_festival_chain): Set the
-       output rate to 16000.  Should fix #160235.
-
-2004-12-14  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * gst/typefind/gsttypefindfunctions.c: (mpeg2_sys_type_find):
-       Add typefinding for mpeg2 pes streams
-
-2004-12-13  David Schleef  <ds@schleef.org>
-
-       * configure.ac:  Applied patch from bug #143659, making default
-       sources and sinks OS-dependent (for Solaris), and added code
-       for OS/X.
-       * gconf/gstreamer.schemas.in: use OS-dependent sinks in gconf.
-
-2004-12-13  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
-
-       * gst-libs/gst/riff/riff-media.c:
-         forgot to add h2.64 to avidemux template caps
-
-2004-12-13  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
-
-       * gst/wavenc/riff.h:
-       * gst-libs/gst/riff/riff-media.c:
-       * gst-libs/gst/riff/riff-ids.h:
-       * gst/avi/gstavimux.c
-       add 4CC code for VideoSoft h264 in AVI (VSSH)
-         fixes bug #160655
-       remove s323 from riff, it's quicktime specific :(
-
-2004-12-13  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
-
-       * gst/asfdemux/README
-       * gst/wavenc/riff.h
-       * gst-libs/gst/riff/riff-ids.h
-       * gst-libs/gst/riff/riff-media.c
-       * gst/qtdemux/qtdemux.c:
-         add new 4CC codes for h263 related codecs
-         fixes partially bug #155163
-
-2004-12-12  Christian Fredrik Kalager Schaller  <christian at fluendo dot com>
-
-       * configure.ac: Update polyaudio requirement to 0.7
-       * ext/polyp/polypsink.c: (create_stream): add patch from iain (158258)
-
-2004-12-11  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * gst/interleave/deinterleave.c:
-       fix my name's spelling! :)
-
-2004-12-11  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
-
-       * AUTHORS ChangeLog
-       * gst/auparse/gstauparse.c
-       * gst/interleave/deinterleave.c
-       * gst/law/:
-               alaw-decode.c alaw-encode.c
-               mulaw-decode.c mulaw-encode.c
-       * gst/oneton/gstoneton.c
-       * sys/osxaudio/:
-               gstosxaudioelement.c gstosxaudiosink.c gstosxaudiosrc.c
-       * sys/osxvideo/:
-               cocoawindow.h cocoawindow.m
-               osxvideosink.h osxvideosink.m
-
-       put the same mail address for Zaheer Abbas Merali everywhere
-
-2004-12-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_loop):
-         Align by packetsize, and assert that we a packet available before
-         playing. The first makes webstreams work (they often include
-         trailing padding data in a packet), the second allows pausing a
-         ASF stream in totem without getting demux errors afterwards.
-
-2004-12-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggdemux.c: (get_relative):
-         Check for non-NULL before accessing member (end-of-chain).
-
-2004-12-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_class_init),
-       (cdparanoia_set_property), (cdparanoia_get_property):
-       * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_class_init),
-       (dvdnavsrc_set_property), (dvdnavsrc_get_property):
-       * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_class_init),
-       (dvdreadsrc_init), (dvdreadsrc_set_property),
-       (dvdreadsrc_get_property):
-       * sys/vcd/vcdsrc.c: (gst_vcdsrc_class_init),
-       (gst_vcdsrc_set_property), (gst_vcdsrc_get_property):
-         Synchronize property names where not yet the case. Devices are
-         now device=X, other versions are deprecated (but still exist).
-         Also use g_free() unconditionally.
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
-       (setup_source), (gst_play_base_bin_get_property):
-         Expose source.
-
-2004-12-09  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac: move GCONF macro outside conditional for the am
-         conditional. Fixes #160439
-
-2004-12-08  David Schleef  <ds@schleef.org>
-
-       * tools/gst-visualise-m.m: Switch to elements that currently
-       exist.
-
-2004-12-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstogmparse.c: (gst_ogm_parse_chain):
-         We love wrong commas.
-
-2004-12-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/matroska/matroska-demux.c:
-       (gst_matroska_demux_handle_src_query):
-         Don't set DEFAULT, unsupported - makes length display incorrectly
-         in some cases.
-
-2004-12-07  Christian Fredrik Kalager Schaller  <uraeus@gnome.org>
-
-       * gst/monoscope/README: remove blurb about files being GPL
-       * gst/monoscope/gstmonoscope.c: Change license field to LGPL
-       * gst/monoscope/monoscope.c: Change license to BSD with explanation
-         monoscope is now effectively LGPL licensed
-
-2004-12-07  Christian Fredrik Kalager Schaller  <uraeus@gnome.org>
-
-       * gst/monoscope/README: Update information to be more correct
-       * gst/monoscope/convolve.c: Relicense to LGPL
-       * gst/monoscope/convolve.h: Relicense to LGPL
-
-2004-12-06  Arwed v. Merkatz <v.merkatz@gmx.net>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
-         set BUFFER_DURATION to correct values (mpeg1 audio frame length is fixed)
-       * gst/matroska/matroska-mux.c: (gst_matroska_mux_audio_pad_link):
-         set default_duration for mpeg1 audio
-
-2004-12-06  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_get_caps), (gst_alsa_close_audio):
-       * ext/alsa/gstalsa.h:
-         refactor big chunks of the core caps negotiation code to make it
-         a lot faster, because people claim it's really slow
-         (actually, just cache the getcaps when the device is opened)
-
-2004-12-06  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/a52dec/gsta52dec.c: (gst_a52dec_init),
-       (gst_a52dec_handle_event), (gst_a52dec_update_streaminfo),
-       (gst_a52dec_handle_frame), (gst_a52dec_chain),
-       (gst_a52dec_change_state), (plugin_init):
-       * ext/a52dec/gsta52dec.h:
-         Do something useful with timestamps. Make chain-based (since
-         there's really no reason to be loopbased).
-       * gst/avi/gstavidemux.c: (gst_avi_demux_process_next_entry):
-         Update current_byte/frame correctly.
-
-2004-12-04  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/apetag/apedemux.c: (gst_ape_demux_parse_tags),
-       (gst_ape_demux_stream_init):
-         Forward tags, too.
-
-2004-12-04  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/apetag/apedemux.c: (gst_ape_demux_stream_init):
-         Let's make sure we're done typefinding when detecting tags.
-
-2004-12-03  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/matroska/ebml-read.c: (gst_ebml_read_class_init),
-       (gst_ebml_read_init), (gst_ebml_read_use_event),
-       (gst_ebml_read_element_id), (gst_ebml_peek_id),
-       (gst_ebml_read_seek), (gst_ebml_read_skip),
-       (gst_ebml_read_reserve), (gst_ebml_read_buffer),
-       (gst_ebml_read_master):
-       * gst/matroska/ebml-read.h:
-       * gst/matroska/matroska-demux.c:
-       (gst_matroska_demux_parse_contents),
-       (gst_matroska_demux_loop_stream), (gst_matroska_demux_audio_caps):
-         Disgustingly evil hack for working around INTERRUPT events and
-         their extremely annoying habit of being a pain in the ass. We
-         simply peek a cluster before reading any of it.
-
-2004-12-03  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/musepack/gstmusepackdec.cpp:
-         There's also floating point libmusepacks.
-
-2004-12-03  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/faad/gstfaad.c: (gst_faad_chanpos_from_gst),
-       (gst_faad_chanpos_to_gst), (gst_faad_chain):
-         Set DURATION even if source buffer didn't. Also use increasing
-         timestamps.
-       * gst-libs/gst/riff/riff-media.c:
-       (gst_riff_create_audio_caps_with_data):
-         Block_align can have larger values than 8192.
-
-2004-12-02  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/law/alaw-decode.c: (alawdec_getcaps), (alawdec_link):
-       * gst/law/alaw-encode.c: (alawenc_getcaps), (alawenc_link):
-       * gst/law/mulaw-decode.c: (mulawdec_getcaps), (mulawdec_link):
-       * gst/law/mulaw-encode.c: (mulawenc_getcaps), (mulawenc_link):
-         Fix caps.
-
-2004-12-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/v4l/v4l_calls.c: (gst_v4l_get_chan_names):
-         Fix logic bug.
-
-2004-12-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_type_find):
-         Yay, another one.
-
-2004-12-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/esd/esdsink.c: (gst_esdsink_chain):
-         Make error actually say something useful (fixes #156798).
-       * gst-libs/gst/riff/riff-media.c:
-       (gst_riff_create_video_caps_with_data),
-       (gst_riff_create_video_template_caps):
-         Add Intel Video 5.0 fourcc (IV50).
-
-2004-12-01  Christophe Fergeau  <teuf@gnome.org>
-
-       * ext/mad/gstmad.c: (mpg123_parse_xing_header): fix xing header
-       detection on mono and stereo mp3 files.
-
-2004-12-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_change_state):
-         Don't crash on EMPTY caps (e.g. when the demuxer didn't recognize
-         the contained stream).
-
-2004-12-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/faad/gstfaad.c: (gst_faad_srcconnect), (gst_faad_chain):
-         Oops, remove debug.
-
-2004-12-01  Sebastien Cote  <sc5@hermes.usherb.ca>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/law/alaw-decode.c: (alawdec_getcaps):
-       * gst/law/mulaw-decode.c: (mulawdec_getcaps):
-         Prevent warnings when negotiating caps (fixes #159338).
-
-2004-12-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
-       (gst_ffmpegcsp_chain):
-         Remove old leftover that shouldn't be there...
-
-2004-12-01  Sebastien Cote  <sc5@hermes.usherb.ca>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_use_event):
-         Don't forward DISCONT events (fixes #159684).
-
-2004-12-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybin.c: (remove_sinks), (setup_sinks):
-         Unlink manually since sometimes bin disposal (and therefore
-         pad unlinking) is delayed, which will cause a new media file
-         to not be able to start playing instantly.
-
-2004-11-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gststreaminfo.c: (stream_info_mute_pad):
-         On mute of an unlinked stream, check for pad availability so
-         we don't crash on unlinked pad.
-
-2004-11-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index),
-       (gst_avi_demux_massage_index):
-         Fix quite humiliating bug in omitting 0-sized index chunks but
-         forgetting to count them for timestamps.
-
-2004-11-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/a52dec/gsta52dec.c: (gst_a52dec_loop):
-         Actually leave the loop if we failed to sync. Don't crash.
-
-2004-11-28  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_get_audio_stream),
-       (gst_dvd_demux_process_private):
-       * gst/mpegstream/gstdvddemux.h:
-         Fix crash (#159759). Doesn't work, though. :-(.
-
-2004-11-28  Benjamin Otte  <otte@gnome.org>
-
-       * gst/audioconvert/gstchannelmix.c: (gst_audio_convert_mix):
-         more overwriting protection due to modifying channels one by one
-         instead of all at once
-
-2004-11-28  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/audioconvert/gstchannelmix.c:
-       (gst_audio_convert_fill_normalize):
-         Normalize using absolute values.
-
-2004-11-28  Julien MOUTTE  <julien@moutte.net>
-
-       * configure.ac:
-       * ext/Makefile.am:
-       * ext/directfb/Makefile.am:
-       * ext/directfb/directfbvideosink.c: (gst_directfbvideosink_create),
-       (gst_directfbvideosink_get_pixel_format),
-       (gst_directfbvideosink_get_format_from_fourcc),
-       (gst_directfbvideosink_fixate), (gst_directfbvideosink_getcaps),
-       (gst_directfbvideosink_sink_link),
-       (gst_directfbvideosink_change_state),
-       (gst_directfbvideosink_chain), (gst_directfbvideosink_buffer_free),
-       (gst_directfbvideosink_buffer_alloc),
-       (gst_directfbvideosink_interface_supported),
-       (gst_directfbvideosink_interface_init),
-       (gst_directfbvideosink_navigation_send_event),
-       (gst_directfbvideosink_navigation_init),
-       (gst_directfbvideosink_set_property),
-       (gst_directfbvideosink_get_property),
-       (gst_directfbvideosink_finalize), (gst_directfbvideosink_init),
-       (gst_directfbvideosink_base_init),
-       (gst_directfbvideosink_class_init),
-       (gst_directfbvideosink_get_type), (plugin_init):
-       * ext/directfb/directfbvideosink.h: Adding a first version of
-       directfbvideosink.
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_init): Initializing some
-       more.
-
-2004-11-28  Benjamin Otte  <otte@gnome.org>
-
-       * gst/audioconvert/gstchannelmix.c: (gst_audio_convert_mix):
-         walk the samples backwards if out_channels > in_channels so we don't
-         overwrite data
-
-2004-11-28  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/audioconvert/Makefile.am:
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_init),
-       (gst_audio_convert_link), (gst_audio_convert_change_state),
-       (gst_audio_convert_channels):
-       * gst/audioconvert/gstchannelmix.c:
-       (gst_audio_convert_unset_matrix),
-       (gst_audio_convert_fill_identical),
-       (gst_audio_convert_fill_compatible),
-       (gst_audio_convert_detect_pos), (gst_audio_convert_fill_one_other),
-       (gst_audio_convert_fill_others),
-       (gst_audio_convert_fill_normalize),
-       (gst_audio_convert_fill_matrix), (gst_audio_convert_setup_matrix),
-       (gst_audio_convert_passthrough), (gst_audio_convert_mix):
-       * gst/audioconvert/gstchannelmix.h:
-         Implement a channel mixer.
-
-2004-11-28  Martin Soto  <martinsoto@users.sourceforge.net>
-
-       * ext/alsa/gstalsasink.c (gst_alsa_sink_loop):
-       * ext/alsa/gstalsa.h:
-       * ext/alsa/gstalsa.c (gst_alsa_set_clock):
-       Make alsasink actually honor gst_element_set_clock and use that
-       clock instead of its internal one.
-
-2004-11-27  Christophe Fergeau  <teuf@gnome.org>
-
-       * gst/playback/gstplaybasebin.c: (setup_source): fixed a caps leak
-       (gst_play_base_bin_change_state): nullify source and decoder when
-       going from READY to NULL so that we don't try to do weird stuff with
-       them when going from NULL to READY
-       * gst/playback/gstplaybin.c: (gst_play_bin_init): use gst_object_unref
-       instead of g_object_unref
-       (gen_video_element), (gen_audio_element): more refcounting fixes, now
-       it should be correct
-       (gst_play_bin_change_state): don't call remove_sinks if we are
-       currently disposing the object
-
-2004-11-27  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/a52dec/gsta52dec.c: (gst_a52dec_loop):
-         Don't forget bass if it's there. Else left channel is silent...
-
-2004-11-27  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/a52dec/gsta52dec.c: (gst_a52dec_loop),
-       (gst_a52dec_change_state):
-         Don't do sample adjusting anymore, we use float audio now.
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_fixate):
-         Don't fixate to non-existing properties.
-
-2004-11-27  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/a52dec/gsta52dec.c: (gst_a52dec_channels),
-       (gst_a52dec_change_state):
-         Advertise that we can do surround sound.
-
-2004-11-27  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/a52dec/gsta52dec.c: (gst_a52dec_reneg):
-         Add buffer-frames=0.
-       * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_get_type),
-       (dvdreadsrc_init), (dvdreadsrc_get_event_mask),
-       (dvdreadsrc_get_query_types), (dvdreadsrc_get_formats),
-       (dvdreadsrc_srcpad_event), (dvdreadsrc_srcpad_query),
-       (_seek_title), (_seek_chapter), (get_next_cell_for), (_read),
-       (seek_sector), (dvdreadsrc_get), (dvdreadsrc_open_file),
-       (dvdreadsrc_change_state), (dvdreadsrc_uri_get_type),
-       (dvdreadsrc_uri_get_protocols), (dvdreadsrc_uri_get_uri),
-       (dvdreadsrc_uri_set_uri), (dvdreadsrc_uri_handler_init):
-       * ext/dvdread/dvdreadsrc.h:
-         Add seeking, querying for bytes, sectors, title, angle and
-         chapter. Handle multiple chapters. Relicense to LGPL because
-         Billy agreed on that (thanks Billy!).
-
-2004-11-27  Christophe Fergeau  <teuf@gnome.org>
-
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_dispose):
-       call parent dispose method
-
-2004-11-27  Martin Soto  <martinsoto@users.sourceforge.net>
-
-       * gst-libs/gst/audio/audioclock.c (gst_audio_clock_set_active)
-       (gst_audio_clock_get_internal_time):
-       Fix active <-> inactive transitions: ensure time value always
-       grows and avoid abrupt value changes.
-
-2004-11-27  Arwed v. Merkatz <v.merkatz@gmx.net>
-
-       * configure.ac:
-       * gst/tta/Makefile.am:
-       * gst/tta/crc32.h:
-       * gst/tta/filters.h:
-       * gst/tta/gsttta.c:
-       * gst/tta/gstttadec.c:
-       * gst/tta/gstttadec.h:
-       * gst/tta/gstttaparse.c:
-       * gst/tta/gstttaparse.h:
-       * gst/tta/ttadec.h:
-         added TTA parser and decoder
-
-2004-11-26  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
-       (probe_triggered), (check_queue), (buffer_underrun),
-       (buffer_running), (buffer_overrun), (gen_source_element),
-       (setup_source):
-       * gst/playback/gstplaybasebin.h:
-         Implement buffering. Needs some more work.
-
-2004-11-26  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/theora/theoradec.c: (theora_dec_chain):
-         Fix ilog mask range overflow.
-
-2004-11-26  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_get_caps):
-         Don't omit the last (which in case of dmix is the only :) )
-         channel count. Don't set channels if <= 2.
-
-2004-11-26  Christophe Fergeau  <teuf@gnome.org>
-
-       * gst/playback/gstplaybin.c: (gen_video_element),
-       (gen_audio_element): Removed 2 obsolete comments
-
-2004-11-26  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
-       * ext/vorbis/oggvorbisenc.c
-       * ext/vorbis/vorbisenc.c :
-         change description fields of those plugins to differentiate them
-         (pitivi show Encoders by description, they had the same one)
-
-2004-11-25  Christophe Fergeau  <teuf@gnome.org>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybin.c: (gst_play_bin_dispose),
-       (gst_play_bin_set_property), (gen_video_element),
-       (gen_audio_element):
-         Refcounting fixes for provided audio-/videosinks.
-
-2004-11-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybin.c: (gen_video_element),
-       (gen_audio_element), (setup_sinks), (gst_play_bin_change_state):
-         Don't reference all sinks, but only the video- and audiosinks.
-         The vis. element should be disposed when we're done with it.
-         We don't have any reason to keep it around. This fixes warnings
-         when reusing playbin for playing multiple audio files with
-         vis. enabled. Also release audio device on pause - idea stolen
-         from Rhythmbox.
-
-2004-11-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/a52dec/gsta52dec.c: (gst_a52dec_channels), (gst_a52dec_push),
-       (gst_a52dec_reneg), (gst_a52dec_loop), (plugin_init):
-       * ext/alsa/gstalsa.c: (gst_alsa_get_caps):
-       * ext/alsa/gstalsaplugin.c: (plugin_init):
-       * ext/dts/gstdtsdec.c: (gst_dtsdec_channels),
-       (gst_dtsdec_renegotiate), (gst_dtsdec_loop), (plugin_init):
-       * ext/faad/gstfaad.c: (gst_faad_init), (gst_faad_chanpos_from_gst),
-       (gst_faad_chanpos_to_gst), (gst_faad_sinkconnect),
-       (gst_faad_srcgetcaps), (gst_faad_srcconnect), (gst_faad_chain),
-       (gst_faad_change_state), (plugin_init):
-       * ext/faad/gstfaad.h:
-       * ext/vorbis/vorbis.c: (plugin_init):
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
-       * gst-libs/gst/audio/Makefile.am:
-       * gst-libs/gst/audio/audio.c: (plugin_init):
-       * gst-libs/gst/audio/multichannel.c:
-       (gst_audio_check_channel_positions),
-       (gst_audio_get_channel_positions),
-       (gst_audio_set_channel_positions),
-       (gst_audio_set_structure_channel_positions_list),
-       (add_list_to_struct), (gst_audio_set_caps_channel_positions_list),
-       (gst_audio_fixate_channel_positions):
-       * gst-libs/gst/audio/multichannel.h:
-       * gst-libs/gst/audio/testchannels.c: (main):
-       * gst/audioconvert/gstaudioconvert.c:
-       (gst_audio_convert_class_init), (gst_audio_convert_init),
-       (gst_audio_convert_dispose), (gst_audio_convert_getcaps),
-       (gst_audio_convert_parse_caps), (gst_audio_convert_link),
-       (gst_audio_convert_fixate), (gst_audio_convert_channels):
-       * gst/audioconvert/plugin.c: (plugin_init):
-         Surround sound support.
-
-2004-11-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_push):
-         Fix position for discont if we're close as well. Nitpicking, but
-         saves a few milliseconds of extra waiting or skipping.
-
-2004-11-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstdecodebin.c: (gst_decode_bin_factory_filter):
-         We sometimes need parsers for playback, so add those too.
-
-2004-11-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * configure.ac:
-       * gst/apetag/Makefile.am:
-       * gst/apetag/apedemux.c: (gst_ape_demux_get_type),
-       (gst_ape_demux_base_init), (gst_ape_demux_class_init),
-       (gst_ape_demux_init), (gst_ape_demux_get_src_formats),
-       (gst_ape_demux_get_src_query_types),
-       (gst_ape_demux_handle_src_query), (gst_ape_demux_get_event_mask),
-       (gst_ape_demux_handle_src_event), (gst_ape_demux_handle_event),
-       (gst_ape_demux_typefind_peek), (gst_ape_demux_typefind_get_length),
-       (gst_ape_demux_typefind_suggest), (gst_ape_demux_typefind),
-       (gst_ape_demux_parse_tags), (gst_ape_demux_stream_init),
-       (gst_ape_demux_stream_data), (gst_ape_demux_loop),
-       (gst_ape_demux_change_state):
-       * gst/apetag/apedemux.h:
-       * gst/apetag/apetag.c: (plugin_init):
-       * gst/typefind/gsttypefindfunctions.c: (apetag_type_find),
-       (plugin_init):
-         APE v1/2 tag reader plus typefind function.
-
-2004-11-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * configure.ac:
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_add_element):
-       * gst/typefind/gsttypefindfunctions.c: (mp3_type_find):
-         Remove hacks for older core. Require newer core version
-         accordingly.
-
-2004-11-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/cdxaparse/Makefile.am:
-       * gst/cdxaparse/gstcdxaparse.c: (gst_cdxaparse_get_type),
-       (gst_cdxaparse_class_init), (gst_cdxaparse_init),
-       (gst_cdxaparse_loop), (gst_cdxaparse_change_state), (plugin_init):
-       * gst/cdxaparse/gstcdxaparse.h:
-       * gst/cdxaparse/gstcdxastrip.c: (gst_cdxastrip_get_type),
-       (gst_cdxastrip_base_init), (gst_cdxastrip_class_init),
-       (gst_cdxastrip_init), (gst_cdxastrip_get_src_formats),
-       (gst_cdxastrip_get_src_query_types),
-       (gst_cdxastrip_handle_src_query), (gst_cdxastrip_get_event_mask),
-       (gst_cdxastrip_handle_src_event), (gst_cdxastrip_strip),
-       (gst_cdxastrip_sync), (gst_cdxastrip_handle_event),
-       (gst_cdxastrip_chain), (gst_cdxastrip_change_state):
-       * gst/cdxaparse/gstcdxastrip.h:
-         SVCD/VCD header stripping separated from CDXA image parsing.
-       * gst/typefind/gsttypefindfunctions.c: (mp3_type_find),
-       (plugin_init):
-         Add VCD/SVCD header typefinding for VCD/SVCD.
-       * sys/vcd/vcdsrc.c: (gst_vcdsrc_get_type), (gst_vcdsrc_base_init),
-       (gst_vcdsrc_class_init), (gst_vcdsrc_init),
-       (gst_vcdsrc_set_property), (gst_vcdsrc_get_property),
-       (gst_vcdsrc_get_event_mask), (gst_vcdsrc_get_query_types),
-       (gst_vcdsrc_get_formats), (gst_vcdsrc_srcpad_event),
-       (gst_vcdsrc_srcpad_query), (gst_vcdsrc_get),
-       (gst_vcdsrc_open_file), (gst_vcdsrc_close_file),
-       (gst_vcdsrc_change_state), (gst_vcdsrc_msf),
-       (gst_vcdsrc_recalculate), (gst_vcdsrc_uri_get_type),
-       (gst_vcdsrc_uri_get_protocols), (gst_vcdsrc_uri_get_uri),
-       (gst_vcdsrc_uri_set_uri), (gst_vcdsrc_uri_handler_init):
-       * sys/vcd/vcdsrc.h:
-         Fix up, add seeking, querying, URI interface. Works in totem now.
-
-2004-11-25  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-         back to CVS
-
-=== release 0.8.6 ===
-
-2004-11-25  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-       * po/af.po:
-       * po/az.po:
-       * po/cs.po:
-       * po/en_GB.po:
-       * po/hu.po:
-       * po/it.po:
-       * po/nb.po:
-       * po/nl.po:
-       * po/or.po:
-       * po/sq.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/uk.po:
-         releasing 0.8.6, "IOU Love"
-
-2004-11-23  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       patch by: Ronald Bultje <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c:
-         Fix unplayable files error handling.  Fixes #158365
-
-2004-11-23  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       patch by: Ronald Bultje <rbultje@ronald.bitfreak.net>
-
-       * gst/typefind/gsttypefindfunctions.c:
-         Fix broken mp3 typefinding.  Fixes #158375
-
-2004-11-23  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       patch by: Ronald Bultje <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggdemux.c:
-         Fix sync on broken files.  Fixes #158976
-
-2004-11-23  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       patch by: Edward Hervey <bilboed@bilboed.com>
-
-       * ext/libpng/gstpngenc.c:
-         Copy over buffer properties.  Fixes #158832
-
-2004-11-23  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       patch by: Tim-Philipp Müller <t.i.m@zen.co.uk>
-
-       * ext/dvdread/dvdreadsrc.c:
-         Fixes invalid reads (#158462)
-
-2004-11-23  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/v4l/gstv4lsrc.c:
-       * sys/v4l/gstv4lsrc.h:
-       * sys/v4l/v4lsrc_calls.c:
-         Probe less and cache it.  Fixes #159187.
-
-2004-11-23  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/videorate/gstvideorate.c:
-         Handle all video formats. Fixes #159186.
-
-2004-11-16  Jan Schmidt  <thaytan@mad.scientist.com>
-       * gst/synaesthesia/gstsynaesthesia.c:
-       (gst_synaesthesia_class_init), (gst_synaesthesia_init),
-       (gst_synaesthesia_dispose), (gst_synaesthesia_finalize),
-       (gst_synaesthesia_sink_link), (gst_synaesthesia_src_getcaps),
-       (gst_synaesthesia_src_link), (gst_synaesthesia_chain),
-       (gst_synaesthesia_change_state), (plugin_init):
-       Fix up synaesthesia to work under different samplerates/ buffer sizes.
-       Force 320x200 output, as that's the only thing the underlying
-       synaesthesia implementation supports. Still needs to be made
-       re-entrant.
-
-2004-11-14  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * configure.ac:
-         Fix mpeg2enc configure check (similar to mplex check below).
-
-2004-11-14  Koop Mast  <kwm@rainbow-runner.nl>
-
-       reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
-         Fix for gcc-2.95 (fixes #158221).
-
-2004-11-13  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_add_element):
-         Re-add clock distribution hack (until new core is released).
-         Fixes #158125.
-
-2004-11-13  Arwed v. Merkatz  <v.merkatz@gmx.net>
-       * configure.ac:
-         fix mplex configure check segfaulting on some systems (bug #140994)
-
-2004-11-13  Benjamin Otte  <otte@gnome.org>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_pcm_wait):
-         add debugging
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
-         do a wait when we enter the loop func with no data available to
-         write instead of getting into an 100% CPU loop by just returning and
-         being called again by the scheduler
-
-2004-11-13  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * configure.ac:
-       * ext/libvisual/visual.c: (gst_visual_get_type),
-       (libvisual_log_handler), (gst_visual_getcaps),
-       (gst_visual_srclink), (gst_visual_change_state), (make_valid_name),
-       (plugin_init):
-         Update libvisual to 0.1.7. Link in the debug handling to gstreamer
-       * ext/smoothwave/Makefile.am:
-       * ext/smoothwave/demo-osssrc.c: (main):
-       * ext/smoothwave/gstsmoothwave.c: (gst_smoothwave_class_init),
-       (gst_smoothwave_init), (gst_smoothwave_dispose), (gst_sw_sinklink),
-       (gst_sw_srclink), (gst_smoothwave_chain), (gst_sw_change_state),
-       (plugin_init):
-       * ext/smoothwave/gstsmoothwave.h:
-         Make gstsmoothwave a working element in the 20th century.
-
-       * gst/chart/gstchart.c: (gst_chart_init), (gst_chart_srcconnect):
-         Fix incorrect link function
-
-2004-11-12  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/volume/gstvolume.c:
-         Allow buffer-frames=0.
-
-2004-11-12 Iain <iaingnome@gmail.com>
-
-       * configure.ac: Check for polypaudio
-
-       * ext/Makefile.am: Build the polyp dir
-
-       * ext/polyp: The polypsink sources.
-
-2004-10-30 Iain <iaingnome@gmail.com>
-
-       * gst/interleave/interleave.c (interleave_unlink): Change the src pads
-       caps to reflect the new number of channels.
-
-2004-11-12  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
-         Fix for negotiation order problem. This would show when the
-         ALSA loopfuction was called before any other function. ALSA
-         wouldn't do anything because we're not negotiated yet, leading
-         to an infinite loop. Showed in e.g. Rhythmbox. Fixes #158006.
-
-2004-11-11  Tim-Philipp Müller  <t.i.m@zen.co.uk>
-
-       reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_src_query):
-         No warnings (#157986).
-
-2004-11-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/typefind/gsttypefindfunctions.c: (plugin_init):
-         Prefer apev1/2 and id3v1 (at end of file) over musepack.
-
-2004-11-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/matroska/matroska-demux.c: (gst_matroska_demux_loop_stream):
-         Signal no-more-pads (so it works in playbin).
-
-2004-11-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/musepack/gstmusepackreader.cpp:
-         Workaround for older core.
-
-2004-11-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/ffmpegcolorspace/imgconvert.c: (yuv420p_to_yuv422):
-         Actually test for odd width/height rather than testing whether
-         a temporary variable that was 0 before we subtracted 1 is now
-         not equal to zero (which it always is).
-
-2004-11-11  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * sys/v4l2/gstv4l2element.c: (gst_v4l2_iface_supported):
-       Fix compilation if HAVE_XVIDEO is not defined
-
-2004-11-11  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * sys/v4l/gstv4lelement.c: (gst_v4l_iface_supported):
-       Fix compilation if HAVE_XVIDEO is not defined
-
-2004-11-11  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * gst/goom/gstgoom.c: (gst_goom_class_init), (gst_goom_init),
-       (gst_goom_dispose), (gst_goom_sinkconnect), (gst_goom_chain),
-       (gst_goom_change_state), (plugin_init):
-       Use the bytestream adapter so goom doesn't depend on the input
-       buffer size.
-       Add a debug category
-
-2004-11-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_change_state):
-         Only set hardware parameters *after* negotiation. Before
-         negotiation, it will set ANY and that seems to cause crashes
-         (see e.g. #151288, #153227).
-
-2004-11-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_get_time):
-         This seems to be antique leftover. It needs to pass error
-         checking.
-       * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_init),
-       (gst_sdlvideosink_deinitsdl), (gst_sdlvideosink_initsdl),
-       (gst_sdlvideosink_destroy), (gst_sdlvideosink_create),
-       (gst_sdlvideosink_sinkconnect), (gst_sdlvideosink_chain):
-         Fix GstXOverlay implementation (#151059).
-
-2004-11-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_change_state):
-         Don't assert (#157853).
-
-2004-11-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event),
-         Fix bytes/samples confustion.
-       (gst_alsa_sink_mmap), (gst_alsa_sink_loop):
-         Fix for underrun (#144389).
-
-2004-11-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/typefind/gsttypefindfunctions.c: (mp3_type_find):
-         Disable halfway-seek for pending release (since it needs a new
-         core release).
-
-2004-11-09  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/v4l/gstv4lsrc.c:
-       * sys/v4l/gstv4lsrc.h:
-       * sys/v4l/v4lsrc_calls.c:
-         add autoprobe-fps property so we can separate autoprobing parts
-
-2004-11-09  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/v4l/gstv4lsrc.c:
-       * sys/v4l/v4lsrc_calls.c:
-       initialise fourcc to catch unset fourcc's, and debug
-
-2004-11-09  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/README:
-       * gst/playback/gstdecodebin.c: (close_pad_link), (try_to_link_1):
-       * gst/playback/gstplaybin.c: (gst_play_bin_init),
-       (gst_play_bin_dispose), (gst_play_bin_set_property),
-       (remove_sinks), (setup_sinks), (gst_play_bin_change_state),
-       (gst_play_bin_get_event_masks), (gst_play_bin_send_event),
-       (gst_play_bin_get_formats), (gst_play_bin_convert),
-       (gst_play_bin_get_query_types), (gst_play_bin_query):
-       Cleanups and some more documentation.
-
-2004-11-09  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * ext/libcaca/gstcacasink.c: (gst_cacasink_class_init),
-       (gst_cacasink_init), (gst_cacasink_chain):
-       * ext/libcaca/gstcacasink.h:
-       Cacasink inherits from VideoSink, so let that store the clock.
-
-2004-11-09  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/README:
-       * gst/playback/gstplaybasebin.c: (group_destroy), (group_is_muted),
-       (add_stream), (unknown_type), (add_element_stream), (no_more_pads),
-       (probe_triggered), (preroll_unlinked), (new_decoded_pad),
-       (gst_play_base_bin_change_state), (gst_play_base_bin_found_tag):
-       * gst/playback/gstplaybin.c: (gen_vis_element), (remove_sinks),
-       (setup_sinks):
-       * gst/playback/gststreaminfo.c: (gst_stream_info_set_mute),
-       (gst_stream_info_is_mute), (gst_stream_info_set_property):
-       * gst/playback/gststreaminfo.h:
-       Updated README.
-       Only switch groups if all streams have muted (EOSed).
-       Send Tags in sync with the stream playback instead of in
-       the playback/preroll phase.
-       Some cleanups, free the fakesrc elements.
-
-2004-11-09  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_get_caps_internal):
-         buffer-frames property was missing
-       * ext/arts/gst_arts.c:
-         rate missing from sinkcaps
-       * ext/audiofile/gstafparse.c:
-       * ext/audiofile/gstafsink.c:
-       * ext/audiofile/gstafsrc.c:
-       * ext/swfdec/gstswfdec.c:
-         int audio doesn't know buffer-frames
-       * ext/cdparanoia/gstcdparanoia.c:
-         int audio doesn't know chunksize either
-       * ext/nas/nassink.c:
-         it's endianness, not endianess
-       * gst-libs/gst/audio/audio.h:
-         make float standard pad template caps really describe float
-       * gst/law/mulaw.c: (linear_factory):
-         signed only, please
-       * gst/mpegstream/gstdvddemux.c:
-         widths of 20 are not valid
-
-2004-11-08  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       Submitted by: Luca Ferretti <elle.uca@infinito.it>
-
-       * po/LINGUAS:
-       * po/it.po:
-         Add Italian
-
-2004-11-08  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/README:
-       * gst/playback/gstdecodebin.c: (close_pad_link), (try_to_link_1):
-       * gst/playback/gstplaybasebin.c: (probe_triggered),
-       (gst_play_base_bin_change_state):
-       Updated README, added more comments for fixmes etc..
-
-2004-11-08  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_add_element):
-       We can remove this hack now.
-
-2004-11-08  Wim Taymans  <wim@fluendo.com>
-
-       * gst/videomixer/videomixer.c: (gst_videomixer_blend_ayuv_ayuv),
-       (gst_videomixer_fill_checker), (gst_videomixer_fill_color),
-       (gst_videomixer_blend_buffers), (gst_videomixer_loop):
-       Only mix AYUV for maximum quality.
-
-2004-11-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggdemux.c: (get_relative), (gst_ogg_demux_src_query),
-       (gst_ogg_demux_push), (gst_ogg_pad_push):
-         Let's act as if we're synchronized now! :).
-       * ext/theora/theoradec.c: (theora_dec_chain):
-         Add some debug.
-
-2004-11-08  Wim Taymans  <wim@fluendo.com>
-
-       * gst/alpha/gstalpha.c: (gst_alpha_method_get_type),
-       (gst_alpha_set_property), (gst_alpha_sink_link),
-       (gst_alpha_set_ayuv), (gst_alpha_set_i420),
-       (gst_alpha_chroma_key_ayuv), (gst_alpha_chroma_key_i420),
-       (gst_alpha_init_params), (gst_alpha_chain):
-       Implement alpha functions for AYUV too, this increases
-       accuracy quite a bit.
-
-2004-11-08  Wim Taymans  <wim@fluendo.com>
-
-       * gst/ffmpegcolorspace/avcodec.h:
-       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
-       (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_caps_to_pixfmt),
-       (gst_ffmpegcsp_avpicture_fill):
-       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
-       (gst_ffmpegcsp_caps_remove_format_info):
-       * gst/ffmpegcolorspace/imgconvert.c: (avpicture_get_size),
-       (shrink12), (img_get_alpha_info), (deinterlace_line),
-       (deinterlace_line_inplace):
-       * gst/ffmpegcolorspace/imgconvert_template.h:
-       Added AYUV colorspace and handle RGBA a bit more respectful.
-
-2004-11-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
-         Actually always send a discont (cornercase when resending the
-         same serial-tagged chain twice).
-
-2004-11-08  Julien MOUTTE  <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_clear),
-       (gst_ximagesink_finalize):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_clear),
-       (gst_xvimagesink_finalize): Some more cleanups, leaks fixed and checks.
-
-2004-11-08  Wim Taymans  <wim@fluendo.com>
-
-       * gst/typefind/gsttypefindfunctions.c: (aac_type_find):
-       Don't segfault on NULL data.
-
-2004-11-08  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/gstdecodebin.c: (unlinked):
-       * gst/playback/gstplay-marshal.list:
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
-       (gst_play_base_bin_init), (group_create), (get_active_group),
-       (get_building_group), (group_destroy), (group_commit),
-       (queue_overrun), (remove_groups), (add_stream), (unknown_type),
-       (add_element_stream), (no_more_pads), (probe_triggered),
-       (preroll_unlinked), (new_decoded_pad), (removed_decoded_pad),
-       (state_change), (setup_source), (gst_play_base_bin_get_property),
-       (gst_play_base_bin_change_state), (gst_play_base_bin_add_element),
-       (gst_play_base_bin_link_stream),
-       (gst_play_base_bin_get_streaminfo):
-       * gst/playback/gstplaybasebin.h:
-       * gst/playback/gstplaybin.c: (gst_play_bin_class_init),
-       (remove_sinks), (setup_sinks), (gst_play_bin_change_state):
-       Add support for chained ogg files. Prepare for playlist
-       support. This patch introduces the concept of pad groups, which
-       together compose one playable media file.
-
-2004-11-07  David Schleef  <ds@schleef.org>
-
-       * testsuite/gst-lint: Check for pad templates that aren't statically
-       scoped.
-
-2004-11-07  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * configure.ac:
-       * ext/Makefile.am:
-       * ext/musepack/Makefile.am:
-       * ext/musepack/gstmusepackdec.cpp:
-       * ext/musepack/gstmusepackdec.h:
-       * ext/musepack/gstmusepackreader.cpp:
-       * ext/musepack/gstmusepackreader.h:
-         Add musepack decoder.
-       * ext/faad/gstfaad.c: (gst_faad_base_init):
-         Make pad templates static.
-       * gst/typefind/gsttypefindfunctions.c: (mp3_type_find),
-       (plugin_init):
-         Add musepack typefinder, make mp3 typefinding work halfway stream,
-         which doesn't actually work yet because id3demux doesn't implement
-         _get_length().
-
-2004-11-07  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
-       (gst_ogg_mux_queue_pads), (gst_ogg_mux_loop):
-         Fix interrupt event handling (#144436).
-
-2004-11-07  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_do_typefind):
-         Hide unused glory.
-
-2004-11-06  Tim-Philipp Müller  <t.i.m@zen.co.uk>
-
-       reviewed by: Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/vorbis/vorbisenc.c: (raw_caps_factory):
-         Fix weird caps (#157548).
-
-2004-11-06  Tim-Philipp Müller  <t.i.m@zen.co.uk>
-
-       Reviewed by: Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/rtp/gstrtpgsmparse.c: (gst_rtpgsm_caps_nego):
-         Add missing NULL terminator (#157543).
-
-2004-11-05  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/tcp/gsttcp.h:
-       * gst/tcp/gsttcpclientsink.c:
-       * gst/tcp/gsttcpclientsrc.c:
-       * gst/tcp/gsttcpserversink.c:
-       * gst/tcp/gsttcpserversrc.c:
-         ports can go up to 65535.  Move common defines to gsttcp.h
-
-2004-11-05  Wim Taymans  <wim@fluendo.com>
-
-       * gst/videotestsrc/videotestsrc.c: (paint_setup_Y41B),
-       (paint_hline_Y41B), (paint_setup_Y42B), (paint_hline_Y42B):
-       Added two more colorspaces.
-
-2004-11-05  Wim Taymans  <wim@fluendo.com>
-
-       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
-       (gst_ffmpegcsp_avpicture_fill):
-       * gst/ffmpegcolorspace/imgconvert.c: (avpicture_get_size),
-       (yuv422p_to_yuv422), (yuv420p_to_yuv422), (shrink12),
-       (img_convert), (deinterlace_line), (deinterlace_line_inplace):
-       More stride fixes.
-
-2004-11-05  Wim Taymans  <wim@fluendo.com>
-
-       * gst/alpha/gstalpha.c: (gst_alpha_set_property), (gst_alpha_add),
-       (gst_alpha_chroma_key), (gst_alpha_init_params), (gst_alpha_chain):
-       * gst/videomixer/videomixer.c: (gst_videomixer_blend_ayuv_i420),
-       (gst_videomixer_fill_checker), (gst_videomixer_blend_buffers),
-       (gst_videomixer_loop):
-       More stride fixes.
-
-2004-11-05  Benjamin Otte  <otte@gnome.org>
-
-       * ext/mad/gstmad.c: (gst_mad_chain):
-         don't overflow data buffer. Flush not needed sync data when syncing
-         failed.
-
-2004-11-04  Wim Taymans  <wim@fluendo.com>
-
-       * gst/alpha/gstalpha.c: (gst_alpha_method_get_type),
-       (gst_alpha_class_init), (gst_alpha_init), (gst_alpha_set_property),
-       (gst_alpha_get_property), (gst_alpha_add), (gst_alpha_chroma_key),
-       (gst_alpha_init_params), (gst_alpha_chain),
-       (gst_alpha_change_state):
-       Updated the chroma keying algorithm with something more
-       sophisticated.
-
-2004-11-03  Wim Taymans  <wim@fluendo.com>
-
-       * gst/videomixer/videomixer.c: (gst_videomixer_blend_ayuv_i420),
-       (gst_videomixer_fill_checker), (gst_videomixer_fill_color),
-       (gst_videomixer_blend_buffers), (gst_videomixer_loop):
-       Fix stride issues. Does not completely work for odd
-       heights.
-
-2004-11-03  Wim Taymans  <wim@fluendo.com>
-
-       * gst/alpha/gstalpha.c: (gst_alpha_method_get_type),
-       (gst_alpha_chroma_key), (gst_alpha_chain):
-       Fix stride issues. Does not completely work for odd
-       heights.
-
-2004-11-03  Christophe Fergeau  <teuf@gnome.org>
-
-       * gst/videoscale/gstvideoscale.c: (gst_videoscale_getcaps):
-       * gst/videoscale/videoscale.c: (videoscale_find_by_structure):
-       leak fixes
-
-2004-11-03  Wim Taymans  <wim@fluendo.com>
-
-       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
-       (gst_ffmpegcsp_avpicture_fill):
-       * gst/ffmpegcolorspace/imgconvert.c: (avpicture_get_size),
-       (avpicture_alloc):
-       * gst/ffmpegcolorspace/imgconvert_template.h:
-       Use correct _fill function to get correct strides.
-
-2004-11-02  David Schleef  <ds@schleef.org>
-
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
-       (gst_qtdemux_add_stream), (qtdemux_parse), (qtdemux_parse_tree),
-       (qtdemux_parse_udta), (qtdemux_tag_add), (gst_qtdemux_handle_esds):
-       Change all g_print()s to debugging.  Add a bunch of consistency
-       checks.
-
-2004-11-02  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init),
-       (try_to_link_1), (get_our_ghost_pad), (remove_element_chain),
-       (unlinked), (no_more_pads), (close_link):
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_init),
-       (unknown_type), (add_element_stream), (new_decoded_pad),
-       (removed_decoded_pad), (setup_source):
-       * gst/playback/gststreaminfo.c: (gst_stream_info_get_type),
-       (gst_stream_info_class_init), (gst_stream_info_init),
-       (gst_stream_info_new), (gst_stream_info_dispose),
-       (stream_info_mute_pad), (gst_stream_info_set_property),
-       (gst_stream_info_get_property):
-       * gst/playback/gststreaminfo.h:
-       Fix playback of multiple files.
-       a slightly different approach to handling dynamic pad removals.
-       This one only looks at pads that we have linked.
-
-2004-11-01  Christophe Fergeau  <teuf@gnome.org>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_finalize): fix an "invalid
-       free" warning from libc.
-
-2004-11-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init),
-       (get_unconnected_element), (remove_starting_from), (pad_removed),
-       (close_link):
-         Implement support for dynamic pad changing. We listen to "live"
-         pad removals (i.e. while playing) and re-setup autoplugging
-         after that. Playbasebin/playbin need some more work for this
-         to finally work, but decodebin supports (and replugs) chained
-         ogg now.
-
-2004-11-02  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_class_init), (gst_alsa_dispose),
-       (gst_alsa_finalize):
-       * ext/cdaudio/gstcdaudio.c: (gst_cdaudio_class_init),
-       (gst_cdaudio_finalize):
-       * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_class_init),
-       (cdparanoia_finalize):
-       * ext/divx/gstdivxdec.c: (gst_divxdec_dispose):
-       * ext/divx/gstdivxenc.c: (gst_divxenc_dispose):
-       * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_class_init),
-       (dvdreadsrc_finalize):
-       * ext/flac/gstflacdec.c: (gst_flacdec_class_init),
-       (gst_flacdec_finalize):
-       * ext/flac/gstflacenc.c: (gst_flacenc_class_init),
-       (gst_flacenc_finalize):
-       * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_class_init),
-       (gst_gnomevfssink_finalize):
-       * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_class_init),
-       (gst_gnomevfssrc_finalize):
-       * ext/libfame/gstlibfame.c: (gst_fameenc_class_init),
-       (gst_fameenc_finalize):
-       * ext/nas/nassink.c: (gst_nassink_class_init),
-       (gst_nassink_finalize):
-       * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_finalize),
-       (gst_sdlvideosink_class_init):
-       * ext/sndfile/gstsf.c: (gst_sf_dispose):
-       * gst-libs/gst/mixer/mixertrack.c: (gst_mixer_track_dispose):
-       * gst-libs/gst/tuner/tunerchannel.c: (gst_tuner_channel_dispose):
-       * gst-libs/gst/tuner/tunernorm.c: (gst_tuner_norm_dispose):
-       * gst-libs/gst/xwindowlistener/xwindowlistener.c:
-       (gst_x_window_listener_dispose):
-       * gst/audioscale/gstaudioscale.c:
-       * gst/playondemand/gstplayondemand.c: (play_on_demand_class_init),
-       (play_on_demand_finalize):
-       * gst/videofilter/gstvideobalance.c: (gst_videobalance_dispose):
-       * gst/videoscale/gstvideoscale.c: (gst_videoscale_chain):
-       * sys/cdrom/gstcdplayer.c: (cdplayer_class_init),
-       (cdplayer_finalize):
-       * sys/glsink/glimagesink.c: (gst_glimagesink_finalize),
-       (gst_glimagesink_class_init):
-       * sys/oss/gstosselement.c: (gst_osselement_class_init),
-       (gst_osselement_finalize):
-       * sys/oss/gstosssink.c: (gst_osssink_dispose):
-       * sys/oss/gstosssrc.c: (gst_osssrc_dispose):
-       * sys/v4l/gstv4lelement.c: (gst_v4lelement_dispose):
-         Fixes a bunch of problems with finalize and dispose functions,
-         either assumptions that dispose is only called once, or not calling
-         the parent class dispose/finalize function
-
-2004-11-01  Stefan Kost  <ensonic@users.sf.net>
-
-       * ext/esd/esdsink.c: (gst_esdsink_init), (gst_esdsink_link):
-         added two api precondition guards
-         use g_strdup with getenv to fix crash when using ENVVAR
-
-2004-11-01  Jan Schmidt  <thaytan@mad.scientist.com>
-       * ext/esd/esdsink.c: (gst_esdsink_class_init),
-       (gst_esdsink_finalize):
-       Use a finalize function, not dispose, and more importantly,
-       call the parent class finalize function too
-
-2004-11-01  Johan Dahlin  <johan@gnome.org>
-
-       * ext/ogg/gstoggdemux.c:
-       * gst/tags/gstvorbistag.c:
-       Plug leaks.
-
-2004-10-31  Benjamin Otte  <otte@gnome.org>
-
-       * gst/tags/gstvorbistag.c: (gst_vorbis_tag_chain):
-         lotsa memleaks today. But they're all small...
-
-2004-10-31  Benjamin Otte  <otte@gnome.org>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
-         another memleak crushed
-
-2004-10-31  Benjamin Otte  <otte@gnome.org>
-
-       * gst/tags/gstvorbistag.c: (gst_tag_to_vorbis_comments):
-         fix memleak
-
-2004-10-31  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
-         Hack to prevent crash when going to READY inside signal handler
-         while this function is active.
-
-2004-10-31  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/ffmpegcolorspace/Makefile.am:
-       * gst/ffmpegcolorspace/avcodec.h:
-       * gst/ffmpegcolorspace/common.h:
-       * gst/ffmpegcolorspace/dsputil.c: (dsputil_static_init):
-       * gst/ffmpegcolorspace/dsputil.h:
-       * gst/ffmpegcolorspace/gstffmpeg.c: (plugin_init):
-       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
-       (gst_ffmpeg_get_palette), (gst_ffmpeg_set_palette),
-       (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_smpfmt_to_caps),
-       (gst_ffmpegcsp_codectype_to_caps), (gst_ffmpeg_caps_to_smpfmt),
-       (gst_ffmpeg_caps_to_pixfmt), (gst_ffmpegcsp_caps_with_codectype),
-       (gst_ffmpegcsp_avpicture_fill):
-       * gst/ffmpegcolorspace/gstffmpegcodecmap.h:
-       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
-       (gst_ffmpegcsp_caps_remove_format_info), (gst_ffmpegcsp_getcaps),
-       (gst_ffmpegcsp_pad_link), (gst_ffmpegcsp_get_type),
-       (gst_ffmpegcsp_base_init), (gst_ffmpegcsp_class_init),
-       (gst_ffmpegcsp_init), (gst_ffmpegcsp_chain),
-       (gst_ffmpegcsp_change_state), (gst_ffmpegcsp_set_property),
-       (gst_ffmpegcsp_get_property), (gst_ffmpegcolorspace_register):
-       * gst/ffmpegcolorspace/imgconvert.c:
-       (avcodec_get_chroma_sub_sample), (avcodec_get_pix_fmt_name),
-       (avcodec_get_pix_fmt), (avpicture_fill), (avpicture_layout),
-       (avpicture_get_size), (avcodec_get_pix_fmt_loss),
-       (avg_bits_per_pixel), (avcodec_find_best_pix_fmt1),
-       (avcodec_find_best_pix_fmt), (img_copy_plane), (img_copy),
-       (yuv422_to_yuv420p), (uyvy422_to_yuv420p), (uyvy422_to_yuv422p),
-       (yuv422_to_yuv422p), (yuv422p_to_yuv422), (yuv422p_to_uyvy422),
-       (uyvy411_to_yuv411p), (yuv420p_to_yuv422), (C_JPEG_TO_CCIR),
-       (img_convert_init), (img_apply_table), (shrink41), (shrink21),
-       (shrink12), (shrink22), (shrink44), (grow21_line), (grow41_line),
-       (grow21), (grow22), (grow41), (grow44), (conv411),
-       (gif_clut_index), (build_rgb_palette), (bitcopy_n), (mono_to_gray),
-       (monowhite_to_gray), (monoblack_to_gray), (gray_to_mono),
-       (gray_to_monowhite), (gray_to_monoblack), (avpicture_alloc),
-       (avpicture_free), (is_yuv_planar), (img_convert),
-       (get_alpha_info_pal8), (img_get_alpha_info), (deinterlace_line),
-       (deinterlace_line_inplace), (deinterlace_bottom_field),
-       (deinterlace_bottom_field_inplace), (avpicture_deinterlace):
-       * gst/ffmpegcolorspace/imgconvert_template.h:
-       * gst/ffmpegcolorspace/mem.c: (av_malloc), (av_realloc), (av_free):
-       * gst/ffmpegcolorspace/mmx.h:
-       * gst/ffmpegcolorspace/utils.c: (av_mallocz), (av_strdup),
-       (av_fast_realloc), (av_mallocz_static), (av_free_static),
-       (av_freep), (avcodec_get_context_defaults),
-       (avcodec_alloc_context), (avcodec_init):
-         Sync back from gst-ffmpeg. Deprecates ffcolorspace. Adds palette
-         handling plus update from ffmpeg CVS. Large clean-up.
-
-2004-10-31  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/Makefile.am:
-         We need the marshallers for decodebin, too.
-
-2004-10-30  David Schleef  <ds@schleef.org>
-
-       * gst/typefind/gsttypefindfunctions.c: (qt_type_find): Make
-         quicktime typefinding work with 64-bit offsets.
-
-2004-10-30  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * ext/dv/gstdvdec.c: (gst_dvdec_handle_sink_event):
-         Set EOS on the element when processing an EOS event.
-       * ext/speex/gstspeexdec.h:
-       * ext/speex/gstspeexenc.h:
-         Only keep a const ptr to the mode
-       * gst-libs/gst/riff/riff-media.c:
-       (gst_riff_create_audio_caps_with_data),
-       (gst_riff_create_audio_template_caps):
-         Allow WMAV3, with up to 6 channels.
-       * gst/asfdemux/gstasfmux.c: (gst_asfmux_request_new_pad):
-         Don't call gst_pad_set_event_function on a sink pad.
-       * gst/mpegstream/gstdvddemux.c:
-       (gst_dvd_demux_get_subpicture_stream),
-       (gst_dvd_demux_set_cur_audio), (gst_dvd_demux_set_cur_subpicture):
-         Copy the explicit caps that were set across to the cur_* pads,
-         instead of trying to use a possibly non-existent negotiated caps.
-         Reset the type of subpicture pads to UNKNOWN after calling
-         init_stream, so that the caps get set.
-
-2004-10-29  Martin Pitt  <martin.pitt@canonical.com>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_chunk):
-         Don't touch buffer if it is of size 0 (fixes #151064).
-
-2004-10-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_push), (gst_ogg_pad_push):
-         Synchronized discont handling.
-
-2004-10-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event),
-       (gst_ogg_demux_push):
-         Make seeking sort-of exact again (fixes #156387).
-
-2004-10-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c: (unknown_type),
-       (add_element_stream), (new_decoded_pad),
-       (gst_play_base_bin_change_state):
-       * gst/playback/gststreaminfo.c: (gst_stream_info_class_init),
-       (gst_stream_info_init), (gst_stream_info_new),
-       (gst_stream_info_dispose), (gst_stream_info_get_property):
-       * gst/playback/gststreaminfo.h:
-         Make caps explicitely available. Makes testing for unsupported
-         types possible. Improves error reporting.
-
-2004-10-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/audioconvert/gstaudioconvert.c:
-       (gst_audio_convert_buffer_to_default_format):
-         Really don't touch read-only buffers (#156563).
-
-2004-10-29  Sebastien Cote  <sc5@hermes.usherb.ca>
-
-       Reviewd by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/wavparse/gstwavparse.c: (gst_wavparse_fmt):
-         Fix memleak (#155223).
-
-2004-10-29  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/.cvsignore:
-       * gst/tcp/gstmultifdsink.c: (gst_sync_method_get_type),
-       (gst_multifdsink_class_init), (gst_multifdsink_init),
-       (gst_multifdsink_add), (gst_multifdsink_remove),
-       (gst_multifdsink_remove_client_link), (is_sync_frame),
-       (gst_multifdsink_new_client),
-       (gst_multifdsink_handle_client_write),
-       (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
-       (gst_multifdsink_handle_clients), (gst_multifdsink_set_property),
-       (gst_multifdsink_get_property):
-       * gst/tcp/gstmultifdsink.h:
-       Added burst on connect sync_method, deprecated sync_clients,
-       streamlined the sync code some more.
-
-2004-10-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c: (thread_error), (setup_source),
-       (gst_play_base_bin_change_state):
-         Improve error reporting.
-
-2004-10-28  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/Makefile.am:
-       * gst/tcp/fdsetstress.c: (mess_some_more), (run_test), (main):
-       * gst/tcp/gstfdset.c: (nearest_pow), (resize), (ensure_size),
-       (gst_fdset_new), (gst_fdset_free), (gst_fdset_set_mode),
-       (gst_fdset_fd_ctl_write), (gst_fdset_fd_ctl_read),
-       (gst_fdset_fd_has_closed), (gst_fdset_fd_has_error),
-       (gst_fdset_fd_can_read), (gst_fdset_fd_can_write),
-       (gst_fdset_wait):
-       Added more locks around fdset structures. Fixed/reworked
-       the poll array resizing code.
-       Added stress test for fdset.
-
-2004-10-28  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * gst-libs/gst/audio/gstaudiofilter.c: (gst_audiofilter_link):
-       fix build
-
-2004-10-28  Benjamin Otte  <otte@gnome.org>
-
-       * gst-libs/gst/audio/gstaudiofilter.c: (gst_audiofilter_link):
-         fix link function to always query channels and query width for
-         floats
-       * configure.ac:
-         add equalizer dir
-       * gst/equalizer/Makefile.am:
-       * gst/equalizer/gstiirequalizer.c: (gst_iir_equalizer_get_type),
-       (gst_iir_equalizer_base_init), (gst_iir_equalizer_class_init),
-       (gst_iir_equalizer_init), (gst_iir_equalizer_finalize),
-       (arg_to_scale), (setup_filter),
-       (gst_iir_equalizer_compute_frequencies),
-       (gst_iir_equalizer_set_property), (gst_iir_equalizer_get_property),
-       (gst_iir_equalizer_filter_inplace), (gst_iir_equalizer_setup),
-       (plugin_init):
-         add an equalizer
-
-2004-10-27  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       Submitted by: Kjartan Maraas <kmaraas@broadpark.no>
-
-       * po/LINGUAS:
-       * po/nb.po:
-         Added Norwegian Bokmaal translation
-
-2004-10-27  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
-         Don't break on options (fixes #156488).
-
-2004-10-27  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-       * ext/cdaudio/Makefile.am:
-       * sys/Makefile.am:
-         fix build on older automake
-
-2004-10-26  Wim Taymans  <wim@fluendo.com>
-
-       * ext/dv/gstdvdec.c: (gst_dvdec_video_getcaps),
-       (gst_dvdec_video_link), (gst_dvdec_push), (gst_dvdec_loop):
-       Allow a little margin when negotiating the framerate.
-
-2004-10-26  Stefan Kost  <ensonic@users.sf.net>
-
-       * gst/level/gstlevel.c:
-         synchonised naming of pads and pad-templates
-
-2004-10-26  Wim Taymans  <wim@fluendo.com>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event),
-       (gst_ogg_demux_handle_event), (_find_chain_get_unknown_part),
-       (_find_streams_check), (gst_ogg_demux_push):
-       Fix EOS again. Needs to be done in a better way. We should not
-       remove the pad if there is no new chained stream.
-
-2004-10-26 Iain <iaingnome@gmail.com>
-
-       * ext/ogg/gstoggdemux.c (gst_ogg_pad_new): Free the tag list.
-       * gst/audioscale/gstaudioscale.c (gst_audioscale_link): Free the copy
-       of the caps.
-       * gst/interleave/interleave.c (interleave_class_init): Hook up release
-       pad.
-       (interleave_release_pad): Remove the pad.
-       * gst/level/gstlevel.c: Allow the level to take 1 or 2 channels.
-       * sys/sunaudio/gstsunaudio.c (gst_sunaudio_setparams): Pay attention to
-       the set device.
-       * sys/xvimage/xvimagesink.c (gst_xvimagesink_get_xv_support): Free the
-       attrs
-       (gst_xvimagesink_xcontext_clear): Free the xcontext.
-       (gst_xvimagesink_finalize): Free the par.
-
-2004-10-26  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavimux.c: (gst_avimux_audsinkconnect),
-       (gst_avimux_stop_file):
-         First calculate the rate, and only then use it. Hdr.rate is a
-         multiple and not a derivative of hdr.scale. Scale is not the
-         same as blockalign but is solely related to rate.
-
-2004-10-26  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_init),
-       (gst_gnomevfssink_handle_event), (gst_gnomevfssink_chain):
-         Implement seeking.
-
-2004-10-25  James Henstridge  <james@jamesh.id.au>
-
-       Reviewed by:  David Schleef  <ds@schleef.org>
-
-       * examples/gstplay/player.c: (got_stream_length), (main):
-       * examples/seeking/cdplayer.c: (update_scale):
-       * examples/seeking/seek.c: (format_value), (update_scale):
-       * examples/seeking/spider_seek.c: (format_value), (update_scale),
-       (stop_seek):
-       Build fixes on AMD64.
-
-2004-10-25  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       reviewed by: Ronald Bultje <rbultje at gnome dot org>
-
-       * sys/v4l/v4l_calls.c: (gst_v4l_get_chan_names):
-       Fix for some v4l cards which hang in v4lsrc
-
-2004-10-25  Wim Taymans  <wim@fluendo.com>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_remove),
-       (gst_ogg_demux_push), (gst_ogg_chains_clear):
-       Make sure to remove the pad when a new chain is
-       encountered. Set some vars to NULL so we don't try
-       to reference freed memory.
-
-2004-10-25  Wim Taymans  <wim@fluendo.com>
-
-       * examples/seeking/Makefile.am:
-       * examples/seeking/cdplayer.c: (update_scale):
-       * examples/seeking/chained.c: (unlinked), (new_pad), (main):
-       * examples/seeking/playbin.c: (make_playerbin_pipeline),
-       (format_value), (update_scale), (iterate), (start_seek),
-       (stop_seek), (print_media_info), (play_cb), (pause_cb), (stop_cb),
-       (print_usage), (main):
-       Added some more examples, update others.
-
-2004-10-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/flac/gstflacdec.c: (gst_flacdec_update_metadata):
-       * ext/speex/gstspeexdec.c: (speex_dec_chain):
-       * ext/theora/theoradec.c: (theora_dec_chain):
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
-         Add codec-name metadata.
-
-2004-10-25  Takao Fujiwara  <Takao.Fujiwara@Sun.COM>
-
-       Reviewd by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
-       * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
-       * ext/alsa/gstalsamixertrack.h:
-       * po/POTFILES.in:
-         ALSA mixer track label internationalization (#154054).
-
-2004-10-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/theora/theoradec.c: (theora_dec_chain):
-         Export bitrate as metadata.
-
-2004-10-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
-       * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
-       * ext/alsa/gstalsamixertrack.h:
-         Fix names, fix loop.
-
-2004-10-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/speex/gstspeexdec.c: (gst_speex_dec_init),
-       (speex_dec_convert):
-         sinkconvert function so oggdemux can get the file length (totem).
-
-2004-10-25  James Morrison  <ja2morri@csclub.uwaterloo.ca>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_chunk):
-         Don't push incomplete packets.
-       * gst/typefind/gsttypefindfunctions.c: (m4a_type_find):
-         Fix MPEG-4 audio typefinding.
-
-2004-10-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/v4l/Makefile.am:
-       * sys/v4l/gstv4l.c: (plugin_init):
-       * sys/v4l/gstv4lelement.c: (gst_v4lelement_get_type),
-       (gst_v4lelement_init), (gst_v4lelement_dispose),
-       (gst_v4lelement_change_state):
-       * sys/v4l/gstv4lelement.h:
-       * sys/v4l/gstv4lxoverlay.c: (gst_v4l_xoverlay_open),
-       (gst_v4l_xoverlay_close), (idle_refresh),
-       (gst_v4l_xoverlay_set_xwindow_id):
-       * sys/v4l/gstv4lxoverlay.h:
-       * sys/v4l/v4l-overlay_calls.c:
-       * sys/v4l/v4l_calls.h:
-       * sys/v4l2/Makefile.am:
-       * sys/v4l2/gstv4l2.c: (plugin_init):
-       * sys/v4l2/gstv4l2element.c: (gst_v4l2element_get_type),
-       (gst_v4l2element_init), (gst_v4l2element_dispose),
-       (gst_v4l2element_change_state):
-       * sys/v4l2/gstv4l2element.h:
-       * sys/v4l2/gstv4l2xoverlay.c: (gst_v4l2_xoverlay_open),
-       (gst_v4l2_xoverlay_close), (idle_refresh),
-       (gst_v4l2_xoverlay_set_xwindow_id):
-       * sys/v4l2/gstv4l2xoverlay.h:
-       * sys/v4l2/v4l2-overlay_calls.c:
-       * sys/v4l2/v4l2_calls.h:
-         Remove client-side overlay handling, use the X-server v4l plugin
-         for that. Nicer overlay, less code. Also make the plugin
-         compileable without X (but then without overlay, obviously).
-         Makes xwindowlistener obsolete, should we remove that?
-
-2004-10-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/oss/gstosssrc.c: (gst_osssrc_get_time), (gst_osssrc_get),
-       (gst_osssrc_src_query):
-       * sys/oss/gstosssrc.h:
-         OK, so people want offset in DEFAULT. This time, actually fix all
-         cases.
-       * sys/v4l2/gstv4l2src.c: (gst_v4l2src_getcaps):
-         Add FPS properly.
-
-2004-10-24  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/asfdemux/gstasfmux.c:
-       * gst/avi/gstavimux.c:
-         Framerate.
-
-2004-10-24  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/v4l2/gstv4l2element.c: (gst_v4l2element_set_property):
-         Fix properties (channel, norm, frequency).
-
-2004-10-24  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/v4l2/gstv4l2element.c: (gst_v4l2element_get_property):
-         Flag typo.
-       * sys/v4l2/v4l2_calls.c: (gst_v4l2_set_defaults):
-         No warnings.
-
-2004-10-24  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_clear_format_list):
-         Fix hang.
-
-2004-10-24  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/v4l2/gstv4l2element.h:
-         Yet Another Hack (tm) for kernel header borkedness.
-       * sys/v4l2/gstv4l2src.c: (gst_v4l2src_init),
-       (gst_v4l2src_v4l2fourcc_to_caps), (gst_v4l2_fourcc_from_structure),
-       (gst_v4l2src_link), (gst_v4l2src_getcaps),
-       (gst_v4l2src_change_state):
-       * sys/v4l2/gstv4l2src.h:
-       * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_capture_init),
-       (gst_v4l2src_capture_start), (gst_v4l2src_capture_stop):
-         Fix caps, keep track of state, work.
-
-2004-10-24  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_getcaps):
-         Quiet.
-
-2004-10-24  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/oss/gstosssrc.c: (gst_osssrc_get):
-         Don't mix bytes and samples.
-
-2004-10-24  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggmux.c:
-         Basic pad template which accepts OGM tracks, speex, flac, vorbis
-         and theora. Any is incorrect.
-       * gst/asfdemux/gstasfmux.c: (gst_asfmux_vidsink_link):
-         Fix caps.
-       * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_base_init):
-       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_base_init),
-       (gst_v4lmjpegsrc_init), (gst_v4lmjpegsrc_srcconnect),
-       (gst_v4lmjpegsrc_getcaps), (gst_v4lmjpegsrc_change_state):
-       * sys/v4l/gstv4lmjpegsrc.h:
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_src_link), (gst_v4lsrc_getcaps),
-       (gst_v4lsrc_change_state):
-       * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_capture_start),
-       (gst_v4lmjpegsrc_capture_stop):
-         Fix caps. Keep track of internal state. Work.
-
-2004-10-23  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/Makefile.am:
-         Fix the build fixes.
-
-2004-10-23  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
-       (gst_ogg_demux_src_event), (_find_chain_seek),
-       (gst_ogg_pad_push):
-         Check for pad availability before using it.
-       * ext/ogg/gstoggdemux.c: (_find_chain_process):
-         Fix parsing of chained ogg. Needs more work on the decoder side.
-
-2004-10-22  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst/spectrum/Makefile.am:
-       * gst/spectrum/demo-osssrc.c: (spectrum_chain), (main),
-       (idle_func):
-         Fix demo and reenable it. Yes, I'm currently playing with audio
-         analysis tools
-
-2004-10-22  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
-         We love it if files that start at zero work too...
-
-2004-10-22  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_iterate):
-         Handle files with missing EOS headers.
-
-2004-10-21  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * gst/tcp/gsttcpserversink.c:
-       (gst_tcpserversink_handle_server_read),
-       (gst_tcpserversink_init_send):
-       Zero some variables first (need for accept not to return EINVAL)
-
-2004-10-20  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
-       (gst_ogg_demux_src_event), (gst_ogg_pad_push):
-       * ext/theora/theoradec.c: (theora_dec_sink_convert),
-       (theora_dec_chain):
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_get_formats),
-       (gst_vorbis_dec_init), (vorbis_dec_convert), (vorbis_dec_chain):
-         Seeking and querying finetune.
-
-2004-10-20  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-       * ext/Makefile.am:
-       * ext/raw1394/Makefile.am:
-         fix the build
-
-2004-10-20  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_iterate):
-         Wrong return.
-       * gst/playback/Makefile.am:
-       * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init):
-       * gst/playback/gstplay-marshal.list:
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init):
-         Fix marshallers.
-
-2004-10-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event):
-         Silence.
-
-2004-10-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
-       (gst_ogg_demux_src_event), (gst_ogg_pad_populate),
-       (gst_ogg_pad_push):
-         Yay for non-lineair granulepos in theora.
-
-2004-10-18  Wim Taymans  <wim@fluendo.com>
-
-       * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_video_getcaps),
-       (gst_dvdec_video_link), (gst_dvdec_push), (gst_dvdec_loop):
-       * ext/dv/gstdvdec.h:
-       Make sure we renegotiate aspect ratio when the camera switches.
-
-2004-10-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
-       (gst_ogg_demux_src_event), (gst_ogg_pad_push):
-         Start at zero.
-       * ext/theora/theoradec.c: (theora_dec_chain):
-         Skip headers. Bad idea for chained ogg, but fixes seeking.
-
-2004-10-18  Wim Taymans  <wim@fluendo.com>
-
-       * configure.ac:
-       I swear, this is the last time I touch this.
-
-2004-10-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
-       (gst_ogg_demux_src_event), (gst_ogg_pad_populate),
-       (_read_bos_process), (gst_ogg_demux_iterate), (gst_ogg_pad_new):
-         Faster seeking.
-       * ext/theora/theoradec.c: (theora_dec_sink_convert):
-         Time-to-default conversion.
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
-         Don't error on unknown packets, just skip. We should probably
-         read them if we want to support chained ogg.
-
-2004-10-18  Wim Taymans  <wim@fluendo.com>
-
-       * configure.ac:
-       Added cdaudio to wrong list.
-
-2004-10-18  Wim Taymans  <wim@fluendo.com>
-
-       * configure.ac:
-       Revive cdaudio.
-
-2004-10-18  Wim Taymans  <wim@fluendo.com>
-
-       * ext/dv/gstdvdec.c: (gst_dvdec_video_getcaps),
-       (gst_dvdec_video_link), (gst_dvdec_push):
-       * ext/jpeg/gstsmokeenc.c: (gst_smokeenc_class_init),
-       (gst_smokeenc_resync), (gst_smokeenc_chain):
-       Fix mimetype on smoke encoder.
-       Add aspect ratio to dvdec. Not sure if these
-       values are correct though....
-
-2004-10-18  Wim Taymans  <wim@fluendo.com>
-
-       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_class_init):
-       Fix vorbis property descriptions and ranges.
-
-2004-10-18  Wim Taymans  <wim@fluendo.com>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_iterate):
-       Really do nothing when no data is available.
-       Go to the playing state when the stream is not seekable
-       instead of failing.
-
-2004-10-18  Wim Taymans  <wim@fluendo.com>
-
-       * ext/cdaudio/gstcdaudio.c: (_do_init), (gst_cdaudio_base_init),
-       (gst_cdaudio_get_event_masks), (gst_cdaudio_send_event),
-       (gst_cdaudio_query), (plugin_init), (cdaudio_uri_get_type),
-       (cdaudio_uri_get_protocols), (cdaudio_uri_get_uri),
-       (cdaudio_uri_set_uri), (cdaudio_uri_handler_init):
-       Added uri handler for cd://
-       Port to new API.
-
-2004-10-18  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init),
-       (gst_decode_bin_init), (find_compatibles), (close_pad_link),
-       (try_to_link_1), (no_more_pads), (close_link), (type_found):
-       * gst/playback/gstplaybasebin.c: (gen_preroll_element),
-       (remove_prerolls), (unknown_type), (add_element_stream),
-       (new_decoded_pad), (setup_source), (gst_play_base_bin_add_element),
-       (gst_play_base_bin_remove_element),
-       (gst_play_base_bin_link_stream):
-       * gst/playback/gstplaybin.c: (gen_video_element),
-       (gen_vis_element), (remove_sinks), (setup_sinks):
-       * gst/playback/gststreaminfo.c: (gst_stream_type_get_type),
-       (gst_stream_info_get_type), (gst_stream_info_class_init),
-       (gst_stream_info_init), (gst_stream_info_new),
-       (gst_stream_info_dispose), (stream_info_mute_pad),
-       (gst_stream_info_set_property), (gst_stream_info_get_property):
-       * gst/playback/gststreaminfo.h:
-       Add sink padtemplate to decodebin.
-       Added some more comments.
-       Make queue size configurable in playbasebin.
-       Added possibility to use elements as sinks (ex cdaudio).
-
-2004-10-15  Wim Taymans  <wim@fluendo.com>
-
-       * ext/speex/gstspeexenc.c: (gst_speexenc_class_init),
-       (gst_speexenc_chain):
-       Fix speex timestamps so that it gets muxed properly.
-
-2004-10-15  Wim Taymans  <wim@fluendo.com>
-
-       * ext/raw1394/gstdv1394src.c: (gst_dv1394src_get_type),
-       (gst_dv1394src_base_init), (gst_dv1394src_class_init),
-       (gst_dv1394src_init), (gst_dv1394src_dispose),
-       (gst_dv1394src_iso_receive), (gst_dv1394src_discover_avc_node),
-       (gst_dv1394src_change_state), (gst_dv1394src_get_event_mask),
-       (gst_dv1394src_event), (gst_dv1394src_get_formats),
-       (gst_dv1394src_convert), (gst_dv1394src_get_query_types),
-       (gst_dv1394src_query), (gst_dv1394src_uri_get_type),
-       (gst_dv1394src_uri_get_protocols), (gst_dv1394src_uri_get_uri),
-       (gst_dv1394src_uri_set_uri), (gst_dv1394src_uri_handler_init):
-       * ext/raw1394/gstdv1394src.h:
-       Added conversion/query functions.
-       Update buffer timestamps,
-       Added signals.
-       Added uri dv:// so it might play from the firewire in playbin.
-       Fix a possible leak.
-       Added debugging.
-
-2004-10-15  Wim Taymans  <wim@fluendo.com>
-
-       * ext/raw1394/gstdv1394src.c: (gst_dv1394src_class_init),
-       (gst_dv1394src_init), (gst_dv1394src_set_property),
-       (gst_dv1394src_get_property), (gst_dv1394src_iso_receive),
-       (gst_dv1394src_discover_avc_node), (gst_dv1394src_change_state):
-       * ext/raw1394/gstdv1394src.h:
-       Added AV/C VTR control support needed for some cameras.
-       Added automatic port detection.
-       Added properties for selecting the channel.
-       The configure.ac script is not yet updated to reflect the
-       new libavc1394 and librom1394 dependencies.
-
-2004-10-15  Wim Taymans  <wim@fluendo.com>
-
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
-       (qtdemux_parse), (gst_qtdemux_handle_esds):
-       An esds box is not a container.
-       Fix parsing of mp4v boxes.
-       Do not try to renegotiate fps for each frame. Need to
-       find a better method. This should fix mp4 playback.
-
-2004-10-14  David Schleef  <ds@schleef.org>
-
-       * configure.ac: update for swfdec-0.3 and liboil-0.2
-       * ext/swfdec/gstswfdec.c: update for swfdec-0.3
-       * ext/swfdec/gstswfdec.h: same
-       * gst/videofilter/gstvideobalance.c: update for liboil-0.2
-       * gst/videotestsrc/videotestsrc.c: same
-
-2004-10-14  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_add),
-       (gst_multifdsink_remove), (gst_multifdsink_remove_client_link),
-       (is_sync_frame), (gst_multifdsink_new_client),
-       (gst_multifdsink_handle_client_write),
-       (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
-       (gst_multifdsink_handle_clients), (gst_multifdsink_change_state):
-       Turn warnings into info.
-       Don't allow a state change in the streaming thread.
-
-2004-10-14  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/vorbis/oggvorbisenc.c:
-       * ext/vorbis/vorbisdec.c:
-         fix template sample rate
-
-2004-10-13  Wim Taymans  <wim@fluendo.com>
-
-       * ext/mad/gstmad.c: (gst_mad_check_caps_reset), (gst_mad_chain):
-       Decoding the header first fixes some problems in resyncing
-       in more mp3s.
-
-2004-10-12  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/gstplaybin.c: (gen_video_element),
-       (gen_vis_element), (remove_sinks), (setup_sinks):
-       Added vis plugin support, need to configure the vis
-       element to activate it.
-
-2004-10-12  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_get),
-       (gst_gnomevfssrc_srcpad_query), (gst_gnomevfssrc_srcpad_event):
-         Some debug.
-       * gst/avi/gstavidemux.c: (gst_avi_demux_reset),
-       (gst_avi_demux_handle_src_event), (gst_avi_demux_read_superindex),
-       (gst_avi_demux_read_subindexes), (gst_avi_demux_add_stream),
-       (gst_avi_demux_stream_index), (gst_avi_demux_skip),
-       (gst_avi_demux_sync), (gst_avi_demux_stream_scan),
-       (gst_avi_demux_massage_index), (gst_avi_demux_stream_header):
-       * gst/avi/gstavidemux.h:
-         Support for openDML-2.0 indx/ix## chunks. Support for broken index
-         recovery (where, if part of the index is broken, we will still read
-         the rest of the index and recover the broken part by stream
-         scanning). More broken media support. EOS workarounds. General AVI
-         braindamage headache recovery. Aspirin included.
-
-2004-10-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_open),
-       (cdparanoia_event), (cdparanoia_query):
-         Get rid of hideous lead-in.
-
-2004-10-11  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/gstplaybasebin.c: (setup_source):
-       Wrong var used to get g_list_next.
-
-2004-10-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_class_init),
-       (cdparanoia_get), (cdparanoia_open):
-         Report discid as metadata, add duration.
-
-2004-10-11  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/gstplaybasebin.c: (setup_source):
-       Cleanup the previous pipeline a little earlier for the
-       case that a source element provides raw data.
-
-2004-10-11  Benjamin Otte  <otte@gnome.org>
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
-         reset v1 tag offset when there is no v1 tag. Fixes id3demux always
-         consuming the last 128 bytes, even though it was valid mp3 data.
-
-2004-10-10  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_palette_to_caps),
-       (gst_v4lsrc_getcaps), (gst_v4lsrc_get):
-       * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay):
-       Change g_warnings to GST_WARNING_OBJECT and fix colourspace issue
-
-2004-10-10  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_src_link), (gst_v4lsrc_getcaps):
-       Fix for webcams that support only specific width or height
-
-2004-10-09  Tim-Philipp Müller  <t.i.m@zen.co.uk>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/wavenc/gstwavenc.c: (gst_wavenc_stop_file):
-         Fix wrong discont event setup (fixes #154967).
-
-2004-10-09  Sebastien Cote  <sc5@hermes.usherb.ca>
-
-       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/auparse/gstauparse.c: (gst_auparse_chain):
-         Error out on invalid data (fixes #154807).
-
-2004-10-09  Tim-Philipp Müller  <t.i.m@zen.co.uk>
-
-       Reviewed by: Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/dvdread/dvdreadsrc.c: (_read):
-         Make titles > 0 work again (fixes #154834).
-
-2004-10-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-media.c:
-       (gst_riff_create_video_template_caps):
-         WMV3 missing in template caps.
-
-2004-10-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_massage_index):
-         OK, so the original code was too strict. It makes random AVI files
-         hang for seconds upon opening, which is unacceptable and is far
-         beyond the original goal of getting multiple chunks for one-chunk
-         sounc stream files. So now do just that.
-
-2004-10-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c: (setup_source),
-       (gst_play_base_bin_change_state):
-         Actually clean up streaminfo if output fails. This would trigger
-         if, for example, there was no CD in the drive. No preroll, so
-         a streaminfo structure is created, but the subsequent state change
-         of the thread fails.
-       * gst/playback/gstplaybin.c: (gst_play_bin_change_state):
-         Don't change state if parent failed.
-
-2004-10-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybin.c: (gst_play_bin_class_init),
-       (gst_play_bin_init), (gst_play_bin_get_property), (handoff),
-       (gen_video_element), (remove_sinks):
-         Add small bits of code for screenshot handling.
-
-2004-10-08  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/gstplaybin.c: (gst_play_bin_set_property),
-       (gen_video_element), (gen_audio_element), (setup_sinks):
-       Don't assume the user provided sinks are named "sink"...
-
-2004-10-08  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/gstplaybasebin.c: (gen_preroll_element),
-       (unknown_type), (setup_source), (gst_play_base_bin_remove_element),
-       (gst_play_base_bin_link_stream):
-       Do not try to autoplug sources that generate raw streams like
-       cdparanoia.
-       disconnect the preroll overrun signal when we don't need it anymore.
-
-2004-10-08  Milosz Derezynski  <internalerror.rez@fhtw-berlin.de>
-
-       * ext/cdparanoia/gstcdparanoia.c: (_do_init),
-       Added reworked patch from #154903 from milosz derezynski (deadchip).
-
-2004-10-08  Wim Taymans  <wim@fluendo.com>
-
-       * ext/cdparanoia/gstcdparanoia.c: (_do_init),
-       (cdparanoia_base_init), (cdparanoia_class_init), (cdparanoia_init),
-       (cdparanoia_dispose), (cdparanoia_get), (cdparanoia_change_state),
-       (cdparanoia_convert), (cdparanoia_uri_get_type),
-       (cdparanoia_uri_get_protocols), (cdparanoia_uri_get_uri),
-       (cdparanoia_uri_set_uri), (cdparanoia_uri_handler_init):
-       * ext/cdparanoia/gstcdparanoia.h:
-       This adds the cdda://<tracknum> uri.
-
-2004-10-08  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init),
-       (gst_decode_bin_init), (find_compatibles), (close_pad_link),
-       (try_to_link_1), (no_more_pads), (close_link), (type_found):
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
-       (unknown_type), (gst_play_base_bin_remove_element),
-       (gst_play_base_bin_link_stream):
-       * gst/playback/gstplaybasebin.h:
-       * gst/playback/gstplaybin.c: (gst_play_bin_init),
-       (gst_play_bin_set_property), (gen_video_element),
-       (gen_audio_element), (setup_sinks):
-       * gst/playback/gststreaminfo.c: (gst_stream_type_get_type),
-       (gst_stream_info_get_type), (gst_stream_info_class_init),
-       (gst_stream_info_init), (gst_stream_info_new),
-       (gst_stream_info_dispose), (stream_info_mute_pad),
-       (gst_stream_info_set_property), (gst_stream_info_get_property):
-       * gst/playback/gststreaminfo.h:
-       Reuse the audio and video bins.
-       Some internal cleanups in the stream selection code.
-
-2004-10-08  Julien MOUTTE  <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_sink_link),
-       (gst_ximagesink_set_xwindow_id), (gst_ximagesink_init):
-       * sys/ximage/ximagesink.h:
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_sink_link),
-       (gst_xvimagesink_set_xwindow_id), (gst_xvimagesink_init):
-       * sys/xvimage/xvimagesink.h: Reverting Ronald's changes as the issue is
-       not coming from those elements. Moreover these elements should not keep
-       the xid they have been given when in NULL state.
-
-2004-10-07  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_sink_link),
-       (gst_ximagesink_set_xwindow_id), (gst_ximagesink_init):
-       * sys/ximage/ximagesink.h:
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_sink_link),
-       (gst_xvimagesink_set_xwindow_id), (gst_xvimagesink_init):
-       * sys/xvimage/xvimagesink.h:
-         Actually only create a new toplevel window if we're not gonna
-         embed it right after.
-
-2004-10-07  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/gstplaybasebin.c: (play_base_bin_mute_pad),
-       (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream):
-       * gst/playback/gstplaybin.c: (setup_sinks):
-       Implement muting/unmuting of streams, mute streams that are not
-       used.
-
-2004-10-07  Wim Taymans  <wim@fluendo.com>
-
-       * gst/typefind/gsttypefindfunctions.c: (ac3_type_find),
-       (plugin_init):
-       Added lame audio/x-ac3 typefind function.
-
-2004-10-06  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
-
-       * configure.ac:
-         bump nano to cvs
-
-=== release 0.8.5 ===
-
-2004-10-06  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
-
-       * NEWS:
-       * RELEASE:
-       * configure.ac:
-         releasing 0.8.5, "Take You On"
-
-2004-10-06  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/gstdecodebin.c: (gst_decode_bin_init),
-       (find_compatibles), (close_pad_link), (try_to_link_1), (new_pad),
-       (no_more_pads), (close_link), (type_found):
-       * gst/playback/gstplaybasebin.c: (new_decoded_pad):
-       * gst/playback/gstplaybin.c: (gen_video_element):
-       Do not signal the no_more_pads after the first pad when
-       we are plugging a non dynamic element with multiple
-       output pads (like swfdec, dvdec, ...).
-
-2004-10-06  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-         bump for prerelease
-
-2004-10-06  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
-
-       * gst/wavparse/gstwavparse.c:
-         add ATRAC3 to STATIC CAPS to fix a warning
-
-       * gst/matroska/ebml-read.c:
-       * gst-libs/gst/riff/riff-read.c:
-         fix typos
-
-2004-10-06  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
-
-       * gst-libs/gst/riff/riff-media.c:
-         generate caps for ATRAC3 audio streams
-
-       * gst/realmedia/rmdemux.c:
-         generate caps for ATRAC3 audio streams
-
-2004-10-06  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
-
-       * gst/wavparse/Makefile.am
-       * gst/wavparse/riff.h
-       * gst/wavparse/wavparse.vcproj
-         riff.h removal (unused and duplication with riff-ids.h)
-
-2004-10-06  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
-
-       * gst/wavparse/gstwavparse.h
-         remove duplicated defines for audio codec codes
-
-       * gst-libs/gst/riff/riff-ids.h
-       * gst/wavenc/riff.h:
-         add "4CC" code for ATRAC3 audio streams
-         add "4CC" code for ITU_G721_ADPCM (unused for now)
-
-2004-10-06  Wim Taymans  <wim@fluendo.com>
-
-       * gst/flx/gstflxdec.c: (gst_flxdec_init), (gst_flxdec_loop):
-       Actually _do_ negotiation. Pass gdouble as arg instead
-       of guint64 for the framerate.
-
-2004-10-06  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/gstdecodebin.c: (gst_decode_bin_init),
-       (find_compatibles), (close_pad_link), (try_to_link_1),
-       (no_more_pads), (close_link), (type_found):
-       * gst/playback/gstplaybasebin.c: (new_decoded_pad):
-       * gst/playback/gstplaybin.c: (gen_video_element),
-       (gen_audio_element):
-       Set state on newly added element to READY so that negotiation
-       can happen ASAP.
-       Addes some more debug info.
-       Do not try to plug pads with multiple caps structures or ANY
-       because it is too dangerous since we do not do dynamic
-       replugging.
-
-2004-10-06  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       written by: Gora Mohanty <gora_mohanty@yahoo.co.in>
-
-       * po/LINGUAS:
-       * po/or.po:
-         add Oriya translation
-
-2004-10-05  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_massage_index):
-         Prevent overwrite of size member. Makes audio sound crappy.
-
-2004-10-05  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
-
-       * gst/typefind/gsttypefindfunctions.c: (plugin_init):
-       Add rmvb to the list of known RealMedia extensions
-
-2004-10-05  Wim Taymans  <wim@fluendo.com>
-
-       * ext/libmng/gstmngdec.c: (gst_mngdec_loop), (mngdec_error),
-       (mngdec_openstream), (mngdec_closestream),
-       (mngdec_handle_sink_event), (mngdec_readdata),
-       (mngdec_gettickcount), (mngdec_settimer), (mngdec_processheader),
-       (mngdec_getcanvasline), (mngdec_refresh),
-       (gst_mngdec_change_state):
-       Set the framerate correctly.
-
-2004-10-04  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_massage_index):
-         There was something wrong with the index massaging.
-
-2004-10-04  Wim Taymans  <wim@fluendo.com>
-
-       * ext/jpeg/gstjpeg.c: (smoke_type_find), (plugin_init):
-       * ext/jpeg/gstsmokedec.c: (gst_smokedec_init),
-       (gst_smokedec_chain):
-       * ext/jpeg/gstsmokedec.h:
-       * ext/jpeg/gstsmokeenc.c: (gst_smokeenc_class_init),
-       (gst_smokeenc_init), (gst_smokeenc_resync), (gst_smokeenc_chain):
-       * ext/jpeg/gstsmokeenc.h:
-       * ext/jpeg/smokecodec.c: (smokecodec_encode_new),
-       (smokecodec_decode_new), (smokecodec_info_free),
-       (smokecodec_set_quality), (smokecodec_get_quality),
-       (smokecodec_set_threshold), (smokecodec_get_threshold),
-       (smokecodec_set_bitrate), (smokecodec_get_bitrate),
-       (find_best_size), (abs_diff), (put), (smokecodec_encode_id),
-       (smokecodec_encode), (smokecodec_parse_id),
-       (smokecodec_parse_header), (smokecodec_decode):
-       * ext/jpeg/smokecodec.h:
-       * ext/jpeg/smokeformat.h:
-       Updated smoke, new bitstream, allows embedding in ogg.
-
-2004-10-04  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_event):
-         Fix seeking in some files. All this code is no longer needed (and
-         actually breaks stuff) because we now synchronize the full index
-         right when reading the header.
-
-2004-10-04  Wim Taymans  <wim@fluendo.com>
-
-       * configure.ac:
-       configure update for libmng.
-
-2004-10-04  Wim Taymans  <wim@fluendo.com>
-
-       * ext/libmng/Makefile.am:
-       * ext/libmng/gstmng.c: (plugin_init):
-       * ext/libmng/gstmng.h:
-       * ext/libmng/gstmngdec.c: (gst_mngdec_get_type),
-       (gst_mngdec_base_init), (gst_mngdec_class_init),
-       (gst_mngdec_sinklink), (gst_mngdec_init), (gst_mngdec_src_getcaps),
-       (gst_mngdec_loop), (gst_mngdec_get_property),
-       (gst_mngdec_set_property), (mngdec_error), (mngdec_openstream),
-       (mngdec_closestream), (mngdec_handle_sink_event),
-       (mngdec_readdata), (mngdec_gettickcount), (mngdec_settimer),
-       (mngdec_processheader), (mngdec_getcanvasline), (mngdec_refresh),
-       (gst_mngdec_change_state):
-       * ext/libmng/gstmngdec.h:
-       * ext/libmng/gstmngenc.c: (gst_mngenc_get_type),
-       (mng_caps_factory), (raw_caps_factory), (gst_mngenc_base_init),
-       (gst_mngenc_class_init), (gst_mngenc_sinklink), (gst_mngenc_init),
-       (gst_mngenc_chain), (gst_mngenc_get_property),
-       (gst_mngenc_set_property):
-       * ext/libmng/gstmngenc.h:
-       Added basic MNG decoder. Needs more work. The encoder does
-       not work yet.
-
-2004-10-04  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/realmedia/rmdemux.c: (gst_rmdemux_handle_sink_event),
-       (gst_rmdemux_loop), (gst_rmdemux_add_stream),
-       (gst_rmdemux_parse_mdpr), (gst_rmdemux_dump_mdpr):
-         Don't hang on length=0 chunks. Some negotiation fixes. Signal
-         no-more-pads.
-
-2004-10-04  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-         you need at least 1.0.4 of speex
-
-2004-10-04 Iain <iaingnome@gmail.com>
-
-       * ext/speex/gstspeexdec.h: Revert the includes changes.
-
-       * ext/speex/gstspeexenc.[ch]: Revert the includes changes.
-
-2004-09-30 Iain <iaingnome@gmail.com>
-
-       * sys/sunaudio/gstsunaudio.c (gst_sunaudiosink_open): Use the device
-       found during init or set as a property instead of hardcoding /dev/audio
-
-2004-10-04  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/realmedia/rmdemux.c: (gst_rmdemux_class_init),
-       (gst_rmdemux_init), (gst_rmdemux_handle_sink_event),
-       (gst_rmdemux_loop), (gst_rmdemux_add_stream), (re_hexdump_bytes),
-       (re_dump_pascal_string), (gst_rmdemux_dump__rmf),
-       (gst_rmdemux_dump_prop), (gst_rmdemux_parse_mdpr),
-       (gst_rmdemux_dump_mdpr), (gst_rmdemux_dump_indx),
-       (gst_rmdemux_dump_data):
-         Use debug category, fix EOS handling. filesrc ! rmdemux now
-         works.
-
-2004-10-04  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index),
-       (gst_avi_demux_stream_scan), (sort), (gst_avi_demux_massage_index),
-       (gst_avi_demux_stream_header), (gst_avi_demux_stream_data):
-         Improve allocation, cutting and sorting of the index. How takes a
-         few seconds instead of minutes.
-
-2004-10-03  Christophe Fergeau  <teuf@gnome.org>
-
-       * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_mdpr):
-         fixed compilation
-
-2004-10-02  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-media.c:
-       (gst_riff_create_video_caps_with_data),
-       (gst_riff_create_video_template_caps):
-         Add wing commander format mimetype/fourccs.
-       * gst/avi/gstavidemux.c: (gst_avi_demux_massage_index):
-         Don't crash if some value is 0.
-
-2004-10-02  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-media.c:
-       (gst_riff_create_video_caps_with_data),
-       (gst_riff_create_video_template_caps):
-         Add DIB fourcc (raw, palettized 8-bit RGB).
-       * gst-libs/gst/riff/riff-read.c:
-       (gst_riff_read_strf_vids_with_data):
-         Oops, fix strf_data reading bug.
-       * gst/avi/gstavidemux.c: (gst_avi_demux_add_stream):
-         Use a non-NULL tag.
-       * gst/qtdemux/qtdemux.c: (qtdemux_parse_trak):
-         Time for hacks. Sorry Dave. At least one quicktime movie (a
-         trailer) that I've encountered contains multiple video tracks.
-         One of those is the actual video track, the other are one-frame
-         tracks (images). Unfortunately, the number of frames according
-         to the trak header is 1 for each, so that doesn't help. So
-         instead, I look at the duration and discard tracks with a
-         duration shorter than 20% of the length of the stream. Better
-         than nothing.
-
-2004-10-01  Christian Schaller <christian@fluendo.com>
-
-       * ext/ivorbis/vorbis.c:
-         Patch from Phil Blundell (Bug 152341)
-
-2004-10-01  Wim Taymans  <wim@fluendo.com>
-
-       * ext/speex/gstspeexdec.c: (gst_speex_dec_class_init),
-       (speex_dec_get_formats), (speex_dec_convert),
-       (speex_dec_src_query), (speex_dec_src_event), (speex_dec_event),
-       (speex_dec_chain), (gst_speexdec_get_property),
-       (gst_speexdec_set_property):
-       Small cleanups.
-
-2004-10-01  Wim Taymans  <wim@fluendo.com>
-
-       * gst/wavparse/gstwavparse.c: (gst_wavparse_class_init),
-       (gst_wavparse_stream_init), (gst_wavparse_fmt),
-       (gst_wavparse_other), (gst_wavparse_loop),
-       (gst_wavparse_pad_convert), (gst_wavparse_pad_query),
-       (gst_wavparse_srcpad_event):
-       * gst/wavparse/gstwavparse.h:
-       Added some more debugging info.
-       Fix the case where the length of the file is 0.
-       Make sure we seek to sample borders.
-
-2004-10-01  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/README:
-       * gst/playback/gstdecodebin.c: (gst_decode_bin_factory_filter),
-       (gst_decode_bin_init), (find_compatibles), (close_pad_link),
-       (try_to_link_1), (no_more_pads), (close_link), (type_found):
-       Add some debug info to decodebin, update README
-
-2004-10-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/dvdnav/dvdnavsrc.c: (dvdnav_handle_navigation_event):
-         Don't use g_print(); use GST_DEBUG().
-
-2004-10-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
-       (gst_ogg_mux_queue_pads):
-         Handle EOS properly.
-
-2004-10-01  Sebastien Cote  <sc5@hermes.usherb.ca>
-
-       Reviewed by: Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/faad/gstfaad.c: (gst_faad_init), (gst_faad_sinkconnect),
-       (gst_faad_chain), (gst_faad_change_state):
-       * ext/faad/gstfaad.h:
-         Allow playback of raw (unframed) MPEG AAC files (#148993).
-
-2004-10-01  Sebastien Cote  <sc5@hermes.usherb.ca>
-
-       Reviewed by: Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/wavparse/gstwavparse.c: (gst_wavparse_fmt):
-         Throw error if we didn't recognize the stream. Fixes #152289.
-
-2004-10-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/videoscale/gstvideoscale.c: (gst_videoscale_link):
-         Fix negotiation.
-
-2004-10-01  Francis Labonte  <francis_labonte@hotmail.com>
-
-       Reviewed by: Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/wavparse/gstwavparse.c: (gst_wavparse_fmt):
-         Fix memleak.
-
-2004-10-01  Balamurali Viswanathan  <balamurali.viswanathan@wipro.com>
-
-       Reviewed by: Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/sunaudio/gstsunaudio.c: (gst_sunaudiosink_setparams):
-         Solve #152805.
-       * sys/sunaudio/gstsunmixer.c: (gst_sunaudiomixer_set_mute):
-         Solve 152806.
-
-2004-10-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-media.c:
-       (gst_riff_create_video_caps_with_data),
-       (gst_riff_create_audio_caps_with_data):
-         Add codec_data handling (like asfdemux used to do).
-       * gst/asfdemux/gstasf.c: (plugin_init):
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init),
-       (gst_asf_demux_add_audio_stream), (gst_asf_demux_add_video_stream):
-         Use riff-media for caps creation instead of our own (mostly
-         broken) copy of its functions.
-
-2004-10-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_try_capture):
-         Don't actually error out if we get another return value than
-         -EINVAL. Opposite to what I first thought, drivers have random
-         return values for this, although -EINVAL is the expected return
-         value. Since this is not fatal, we shouldn't use
-         GST_ELEMENT_ERROR() but just GST_ERROR_OBJECT().
-
-2004-10-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_class_init),
-       (dvdreadsrc_init), (dvdreadsrc_dispose), (dvdreadsrc_set_property),
-       (dvdreadsrc_get_property), (_open), (_seek), (_read),
-       (dvdreadsrc_get), (dvdreadsrc_open_file),
-       (dvdreadsrc_change_state):
-         Fix. Don't do one big huge loop around the whole DVD, that will
-         cache all data and thus eat sizeof(dvd) (several GB) before we
-         see something.
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_seek):
-         Actually NULL'ify event after using it.
-       * gst/matroska/ebml-read.c: (gst_ebml_read_use_event),
-       (gst_ebml_read_handle_event), (gst_ebml_read_element_id),
-       (gst_ebml_read_element_length), (gst_ebml_read_element_data),
-       (gst_ebml_read_seek), (gst_ebml_read_skip):
-         Handle events.
-       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_base_init),
-       (gst_dvd_demux_init), (gst_dvd_demux_get_audio_stream),
-       (gst_dvd_demux_get_subpicture_stream), (gst_dvd_demux_plugin_init):
-         Fix timing (this will probably break if I seek using menus, but
-         I didn't get there yet). VOBs and normal DVDs should now work.
-         Add a mpeg2-only pad with high rank so this get autoplugged for
-         MPEG-2 movies.
-       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_base_init),
-       (gst_mpeg_demux_class_init), (gst_mpeg_demux_init),
-       (gst_mpeg_demux_new_output_pad), (gst_mpeg_demux_get_video_stream),
-       (gst_mpeg_demux_get_audio_stream),
-       (gst_mpeg_demux_get_private_stream), (gst_mpeg_demux_parse_packet),
-       (gst_mpeg_demux_parse_pes), (gst_mpeg_demux_plugin_init):
-         Use this as second rank for MPEG-1 and MPEG-2. Still use this for
-         MPEG-1 but use dvddemux for MPEG-2.
-       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_class_init),
-       (gst_mpeg_parse_init), (gst_mpeg_parse_new_pad),
-       (gst_mpeg_parse_parse_packhead):
-         Timing. Only add pad template if it exists. Add sink template from
-         class and not from ourselves. This means we will always use the
-         correct sink template even if it is not the one defined in this
-         file.
-
-2004-09-29  Wim Taymans  <wim@fluendo.com>
-
-       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_packet),
-       (gst_mpeg_demux_parse_pes):
-       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead):
-       Fix playback of mpeg again, timestamps where screwed up by
-       patch 1.61.
-
-2004-09-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/flac/gstflacdec.c: (gst_flacdec_src_query):
-         Only return true if we actually filled something in. Prevents
-         player applications from showing a random length for flac files.
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_class_init),
-       (gst_riff_read_use_event), (gst_riff_read_handle_event),
-       (gst_riff_read_seek), (gst_riff_read_skip), (gst_riff_read_strh),
-       (gst_riff_read_strf_vids_with_data),
-       (gst_riff_read_strf_auds_with_data), (gst_riff_read_strf_iavs):
-         OK, ok, so I implemented event handling. Apparently it's normal
-         that we receive random events at random points without asking
-         for it.
-       * gst/avi/gstavidemux.c: (gst_avi_demux_reset),
-       (gst_avi_demux_src_convert), (gst_avi_demux_handle_src_query),
-       (gst_avi_demux_handle_src_event), (gst_avi_demux_stream_index),
-       (gst_avi_demux_sync), (gst_avi_demux_stream_scan),
-       (gst_avi_demux_massage_index), (gst_avi_demux_stream_header),
-       (gst_avi_demux_handle_seek), (gst_avi_demux_process_next_entry),
-       (gst_avi_demux_stream_data), (gst_avi_demux_loop):
-       * gst/avi/gstavidemux.h:
-         Implement non-lineair chunk handling and subchunk processing.
-         The first solves playback of AVI files where the audio and video
-         data of individual buffers that we read are not synchronized.
-         This should not happen according to the wonderful AVI specs, but
-         of course it does happen in reality. It is also a prerequisite for
-         the second. Subchunk processing allows us to cut chunks in small
-         pieces and process each of these pieces separately. This is
-         required because I've seen several AVI files with incredibly large
-         audio chunks, even some files with only one audio chunk for the
-         whole file. This allows for proper playback including seeking.
-         This patch is supposed to fix all AVI A/V sync issues.
-       * gst/flx/gstflxdec.c: (gst_flxdec_class_init),
-       (flx_decode_chunks), (flx_decode_color), (gst_flxdec_loop):
-         Work.
-       * gst/modplug/gstmodplug.cc:
-         Proper return value setting for the query() function.
-       * gst/playback/gstplaybasebin.c: (setup_source):
-         Being in non-playing state (after, e.g., EOS) is not necessarily
-         a bad thing. Allow for that. This fixes playback of short files.
-         They don't actually playback fully now, because the clock already
-         runs. This means that small files (<500kB) with a small length
-         (<2sec) will still not or barely play. Other files, such as mod
-         or flx, will work correctly, however.
-
-2004-09-28  Wim Taymans  <wim@fluendo.com>
-
-       * ext/speex/gstspeex.c: (plugin_init):
-       * ext/speex/gstspeexdec.c: (gst_speex_dec_base_init),
-       (gst_speex_dec_class_init), (speex_dec_get_formats),
-       (speex_get_event_masks), (speex_get_query_types),
-       (gst_speex_dec_init), (speex_dec_convert), (speex_dec_src_query),
-       (speex_dec_src_event), (speex_dec_event), (speex_dec_chain),
-       (gst_speexdec_get_property), (gst_speexdec_set_property),
-       (speex_dec_change_state):
-       * ext/speex/gstspeexdec.h:
-       * ext/speex/gstspeexenc.c: (gst_speexenc_get_formats),
-       (gst_speexenc_get_type), (speex_caps_factory), (raw_caps_factory),
-       (gst_speexenc_base_init), (gst_speexenc_class_init),
-       (gst_speexenc_sinkconnect), (gst_speexenc_convert_src),
-       (gst_speexenc_convert_sink), (gst_speexenc_get_query_types),
-       (gst_speexenc_src_query), (gst_speexenc_init),
-       (gst_speexenc_get_tag_value), (comment_init), (comment_add),
-       (gst_speexenc_metadata_set1), (gst_speexenc_set_metadata),
-       (gst_speexenc_setup), (gst_speexenc_buffer_from_data),
-       (gst_speexenc_push_buffer), (gst_speexenc_set_header_on_caps),
-       (gst_speexenc_chain), (gst_speexenc_get_property),
-       (gst_speexenc_set_property), (gst_speexenc_change_state):
-       * ext/speex/gstspeexenc.h:
-       Rewrote speex encoder, make sure it can be embedded in ogg.
-       Implemented speex decoder.
-
-2004-09-28  Christian Schaller <christian@fluendo.com>
-
-       * configure.ac:
-       Remove kioslave plugin. Markey is brewing a new working one
-       * ext/Makefile.am: Remove kioslave plugin
-       * ext/kio: remove
-       * gst-plugins.spec.in: remove kio plugin from spec
-
-2004-09-27  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_add),
-       (gst_multifdsink_remove), (gst_multifdsink_remove_client_link),
-       (is_sync_frame), (gst_multifdsink_client_queue_buffer),
-       (gst_multifdsink_new_client),
-       (gst_multifdsink_handle_client_write),
-       (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
-       (gst_multifdsink_handle_clients):
-       * gst/tcp/gstmultifdsink.h:
-       Make syncing to keyframes actually work for new clients and lagging
-       clients.
-
-2004-09-26  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst/debug/gstnavigationtest.c: (gst_navigationtest_class_init),
-       (gst_navigationtest_handle_src_event), (draw_box_planar411),
-       (gst_navigationtest_planar411), (gst_navigationtest_change_state):
-       * gst/debug/gstnavigationtest.h:
-         make navigationtest display button-press and button-release events
-
-2004-09-26 Iain <iaingnome@gmail.com>
-
-       * gst/interleave/interleave.c (all_channels_new_media): Checks if all
-       the channels have received a new media event.
-       (interleave_buffered_loop): Compresses a new media event on all
-       channels into one.
-
-2004-09-26 Iain <iaingnome@gmail.com>
-
-       * gst/wavenc/gstwavenc.c (gst_wavenc_chain): Company says we need to
-       call the sinkpad's default event handler and not the srcpads. He also
-       says this is confusing :)
-       (gst_wavenc_stop_file): Company says that seek events only go upstream
-       we should send a discontinuous downstream instead.
-
-2004-09-25  Christian Schaller <christian@fluendo.com>
-
-       * Update SPEC file to be usable in conjunction with Fedora Core,
-         Fedora.us and freshrpms packages
-       * Fix typo in multifilesrc test Makefile
-
-2004-09-24  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/gstplaybasebin.c: (new_decoded_pad):
-       Only signal the no_more_pads signal when we have
-       added the stream to our list.
-
-2004-09-24  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/gstplaybasebin.c: (remove_prerolls),
-       (new_decoded_pad):
-       * gst/playback/gstplaybasebin.h:
-       * gst/playback/gstplaybin.c: (setup_sinks):
-       Don't try to preroll or decode more than one audio/video
-       track.
-
-2004-09-24  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_change_state):
-         Throw error if we failed to find a suitable output. This should
-         throw an error if we successfully set up a pipeline (e.g. because
-         we recognized a media file) but found no decodable streams in it
-         (e.g. because it contains only media stream types for which we
-         have no decoders, or because it's not a media type).
-
-2004-09-23  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/dirac/Makefile.am:
-       * ext/dirac/gstdirac.cc:
-       * ext/dirac/gstdiracdec.cc:
-       * ext/dirac/gstdiracdec.h:
-         Do something. Don't actually know if this works because I don't
-         have a demuxer yet.
-       * ext/gsm/gstgsmdec.c: (gst_gsmdec_getcaps):
-         Add channels=1 to caps returned from _getcaps().
-       * ext/ogg/gstogmparse.c: (gst_ogm_audio_parse_get_type),
-       (gst_ogm_video_parse_get_type), (gst_ogm_audio_parse_base_init),
-       (gst_ogm_video_parse_base_init), (gst_ogm_parse_init),
-       (gst_ogm_audio_parse_init), (gst_ogm_video_parse_init),
-       (gst_ogm_parse_sink_convert), (gst_ogm_parse_chain),
-       (gst_ogm_parse_change_state):
-         Separate between audio/video so ogmaudioparse actually uses the
-         audio pad templates. Both audio and video work now, including
-         autoplugging. Also use sometimes-srcpad hack.
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_seek):
-         Handle events better. Don't hang on infinite loops.
-       * gst/avi/gstavidemux.c: (gst_avi_demux_class_init),
-       (gst_avi_demux_init), (gst_avi_demux_reset),
-       (gst_avi_demux_src_convert), (gst_avi_demux_handle_src_query),
-       (gst_avi_demux_stream_header), (gst_avi_demux_stream_data),
-       (gst_avi_demux_change_state):
-       * gst/avi/gstavidemux.h:
-         Improve A/V sync. Still not perfect.
-       * gst/matroska/ebml-read.c: (gst_ebml_read_seek),
-       (gst_ebml_read_skip):
-         Handle events better.
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_handle_sink_event),
-       (gst_qtdemux_loop_header), (qtdemux_parse_trak),
-       (qtdemux_audio_caps):
-         Add IMA4. Improve event handling. Save offset after a seek when
-         the headers are at the end of the file so that we don't end up in
-         an infinite loop.
-       * gst/typefind/gsttypefindfunctions.c: (qt_type_find):
-         Add low-priority typefind support for files with no length.
-
-2004-09-23  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * testsuite/multifilesink/Makefile.am:
-       fix typo
-
-2004-09-22  Julien MOUTTE  <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_destroy):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls): Fix
-       mistakes from thaytan's patches.
-
-2004-09-23  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_destroy):
-         For completeness, XSync in the destroy function as xvimage does.
-
-2004-09-23  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_getcaps):
-          Correct caps negotiation
-       * gst/volume/gstvolume.c: (volume_chain_float),
-       (volume_chain_int16):
-          Modify debug output to be little more informative
-       * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
-       (gst_xvimagesink_xvimage_destroy):
-         Add XSync calls after detaching from the shared memory segment to
-         avoid a crash.
-
-2004-09-22  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * ext/ogg/gstoggmux.c: (gst_ogg_mux_init),
-       (gst_ogg_mux_next_buffer), (gst_ogg_mux_loop):
-       * ext/vorbis/vorbis.c: (plugin_init):
-       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_init),
-       (gst_vorbisenc_chain):
-       * ext/vorbis/vorbisenc.h:
-       remove explicit newmedia support from oggmux and vorbisenc
-       add debug category to vorbisenc
-       * gst/multifilesink/gstmultifilesink.c:
-       (gst_multifilesink_class_init), (gst_multifilesink_init),
-       (gst_multifilesink_dispose), (gst_multifilesink_set_location),
-       (gst_multifilesink_set_property), (gst_multifilesink_next_file),
-       (gst_multifilesink_handle_event), (gst_multifilesink_chain),
-       (plugin_init):
-       * gst/multifilesink/gstmultifilesink.h:
-       add support for streamheader in multifilesink
-
-2004-09-22  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/asfdemux/gstasfdemux.c: (_read_var_length), (_read_guid),
-       (gst_asf_demux_process_segment), (gst_asf_demux_handle_data),
-       (gst_asf_demux_process_chunk), (gst_asf_demux_handle_sink_event):
-         Prevent infinite loops. More correct error reporting.
-       * gst/auparse/gstauparse.c: (gst_auparse_chain):
-         Error out if negotiation fails.
-       * gst/playback/gstplaybasebin.c: (setup_source),
-       (gst_play_base_bin_change_state), (gst_play_base_bin_error),
-       (gst_play_base_bin_found_tag):
-         Error/tag forwarding. Pre-roll fixes for source errors on state
-         changes (e.g. "file does not exist") to prevent hangs.
-
-2004-09-21  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * testsuite/multifilesink/Makefile.am:
-       * testsuite/multifilesink/lame_test.c: (gst_newmedia_base_init),
-       (gst_newmedia_class_init), (gst_newmedia_init),
-       (gst_newmedia_chain), (gst_newmedia_trigger), (test_format),
-       (newfile_signal), (test_signal), (main):
-       * testsuite/multifilesink/multifilesrc_test.c: (main):
-       * testsuite/multifilesink/oggtheora_test.c:
-       (gst_newmedia_base_init), (gst_newmedia_class_init),
-       (gst_newmedia_init), (gst_newmedia_chain), (gst_newmedia_trigger),
-       (test_format), (newfile_signal), (test_signal), (main):
-       * testsuite/multifilesink/oggvorbis_test.c:
-       (gst_newmedia_base_init), (gst_newmedia_class_init),
-       (gst_newmedia_init), (gst_newmedia_chain), (gst_newmedia_trigger),
-       (test_format), (newfile_signal), (test_signal), (main):
-       * testsuite/multifilesink/wavenc_test.c: (gst_newmedia_base_init),
-       (gst_newmedia_class_init), (gst_newmedia_init),
-       (gst_newmedia_chain), (gst_newmedia_trigger), (test_format),
-       (newfile_signal), (test_signal), (main):
-       New media tests
-
-2004-09-20  Christian Schaller <christian@fluendo.com>
-
-       * Fix mikmod license to LGPL as they have relicensed
-       * Move Dirac and Effectv into LGPL section of README_license
-
-2004-09-20  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/mad/gstmad.c: (gst_mad_check_caps_reset),
-       (gst_mad_change_state):
-         Allow for mp3 rate/channels changes. However, only very
-         conservatively. Reason that we *have* to enable this is smiply
-         because the mad find_sync() function is not good enough, it will
-         regularly sync on random data as valid frames and therefore make
-         us provide random caps as *final* caps of the stream. The best fix
-         I could think of is to simply require several of the same stream
-         changes in a row before we change caps.
-         The actual testcase that works now is #
-       * ext/ogg/Makefile.am:
-       * ext/ogg/gstogg.c: (plugin_init):
-       * ext/ogg/gstogmparse.c:
-         OGM support (video only for now; I need an audio sample file).
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init),
-       (gst_asf_demux_process_stream), (gst_asf_demux_video_caps),
-       (gst_asf_demux_add_video_stream):
-         WMV extradata.
-       * gst/playback/gstplaybasebin.c: (unknown_type):
-         Don't error out on single unknown-types after all. It's wrong.
-         If we found type of video and audio but not of a subtitle stream,
-         it will still error out (which is unwanted). Will find a better fix
-         later on.
-       * gst/typefind/gsttypefindfunctions.c: (ogmvideo_type_find),
-       (ogmaudio_type_find), (plugin_init):
-         OGM support.
-
-2004-09-20  Johan Dahlin  <johan@gnome.org>
-
-       * ext/jpeg/gstjpegdec.c (gst_jpegdec_chain): Allocate the buffer
-       after setting caps.
-
-2004-09-19  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * gst/wavenc/gstwavenc.c: (gst_wavenc_init), (gst_wavenc_chain):
-       * gst/wavenc/gstwavenc.h:
-       Added newmedia support to wavenc
-
-2004-09-17  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gstfdset.c: (gst_fdset_fd_has_closed),
-       (gst_fdset_fd_has_error), (gst_fdset_fd_can_read),
-       (gst_fdset_fd_can_write), (gst_fdset_wait):
-       * gst/tcp/gstmultifdsink.c: (gst_client_status_get_type),
-       (gst_multifdsink_init), (gst_multifdsink_add),
-       (gst_multifdsink_remove), (gst_multifdsink_get_stats),
-       (gst_multifdsink_remove_client_link),
-       (gst_multifdsink_client_queue_buffer),
-       (gst_multifdsink_handle_client_write),
-       (gst_multifdsink_recover_client), (gst_multifdsink_handle_clients),
-       (gst_multifdsink_close), (gst_multifdsink_change_state):
-       * gst/tcp/gstmultifdsink.h:
-       * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init),
-       (gst_tcpserversink_removed):
-       Small cleanups in fdset.c
-       Use a hastable to map fd to the client structure for faster
-       lookup in _remove and get_stats.
-       Added virtual function to close the fds.
-       Handle clients even when the select/poll call was unblocked because
-       of a command.
-       Implement syncing to keyframe in the recovery procedure.
-
-2004-09-16 Iain <iaingnome@gmail.com>
-
-       * gst/audioconvert/gstaudioconvert.c (_fixate_caps_to_int): Free the
-       try caps.
-
-2004-09-15  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_get_audio_stream):
-         Caps are only set if the type of the stream is unknown, but this
-         is initialized in ->init_stream(), so set to UNKNOWN after calling
-         ->init_stream() so that capsnego starts.
-
-2004-09-15  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query),
-       (gst_avi_demux_stream_data):
-         Just hardcode for raw audio then. AVI audio sucks.
-
-2004-09-15  Arwed v. Merkatz  <v.merkatz@gmx.net>
-
-       * gst/matroska/matroska-demux.c: (gst_matroska_demux_audio_caps):
-       * gst/matroska/matroska-mux.c: (audiosink_templ),
-       (gst_matroska_mux_audio_pad_link):
-       * gst/typefind/gsttypefindfunctions.c: (tta_caps), (plugin_init):
-       Use audio/x-ttafile for tta files and audio/x-tta for raw tta frames.
-
-2004-09-15  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query),
-       (gst_avi_demux_stream_data):
-         Try to fix a/v sync issues.
-
-2004-09-15  David Schleef  <ds@schleef.org>
-
-       * configure.ac: remove NASM check, since we don't use it.  Update
-       dirac check to 0.4
-       * ext/dirac/gstdiracdec.cc: update to current 0.4 API
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
-       Initialized variables.
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
-       (gst_qtdemux_loop_header), (qtdemux_parse), (qtdemux_parse_trak),
-       (gst_qtdemux_handle_esds), (qtdemux_audio_caps): Fix seeking, add
-       SVQ3 format
-
-2004-09-15  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query),
-       (gst_avi_demux_add_stream), (gst_avi_demux_stream_data):
-       * gst/avi/gstavidemux.h:
-         Fix for compressed audio (mp3) timestamp generation. How did this
-         ever work?
-
-2004-09-15  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybin.c: (gst_play_bin_get_property):
-         Volume is a double not a float.
-
-2004-09-15  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_remove_client_link),
-       (gst_multifdsink_handle_clients), (gst_multifdsink_change_state):
-       Don't close the fd in multifdsink as we didn't open it in the
-       first place. Some cleanups.
-
-2004-09-15  Wim Taymans  <wim@fluendo.com>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
-       * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
-       (gst_ogg_mux_send_headers), (gst_ogg_mux_loop):
-       Fix the case where the muxer would mark pages as delta
-       frames when they are not (vorbis only ogg).
-
-2004-09-15  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c: (state_change), (setup_source),
-       (gst_play_base_bin_change_state):
-         Handle the case where we failed to setup a clear pipeline. This
-         will throw an error (or EOS, another nice case) and if you don't
-         catch that, the app will wait for the signal forever (and thus
-         hang).
-
-2004-09-15  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/gnomevfs/gstgnomevfssink.c:
-       (gst_gnomevfssink_uri_get_protocols):
-       * ext/gnomevfs/gstgnomevfssrc.c:
-       (gst_gnomevfssrc_uri_get_protocols):
-       * ext/gnomevfs/gstgnomevfsuri.c: (gst_gnomevfs_get_supported_uris):
-       * ext/gnomevfs/gstgnomevfsuri.h:
-         Use _uri_new() instead of _open(), so it doesn't take as long and
-         Christophe's computer won't hang.
-       * gst/playback/gstplaybasebin.c: (unknown_type):
-         Throw error on unknown media type, so apps actually display it.
-
-2004-09-14  Brian Cameron  <brian.cameron@sun.com
-
-       * tools/gst-launch-ext-m.m:  Changed ~ to $ENV{HOME} to allow
-         this script to work on Solaris since bash shell handles echo
-         differenly than bash.
-
-2004-09-17  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/gstplaybasebin.c: (queue_overrun), (no_more_pads),
-       (setup_source), (gst_play_base_bin_set_property),
-       (gst_play_base_bin_add_element):
-       * gst/playback/gstplaybin.c: (gst_play_bin_send_event):
-       Some more work on making sure seeking pauses the pipeline and
-       that changing the uri actually does something.
-
-2004-09-17  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gstfdset.c: (gst_fdset_wait):
-       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_close):
-       * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_init_send),
-       (gst_tcpserversink_close):
-       Be a bit more paranoid when freeing memory.
-
-2004-09-13  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_add_stream),
-       (qtdemux_parse_trak):
-         Don't crash by dividing by zero (see sample movie in #126922).
-
-2004-09-13  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/qtdemux/qtdemux.c: (qtdemux_audio_caps):
-         Don't touch non-existing data (fixes crash on file in #140147).
-
-2004-09-13  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/playback/gstplaybasebin.c:
-       (gst_play_base_bin_dispose), (gst_play_base_bin_set_property):
-         Handle double disposals, and proper change of URIs.
-
-2004-09-13  Martin Eikermann <meiker@upb.de>
-
-       * gst/mpegstream/gstmpegparse.c:
-         fix synchronistation for streams recorded from digital PCR
-         fixes bug #119376
-
-2004-09-13  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/gnomevfs/Makefile.am:
-       * ext/gnomevfs/gstgnomevfs.c: (plugin_init):
-       * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_get_type),
-       (gst_gnomevfssink_dispose), (gst_gnomevfssink_init),
-       (gst_gnomevfssink_uri_get_type),
-       (gst_gnomevfssink_uri_get_protocols),
-       (gst_gnomevfssink_uri_get_uri), (gst_gnomevfssink_uri_set_uri),
-       (gst_gnomevfssink_uri_handler_init),
-       (gst_gnomevfssink_set_property), (gst_gnomevfssink_get_property),
-       (gst_gnomevfssink_open_file), (gst_gnomevfssink_close_file):
-       * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_get_type),
-       (gst_gnomevfssrc_init), (gst_gnomevfssrc_dispose),
-       (gst_gnomevfssrc_uri_get_type),
-       (gst_gnomevfssrc_uri_get_protocols), (gst_gnomevfssrc_uri_get_uri),
-       (gst_gnomevfssrc_uri_set_uri), (gst_gnomevfssrc_uri_handler_init),
-       (gst_gnomevfssrc_set_property), (gst_gnomevfssrc_get_property),
-       (gst_gnomevfssrc_open_file), (gst_gnomevfssrc_close_file):
-       * ext/gnomevfs/gstgnomevfsuri.c: (gst_gnomevfs_get_supported_uris):
-       * ext/gnomevfs/gstgnomevfsuri.h:
-         Add URI support to Gnome-VFS plugins. Tries to load a fixed list
-         of fake URIs to see which this version of Gnome-VFS likes, and
-         uses that for the Gst-URI interface. Makes playbin support http://
-         streams. Also fix up some stupid behaviour in gnomevfssrc.
-
-2004-09-13  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_update),
-       (gst_alsa_mixer_get_volume), (gst_alsa_mixer_set_volume),
-       (gst_alsa_mixer_set_mute), (gst_alsa_mixer_set_record),
-       (gst_alsa_mixer_set_option), (gst_alsa_mixer_get_option):
-         Update mixer (to sync with other sessions) if we try to obtain
-         a new value. This makes alsamixer work accross applications.
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_get_time):
-         Only call sync functions if we're running, else alsalib asserts.
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query):
-         Sometimes fails to compile. Possibly a gcc bug.
-       * gst/playback/gstplaybin.c: (gen_video_element),
-       (gen_audio_element):
-         Add a reference to an application-provided object, because we lose
-         this same reference if we add it to the bin. If we don't do this,
-         we can only use this object once and thus crash if we go from
-         ready to playing, back to ready and back to playing again.
-         Also add an audioscale element because several cheap soundcards -
-         like mine - don't support all samplerates.
-       * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
-       (gst_ximagesink_xcontext_clear), (gst_ximagesink_change_state):
-         Fix wrong order or PAR calls. Makes automatically obtained PAR
-         from the X server atually being used.
-
-2004-09-12  David Schleef  <ds@schleef.org>
-
-       Fixes: #151879, #151881, #151882, #151883, #151884, #151886,
-       #151887, #152102, #152247.
-       * examples/indexing/indexmpeg.c: 64-bit warning fixes.
-       * examples/seeking/cdparanoia.c: same
-       * examples/seeking/cdplayer.c: same
-       * examples/seeking/seek.c: same
-       * examples/seeking/spider_seek.c: same
-       * examples/seeking/vorbisfile.c: same
-       * examples/stats/mp2ogg.c: same
-       * ext/esd/esdsink.c: (gst_esdsink_class_init),
-       (gst_esdsink_dispose): Dispose of element properly.
-       * ext/ivorbis/vorbisfile.c: (gst_ivorbisfile_seek): 64-bit warning
-       fixes.
-       * ext/nas/nassink.c: (gst_nassink_class_init),
-       (gst_nassink_dispose): Dispose of element correctly.
-       * gst/wavenc/gstwavenc.c: (gst_wavenc_chain): Fix leak.
-       * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls),
-       (gst_ximagesink_ximage_new), (gst_ximagesink_ximage_destroy):
-       Fix 64-bit warning.
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
-       (gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_destroy):
-       Fix 64-bit warning.
-
-2004-09-12  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
-
-       * configure.ac : change speex detection as 1.1.6 now uses
-         .pc/pkg-config and they changed their headers location.
-
-2004-09-09  Arwed v. Merkatz  <v.merkatz@gmx.net>
-
-       * gst/matroska/matroska-mux.h:
-       * gst/matroska/matroska-mux.c: (gst_matroska_mux_reset),
-       (gst_matroska_mux_start), (gst_matroska_mux_finish),
-       (gst_matroska_mux_write_data):
-         Write multiple blocks/frames per cluster.
-               Write meta-seek information (seek heads).
-
-2004-09-09  Scott Wheeler <wheeler@kde.org>
-
-       * gst/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init),
-       (gst_play_bin_set_property), (gst_play_bin_get_property),
-       (gen_audio_element), (gen_audio_element):
-         Add a volume element / property to the pipeline.
-
-2004-09-07  Wim Taymans  <wim@fluendo.com>
-
-       * gst/videomixer/videomixer.c: (gst_videomixer_blend_buffers):
-       Copy timestamps from the master pad to the output buffers.
-
-2004-09-03  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/raw1394/gstdv1394src.c:
-         throw errors when applicable
-
-2004-09-01  Arwed v. Merkatz  <v.merkatz@gmx.net>
-
-       * gst/matroska/ebml-ids.h:
-       * gst/matroska/ebml-read.c: (gst_ebml_read_date):
-       * gst/matroska/ebml-write.c: (gst_ebml_write_date):
-       * gst/matroska/matroska-mux.c: (gst_matroska_mux_finish):
-         automatically convert unix time <-> ebml time when reading/writing
-         a date, use gst_ebml_write_uint to write CUETIME,
-         not gst_ebml_write_date.
-       * gst/matroska/matroska-ids.h:
-       * gst/matroska/matroska-mux.c: (gst_matroska_mux_create_uid),
-       (gst_matroska_mux_reset), (gst_matroska_mux_audio_pad_link),
-       (gst_matroska_mux_track_header), (gst_matroska_mux_start),
-       (gst_matroska_mux_write_data):
-         Write track and segment UIDs, write muxing date, write
-         TRACKDEFAULTDURATION for TTA audio, write BLOCKDURATION if known.
-         Create cues for audio only files.
-
-2004-08-31  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
-       * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
-         Re-commit ALSA switches.
-       * gst/adder/gstadder.c: (gst_adder_loop):
-         64-bit fix (#151416).
-       * gst/debug/progressreport.c: (gst_progressreport_report):
-         64-bit fix (#151419).
-       * gst/matroska/matroska-demux.c:
-       (gst_matroska_demux_parse_contents):
-         64-bit fix (#151420).
-       * gst/playback/test3.c: (update_scale):
-         64-bit fix (#151421).
-
-2004-08-31  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-         bump nano to cvs
-
-=== release 0.8.4 ===
-
-2004-08-02  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac: releasing 0.8.4, "Alias"
-
-2004-08-31  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/theora/Makefile.am:
-         fix makefile.  Fixes #151462.
-
-2004-08-30  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gstfdset.c: (gst_fdset_free), (gst_fdset_wait):
-       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_add),
-       (gst_multifdsink_remove_client_link),
-       (gst_multifdsink_client_queue_buffer),
-       (gst_multifdsink_handle_client_write):
-       * gst/tcp/gsttcpclientsink.c: (gst_tcpclientsink_init_send):
-       * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_init_receive):
-       Fix some memory leaks.
-
-2004-08-30  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       Patch by: David Schleef
-
-       * configure.ac:
-       * sys/Makefile.am:
-         rename our detection macro for V4L2.  Fixes #151236.
-
-2004-08-30  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       Patch by: David Schleef
-
-       * configure.ac:
-         check to define LAMEPRESET.  Fixes #151232.
-
-2004-08-27  David Schleef  <ds@schleef.org>
-
-       * sys/glsink/glimagesink.c: (gst_glimagesink_ximage_put),
-       (gst_glimagesink_xwindow_new), (gst_glimagesink_xcontext_get),
-       (gst_glimagesink_fixate):  Move local variable declarations to
-       make gcc-2.95 happy.
-
-2004-08-27  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-         bump nano for prerelease
-
-2004-08-27  David Schleef  <ds@schleef.org>
-
-       * sys/sunaudio/Makefile.am: Add sunaudiosrc patch from Bala
-       * sys/sunaudio/gstsunaudiosrc.c:
-       * sys/sunaudio/gstsunaudiosrc.h:
-
-2004-08-27 Arwed v. Merkatz <v.merkatz@gmx.net>
-
-       * gst/matroska/ebml-read.c: (gst_ebml_peed_id), (gst_ebml_read_element_id),
-       handle EOS correctly
-       * gst/matroska/matroska-mux.c: (gst_matroska_mux_video_pad_link):
-       * gst/matroska/matroska-mux.h:
-       added BITMAPINFOHEADER structure, mux video/x-divx and video/x-xvid in
-       VFW compatibility mode
-
-2004-08-27  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       patch by: Zaheer Abbas Merali
-
-       * ext/ogg/gstoggmux.c:
-       * ext/vorbis/vorbisenc.c:
-       * ext/vorbis/vorbisenc.h:
-         handle NEWMEDIA
-
-2004-08-26 Arwed v. Merkatz <v.merkatz@gmx.net>
-
-       * gst/matroska/ebml-write.c: (gst_ebml_write_float),
-       fix byte order reversion on little endian machines.
-       * gst/matroska/matroska-mux.c: (audiosink_templ),
-       (gst_matroska_mux_audio_pad_link):
-       add TTA codec to the list of supported codecs.
-       * gst/matroska/matroska-mux.c: (gst_matroska_mux_init),
-       (gst_matroska_mux_start), (gst_matroska_mux_finish),
-       (gst_matroska_mux_write_data):
-       * gst/matroska/matroska-mux.h:
-       write segment duration correctly, write muxing app string, fixes bugs
-       #140897 and #140898.
-       * gst/matroska/matroska-mux.c: (gst_matroska_mux_loop),
-       wait for all pads to be negotiated before starting to mux.
-
-2004-08-26  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * ext/lame/gstlame.c: (gst_lame_init), (gst_lame_chain):
-       * ext/lame/gstlame.h:
-       Added new media support to lame
-
-2004-08-25 Arwed v. Merkatz <v.merkatz@gmx.net>
-
-       * gst/matroska/matroska-demux.c: (gst_matroska_demux_parse_blockgroup),
-       send vorbis headers at the beginning of a stream, fixes bug #141554.
-       Interpret BLOCKDURATION and set buffer duration accordingly, fixes
-       bug #148950.
-       * gst/matroska/matroska-demux.c: (gst_matroska_demux_audio_caps),
-       (gst_matroska_demux_plugin_init):
-       * gst/matroska/matroska-ids.h:
-       enable demuxing of TTA audio streams, fixes bug #148951.
-       * gst/typefind/gsttypefindfunctions.c: (tta_type_find), (plugin_init),
-       enable typefinding for TTA audio files, fixes bug #148711.
-       * ext/xvid/gstxviddec.c: (gst_xviddec_chain),
-       set XVID_LOWDELAY flag for decoding so xvid always returns an image,
-       fixes playback of packed bitstream and xvid with bframes, bug #135407.
-
-2004-08-24  Sebastien Cote  <sc5@hermes.usherb.ca>
-
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head),
-       (gst_riff_read_element_data), (gst_riff_read_seek),
-       (gst_riff_read_skip): fix infinite loop in wavparse, fixes bug
-       #144616, patch reviewed by Ronald and committed by Christophe Fergeau
-       <teuf@gnome.org>
-
-2004-08-23 Iain <iaingnome@gmail.com>
-
-       * ext/mad/gstid3tag.c (gst_mad_id3_to_tag_list): Special case COMM
-       tags. They appear to be handled differently to normal.
-       (tag_list_to_id3_tag_foreach): Ditto.
-
-2004-08-22  Wim Taymans  <wim@fluendo.com>
-
-       * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
-       (gst_ogg_mux_send_headers), (gst_ogg_mux_loop):
-       Make sure we never send -1 granulepos.
-
-2004-08-20  Wim Taymans  <wim@fluendo.com>
-
-       * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
-       (gst_ogg_mux_loop):
-       I will accept bitchslappings with non sharp objects.
-
-2004-08-20  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * configure.ac:
-       Clean up the test for lame presets
-
-2004-08-19  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * configure.ac:
-       * ext/lame/Makefile.am:
-       * ext/lame/gstlame.c: (gst_lame_class_init),
-       (gst_lame_set_property), (gst_lame_get_property), (gst_lame_setup):
-       Only enable lame presets if version of lame has presets in API
-
-2004-08-19  Jan Schmidt  <thaytan@mad.scientist.com>
-       * gst/udp/gstudpsrc.c: (gst_udpsrc_init), (gst_udpsrc_get):
-       * gst/udp/gstudpsrc.h:
-         Don't call gst_pad_push in a get function. Fixes #150449
-
-2004-08-18  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gstfdset.c: (gst_fdset_free), (gst_fdset_set_mode),
-       (gst_fdset_get_mode), (gst_fdset_add_fd), (gst_fdset_remove_fd),
-       (gst_fdset_fd_ctl_write), (gst_fdset_fd_ctl_read),
-       (gst_fdset_fd_has_closed), (gst_fdset_fd_has_error),
-       (gst_fdset_fd_can_read), (gst_fdset_fd_can_write),
-       (gst_fdset_wait):
-       * gst/tcp/gstfdset.h:
-       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_add),
-       (gst_multifdsink_client_queue_buffer),
-       (gst_multifdsink_handle_client_write):
-       * gst/tcp/gstmultifdsink.h:
-       Some extra checks in gstfdset.
-       Only use send() when the fd is a socket. Don't try to
-       read from write only fds.
-
-2004-08-18  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gstfdset.c: (gst_fdset_add_fd), (gst_fdset_remove_fd),
-       (gst_fdset_fd_ctl_write), (gst_fdset_fd_ctl_read),
-       (gst_fdset_fd_has_closed), (gst_fdset_fd_has_error),
-       (gst_fdset_fd_can_read), (gst_fdset_fd_can_write),
-       (gst_fdset_wait):
-       Add more locking and bounds checking.
-
-2004-08-18  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gstfdset.c: (ensure_size), (gst_fdset_wait):
-       Realloc test fdset in the lock and right before starting
-       the poll call. Bump the limit to 4096.
-
-2004-08-17  David Schleef  <ds@schleef.org>
-
-       * sys/sunaudio/Makefile.am:
-       * sys/sunaudio/gstsunaudio.c: Fix caps to handle full range
-       of rates and channels.  Make debugging less obnoxious.
-
-       Patch from Balamurali Viswanathan implementing a mixer for
-       Sun audio.  (bug #144091):
-       * sys/sunaudio/gstsunelement.c:
-       * sys/sunaudio/gstsunelement.h:
-       * sys/sunaudio/gstsunmixer.c:
-       * sys/sunaudio/gstsunmixer.h:
-
-2004-08-17  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * gst/audioscale/gstaudioscale.c:
-       * gst/audioscale/gstaudioscale.h:
-       made audioscale resample from any sample rate to any sample rate
-
-2004-08-17  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/libpng/gstpngdec.c:
-         error out on unsupported types
-
-2004-08-17  Iain <iaingnome@gmail.com>
-
-       * ext/flac/gstflacenc.c (gst_flacenc_update_quality): Only set the
-       mid_side and loose_mid_side properties if its a stereo stream.
-
-2004-08-17  Wim Taymans  <wim@fluendo.com>
-
-       * ext/theora/theoradec.c: (gst_theora_dec_class_init),
-       (theora_get_formats), (theora_dec_src_convert),
-       (theora_dec_sink_convert), (theora_dec_src_query),
-       (theora_dec_src_event), (theora_dec_event), (theora_dec_chain):
-       Add a debug line.
-
-2004-08-17  Wim Taymans  <wim@fluendo.com>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_iterate),
-       (gst_ogg_pad_push):
-       * ext/ogg/gstoggmux.c: (gst_ogg_mux_init),
-       (gst_ogg_mux_request_new_pad), (gst_ogg_mux_next_buffer),
-       (gst_ogg_mux_buffer_from_page), (gst_ogg_mux_push_page),
-       (gst_ogg_mux_send_headers), (gst_ogg_mux_loop):
-       Mark delta units in the muxer.
-       Try to decode the packet after an out-of-sync error from
-       libogg.
-
-2004-08-17  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
-       (gst_multifdsink_init), (gst_multifdsink_add),
-       (gst_multifdsink_client_queue_buffer),
-       (gst_multifdsink_set_property), (gst_multifdsink_get_property):
-       * gst/tcp/gstmultifdsink.h:
-       Added option to send a keyframe to clients as the first buffer.
-       Make timeout property writable.
-
-2004-08-17  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       patch by: Wim Taymans
-
-       * gst/tcp/gstfdset.c:
-       * gst/tcp/gstmultifdsink.c:
-         fix index comparison, should include 0
-
-2004-08-16  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gstfdset.c: (ensure_size), (gst_fdset_new),
-       (gst_fdset_add_fd), (gst_fdset_remove_fd),
-       (gst_fdset_fd_has_closed), (gst_fdset_fd_has_error),
-       (gst_fdset_fd_can_read), (gst_fdset_fd_can_write),
-       (gst_fdset_wait):
-         copy when reallocing for poll so the select arguments don't get
-         changed during the call
-
-2004-08-16  Wim Taymans  <wim@fluendo.com>
-
-       * ext/theora/theoraenc.c: (gst_border_mode_get_type),
-       (gst_theora_enc_class_init), (theora_enc_sink_link),
-       (theora_buffer_from_packet), (theora_enc_chain):
-       Fix bug where buffers were not marked as keyframes
-       correctly.
-
-2004-08-15  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * ext/lame/gstlame.c: (gst_lame_vbrmode_get_type),
-       (gst_lame_preset_get_type), (gst_lame_class_init):
-       describe the enum values for vbr mode and presets more verbosely
-
-2004-08-13  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * ext/lame/gstlame.c: (gst_lame_mode_get_type),
-       (gst_lame_quality_get_type), (gst_lame_padding_get_type),
-       (gst_lame_preset_get_type), (gst_lame_class_init), (gst_lame_init),
-       (gst_lame_set_property), (gst_lame_get_property), (gst_lame_setup):
-       * ext/lame/gstlame.h:
-       add preset property to lame so it can use lame presets
-
-2004-08-13  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * ext/lame/gstlame.c: (gst_lame_get_property):
-       whoops forgot break, thanks teuf
-
-2004-08-13  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * ext/lame/gstlame.c: (gst_lame_vbrmode_get_type),
-       (gst_lame_class_init), (gst_lame_src_getcaps),
-       (gst_lame_sink_link), (gst_lame_init), (gst_lame_set_property),
-       (gst_lame_get_property), (gst_lame_setup):
-       * ext/lame/gstlame.h:
-       fix lame's broken vbr stuff, allow it to resample if need be, and also
-       make xing header optional
-
-2004-08-12  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * ext/lame/gstlame.c: (gst_lame_src_getcaps), (gst_lame_init):
-       added getcaps function so samplerate doesnt get fixated to silly values
-
-2004-08-12  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * ext/lame/gstlame.c: (gst_lame_src_link):
-       revert previous fix
-
-2004-08-12  Johan Dahlin  <johan@gnome.org>
-
-       * sys/v4l/gstv4lelement.c (gst_v4l_iface_supported): Remove bogus
-       checks. Doesn't matter what state we are in. Interfaces are a
-       compile time thing, not runtime. It also broke the python bindings.
-
-2004-08-12  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * ext/lame/gstlame.c: (gst_lame_src_link):
-       made source pad link function check if sinkpad is ok..fixes the problem
-       where core fixates the output rate of lame stupidly
-
-2004-08-12  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
-
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_src_link), (gst_v4lsrc_fixate):
-       * sys/v4l/v4l_calls.c:
-       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_set_capture):
-         fix fixate function to handle nonsimple caps.
-         remove bogus check in _link
-         cleanups
-
-2004-08-12  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * ext/lame/gstlame.c: (gst_lame_class_init), (gst_lame_init):
-       set default compression ratio parameter to 0.0 so bitrate parameter
-       works :)
-
-2004-08-11  David Schleef  <ds@schleef.org>
-
-       * gst/tcp/gstfdset.c: Fix compile problem on OS/X.
-
-2004-08-11  David Schleef  <ds@schleef.org>
-
-       * gst/mpeg1sys/gstmpeg1systemencode.c: Oops, this was correct
-       before.
-
-2004-08-11  David Schleef  <ds@schleef.org>
-
-       * gst-libs/gst/video/videosink.h: Change copyright block to LGPL.
-
-2004-08-11  David Schleef  <ds@schleef.org>
-
-       * ext/pango/gsttextoverlay.c: Add copyright block and fix plugin
-         license field
-       * gst-libs/gst/idct/Makefile.am: Remove mmx/sse code
-       * gst-libs/gst/video/gstvideosink.c: Change copyright block to
-         LGPL.
-       * gst/auparse/gstauparse.c: Fix plugin license field.
-       * gst/monoscope/gstmonoscope.c: Fix plugin license field.
-       * gst/mpeg1sys/gstmpeg1systemencode.c: Fix plugin license field.
-       * gst/rtp/gstrtp.c: Fix plugin license field.
-
-2004-08-11  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/Makefile.am:
-       * gst/tcp/gstfdset.c: (gst_fdset_mode_get_type), (nearest_pow),
-       (ensure_size), (gst_fdset_new), (gst_fdset_free),
-       (gst_fdset_set_mode), (gst_fdset_get_mode), (gst_fdset_add_fd),
-       (gst_fdset_remove_fd), (gst_fdset_fd_ctl_write),
-       (gst_fdset_fd_ctl_read), (gst_fdset_fd_has_closed),
-       (gst_fdset_fd_has_error), (gst_fdset_fd_can_read),
-       (gst_fdset_fd_can_write), (gst_fdset_wait):
-       * gst/tcp/gstfdset.h:
-       * gst/tcp/gstmultifdsink.c: (gst_unit_type_get_type),
-       (gst_multifdsink_class_init), (gst_multifdsink_init),
-       (gst_multifdsink_add), (gst_multifdsink_remove),
-       (gst_multifdsink_clear), (gst_multifdsink_get_stats),
-       (gst_multifdsink_remove_client_link),
-       (gst_multifdsink_handle_client_read),
-       (gst_multifdsink_client_queue_data),
-       (gst_multifdsink_client_queue_caps),
-       (gst_multifdsink_client_queue_buffer),
-       (gst_multifdsink_handle_client_write),
-       (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
-       (gst_multifdsink_handle_clients), (gst_multifdsink_set_property),
-       (gst_multifdsink_get_property), (gst_multifdsink_init_send),
-       (gst_multifdsink_close):
-       * gst/tcp/gstmultifdsink.h:
-       * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init),
-       (gst_tcpserversink_init), (gst_tcpserversink_handle_server_read),
-       (gst_tcpserversink_handle_wait), (gst_tcpserversink_init_send),
-       (gst_tcpserversink_close):
-       * gst/tcp/gsttcpserversink.h:
-       Abstracted away the select call, implemented poll (yes we ran into
-       the 1024 limit in production).
-
-2004-08-11  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/tcp/gsttcp.c:
-       * gst/tcp/gsttcpplugin.c:
-         improve debuggging, remove assert
-
-2004-08-10  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gstmultifdsink.c: (gst_unit_type_get_type),
-       (gst_client_status_get_type), (gst_multifdsink_class_init),
-       (gst_multifdsink_init), (gst_multifdsink_remove_client_link),
-       (gst_multifdsink_handle_client_read),
-       (gst_multifdsink_handle_client_write),
-       (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
-       (gst_multifdsink_handle_clients), (gst_multifdsink_set_property),
-       (gst_multifdsink_get_property):
-       * gst/tcp/gstmultifdsink.h:
-       * gst/tcp/gsttcp-marshal.list:
-       Starting to prepare for specifying buffer time in other units
-       than buffers. Expose remove reason in signal.
-
-2004-08-10  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_add),
-       (gst_multifdsink_remove), (gst_multifdsink_clear),
-       (gst_multifdsink_remove_client_link),
-       (gst_multifdsink_handle_client_read),
-       (gst_multifdsink_client_queue_data),
-       (gst_multifdsink_client_queue_buffer),
-       (gst_multifdsink_handle_client_write),
-       (gst_multifdsink_queue_buffer), (gst_multifdsink_handle_clients),
-       (gst_multifdsink_chain), (gst_multifdsink_close):
-       * gst/tcp/gstmultifdsink.h:
-       Added more debugging info. Changed the way clients are
-       removed from the lists. Fixed a bug where a bad file descriptor
-       could cause many clients to be removed.
-
-2004-08-06  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst/videotestsrc/gstvideotestsrc.c: (generate_capslist):
-         allow all pixel-aspect-ratios, not just 1:1
-
-2004-08-09  David Schleef  <ds@schleef.org>
-
-       * sys/glsink/ARB_multitexture.h:  Remove old files.
-       * sys/glsink/EXT_paletted_texture.h:
-       * sys/glsink/NV_register_combiners.h:
-       * sys/glsink/gstgl_nvimage.c:
-       * sys/glsink/gstgl_pdrimage.c:
-       * sys/glsink/gstgl_rgbimage.c:
-       * sys/glsink/gstglsink.c:
-       * sys/glsink/gstglsink.h:
-       * sys/glsink/gstglxwindow.c:
-       * sys/glsink/regcomb_yuvrgb.c:
-
-2004-08-09  David Schleef  <ds@schleef.org>
-
-       Patch from Gernot Ziegler <gz@lysator.liu.se> rewriting the
-       GL sink plugin.  (Bug #147302)
-
-       * configure.ac: Test for OpenGL
-       * sys/Makefile.am: Use test for OpenGL
-       * sys/glsink/Makefile.am:
-       * sys/glsink/glimagesink.c: rewrite
-       * sys/glsink/glimagesink.h: rewrite
-
-2004-08-09  David Schleef  <ds@schleef.org>
-
-       * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_base_init):  Only allow
-       sane framerates.
-       * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get): same
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support): same
-       * testsuite/gst-lint: Test for G_GUINT64_FORMAT usage near gettext.
-
-2004-08-09  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
-       (gst_multifdsink_add), (gst_multifdsink_get_stats),
-       (gst_multifdsink_client_remove),
-       (gst_multifdsink_handle_client_read),
-       (gst_multifdsink_handle_client_write),
-       (gst_multifdsink_queue_buffer), (gst_multifdsink_handle_clients):
-       Do a bit more logging, make the client_read code more robust.
-
-2004-08-09  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/jpeg/gstjpegdec.c: (gst_jpegdec_init_source),
-       (gst_jpegdec_fill_input_buffer), (gst_jpegdec_skip_input_data),
-       (gst_jpegdec_resync_to_restart), (gst_jpegdec_term_source),
-       (gst_jpegdec_init), (gst_jpegdec_chain):
-       * gst/multipart/multipartdemux.c: (gst_multipart_demux_init),
-       (gst_multipart_demux_chain), (gst_multipart_demux_change_state):
-         cleanups, debugging fixes and memleak plugging
-
-2004-08-09  Wim Taymans  <wim@fluendo.com>
-
-       * ext/theora/theoradec.c: (gst_theora_dec_class_init),
-       (theora_get_formats), (theora_dec_src_convert),
-       (theora_dec_sink_convert), (theora_dec_src_query),
-       (theora_dec_src_event), (theora_dec_event), (theora_dec_chain),
-       (theora_dec_change_state):
-       Don't crash on missing header packets.
-
-2004-08-09  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * po/LINGUAS:
-       * po/sq.po:
-         Added Albanian translation (Laurent Dhima)
-       * po/cs.po:
-         updated
-
-2004-08-09  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/lame/gstlame.c:
-         fix/add debugging
-
-2004-08-09  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/ximage/ximagesink.c:
-       * sys/xvimage/xvimagesink.c:
-         assign all TOO_LAZY's to a real category.  Thanks to Warthy Warthog.
-
-2004-08-06  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
-       (gst_multifdsink_add), (gst_multifdsink_get_stats),
-       (gst_multifdsink_client_remove),
-       (gst_multifdsink_handle_client_read),
-       (gst_multifdsink_handle_client_write),
-       (gst_multifdsink_queue_buffer), (gst_multifdsink_handle_clients):
-       Make sure we don't try to read more from a client that what
-       ioctl says us or we deadlock.
-
-2004-08-05  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_src_link),
-       (gst_videotestsrc_change_state), (gst_videotestsrc_src_query),
-       (gst_videotestsrc_handle_src_event), (gst_videotestsrc_get):
-         decouple running_time and n_frames so it can handle changing
-         framerate while running
-
-2004-08-05  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * po/nl.po:
-       * po/sv.po:
-         updated translations
-
-2004-08-04  Benjamin Otte  <otte@gnome.org>
-
-       * gst/videotestsrc/gstvideotestsrc.c:
-       (gst_videotestsrc_get_capslist), (generate_capslist),
-       (plugin_init):
-         generate the list of supported caps at startup and reuse it instead
-         of always generating it
-
-2004-07-30  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst/multipart/multipartmux.c: (gst_multipart_mux_pad_link):
-         whoops, last checkin broke normal build
-
-2004-08-03  Benjamin Otte  <otte@gnome.org>
-
-       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_get_volume),
-       (gst_alsa_mixer_set_volume), (gst_alsa_mixer_set_mute),
-       (gst_alsa_mixer_set_record), (gst_alsa_mixer_set_option),
-       (gst_alsa_mixer_get_option):
-       * ext/dvdnav/dvdnavsrc.c: (dvdnav_get_event_name),
-       (dvdnavsrc_print_event):
-       * ext/ogg/gstoggdemux.c: (_find_chain_process), (gst_ogg_print):
-       * ext/ogg/gstoggmux.c: (gst_ogg_mux_pad_link),
-       (gst_ogg_mux_pad_unlink):
-       * gst/multipart/multipartmux.c: (gst_multipart_mux_pad_link),
-       (gst_multipart_mux_pad_unlink):
-       * gst/videofilter/gstvideobalance.c:
-       (gst_videobalance_colorbalance_set_value):
-       * gst/videomixer/videomixer.c: (gst_videomixer_pad_link),
-       (gst_videomixer_pad_unlink):
-       * po/uk.po:
-       * sys/oss/gstossmixer.c:
-       * sys/v4l/gstv4lcolorbalance.c:
-       * sys/v4l/gstv4ltuner.c:
-       * sys/v4l/v4lsrc_calls.c:
-       * sys/v4l2/gstv4l2colorbalance.c:
-       * sys/v4l2/gstv4l2tuner.c:
-         compile fixes for --disable-gst-debug, G_DISABLE_ASSERT and friends
-
-2004-08-03  Benjamin Otte  <otte@gnome.org>
-
-       * examples/dynparams/filter.c: (ui_control_create):
-       * examples/gstplay/player.c: (print_tag):
-       * ext/alsa/gstalsa.c: (gst_alsa_request_new_pad):
-       * ext/gdk_pixbuf/gstgdkanimation.c:
-       (gst_gdk_animation_iter_may_advance):
-       * ext/jack/gstjack.c: (gst_jack_request_new_pad):
-       * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list),
-       (tag_list_to_id3_tag_foreach), (gst_id3_tag_handle_event):
-       * ext/vorbis/oggvorbisenc.c: (gst_oggvorbisenc_get_tag_value):
-       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_get_tag_value):
-       * ext/xine/xineaudiodec.c: (gst_xine_audio_dec_chain):
-       * gst-libs/gst/media-info/media-info-test.c: (print_tag):
-       * gst/sine/demo-dparams.c: (main):
-       * gst/tags/gstvorbistag.c: (gst_tag_to_vorbis_comments):
-       * testsuite/alsa/formats.c: (create_pipeline):
-       * testsuite/alsa/sinesrc.c: (sinesrc_force_caps), (sinesrc_get):
-         fixes for G_DISABLE_ASSERT and friends
-       * gst/typefind/gsttypefindfunctions.c: (aac_type_find),
-       (mp3_type_frame_length_from_header), (mp3_type_find),
-       (plugin_init):
-         require mp3 typefinding to have at least MIN_HEADERS valid headers
-         add typefinding for AAC adts files
-
-2004-08-04  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * sys/ximage/ximagesink.c:
-       (gst_ximagesink_calculate_pixel_aspect_ratio):
-       * sys/xvimage/xvimagesink.c:
-       (gst_xvimagesink_calculate_pixel_aspect_ratio):
-       Make sure we calculate pixel-aspect-ratio using floating point maths
-
-2004-08-03  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * po/uk.po:
-         updated translation
-
-2004-08-03  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get):
-         add debugging for display PAR calculation
-
-2004-08-02  David Schleef  <ds@schleef.org>
-
-       * configure.ac: Fix mikmod CFLAGS.
-
-2004-07-27  Benjamin Otte  <otte@gnome.org>
-
-       * gst/audioscale/gstaudioscale.c:
-       - fix templates to only support S16, it's the only format that works
-       - make caps nego code use try_set_caps_nonfixed and fixation instead
-       of try_set_caps twice, which is not nice for autopluggers
-       - change rank to secondary, so autopluggers can pick it up after
-       audioconvert
-
-2004-08-02  Iain <iain@prettypeople.org>
-
-       * gst/interleave/interleave.c (interleave_init),
-       (interleave_request_new_pad),
-       (interleave_pad_removed),
-       (interleave_buffered_loop): Use the real pad count, not the artificial
-       one.
-
-2004-08-02  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac: bump nano back to development
-
-=== release 0.8.3 ===
-
-2004-08-02  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac: releasing 0.8.3, "Water"
-
-2004-08-02  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/xvimage/xvimagesink.c:
-       (gst_xvimagesink_calculate_pixel_aspect_ratio),
-       (gst_xvimagesink_xcontext_clear), (gst_xvimagesink_sink_link),
-       (gst_xvimagesink_change_state), (gst_xvimagesink_buffer_alloc),
-       (gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
-       (gst_xvimagesink_init), (gst_xvimagesink_class_init):
-       * sys/xvimage/xvimagesink.h:
-         apply similar PAR fixes as to ximagesink
-
-2004-08-02  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       patch from: Benjamin Otte
-
-       * ext/lame/gstlame.c: (gst_lame_src_link), (gst_lame_init):
-         add link function to lame.  Fixes #148986.
-
-2004-08-02  Johan Dahlin  <johan@gnome.org>
-
-       * gst/multipart/multipartmux.c (gst_multipart_mux_next_buffer):
-       fix debugging log
-
-2004-07-30  David Schleef  <ds@schleef.org>
-
-       * gst/videomixer/Makefile.am: Fix things that should have been
-       fixed in the last checkin.
-
-2004-07-30  David Schleef  <ds@schleef.org>
-
-       * gst/multipart/Makefile.am: Fix things that should have been
-       fixed in the last checkin.
-
-2004-07-30  David Schleef  <ds@schleef.org>
-
-       * testsuite/multifilesink/Makefile.am: Fix unused variable.
-
-2004-07-30  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-         bump nano for prerelease
-       * po/af.po:
-       * po/az.po:
-       * po/cs.po:
-       * po/en_GB.po:
-       * po/hu.po:
-       * po/nl.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/uk.po:
-         updates
-
-2004-07-30  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
-       (gst_multifdsink_add), (gst_multifdsink_remove),
-       (gst_multifdsink_clear), (gst_multifdsink_get_stats),
-       (gst_multifdsink_client_remove),
-       (gst_multifdsink_handle_client_write),
-       (gst_multifdsink_queue_buffer), (gst_multifdsink_handle_clients):
-       * gst/tcp/gstmultifdsink.h:
-       Recover from a select with a bad file descriptor by removing
-       the client.
-
-2004-07-30  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-         fix requirement of core
-       * gst-libs/gst/play/play.c: (gst_play_error_plugin),
-       (gst_play_pipeline_setup):
-         don't use colorspace element.  do use hermescolorspace element.
-         make macro to get a colorspace element.
-         mark strings for translation.
-       * po/POTFILES.in:
-         add play.c
-       * po/af.po:
-       * po/az.po:
-       * po/cs.po:
-       * po/en_GB.po:
-       * po/hu.po:
-       * po/nl.po:
-       * po/sr.po:
-       * po/sv.po:
-       * po/uk.po:
-         update translations
-
-2004-07-30  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * ext/libpng/gstpngenc.c: (gst_pngenc_class_init):
-       fix default for newmedia flag
-
-2004-07-30  Wim Taymans  <wim@fluendo.com>
-
-       * ext/theora/theoradec.c: (gst_theora_dec_class_init),
-       (gst_theora_dec_init), (theora_get_formats),
-       (theora_dec_src_convert), (theora_dec_sink_convert),
-       (theora_dec_src_query), (theora_dec_src_event), (theora_dec_event),
-       (theora_dec_chain), (theora_dec_set_property),
-       (theora_dec_get_property):
-       * ext/theora/theoraenc.c: (gst_border_mode_get_type),
-       (gst_theora_enc_class_init), (gst_theora_enc_init),
-       (theora_enc_sink_link), (theora_enc_chain),
-       (theora_enc_set_property), (theora_enc_get_property):
-       Added cropping option to theora decoder.
-       Added border option to theora encoder.
-
-2004-07-30  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * ext/libpng/gstpngenc.c: (gst_pngenc_class_init),
-       (gst_pngenc_init), (gst_pngenc_chain), (gst_pngenc_get_property),
-       (gst_pngenc_set_property):
-       * ext/libpng/gstpngenc.h:
-       Added newmedia support to pngenc so now gst-launch-0.8 videotestsrc ! ffmpegcolorspace ! pngenc snapshot=false newmedia=true ! multifilesink location=blah%d.png works as expected
-
-2004-07-30  Wim Taymans  <wim@fluendo.com>
-
-       * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
-       (theora_enc_sink_link), (theora_enc_chain),
-       (theora_enc_set_property), (theora_enc_get_property):
-       Fix encoding of non-multiple-of-16 video.
-
-2004-07-29  David Schleef  <ds@schleef.org>
-
-       * configure.ac: make test for audiofile more strict
-
-2004-07-25  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst/typefind/gsttypefindfunctions.c: (plugin_init):
-         give different names to typefind functions
-
-2004-07-28  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_renegotiate_size),
-       (gst_ximagesink_calculate_pixel_aspect_ratio),
-       (gst_ximagesink_xcontext_get), (gst_ximagesink_getcaps),
-       (gst_ximagesink_sink_link), (gst_ximagesink_change_state),
-       (gst_ximagesink_set_xwindow_id), (gst_ximagesink_set_property),
-       (gst_ximagesink_get_property), (gst_ximagesink_init):
-       * sys/ximage/ximagesink.h:
-         allocate PAR's dynamically.
-         use autodetected PAR if no object-set PAR is given.
-         add workaround for directfb's X not setting physical size.
-         fix to xvimagesink will follow tomorrow.
-
-2004-07-28  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
-       * ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
-       (gst_shout2send_get_type), (gst_shout2send_set_clock),
-       (gst_shout2send_class_init), (gst_shout2send_init),
-       (set_shout_metadata), (gst_shout2send_set_metadata),
-       (gst_shout2send_chain), (gst_shout2send_set_property),
-       (gst_shout2send_get_property), (gst_shout2send_connect),
-       (gst_shout2send_change_state):
-       * ext/shout2/gstshout2.h:
-       - fix for sending mp3 audio to icecast2 server, if pad link function not
-       called before PAUSED state
-       - added option to use GStreamer clock sync (as opposed to libshout's own sync)
-       - added tagging support for mp3 audio broadcasted
-       * gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
-       debug info
-
-2004-07-28  Wim Taymans  <wim@fluendo.com>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
-       (gst_ogg_demux_push):
-       Return query failure when we don't know the length of
-       an ogg stream insteda of returning TRUE with a bogus value.
-
-2004-07-28  Wim Taymans  <wim@fluendo.com>
-
-       * ext/theora/theoradec.c: (theora_get_formats),
-       (theora_dec_src_convert), (theora_dec_sink_convert),
-       (theora_dec_src_query), (theora_dec_src_event), (theora_dec_event),
-       (theora_dec_chain):
-       Don't screw up the 1 Chroma for 1 luma sample situation when we
-       have an odd offset/width by adding a black border in those cases.
-
-2004-07-28  Wim Taymans  <wim@fluendo.com>
-
-       * ext/theora/theoradec.c: (theora_get_formats),
-       (theora_dec_src_convert), (theora_dec_sink_convert),
-       (theora_dec_src_query), (theora_dec_src_event), (theora_dec_event),
-       (theora_dec_chain):
-       * ext/theora/theoraenc.c: (theora_enc_sink_link):
-       Added first attempt at cropping of the image as required by the
-       theora spec. We need more properties in the caps (offset_x,
-       offset_y,stride) to implement this correctly.
-
-2004-07-28  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * ext/dvdnav/README:
-         Update the README to use dvddemux
-       * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_getcaps):
-         Ensure getcaps returns a subset of the template caps
-       * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_base_init),
-       (gst_mpeg2subt_init):
-         Ensure getcaps returns a subset of the template caps
-       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_class_init),
-       (gst_dvd_demux_init), (gst_dvd_demux_get_video_stream),
-       (gst_dvd_demux_get_subpicture_stream),
-       (gst_dvd_demux_send_subbuffer), (gst_dvd_demux_set_cur_subpicture):
-       * gst/mpegstream/gstdvddemux.h:
-         Set the explicit caps on the current_video pad before pushing
-         anything
-       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_get_video_stream),
-       (gst_mpeg_demux_get_audio_stream):
-         Free caps used to gst_pad_set_explicit_caps, which takes a const
-         GstCaps *
-
-2004-07-28  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac: update GStreamer requirement to 0.8.4 because of
-         GstFraction.
-
-2004-07-28  Wim Taymans  <wim@fluendo.com>
-
-       * gst/wavparse/gstwavparse.c: (gst_wavparse_fmt),
-       (gst_wavparse_handle_seek), (gst_wavparse_srcpad_event):
-       Add the pad to the element after setting up the caps. This
-       makes it a lot easier to autoplug.
-
-2004-07-27  Steve Lhomme  <steve.lhomme@free.fr>
-
-       * gst/median/gstmedian.c:
-       * gst/mpeg2subt/gstmpeg2subt.c:
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-       * gst/mpegstream/gstdvddemux.c:
-       * gst/mpegstream/gstmpegdemux.c:
-       * gst/mpegstream/gstmpegpacketize.c:
-       * gst/rtjpeg/gstrtjpeg.c:
-       * gst/rtjpeg/gstrtjpegdec.c:
-       * gst/rtjpeg/gstrtjpegenc.c:
-       * gst/sine/gstsinesrc.c:
-       * gst/smooth/gstsmooth.c:
-       * gst/smpte/gstsmpte.c:
-       * gst/smpte/gstsmpte.h:
-       * gst/stereo/gststereo.c:
-       * gst/videofilter/gstgamma.c:
-       * gst/videofilter/gstvideobalance.c:
-       * gst/videofilter/gstvideofilter.c:
-       * gst/videofilter/gstvideoflip.c:
-       * gst/videoscale/gstvideoscale.c:
-       * gst/videoscale/videoscale.c:
-       * gst/videotestsrc/gstvideotestsrc.c:
-       * gst/videotestsrc/videotestsrc.c:
-       * gst/wavenc/gstwavenc.c:
-       * gst/wavparse/gstwavparse.c:
-         fix local includes and 64 bits constants
-
-2004-07-27  Steve Lhomme  <steve.lhomme@free.fr>
-
-       * win32/gst.sln:
-       * gst-libs/gst/*/*.vcproj:
-       * gst/*/*.vcproj:
-         more working plugins
-
-2004-07-27  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * testsuite/alsa/Makefile.am:
-       * testsuite/alsa/srcstate.c:
-       add test for alsasrc changing state
-
-2004-07-27  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * gst/silence/gstsilence.c: (gst_silence_init), (gst_silence_link),
-       (gst_silence_get):
-       * gst/silence/gstsilence.h:
-       fix silence generation for 16bit raw audio
-
-2004-07-27  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/matroska/matroska-demux.c:
-       (gst_matroska_demux_parse_metadata),
-       (gst_matroska_demux_video_caps), (gst_matroska_demux_plugin_init):
-       * gst/mpegaudio/common.c:
-       * gst/videoscale/gstvideoscale.c: (gst_videoscale_class_init),
-       (gst_videoscale_getcaps), (gst_videoscale_link),
-       (gst_videoscale_src_fixate), (gst_videoscale_init),
-       (gst_videoscale_finalize):
-       * gst/videoscale/gstvideoscale.h:
-       * gst/videotestsrc/gstvideotestsrc.c:
-       (gst_videotestsrc_get_capslist):
-       * gst/wavenc/gstwavenc.c:
-       * sys/oss/gstossmixer.c: (fill_labels):
-       * sys/ximage/ximagesink.c: (gst_ximagesink_renegotiate_size),
-       (gst_ximagesink_handle_xevents),
-       (gst_ximagesink_calculate_pixel_aspect_ratio),
-       (gst_ximagesink_xcontext_get), (gst_ximagesink_fixate),
-       (gst_ximagesink_getcaps), (gst_ximagesink_sink_link),
-       (gst_ximagesink_chain), (gst_ximagesink_set_xwindow_id),
-       (gst_ximagesink_set_property), (gst_ximagesink_get_property),
-       (gst_ximagesink_init), (gst_ximagesink_class_init):
-       * sys/ximage/ximagesink.h:
-       * sys/xvimage/xvimagesink.c:
-       (gst_xvimagesink_calculate_pixel_aspect_ratio),
-       (gst_xvimagesink_xcontext_get), (gst_xvimagesink_sink_link),
-       (gst_xvimagesink_chain), (gst_xvimagesink_buffer_alloc),
-       (gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
-       (gst_xvimagesink_init), (gst_xvimagesink_class_init):
-       * sys/xvimage/xvimagesink.h:
-         first batch of pixel aspect ratio commits.
-
-2004-07-27  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
-       (gst_ffmpegcolorspace_class_init), (gst_ffmpegcolorspace_chain):
-       * gst/ffmpegcolorspace/imgconvert.c: (avpicture_fill):
-         handle stride, needs work if we want to move stride handling
-         upstream, but works correctly for our purposes.
-
-2004-07-27  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/videoscale/README:
-         add testing examples
-       * gst/videoscale/gstvideoscale.c: (gst_videoscale_link),
-       (gst_videoscale_chain):
-       * gst/videoscale/videoscale.c: (gst_videoscale_setup),
-       (gst_videoscale_get_size):
-         add get_size function that handles stride like videotestsrc.
-         fixes conversion for YUV formats for as much as I can test them.
-
-2004-07-27  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls),
-       (gst_ximagesink_ximage_new), (gst_ximagesink_ximage_destroy):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
-       (gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_destroy),
-       (gst_xvimagesink_xvimage_put):
-         further cleanups, logging, error handling and synchronizing
-
-2004-07-27  Wim Taymans  <wim@fluendo.com>
-
-       * gst/videomixer/videomixer.c: (gst_videomixer_pad_get_type),
-       (gst_videomixer_pad_class_init), (gst_videomixer_pad_get_property),
-       (gst_videomixer_pad_set_property),
-       (gst_videomixer_pad_sinkconnect), (gst_videomixer_pad_init),
-       (gst_video_mixer_background_get_type), (gst_videomixer_get_type),
-       (gst_videomixer_class_init), (gst_videomixer_init),
-       (gst_videomixer_getcaps), (gst_videomixer_request_new_pad),
-       (gst_videomixer_blend_ayuv_i420), (pad_zorder_compare),
-       (gst_videomixer_sort_pads), (gst_videomixer_fill_checker),
-       (gst_videomixer_fill_color), (gst_videomixer_fill_queues),
-       (gst_videomixer_blend_buffers), (gst_videomixer_update_queues),
-       (gst_videomixer_loop), (plugin_init):
-       Be a nicer negotiation citizen and provide a getcaps function on
-       the srcpad. This also fixes a crash when resizing.
-
-2004-07-27  Julien MOUTTE  <julien@moutte.net>
-
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
-       (gst_xvimagesink_xvimage_new): Some fixes to image size calculation.
-
-2004-07-27  Wim Taymans  <wim@fluendo.com>
-
-       * ext/libpng/gstpngdec.c: (gst_pngdec_src_getcaps):
-       * ext/libpng/gstpngenc.c: (gst_pngenc_class_init),
-       (gst_pngenc_init), (gst_pngenc_chain), (gst_pngenc_get_property),
-       (gst_pngenc_set_property):
-       * ext/libpng/gstpngenc.h:
-       Added snapshot property to pngenc.
-       removed g_print from pngdec
-
-2004-07-27  Steve Lhomme  <steve.lhomme@free.fr>
-
-       * gst/ac3parse/ac3parse.vcproj
-       * gst/adder/adder.vcproj
-       * gst/alpha/alpha.vcproj
-       * gst/alpha/alphacolor.vcproj
-       * gst/asfdemux/asf.vcproj
-       * gst/audioconvert/audioconvert.vcproj
-       * gst/audiorate/audiorate.vcproj
-       * gst/audioscale/audioscale.vcproj
-       * gst/auparse/auparse.vcproj
-       * gst/avi/avi.vcproj
-       * gst/cdxaparse/cdxaparse.vcproj
-       * gst/chart/chart.vcproj
-       * gst/colorspace/colorspace.vcproj
-       * gst/cutter/cutter.vcproj
-       * gst/debug/debug.vcproj
-       * gst/debug/efence.vcproj
-       * gst/debug/navigationtest.vcproj
-       * gst/deinterlace/deinterlace.vcproj
-       * gst/effectv/effectv.vcproj
-       * gst/ffmpegcolorspace/ffmpegcolorspace.vcproj
-       * gst/filter/filter.vcproj
-       * gst/flx/flxdec.vcproj
-       * gst/goom/goom.vcproj
-       * gst/interleave/interleave.vcproj
-       * gst/law/alaw.vcproj
-       * gst/law/mulaw.vcproj
-       * gst/matroska/matroska.vcproj
-       * gst/median/median.vcproj
-       * gst/mixmatrix/mixmatrix.vcproj
-       * gst/mpeg1sys/mpeg1systemencode.vcproj
-       * gst/mpeg1videoparse/mp1videoparse.vcproj
-       * gst/mpeg2sub/mpeg2subt.vcproj
-       * gst/mpegaudio/mpegaudio.vcproj
-       * gst/mpegaudioparse/mpegaudioparse.vcproj
-       * gst/mpegstream/mpegstream.vcproj
-       * gst/multifilesink/multifilesink.vcproj
-       * gst/multipart/multipart.vcproj
-       * gst/oneton/oneton.vcproj
-       * gst/overlay/overlay.vcproj
-       * gst/passthrough/passthrough.vcproj
-       * gst/qtdemux/qtdemux.vcproj
-       * gst/realmedia/rmdemux.vcproj
-       * gst/rtjpeg/rtjpeg.vcproj
-       * gst/rtp/rtp.vcproj
-       * gst/silence/silence.vcproj
-       * gst/sine/sinesrc.vcproj
-       * gst/smooth/smooth.vcproj
-       * gst/smpte/smpte.vcproj
-       * gst/spectrum/spectrum.vcproj
-       * gst/speed/speed.vcproj
-       * gst/stereo/stereo.vcproj
-       * gst/switch/switch.vcproj
-       * gst/tags/tagedit.vcproj
-       * gst/tcp/tcp.vcproj
-       * gst/typefind/typefindfunctions.vcproj
-       * gst/udp/udp.vcproj
-       * gst/videobox/videobox.vcproj
-       * gst/videocrop/videocrop.vcproj
-       * gst/videodrop/videodrop.vcproj
-       * gst/videofilter/gamma.vcproj
-       * gst/videofilter/videobalance.vcproj
-       * gst/videofilter/videofilter.vcproj
-       * gst/videofilter/videoflip.vcproj
-       * gst/videoflip/videoflip.vcproj
-       * gst/videomixer/videomixer.vcproj
-       * gst/videorate/videorate.vcproj
-       * gst/videoscale/videoscale.vcproj
-       * gst/videotestsrc/videotestsrc.vcproj
-       * gst/virtualdub/virtualdub.vcproj
-       * gst/volenv/volenv.vcproj
-       * gst/volume/volume.vcproj
-       * gst/wavenc/wavenc.vcproj
-       * gst/wavparse/wavparse.vcproj
-       * gst/y4m/y4menc.vcproj
-       * gst-libs/gst/audio/audio.vcproj
-       * gst-libs/gst/audio/audiofilter.vcproj
-       * gst-libs/gst/colorbalance/colorbalance.vcproj
-       * gst-libs/gst/idct/idtc.vcproj
-       * gst-libs/gst/media-info/media-info.vcproj
-       * gst-libs/gst/mixer/mixer.vcproj
-       * gst-libs/gst/navigation/navigation.vcproj
-       * gst-libs/gst/play/play.vcproj
-       * gst-libs/gst/propertyprobe/propertyprobe.vcproj
-       * gst-libs/gst/resample/resample.vcproj
-       * gst-libs/gst/riff/riff.vcproj
-       * gst-libs/gst/tuner/tuner.vcproj
-       * gst-libs/gst/video/video.vcproj
-       * gst-libs/gst/xoverlay/xoverlay.vcproj
-         avoid problems with math.h, fix release dependancy
-         rename GStreamer-0.8.lib to libgstreamer.lib
-
-2004-07-27  Julien MOUTTE  <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_decorate):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_decorate): When
-       the atom is not available we have to unlock the mutex. Fixes #148023
-
-2004-07-26  Steve Lhomme  <steve.lhomme@free.fr>
-
-       * gst-libs/gst/media-info/media-info.h:
-         issue for a vararg macro with MSVC
-
-2004-07-26  Steve Lhomme  <steve.lhomme@free.fr>
-
-       * gst/effectv/effectv.vcproj
-       * gst-libs/gst/idct/idct.vcproj:
-       * gst-libs/gst/media-info/media-info.vcproj:
-       * gst-libs/gst/navigation/navigation.vcproj:
-       * gst-libs/gst/propertyprobe/propertyprobe.vcproj:
-       * gst-libs/gst/video/video.vcproj:
-       * gst-libs/gst/xoverlay/xoverlay.vcproj:
-         fixes for build problems
-
-2004-07-26  Steve Lhomme  <steve.lhomme@free.fr>
-
-       * gst-libs/gst/audio/audio.def:
-       * gst-libs/gst/audio/riff.def:
-         add some definitions needed by plugins
-
-2004-07-26  Steve Lhomme  <steve.lhomme@free.fr>
-
-       * gst/asfdemux/gstasfmux.c
-         Fix some 64 bits constants to be glib friendly
-
-2004-07-26  Steve Lhomme  <steve.lhomme@free.fr>
-
-       * gst/ac3parse/gstac3parse.c
-       * gst/audioscale/gstaudioscale.c
-       * gst/auparse/gstauparse.c
-       * gst/colorspace/gstcolorspace.c
-       * gst/colorspace/yuv2rgb.h
-         local include fixes
-
-2004-07-26  Steve Lhomme  <steve.lhomme@free.fr>
-
-       * win32/gst.sln
-         add more plugins to the build
-
-2004-07-26  Julien MOUTTE  <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls),
-       (gst_ximagesink_ximage_new): Some more fixes to image size calculation.
-
-2004-07-26  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/level/gstlevel.c: (gst_level_link), (gst_level_chain),
-       (gst_level_set_property), (gst_level_get_property),
-       (gst_level_base_init), (gst_level_class_init):
-         add debugging categories.  cleanups.
-
-2004-07-26  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/videoscale/videoscale.c: (gst_videoscale_setup),
-       (gst_videoscale_planar411), (gst_videoscale_planar400),
-       (gst_videoscale_packed422), (gst_videoscale_packed422rev),
-       (gst_videoscale_scale_nearest_str1),
-       (gst_videoscale_scale_nearest_str2),
-       (gst_videoscale_scale_nearest_str4),
-       (gst_videoscale_scale_nearest_16bit),
-       (gst_videoscale_scale_nearest_24bit):
-         fixed stride issues
-         tested with 320x240 -> 321, 322, 324 x240
-         tested with YV12, I420, YUY2, UYVY
-         fixed packed422rev (don't think it could have worked before)
-         by testing with UYVY
-
-2004-07-26  Benjamin Otte  <otte@gnome.org>
-
-       * ext/lame/gstlame.c: (gst_lame_sink_link), (gst_lame_init),
-       (gst_lame_chain), (gst_lame_setup), (gst_lame_change_state),
-       (plugin_init):
-         add debugging category, add error checks like checking return values
-         of setup calls, make sure it still works after
-         PLAYING=>NULL=>PLAYING, fix encoding of mono streams
-
-2004-07-26  Wim Taymans  <wim@fluendo.com>
-
-       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_get_video_stream),
-       (gst_mpeg_demux_get_audio_stream),
-       (gst_mpeg_demux_process_private):
-       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_send_data):
-       Check for error codes from the negotiation functions. Make sure
-       we really set the pad caps when a new pad is created.
-
-2004-07-26  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
-       (gst_ffmpeg_caps_to_pix_fmt):
-       * gst/ffmpegcolorspace/gstffmpegcodecmap.h:
-       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
-       (gst_ffmpegcolorspace_pad_link):
-         don't make function do two things at the same time without reason.
-
-2004-07-26  Steve Lhomme  <steve.lhomme@free.fr>
-
-       * gst/ac3parse/ac3parse.vcproj
-       * gst/adder/adder.vcproj
-       * gst/alpha/alpha.vcproj
-       * gst/alpha/alphacolor.vcproj
-       * gst/asfdemux/asf.vcproj
-       * gst/audioconvert/audioconvert.vcproj
-       * gst/audiorate/audiorate.vcproj
-       * gst/audioscale/audioscale.vcproj
-       * gst/auparse/auparse.vcproj
-       * gst/avi/avi.vcproj
-       * gst/cdxaparse/cdxaparse.vcproj
-       * gst/chart/chart.vcproj
-       * gst/colorspace/colorspace.vcproj
-       * gst/cutter/cutter.vcproj
-       * gst/debug/debug.vcproj
-       * gst/debug/efence.vcproj
-       * gst/debug/navigationtest.vcproj
-       * gst/deinterlace/deinterlace.vcproj
-       * gst/effectv/effectv.vcproj
-       * gst/ffmpegcolorspace/ffmpegcolorspace.vcproj
-       * gst/filter/filter.vcproj
-       * gst/flx/flxdec.vcproj
-       * gst/goom/goom.vcproj
-       * gst/interleave/interleave.vcproj
-       * gst/law/alaw.vcproj
-       * gst/law/mulaw.vcproj
-       * gst/matroska/matroska.vcproj
-       * gst/median/median.vcproj
-       * gst/mixmatrix/mixmatrix.vcproj
-       * gst/mpeg1sys/mpeg1systemencode.vcproj
-       * gst/mpeg1videoparse/mp1videoparse.vcproj
-       * gst/mpeg2sub/mpeg2subt.vcproj
-       * gst/mpegaudio/mpegaudio.vcproj
-       * gst/mpegaudioparse/mpegaudioparse.vcproj
-       * gst/mpegstream/mpegstream.vcproj
-       * gst/multifilesink/multifilesink.vcproj
-       * gst/multipart/multipart.vcproj
-       * gst/oneton/oneton.vcproj
-       * gst/overlay/overlay.vcproj
-       * gst/passthrough/passthrough.vcproj
-       * gst/qtdemux/qtdemux.vcproj
-       * gst/realmedia/rmdemux.vcproj
-       * gst/rtjpeg/rtjpeg.vcproj
-       * gst/rtp/rtp.vcproj
-       * gst/silence/silence.vcproj
-       * gst/sine/sinesrc.vcproj
-       * gst/smooth/smooth.vcproj
-       * gst/smpte/smpte.vcproj
-       * gst/spectrum/spectrum.vcproj
-       * gst/speed/speed.vcproj
-       * gst/stereo/stereo.vcproj
-       * gst/switch/switch.vcproj
-       * gst/tags/tagedit.vcproj
-       * gst/tcp/tcp.vcproj
-       * gst/typefind/typefindfunctions.vcproj
-       * gst/udp/udp.vcproj
-       * gst/videobox/videobox.vcproj
-       * gst/videocrop/videocrop.vcproj
-       * gst/videodrop/videodrop.vcproj
-       * gst/videofilter/gamma.vcproj
-       * gst/videofilter/videobalance.vcproj
-       * gst/videofilter/videofilter.vcproj
-       * gst/videofilter/videoflip.vcproj
-       * gst/videoflip/videoflip.vcproj
-       * gst/videomixer/videomixer.vcproj
-       * gst/videorate/videorate.vcproj
-       * gst/videoscale/videoscale.vcproj
-       * gst/videotestsrc/videotestsrc.vcproj
-       * gst/virtualdub/virtualdub.vcproj
-       * gst/volenv/volenv.vcproj
-       * gst/volume/volume.vcproj
-       * gst/wavenc/wavenc.vcproj
-       * gst/wavparse/wavparse.vcproj
-       * gst/y4m/y4menc.vcproj
-         more plugins supported under windows
-
-2004-07-26  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
-       (gst_ximagesink_ximage_put), (gst_ximagesink_renegotiate_size),
-       (gst_ximagesink_chain), (gst_ximagesink_buffer_alloc):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
-       (gst_xvimagesink_chain), (gst_xvimagesink_buffer_alloc):
-         Add debugging statements.  Use the sizes as returned by the
-         *CreateImage calls.
-
-2004-07-26  Johan Dahlin  <johan@gnome.org>
-
-       * gst/tcp/gsttcpclientsrc.c (gst_tcpclientsrc_get): Make sure that
-       the pad is negotiated.
-
-       * gst/ffmpegcolorspace/gstffmpegcolorspace.c (gst_ffmpegcolorspace_chain): Ditto
-
-2004-07-26  Steve Lhomme  <steve.lhomme@free.fr>
-
-       * gst-libs/gst/colorbalance/colorbalance.vcproj:
-       * gst-libs/gst/idct/idct.vcproj:
-       * gst-libs/gst/media-info/media-info.vcproj:
-       * gst-libs/gst/mixer/mixer.vcproj:
-       * gst-libs/gst/navigation/navigation.vcproj:
-       * gst-libs/gst/play/play.vcproj:
-       * gst-libs/gst/propertyprobe/propertyprobe.vcproj:
-       * gst-libs/gst/resample/resample.vcproj:
-       * gst-libs/gst/tuner/tuner.vcproj:
-       * gst-libs/gst/video/video.vcproj:
-       * gst-libs/gst/xoverlay/xoverlay.vcproj:
-         more plugins supported under windows
-
-2004-07-25 Iain <iain@prettypeople.org>
-
-       * gst/wavparse/gstwavparse.c (gst_wavparse_fmt): Set the caps on the
-       pad now rather than when the pad is created because state changes wipe
-       explicit caps (fixes #148043).
-
-2004-07-25  Sebastien Cote  <sc5@hermes.usherb.ca>
-
-       reviewed by Benjamin Otte  <otte@gnome.org>
-
-       * ext/mad/gstmad.c:
-         fix mad plugin crashing on Sun (fixes #148289)
-
-2004-07-25  Steve Lhomme  <steve.lhomme@free.fr>
-
-       * gst/avi/avi.def:
-       * gst/avi/avi.vcproj:
-       * gst/matroska/matroska.def:
-       * gst/matroska/matroska.vcproj:
-         remove unused .def files
-
-2004-07-25  Steve Lhomme  <steve.lhomme@free.fr>
-
-       * gst-libs/gst/audio/gstaudiofilter.c:
-         Clean the local include
-
-2004-07-25  Steve Lhomme  <steve.lhomme@free.fr>
-
-       * win32/gst.sln:
-       * gst-libs/gst/audio/audio.def:
-       * gst-libs/gst/audio/audio.vcproj:
-       * gst-libs/gst/audio/audiofilter.vcproj:
-       * gst-libs/gst/audio/riff.def:
-       * gst-libs/gst/audio/riff.vcproj:
-       * gst-libs/gst/gst-libs.def:
-       * gst-libs/gst/gst-libs.vcproj:
-       * gst/avi/avi.vcproj:
-       * gst/avi/avi.vcproj:
-         Copy the files where needed after building, cleaner projects
-
-2004-07-25  Steve Lhomme  <steve.lhomme@free.fr>
-
-       * gst/matroska/ebml-write.c:
-         Fix some 64 bits constants to be glib friendly
-
-2004-07-24  Steve Lhomme  <steve.lhomme@free.fr>
-
-       * win32/gst.sln:
-       * gst-libs/gst/gst-libs.def:
-       * gst-libs/gst/gst-libs.vcproj:
-       * gst/matroska/matroska.def:
-       * gst/matroska/matroska.vcproj:
-         Add the preliminary canvas to build plugins on Win32
-
-2004-07-23  Benjamin Otte  <otte@gnome.org>
-
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
-         don't enfore negotiation from source side, it breaks
-         sinesrc ! audioconvert ! osssink
-
-2004-07-22  David Schleef  <ds@schleef.org>
-
-       * gst/typefind/gsttypefindfunctions.c: (plugin_init): Add typefind
-       for ELF files, since they can easily be recognized as audio/mpeg.
-       (bug #147441)
-
-2004-07-22  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/videoscale/videoscale.c: (gst_videoscale_setup),
-       (gst_videoscale_planar411), (gst_videoscale_scale_nearest_32bit),
-       (gst_videoscale_scale_nearest_24bit),
-       (gst_videoscale_scale_nearest_16bit):
-         fix 16bit and 24bit for stride (24bit might need testing)
-         don't pretend we do more than one algorithm
-
-2004-07-22  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * configure.ac:
-       * gst/Makefile.am:
-       * gst/multifilesink/Makefile.am:
-       * gst/multifilesink/gstmultifilesink.c:
-       (gst_multifilesink_get_formats),
-       (gst_multifilesink_get_query_types), (_do_init),
-       (gst_multifilesink_base_init), (gst_multifilesink_class_init),
-       (gst_multifilesink_init), (gst_multifilesink_dispose),
-       (gst_multifilesink_set_location), (gst_multifilesink_set_property),
-       (gst_multifilesink_get_property), (gst_multifilesink_open_file),
-       (gst_multifilesink_close_file), (gst_multifilesink_next_file),
-       (gst_multifilesink_pad_query), (gst_multifilesink_handle_event),
-       (gst_multifilesink_chain), (gst_multifilesink_change_state),
-       (gst_multifilesink_uri_get_type),
-       (gst_multifilesink_uri_get_protocols),
-       (gst_multifilesink_uri_get_uri), (gst_multifilesink_uri_set_uri),
-       (gst_multifilesink_uri_handler_init), (plugin_init):
-       * gst/multifilesink/gstmultifilesink.h:
-       * testsuite/Makefile.am:
-       * testsuite/multifilesink/Makefile.am:
-       * testsuite/multifilesink/fakesrc_test.c: (gst_newmedia_base_init),
-       (gst_newmedia_class_init), (gst_newmedia_init),
-       (gst_newmedia_chain), (gst_newmedia_trigger), (test_format),
-       (newfile_signal), (test_signal), (main):
-       multifilesink plugin for creating new files every time a new media
-       discontinuity event occurs
-
-2004-07-22  Wim Taymans  <wim@fluendo.com>
-
-       * gst/alpha/Makefile.am:
-       * gst/alpha/gstalphacolor.c: (gst_alpha_color_get_type),
-       (gst_alpha_color_base_init), (gst_alpha_color_class_init),
-       (gst_alpha_color_init), (gst_alpha_color_set_property),
-       (gst_alpha_color_get_property), (gst_alpha_color_sink_link),
-       (transform), (gst_alpha_color_chain),
-       (gst_alpha_color_change_state), (plugin_init):
-       Stupid plugin to to RGBA to AYUV conversion because none of
-       the colorspace plugins can handle that yet.
-
-2004-07-22  Wim Taymans  <wim@fluendo.com>
-
-       * examples/seeking/seek.c: (update_scale), (main):
-       * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
-       (gst_decode_bin_class_init), (gst_decode_bin_is_dynamic),
-       (gst_decode_bin_factory_filter), (compare_ranks), (print_feature),
-       (gst_decode_bin_init), (gst_decode_bin_dispose),
-       (find_compatibles), (close_pad_link), (try_to_link_1), (new_pad),
-       (no_more_pads), (close_link), (type_found),
-       (gst_decode_bin_set_property), (gst_decode_bin_get_property),
-       (plugin_init):
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type),
-       (gst_play_base_bin_class_init), (gst_play_base_bin_init),
-       (gst_play_base_bin_dispose), (queue_overrun),
-       (gen_preroll_element), (remove_prerolls), (unknown_type),
-       (no_more_pads), (new_stream), (setup_source),
-       (gst_play_base_bin_set_property), (gst_play_base_bin_get_property),
-       (play_base_eos), (gst_play_base_bin_change_state),
-       (gst_play_base_bin_add_element),
-       (gst_play_base_bin_remove_element),
-       (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream),
-       (gst_play_base_bin_unlink_stream),
-       (gst_play_base_bin_get_streaminfo):
-       * gst/playback/gstplaybin.c: (gen_video_element),
-       (gen_audio_element):
-       * gst/playback/gststreaminfo.h:
-       More playback updates, attempt to fix things after the state change
-       breakage.
-
-2004-07-22  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/videoscale/videoscale.c: (gst_videoscale_planar411),
-       (gst_videoscale_scale_nearest_16bit):
-         comment algorithm
-
-2004-07-22  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/videotestsrc/gstvideotestsrc.c:
-       (gst_videotestsrc_class_init), (gst_videotestsrc_src_link),
-       (gst_videotestsrc_init), (gst_videotestsrc_get),
-       (gst_videotestsrc_set_pattern), (gst_videotestsrc_set_property),
-       (gst_videotestsrc_get_property):
-       * gst/videotestsrc/gstvideotestsrc.h:
-       * gst/videotestsrc/videotestsrc.c:
-       * gst/videotestsrc/videotestsrc.h:
-         cleanup and commenting
-
-2004-07-21  Wim Taymans  <wim@fluendo.com>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_init),
-       (gst_ogg_demux_get_formats), (gst_ogg_demux_src_query),
-       (gst_ogg_demux_src_event), (gst_ogg_demux_src_convert),
-       (gst_ogg_demux_handle_event), (gst_ogg_demux_seek_before),
-       (_find_chain_get_unknown_part), (_find_streams_check),
-       (gst_ogg_demux_push), (gst_ogg_pad_push):
-       * ext/theora/theoradec.c: (theora_get_formats),
-       (theora_dec_src_convert), (theora_dec_sink_convert),
-       (theora_dec_src_query), (theora_dec_src_event), (theora_dec_event),
-       (theora_dec_chain):
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_get_formats),
-       (vorbis_dec_convert), (vorbis_dec_src_query),
-       (vorbis_dec_src_event), (vorbis_dec_event):
-       More seeking fixes, oggdemux now supports seeking to time and
-       uses the downstream element to convert granulepos to time.
-       Seeking in theora-only ogg files now works.
-
-2004-07-21  Wim Taymans  <wim@fluendo.com>
-
-       * ext/theora/theoradec.c: (gst_theora_dec_init),
-       (theora_get_formats), (theora_get_event_masks),
-       (theora_get_query_types), (theora_dec_src_convert),
-       (theora_dec_sink_convert), (theora_dec_src_query),
-       (theora_dec_src_event), (theora_dec_event), (theora_dec_chain):
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_get_formats),
-       (vorbis_get_event_masks), (vorbis_get_query_types),
-       (gst_vorbis_dec_init), (vorbis_dec_convert),
-       (vorbis_dec_src_query), (vorbis_dec_src_event), (vorbis_dec_event):
-       Added query/convert/formats functions to vorbis and theora decoders
-       so that the outside world can use them too. Fixed seeking on an
-       ogg/theora/vorbis file by disabling the seeking seeking on the
-       theora srcpad.
-
-2004-07-21  Julien MOUTTE  <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
-       (gst_ximagesink_renegotiate_size), (gst_ximagesink_sink_link),
-       (gst_ximagesink_chain), (gst_ximagesink_set_xwindow_id): Optimize
-       images creation for both elements. We don't create the image on caps
-       nego or renego, we just destroy the internal one if present if it does
-       not match the needs. The chain function takes care of creating a new
-       image when needed.
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
-       (gst_xvimagesink_xwindow_decorate), (gst_xvimagesink_sink_link),
-       (gst_xvimagesink_chain), (gst_xvimagesink_buffer_alloc),
-       (gst_xvimagesink_set_xwindow_id): Additionally xvimage now contains
-       the image format information. The buffer pool checks for the context
-       image format and discard images with different formats.
-       * sys/xvimage/xvimagesink.h: Adding im_format in the xvimage structure.
-
-2004-07-21  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
-       (gst_ffmpegcolorspace_chain):
-         no point in doing any chaining if the pad we want to push from
-         isn't usable.
-
-2004-07-20  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-media.c:
-       (gst_riff_create_audio_caps_with_data):
-         Fix double end-to-native symbol conversion (#148021).
-
-2004-07-20  David Schleef  <ds@schleef.org>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_decorate):
-       Don't use an Atom that doesn't exist.
-
-2004-07-20  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
-       (gst_multifdsink_add), (gst_multifdsink_get_stats),
-       (gst_multifdsink_client_remove),
-       (gst_multifdsink_handle_client_write),
-       (gst_multifdsink_queue_buffer):
-       * gst/tcp/gstmultifdsink.h:
-       More multifdsink stats. Avoid deadlock by releasing locks
-       before sending out a signal.
-
-2004-07-20  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * po/LINGUAS:
-       * po/hu.po:
-         added Hungarian translation (Laszlo Dvornik)
-
-2004-07-20  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
-       (gst_multifdsink_add), (gst_multifdsink_client_remove),
-       (gst_multifdsink_handle_client_write),
-       (gst_multifdsink_queue_buffer):
-       * gst/tcp/gsttcp-marshal.list:
-       Fixed the stupid marshal definition.
-
-2004-07-20  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
-       (gst_multifdsink_init), (gst_multifdsink_add),
-       (gst_multifdsink_client_remove),
-       (gst_multifdsink_handle_client_write),
-       (gst_multifdsink_queue_buffer), (gst_multifdsink_chain),
-       (gst_multifdsink_set_property), (gst_multifdsink_get_property),
-       (gst_multifdsink_init_send):
-       * gst/tcp/gstmultifdsink.h:
-       Added more stats, added timeout for a client, fixed some typos
-       and added some comments.
-
-2004-07-20  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
-       (gst_multifdsink_add), (gst_multifdsink_get_stats),
-       (gst_multifdsink_client_remove),
-       (gst_multifdsink_handle_client_write):
-       * gst/tcp/gstmultifdsink.h:
-       * gst/tcp/gsttcp-marshal.list:
-       Added get_stats method that returns a GValueArray of
-       stats values.
-
-2004-07-19  Benjamin Otte  <otte@gnome.org>
-
-       * ext/ladspa/gstladspa.c: (gst_ladspa_base_init):
-         make sure longname, description and author are valid UTF-8
-
-2004-07-19  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_change_state),
-       (gst_ximagesink_set_property):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_change_state),
-       (gst_xvimagesink_set_property):
-         make sure SYNCHRONOUS is respected after getting the X context
-
-2004-07-18  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/matroska/matroska-demux.c:
-       (gst_matroska_demux_handle_src_event),
-       (gst_matroska_demux_parse_blockgroup):
-       * gst/matroska/matroska-ids.h:
-         add BlockReference tag and ignore it to clear out log.
-         ignore NAVIGATION events to clear out log.
-
-2004-07-18  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/matroska/matroska-demux.c: (gst_matroska_demux_class_init),
-       (gst_matroska_demux_add_stream):
-       * gst/matroska/matroska-mux.c: (gst_matroska_mux_class_init):
-         add debug categories
-
-2004-07-16  Wim Taymans  <wim@fluendo.com>
-
-       * ext/libpng/Makefile.am:
-       * ext/libpng/gstpng.c: (plugin_init):
-       * ext/libpng/gstpngdec.c: (user_error_fn), (user_warning_fn),
-       (gst_pngdec_get_type), (gst_pngdec_base_init),
-       (gst_pngdec_class_init), (gst_pngdec_sinklink), (gst_pngdec_init),
-       (gst_pngdec_src_getcaps), (user_read_data), (gst_pngdec_chain):
-       * ext/libpng/gstpngdec.h:
-       Added png decoder.
-
-2004-07-16  Julien MOUTTE  <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xerror),
-       (gst_ximagesink_check_xshm_calls), (gst_ximagesink_ximage_new),
-       (gst_ximagesink_ximage_destroy), (gst_ximagesink_sink_link),
-       (gst_ximagesink_chain), (gst_ximagesink_buffer_free),
-       (gst_ximagesink_buffer_alloc):
-       * sys/ximage/ximagesink.h:
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
-       (gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_destroy),
-       (gst_xvimagesink_chain), (gst_xvimagesink_buffer_free),
-       (gst_xvimagesink_buffer_alloc):
-       * sys/xvimage/xvimagesink.h: Getting the 2 video sinks synchronized
-       again. Using internal data pointer of the x(v)image to store image's
-       data to be coherent with the buffer alloc mechanism. Investigated the
-       image destruction code to be sure that everything gets freed correctly.
-
-2004-07-16  Wim Taymans  <wim@fluendo.com>
-
-       * gst-libs/gst/riff/riff-read.c:
-       (gst_riff_read_strf_vids_with_data),
-       (gst_riff_read_strf_auds_with_data):
-       * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query),
-       (gst_avi_demux_add_stream), (gst_avi_demux_stream_header):
-       Make sure we don't create 0 sized subbuffers in riff-read.
-       Signal the no more pads signal after reading the avi header.
-
-2004-07-16  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
-       (gst_decode_bin_class_init), (gst_decode_bin_is_dynamic),
-       (gst_decode_bin_factory_filter), (compare_ranks), (print_feature),
-       (gst_decode_bin_init), (gst_decode_bin_dispose),
-       (find_compatibles), (close_pad_link), (try_to_link_1), (new_pad),
-       (no_more_pads), (close_link), (type_found),
-       (gst_decode_bin_set_property), (gst_decode_bin_get_property),
-       (gst_decode_bin_change_state), (plugin_init):
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type),
-       (gst_play_base_bin_class_init), (gst_play_base_bin_init),
-       (gst_play_base_bin_dispose), (queue_overrun),
-       (gen_preroll_element), (remove_prerolls), (unknown_type),
-       (no_more_pads), (new_stream), (setup_source),
-       (gst_play_base_bin_set_property), (gst_play_base_bin_get_property),
-       (play_base_eos), (gst_play_base_bin_change_state),
-       (gst_play_base_bin_add_element),
-       (gst_play_base_bin_remove_element),
-       (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream),
-       (gst_play_base_bin_unlink_stream),
-       (gst_play_base_bin_get_streaminfo):
-       * gst/playback/gstplaybasebin.h:
-       Better error recovery. Added configurable preroll queue size. Faster
-       detection of no-more-pads.
-
-2004-07-16  Wim Taymans  <wim@fluendo.com>
-
-       * gst-libs/gst/video/video.h:
-       Added 32 bits RGBA. Not sure if we should use another mime-type
-       for alpha rgb. Currently the presence of the alpha_mask property
-       signals an alpha channel.
-
-2004-07-16  Wim Taymans  <wim@fluendo.com>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support):
-       FPS seems to be 0.0 to MAX everywhere else.
-
-2004-07-15  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-media.c:
-       (gst_riff_create_video_caps_with_data):
-         mp42/mp43 (no caps) exist too.
-       * gst/matroska/matroska-demux.c: (gst_matroska_demux_video_caps):
-         Set pixel_width/height; we've got them in-caps.
-       * gst/typefind/gsttypefindfunctions.c: (plugin_init):
-       * gst/wavparse/gstwavparse.c: (plugin_init):
-         Both are valid primary.
-       * sys/oss/gstossmixer.c:
-         Remove i18n hack and enable translations.
-
-2004-07-15  Benjamin Otte  <otte@gnome.org>
-
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
-       (gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_destroy):
-         fix for non-shm xv. Original patch by Tim Ringenbach (fixes #147248)
-
-2004-07-15  Benjamin Otte  <otte@gnome.org>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_open_audio),
-       (gst_alsa_sw_params_dump), (gst_alsa_hw_params_dump),
-       (gst_alsa_close_audio):
-         disable some of the debugging code for now. Writing debugging to a
-         buffer is broken in current alsalib releases.
-
-2004-07-12  Benjamin Otte  <otte@gnome.org>
-
-       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_alloc_buffer):
-         use bufferpools
-
-2004-07-14  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/theora/theoradec.c: (gst_theora_dec_class_init),
-       (theora_dec_src_query), (theora_dec_event):
-       * ext/theora/theoraenc.c: (gst_theora_enc_class_init):
-         add debugging categories.  Remove \n's.
-
-2004-07-13  Johan Dahlin  <johan@gnome.org>
-
-       * gst/playback/gstplaybin.c (gst_play_bin_set_property)
-       (gst_play_bin_get_property): Impl.
-
-2004-07-13  Wim Taymans  <wim@fluendo.com>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_seek_before):
-       When trying to find the stream length, seek back N pages
-       instead of just one, where N is the number of streams in
-       the current chain.
-
-2004-07-13  Wim Taymans  <wim@fluendo.com>
-
-       * gst-libs/gst/riff/riff-media.c:
-       (gst_riff_create_audio_caps_with_data),
-       (gst_riff_create_audio_caps),
-       (gst_riff_create_audio_template_caps):
-       * gst-libs/gst/riff/riff-media.h:
-       * gst-libs/gst/riff/riff-read.c:
-       (gst_riff_read_strf_vids_with_data),
-       (gst_riff_read_strf_auds_with_data), (gst_riff_read_strf_auds):
-       * gst-libs/gst/riff/riff-read.h:
-       * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query),
-       (gst_avi_demux_add_stream):
-       Set codec_data on caps for avidemuxer.
-
-2004-07-12  David Schleef  <ds@schleef.org>
-
-       * configure.ac: Fix test for Objective C
-
-2004-07-12  Jan Schmidt  <thaytan@mad.scientist.com>
-       * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_get_capslist),
-       (gst_gdk_pixbuf_chain):
-         Add svg and pcx to template caps, and ensure that getcaps returns a
-         subset of the template caps.
-         Copy each row manually for output, as gdkpixbuf may pad the
-         rowstride to a 32-bit word boundary.
-
-2004-07-12  Wim Taymans  <wim@fluendo.com>
-
-       * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps),
-       (gst_riff_create_video_template_caps):
-       Fix the template caps to include some more media types.
-
-2004-07-12  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
-       (gst_decode_bin_class_init), (gst_decode_bin_factory_filter),
-       (compare_ranks), (print_feature), (gst_decode_bin_init),
-       (gst_decode_bin_dispose), (find_compatibles), (close_pad_link),
-       (try_to_link_1), (new_pad), (close_link), (type_found),
-       (gst_decode_bin_set_property), (gst_decode_bin_get_property),
-       (gst_decode_bin_change_state), (plugin_init):
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type),
-       (gst_play_base_bin_class_init), (gst_play_base_bin_init),
-       (gst_play_base_bin_dispose), (queue_overrun),
-       (gen_preroll_element), (remove_prerolls), (no_more_pads),
-       (new_stream), (setup_source), (gst_play_base_bin_set_property),
-       (gst_play_base_bin_get_property), (play_base_eos),
-       (gst_play_base_bin_change_state), (gst_play_base_bin_add_element),
-       (gst_play_base_bin_remove_element),
-       (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream),
-       (gst_play_base_bin_unlink_stream),
-       (gst_play_base_bin_get_streaminfo):
-       * gst/playback/gstplaybasebin.h:
-       * gst/playback/gstplaybin.c: (gst_play_bin_get_type),
-       (gst_play_bin_class_init), (gst_play_bin_init),
-       (gst_play_bin_dispose), (gst_play_bin_set_property),
-       (gst_play_bin_get_property), (gen_video_element),
-       (gen_audio_element), (remove_sinks), (setup_sinks),
-       (gst_play_bin_change_state), (gst_play_bin_get_event_masks),
-       (gst_play_bin_send_event), (gst_play_bin_get_formats),
-       (gst_play_bin_convert), (gst_play_bin_get_query_types),
-       (gst_play_bin_query), (plugin_init):
-       * gst/playback/test4.c: (main):
-       More fixes on reusing of the element.
-
-2004-07-11  Benjamin Otte  <otte@gnome.org>
-
-       * ext/mad/gstmad.c: (normal_seek):
-         allow seeking for other methods than just SET
-
-2004-07-11  Andy Wingo  <wingo@pobox.com>
-
-       * gst/audioconvert/gstaudioconvert.c (gst_audio_convert_link): For
-       float, "any" caps -> buffer_frames=[0,MAX].
-
-       * gst/interleave/interleave.c (interleave_getcaps): Seems the core
-       doesn't intersect our caps with the template any more. Do it
-       ourselves.
-       (interleave_buffered_loop): Use g_newa instead of malloc/free.
-
-2004-07-09  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
-       (gst_decode_bin_class_init), (gst_decode_bin_factory_filter),
-       (compare_ranks), (print_feature), (gst_decode_bin_init),
-       (gst_decode_bin_dispose), (find_compatibles), (close_pad_link),
-       (try_to_link_1), (new_pad), (close_link), (type_found),
-       (gst_decode_bin_set_property), (gst_decode_bin_get_property),
-       (gst_decode_bin_change_state), (plugin_init):
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type),
-       (gst_play_base_bin_class_init), (gst_play_base_bin_init),
-       (gst_play_base_bin_dispose), (queue_overrun),
-       (gen_preroll_element), (remove_prerolls), (no_more_pads),
-       (new_stream), (setup_source), (gst_play_base_bin_set_property),
-       (gst_play_base_bin_get_property), (play_base_eos),
-       (gst_play_base_bin_change_state), (gst_play_base_bin_add_element),
-       (gst_play_base_bin_remove_element),
-       (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream),
-       (gst_play_base_bin_unlink_stream),
-       (gst_play_base_bin_get_streaminfo):
-       * gst/playback/gstplaybasebin.h:
-       * gst/playback/gstplaybin.c: (gst_play_bin_get_type),
-       (gst_play_bin_class_init), (gst_play_bin_init),
-       (gst_play_bin_dispose), (gst_play_bin_set_property),
-       (gst_play_bin_get_property), (gen_video_element),
-       (gen_audio_element), (remove_sinks), (setup_sinks),
-       (gst_play_bin_change_state), (gst_play_bin_get_event_masks),
-       (gst_play_bin_send_event), (gst_play_bin_get_formats),
-       (gst_play_bin_convert), (gst_play_bin_get_query_types),
-       (gst_play_bin_query), (plugin_init):
-       * gst/playback/test4.c: (main):
-       Work on object reuse and seeking.
-
-2004-07-09  Wim Taymans  <wim@fluendo.com>
-
-       * examples/seeking/seek.c: (iterate):
-       Don't consume all CPU in the idle loop.
-
-2004-07-09  Wim Taymans  <wim@fluendo.com>
-
-       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_new_output_pad),
-       (gst_mpeg_demux_parse_packet), (gst_mpeg_demux_process_private):
-       Add pad to element *after* setting the pad functions so that
-       the scheduler can use the correct ones.
-
-2004-07-09  Wim Taymans  <wim@fluendo.com>
-
-       * ext/theora/theoradec.c: (theora_dec_from_granulepos),
-       (theora_dec_src_query), (theora_dec_src_event), (theora_dec_chain):
-       Sync to keyframe after seek
-
-2004-07-09  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_change_state):
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event),
-       (gst_alsa_sink_loop), (gst_alsa_sink_change_state):
-       * ext/alsa/gstalsasrc.c: (gst_alsa_src_change_state):
-       * ext/libvisual/visual.c: (gst_visual_change_state):
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_change_state):
-       * ext/theora/theoradec.c: (theora_dec_change_state):
-       * ext/theora/theoraenc.c: (theora_enc_change_state):
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_change_state):
-       * gst-libs/gst/navigation/navigation.c:
-       * gst/adder/gstadder.c: (gst_adder_change_state):
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_chain),
-       (gst_audio_convert_get_buffer):
-       * gst/multipart/multipartdemux.c:
-       (gst_multipart_demux_change_state):
-       * gst/playback/gstdecodebin.c: (gst_decode_bin_change_state):
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_change_state):
-       * gst/playback/gstplaybin.c: (gst_play_bin_change_state):
-       * gst/videoscale/gstvideoscale.c:
-       (gst_videoscale_handle_src_event):
-       * gst/volume/gstvolume.c: (volume_chain_int16):
-         don't assert in state change, this should be done by the base
-         GstElement class.
-         various debugging fixes.
-
-2004-07-08  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
-
-       * configure.ac:
-       * gst-libs/gst/play/play.c: (gst_play_pipeline_setup),
-       (gst_play_dispose), (gst_play_set_location),
-       (gst_play_set_data_src), (gst_play_set_video_sink),
-       (gst_play_set_audio_sink), (gst_play_set_visualization),
-       (gst_play_connect_visualization), (gst_play_get_sink_element),
-       (gst_play_get_all_by_interface):
-       * gst-libs/gst/play/play.h:
-         add new method to get elements implementing an interface.
-         add various error logging
-
-2004-07-08  Wim Taymans  <wim@fluendo.com>
-
-       * examples/seeking/seek.c: (make_dv_pipeline), (make_avi_pipeline),
-       (make_mpeg_pipeline), (make_mpegnt_pipeline),
-       (make_playerbin_pipeline), (query_durations_elems),
-       (query_durations_pads), (query_positions_elems),
-       (query_positions_pads), (update_scale), (iterate), (stop_seek),
-       (main):
-       Added playbin seeking example.
-
-2004-07-08  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
-
-       * gst-libs/gst/play/play.c: (gst_play_set_location),
-       (gst_play_set_data_src), (gst_play_set_video_sink),
-       (gst_play_set_audio_sink), (gst_play_set_visualization),
-       (gst_play_connect_visualization), (gst_play_get_framerate):
-         use a macro to look up elements from hash table
-
-2004-07-08  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
-
-       * gst-libs/gst/play/play.c: (gst_play_pipeline_setup),
-       (gst_play_get_length_callback), (gst_play_set_location),
-       (gst_play_seek_to_time), (gst_play_set_data_src),
-       (gst_play_set_video_sink), (gst_play_set_audio_sink),
-       (gst_play_set_visualization), (gst_play_connect_visualization),
-       (gst_play_get_sink_element):
-       - add debugging info
-       - fix looking up sink elements by iterating over complete caps
-       - put everything except for source and autoplugger in a complete bin
-
-2004-07-08  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_drain_audio):
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_flush_one_pad),
-       (gst_alsa_sink_check_event), (gst_alsa_sink_mmap),
-       (gst_alsa_sink_write), (gst_alsa_sink_loop):
-       * ext/alsa/gstalsasink.h:
-       - add debugging info
-       - clean up schizophrenia of data/buffer/event
-       - fix double event unref error
-
-2004-07-08  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/Makefile.am:
-       Add headers to noinst
-
-2004-07-08  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
-
-       * tools/gst-launch-ext-m.m:
-       * tools/gst-launch-ext.1.in:
-         convert to the third millenium
-
-2004-07-07  David Schleef  <ds@schleef.org>
-
-       * sys/dxr3/Makefile.am: noinst_SOURCES should be nodist_SOURCES
-
-2004-07-07  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/Makefile.am:
-       * gst/playback/README:
-       * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
-       (gst_decode_bin_class_init), (gst_decode_bin_factory_filter),
-       (compare_ranks), (print_feature), (gst_decode_bin_init),
-       (gst_decode_bin_dispose), (find_compatibles), (close_pad_link),
-       (try_to_link_1), (new_pad), (close_link), (type_found),
-       (gst_decode_bin_set_property), (gst_decode_bin_get_property),
-       (plugin_init):
-       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type),
-       (gst_play_base_bin_class_init), (gst_play_base_bin_init),
-       (gst_play_base_bin_dispose), (rebuild_pipeline), (queue_overrun),
-       (gen_preroll_element), (no_more_pads), (new_stream),
-       (setup_source), (gst_play_base_bin_set_property),
-       (gst_play_base_bin_get_property), (gst_play_base_bin_change_state),
-       (gst_play_base_bin_add_element),
-       (gst_play_base_bin_remove_element),
-       (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream),
-       (gst_play_base_bin_unlink_stream),
-       (gst_play_base_bin_get_streaminfo):
-       * gst/playback/gstplaybasebin.h:
-       * gst/playback/gstplaybin.c: (gst_play_bin_get_type),
-       (gst_play_bin_class_init), (gst_play_bin_init),
-       (gst_play_bin_dispose), (gst_play_bin_set_property),
-       (gst_play_bin_get_property), (gen_video_element),
-       (gen_audio_element), (setup_sinks), (gst_play_bin_change_state),
-       (gst_play_bin_get_event_masks), (gst_play_bin_send_event),
-       (gst_play_bin_get_formats), (gst_play_bin_convert),
-       (gst_play_bin_get_query_types), (gst_play_bin_query),
-       (plugin_init):
-       * gst/playback/gststreaminfo.c: (gst_stream_type_get_type),
-       (gst_stream_info_get_type), (gst_stream_info_class_init),
-       (gst_stream_info_init), (gst_stream_info_new),
-       (gst_stream_info_dispose), (gst_stream_info_set_property),
-       (gst_stream_info_get_property):
-       * gst/playback/gststreaminfo.h:
-       * gst/playback/test.c: (gen_video_element), (gen_audio_element),
-       (main):
-       * gst/playback/test2.c: (main):
-       * gst/playback/test3.c: (update_scale), (main):
-       More playbin fixes. Added README. Do better element filtering.
-       Added base class to preroll media. Added test apps.
-
-2004-07-07  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
-
-       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_flush_decoder):
-       * ext/mpeg2dec/gstmpeg2dec.h:
-         various debugging improvements.  Reset stream to next picture
-         instead of sequence header, otherwise seeks cannot work.
-
-2004-07-07  Wim Taymans  <wim@fluendo.com>
-
-       * gst/videobox/gstvideobox.c: (gst_video_box_fill_get_type),
-       (gst_video_box_class_init), (gst_video_box_set_property),
-       (gst_video_box_i420), (gst_video_box_ayuv), (gst_video_box_chain):
-       Use pad_alloc where possible.
-
-2004-07-07  Wim Taymans  <wim@fluendo.com>
-
-       * sys/oss/gstosselement.c: (gst_osselement_reset),
-       (gst_osselement_parse_caps):
-       * sys/oss/gstosselement.h:
-       * sys/oss/gstosssrc.c: (gst_osssrc_get):
-       Fix offset on osssrc.
-
-2004-07-07  Wim Taymans  <wim@fluendo.com>
-
-       * ext/theora/theora.c: (plugin_init):
-       * ext/theora/theoradec.c: (theora_dec_from_granulepos),
-       (theora_dec_src_query), (theora_dec_chain):
-       * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
-       (theora_enc_sink_link), (theora_buffer_from_packet),
-       (theora_push_packet), (theora_enc_chain):
-       Fix theora granulepos calculation.
-       Fix overflow in duration/position calculation.
-       Bump rank to PRIMARY for theoradec.
-       Use granulepos of last packet to calculate position.
-       Set keyframe flag on buffers when needed.
-
-2004-07-06  David Schleef  <ds@schleef.org>
-
-       * gst/playback/Makefile.am: 'test' in bin_PROGRAMS?  Are you
-       serious?  (Fixed, obviously.)
-
-2004-07-06  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * po/LINGUAS:
-       * po/cs.po:
-         added Czech translation (Miloslav Trmac)
-
-2004-07-05  Wim Taymans  <wim@fluendo.com>
-
-       * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
-       (gst_decode_bin_class_init), (gst_decode_bin_factory_filter),
-       (compare_ranks), (gst_decode_bin_init), (gst_decode_bin_dispose),
-       (find_compatibles), (close_pad_link), (try_to_link_1), (new_pad),
-       (close_link), (type_found), (gst_decode_bin_set_property),
-       (gst_decode_bin_get_property), (gst_decode_bin_get_event_masks),
-       (gst_decode_bin_send_event), (gst_decode_bin_get_formats),
-       (gst_decode_bin_convert), (gst_decode_bin_get_query_types),
-       (gst_decode_bin_query), (plugin_init):
-       * gst/playback/gstplaybin.c: (gst_play_bin_get_type),
-       (gst_play_bin_class_init), (gst_play_bin_init),
-       (gst_play_bin_dispose), (rebuild_pipeline), (get_audio_element),
-       (get_video_element), (new_pad), (setup_source),
-       (gst_play_bin_set_property), (gst_play_bin_get_property),
-       (gst_play_bin_change_state), (gst_play_bin_add_element),
-       (gst_play_bin_remove_element), (gst_play_bin_get_event_masks),
-       (gst_play_bin_send_event), (gst_play_bin_get_formats),
-       (gst_play_bin_convert), (gst_play_bin_get_query_types),
-       (gst_play_bin_query), (gst_play_bin_get_clock), (plugin_init):
-       * gst/playback/test.c: (main):
-       More fixes, cleaned up playbin, make it use decodebin. Added
-       threaded property to playbin.
-
-2004-07-05  Wim Taymans  <wim@fluendo.com>
-
-       * configure.ac:
-       * gst/playback/Makefile.am:
-       * gst/playback/decodetest.c: (main):
-       * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
-       (gst_decode_bin_class_init), (gst_decode_bin_factory_filter),
-       (compare_ranks), (gst_decode_bin_init), (gst_decode_bin_dispose),
-       (find_compatibles), (close_pad_link), (try_to_link_1), (new_pad),
-       (close_link), (type_found), (gst_decode_bin_set_property),
-       (gst_decode_bin_get_property), (gst_decode_bin_change_state),
-       (gst_decode_bin_get_event_masks), (gst_decode_bin_send_event),
-       (gst_decode_bin_get_formats), (gst_decode_bin_convert),
-       (gst_decode_bin_get_query_types), (gst_decode_bin_query),
-       (plugin_init):
-       * gst/playback/gstplaybin.c: (gst_play_bin_get_type),
-       (gst_play_bin_class_init), (gst_play_bin_init),
-       (gst_play_bin_dispose), (gen_default_output), (rebuild_pipeline),
-       (collect_sink_pads), (find_compatibles), (close_pad_link),
-       (try_to_link_1), (new_pad), (close_link), (type_found),
-       (setup_source), (gst_play_bin_set_property),
-       (gst_play_bin_get_property), (gst_play_bin_factory_filter),
-       (compare_ranks), (gst_play_bin_collect_factories),
-       (gst_play_bin_change_state), (gst_play_bin_add_element),
-       (gst_play_bin_remove_element), (gst_play_bin_get_event_masks),
-       (gst_play_bin_send_event), (gst_play_bin_get_formats),
-       (gst_play_bin_convert), (gst_play_bin_get_query_types),
-       (gst_play_bin_query), (gst_play_bin_get_clock), (plugin_init):
-       * gst/playback/test.c: (main):
-       Added some playback helper elements and some test apps, very alpha
-       still.
-
-2004-07-04  Benjamin Otte  <otte@gnome.org>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_xrun_recovery):
-         only restart audio when we indeed have an xrun to fix repeated
-         xruns. Fix suggested by Giuliano Pochini.
-
-2004-07-03  David Schleef  <ds@schleef.org>
-
-       * ext/alsa/gstalsaplugin.c: (gst_alsa_error_wrapper): Disable
-       call to gst_debug_log() if debugging is disabled (bug #145118)
-
-2004-07-03  Benjamin Otte  <otte@gnome.org>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_xrun_recovery):
-         use our own functions for restarting the alsa device.
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
-         I should apply patches myself - use MIN for the third argument, not
-         the second, this fixes seeking
-
-2004-07-02  David Schleef  <ds@schleef.org>
-
-       * ext/flac/gstflacdec.c: (gst_flacdec_class_init),
-       (gst_flacdec_write):  Actually, GST_PAD_CAPS() has nothing to
-       do with the logic.
-
-2004-07-02  David Schleef  <ds@schleef.org>
-
-       * ext/flac/gstflacdec.c: (gst_flacdec_write):  Set duration on
-       output buffers.  Fix logic mistake.  (bug #144866)
-
-2004-07-02  David Schleef  <ds@schleef.org>
-
-       * gst-libs/gst/xoverlay/Makefile.am: xoverlay no longer depends
-       on X.  (bug #144753)
-
-2004-07-02  David Schleef  <ds@schleef.org>
-
-       * gst/wavenc/gstwavenc.c: (gst_wavenc_setup),
-       (gst_wavenc_stop_file): Switch to GST_WRITE_UINT32_LE macros
-       (bug #144624)
-       * sys/oss/gstosselement.c: (gst_osselement_probe_caps),
-       (gst_osselement_rate_probe_check): Add another workaround for
-       buggy drivers (bug #145336)
-
-2004-07-02  David Schleef  <ds@schleef.org>
-
-       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_handle_client_write):
-       Most systems don't have MSG_NOSIGNAL.
-
-2004-07-02  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * Makefile.am:
-       * gst-libs/gst/colorbalance/Makefile.am:
-       * gst-libs/gst/mixer/Makefile.am:
-       * gst-libs/gst/play/Makefile.am:
-       * gst-libs/gst/tuner/Makefile.am:
-         (hopefully) fix both install and dist and make error message useful.
-         needs testing across automakes.
-
-2004-07-02  Benjamin Otte  <otte@gnome.org>
-
-       * ext/ogg/gstogg.c: (plugin_init):
-         we require bytestream now
-       * ext/ogg/gstoggdemux.c:
-         huge diff to implement chain setup in a fast and generic way. This
-         improves tag reading and startup of huge files (read: Theora videos)
-         quite a bit. It probably contains bugs, too, so please test.
-         Seeking is not improved to the fast method.
-
-2004-06-29  Wim Taymans  <wim@fluendo.com>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
-       * ext/ogg/gstoggmux.c:
-       Fix memleak in oggdemux when running unconnected pads.
-       doc update in mux, start working on keyframe mode.
-
-2004-06-29  Benjamin Otte  <otte@gnome.org>
-
-       * sys/oss/gstosssink.c:
-       * sys/oss/gstosssrc.c:
-         advertise correct template caps - we indeed do non-native endianness
-         and 8bit audio has no endianness
-       * sys/ximage/ximagesink.c: (gst_ximagesink_getcaps):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_getcaps):
-         avoid (wrong) duplications in getcaps function and return
-         template caps
-
-2004-06-29  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gstmultifdsink.c: (gst_recover_policy_get_type),
-       (gst_multifdsink_class_init), (gst_multifdsink_add),
-       (gst_multifdsink_remove), (gst_multifdsink_clear),
-       (gst_multifdsink_client_remove),
-       (gst_multifdsink_handle_client_read),
-       (gst_multifdsink_client_queue_data),
-       (gst_multifdsink_client_queue_caps),
-       (gst_multifdsink_client_queue_buffer),
-       (gst_multifdsink_handle_client_write),
-       (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
-       (gst_multifdsink_handle_clients), (gst_multifdsink_thread),
-       (gst_multifdsink_init_send), (gst_multifdsink_close):
-       Fix wrong GList iteration that could crash the server when
-       more then 2 clients disconnect at the same time. Read all the
-       pending commands in one batch to recover from command storms under
-       very heavy load.
-
-2004-06-28  Wim Taymans  <wim@fluendo.com>
-
-       * gst/videomixer/videomixer.c: (gst_videomixer_pad_get_type),
-       (gst_videomixer_pad_class_init), (gst_videomixer_pad_get_property),
-       (gst_videomixer_pad_set_property),
-       (gst_videomixer_pad_sinkconnect), (gst_videomixer_pad_init),
-       (gst_video_mixer_background_get_type), (gst_videomixer_get_type),
-       (gst_videomixer_class_init), (gst_videomixer_init),
-       (gst_videomixer_request_new_pad), (gst_videomixer_blend_ayuv_i420),
-       (pad_zorder_compare), (gst_videomixer_sort_pads),
-       (gst_videomixer_fill_checker), (gst_videomixer_fill_color),
-       (gst_videomixer_fill_queues), (gst_videomixer_blend_buffers),
-       (gst_videomixer_update_queues), (gst_videomixer_loop),
-       (plugin_init):
-       Avoid divide by zero, choose masterpad as the pad with the highest
-       framerate.
-
-2004-06-27  Julien Moutte  <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_decorate),
-       (gst_ximagesink_xwindow_new):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_decorate),
-       (gst_xvimagesink_xwindow_new): I prefer locking the mutex in the
-       function directly. We might want to call it from somewhere else one day.
-
-2004-06-27  Julien Moutte  <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_decorate),
-       (gst_ximagesink_xwindow_new):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_decorate),
-       (gst_xvimagesink_xwindow_new): Trying to fix the random behaviour of
-       window decorations.
-
-2004-06-27  Wim Taymans  <wim@fluendo.com>
-
-       * ext/dv/gstdvdec.c: (gst_dvdec_class_init), (gst_dvdec_init),
-       (gst_dvdec_video_getcaps), (gst_dvdec_video_link),
-       (gst_dvdec_push), (gst_dvdec_loop), (gst_dvdec_change_state),
-       (gst_dvdec_set_property), (gst_dvdec_get_property):
-       * ext/dv/gstdvdec.h:
-       Implement drop_factor property to lower the framerate with
-       a factor.
-
-2004-06-27  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-libs/gst/colorbalance/Makefile.am:
-       * gst-libs/gst/mixer/Makefile.am:
-       * gst-libs/gst/play/Makefile.am:
-       * gst-libs/gst/tuner/Makefile.am:
-         unbreak Company's fix that didn't install the -enum.h files
-
-2004-06-27  Wim Taymans  <wim@fluendo.com>
-
-       * ext/dv/gstdvdec.c: (gst_dvdec_push), (gst_dvdec_loop),
-       (gst_dvdec_change_state):
-       * ext/dv/gstdvdec.h:
-       Fix timestamp, duration and offset of the buffers.
-
-2004-06-27  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gstmultifdsink.c: (gst_recover_policy_get_type),
-       (gst_multifdsink_class_init), (gst_multifdsink_add),
-       (gst_multifdsink_remove), (gst_multifdsink_clear),
-       (gst_multifdsink_client_remove),
-       (gst_multifdsink_handle_client_read),
-       (gst_multifdsink_client_queue_data),
-       (gst_multifdsink_client_queue_caps),
-       (gst_multifdsink_client_queue_buffer),
-       (gst_multifdsink_handle_client_write),
-       (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
-       (gst_multifdsink_handle_clients), (gst_multifdsink_thread),
-       (gst_multifdsink_init_send), (gst_multifdsink_close):
-       * gst/tcp/gstmultifdsink.h:
-       * gst/tcp/gsttcpserversink.c:
-       (gst_tcpserversink_handle_server_read),
-       (gst_tcpserversink_handle_select), (gst_tcpserversink_close):
-       More multifdsink fixes, more recovery policy fixes.
-       Removed stupid g_print
-
-2004-06-26  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/Makefile.am:
-       * gst/tcp/gstmultifdsink.c: (gst_recover_policy_get_type),
-       (gst_multifdsink_get_type), (gst_multifdsink_base_init),
-       (gst_multifdsink_class_init), (gst_multifdsink_init),
-       (gst_multifdsink_debug_fdset), (gst_multifdsink_client_remove),
-       (gst_multifdsink_handle_client_read),
-       (gst_multifdsink_client_queue_data),
-       (gst_multifdsink_client_queue_caps),
-       (gst_multifdsink_client_queue_buffer),
-       (gst_multifdsink_handle_client_write),
-       (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
-       (gst_multifdsink_handle_clients), (gst_multifdsink_thread),
-       (gst_multifdsink_chain), (gst_multifdsink_set_property),
-       (gst_multifdsink_get_property), (gst_multifdsink_init_send),
-       (gst_multifdsink_close), (gst_multifdsink_change_state):
-       * gst/tcp/gstmultifdsink.h:
-       * gst/tcp/gsttcpplugin.c: (plugin_init):
-       * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_get_type),
-       (gst_tcpserversink_class_init), (gst_tcpserversink_init),
-       (gst_tcpserversink_handle_server_read),
-       (gst_tcpserversink_handle_select),
-       (gst_tcpserversink_set_property), (gst_tcpserversink_get_property),
-       (gst_tcpserversink_init_send), (gst_tcpserversink_close):
-       * gst/tcp/gsttcpserversink.h:
-       Added multifdsink, made tcpserversink a subclass of fdsink, removed
-       one of the locks, added recovery policy to multifdsink.
-
-2004-06-26  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/videorate/gstvideorate.c: (gst_videorate_chain):
-         fix decision for when getting frames with same timestamp
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_class_init), (gst_v4lsrc_init),
-       (gst_v4lsrc_get), (gst_v4lsrc_set_property),
-       (gst_v4lsrc_get_property):
-       * sys/v4l/gstv4lsrc.h:
-         add latency offset property
-
-2004-06-26  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/videorate/gstvideorate.c: (gst_videorate_chain),
-       (plugin_init):
-         fix debugging. add category.
-
-2004-06-25  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/sine/gstsinesrc.c: (gst_sinesrc_get):
-          fix wrong offsets
-
-2004-06-25  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/alsa/gstalsasrc.c: (gst_alsa_src_init),
-       (gst_alsa_src_get_time), (gst_alsa_src_loop),
-       (gst_alsa_src_change_state):
-         return a time that is in sync with the element's processing
-
-2004-06-25  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init),
-       (gst_tcpserversink_init), (gst_tcpserversink_handle_server_read),
-       (gst_tcpserversink_client_remove),
-       (gst_tcpserversink_handle_client_read),
-       (gst_tcpserversink_client_queue_data),
-       (gst_tcpserversink_client_queue_caps),
-       (gst_tcpserversink_client_queue_buffer),
-       (gst_tcpserversink_handle_client_write),
-       (gst_tcpserversink_queue_buffer),
-       (gst_tcpserversink_handle_clients), (gst_tcpserversink_thread),
-       (gst_tcpserversink_chain), (gst_tcpserversink_set_property),
-       (gst_tcpserversink_get_property), (gst_tcpserversink_init_send),
-       (gst_tcpserversink_close):
-       * gst/tcp/gsttcpserversink.h:
-       Serversink rewrite. Really do non blocking writes to clients and
-       maintain an internal queue to handle slower clients while not
-       disturbing fast clients.
-
-2004-06-25  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_get):
-         better debug, don't override OFFSET and OFFSET_END
-
-2004-06-25  Iain <iain@prettypeople.org>
-
-       * gst-libs/gst/media-info/media-info-priv.c (gmi_set_mime): Add
-       name=source for the wavparse pipeline.
-
-2004-06-24  Johan Dahlin  <johan@gnome.org>
-
-       * ext/theora/theoraenc.c (theora_enc_chain): Call
-       gst_pad_try_set_caps instead of gst_pad_set_explicit_caps so the
-       streamheader caps are set correctly.
-
-2004-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/vorbis/vorbisenc.c: (raw_caps_factory),
-       (gst_vorbisenc_setup), (gst_vorbisenc_set_property):
-         respect minimum bitrate; same could be done for max bitrate
-
-2004-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/vorbis/vorbisenc.c: (raw_caps_factory),
-       (gst_vorbisenc_setup):
-         fix sample rate range
-
-2004-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/vorbis/oggvorbisenc.c: (gst_oggvorbisenc_class_init),
-       (gst_oggvorbisenc_setup):
-       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_class_init),
-       (gst_vorbisenc_setup):
-         resolve ambiguities in code and description
-
-2004-06-24  Wim Taymans  <wim@fluendo.com>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_start), (gst_alsa_xrun_recovery):
-       * ext/alsa/gstalsa.h:
-       * ext/alsa/gstalsasrc.c: (gst_alsa_src_init),
-       (gst_alsa_src_update_avail), (gst_alsa_src_loop):
-       Use alsa trigger_tstamp to get the timestamp of the first
-       sample in the buffer for more precise sync. Some cleanups.
-
-2004-06-24  Wim Taymans  <wim@fluendo.com>
-
-       * gst/audiorate/gstaudiorate.c: (gst_audiorate_link),
-       (gst_audiorate_init), (gst_audiorate_chain),
-       (gst_audiorate_set_property), (gst_audiorate_get_property):
-       * gst/videorate/gstvideorate.c: (gst_videorate_class_init),
-       (gst_videorate_chain):
-       Added some logging, fixed an overflow bug in videorate.
-
-2004-06-24  Benjamin Otte  <otte@gnome.org>
-
-       * ext/kio/Makefile.am:
-         fix for builddir != srcdir and distcheck
-
-2004-06-24  Benjamin Otte  <otte@gnome.org>
-
-       * gst-libs/gst/colorbalance/Makefile.am:
-       * gst-libs/gst/mixer/Makefile.am:
-       * gst-libs/gst/play/Makefile.am:
-       * gst-libs/gst/tuner/Makefile.am:
-       * gst/tcp/Makefile.am:
-       * sys/dxr3/Makefile.am:
-         don't include -enumtypes.[ch] or -marshal.[ch] files in the disted
-         tarball.
-         Also add all *.list files that were missing.
-       * Makefile.am:
-         add a distcheck hook to ensure the above doesn't happen again.
-
-2004-06-23  David I. Lehn  <dlehn@users.sourceforge.net>
-
-       * ext/Makefile.am: s/DTS_DIR=dvdread/DTS_DIR=dts/
-
-2004-06-23  Colin Walters  <walters@redhat.com>
-
-       * m4/Makefile.am: Distribute gst-fionread.m4.
-
-2004-06-23  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac: back to dev
-
-2004-06-23  Wim Taymans  <wim@fluendo.com>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_change_state), (gst_alsa_start),
-       (gst_alsa_xrun_recovery):
-       * ext/alsa/gstalsa.h:
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event),
-       (gst_alsa_sink_loop), (gst_alsa_sink_get_time):
-       * ext/alsa/gstalsasrc.c: (gst_alsa_src_init),
-       (gst_alsa_src_get_time), (gst_alsa_src_update_avail),
-       (gst_alsa_src_loop):
-       Add clock to alsasrc. Take new capture timestamp when
-       restarting after an overrun. Split up some functions between
-       alsasrc and alsasink.
-
-=== release 0.8.2 ===
-
-2004-06-23  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_init), (gst_alsa_dispose),
-       (gst_alsa_change_state), (gst_alsa_update_avail),
-       (gst_alsa_xrun_recovery):
-       * ext/alsa/gstalsa.h:
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
-         merge back changes from release
-
-2004-06-23  Wim Taymans  <wim@fluendo.com>
-
-       * gst/audiorate/gstaudiorate.c: (gst_audiorate_class_init),
-       (gst_audiorate_init), (gst_audiorate_chain),
-       (gst_audiorate_set_property), (gst_audiorate_get_property):
-       Implement sample dropping and notify
-
-2004-06-22  Wim Taymans  <wim@fluendo.com>
-
-       * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
-       (theora_enc_sink_link), (theora_buffer_from_packet),
-       (theora_push_packet), (theora_enc_chain):
-       Some cleanups, make sure the timestamps are correct.
-
-2004-06-22  Wim Taymans  <wim@fluendo.com>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_get_time), (gst_alsa_clock_update),
-       (gst_alsa_change_state), (gst_alsa_update_avail),
-       (gst_alsa_xrun_recovery):
-       * ext/alsa/gstalsa.h:
-       * ext/alsa/gstalsasrc.c: (gst_alsa_src_loop):
-       Cleanups, take queued samples into account when reporting
-       the time.
-
-2004-06-22  Wim Taymans  <wim@fluendo.com>
-
-       * gst/videorate/gstvideorate.c: (gst_videorate_class_init),
-       (gst_videorate_init):
-       Initialize the property as well.
-
-2004-06-22  Wim Taymans  <wim@fluendo.com>
-
-       * gst/videorate/gstvideorate.c: (gst_videorate_class_init),
-       (gst_videorate_init), (gst_videorate_chain),
-       (gst_videorate_set_property), (gst_videorate_get_property):
-       Add property to make videorate silent.
-       Add property to prefer new frames over old ones.
-
-2004-06-22  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * sys/osxvideo/Makefile.am:
-        Workaround so that the osxvideo .so file gets linked with the
-        Cocoa, OpenGL and QuickTime frameworks
-
-2004-06-22  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * sys/osxaudio/Makefile.am:
-        Workaround so that the osxaudio .so file gets linked with the
-        CoreAudio framework
-
-2004-06-22  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * configure.ac:
-       Whoops, my fault...fixed build issues
-
-2004-06-22  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * configure.ac:
-        Add objective-c support if running in Darwin/Mac OS X
-       * sys/Makefile.am:
-        * sys/osxvideo:
-        * sys/osxvideo/Makefile.am:
-        * sys/osxvideo/osxvideosink.h:
-        * sys/osxvideo/osxvideosink.m:
-        * sys/osxvideo/cocoawindow.h:
-        * sys/osxvideo/cocoawindow.m:
-        Add osxvideosink, a cocoa-based osx video sink
-
-
-2004-06-19  Jan Schmidt  <thaytan@mad.scientist.com>
-       * ext/dvdnav/gst-dvd:
-       Grab the gconf key from the right spot
-       * gst/debug/gstnavseek.c: (gst_navseek_init),
-       (gst_navseek_segseek), (gst_navseek_handle_src_event),
-       (gst_navseek_chain):
-       * gst/debug/gstnavseek.h:
-         Add 's', 'e' and 'l' keypresses to navseek to define the start,end
-         and loop parameters of a segment seek.
-       * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_init),
-       (gst_videotestsrc_get_event_masks),
-       (gst_videotestsrc_handle_src_event), (gst_videotestsrc_get):
-       * gst/videotestsrc/gstvideotestsrc.h:
-         Add seeking support to videotestsrc
-         Initialise the timestamp_offset variable.
-
-2004-06-18  Wim Taymans  <wim@fluendo.com>
-
-       * ext/sidplay/gstsiddec.cc:
-       Fix negotiation and set correct end offset.
-
-2004-06-18  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac: branch and prerelease
-
-2004-06-17  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_init),
-       (gst_tcpclientsrc_getcaps), (gst_tcpclientsrc_get),
-       (gst_tcpclientsrc_init_receive):
-       * gst/tcp/gsttcpclientsrc.h:
-          read caps when connecting to server for GDP so we set them correctly
-
-2004-06-17  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/videorate/gstvideorate.c: (gst_videorate_chain):
-         notify drops and duplicates
-       * gst/videoscale/videoscale.c: (videoscale_get_structure):
-         no good reason to limit ourselves to 100x100
-
-2004-06-17  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_class_init), (gst_v4lsrc_init),
-       (gst_v4lsrc_open), (gst_v4lsrc_src_link), (gst_v4lsrc_getcaps),
-       (gst_v4lsrc_get), (gst_v4lsrc_set_property),
-       (gst_v4lsrc_get_property):
-       * sys/v4l/gstv4lsrc.h:
-       * sys/v4l/v4l_calls.c: (gst_v4l_set_window_properties),
-       (gst_v4l_open), (gst_v4l_get_picture), (gst_v4l_get_audio),
-       (gst_v4l_set_audio):
-       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_grab_frame),
-       (gst_v4lsrc_try_capture):
-       * sys/v4l/v4lsrc_calls.h:
-         change try_palette to more general try_capture
-         add autoprobe option so we can turn off autoprobing
-         various fixes
-
-2004-06-17  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-         add videorate
-       * sys/ximage/ximagesink.c: (gst_ximagesink_finalize),
-       (gst_ximagesink_class_init):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_finalize),
-       (gst_xvimagesink_class_init):
-          run them as finalize, not dispose, since dispose can be invoked
-          multiple times
-
-2004-06-17  Wim Taymans  <wim@fluendo.com>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_init), (gst_alsa_dispose),
-       (gst_alsa_get_time), (gst_alsa_xrun_recovery):
-       * ext/alsa/gstalsa.h:
-       * ext/alsa/gstalsaclock.c: (gst_alsa_clock_get_type):
-       * ext/alsa/gstalsasrc.c: (gst_alsa_src_init), (gst_alsa_src_loop),
-       (gst_alsa_src_change_state):
-       * ext/alsa/gstalsasrc.h:
-       Make the xrun code timestamp and offset the buffers correctly.
-       moved the clock to the base class, use alsa methods to get time.
-       Do correct timestamping on outgoing buffers.
-
-2004-06-17  Wim Taymans  <wim@fluendo.com>
-
-       * gst/audiorate/Makefile.am:
-       * gst/audiorate/gstaudiorate.c: (gst_audiorate_get_type),
-       (gst_audiorate_base_init), (gst_audiorate_class_init),
-       (gst_audiorate_link), (gst_audiorate_init), (gst_audiorate_chain),
-       (gst_audiorate_set_property), (gst_audiorate_get_property),
-       (gst_audiorate_change_state), (plugin_init):
-       Added an audiorate converter that fills in gaps.
-
-2004-06-17  Johan Dahlin  <johan@gnome.org>
-
-       * ext/tcp/*: Revert Zaheer changes, to make things actually work again.
-
-2004-06-16  Wim Taymans  <wim@fluendo.com>
-
-       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get):
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_sync_mode_get_type),
-       (gst_v4lsrc_class_init), (gst_v4lsrc_init), (gst_v4lsrc_get_fps),
-       (gst_v4lsrc_get), (gst_v4lsrc_set_property),
-       (gst_v4lsrc_get_property):
-       * sys/v4l/gstv4lsrc.h:
-       Added a copy mode to v4lsrc where it will output a copied version
-       of its internal hardware buffer.
-       Fix the wrong FLAG_SET usage. The flags are integers, not bits, you
-       can't | them.
-
-2004-06-16  Wim Taymans  <wim@fluendo.com>
-
-       * sys/oss/gstosssrc.c: (gst_osssrc_get):
-       Timestamp fixes.
-
-2004-06-16  Wim Taymans  <wim@fluendo.com>
-
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_sync_mode_get_type),
-       (gst_v4lsrc_class_init), (gst_v4lsrc_init), (gst_v4lsrc_get_fps),
-       (gst_v4lsrc_get), (gst_v4lsrc_set_property),
-       (gst_v4lsrc_get_property):
-       * sys/v4l/gstv4lsrc.h:
-       * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay):
-       Added a sync mode enum property to control v4lsrc timestamp method
-       Removed the use-fixed-fps property and moved functionality in
-       the enum.
-       Don't error on an error value from v4l-conf, it might not always
-       be a real error.
-
-2004-06-16  Wim Taymans  <wim@fluendo.com>
-
-       * gst/videorate/Makefile.am:
-       * gst/videorate/gstvideorate.c: (gst_videorate_get_type),
-       (gst_videorate_base_init), (gst_videorate_class_init),
-       (gst_videorate_getcaps), (gst_videorate_link),
-       (gst_videorate_init), (gst_videorate_chain),
-       (gst_videorate_set_property), (gst_videorate_get_property),
-       (gst_videorate_change_state), (plugin_init):
-       Added a video timestamp corrector.
-
-2004-06-15  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       fixed a potential leak with previous commit
-
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head):
-
-2004-06-15  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head):
-       Added missing refcount, fixes bug #144425
-       Cheers Tim for finding the bug
-
-2004-06-15  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/v4l/gstv4l.c: (plugin_init):
-       * sys/v4l/gstv4lcolorbalance.c:
-       * sys/v4l/gstv4lcolorbalance.h:
-       * sys/v4l/gstv4lelement.c:
-       * sys/v4l/gstv4lelement.h:
-       * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_class_init):
-       * sys/v4l/gstv4lmjpegsink.h:
-       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_class_init):
-       * sys/v4l/gstv4lmjpegsrc.h:
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get_fps_list),
-       (gst_v4lsrc_get_fps), (gst_v4lsrc_srcconnect),
-       (gst_v4lsrc_getcaps), (gst_v4lsrc_get):
-       * sys/v4l/gstv4lsrc.h:
-       * sys/v4l/gstv4ltuner.c:
-       * sys/v4l/gstv4ltuner.h:
-       * sys/v4l/gstv4lxoverlay.c:
-       * sys/v4l/gstv4lxoverlay.h:
-       * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay),
-       (gst_v4l_set_window), (gst_v4l_enable_overlay):
-       * sys/v4l/v4l_calls.c: (gst_v4l_set_window_properties),
-       (gst_v4l_open), (gst_v4l_get_picture), (gst_v4l_get_audio),
-       (gst_v4l_set_audio):
-       * sys/v4l/v4l_calls.h:
-       * sys/v4l/v4lmjpegsink_calls.c: (gst_v4lmjpegsink_sync_thread),
-       (gst_v4lmjpegsink_queue_frame), (gst_v4lmjpegsink_sync_frame),
-       (gst_v4lmjpegsink_set_buffer), (gst_v4lmjpegsink_set_playback),
-       (gst_v4lmjpegsink_playback_init),
-       (gst_v4lmjpegsink_playback_start), (gst_v4lmjpegsink_get_buffer),
-       (gst_v4lmjpegsink_play_frame), (gst_v4lmjpegsink_wait_frame),
-       (gst_v4lmjpegsink_playback_stop),
-       (gst_v4lmjpegsink_playback_deinit):
-       * sys/v4l/v4lmjpegsink_calls.h:
-       * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_queue_frame),
-       (gst_v4lmjpegsrc_sync_next_frame), (gst_v4lmjpegsrc_set_buffer),
-       (gst_v4lmjpegsrc_set_capture), (gst_v4lmjpegsrc_set_capture_m),
-       (gst_v4lmjpegsrc_capture_init), (gst_v4lmjpegsrc_capture_start),
-       (gst_v4lmjpegsrc_grab_frame), (gst_v4lmjpegsrc_requeue_frame),
-       (gst_v4lmjpegsrc_capture_stop), (gst_v4lmjpegsrc_capture_deinit):
-       * sys/v4l/v4lmjpegsrc_calls.h:
-       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_queue_frame),
-       (gst_v4lsrc_sync_frame), (gst_v4lsrc_set_capture),
-       (gst_v4lsrc_capture_init), (gst_v4lsrc_capture_start),
-       (gst_v4lsrc_grab_frame), (gst_v4lsrc_requeue_frame),
-       (gst_v4lsrc_capture_stop), (gst_v4lsrc_capture_deinit),
-       (gst_v4lsrc_try_palette):
-       * sys/v4l/v4lsrc_calls.h:
-         bunch of paranoia cleanups
-
-2004-06-14  David Schleef  <ds@schleef.org>
-
-       * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_init),
-       (cdparanoia_get), (cdparanoia_open), (cdparanoia_change_state):
-       Send discont events and change timestamps appropriately when
-       we get a seek event.  (bug #144240)
-       * ext/cdparanoia/gstcdparanoia.h:
-
-2004-06-14  Benjamin Otte  <otte@gnome.org>
-
-       * ext/alsa/gstalsa.c: Use snd_pcm_hw_params_set_rate _near instead of
-         snd_pcm_hw_params_set_rate  since the latter fails for no good
-         reason on some setups.
-
-2004-06-14  David Schleef  <ds@schleef.org>
-
-       * gst/volume/demo.c: (value_changed_callback): exp10() is not
-       standard.  Thank you for playing.
-
-2004-06-14  Wim Taymans  <wim@fluendo.com>
-
-       * gst/ffmpegcolorspace/imgconvert.c: (img_convert):
-       Patch 1.3 broke the ordering of the colorspace info and
-       made the plugin basically work by coincidence, reordered
-       the info.
-
-2004-06-14  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/lame/gstlame.c:
-       * ext/mad/gstmad.c:
-         sync caps.  Make sure mad can only output a list of rates, not
-         a full range.  In the future, have three caps lists for each of the
-         mpeg versions.  Change mpegversion to a double as well.
-
-2004-06-14  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/volume/.cvsignore:
-       * gst/volume/Makefile.am:
-       * gst/volume/demo.c: (value_changed_callback), (idler),
-       (setup_gui), (main):
-         added small demo app
-
-2004-06-13  Jan Schmidt  <thaytan@mad.scientist.com>
-       * ext/esd/esdsink.c: (gst_esdsink_change_state):
-       * ext/esd/esdsink.h:
-       Close the esd connection on pause, because esd will just wait -
-       blocking all other esd clients indefinitely.
-
-2004-06-12  Christophe Fergeau  <teuf@gnome.org>
-
-       * gst/tags/gstvorbistag.c: replaced a g_warning which I added in my
-         previous commit with GST_DEBUG
-
-2004-06-12  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-         add a header check for a dvdread header in dvdnav.  Fixes #133002
-
-2004-06-12  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * gst/tcp/gsttcpclientsink.c: (gst_tcpclientsink_init_send):
-       * gst/tcp/gsttcpclientsink.h:
-       * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_init_receive):
-       * gst/tcp/gsttcpclientsrc.h:
-       * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_init),
-       (gst_tcpserversink_handle_server_read),
-       (gst_tcpserversink_init_send):
-       * gst/tcp/gsttcpserversink.h:
-       * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_init_receive):
-       * gst/tcp/gsttcpserversrc.h:
-       Modified the tcp plugins so they are portable (IPv4,IPv6, any future
-        version of IP)
-
-2004-06-12  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * configure.ac:
-       Added ogg library so that OSX detects libtheora properly
-
-2004-06-11  Wim Taymans  <wim@fluendo.com>
-
-       * ext/theora/theoradec.c: (theora_dec_chain),
-       (theora_dec_change_state):
-       Don't try to decode frames before we received a keyframe.
-
-2004-06-11  Wim Taymans  <wim@fluendo.com>
-
-       * ext/ogg/gstoggmux.c: (gst_ogg_mux_class_init),
-       (gst_ogg_mux_init), (gst_ogg_mux_next_buffer),
-       (gst_ogg_mux_get_headers), (gst_ogg_mux_set_header_on_caps),
-       (gst_ogg_mux_send_headers), (gst_ogg_mux_loop),
-       (gst_ogg_mux_get_property), (gst_ogg_mux_set_property):
-       Added property to set the maximum delay of a page.
-
-2004-06-10  Wim Taymans  <wim@fluendo.com>
-
-       * ext/ogg/gstoggmux.c: (gst_ogg_mux_class_init),
-       (gst_ogg_mux_init), (gst_ogg_mux_next_buffer),
-       (gst_ogg_mux_get_headers), (gst_ogg_mux_set_header_on_caps),
-       (gst_ogg_mux_send_headers), (gst_ogg_mux_loop),
-       (gst_ogg_mux_get_property), (gst_ogg_mux_set_property):
-       Added max-delay property to control the maximum amount
-       of data to put in one page.
-
-2004-06-10  Wim Taymans  <wim@fluendo.com>
-
-       * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
-       (gst_theora_enc_init), (theora_enc_sink_link),
-       (theora_buffer_from_packet), (theora_enc_set_property),
-       (theora_enc_get_property):
-       Set duration on encoded buffer, added some more properties
-
-2004-06-10  Wim Taymans  <wim@fluendo.com>
-
-       * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
-       (gst_ogg_mux_get_headers), (gst_ogg_mux_set_header_on_caps),
-       (gst_ogg_mux_send_headers), (gst_ogg_mux_loop):
-       * ext/theora/theoraenc.c: (theora_enc_chain):
-       Fix refcounting bugs
-
-2004-06-10  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_init),
-       (gst_asf_demux_loop), (gst_asf_demux_process_file),
-       (gst_asf_demux_process_data), (gst_asf_demux_handle_data),
-       (gst_asf_demux_process_object), (gst_asf_demux_get_stream),
-       (gst_asf_demux_process_chunk), (gst_asf_demux_handle_sink_event),
-       (gst_asf_demux_handle_src_event), (gst_asf_demux_handle_src_query),
-       (gst_asf_demux_change_state):
-       * gst/asfdemux/gstasfdemux.h:
-         You know Chimaira? "I - HATE - EVERYTHING". Yeah, that's what this
-         feels like. I think we should set a new requirement for demuxers
-         from now on to implement sane loop functions, data loops, query
-         and seek functions before first commit into CVS. And this commit
-         fixes all of the above.
-
-2004-06-10  Christophe Fergeau  <teuf@gnome.org>
-
-       * gst/tags/gstvorbistag.c: (gst_vorbis_tag_add): make sure parsed
-         vorbis comments are properly encoded in UTF-8 before adding them
-         to a GstTagList
-
-2004-06-09  Benjamin Otte  <otte@gnome.org>
-
-       * ext/alsa/gstalsa.c: (add_channels):
-         handle min <= max correctly
-       * ext/alsa/gstalsa.c: (gst_alsa_fixate_to_mimetype),
-       (gst_alsa_fixate_field_nearest_int), (gst_alsa_fixate):
-         add fixation functions so we fixate correctly. No preferring of alaw
-         anymore because it's the first structure.
-       * ext/alsa/gstalsa.h:
-       * ext/alsa/gstalsa.c: (gst_alsa_sw_params_dump),
-       (gst_alsa_hw_params_dump):
-         add functions to ease debugging in alsalib
-       * ext/alsa/gstalsa.c: (gst_alsa_probe_hw_params),
-       (gst_alsa_set_hw_params), (gst_alsa_set_sw_params),
-       (gst_alsa_start_audio):
-         only specify hw params if we really setup a format (fixes #134007 -
-         or at least works around it)
-
-2004-06-09  Wim Taymans  <wim@fluendo.com>
-
-       * ext/ogg/gstoggmux.c: (gst_ogg_mux_init),
-       (gst_ogg_mux_next_buffer), (gst_ogg_mux_buffer_from_page),
-       (gst_ogg_mux_push_page), (gst_ogg_mux_get_headers),
-       (gst_ogg_mux_set_header_on_caps), (gst_ogg_mux_send_headers),
-       (gst_ogg_mux_loop):
-       Use stream caps to setup the initial pages in the ogg stream.
-       Correctly set the streamheader caps on the srcpad.
-
-2004-06-09  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get_fps_list),
-       (gst_v4lsrc_get_fps), (gst_v4lsrc_srcconnect),
-       (gst_v4lsrc_getcaps):
-       * sys/v4l/v4l_calls.c: (gst_v4l_set_window_properties),
-       (gst_v4l_get_picture), (gst_v4l_get_audio), (gst_v4l_set_audio):
-         add querying of fps lists for webcams.  Negotiating to a framerate
-         now works.
-
-2004-06-08  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/theora/theoraenc.c: (theora_buffer_from_packet),
-       (theora_push_buffer), (theora_push_packet),
-       (theora_set_header_on_caps), (theora_enc_chain):
-         mark buffers and put on streamheader, raw theora streaming
-         now works too, whee
-
-2004-06-08  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/tcp/gsttcp.c: (gst_tcp_gdp_read_header),
-       (gst_tcp_gdp_read_caps):
-          do a looping read for caps and GDP headers too
-
-2004-06-08  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_get):
-       * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_get):
-          return EOS instead of NULL in _get
-
-2004-06-08  Wim Taymans  <wim@fluendo.com>
-
-       * gst/tcp/gsttcp.c: (gst_tcp_gdp_read_header),
-       (gst_tcp_gdp_read_caps), (gst_tcp_gdp_write_header),
-       (gst_tcp_gdp_write_caps):
-       * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_get):
-       * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_gdp_read_caps),
-       (gst_tcpserversrc_gdp_read_header), (gst_tcpserversrc_get):
-       Memory leak fixes
-
-2004-06-08  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/vorbis/Makefile.am:
-       * ext/vorbis/vorbis.c: (plugin_init):
-       * ext/vorbis/vorbisparse.c: (gst_vorbis_parse_base_init),
-       (gst_vorbis_parse_class_init), (gst_vorbis_parse_init),
-       (vorbis_parse_set_header_on_caps), (vorbis_parse_chain),
-       (vorbis_parse_change_state):
-       * ext/vorbis/vorbisparse.h:
-          adding a vorbisparse element that marks the buffers, streaming
-          raw vorbis using GDP now works, whee
-
-2004-06-08  Wim Taymans  <wim@fluendo.com>
-
-       * ext/jpeg/Makefile.am:
-       * ext/jpeg/README:
-       * ext/jpeg/gstjpeg.c: (plugin_init):
-       * ext/jpeg/gstsmokedec.c: (gst_smokedec_get_type),
-       (gst_smokedec_base_init), (gst_smokedec_class_init),
-       (gst_smokedec_init), (gst_smokedec_link), (gst_smokedec_chain):
-       * ext/jpeg/gstsmokedec.h:
-       * ext/jpeg/gstsmokeenc.c: (gst_smokeenc_get_type),
-       (gst_smokeenc_base_init), (gst_smokeenc_class_init),
-       (gst_smokeenc_init), (gst_smokeenc_getcaps), (gst_smokeenc_link),
-       (gst_smokeenc_resync), (gst_smokeenc_chain),
-       (gst_smokeenc_set_property), (gst_smokeenc_get_property):
-       * ext/jpeg/gstsmokeenc.h:
-       * ext/jpeg/smokecodec.c: (smokecodec_init_destination),
-       (smokecodec_flush_destination), (smokecodec_term_destination),
-       (smokecodec_init_source), (smokecodec_fill_input_buffer),
-       (smokecodec_skip_input_data), (smokecodec_resync_to_restart),
-       (smokecodec_term_source), (smokecodec_encode_new),
-       (smokecodec_decode_new), (smokecodec_info_free),
-       (smokecodec_set_quality), (smokecodec_get_quality),
-       (smokecodec_set_threshold), (smokecodec_get_threshold),
-       (smokecodec_set_bitrate), (smokecodec_get_bitrate),
-       (find_best_size), (abs_diff), (put), (smokecodec_encode),
-       (smokecodec_parse_header), (smokecodec_decode):
-       * ext/jpeg/smokecodec.h:
-       Added a new simple jpeg based codec
-
-2004-06-08  Wim Taymans  <wim@fluendo.com>
-
-       * gst/multipart/multipartmux.c: (gst_multipart_mux_class_init),
-       (gst_multipart_mux_loop):
-       Fix memory leak
-
-2004-06-08  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_get):
-       * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_client_remove),
-       (gst_tcpserversink_handle_client_read), (gst_tcp_buffer_write),
-       (gst_tcpserversink_handle_client_write), (gst_tcpserversink_chain),
-       (gst_tcpserversink_init_send), (gst_tcpserversink_close):
-       * gst/tcp/gsttcpserversink.h:
-          take streamheader into account
-
-2004-06-08  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/level/Makefile.am:
-       * gst/level/gstlevel.c: (gst_level_class_init):
-         clean up marshal generation
-
-2004-06-08  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/tcp/Makefile.am:
-       * gst/tcp/gsttcpclientsink.c: (gst_tcpclientsink_get_type),
-       (gst_tcpclientsink_class_init), (gst_tcpclientsink_init),
-       (gst_tcpclientsink_set_property), (gst_tcpclientsink_get_property):
-       * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_class_init),
-       (gst_tcpclientsrc_init), (gst_tcpclientsrc_set_property),
-       (gst_tcpclientsrc_get_property):
-       * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init),
-       (gst_tcpserversink_init), (gst_tcpserversink_handle_server_read),
-       (gst_tcpserversink_handle_client_read),
-       (gst_tcpserversink_handle_client_write),
-       (gst_tcpserversink_set_property), (gst_tcpserversink_get_property):
-       * gst/tcp/gsttcpserversink.h:
-         add signals client-added and client-removed
-       * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_class_init),
-       (gst_tcpserversrc_init), (gst_tcpserversrc_set_property),
-       (gst_tcpserversrc_get_property):
-       uniformized, change default protocol to NONE
-       * gst/tcp/gsttcp-marshal.list: added
-2004-06-07  Benjamin Otte  <otte@gnome.org>
-
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
-         handle discont events if they happen before caps nego
-
-2004-06-07  Wim Taymans  <wim@fluendo.com>
-
-       * gst/multipart/multipartdemux.c: (gst_multipart_demux_base_init),
-       (gst_multipart_find_pad_by_mime), (gst_multipart_demux_chain),
-       (gst_multipart_demux_plugin_init):
-       * gst/multipart/multipartmux.c: (gst_multipart_mux_class_init),
-       (gst_multipart_mux_init), (gst_multipart_mux_loop),
-       (gst_multipart_mux_change_state):
-       Small updates, fix a memleak
-
-2004-06-07  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
-
-       * configure.ac: OSS portability
-       * ext/arts/gst_arts.c: idem
-       * sys/oss/gstosselement.c: idem
-       * sys/oss/gstossmixer.c: idem
-       * sys/oss/gstosssink.c: idem
-       * sys/oss/gstosssrc.c: idem
-       * sys/oss/oss_probe.c: idem
-         - check for soundcard.h in different places for some BSD
-
-2004-06-07  Jan Schmidt <thaytan@mad.scientist.com>
-
-       * AUTHORS:
-       Add me to the authors file
-       * configure.ac:
-       Increase the libdv requirement to >= version 0.100
-       * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_src_convert),
-       (gst_dvdec_src_query), (gst_dvdec_handle_sink_event),
-       (gst_dvdec_push), (gst_dvdec_loop), (gst_dvdec_change_state):
-       * ext/dv/gstdvdec.h:
-       Add support for the new_media flag when sending DISCONT events
-       Make the querying work when video pad is not linked
-
-2004-06-07  Tim-Philipp Müller  <t.i.m@zen.co.uk>
-
-       reviewed by Benjamin Otte  <otte@gnome.org>
-
-       * gst/mixmatrix/mixmatrix.c: (gst_mixmatrix_init):
-         create a NULL-initialized array of pads, so we don't think they
-         exist already. (fixes #143130)
-
-2004-06-07  Benjamin Otte  <otte@gnome.org>
-
-       * gst/mixmatrix/mixmatrix.c: (gst_mixmatrix_init),
-       (mixmatrix_resize), (gst_mixmatrix_set_all_caps),
-       (gst_mixmatrix_request_new_pad), (gst_mixmatrix_loop):
-         don't use // coments
-
-2004-06-07  Benjamin Otte  <otte@gnome.org>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_samples_to_timestamp):
-         cast to GstClockTime to get higher granularity
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
-         use gst_element_set_time_delay to get the exact time
-       * ext/mad/gstmad.c: (gst_mad_chain):
-         use the negotiated rate instead of the current frame's rate which
-         might be wrong because of bit errors. This avoids emitting totally
-         bogus timestamps and screwing sync.
-       (fixes #143454)
-
-2004-06-07  Tim-Philipp Müller  <t.i.m@zen.co.uk>
-
-       reviewed by Benjamin Otte  <otte@gnome.org>
-
-       * gst/adder/gstadder.c: (gst_adder_loop):
-         properly error out when no negotiation has happened yet. (fixes
-         #143032)
-
-2004-06-06  Benjamin Otte  <otte@gnome.org>
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event):
-         forward correctly transformed offset in discont events. Based on
-         patch by Arwed v. Merkatz. (fixes #142851)
-
-2004-06-06  David Schleef  <ds@schleef.org>
-
-       * gst/ffmpegcolorspace/gstffmpegcodecmap.c: that's
-       G_HAVE_GNUC_VARARGS, not G_HAVE_GNU_VARARGS.  Should fix compile
-       problems on several systems.
-
-2004-06-06  Benjamin Otte  <otte@gnome.org>
-
-       * ext/vorbis/vorbisdec.c: (gst_vorbis_dec_init):
-         use explicit caps on the srcpad
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
-         properly error out if caps couldn't be set (fixes #142764)
-
-2004-06-06  Benjamin Otte  <otte@gnome.org>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_probe_hw_params),
-       (gst_alsa_set_hw_params), (gst_alsa_set_sw_params),
-       (gst_alsa_start_audio):
-         - don't call set_periods_integer anymore, it breaks the
-         configuration randomly
-         - call snd_pcm_hw_params_set_access directly instead of using masks
-         - don't fail if the sw_params can't be set, just use the default
-         params and hope it works. Alsalib has weird issues when you touch
-         sw_params and does no proper error reporting about what failed.
-       * ext/alsa/gstalsa.c: (gst_alsa_open_audio),
-       (gst_alsa_close_audio):
-         make our alsa debugging go via gst debugging and not conditionally
-         defined
-       * ext/alsa/gstalsa.h:
-         add ALSA_DEBUG_FLUSH macro
-       * ext/alsa/gstalsaplugin.c: (gst_alsa_error_wrapper),
-       (plugin_init):
-         wrap alsa errors to be printed via the gst debugging system and not
-         spammed to stderr
-
-2004-06-04  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_init),
-       (gst_qtdemux_handle_src_query), (gst_qtdemux_handle_src_event),
-       (gst_qtdemux_handle_sink_event), (gst_qtdemux_change_state),
-       (gst_qtdemux_loop_header), (qtdemux_dump_mvhd),
-       (qtdemux_parse_trak):
-       * gst/qtdemux/qtdemux.h:
-         Bitch. Also known as seeking, querying & co.
-       * sys/oss/gstosssink.c: (gst_osssink_init), (gst_osssink_chain),
-       (gst_osssink_change_state):
-       * sys/oss/gstosssink.h:
-         Resyncing is for weenies, this hack is no longer needed and was
-         broken anyway (since it - unintendedly - always leaves resync to
-         TRUE).
-
-2004-06-05  Andrew Turner <zxombie@hotpop.com>
-
-       * gst/tcp/gsttcp.c: portability (Solaris 10/FreeBSD)
-       * gst/tcp/gsttcpclientsrc.h: idem
-         - define MSG_NOSIGNAL if not done
-         - include unistd.h for off_t
-          (fixes #143749)
-
-2004-06-05  Benjamin Otte  <otte@gnome.org>
-
-       * configure.ac:
-       * ext/kio/Makefile.am:
-         check for qt's moc preprocessor explicitly and use it
-
-2004-06-03  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
-
-       * gst/tcp/gsttcp.c: (gst_tcp_socket_write):
-         don't get a signal for EPIPE on socket writes
-         (somebody check if this works on other platforms)
-
-2004-06-02  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/alsa/gstalsaclock.c: (gst_alsa_clock_get_type):
-       * ext/alsa/gstalsasrc.c: (gst_alsa_src_loop):
-          check error condition on available samples correctly
-
-2004-06-02  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/alsa/gstalsasrc.c: (gst_alsa_src_get_time):
-          avoid a segfault
-       * gst/tcp/gsttcp.c: (gst_tcp_socket_write), (gst_tcp_socket_read),
-       (gst_tcp_gdp_read_header), (gst_tcp_gdp_read_caps):
-       * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_gdp_read_caps),
-       (gst_tcpserversrc_gdp_read_header):
-         use ssize_t over size_t since the former is signed and thus the
-         check for error codes can work
-
-2004-06-02  Wim Taymans  <wim@fluendo.com>
-
-       reviewed by: Johan
-
-       * gst/multipart/multipartmux.c: (gst_multipart_mux_class_init),
-       (gst_multipart_mux_loop):
-       Oops
-
-2004-06-02  Wim Taymans  <wim@fluendo.com>
-
-       * gst/multipart/multipartmux.c: (gst_multipart_mux_class_init),
-       (gst_multipart_mux_init), (gst_multipart_mux_loop),
-       (gst_multipart_mux_get_property), (gst_multipart_mux_set_property),
-       (gst_multipart_mux_change_state):
-       Added configurable boundary specifier, added the value as a
-       caps field as well.
-
-2004-06-02  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * gst/tcp/gsttcp.c:
-       * gst/tcp/gsttcpclientsrc.c:
-       * gst/tcp/gsttcpclientsrc.h:
-       * gst/tcp/gsttcpserversrc.c:
-         - portability fix, to compile on OSX
-            (fixes #143146)
-
-       * sys/osxaudio/gstosxaudioelement.c:
-       * sys/osxaudio/gstosxaudiosink.c:
-       * sys/osxaudio/gstosxaudiosrc.c:
-         - compilation warnings on OSX
-            (fixes #143153)
-
-2004-06-02  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
-       * ext/vorbis/vorbisdec.c : sign warning fixes
-
-       * gst-libs/gst/mixer/mixertrack.c :
-         do no use defines which are glib 2.4 specific
-
-2004-06-01  Christophe Fergeau  <teuf@gnome.org>
-
-       * ext/flac/gstflactag.c: strip ending framing bit from vorbiscomment
-         buffer since libflac doesn't expect it (reports a sync error when
-         it encounters that)
-
-
-2004-06-01  Owen Fraser-Green  <owen@discobabe.net>
-
-       * gst-libs/gst/mixer/mixertrack.h: Changed struct syntax
-       * gst-libs/gst/mixer/mixertrack.c:
-       (gst_mixer_track_get_property), (get_mixer_track_init),
-       (get_mixer_track_get_property): Added property accessors
-       * gst-libs/gst/mixer/mixeroptions.h: Changed struct syntax
-       * gst-libs/gst/mixer/mixeroptions.c:
-       (gst_mixer_options_get_values): Added
-       * gst-libs/gst/mixer/mixer.h: Changed GstMixerClass syntax
-       * gst-libs/gst/mixer/mixer.c: Fixed comment
-
-
-2004-06-01  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_open_audio):
-          improve error messages on open
-
-
-2004-06-01  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay):
-          check if v4l-conf is in path
-
-2004-06-01  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-libs/gst/media-info/media-info-priv.c: (gmi_set_mime):
-          change assert to a more readable error message
-
-2004-05-31  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
-
-       * gst-libs/gst/tuner/tunerchannel.h:
-         - add a freq_multiplicator field to make the conversion
-           between internal frequency unit and Hz
-       * sys/v4l/gstv4lelement.c:
-       * sys/v4l2/gstv4l2element.c:
-         - change default video device to /dev/video0
-       * sys/v4l/v4l_calls.c:
-       * sys/v4l2/v4l2_calls.c:
-         - we only expose frequency to the user in Hz instead of
-           bastard v4lX unit (either 62.5kHz or 62.5Hz)
-
-2004-05-31  Jan Schmidt  <thaytan@mad.scientist.com>
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
-         Initialise b_o_s and e_o_s variables
-       * gst-libs/gst/riff/riff-media.c:
-       (gst_riff_create_video_caps_with_data):
-         Add some unusual fourcc's from mplayer avi's
-       * gst/multipart/multipartmux.c: (gst_multipart_mux_plugin_init):
-         Make the muxer have rank GST_RANK_NONE, so it doesn't mess up
-         autoplugging.
-
-2004-05-28  Wim Taymans  <wim@fluendo.com>
-
-       * configure.ac:
-       * gst/alpha/Makefile.am:
-       * gst/alpha/gstalpha.c: (gst_alpha_method_get_type),
-       (gst_alpha_get_type), (gst_alpha_base_init),
-       (gst_alpha_class_init), (gst_alpha_init), (gst_alpha_set_property),
-       (gst_alpha_get_property), (gst_alpha_sink_link), (gst_alpha_add),
-       (gst_alpha_chroma_key), (gst_alpha_chain),
-       (gst_alpha_change_state), (plugin_init):
-       A plugin to add an alpha channel to I420 video. Can optionally do
-       chroma keying.
-       * gst/multipart/Makefile.am:
-       * gst/multipart/multipart.c: (plugin_init):
-       * gst/multipart/multipartdemux.c: (gst_multipart_demux_base_init),
-       (gst_multipart_demux_class_init), (gst_multipart_demux_init),
-       (gst_multipart_demux_finalize), (gst_multipart_demux_handle_event),
-       (gst_multipart_find_pad_by_mime), (gst_multipart_demux_chain),
-       (gst_multipart_demux_change_state),
-       (gst_multipart_demux_plugin_init):
-       * gst/multipart/multipartmux.c: (gst_multipart_mux_get_type),
-       (gst_multipart_mux_base_init), (gst_multipart_mux_class_init),
-       (gst_multipart_mux_get_sink_event_masks), (gst_multipart_mux_init),
-       (gst_multipart_mux_sinkconnect), (gst_multipart_mux_pad_link),
-       (gst_multipart_mux_pad_unlink),
-       (gst_multipart_mux_request_new_pad),
-       (gst_multipart_mux_handle_src_event),
-       (gst_multipart_mux_next_buffer), (gst_multipart_mux_compare_pads),
-       (gst_multipart_mux_queue_pads), (gst_multipart_mux_loop),
-       (gst_multipart_mux_get_property), (gst_multipart_mux_set_property),
-       (gst_multipart_mux_change_state), (gst_multipart_mux_plugin_init):
-       A Multipart demuxer/muxer. Not sure if it violates specs. Used to
-       send multipart jpeg images to a browser.
-       * gst/videobox/Makefile.am:
-       * gst/videobox/README:
-       * gst/videobox/gstvideobox.c: (gst_video_box_fill_get_type),
-       (gst_video_box_get_type), (gst_video_box_base_init),
-       (gst_video_box_class_init), (gst_video_box_init),
-       (gst_video_box_set_property), (gst_video_box_get_property),
-       (gst_video_box_sink_link), (gst_video_box_i420),
-       (gst_video_box_ayuv), (gst_video_box_chain),
-       (gst_video_box_change_state), (plugin_init):
-       Crops or adds borders around an image. can do alpha channel
-       borders as well.
-       * gst/videomixer/Makefile.am:
-       * gst/videomixer/README:
-       * gst/videomixer/videomixer.c: (gst_videomixer_pad_get_type),
-       (gst_videomixer_pad_base_init), (gst_videomixer_pad_class_init),
-       (gst_videomixer_pad_get_sink_event_masks),
-       (gst_videomixer_pad_get_property),
-       (gst_videomixer_pad_set_property),
-       (gst_videomixer_pad_sinkconnect), (gst_videomixer_pad_link),
-       (gst_videomixer_pad_unlink), (gst_videomixer_pad_init),
-       (gst_video_mixer_background_get_type), (gst_videomixer_get_type),
-       (gst_videomixer_base_init), (gst_videomixer_class_init),
-       (gst_videomixer_init), (gst_videomixer_request_new_pad),
-       (gst_videomixer_handle_src_event),
-       (gst_videomixer_blend_ayuv_i420), (gst_videomixer_fill_checker),
-       (gst_videomixer_fill_color), (gst_videomixer_fill_queues),
-       (gst_videomixer_blend_buffers), (gst_videomixer_update_queues),
-       (gst_videomixer_loop), (gst_videomixer_get_property),
-       (gst_videomixer_set_property), (gst_videomixer_change_state),
-       (plugin_init):
-       Generic video mixer plugin, can handle multiple inputs all with
-       different framerates and video sizes. Is fully alpha channel
-       aware.
-
-2004-05-27  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
-         Select first track as master track. Not sure how else to handle
-         that...
-       * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer):
-         Discard discont events. Should fix #142962.
-
-2004-05-26  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/Makefile.am:
-       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_interface_init),
-       (gst_alsa_mixer_build_list), (gst_alsa_mixer_get_volume),
-       (gst_alsa_mixer_set_volume), (gst_alsa_mixer_set_mute),
-       (gst_alsa_mixer_set_record), (gst_alsa_mixer_set_option),
-       (gst_alsa_mixer_get_option):
-       * ext/alsa/gstalsamixer.h:
-       * ext/alsa/gstalsamixeroptions.c:
-       (gst_alsa_mixer_options_get_type),
-       (gst_alsa_mixer_options_class_init), (gst_alsa_mixer_options_init),
-       (gst_alsa_mixer_options_new):
-       * ext/alsa/gstalsamixeroptions.h:
-       * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
-       * ext/alsa/gstalsamixertrack.h:
-         Add enumerations (as GstMixerOptions). Make correct distinction
-         between input/output tracks. Add capture/playback private flag.
-         Use flag to decide on whether to set capture or playback volumes
-         or switches. Use playback and record switches.
-       * gst-libs/gst/mixer/Makefile.am:
-       * gst-libs/gst/mixer/mixer-marshal.list:
-       * gst-libs/gst/mixer/mixer.c: (gst_mixer_class_init),
-       (gst_mixer_set_option), (gst_mixer_get_option),
-       (gst_mixer_mute_toggled), (gst_mixer_record_toggled),
-       (gst_mixer_volume_changed), (gst_mixer_option_changed):
-       * gst-libs/gst/mixer/mixer.h:
-       * gst-libs/gst/mixer/mixeroptions.c: (gst_mixer_options_get_type),
-       (gst_mixer_options_class_init), (gst_mixer_options_init),
-       (gst_mixer_options_dispose):
-       * gst-libs/gst/mixer/mixeroptions.h:
-         Add GstMixerOptions.
-       * sys/oss/gstosselement.c: (gst_osselement_class_probe_devices):
-         Rename Audio Mixer to OSS Mixer (similar to Alsa Mixer). Fix
-         broken device detection on computers with multiple OSS sound
-         cards.
-
-2004-05-26  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_fixate):
-         fixate nicely even when the peer is not negotiating
-
-2004-05-25  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst/audioconvert/gstaudioconvert.c:
-       (gst_audio_convert_parse_caps):
-         make sure we don't allow depth > width
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_fixate):
-         fixate endianness to G_BYTE_ORDER as default
-       * gst/audioscale/gstaudioscale.c:
-         we don't handle another endianness as host-endianness
-
-2004-05-25  David Schleef  <ds@schleef.org>
-
-       * gst/ffmpegcolorspace/mem.c:  malloc() is in stdlib.h, not malloc.h
-
-2004-05-24  Benjamin Otte  <otte@gnome.org>
-
-       * ext/vorbis/oggvorbisenc.c: (gst_oggvorbisenc_sinkconnect),
-       (gst_oggvorbisenc_setup):
-         properly fail when we can't setup the vorbis encoder due to
-         unsupported settings
-       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_sinkconnect),
-       (gst_vorbisenc_setup):
-         same
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
-         fix case where warnings occured when one pad was unlinked while the
-         other's link function was called
-
-2004-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/tcp/Makefile.am:
-          use GST_ENABLE_NEW
-
-2004-05-24  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst-libs/gst/resample/private.h:
-         don't use optimizations that are #if 0'ed
-
-2004-05-24  Wim Taymans  <wim@fluendo.com>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query):
-       Fix potential division by zero error and hopefully get
-       the position query right to get correct timestamps on avi
-       audio.
-
-2004-05-24  Wim Taymans  <wim@fluendo.com>
-
-       * gst/videoscale/videoscale.c: (gst_videoscale_scale_nearest),
-       (gst_videoscale_scale_nearest_str2),
-       (gst_videoscale_scale_nearest_str4),
-       (gst_videoscale_scale_nearest_32bit),
-       (gst_videoscale_scale_nearest_24bit),
-       (gst_videoscale_scale_nearest_16bit):
-       Fix the scaling algorithm and avoid a buffer overflow.
-        removed the while loop in the scaling function as it
-       was used for point sampling only.
-
-2004-05-24  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_get_type),
-       (gst_id3_tag_class_init), (gst_id3_tag_init),
-       (gst_id3_tag_set_property), (gst_id3_tag_get_tag_to_render),
-       (gst_id3_tag_handle_event), (gst_id3_tag_do_caps_nego),
-       (gst_id3_tag_send_tag_event):
-         lots of fixes to make id3mux work and id3demux work correctly
-
-2004-05-24  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
-       * ext/Makefile.am:
-         add rules to build shout2send (was removed by accident
-         when this module was no more marked experimental/broken)
-
-2004-05-24  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       * ext/shout2/gstshout2.c:
-       * ext/shout2/gstshout2.h:
-         adding a "connection problem" signal to shout2send
-         (fixes #142954)
-
-2004-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/kio/kioreceiver.cpp:
-       * ext/kio/kioreceiver.h:
-          fix sign comparison issues
-
-2004-05-21  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
-       * gst/cdxaparse/gstcdxaparse.c:
-       * gst/cdxaparse/gstcdxaparse.h:
-         some renaming
-         add some checks/sanity
-         prepare for seek addition
-
-       * sys/sunaudio/gstsunaudio.c:
-         remove exported dupe init function
-
-2004-05-21  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_get_formats),
-       (gst_dvdec_src_convert), (gst_dvdec_sink_convert):
-         Fix format conversion and position querying.
-       * gst/debug/progressreport.c: (gst_progressreport_report):
-         Don't output a bogus total value that we didn't query.
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support):
-         Always set XV_AUTOPAINT_COLORKEY to true. Fixes xvimagesink showing
-         only a blank window after xine has been used.
-
-2004-05-21  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
-
-       * m4/as-arts.m4:
-         sync with upstream version to fix test on FC2
-         readd with -ko to preserve Id header
-
-2004-05-20  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
-       * configure.ac:
-         test for FIONREAD ioctl in sys/filio.h for Solaris compat.
-       * gst/tcp/gsttcpclientsrc.c: idem
-       * gst/tcp/gsttcpserversink.c: idem
-       * gst/tcp/gsttcpserversrc.c: idem
-       * m4/gst-fionread.m4: idem
-
-       * sys/sunaudio/gstsunaudio.c: change category to Sink/Audio
-
-       * configure.ac: enable speex plugin for speex 1.1.5+
-       * ext/speex/gstspeexenc.c: fix cast warning
-
-       * ext/esd/README: fix typo
-
-2004-05-20  David Schleef  <ds@schleef.org>
-
-       * configure.ac: Minor cosmetic change to convince the buildbot to
-       reautogen.
-       * sys/sunaudio/gstsunaudio.c: (gst_sunaudiosink_class_init),
-       (gst_sunaudiosink_init), (gst_sunaudiosink_getcaps),
-       (gst_sunaudiosink_pad_link), (gst_sunaudiosink_chain),
-       (gst_sunaudiosink_setparams), (gst_sunaudiosink_open),
-       (gst_sunaudiosink_close), (gst_sunaudiosink_change_state),
-       (gst_sunaudiosink_set_property), (gst_sunaudiosink_get_property):
-       More hacking.  Plays audio now.
-
-2004-05-20  David Schleef  <ds@schleef.org>
-
-       * configure.ac:
-       * sys/Makefile.am:
-
-2004-05-20  David Schleef  <ds@schleef.org>
-
-       * sys/osxaudio/Makefile.am:  New OS X audio plugin by Zaheer Abbas Merali
-       * sys/osxaudio/gstosxaudio.c:
-       * sys/osxaudio/gstosxaudioelement.c:
-       * sys/osxaudio/gstosxaudioelement.h:
-       * sys/osxaudio/gstosxaudiosink.c:
-       * sys/osxaudio/gstosxaudiosink.h:
-       * sys/osxaudio/gstosxaudiosrc.c:
-       * sys/osxaudio/gstosxaudiosrc.h:
-
-2004-05-20  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_set_header_on_caps),
-       (gst_vorbisenc_chain):
-          put the codec headers on the caps as streamheader as well as
-          pushing them out
-
-2004-05-20  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/vorbis/vorbisenc.c: (vorbis_granule_time_copy),
-       (gst_vorbisenc_buffer_from_packet), (gst_vorbisenc_push_buffer),
-       (gst_vorbisenc_push_packet), (gst_vorbisenc_chain):
-        split up push_packet into two functions
-
-2004-05-20  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/tcp/.cvsignore:
-         ignore enums
-       * gst/tcp/Makefile.am:
-       * gst/tcp/README:
-       * gst/tcp/gsttcp.c:
-       * gst/tcp/gsttcp.h:
-       * gst/tcp/gsttcpclientsink.c:
-       * gst/tcp/gsttcpclientsink.h:
-       * gst/tcp/gsttcpclientsrc.c:
-       * gst/tcp/gsttcpclientsrc.h:
-       * gst/tcp/gsttcpplugin.c:
-       * gst/tcp/gsttcpserversink.c:
-       * gst/tcp/gsttcpserversink.h:
-       * gst/tcp/gsttcpserversrc.c:
-       * gst/tcp/gsttcpserversrc.h:
-          add new tcp elements
-
-2004-05-19  Wim Taymans  <wim@fluendo.com>
-
-       * gst/law/mulaw-conversion.c: (mulaw_encode):
-       Fix overflow bug in ulaw encoding.
-
-2004-05-19  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/mad/gstmad.c: (gst_mad_handle_event):
-         don't unref the event twice
-
-2004-05-19  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * configure.ac:
-         remove -Wno-sign-compare
-
-2004-05-19  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * configure.ac:
-         remove -DG_DISABLE_DEPRECATED. It's not usable without workarounds
-         if you want to work against glib 2.2 and 2.4
-
-2004-05-19  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/tcp/Makefile.am:
-       * gst/tcp/gsttcp.c:
-       * gst/tcp/gsttcp.h:
-       * gst/tcp/gsttcpsink.h:
-       * gst/tcp/gsttcpsrc.h:
-          gsttcp -> gsttcpplugin + CVS surgery in preparation for tcp merge
-
-2004-05-19  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst/debug/tests.c: (md5_get_value):
-         fix segfault on gst-inspect
-
-2004-05-19  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst/debug/testplugin.c:
-       * gst/debug/tests.c:
-       * gst/debug/tests.h:
-         add new extensible and configurable testing element. Current tests
-         include buffer count, stream length, timestamp/duration matching and
-         md5.
-       * gst/debug/Makefile.am:
-       * gst/debug/gstdebug.c: (plugin_init):
-         add infrastructure for new element
-
-2004-05-19  Johan Dahlin  <johan@gnome.org>
-
-       * ext/dv/gstdvdec.c (gst_dvdec_quality_get_type): Add proper
-       ending of the array. Fixes gst-inspect segfault on ppc.
-
-2004-05-19  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
-       * ext/dirac/gstdiracdec.cc : change category to Codec/Decoder/Video
-
-       * m4/a52.m4 : don't fix a test that should fail with current a52dec lib
-
-2004-05-18  David Schleef  <ds@schleef.org>
-
-       * gst/ffmpegcolorspace/imgconvert.c: (img_convert): Fixes for
-       warnings (bugs, actually) noticed by gcc but not forte.
-
-2004-05-18  David Schleef  <ds@schleef.org>
-
-       * sys/sunaudio/Makefile.am:
-       * sys/sunaudio/gstsunaudio.c: New sunaudiosink
-
-2004-05-18  David Schleef  <ds@schleef.org>
-
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
-       (gst_qtdemux_loop_header):  Patch from dcm@acm.org (David Moore)
-       to allow qtdemux to use non-seekable streams. (bug #142272)
-
-2004-05-18  David Schleef  <ds@schleef.org>
-
-       * gst-libs/gst/resample/resample.c: (gst_resample_sinc_ft_s16),
-       (gst_resample_sinc_ft_float): Remove use of static temporary
-       buffer.  This code was obviously not supposed to last long, but
-       it's stuck in our ABI, so it required a little hack to make it
-       ABI-compatible.  Fixes #142585.
-       * gst-libs/gst/resample/resample.h: same.
-
-2004-05-18  David Schleef  <ds@schleef.org>
-
-       * configure.ac: Add sunaudio
-       * examples/Makefile.am: make gstplay depend on gconf
-       * gst/ffmpegcolorspace/gstffmpegcodecmap.c: Remove c99-isms
-       * gst/ffmpegcolorspace/imgconvert.c: (build_rgb_palette),
-       (convert_table_lookup), (img_convert): remove c99-isms
-       * gst/ffmpegcolorspace/imgconvert_template.h: make a constant
-          unsigned, to fix a warning on Solaris
-       * gst/mpeg1sys/systems.c: bcopy->memcpy
-       * gst/rtjpeg/RTjpeg.c: (RTjpeg_yuvrgb8): bcopy->memcpy
-       * sys/Makefile.am: Add sunaudio
-
-2004-05-18  Wim Taymans  <wim@fluendo.com>
-
-       * ext/ogg/gstoggmux.c: (gst_ogg_mux_get_type), (gst_ogg_mux_init),
-       (gst_ogg_mux_sinkconnect), (gst_ogg_mux_request_new_pad),
-       (gst_ogg_mux_next_buffer), (gst_ogg_mux_push_page),
-       (gst_ogg_mux_compare_pads), (gst_ogg_mux_queue_pads),
-       (gst_ogg_mux_loop):
-       Fix an ugly memleak where the muxer didn't flush enough ogg
-       pages. This also resulted in badly muxed ogg files.
-
-2004-05-18  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
-       * gst/asfdemux/asfheaders.c :
-       * gst/asfdemux/asfheaders.h :
-       * gst/asfdemux/gstasfdemux.c :
-         - fix ASF_OBJ_PADDING guid
-         - add 3 new object guids (language list, metadata,
-            extended stream properties)
-          - add a function to parse extended header objects
-
-2004-05-18  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * sys/oss/gstosselement.c: (gst_osselement_sync_parms):
-         remove leftover debugging g_print
-
-2004-05-17  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/mad/gstmad.c: (gst_mad_handle_event):
-         Fix for when the first format in a discont event is not a
-         byte-based one. Should fix #137710.
-
-2004-05-18  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
-       * m4/a52.m4 : fix compilation with -Wall -Werror
-       * m4/libfame.m4 : idem
-       * m4/libmikmod.m4 : idem
-
-2004-05-17  Benjamin Otte  <otte@gnome.org>
-
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_comment):
-         signal the new tags before giving up the reference
-
-2004-05-17  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/shout2/gstshout2.c:
-         use application/ogg instead of application/x-ogg (patch by Patrick
-         Guimond, fixes #142432)
-       * sys/oss/gstosselement.c: (gst_osselement_reset),
-       (gst_osselement_sync_parms):
-         don't set fragment size unless specified (fixes #142493)
-
-2004-05-17  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
-       * configure.ac : fix compilation of v4l2src with "-Wall -Werror"
-         fixes #142664
-
-2004-05-17  Benjamin Otte  <otte@gnome.org>
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
-         compute offsets correctly for internal buffers so timestamps are set
-         correctly when we can't seek. Also handle cases where there are no
-         offsets. (based on a patch by David Moore, fixes #142507)
-
-2004-05-17  Benjamin Otte  <otte@gnome.org>
-
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
-         use correct variable when determining amount of data to skip so we
-         don't skip into the void and segfault
-
-2004-05-16  Benjamin Otte  <otte@gnome.org>
-
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_audio_caps):
-         Hi, I'm a memleak
-
-2004-05-16  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
-       * gst/asfdemux/gstasfdemux.c:
-         - fix a mem leak and always propagate tags
-         - add WMV3 to known video codecs (but no decoder yet)
-         - replace "surplus data" at end of audio header for what
-           it is : codec specific data
-         - fix a typo
-
-2004-05-16  Arwed v. Merkatz  <v.merkatz@gmx.net>
-
-       reviewed by: Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/audio/audioclock.c:
-         Fix wrong return type (#142205).
-
-2004-05-16  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/mad/gstmad.c: (gst_mad_class_init), (gst_mad_init):
-         Ignore CRCs by default (fixes #142566).
-
-2004-05-16  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_open),
-       (gst_alsa_mixer_close), (gst_alsa_mixer_supported),
-       (gst_alsa_mixer_build_list), (gst_alsa_mixer_free_list),
-       (gst_alsa_mixer_change_state), (gst_alsa_mixer_list_tracks),
-       (gst_alsa_mixer_get_volume), (gst_alsa_mixer_set_volume),
-       (gst_alsa_mixer_set_mute), (gst_alsa_mixer_set_record):
-         Fix for cases where we fail to attach to a mixer.
-
-2004-05-16  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_seek):
-         Don't touch events after not owning them anymore.
-       * gst/wavparse/gstwavparse.c: (gst_wavparse_base_init),
-       (gst_wavparse_fmt), (gst_wavparse_other),
-       (gst_wavparse_handle_seek), (gst_wavparse_loop),
-       (gst_wavparse_pad_convert), (gst_wavparse_pad_query),
-       (gst_wavparse_srcpad_event):
-       * gst/wavparse/gstwavparse.h:
-         Add seeking, fix querying.
-
-2004-05-16  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_comment):
-         - process comments even if they don't end with \0\0
-            g_convert would ignore them if present and works well without them
-
-2004-05-16  Benjamin Otte  <otte@gnome.org>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_caps), (gst_alsa_get_caps):
-         simplify caps
-
-2004-05-16  Benjamin Otte  <otte@gnome.org>
-
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_comment):
-         don't write to memory we might not write to - g_convert does that
-         for us anyway (fixes #142613)
-       (gst_asf_demux_audio_caps):
-         comment out gst_util_dump_mem
-
-2004-05-16  Benjamin Otte  <otte@gnome.org>
-
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
-         compute correct expected timestamps after seek (broken since
-         last commit)
-       * ext/gdk_pixbuf/pixbufscale.c: (pixbufscale_init):
-         rename element and debugging category to gdkpixbufscale
-
-2004-05-16  Benjamin Otte  <otte@gnome.org>
-
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
-         add error checking to snd_pcm_delay and remove duplicate call to
-         snd_pcm_delay that caused issues (see inline code comments)
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_get_time):
-         make more readable and fix return value when snd_pcm_delay fails
-       (fixes #142586)
-
-2004-05-15  Jan Schmidt  <thaytan@mad.scientisti.com>
-       * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_method_get_type),
-       (gst_pixbufscale_get_type), (gst_pixbufscale_base_init),
-       (gst_pixbufscale_class_init), (gst_pixbufscale_getcaps),
-       (gst_pixbufscale_link), (gst_pixbufscale_init),
-       (gst_pixbufscale_handle_src_event), (pixbufscale_scale),
-       (gst_pixbufscale_chain), (gst_pixbufscale_set_property),
-       (gst_pixbufscale_get_property), (pixbufscale_init):
-       * ext/gdk_pixbuf/pixbufscale.h:
-       Add these files I forgot earlier
-
-2004-05-15  Jan Schmidt  <thaytan@mad.scientist.com>
-       * ext/gdk_pixbuf/Makefile.am:
-       * ext/gdk_pixbuf/gstgdkpixbuf.c: (plugin_init):
-       * ext/gdk_pixbuf/gstgdkpixbuf.h:
-       Add new pixbufscale element to scale RGB video
-       using gdk_pixbuf, because gdk_pixbuf does BILINEAR
-       and HYPER interpolation correctly.
-       * ext/theora/theoraenc.c: (theora_enc_chain),
-       Discard buffer and return if explicit caps could not be set
-       (theora_enc_get_property):
-       Make _get return kbps for the bitrate consistent with
-       the _set function.
-
-
-2004-05-14  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/libvisual/visual.c: (gst_visual_chain):
-         add missing visual_audio_analyze
-
-2004-05-14  David Schleef  <ds@schleef.org>
-
-       * ext/esd/esdsink.c: (gst_esdsink_chain): Fix crash when ESD
-       is killed while we're playing.
-       * gst/qtdemux/qtdemux.c: (qtdemux_parse): call
-       gst_element_no_more_pads().
-
-2004-05-14  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
-       * gst-libs/gst/riff/riff-read.c :
-         - fix INFO tag extraction in RIFF/AVI files
-            because gst_event_unref (event) also freed taglist
-          - avoid a mem leak
-
-2004-05-13  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
-       * ext/mad/gstid3tag.c : move from "Codec/(Dem/M)uxer" to "Codec/(Dem/M)uxer/Audio"
-       * gst/wavenc/gstwavenc.c : move from "Codec/Encoder/Audio" to "Codec/Muxer/Audio"
-
-       * gst/auparse/gstauparse.c :
-         - add code (commented for now) to support audio/x-adpcm on src pad
-           (we have no decoder for those layout yet)
-
-       * gst/cdxaparse/gstcdxaparse.c :
-       * gst/cdxaparse/gstcdxaparse.h :
-         - partial rewrite using RiffRead (ripped iain's wavparse code)
-
-       * gst/rtp/gstrtpL16enc.c : typo
-       * gst/rtp/gstrtpgsmenc.c : typo
-
-2004-05-13  Benjamin Otte  <otte@gnome.org>
-
-       * configure.ac:
-         check for exact version of libvisual, it's not supposed to be
-         API/ABI stable yet
-
-2004-05-13  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_push):
-         signal no-more-pads
-
-2004-05-13  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * ext/dv/gstdvdec.c: (gst_dvdec_src_convert)
-       Report which format was used for GST_FORMAT_DEFAULT
-       * gst/debug/Makefile.am:
-       * gst/debug/gstdebug.c: (plugin_init):
-       * gst/debug/progressreport.c: (gst_progressreport_base_init),
-       (gst_progressreport_class_init), (gst_progressreport_init),
-       (gst_progressreport_report), (gst_progressreport_set_property),
-       (gst_progressreport_get_property), (gst_progressreport_chain),
-       (gst_progressreport_plugin_init):
-       Add progressreport element for testing.
-
-2004-05-13  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get), (gst_v4lsrc_change_state):
-       * sys/v4l/gstv4lsrc.h:
-       * sys/v4l/v4lmjpegsink_calls.c: (gst_v4lmjpegsink_playback_init):
-       * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_capture_init):
-       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_capture_init),
-       (gst_v4lsrc_grab_frame):
-          add more debugging
-          send a discont at start
-
-2004-05-12  Colin Walters  <walters@redhat.com>
-
-       * gst/asfdemux/gstasfdemux.c (gst_asf_demux_process_segment): Avoid
-       inflooping if we can't find a chunk.  Or in other words, don't blow
-       chunks if we don't have a chunk to blow.
-
-2004-05-13  Jan Schmidt  <thaytan@mad.scientist.com>
-       * ext/audiofile/gstafsrc.c: (gst_afsrc_get):
-       Remove old debug output
-       * ext/dv/gstdvdec.c: (gst_dvdec_quality_get_type),
-       (gst_dvdec_class_init), (gst_dvdec_loop), (gst_dvdec_change_state),
-       (gst_dvdec_set_property), (gst_dvdec_get_property):
-       Change the quality setting to an enum, so it works from gst-launch
-       Don't renegotiate a non-linked pad. Allows audio only decoding.
-       * gst/deinterlace/gstdeinterlace.c: (gst_deinterlace_getcaps),
-       (gst_deinterlace_link), (gst_deinterlace_init):
-       * gst/videodrop/gstvideodrop.c: (gst_videodrop_getcaps),
-       (gst_videodrop_link):
-       Some caps negotiation fixes
-
-2004-05-12  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
-       * ext/tarkin/gsttarkin.c :
-         - Change RANK from NONE to PRIMARY
-       * ext/gdk_pixbuf/gstgdkpixbuf.c :
-         - Change RANK from NONE to MARGINAL
-       * ext/divx/gstdivxenc.c :
-         - Change RANK from PRIMARY to NONE (encoder/spider issue)
-
-2004-05-12  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/vorbis/vorbisenc.c: (vorbis_granule_time_copy),
-       (gst_vorbisenc_push_packet):
-          copy a function that was added between 1.0 and 1.0.1 until we
-          depend on worthwhile features of post-1.0
-
-2004-05-12  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * configure.ac:
-         enable shout2 by default
-       * ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
-       (gst_shout2send_base_init), (gst_shout2send_init),
-       (gst_shout2send_connect), (gst_shout2send_change_state):
-       * ext/shout2/gstshout2.h:
-         make this work again. Based on a patch by Zaheer Abbas Merali (fixes
-         #142262)
-       * ext/theora/theora.c: (plugin_init):
-         don't set rank on encoders
-
-2004-05-11  Jeremy Simon  <jesimon@libertysurf.fr>
-
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_audio_caps):
-         Use codec_data property instead of flag1 and flag2 for wma
-
-2004-05-11  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
-       * gst/cdxaparse/gstcdxaparse.c :
-         - Add mpegversion to CAPS to make it link
-         - Rank is as GST_RANK_SECONDARY instead of NONE
-       * gst/auparse/gstauparse.c :
-         - Document all audio encoding we can encounter from Solaris 9
-           headers and libsndfile information.
-         - Increase max. rate from 48000 to 192000 (to match other elements)
-         - Don't try to play junk data between header and samples
-
-2004-05-11  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/libvisual/visual.c: (gst_visual_getcaps):
-         use the right caps depending on endianness (I hope)
-       * ext/ogg/gstoggmux.c: (gst_ogg_mux_plugin_init):
-         use GST_RANK_NONE for all non-decoding elements or spider gets
-         mighty confused
-
-2004-05-11  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_comment):
-         Fix some odd cases and fix BE metadata parsing of unicode16 text.
-
-2004-05-11  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst/switch/gstswitch.c: (gst_switch_release_pad),
-       (gst_switch_request_new_pad), (gst_switch_poll_sinkpads),
-       (gst_switch_loop), (gst_switch_get_type):
-         whoever that was: DO NOT IMPORT PRIVATE SYMBOLS THAT ARE NOT IN
-         HEADERS. Had to be said.
-
-2004-05-10  David Schleef  <ds@schleef.org>
-
-       * configure.ac: Add prototype Dirac support.
-       * ext/Makefile.am:
-       * ext/dirac/Makefile.am:
-       * ext/dirac/gstdirac.cc:
-       * ext/dirac/gstdiracdec.cc:
-
-2004-05-10  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/auparse/gstauparse.c: (gst_auparse_class_init),
-       (gst_auparse_init), (gst_auparse_chain),
-       (gst_auparse_change_state):
-         Hack around spider. Remove me some day please.
-
-2004-05-10  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/auparse/gstauparse.c: (gst_auparse_chain):
-         Fix for some uninitialized variables in previous patch, also
-         makes it work. Fixes #142286 while we're at it.
-
-2004-05-11  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
-       * gst/auparse/gstauparse.c:
-               fixes a-law, adds mu-law, linear pcm (8,16,24,32), ieee (32, 64)
-               only unsupported formats are ADPCM/CCITT G.72x
-               reviewed by Ronald
-       * gst-libs/gst/audio/audio.h: adds 24bit depth to PCM (x-raw-int)
-
-2004-05-10  Wim Taymans  <wim@fluendo.com>
-
-       * ext/vorbis/Makefile.am:
-       * ext/vorbis/README:
-       * ext/vorbis/oggvorbisenc.c: (gst_oggvorbisenc_get_formats),
-       (oggvorbisenc_get_type), (vorbis_caps_factory), (raw_caps_factory),
-       (gst_oggvorbisenc_base_init), (gst_oggvorbisenc_class_init),
-       (gst_oggvorbisenc_sinkconnect), (gst_oggvorbisenc_convert_src),
-       (gst_oggvorbisenc_convert_sink),
-       (gst_oggvorbisenc_get_query_types), (gst_oggvorbisenc_src_query),
-       (gst_oggvorbisenc_init), (gst_oggvorbisenc_get_tag_value),
-       (gst_oggvorbisenc_metadata_set1), (gst_oggvorbisenc_set_metadata),
-       (get_constraints_string), (update_start_message),
-       (gst_oggvorbisenc_setup), (gst_oggvorbisenc_write_page),
-       (gst_oggvorbisenc_chain), (gst_oggvorbisenc_get_property),
-       (gst_oggvorbisenc_set_property), (gst_oggvorbisenc_change_state):
-       * ext/vorbis/oggvorbisenc.h:
-       * ext/vorbis/vorbis.c: (plugin_init):
-       * ext/vorbis/vorbisenc.c: (vorbis_caps_factory),
-       (raw_caps_factory), (gst_vorbisenc_class_init),
-       (gst_vorbisenc_init), (gst_vorbisenc_setup),
-       (gst_vorbisenc_push_packet), (gst_vorbisenc_chain),
-       (gst_vorbisenc_get_property), (gst_vorbisenc_set_property):
-       * ext/vorbis/vorbisenc.h:
-       Added a raw vorbis encoder to be used with the oggmuxer.
-       We still need the old encoder for some gnome applications,
-       read the README to find out how that works.
-       The raw encoder is called "rawvorbisenc" until 0.9.
-
-2004-05-10  Wim Taymans  <wim@fluendo.com>
-
-       * ext/ogg/gstogg.c: (plugin_init):
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_plugin_init),
-       (gst_ogg_print):
-       * ext/ogg/gstoggmux.c: (gst_ogg_mux_get_type),
-       (gst_ogg_mux_base_init), (gst_ogg_mux_class_init),
-       (gst_ogg_mux_get_sink_event_masks), (gst_ogg_mux_init),
-       (gst_ogg_mux_sinkconnect), (gst_ogg_mux_pad_link),
-       (gst_ogg_mux_pad_unlink), (gst_ogg_mux_request_new_pad),
-       (gst_ogg_mux_handle_src_event), (gst_ogg_mux_next_buffer),
-       (gst_ogg_mux_push_page), (gst_ogg_mux_compare_pads),
-       (gst_ogg_mux_queue_pads), (gst_ogg_mux_loop),
-       (gst_ogg_mux_get_property), (gst_ogg_mux_set_property),
-       (gst_ogg_mux_change_state), (gst_ogg_mux_plugin_init):
-       Added an ogg muxer.
-       Small typo fixes in the demuxer.
-
-2004-05-10  Wim Taymans  <wim@fluendo.com>
-
-       * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
-       (theora_enc_sink_link), (theora_push_packet), (theora_enc_chain),
-       (theora_enc_change_state), (theora_enc_set_property),
-       (theora_enc_get_property):
-       Mark the last packet with an EOS flag which is not really needed
-       in gstreamer.
-       Do some better video framerate initialisation.
-       Update the buffer timestamp.
-
-2004-05-10  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * ext/dv/gstdvdec.c: (gst_dvdec_change_state):
-       Return the result of the parent state change call
-
-2004-05-10  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
-       * gst/law/alaw.c : alawdec should be registered with type ALAWDEC, not ALAWENC
-       * gst/law/alaw-decode.c : put audio/x-alaw on pads, instead of audio/x-mulaw
-       * gst/law/alaw-encode.c : (idem)
-       * ext/a52dec/gsta52dec.c : mark audio/a52, audio/ac3 as deprecated in a comment
-       * gst/ac3parse/gstac3parse.c : audio/ac3 => audio/x-ac3
-       * gst/realmedia/rmdemux.c : audio/a52 => audio/x-ac3
-
-2004-05-09  Benjamin Otte  <otte@gnome.org>
-
-       * ext/alsa/gstalsasrc.c: (gst_alsa_src_loop):
-         don't use a fixed buffer size when writing variable length data to
-         it. Fixes memory corruption and makes alsasrc work
-
-2004-05-09  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/gnomevfs/gstgnomevfssink.c:
-       (_gst_boolean_allow_overwrite_accumulator),
-       (gst_gnomevfssink_class_init), (gst_gnomevfssink_open_file):
-         Run glib's default signal handler (??) in RUN_CLEANUP rather than
-         RUN_LAST, and don't use that to set the accumulator value because
-         then it's always FALSE.
-
-2004-05-09  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-media.c:
-       (gst_riff_create_video_caps_with_data),
-       (gst_riff_create_audio_caps),
-       (gst_riff_create_audio_template_caps):
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head):
-         Fix for unaligned RIFF files (i.e. where all the chunks together
-         in a LIST chunk are not of the same size as the size given in
-         the LIST chunk header). Fixes several odd WAVE files. Also fix
-         ADPCM (block_align property) in audio, so that wavparse based
-         on this works now as it used to stand-alone.
-
-2004-05-09  Edward Hervey  <bilboed@bilboed.com>
-
-       reviewed by Benjamin Otte  <otte@gnome.org>
-
-       * ext/a52dec/gsta52dec.c:
-       * ext/divx/gstdivxdec.c:
-       * ext/divx/gstdivxenc.c:
-       * ext/dts/gstdtsdec.c: (gst_dtsdec_base_init):
-       * ext/faac/gstfaac.c: (gst_faac_base_init):
-       * ext/faad/gstfaad.c: (gst_faad_base_init):
-       * ext/ivorbis/vorbisfile.c:
-       * ext/lame/gstlame.c:
-       * ext/libfame/gstlibfame.c:
-       * ext/mpeg2enc/gstmpeg2enc.cc:
-       * ext/musicbrainz/gsttrm.c: (gst_musicbrainz_base_init):
-       * ext/sidplay/gstsiddec.cc:
-       * ext/speex/gstspeexdec.c:
-       * ext/speex/gstspeexenc.c:
-       * ext/xvid/gstxviddec.c:
-       * ext/xvid/gstxvidenc.c:
-         correct klasses. Mostly s,Codec/(Audio|Video),\1/Codec,
-         (fixes #142193)
-
-2004-05-08  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsa.c: (device_list),
-       (gst_alsa_class_probe_devices):
-       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_open):
-         Fix alsa oddness in mixer after the combination of using mixer
-         in source/sink elements and using hw:x,y instead of just hw:x.
-
-2004-05-09  Benjamin Otte  <otte@gnome.org>
-
-       * gst/wavparse/gstwavparse.c: (gst_wavparse_destroy_sourcepad),
-       (gst_wavparse_create_sourcepad):
-         make PAUSED=>READY=>PAUSED=READY work by not destroying NULL
-         sourcepads
-
-2004-05-09  Benjamin Otte  <otte@gnome.org>
-
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
-         allow discont events before caps nego
-
-2004-05-08  Benjamin Otte  <otte@gnome.org>
-
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_event):
-         don't leak events
-
-2004-05-08  Benjamin Otte  <otte@gnome.org>
-
-       * gst/level/gstlevel.c: (gst_level_link), (gst_level_chain),
-       (gst_level_change_state), (gst_level_init):
-       * gst/level/gstlevel.h:
-         figure out if we're initialized directly instead of keeping a
-         variable that's wrong in 90% of cases
-         don't initialize pads and then leak them and use a new unitialized
-         pad. (fixes #142084)
-         these were bugs so n00bish I didn't find them for an hour :/
-
-2004-05-08 Iain <iain@prettypeople.org>
-
-       * gst/wavparse/gstwavparse.[ch]: Rewrote to use RiffRead instead.
-       * gst-libs/gst/riff/riff-read.c (gst_riff_read_peek_head): Unstatic it
-       (gst_riff_read_element_data): Ditto, and added a got_bytes argument to
-       return the length that was read.
-       (gst_riff_read_strf_auds): Allow fmt tags as well.
-
-2004-05-07  David Schleef  <ds@schleef.org>
-
-       * ext/faad/gstfaad.c: (gst_faad_sinkconnect): HACK to correct
-       signed char assumption in faad.h.
-
-2004-05-07  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/v4l2/gstv4l2src.c: (gst_v4l2src_v4l2fourcc_to_caps):
-         Missing break, detected by Daniel Gazard <daniel.gazard@free.fr>.
-
-2004-05-07  Colin Walters  <walters@redhat.com>
-
-       * gst/volume/gstvolume.c (gst_volume_dispose): Unref dpman.
-       * ext/flac/gstflacdec.c (gst_flacdec_dispose): Add dispose
-       function.
-       * gst/audioscale/gstaudioscale.c (gst_audioscale_dispose):
-       Add dispose function.
-
-2004-05-08  Jan Schmidt  <thaytan@mad.scientist.com>
-       * ext/dv/gstdvdec.c: (gst_dvdec_video_link):
-         Fix caps nego and pad templates. RGB mode caps should
-         work now.
-       * ext/dvdnav/gst-dvd:
-         Move mpeg2dec inside the thread because otherwise the
-         queue rejects cap changes mid-stream
-       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_get_type),
-       (gst_mpeg2dec_flush_decoder):
-         For mpeg2dec > 0.4.0, call the flush function instead of
-         manually extracting all in-flight frames.
-       * ext/raw1394/gstdv1394src.c: (gst_dv1394src_factory),
-       (gst_dv1394src_init), (gst_dv1394src_iso_receive):
-         Change mime type video/dv go video/x-dv to match the
-         rest of gst-plugins
-
-2004-05-07  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_get_type),
-       (gst_alsa_sink_class_init):
-       * ext/alsa/gstalsasink.h:
-       * ext/alsa/gstalsasrc.c: (gst_alsa_src_get_type),
-       (gst_alsa_src_class_init):
-       * ext/alsa/gstalsasrc.h:
-         Make alsasink/src a subclass of alsamixer so that mixer stuff
-         shows up in gst-rec. Needs some finetuning.
-
-2004-05-05  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/lame/gstlame.c: (gst_lame_chain):
-         simplify
-       * ext/mad/gstmad.c: (gst_mad_handle_event):
-         fix event leak
-       * gst/typefind/gsttypefindfunctions.c: (mp3_type_find):
-         be able to detect mp3 files < 4096 bytes
-
-2004-05-06  Wim Taymans  <wim@fluendo.com>
-
-       * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
-       (theora_enc_sink_link), (theora_push_packet), (theora_enc_chain),
-       (theora_enc_set_property), (theora_enc_get_property):
-       Also encode the first frame, cleanup some code.
-
-2004-05-06  Wim Taymans  <wim@fluendo.com>
-
-       * ext/mpeg2enc/gstmpeg2enc.cc:
-       Forward events first before deciding that negotiation was
-       not performed.
-
-2004-05-06  Wim Taymans  <wim@fluendo.com>
-
-       * gst/wavenc/gstwavenc.c: (gst_wavenc_chain):
-       First process the events before deciding that negotiation
-       was not performed.
-
-2004-05-06  Wim Taymans  <wim@fluendo.com>
-
-       * ext/theora/Makefile.am:
-       * ext/theora/theora.c: (plugin_init):
-       * ext/theora/theoradec.c: (theora_dec_change_state):
-       * ext/theora/theoraenc.c: (gst_theora_enc_base_init),
-       (gst_theora_enc_class_init), (gst_theora_enc_init),
-       (theora_enc_sink_link), (theora_enc_event), (theora_push_packet),
-       (theora_enc_chain), (theora_enc_change_state),
-       (theora_enc_set_property), (theora_enc_get_property):
-       Added a theora encoder, grouped the encoder and decoder into the
-       same plugin.
-
-2004-05-05  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/jpeg/gstjpegenc.c: (gst_jpegenc_get_type),
-       (gst_jpegenc_chain):
-        fix DURATION on outgoing buffers
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_sink_event):
-        debug using time formats
-       * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
-       (gst_xvimagesink_sink_link):
-        windows with width/height 0 generate X errors, so don't allow them
-
-2004-05-05  Wim Taymans  <wim@fluendo.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c: (src_templ),
-       (gst_mpeg2dec_base_init), (gst_mpeg2dec_init),
-       (gst_mpeg2dec_negotiate_format):
-       * ext/mpeg2dec/gstmpeg2dec.h:
-         removed the static pad template so that we can add the
-         more accurate framerate value to the caps.
-
-
-2004-05-04  Benjamin Otte  <otte@gnome.org>
-
-       * configure.ac:
-         check for kdemacros.h, too (should fix #141821)
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_event), (vorbis_dec_chain):
-         don't crash if no header was sent, but nicely error out (fixes part
-         of #141554)
-
-2004-05-04  Wim Taymans  <wim@fluendo.com>
-
-       * ext/mpeg2enc/gstmpeg2enc.cc: (gst_mpeg2enc_dispose): call the
-       parent dispose function to avoid segfault on destroy.
-
-2004-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_sink_link),
-       (plugin_init):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
-       (gst_xvimagesink_sink_link):
-        clean up debugging caps
-        also recreate xvimage when format has changed
-
-2004-05-04  Benjamin Otte  <otte@gnome.org>
-
-       * ext/libvisual/Makefile.am:
-       * ext/libvisual/visual.c: (gst_visual_class_init),
-       (gst_visual_init), (gst_visual_dispose), (gst_visual_getcaps),
-       (gst_visual_srclink), (gst_visual_chain),
-       (gst_visual_change_state), (plugin_init):
-         use a GstAdapter to correctly adapt buffer sizes - allows using a
-         framerate
-
-2004-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/v4l/gstv4lelement.h:
-       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_class_init):
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get_fps), (gst_v4lsrc_getcaps),
-       (gst_v4lsrc_buffer_free):
-       * sys/v4l/v4l_calls.c: (gst_v4l_get_capabilities):
-       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_queue_frame),
-       (gst_v4lsrc_sync_frame), (gst_v4lsrc_grab_frame),
-       (gst_v4lsrc_requeue_frame):
-        move some debugging categories around
-        query for fps index and set accordingly if found
-
-2004-05-03  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
-       * ext/lame/gstlame.c:
-       correct defaults that lame_init puts out of range
-
-2004-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/divx/gstdivxenc.c: (gst_divxenc_get_type),
-       (gst_divxenc_class_init):
-        fix range since -1 is the default
-       * gst/mpeg1sys/gstmpeg1systemencode.c:
-       (gst_mpeg1_system_encode_get_type), (gst_system_encode_multiplex):
-       * gst/rtjpeg/gstrtjpegdec.c: (gst_rtjpegdec_get_type),
-       (gst_rtjpegdec_chain):
-       * gst/rtjpeg/gstrtjpegenc.c: (gst_rtjpegenc_get_type),
-       (gst_rtjpegenc_chain):
-       * sys/qcam/gstqcamsrc.c: (gst_autoexp_mode_get_type),
-       (gst_qcamsrc_get_type), (gst_qcamsrc_change_state):
-       * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_get_type):
-       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get_type):
-       * sys/v4l/gstv4lsrc.c:
-       * sys/v4l/v4l_calls.c: (gst_v4l_open):
-       * sys/v4l/v4lmjpegsink_calls.c: (gst_v4lmjpegsink_playback_init):
-       * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_capture_init):
-       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_capture_init):
-       * sys/vcd/vcdsrc.c: (vcdsrc_get_type), (vcdsrc_get):
-          remove gst_info calls
-
-2004-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * Makefile.am:
-       * po/af.po:
-       * po/az.po:
-       * po/en_GB.po:
-       * po/nl.po:
-       * po/sr.po:
-       * po/sv.po:
-          Updated translations
-
-2004-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/audioconvert/gstaudioconvert.c: (_fixate_caps_to_int):
-          refactor/comment code
-
-2004-05-02  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/asfdemux/Makefile.am:
-       * gst/asfdemux/asfheaders.c:
-       * gst/asfdemux/asfheaders.h:
-       * gst/asfdemux/gstasf.c: (plugin_init):
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_get_type),
-       (gst_asf_demux_base_init), (gst_asf_demux_process_comment),
-       (gst_asf_demux_setup_pad):
-       * gst/asfdemux/gstasfdemux.h:
-       * gst/asfdemux/gstasfmux.c:
-       * gst/asfdemux/gstasfmux.h:
-         Add tagging support to demuxer, split out registration in its own
-         file instead of in demux (hacky), and prevent having some tables
-         in our memory multiple times (in asfheaders.h).
-
-2004-05-01  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/matroska/matroska-demux.c:
-       (gst_matroska_demux_parse_metadata):
-       * gst/matroska/matroska-ids.h:
-         Basic tag reading support.
-
-2004-04-30  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/matroska/matroska-demux.c: (gst_matroska_demux_audio_caps):
-         Really detect ac-3 audio.
-       * gst/typefind/gsttypefindfunctions.c: (matroska_type_find):
-         really detect matroska files (off-by-1).
-
-2004-04-30  David Schleef  <ds@schleef.org>
-
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
-       (gst_qtdemux_add_stream), (qtdemux_parse), (qtdemux_type_get),
-       (qtdemux_dump_stsz), (qtdemux_dump_stco), (qtdemux_dump_co64),
-       (qtdemux_dump_unknown), (qtdemux_parse_tree), (qtdemux_parse_udta),
-       (qtdemux_tag_add), (get_size), (gst_qtdemux_handle_esds): More qtdemux
-       hackage -- parse a lot more atoms, extract a few tags.  One might even
-       mistake this for tag support.  Maybe it is.
-       * gst/qtdemux/qtdemux.h:
-
-2004-04-30  Colin Walters  <walters@verbum.org>
-
-       * ext/alsa/gstalsasink.c (gst_alsa_sink_mmap): Plug a memleak.
-
-2004-04-30  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
-       (gst_ffmpegcolorspace_getcaps):
-          remove broken nego fix
-
-2004-04-30  Benjamin Otte  <otte@gnome.org>
-
-       * configure.ac:
-       * ext/Makefile.am:
-       * ext/libvisual/Makefile.am:
-       * ext/libvisual/visual.c:
-         add initial support for libvisual (http://libvisual.sourceforge.net)
-         libvisual is still quite alpha, so expect crashes in there :)
-
-2004-04-29  David Schleef  <ds@schleef.org>
-
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_add_stream), (qtdemux_parse),
-       (qtdemux_parse_trak), (get_size), (gst_qtdemux_handle_esds): Hacked
-       up qtdemux to make it spit out codec_data.  Do _not_ look at this
-       code; you will no longer respect me.
-
-2004-04-29  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
-
-       * ext/alsa/gstalsa.c : (gst_alsa_class_probe_devices)
-       * ext/alsa/gstalsa.h :
-       change alsa pcm device discovery to find more than 1 device
-       per card. code review by Ronald.
-
-2004-04-29  David Schleef  <ds@schleef.org>
-
-       * sys/oss/gstosselement.c: (gst_osselement_rate_probe_check):
-       Add a check for a driver bug on FreeBSD.  (bug #140565)
-
-2004-04-29  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/jpeg/gstjpegdec.c: (gst_jpegdec_get_type):
-       * ext/jpeg/gstjpegenc.c: (gst_jpegenc_get_type),
-       (gst_jpegenc_getcaps):
-          move format setting to inner loop
-       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
-       (gst_ffmpegcolorspace_getcaps):
-          use GST_PAD_CAPS if available so that we use already negotiated
-          caps
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
-       (qtdemux_parse_moov), (qtdemux_parse):
-          extra debugging
-       * sys/qcam/qcam-Linux.c: (qc_lock_wait), (qc_unlock):
-       * sys/qcam/qcam-os.c: (qc_lock_wait), (qc_unlock):
-          move hardcoded path to DEFINE
-
-2004-04-28  David Schleef  <ds@schleef.org>
-
-       * gst/speed/gstspeed.c: (speed_parse_caps):  Fix caps parsing.
-       (bug #140064)
-
-2004-04-28  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_class_probe_devices):
-         Don't probe for playback device if we're a source element. Fixes
-         #139658.
-
-2004-04-29  Benjamin Otte  <otte@gnome.org>
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event),
-       (gst_id3_tag_chain):
-         rewrite buffer offset
-
-2004-04-28  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * configure.ac:
-       * ext/Makefile.am:
-       * ext/dts/Makefile.am:
-       * ext/dts/gstdtsdec.c: (gst_dtsdec_get_type),
-       (gst_dtsdec_base_init), (gst_dtsdec_class_init), (gst_dtsdec_init),
-       (gst_dtsdec_channels), (gst_dtsdec_renegotiate),
-       (gst_dtsdec_handle_event), (gst_dtsdec_update_streaminfo),
-       (gst_dtsdec_loop), (gst_dtsdec_change_state),
-       (gst_dtsdec_set_property), (gst_dtsdec_get_property),
-       (plugin_init):
-       * ext/dts/gstdtsdec.h:
-         New DTS decoder.
-       * ext/faad/gstfaad.c: (gst_faad_sinkconnect),
-       (gst_faad_srcconnect):
-         Add ESDS atom handling (.m4a).
-
-2004-04-27  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/divx/gstdivxdec.c: (plugin_init):
-         Remove comment that makes no sense.
-       * ext/mad/gstid3tag.c: (gst_id3_tag_set_property):
-         Fix for obvious typo that resulted in warnings during gst-register.
-       * ext/xvid/gstxviddec.c: (gst_xviddec_src_link),
-       (gst_xviddec_sink_link):
-         Fix caps negotiation a bit better.
-       * gst/qtdemux/qtdemux.c: (qtdemux_parse_trak):
-         We call this 'codec_data', not 'esds'.
-
-2004-04-27  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst/monoscope/gstmonoscope.c:
-         make sure we only provide 256x128
-       * gst/monoscope/monoscope.c: (monoscope_init):
-         assert size of 256x128
-
-2004-04-27  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * Makefile.am:
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_init), (gst_v4lsrc_fixate),
-       (gst_v4lsrc_getcaps), (gst_v4lsrc_buffer_free):
-          fixate to max width and height of device
-
-2004-04-27  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * Makefile.am:
-       * sys/v4l/gstv4l.c:
-       * sys/v4l/gstv4lsrc.c:
-       * sys/v4l/v4l_calls.c:
-       * sys/v4l/v4lsrc_calls.c:
-          fix for qc-usb driver which fakes having more than one buffer
-          by handing the same buffer twice, which confused GStreamer's/v4lsrc
-          buffer_free override
-          add debugging
-
-2004-04-27  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * Makefile.am:
-       * gst/videotestsrc/gstvideotestsrc.c:
-       (gst_videotestsrc_class_init), (gst_videotestsrc_change_state),
-       (gst_videotestsrc_init), (gst_videotestsrc_get),
-       (gst_videotestsrc_set_property), (gst_videotestsrc_get_property):
-       * gst/videotestsrc/gstvideotestsrc.h:
-          add num-buffers property
-
-       2004-04-26  Benjamin Otte  <otte@gnome.org>
-
-       * ext/mad/gstid3tag.c: (plugin_init):
-         set id3mux rank to NONE so it doesn't confuse spider
-         require audio/mpeg,mpegversion=1 in id3mux
-
-2004-04-26  Benjamin Otte  <otte@gnome.org>
-
-       * configure.ac:
-         detect faad correctly as non-working if it's indeed non-working
-
-2004-04-26  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * Makefile.am:
-       * ext/jpeg/gstjpegenc.c: (gst_jpegenc_get_type),
-       (gst_jpegenc_class_init), (gst_jpegenc_getcaps):
-        fix _getcaps so it only negotiates to its supported format
-
-2004-04-25  Benjamin Otte  <otte@gnome.org>
-
-       * gst/audioconvert/gstaudioconvert.c: (_fixate_caps_to_int):
-         fix memleak
-
-2004-04-23  Benjamin Otte  <otte@gnome.org>
-
-       * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
-         audio/x-raw-int with height rules! not. Now it's depth.
-
-2004-04-22  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/wavparse/gstwavparse.c: (gst_wavparse_create_sourcepad),
-       (gst_wavparse_parse_fmt), (gst_wavparse_handle_sink_event),
-       (gst_wavparse_loop):
-         Missing variable initialization. Add handling of DVI ADPCM. Fix
-         mis-parsing of LIST chunks. This works around a bug where we mis-
-         parse non-aligning LIST chunks (so LIST chunks where the contents
-         don't align with the actual LIST size). The correct fix is to use
-         rifflib, I'm not going to fix wavparse - too much work. All this
-         fixes #104878.
-
-2004-04-22  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
-
-       reviewed by Benjamin Otte  <otte@gnome.org>
-
-       * ext/shout/gstshout.c: (gst_icecastsend_change_state):
-         fix shoutcast not working (fixes #140844)
-
-2004-04-22  Benjamin Otte  <otte@gnome.org>
-
-       * ext/hermes/gsthermescolorspace.c:
-       (gst_hermes_colorspace_caps_remove_format_info):
-       * gst/colorspace/gstcolorspace.c:
-       (gst_colorspace_caps_remove_format_info):
-       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
-       (gst_ffmpegcolorspace_caps_remove_format_info):
-         s/gst_caps_simplify/gst_caps_do_simplify/
-
-2004-04-22  Benjamin Otte  <otte@gnome.org>
-
-       * gst-libs/gst/riff/riff-media.c:
-       (gst_riff_create_video_caps_with_data):
-         mpegversion is an int
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_base_init):
-         don't try to create pad templates with NULL caps, use any caps
-         instead.
-
-2004-04-20  David Schleef  <ds@schleef.org>
-
-       * ext/sdl/Makefile.am: Link against libgstinterfaces, not
-       libgstxoverlay.  jmmv@menta.net (Julio M. Merino Vidal)
-       (bug #140384)
-
-2004-04-20  Daniel Gazard  <daniel.gazard@epita.fr>
-
-       reviewed by David Schleef
-
-       * ext/mad/gstid3tag.c: Add stdlib.h
-       * gst/rtp/gstrtpgsmenc.c: same
-       * gst/tags/gstid3tag.c: same
-       * gst/udp/gstudpsrc.c: (gst_udpsrc_get): Fix GST_DISABLE_LOADSAVE
-       * gst/tcp/gsttcpsink.c: (gst_tcpsink_sink_link): Adjust
-       GST_DISABLE_LOADSAVE use.
-       * gst/udp/gstudpsink.c: (gst_udpsink_sink_link): Likewise.
-       * gst/tcp/gsttcpsrc.c: (gst_tcpsrc_get): Likewise.
-       * ext/gnomevfs/gstgnomevfssrc.c: Include <stdlib.h> (needed by
-       atol(3)).
-       * sys/oss/gstosselement.h: Include <sys/types.h> (needed for dev_t).
-       * gst/tags/gstvorbistag.c: Include <stdlib.h> (needed by
-       strtoul(3)).
-       * gst/rtp/gstrtpL16enc.c: Include <stdlib.h> (needed by random(3)).
-       * ext/mad/Makefile.am: (libgstmad_la_CFLAGS): Add $(MAD_CFLAGS)
-       $(ID3_CFLAGS).
-       * ext/libfame/Makefile.am: (libgstlibfame_la_CFLAGS): Add
-       $(LIBFAME_CFLAGS).
-
-2004-04-20  David Schleef  <ds@schleef.org>
-
-       * gst/realmedia/rmdemux.c:  This was supposed to part of the
-       last checkin.  Same idea.
-
-2004-04-20  Daniel Gazard  <daniel.gazard@epita.fr>
-
-       reviewed by David Schleef
-
-       * configure.ac: bump required gstreamer version to 0.8.1.1
-       because of following changes [--ds]
-
-       * gst-libs/gst/riff/riff-read.c:  Include gst/gstutils.h.
-       (gst_riff_peek_head, gst_riff_peek_list, gst_riff_read_list)
-       (gst_riff_read_header):  Use GST_READ_UINT*
-       macros to access possibly unaligned memory.
-
-       * gst/typefind/gsttypefindfunctions.c: Include gst/gstutils.h.
-       (mp3_type_find):  Use GST_READ_UINT*
-       macros to access possibly unaligned memory.
-       (mp3_type_find, mpeg1_parse_header, qt_type_find)
-       (speex_type_find): Likewise
-
-       * gst/tags/gstvorbistag.c: (ADVANCE): Likewise
-
-       * gst/qtdemux/qtdemux.c: Include stdlib.h (needed by realloc).
-       (QTDEMUX_GUINT32_GET, QTDEMUX_GUINT16_GET, QTDEMUX_FP32_GET)
-       (QTDEMUX_FP16_GET, QTDEMUX_FOURCC_GET)
-       (gst_qtdemux_loop_header, gst_qtdemux_loop_header)
-       (qtdemux_node_dump_foreach, qtdemux_tree_get_child_by_type)
-       (qtdemux_tree_get_sibling_by_type):  Use GST_READ_UINT*
-       macros to access possibly unaligned memory.
-
-       * gst/mpegstream/gstmpegpacketize.c: (parse_generic, parse_chunk):
-       Likewise.
-
-       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead)
-       (gst_mpeg_demux_parse_packet, gst_mpeg_demux_parse_pes): Likewise.
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
-       Likewise.
-
-       * gst/mpeg2sub/gstmpeg2subt.c: (GST_BUFFER_DATA)
-       (gst_mpeg2subt_chain_subtitle): Likewise.
-
-       * gst/mpeg1videoparse/gstmp1videoparse.c: (mp1videoparse_parse_seq)
-       (gst_mp1videoparse_time_code, gst_mp1videoparse_real_chain):
-       Likewise.
-
-       * gst/mpeg1sys/buffer.c: (mpeg1mux_buffer_update_audio_info):
-       Likewise.
-
-       * gst/cdxaparse/gstcdxaparse.c: (gst_bytestream_peek_bytes):
-       Likewise.
-
-       * gst/asfdemux/gstasfdemux.c: (_read_var_length, _read_uint):
-       Likewise.
-
-2004-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-          update required version of GStreamer because of GST_TIME_FORMAT
-
-2004-04-20  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_init):
-         remove leftover g_print
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
-         don't try setting only a subset of the caps. We don't want to kill
-         autoplugging on purpose
-
-2004-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/ximage/ximagesink.c: (plugin_init):
-       * sys/xvimage/xvimagesink.c: (plugin_init):
-          add debugging categories
-
-2004-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * po/en_GB.po:
-        * po/LINGUAS:
-          Adding en_GB translation (Gareth Owen)
-
-2004-04-20  David Schleef  <ds@schleef.org>
-
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_handle_sink_event),
-       (qtdemux_parse), (qtdemux_type_get), (qtdemux_dump_mvhd),
-       (qtdemux_dump_tkhd), (qtdemux_dump_stsd), (qtdemux_dump_unknown),
-       (qtdemux_parse_trak), (qtdemux_video_caps), (qtdemux_audio_caps):
-       A number of new features and hacks to extract the esds atom and
-       put it into the caps.  (bug #137724)
-
-2004-04-19  David Schleef  <ds@schleef.org>
-
-       * gconf/Makefile.am: Fix for non-GNU make
-       * gst-libs/gst/Makefile.am: Change directory order to handle
-       GstPlay linking with gstinterfaces
-       * gst-libs/gst/audio/make_filter: make use of tr portable
-       * gst-libs/gst/play/Makefile.am: Add intended \
-       * gst-libs/gst/xwindowlistener/xwindowlistener.c:
-       (gst_xwin_set_clips): Switch to ISO variadic macro. Use a
-       function prototype instead of void *.
-       * gst/ffmpegcolorspace/gstffmpegcodecmap.c: Switch to ISO variadic
-       macro.
-       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
-       (gst_ffmpegcolorspace_chain): wrap NULL in GST_ELEMENT_ERROR call
-       * gst/videofilter/make_filter: make use of tr portable
-       * pkgconfig/Makefile.am: Remove GNU extension in Makefile target
-
-2004-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * po/LINGUAS:
-       * po/uk.po:
-          Added Ukrainian translation (Maxim V. Dziumanenko)
-
-2004-04-18  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/gsm/gstgsmdec.c: (gst_gsmdec_init), (gst_gsmdec_getcaps),
-       (gst_gsmdec_link), (gst_gsmdec_chain):
-         Fix capsnego, simplify chain function slightly.
-       * gst/qtdemux/qtdemux.c: (qtdemux_audio_caps):
-         Add GSM.
-
-2004-04-18  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/wavparse/gstwavparse.c: (gst_wavparse_init),
-       (gst_wavparse_destroy_sourcepad), (gst_wavparse_create_sourcepad),
-       (gst_wavparse_parse_fmt), (gst_wavparse_change_state):
-         Hack to make wavparse work with spider (always -> sometimes pad).
-         Fixes #135862 && #140411.
-
-2004-04-18  Benjamin Otte  <otte@gnome.org>
-
-       * sys/oss/gstosselement.c: (gst_osselement_sync_parms),
-       (gst_osselement_rate_probe_check),
-       (gst_osselement_rate_check_rate), (gst_osselement_rate_add_rate):
-         get rid of \n in debug output
-
-2004-04-17  Iain <iain@prettypeople.org>
-
-       * gst/wavparse/gstwavparse.c (gst_wavparse_loop): Allow all events,
-       not just EOS.
-
-2004-04-17  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_get_type),
-       (gst_id3_tag_class_init), (gst_id3_tag_get_caps),
-       (gst_id3_tag_add_src_pad), (gst_id3_tag_init),
-       (gst_id3_tag_set_property), (gst_id3_tag_do_caps_nego),
-       (gst_id3_tag_src_link), (gst_id3_tag_chain),
-       (gst_id3_tag_change_state), (plugin_init):
-         deprecate id3tag element and replace with id3demux/id3mux.
-         great side effect: this ugly file is now even uglier, yay!
-       * ext/mad/gstmad.h:
-         remove non-available function
-         update for new get_type
-
-2004-04-17  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * configure.ac:
-         require mpeg2dec >= 0.4.0
-
-2004-04-17  Benjamin Otte  <otte@gnome.org>
-
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
-       (gst_xvimagesink_xcontext_get), (gst_xvimagesink_change_state),
-       (gst_xvimagesink_set_xwindow_id):
-         call GST_ELEMENT_ERROR whenever get_xcontext fails. Includes
-         assorted cleanup fixes.
-
-2004-04-16  David Schleef  <ds@schleef.org>
-
-       * sys/ximage/ximagesink.h: Compile fix for FreeBSD. (bug #140268)
-       * sys/xvimage/xvimagesink.h: same
-
-2004-04-16  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_open_file):
-          Fix GST_ELEMENT_ERROR with (NULL)
-
-2004-04-15  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-media.c:
-       (gst_riff_create_video_caps_with_data):
-         Add div[3456] as fourccs for DivX 3 (fixes #140137).
-
-2004-04-15  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-media.c:
-       (gst_riff_create_video_caps_with_data),
-       (gst_riff_create_video_caps), (gst_riff_create_audio_caps),
-       (gst_riff_create_video_template_caps),
-       (gst_riff_create_audio_template_caps):
-       * gst-libs/gst/riff/riff-media.h:
-       * gst-libs/gst/riff/riff-read.c:
-       (gst_riff_read_strf_vids_with_data), (gst_riff_read_strf_vids):
-       * gst-libs/gst/riff/riff-read.h:
-       * gst/avi/gstavidemux.c: (gst_avi_demux_add_stream):
-         Add MS RLE support. I added some functions to read out strf chunks
-         into strf chunks and the data behind it. This is usually color
-         palettes (as in RLE, but also in 8-bit RGB). Also use those during
-         caps creation. Lastly, add ADPCM (similar to wavparse - which
-         should eventually be rifflib based).
-       * gst/matroska/matroska-demux.c: (gst_matroska_demux_class_init),
-       (gst_matroska_demux_init), (gst_matroska_demux_reset):
-       * gst/matroska/matroska-demux.h:
-         Remove placeholders for some prehistoric tagging system. Didn't add
-         support for any tag system really anyway.
-       * gst/qtdemux/qtdemux.c:
-         Add support for audio/x-m4a (MPEG-4) through spider.
-       * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt),
-       (gst_wavparse_loop):
-         ADPCM support (#135862). Increase max. buffer size because we
-         cannot split buffers for ADPCM (screws references) and I've seen
-         files with 2048 byte chunks. 4096 seems safe for now.
-
-2004-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac: bump nano to 1
-
-=== release 0.8.1 ===
-
-2004-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac: releasing 0.8.1, "Comforting Sounds"
-
-2004-04-14  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
-         Fix typo in divxversion (3 instead of 4 for "DIVX" fourcc).
-         Fixes #140058
-
-2004-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_plugin_init):
-          lower rank of dvddemux so that it's not used for mpeg playback.
-
-2004-04-14  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * configure.ac:
-         save libs correctly when checking mad
-
-2004-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/mad/gstid3tag.c: (plugin_init):
-          lower rank of id3tag as proposed by Benjamin.  Fixes #139926.
-
-2004-04-13  David Schleef  <ds@schleef.org>
-
-       * common/m4/gst-feature.m4: Call -config scripts with
-       --plugin-libs if it is supported.
-       * gst/avi/gstavimux.c: (gst_avimux_vidsinkconnect): sequences of
-       JPEG images are image/jpeg.
-       * gst/debug/Makefile.am:
-       * gst/debug/negotiation.c: (gst_negotiation_class_init),
-       (gst_negotiation_getcaps), (gst_negotiation_pad_link),
-       (gst_negotiation_update_caps), (gst_negotiation_get_property),
-       (gst_negotiation_plugin_init): Add a property that acts like
-       filter caps.
-       * testsuite/gst-lint:  Move license checking to be a standard
-       test.
-
-2004-04-13  David Schleef  <ds@schleef.org>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_reset): Fix memleak.
-       patch from Sebastien Cote (bug #139958)
-
-2004-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * examples/gstplay/Makefile.am:
-       * examples/gstplay/player.c: (main):
-          make the commandline player example use gconf settings
-
-2004-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/libcaca/gstcacasink.c: (gst_cacasink_class_init),
-       (gst_cacasink_sinkconnect), (gst_cacasink_init),
-       (gst_cacasink_chain), (gst_cacasink_open), (gst_cacasink_close):
-          init/end library during state transition, not object
-          creation/disposal.  get rid of custom dispose handler.
-
-
-2004-04-12  Christian Schaller <Uraeus@gnome.org>
-
-       * sys/oss/gstosselement.c: s/lstat/stat/ from freeBSD, since it can
-       be a symlink
-
-2004-04-11  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_data):
-         Handle JUNK chunks inside data section. Prevents warnings.
-
-2004-04-11  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps),
-       (gst_riff_create_video_template_caps):
-         Add MS video v1.
-       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index),
-       (gst_avi_demux_stream_data):
-         Add support for "rec-list" chunks.
-
-2004-04-11  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
-         Fix another codecname mismatch.
-
-2004-04-11  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
-         Fix divx caps mismatch and move from video/x-jpeg to image/jpeg
-         so that MJPEG plays back.
-
-2004-04-10  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/mpeg1videoparse/gstmp1videoparse.c: (gst_mp1videoparse_init),
-       (gst_mp1videoparse_real_chain), (gst_mp1videoparse_change_state):
-       * gst/mpeg1videoparse/gstmp1videoparse.h:
-         Fix for some slight mis-cuts in buffer parsing, and for some
-         potential overflows or faults-causers. Adds disconts. Also fixes
-         #139105 while we're at it.
-
-2004-04-10  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * configure.ac:
-       * sys/v4l2/gstv4l2element.h:
-         Workaround for missing struct v4l2_buffer declaration in Suse 9
-         and Mandrake 10 linux/videodev2.h header file (#135919).
-
-2004-04-10  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_open_file):
-         Bail out if no filename was given.
-
-2004-04-10  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/v4l2/gstv4l2src.c: (gst_v4l2src_v4l2fourcc_to_caps),
-       (gst_v4l2_fourcc_from_structure):
-         Add Y41B/Y42B YUV formats (see #125732), fix Y41P (was typo'ed to
-         Y41B somewhere).
-
-2004-04-09  Benjamin Otte  <otte@gnome.org>
-
-       * ext/gnomevfs/gstgnomevfssink.c:
-       (_gst_boolean_allow_overwrite_accumulator),
-       (gst_gnomevfssink_class_init):
-         fix erase signal - if any handler returns false the file will not be
-         overwritten. If no handler is connected, the file will not be
-         overwritten either.
-         renamed signal to "allow-overwrite"
-       * ext/mad/gstid3tag.c: (tag_list_to_id3_tag_foreach):
-         free string when adding it to ID3 failed
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_event):
-         unref event when done
-       * gst/audioconvert/gstaudioconvert.c: (_fixate_caps_to_int):
-         free caps
-       * gst/typefind/gsttypefindfunctions.c:
-       (mpeg_video_stream_type_find):
-         fix invalid read
-
-2004-04-08  David Schleef  <ds@schleef.org>
-
-       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
-       (gst_ffmpegcolorspace_register): Change rank to PRIMARY.
-
-2004-04-08  David Schleef  <ds@schleef.org>
-
-       * gst/colorspace/gstcolorspace.c: Don't advertise a conversion
-       we don't support (bug #139532)
-
-2004-04-07  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/mad/gstmad.c: (gst_mad_handle_event),
-       (gst_mad_check_caps_reset), (gst_mad_chain),
-       (gst_mad_change_state):
-          only set explicit caps if they haven't been set before for
-          this stream.  MPEG-audio sample rate/channels aren't allowed
-          to change in-stream.
-          Fixes #139382
-
-2004-04-06  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_base_init),
-       (_gst_boolean_did_something_accumulator),
-       (gst_gnomevfssink_class_init), (gst_gnomevfssink_dispose),
-       (gst_gnomevfssink_init), (gst_gnomevfssink_set_property),
-       (gst_gnomevfssink_get_property), (gst_gnomevfssink_open_file),
-       (gst_gnomevfssink_close_file), (gst_gnomevfssink_chain),
-       (gst_gnomevfssink_change_state):
-         Fix erase signal. Don't erase by default. Remove handoff signal.
-         Remove erase property. Don't segfault. General cleanup.
-
-2004-04-07  Benjamin Otte  <otte@gnome.org>
-
-       * gst-libs/gst/gconf/test-gconf.c: (main):
-         add missing gst_init
-
-2004-04-07  Benjamin Otte  <otte@gnome.org>
-
-       * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_dispose):
-         free the mutexes, too
-
-2004-04-07  Benjamin Otte  <otte@gnome.org>
-
-       * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_dispose):
-         actually free the URI string
-       * ext/mad/gstid3tag.c: (gst_id3_tag_src_event):
-         compute offset correctly when passing discont events
-       * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event):
-         don't leak discont events
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_video_caps):
-         add some missing breaks so caps aren't copied randomly
-       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_get_video_stream):
-         if we realloc memory, we better use it
-
-2004-04-06  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/mad/gstmad.c: (normal_seek):
-         fix GST_FORMAT_TIME usage
-
-2004-04-05  David Schleef  <ds@schleef.org>
-
-       * ext/kio/kiosrc.cpp:  Undefine KDE_DEPRECATED so we can use
-       a deprecated function (hack!)
-
-2004-04-05  Benjamin Otte  <otte@gnome.org>
-
-       * ext/esd/esdmon.c: (gst_esdmon_get):
-         fix nonterminated vararg and memleak
-
-2004-04-05  Benjamin Otte  <otte@gnome.org>
-
-       * ext/ladspa/gstladspa.c: (gst_ladspa_class_init),
-       (gst_ladspa_init), (gst_ladspa_force_src_caps),
-       (gst_ladspa_set_property), (gst_ladspa_get_property),
-       (gst_ladspa_instantiate), (gst_ladspa_activate),
-       (gst_ladspa_deactivate), (gst_ladspa_loop), (gst_ladspa_chain):
-         clean up debugging
-
-2004-04-05  Stefan Kost <kost@imn.htwk-leipzig.de>
-
-       reviewed by Benjamin Otte  <otte@gnome.org>
-
-       * ext/ladspa/gstladspa.c: (gst_ladspa_class_init):
-         check for broken LADSPA parameters (fixes #138635)
-
-2004-04-05  Benjamin Otte  <otte@gnome.org>
-
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_getcaps):
-         advertise buffer-frames correctly on sinkpads
-
-2004-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/mad/gstmad.c: (gst_mad_get_type), (gst_mad_layer_get_type),
-       (gst_mad_mode_get_type), (gst_mad_emphasis_get_type),
-       (gst_mad_get_event_masks), (gst_mad_get_query_types), (index_seek),
-       (normal_seek), (gst_mad_src_event), (gst_mad_handle_event),
-       (gst_mad_check_caps_reset), (gst_mad_chain):
-        add more debugging, only reset caps when we're not in error state
-
-2004-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/mad/gstmad.c: add debugging category, comment + cleanups
-
-2004-04-05  Julio M. Merino Vidal  <jmmv@menta.net>
-
-       reviewed by Benjamin Otte  <otte@gnome.org>
-
-       * configure.ac:
-         fix == in test(1) operator
-
-2004-04-05  Julio M. Merino Vidal  <jmmv@menta.net>
-
-       reviewed by Benjamin Otte  <otte@gnome.org>
-
-       * configure.ac:
-         fix --export-symblos-regex to a working regex.
-
-2004-04-04  Benjamin Otte  <otte@gnome.org>
-
-       * sys/oss/.cvsignore:
-         add for oss_probe
-
-2004-04-03  Tim-Phillip Müller <t.i.m@zen.co.uk>
-
-       reviewed by Benjamin Otte  <otte@gnome.org>
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event):
-         add missing 'new_media' argument (fixes #138168)
-       * gst/matroska/matroska-demux.c:
-       (gst_matroska_demux_handle_seek_event):
-         add vararg terminator (fixes #138169)
-
-2004-04-02  David Schleef  <ds@schleef.org>
-
-       * ext/gdk_pixbuf/Makefile.am:  Make sure gstgdkanimation.h is
-       disted (bug #138914)
-
-2004-04-01  Benjamin Otte  <otte@gnome.org>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_change_state),
-       (gst_alsa_close_audio):
-         handle case better where a soundcard can't pause
-       * ext/ogg/gstoggdemux.c:
-         don't crash when we get events but don't have pads yet
-
-2004-04-01  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/oss/gstosselement.c: (gst_osselement_probe_caps):
-          throw an error if we couldn't probe any caps.
-
-2004-04-01  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * ext/dvdnav/gst-dvd:
-       Add a really simple sample DVD player
-
-2004-04-01  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * ext/a52dec/gsta52dec.c: (gst_a52dec_get_type), (gst_a52dec_init),
-       (gst_a52dec_push), (gst_a52dec_handle_event),
-       (gst_a52dec_update_streaminfo), (gst_a52dec_loop),
-       (gst_a52dec_change_state):
-       * ext/a52dec/gsta52dec.h:
-         Use a debug category, Output timestamps correctly
-         Emit tag info, Handle events, tell liba52dec about cpu
-         capabilities so it can use MMX etc.
-       * ext/dv/gstdvdec.c: (gst_dvdec_loop), (gst_dvdec_change_state):
-         Fix a crasher accessing invalid memory
-       * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_init),
-       (dvdnavsrc_update_highlight), (dvdnavsrc_loop),
-       (dvdnavsrc_get_event_mask), (dvdnav_handle_navigation_event),
-       (dvdnavsrc_event), (dvdnavsrc_get_formats), (dvdnavsrc_convert),
-       (dvdnavsrc_query):
-         Some support for byte-format seeking.
-         Small fixes for still frames and menu button overlays
-       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_get_type),
-       (gst_mpeg2dec_alloc_buffer):
-         Use a debug category. Adjust the report level of several items to
-         LOG. Call mpeg2_custom_fbuf to mark our buffers as 'custom buffers'
-         so it doesn't lose the GstBuffer pointer
-       * gst/debug/Makefile.am:
-       * gst/debug/gstdebug.c: (plugin_init):
-       * gst/debug/gstnavseek.c: (gst_navseek_get_type),
-       (gst_navseek_base_init), (gst_navseek_class_init),
-       (gst_navseek_init), (gst_navseek_seek),
-       (gst_navseek_handle_src_event), (gst_navseek_set_property),
-       (gst_navseek_get_property), (gst_navseek_chain),
-       (gst_navseek_plugin_init):
-       * gst/debug/gstnavseek.h:
-         Add the navseek debug element for seeking back and forth in a
-         video stream using arrow keys.
-       * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_get_type),
-       (gst_mpeg2subt_base_init), (gst_mpeg2subt_class_init),
-       (gst_mpeg2subt_init), (gst_mpeg2subt_finalize),
-       (gst_mpeg2subt_getcaps_video), (gst_mpeg2subt_link_video),
-       (gst_mpeg2subt_handle_video), (gst_mpeg2subt_src_event),
-       (gst_mpeg2subt_parse_header), (gst_get_nibble),
-       (gst_setup_palette), (gst_get_rle_code), (gst_draw_rle_line),
-       (gst_merge_uv_data), (gst_mpeg2subt_merge_title),
-       (gst_update_still_frame), (gst_mpeg2subt_handle_subtitle),
-       (gst_mpeg2subt_handle_dvd_event), (gst_mpeg2subt_loop):
-       * gst/mpeg2sub/gstmpeg2subt.h:
-         Pretty much a complete rewrite. Now a loopbased element. May still
-         require work to properly synchronise subtitle buffers.
-       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_private),
-       (gst_dvd_demux_send_subbuffer):
-       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer):
-         Don't attempt to create subbuffers of size 0
-         Reduce a couple of error outputs to warnings.
-       * gst/y4m/gsty4mencode.c: (gst_y4mencode_sinkconnect),
-       (gst_y4mencode_chain):
-       Output the y4m frame header correctly.
-
-2004-04-01  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/adder/gstadder.c: (gst_adder_get_type), (gst_adder_loop):
-          throw errors instead of allowing SIGFPE
-
-2004-04-01  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-libs/gst/gconf/gconf.c: (gst_gconf_get_string),
-       (gst_gconf_render_bin_from_key):
-          leak plugging and style fixing
-
-2004-03-31  David Schleef  <ds@schleef.org>
-
-       * gst/audioscale/gstaudioscale.c: (gst_audioscale_expand_value),
-       (gst_audioscale_getcaps): Fix getcaps to expand and union lists.
-       (bug #138225)
-       * gst/debug/Makefile.am:
-       * gst/debug/breakmydata.c: (gst_break_my_data_plugin_init):
-       * gst/debug/gstdebug.c: (plugin_init):  Merge elements into one
-       plugin.
-       * gst/debug/negotiation.c: (gst_gst_negotiation_get_type),
-       (gst_negotiation_base_init), (gst_negotiation_class_init),
-       (gst_negotiation_init), (gst_negotiation_getcaps),
-       (gst_negotiation_pad_link), (gst_negotiation_chain),
-       (gst_negotiation_set_property), (gst_negotiation_get_property),
-       (gst_negotiation_plugin_init):  New element to talk about random
-       negotiation things happening in a pipeline.
-
-2004-03-31  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/adder/gstadder.c: (gst_adder_get_type), (gst_adder_loop):
-          fix integer addition with help of Stefan Kost
-
-2004-03-31  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * po/nl.po: updated Dutch translation (Elros Cyriatan)
-
-2004-03-30  David Schleef  <ds@schleef.org>
-
-       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_alloc_buffer),
-       (gst_mpeg2dec_negotiate_format):  Handle Y42B-format MPEG
-       video, patch from Matthew.Spencer@eu.sony.com (Matthew Spencer)
-       (bug #137504)
-       * ext/mpeg2dec/gstmpeg2dec.h:
-
-2004-03-30  David Schleef  <ds@schleef.org>
-
-       * ext/gdk_pixbuf/Makefile.am: Remove spurious rules. (bug #136527)
-
-2004-03-30  David Schleef  <ds@schleef.org>
-
-       * tools/gst-launch-ext-m.m:  Applied patch from gnome@flyn.org (W.
-       Michael Petullo) to handle .mov
-
-2004-03-30  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * sys/oss/gstosselement.c: (gst_osselement_probe_caps),
-       (gst_osselement_rate_check_rate):
-         probe caps correctly for sound cards that only support one format
-
-2004-03-30  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/kio/kiosrc.cpp: (process_events):
-         update handling event processing if inside KDE - untested
-
-2004-03-29  David Schleef  <ds@schleef.org>
-
-       * ext/hermes/gsthermescolorspace.c: (plugin_init): decrease rank
-       by 2 to not interfere with other colorspaces.
-       * ext/pango/gsttextoverlay.c: (plugin_init): change rank to NONE
-       * gst/colorspace/gstcolorspace.c: (plugin_init): decrease rank by
-       one to not interfere with ffmpeg_colorspace.
-
-2004-03-29  David Schleef  <ds@schleef.org>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_fixate): Don't fixate fields that
-       aren't in the caps.
-       * gst/sine/gstsinesrc.c: change rate caps to [1,MAX]
-       * gst/videocrop/gstvideocrop.c: (plugin_init): Change rank to NONE.
-
-2004-03-30  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst-libs/gst/riff/riff-media.c:
-         fail on error, don't try to set stuff on NULL caps
-
-2004-03-30  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * configure.ac:
-       * ext/Makefile.am:
-       * ext/kio/Makefile.am:
-       * ext/kio/kioreceiver.cpp:
-       * ext/kio/kioreceiver.h:
-       * ext/kio/kiosrc.cpp:
-       * ext/kio/kiosrc.h:
-         add experimental kiosrc plugin
-       * ext/alsa/gstalsaplugin.c: (plugin_init):
-         initialize debugging category only when we're sure registering the
-         plugins worked.
-
-2004-03-29  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * examples/gstplay/player.c: (main):
-       * gst-libs/gst/play/play.c: (gst_play_class_init),
-       (gst_play_set_location), (gst_play_set_data_src),
-       (gst_play_set_video_sink), (gst_play_set_audio_sink),
-       (gst_play_set_visualization), (gst_play_connect_visualization):
-          check return values of element_set_state and return FALSE where
-          failed
-
-2004-03-29  Benjamin Otte  <otte@gnome.org>
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event):
-         try harder to check if an event is really a discont
-
-2004-03-29  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * po/LINGUAS: adding Azerbaijani (Mətin Əmirov)
-       * po/az.po:
-
-2004-03-28  Benjamin Otte  <otte@gnome.org>
-
-       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_private):
-       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead),
-       (gst_mpeg_demux_parse_packet), (gst_mpeg_demux_parse_pes):
-         get rid of non-standard "..." ranges in case statements.
-
-2004-03-27  Martin Soto  <martinsoto@users.sourceforge.net>
-
-       * gst/mpegstream/gstmpegdemux.c:
-       * gst/mpegstream/gstmpegdemux.h: Complete overhaul. All DVD
-       specific functionality split to the new dvddemux element.
-       * gst/mpegstream/gstdvddemux.c:
-       * gst/mpegstream/gstdvddemux.h: New demultiplexer for DVD (VOB)
-       streams, derived from mpegdemux.
-       * gst/mpegstream/gstmpegparse.c: Discontinuity handling cleaned
-       up. SCR based timestamp rewriting can be turned off (will probably
-       completely disappear soon).
-       * ext/dvdnav/dvdnavsrc.c: Changes resulting from a few months
-       hacking. General cleanup. All printf statements replaced by
-       debugging messages. Almost complete libdvdnav support.
-       (dvdnavsrc_class_init): Got rid of unnecessary signals (replaced
-       by events. New properties for audio and subpicture languages.
-       (dvdnavsrc_update_highlight): Now uses events.
-       (dvdnavsrc_user_op): Cleaned up.
-       (dvdnavsrc_get): Renamed to dvdnavsrc_loop (element is now loop
-       based). Lots of cleanup, and propper support for most libdvdnav
-       events.
-       (dvdnavsrc_make_dvd_event): New function.
-       (dvdnavsrc_make_dvd_nav_packet_event): New function.
-       (dvdnavsrc_make_clut_change_event): New function.
-
-2004-03-26  Benjamin Otte  <otte@gnome.org>
-
-       * gst/typefind/gsttypefindfunctions.c: (theora_type_find):
-         fix bug where typefinding would claim it's theora whenever less then
-         7 bytes of data were available
-
-2004-03-25  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/law/alaw-decode.c: (alawdec_getcaps), (alawdec_link),
-       (gst_alawdec_base_init), (gst_alawdec_class_init),
-       (gst_alawdec_init), (gst_alawdec_chain):
-       * gst/law/alaw-encode.c: (alawenc_getcaps), (alawenc_link),
-       (gst_alawenc_base_init), (gst_alawenc_class_init),
-       (gst_alawenc_init), (gst_alawenc_chain):
-       * gst/law/mulaw-decode.c: (mulawdec_getcaps), (mulawdec_link),
-       (gst_mulawdec_base_init), (gst_mulawdec_class_init),
-       (gst_mulawdec_init), (gst_mulawdec_chain):
-       * gst/law/mulaw-encode.c: (mulawenc_getcaps), (mulawenc_link),
-       (gst_mulawenc_base_init), (gst_mulawenc_class_init),
-       (gst_mulawenc_init), (gst_mulawenc_chain):
-         Fix capsnego in all four, remove the unused property functions and
-         simplify the chain functions slightly. I guess we could use macros
-         or something similar for those, since the code is so similar, but
-         I'm currently too lazy...
-
-2004-03-24  David Schleef  <ds@schleef.org>
-
-       * sys/oss/gstosselement.c: (gst_osselement_sync_parms),
-       (gst_osselement_close_audio), (gst_osselement_probe_caps),
-       (gst_osselement_get_format_structure),
-       (gst_osselement_rate_probe_check), (gst_osselement_rate_add_range),
-       (gst_osselement_rate_check_rate), (gst_osselement_rate_add_rate),
-       (gst_osselement_rate_int_compare): Add code to handle rate probing
-       (bug #120883)
-       * sys/oss/gstosselement.h: same
-       * sys/oss/gstosssink.c: (gst_osssink_init), (gst_osssink_getcaps):
-       Use rate probing provided by osselement.
-       * sys/oss/gstosssrc.c: (gst_osssrc_init), (gst_osssrc_getcaps): same
-
-2004-03-24  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/xvid/gstxvidenc.c: (gst_xvidenc_set_property),
-       (gst_xvidenc_get_property):
-         ulong/int mess-up.
-
-2004-03-24  David Schleef  <ds@schleef.org>
-
-       * ext/speex/gstspeexdec.c: (gst_speexdec_base_init),
-       (gst_speexdec_init):
-       * ext/speex/gstspeexenc.c: (gst_speexenc_base_init),
-       (gst_speexenc_init):  Create the pad template correctly (from
-       the static pad template, not a NULL pointer.)
-
-2004-03-25  Benjamin Otte  <otte@gnome.org>
-
-       * gst/debug/Makefile.am:
-       * gst/debug/breakmydata.c:
-         add element that quasi-randomly changes bytes in the stream.
-         Intended use is robustness checking of demuxers and decoders in
-         media tests.
-
-2004-03-24  Benjamin Otte  <otte@gnome.org>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_open_audio),
-       (gst_alsa_probe_hw_params):
-       * ext/alsa/gstalsa.h:
-         debugging output fixes
-
-2004-03-24  Benjamin Otte  <otte@gnome.org>
-
-       * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_set_property):
-         don't g_return_if_fail if element is PLAYING, fail silently as every
-         other element.
-       * gst/effectv/gstquark.c: (gst_quarktv_chain):
-         only fix needed for cast lvalue issues in gst-plugins
-       * gst/volenv/gstvolenv.c: (gst_volenv_init):
-         add proxy_getcaps
-
-2004-03-24  Benjamin Otte  <otte@gnome.org>
-
-       * gst/level/gstlevel.c: (gst_level_init):
-         add proxying getcaps function, so level doesn't advertise impossible
-         caps
-
-2004-03-24  David Schleef  <ds@schleef.org>
-
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_handle_sink_event),
-       (gst_qtdemux_loop_header), (qtdemux_parse_moov), (qtdemux_parse),
-       (qtdemux_node_dump_foreach), (qtdemux_dump_mvhd),
-       (qtdemux_dump_tkhd), (qtdemux_dump_elst), (qtdemux_dump_mdhd),
-       (qtdemux_dump_hdlr), (qtdemux_dump_vmhd), (qtdemux_dump_dref),
-       (qtdemux_dump_stsd), (qtdemux_dump_stts), (qtdemux_dump_stss),
-       (qtdemux_dump_stsc), (qtdemux_dump_stsz), (qtdemux_dump_stco),
-       (qtdemux_dump_co64), (qtdemux_dump_dcom), (qtdemux_dump_cmvd),
-       (qtdemux_parse_tree), (qtdemux_parse_trak):  Fix debugging
-       messages.  Divide the chunk size by the compression ratio
-       (needed for MACE audio)
-
-2004-03-23  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
-         Fix buffer overflow read error.
-
-2004-03-23  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsa.h:
-         Remove unused entry.
-       * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
-         Add cinepak.
-       * gst/videodrop/gstvideodrop.c: (gst_videodrop_getcaps),
-       (gst_videodrop_link), (gst_videodrop_chain):
-         Fix, sort of. Was horribly broken with new capsnego. Bah...
-
-2004-03-23  Jeremy Simon  <jesimon@libertysurf.fr>
-
-       * gst/typefind/gsttypefindfunctions.c: (ape_type_find),
-       (plugin_init):
-       Add a monkeysaudio typefind function
-
-2004-03-23  Johan Dahlin  <johan@gnome.org>
-
-       * gst-libs/gst/play/play.c (gst_play_audio_fixate)
-       (gst_play_video_fixate): Check so the structure has the field
-       before trying to fixate them, this makes it possible to have
-       fakesinks for video and audio output without printing errors on
-       the output console.
-
-2004-03-22  David Schleef  <ds@schleef.org>
-
-       * sys/oss/Makefile.am:
-       * sys/oss/oss_probe.c: (main), (probe_check), (add_range),
-       (check_rate), (add_rate):  Rate probing test app.
-
-2004-03-21  Benjamin Otte  <otte@gnome.org>
-
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link),
-       (_fixate_caps_to_int), (gst_audio_convert_fixate):
-         add a fixation function that pretty much does the right thing (fixes
-         #137556)
-
-2004-03-20  David I. Lehn  <dlehn@users.sourceforge.net>
-
-       * configure.ac: GST_PACKAGE default: s/GStreamer/GStreamer Plugins/
-
-2004-03-20  Tim-Phillip Müller <t.i.m@zen.co.uk>
-
-       reviewed by: Benjamin Otte  <otte@gnome.org>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
-         terminate gst_event_new_discontinuous correctly (fixes parts of
-         #137711)
-
-2004-03-19  David Schleef  <ds@schleef.org>
-
-       * gst-libs/gst/Makefile.am:  Enable xoverlay unconditionally,
-       since it doesn't depend on X, and it's part of our ABI.
-
-2004-03-19  Iain <iain@prettypeople.org>
-
-       * gst/interleave/deinterleave.c (deinterleave_sink_link): Use the
-       is_int in the structure, not the local variable.
-
-2004-03-19  David Schleef  <ds@schleef.org>
-
-       * ext/librfb/gstrfbsrc.c: (gst_rfbsrc_change_state),
-       (gst_rfbsrc_init), (gst_rfbsrc_getcaps), (gst_rfbsrc_fixate),
-       (gst_rfbsrc_link), (gst_rfbsrc_paint_rect), (gst_rfbsrc_get):
-       Improvements in caps negotiation.
-
-2004-03-18  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * po/LINGUAS:
-       * po/af.po:
-          adding Afrikaans (Petri Jooste)
-
-2004-03-18  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
-       (gst_ffmpegcolorspace_chain):
-        throw error instead of g_critical (#137588)
-
-2004-03-18  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * Makefile.am:
-       * configure.ac:
-          dist common and m4 correctly
-       * po/sv.po:
-
-2004-03-17  David Schleef  <ds@schleef.org>
-
-       * pkgconfig/gstreamer-media-info.pc.in:  Add Version.
-       (bug #137348)
-
-2004-03-17  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * po/LINGUAS:
-       * po/sv.po:
-          adding Swedish translation (Christian Rose)
-
-2004-03-17  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * Makefile.am: use release.mak
-
-2004-03-16  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * common/ChangeLog:
-       * common/gst-autogen.sh:
-          add some explanation about the version detection
-       * configure.ac:
-          fix X check
-
-2004-03-16  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac: bump nano to 1
-
-=== release 0.8.0 ===
-
-2004-03-16  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac: release 0.8.0, "Pharmaceutical Itch"
-
-2004-03-16  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-          update libtool version
-       * gst-libs/gst/media-info/Makefile.am:
-          actually use libtool version
-
-2004-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac: fix speex detection to work with 1.0 but not 1.1
-
-2004-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-       * gst-plugins.spec.in:
-       * pkgconfig/Makefile.am:
-       * pkgconfig/gstreamer-gconf-uninstalled.pc.in:
-       * pkgconfig/gstreamer-interfaces-uninstalled.pc.in:
-       * pkgconfig/gstreamer-libs-uninstalled.pc.in:
-       * pkgconfig/gstreamer-libs.pc.in:
-       * pkgconfig/gstreamer-media-info-uninstalled.pc.in:
-       * pkgconfig/gstreamer-play-uninstalled.pc.in:
-       * pkgconfig/gstreamer-plugins-uninstalled.pc.in:
-       * pkgconfig/gstreamer-plugins.pc.in:
-          remove @VERSION@ from some of the pc files since core and plugins
-          are decoupled.
-          created gstreamer-plugins.pc as it's a better name, but keeping
-          -libs around for now to get fixes upstream done first.
-
-2004-03-15  Julien MOUTTE <julien@moutte.net>
-
-       * gst-libs/gst/play/play.c: (gst_play_get_framerate),
-       (gst_play_get_sink_element): First draft of gst_play_get_framerate.
-       * gst-libs/gst/play/play.h:
-
-2004-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * *.c, *.cc: don't mix tabs and spaces
-
-2004-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-libs/gst/play/play.c: (gst_play_pipeline_setup):
-          use the new ffmpegcolorspace
-       * gst-plugins.spec.in:
-          package new colorspace and media-info
-       * configure.ac:
-       * pkgconfig/Makefile.am:
-          fix some more disting issues
-       * pkgconfig/gstreamer-media-info-uninstalled.pc.in:
-       * pkgconfig/gstreamer-media-info.pc.in:
-          generate media-info pc files
-
-2004-03-15  Johan Dahlin  <johan@gnome.org>
-
-       * *.h: Revert indenting
-
-2004-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-          adding ffmpegcolorspace element
-       * gst/ffmpegcolorspace/Makefile.am:
-       * gst/ffmpegcolorspace/avcodec.h:
-       * gst/ffmpegcolorspace/common.h:
-       * gst/ffmpegcolorspace/dsputil.c: (dsputil_static_init):
-       * gst/ffmpegcolorspace/dsputil.h:
-       * gst/ffmpegcolorspace/gstffmpeg.c: (plugin_init):
-       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
-       (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_pix_fmt_to_caps),
-       (gst_ffmpeg_caps_to_pix_fmt):
-       * gst/ffmpegcolorspace/gstffmpegcodecmap.h:
-       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
-       (gst_ffmpegcolorspace_caps_remove_format_info),
-       (gst_ffmpegcolorspace_getcaps), (gst_ffmpegcolorspace_pad_link),
-       (gst_ffmpegcolorspace_get_type), (gst_ffmpegcolorspace_base_init),
-       (gst_ffmpegcolorspace_class_init), (gst_ffmpegcolorspace_init),
-       (gst_ffmpegcolorspace_chain), (gst_ffmpegcolorspace_change_state),
-       (gst_ffmpegcolorspace_set_property),
-       (gst_ffmpegcolorspace_get_property),
-       (gst_ffmpegcolorspace_register):
-       * gst/ffmpegcolorspace/imgconvert.c:
-       (avcodec_get_chroma_sub_sample), (avcodec_get_pix_fmt_name),
-       (avcodec_get_pix_fmt), (avpicture_fill), (avpicture_layout),
-       (avpicture_get_size), (avcodec_get_pix_fmt_loss),
-       (avg_bits_per_pixel), (avcodec_find_best_pix_fmt1),
-       (avcodec_find_best_pix_fmt), (img_copy_plane), (img_copy),
-       (yuv422_to_yuv420p), (yuv422_to_yuv422p), (yuv422p_to_yuv422),
-       (C_JPEG_TO_CCIR), (img_convert_init), (img_apply_table),
-       (shrink41), (shrink21), (shrink12), (shrink22), (shrink44),
-       (grow21_line), (grow41_line), (grow21), (grow22), (grow41),
-       (grow44), (conv411), (gif_clut_index), (build_rgb_palette),
-       (bitcopy_n), (mono_to_gray), (monowhite_to_gray),
-       (monoblack_to_gray), (gray_to_mono), (gray_to_monowhite),
-       (gray_to_monoblack), (avpicture_alloc), (avpicture_free),
-       (is_yuv_planar), (img_convert), (get_alpha_info_pal8),
-       (img_get_alpha_info), (deinterlace_line),
-       (deinterlace_line_inplace), (deinterlace_bottom_field),
-       (deinterlace_bottom_field_inplace), (avpicture_deinterlace):
-       * gst/ffmpegcolorspace/imgconvert_template.h:
-       * gst/ffmpegcolorspace/mem.c: (av_malloc), (av_realloc), (av_free):
-       * gst/ffmpegcolorspace/mmx.h:
-       * gst/ffmpegcolorspace/utils.c: (avcodec_init):
-          adding ffmpegcolorspace element supplied by Ronald after cleaning
-          up and pulling in the right bits of upstream source.
-          I'm sure a better C/compiler wizard could do some cleaning up (for
-          example use GLIB's malloc stuff), but as a first pass this
-          works very well
-
-2004-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/alsa/gstalsa.h:
-         I assume Ronald forgot to commit the change to have cardname
-          as a struct member.  Expect some public spanking at the next
-          opportunity.
-
-2004-03-15  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_get_property),
-       (gst_alsa_open_audio), (gst_alsa_close_audio):
-       * ext/alsa/gstalsa.c:
-         Don't open the device if we're a mixer (= padless).
-       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_class_init),
-       (gst_alsa_mixer_init), (gst_alsa_mixer_open),
-       (gst_alsa_mixer_close), (gst_alsa_mixer_change_state):
-         Open mixer during state change rather than during object
-         initialization. Also, get a device name. Currently in a somewhat
-         hackish fashion, but I didn't really find something better.
-
-2004-03-14  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * *.c, *.h: run gst-indent
-
-2004-03-14  Benjamin Otte  <otte@gnome.org>
-
-       * gst/modplug/gstmodplug.cc:
-       * gst/modplug/gstmodplug.h:
-         set correct timestamps on outgoing buffers
-
-2004-03-14  Benjamin Otte  <otte@gnome.org>
-
-       * gst/modplug/gstmodplug.cc:
-         handle events - don't do crap when a discont arrives that's not
-         necessary
-         This allows correct loading and playback of mods in Rhythmbox
-
-2004-03-14  Benjamin Otte  <otte@gnome.org>
-
-       * configure.ac:
-       * gst-libs/gst/gconf/Makefile.am:
-       * pkgconfig/Makefile.am:
-         move gstreamer-gconf pkgconfig files to pkgconfig/ dir. Make sure
-         they get rebuilt properly
-       * configure.ac:
-         when checking for vorbis, try pkgconfig first.
-       * gst/modplug/gstmodplug.cc:
-         add fixate function
-
-2004-03-14  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/qtdemux/qtdemux.c: (qtdemux_parse_trak):
-         Fix for obvious mistake, where we first shift the offset and then
-         read a samplesize element assuming the old offset. Note that this
-         part still has something weird, i.e. my movies containing those
-         don't actually play well, but at least there's something that looks
-         like sound now.
-
-2004-03-14  Jan Schmidt  <thaytan@mad.scientist.com>
-       * gst/typefind/gsttypefindfunctions.c: (speex_type_find),
-       (plugin_init):
-       Add a typefind function for speex format
-
-2004-03-13  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_video_caps),
-       (gst_asf_demux_setup_pad):
-         Use 25fps as our "fake" fps value (marked for fixage in 0.9.x)
-         instead of 0. Reason is simple: some elements have a fps range
-         of 1-max instead of 0-max. So now ASF video actually works.
-
-2004-03-13  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * po/LINGUAS:
-       * po/sr.po:
-         adding serbian as a language
-
-2004-03-13  Benjamin Otte  <otte@gnome.org>
-
-       * gst/sine/gstsinesrc.c: (gst_sinesrc_get):
-         return taglist correctly from _get function, don't gst_pad_push it.
-         (fixes #137042)
-
-2004-03-13  Jan Schmidt  <thaytan@mad.scientist.com>
-       * ext/alsa/gstalsa.c: (gst_alsa_class_probe_devices):
-
-2004-03-13  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_free_list):
-       * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_class_init),
-       (gst_alsa_mixer_track_new):
-       * ext/alsa/gstalsamixertrack.h:
-         Fix ancient leftovers... MixerTrack is a GObject.
-
-2004-03-13  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_class_probe_devices):
-       * sys/oss/gstosselement.c: (gst_osselement_class_probe_devices):
-         Don't block during probing...
-
-2004-03-12  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_get_type), (gst_alsa_class_init),
-       (gst_alsa_get_property), (gst_alsa_probe_get_properties),
-       (gst_alsa_class_probe_devices), (gst_alsa_class_list_devices),
-       (gst_alsa_probe_probe_property), (gst_alsa_probe_needs_probe),
-       (gst_alsa_probe_get_values), (gst_alsa_probe_interface_init),
-       (gst_alsa_open_audio), (gst_alsa_close_audio):
-       * ext/alsa/gstalsa.h:
-         Add propertyprobe interface implementation, add some device-name
-         property, all this so that it looks good in gnome-volume-control.
-
-2004-03-12  David Schleef  <ds@schleef.org>
-
-       * configure.ac: the Hermes library controls hermescolorspace, not
-       colorspace.
-       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_base_init),
-       (gst_mpeg2dec_init): minor pet peeve: disable code with #ifdef,
-       not /* */
-       * ext/sdl/sdlvideosink.c: Change XID to unsigned long.
-       * ext/sdl/sdlvideosink.h: ditto.
-       * gst/colorspace/gstcolorspace.c: Fix old comments about Hermes
-
-2004-03-12  Benjamin Otte  <otte@gnome.org>
-
-       * gst-libs/gst/xoverlay/xoverlay.c: (gst_x_overlay_set_xwindow_id),
-       (gst_x_overlay_got_xwindow_id):
-       * gst-libs/gst/xoverlay/xoverlay.h:
-         replace XID with unsigned long to get rid of the xlibs dependency in
-         XOverlay (fixes #137004)
-
-2004-03-13  Jan Schmidt  <thaytan@mad.scientist.com>
-       * gst/effectv/gstaging.c: (gst_agingtv_base_init),
-       (gst_agingtv_setup):
-       * gst/effectv/gstdice.c: (gst_dicetv_get_type),
-       (gst_dicetv_base_init), (gst_dicetv_class_init),
-       (gst_dicetv_setup), (gst_dicetv_init), (gst_dicetv_draw):
-       * gst/effectv/gstedge.c: (gst_edgetv_get_type),
-       (gst_edgetv_base_init), (gst_edgetv_class_init), (gst_edgetv_init),
-       (gst_edgetv_setup), (gst_edgetv_rgb32):
-       * gst/effectv/gsteffectv.c:
-       * gst/effectv/gstquark.c: (gst_quarktv_link), (gst_quarktv_init),
-       (gst_quarktv_set_property):
-       * gst/effectv/gstrev.c: (gst_revtv_get_type),
-       (gst_revtv_base_init), (gst_revtv_class_init), (gst_revtv_init),
-       (gst_revtv_setup), (gst_revtv_rgb32):
-       * gst/effectv/gstshagadelic.c: (gst_shagadelictv_get_type),
-       (gst_shagadelictv_base_init), (gst_shagadelictv_class_init),
-       (gst_shagadelictv_init), (gst_shagadelictv_setup),
-       (gst_shagadelictv_rgb32):
-       * gst/effectv/gstvertigo.c: (gst_vertigotv_get_type),
-       (gst_vertigotv_base_init), (gst_vertigotv_class_init),
-       (gst_vertigotv_setup), (gst_vertigotv_init), (gst_vertigotv_rgb32):
-       * gst/effectv/gstwarp.c:
-       Port everything that can be ported to videofilter and fix up the caps.
-       Can someone with a big-endian machine please check these?
-
-2004-03-10  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/oss/gstosssink.c: (gst_osssink_init), (gst_osssink_get_time),
-       (gst_osssink_chain), (gst_osssink_change_state):
-         Latest fixes for A/V sync, audio playback and such. This is about
-         all... MPEG playback issues are mostly related to the async build-
-         up of MPEG files, I cannot fix that. Use basicgthread to solve it.
-
-2004-03-10  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       patch from: Stephane Loeuillet
-
-       * configure.ac:
-         use pkg-config for some libraries, falling back to the old .m4 way
-          (fixes #131270)
-       * m4/libdv.m4:
-          removed
-
-2004-03-10  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-       * tools/Makefile.am:
-       * tools/Makefile.in:
-       * tools/gst-launch-ext-m.m:
-       * tools/gst-launch-ext.1.in:
-       * tools/gst-visualise-m.m:
-       * tools/gst-visualise.1:
-       * tools/gst-visualise.1.in:
-          reorganizing generation of script tools
-
-2004-03-10  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/divx/gstdivxdec.c:
-         Downgrade priority. We prefer ffdec_mpeg4.
-       * ext/faad/gstfaad.c: (gst_faad_srcgetcaps), (gst_faad_srcconnect),
-       (gst_faad_chain), (gst_faad_change_state):
-         Fix capsnego. Doesn't work for some sounds because we don't have
-         a 5:1 to stereo element.
-       * ext/xvid/gstxvid.c: (plugin_init):
-         Add priority.
-       * sys/oss/gstosssink.c: (gst_osssink_init), (gst_osssink_chain),
-       (gst_osssink_change_state):
-         Add discont handling.
-
-2004-03-09  Colin Walters  <walters@verbum.org>
-
-       * gst/audioconvert/gstaudioconvert.c: Fix typo in width 8
-       conversion.
-
-2004-03-09  Benjamin Otte  <otte@gnome.org>
-
-       * gst-libs/gst/mixer/mixer.c: (gst_mixer_class_init):
-         the signals take 2 arguments
-
-2004-03-09  David Schleef  <ds@schleef.org>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_request_new_pad),
-       (gst_alsa_fixate): Add fixate function.  (bug #136686)
-       * ext/alsa/gstalsa.h:
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_init):
-
-2004-03-09  Benjamin Otte  <otte@gnome.org>
-
-       * ext/mikmod/gstmikmod.c: (gst_mikmod_init), (gst_mikmod_loop),
-       (gst_mikmod_change_state):
-       * ext/mikmod/gstmikmod.h:
-         make mikmod's loop function not loop infinitely and call
-         gst_element_yield anymore
-       * gst/modplug/gstmodplug.cc:
-         fix pad negotiation (fixes #136590)
-
-2004-03-09  David Schleef  <ds@schleef.org>
-
-       * ext/lcs/Makefile.am:  Fix so that the lcs colorspace plugin
-       doesn't conflict with the internal colorspace plugin.
-       * gst-libs/gst/audio/make_filter:  Use `` instead of $() to
-       satisfy the crappy-ass shell shipped by a certain vendor.
-       * gst/videofilter/make_filter: same (bug #135299)
-
-2004-03-09  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac: bump nano to 1
-
-=== release 0.7.6 ===
-
-2004-03-09  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.in: releasing 0.7.6, "There"
-
-2004-03-09  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * pkgconfig/gstreamer-play-uninstalled.pc.in:
-       * pkgconfig/gstreamer-play.pc.in:
-          synchronize the two
-
-2004-03-09  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_base_init),
-       (cdparanoia_open), (cdparanoia_event):
-         fix/add error handling
-       * po/POTFILES.in:
-         add cdparanoia source
-       * tools/Makefile.am:
-         make scripts executable
-
-2004-03-09  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-       * ext/vorbis/Makefile.am:
-       * sys/Makefile.am:
-         remove id3types, vorbisfile and xvideosink from the build (#133783)
-
-2004-03-08  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_info):
-         Fix metadata read crash (#136537).
-
-2004-03-08  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-libs/gst/media-info/media-info-priv.c: (gmi_set_mime):
-       * gst-libs/gst/media-info/media-info.c: (gst_media_info_read):
-          adding mime types, fixing the one-stop function
-
-2004-03-08  Christian Schaller <Uraeus@gnome.org>
-
-       * ext/nas/nassink.c and /ext/nas/nassink.h:
-       More NAS love from Arwed von Merkatz
-       So lets all sing 'Can you feel the NAS tonight'
-
-2004-03-08  Christian Schaller <Uraeus@gnome.org>
-
-       * tools/gst-launch-ext.in:
-       Replace vorbisfile with oggdemux/vorbisdec/audioconvert
-
-2004-03-08  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_base_init),
-       (gst_mpeg2dec_init):
-        remove the user_data pad for now, because it is being used in
-        fixating causing MPEG playback to fixate on 1000 Hz for playback.
-        If someone knows how to fix this properly, please do.
-
-2004-03-08  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/oss/gstosssink.c: (gst_osssink_get_delay),
-       (gst_osssink_get_time):
-        add a warning, IMO this won't get triggered anymore, remove later
-
-2004-03-07  David Schleef  <ds@schleef.org>
-
-       * gst/qtdemux/qtdemux.c: (qtdemux_video_caps):  Added Cinepak
-       format (bug #136470)
-
-2004-03-07  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-libs/Makefile.am:
-       * gst-libs/gst/media-info/Makefile.am:
-       * gst-libs/gst/media-info/media-info-priv.c: (found_tag_callback),
-       (error_callback), (gst_media_info_error_create),
-       (gst_media_info_error_element), (gmip_init), (gmip_reset),
-       (gmi_clear_decoder), (gmip_find_type_pre), (gmip_find_type):
-       * gst-libs/gst/media-info/media-info-priv.h:
-       * gst-libs/gst/media-info/media-info-test.c: (main):
-       * gst-libs/gst/media-info/media-info.c: (gst_media_info_init),
-       (gst_media_info_class_init), (gst_media_info_instance_init),
-       (gst_media_info_set_source), (gst_media_info_read_with_idler),
-       (gst_media_info_read_idler), (gst_media_info_read):
-       * gst-libs/gst/media-info/media-info.h:
-       fixed, should work now
-
-2004-03-07  Christian Schaller <Uraeus@gnome.org>
-
-       * ext/nas/nassink.c:
-       A bunch of NAS fixes from Arwed von Merkatz
-
-2004-03-06  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_add_stream),
-       (qtdemux_parse_trak):
-         Fix crash (j might be greater than n_samples, in which case we're
-         writing outside the allocated space for the array) and memleak.
-
-2004-03-06  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/oss/gstosssink.c: (gst_osssink_chain):
-         And another caller that couldn't handle delay < 0 (unsigned
-         integer overflow). Video now continues playing on an audio
-         buffer underrun, and the clock continues working. Audio still
-         stalls.
-
-2004-03-06  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/oss/gstosssink.c: (gst_osssink_get_delay),
-       (gst_osssink_get_time):
-         get_delay() may return values lower than 0. In those cases, we
-         should not actually cast to *unsigned* int64, that will break
-         stuff horribly. In my case, it screwed up A/V sync in movies
-         in totem rather badly.
-
-2004-03-06  Christophe Fergeau  <teuf@gnome.org>
-
-       * ext/faac/gstfaac.c: (gst_faac_chain):
-       * ext/flac/gstflactag.c: (gst_flac_tag_chain):
-       * ext/libpng/gstpngenc.c: (user_write_data):
-       * ext/mikmod/gstmikmod.c: (gst_mikmod_loop):
-       * gst/ac3parse/gstac3parse.c: (gst_ac3parse_chain):
-       * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_chain_subtitle):
-       * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_add_slice):
-       Fix several misuse of gst_buffer_merge (it doesn't take ownership
-       of any buffer), should fix some leaks. I hope I didn't unref buffers
-       that shouldn't be...
-
-2004-03-06  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-libs/gst/media-info/media-info-priv.c: (have_type_callback),
-       (deep_notify_callback), (tag_flag_score), (found_tag_callback),
-       (error_callback), (gmi_reset), (gmi_seek_to_track),
-       (gmi_get_decoder), (gmi_set_mime), (gmip_find_type_pre),
-       (gmip_find_type_post), (gmip_find_stream_post),
-       (gmip_find_track_streaminfo_post):
-       * gst-libs/gst/media-info/media-info-priv.h:
-       * gst-libs/gst/media-info/media-info-test.c: (print_tag),
-       (info_print), (main):
-       * gst-libs/gst/media-info/media-info.c:
-       (gst_media_info_error_create), (gst_media_info_error_element),
-       (gst_media_info_instance_init), (gst_media_info_get_property),
-       (gst_media_info_new), (gst_media_info_set_source),
-       (gst_media_info_read_idler), (gst_media_info_read):
-       * gst-libs/gst/media-info/media-info.h:
-          first pass at making this work again.  This seems to work on
-          tagged ogg/vorbis and mp3 files.
-
-2004-03-06  Benjamin Otte  <otte@gnome.org>
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
-         fix huge leak: gst_buffer_merge doesn't unref the first argument
-         itself.
-
-2004-03-06  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/mad/gstmad.c: (gst_mad_class_init), (gst_mad_update_info):
-          report layer/mode/emphasis
-
-2004-03-06  Christophe Fergeau  <teuf@gnome.org>
-
-       * ext/mad/gstmad.c: (gst_mad_chain): fixed caps leak
-
-2004-03-06  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_new):
-          signal serial
-
-2004-03-06  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/vorbis/vorbis.c: (plugin_init):
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_get_formats),
-       (gst_vorbis_dec_init), (vorbis_dec_event):
-        add debug category
-        make vorbisdec handle _BYTE and _TIME queries
-
-2004-03-06  Christophe Fergeau  <teuf@gnome.org>
-
-       * ext/mad/gstmad.c: (gst_mad_chain): send the average bitrate read
-         from the xing header
-
-2004-03-06  Benjamin Otte  <otte@gnome.org>
-
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_getcaps),
-       (gst_audio_convert_link), (gst_audio_convert_change_state),
-       (gst_audio_convert_buffer_from_default_format):
-         do conversions from/to float correctly, fix some caps nego errors,
-         export correct supported caps in template and getcaps, use correct
-         caps in try_set_caps functions
-
-2004-03-06  Christophe Fergeau  <teuf@gnome.org>
-
-       For some reason, I only committed a ChangeLog entry yesterday and
-       not the corresponding code...
-       * ext/mad/gstmad.c: Fix detection of Xing headers
-       * gst/tags/gstid3tag.c: Changes to support TLEN tags
-
-2004-03-06  Benjamin Otte  <otte@gnome.org>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_get_pad_by_pad),
-       (gst_ogg_demux_src_query):
-         make sure to handle the case where there's no current chain
-         gracefully.
-
-2004-03-05  David Schleef  <ds@schleef.org>
-
-       * ext/aalib/gstaasink.c: (gst_aasink_fixate), (gst_aasink_init):
-       Add fixate function. (bug #131128)
-       * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_init),
-       (gst_sdlvideosink_fixate):  Add fixate function.
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
-       Fix attempt to print a non-pointer using GST_PTR_FORMAT.
-       * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt):
-       Fix missing break that was causing ulaw to be interpreted as
-       raw int.
-
-2004-03-05  David Schleef  <ds@schleef.org>
-
-       * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_add_slice):
-       Fix code that ignores return value of gst_buffer_merge().
-       (bug #114560)
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_descramble_segment):
-       * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_add_slice): same
-       * testsuite/gst-lint:  Check for above.
-
-2004-03-05  David Schleef  <ds@schleef.org>
-
-       * gst/udp/gstudpsrc.c: (gst_udpsrc_get):  Check for unfixed
-       caps and throw an element error.  (bug #136334)
-
-2004-03-05  David Schleef  <ds@schleef.org>
-
-       * ext/faad/gstfaad.c: (gst_faad_init), (gst_faad_srcgetcaps),
-       (gst_faad_chain): Fix negotiation.
-       * ext/librfb/gstrfbsrc.c: (gst_rfbsrc_handle_src_event): Add
-       key and button events.
-       * gst-libs/gst/floatcast/floatcast.h: Fix a minor bug in this
-       dung heap of code.
-       * gst-libs/gst/gconf/gstreamer-gconf-uninstalled.pc.in: gstgconf
-       depends on gconf
-       * gst-libs/gst/gconf/gstreamer-gconf.pc.in: same
-       * gst-libs/gst/play/play.c: (gst_play_pipeline_setup),
-       (gst_play_video_fixate), (gst_play_audio_fixate): Add a fixate
-       function to encourage better negotiation, particularly between
-       audioconvert and osssink.
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_chain):
-       * gst/qtdemux/qtdemux.c: (qtdemux_parse_trak):  Make some debugging
-       more important.
-       * gst/typefind/gsttypefindfunctions.c:  Fix mistake in flash
-       typefinding.
-       * gst/vbidec/vbiscreen.c:  Add glib header
-       * pkgconfig/gstreamer-play.pc.in:  Depends on gst-interfaces.
-
-2004-03-06  Christophe Fergeau  <teuf@users.sourceforge.net>
-
-       * ext/mad/gstmad.c: Fix detection of Xing headers
-       * gst/tags/gstid3tag.c: Changes to support TLEN tags
-
-2004-03-06  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt),
-       (gst_wavparse_pad_convert), (gst_wavparse_pad_query):
-          debug updates
-
-2004-03-06  Christophe Fergeau  <teuf@gnome.org>
-
-       * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
-       * ext/mad/gstmad.c: (gst_mad_init), (is_xhead),
-       (mpg123_parse_xing_header), (gst_mad_chain): parse Xing header in vbr
-       files, and report the parsed length as a GST_TAG_DURATION tag.
-       * gst/tags/gstid3tag.c: support TLEN (duration) tag
-
-2004-03-05  Benjamin Otte  <otte@gnome.org>
-
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_channels):
-         convert channels correctly. convert correctly to unsigned.
-
-2004-03-05  Julien MOUTTE <julien@moutte.net>
-
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_change_state): Check if
-       we have a window before clearing it.
-
-2004-03-05  Julien MOUTTE <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_change_state): Check if we
-       have a window before clearing it.
-
-2004-03-05  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gconf/gstreamer.schemas.in:
-       * gst-libs/gst/gconf/Makefile.am:
-          version installation path the same way as for 0.6
-       * pkgconfig/gstreamer-interfaces-uninstalled.pc.in:
-       * pkgconfig/gstreamer-libs-uninstalled.pc.in:
-       * pkgconfig/gstreamer-play-uninstalled.pc.in:
-          remove comment that was fixed
-
-2004-03-05  David Schleef  <ds@schleef.org>
-
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_get_src_formats),
-       (gst_qtdemux_src_convert), (gst_qtdemux_get_src_query_types),
-       (gst_qtdemux_get_event_mask), (gst_qtdemux_handle_src_query),
-       (gst_qtdemux_handle_src_event), (gst_qtdemux_add_stream):
-       Add prototype code for handling seeking and querying.
-
-2004-03-04  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * examples/gstplay/player.c: (main):
-         Initialize variables to NULL. Prevents a segfault because the
-         (uninitialized) variable is not NULL, resulting in a crash on
-         trying to reach error->message.
-
-2004-03-05  Benjamin Otte  <otte@gnome.org>
-
-       * gst/audioconvert/gstaudioconvert.c:
-       (gst_audio_convert_buffer_to_default_format):
-       make float=>int conversion work correctly even in cornercases.
-
-2004-03-04  David I. Lehn  <dlehn@users.sourceforge.net>
-
-       * debian/README.Debian:
-       * debian/build-deps:
-       * debian/changelog:
-       * debian/control:
-       * debian/control.in:
-       * debian/copyright:
-       * debian/gstreamer-a52dec.files:
-       * debian/gstreamer-aa.files:
-       * debian/gstreamer-alsa.files:
-       * debian/gstreamer-alsa.manpages:
-       * debian/gstreamer-arts.files:
-       * debian/gstreamer-artsd.files:
-       * debian/gstreamer-audiofile.files:
-       * debian/gstreamer-avifile.files:
-       * debian/gstreamer-cdparanoia.files:
-       * debian/gstreamer-colorspace.files:
-       * debian/gstreamer-doc.files:
-       * debian/gstreamer-dv.files:
-       * debian/gstreamer-dvd.files:
-       * debian/gstreamer-esd.files:
-       * debian/gstreamer-festival.files:
-       * debian/gstreamer-flac.files:
-       * debian/gstreamer-gconf.conffiles:
-       * debian/gstreamer-gconf.files:
-       * debian/gstreamer-gconf.postinst:
-       * debian/gstreamer-gnomevfs.files:
-       * debian/gstreamer-gsm.files:
-       * debian/gstreamer-http.files:
-       * debian/gstreamer-jack.files:
-       * debian/gstreamer-jpeg.files:
-       * debian/gstreamer-mad.files:
-       * debian/gstreamer-mikmod.files:
-       * debian/gstreamer-misc.files:
-       * debian/gstreamer-mpeg2dec.files:
-       * debian/gstreamer-oss.files:
-       * debian/gstreamer-plugin-apps.files:
-       * debian/gstreamer-plugin-apps.manpages:
-       * debian/gstreamer-plugin-libs-dev.files:
-       * debian/gstreamer-plugin-libs.files:
-       * debian/gstreamer-plugin-template.postinst:
-       * debian/gstreamer-plugin-template.postrm:
-       * debian/gstreamer-sdl.files:
-       * debian/gstreamer-sid.files:
-       * debian/gstreamer-vorbis.files:
-       * debian/gstreamer-x.files:
-       * debian/mk.control:
-       * debian/rules:
-       Debian package info not maintained here.
-
-2004-03-04  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/aalib/gstaasink.c: (gst_aasink_class_init):
-       * ext/cdaudio/gstcdaudio.c: (gst_cdaudio_class_init):
-       * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_class_init):
-       * ext/divx/gstdivxenc.c: (gst_divxenc_class_init):
-       * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_class_init):
-       * ext/gsm/gstgsmenc.c: (gst_gsmenc_class_init):
-       * ext/jpeg/gstjpegenc.c: (gst_jpegenc_class_init):
-       * ext/musicbrainz/gsttrm.c: (gst_musicbrainz_class_init):
-       * ext/speex/gstspeexenc.c: (gst_speexenc_class_init):
-       * ext/xvid/gstxvidenc.c: (gst_xvidenc_class_init):
-       * gst-libs/gst/colorbalance/colorbalance.c:
-       (gst_color_balance_class_init):
-       * gst-libs/gst/colorbalance/colorbalancechannel.c:
-       (gst_color_balance_channel_class_init):
-       * gst-libs/gst/mixer/mixer.c: (gst_mixer_class_init):
-       * gst-libs/gst/play/play.c: (gst_play_class_init):
-       * gst-libs/gst/propertyprobe/propertyprobe.c:
-       (gst_property_probe_iface_init):
-       * gst-libs/gst/tuner/tuner.c: (gst_tuner_class_init):
-       * gst-libs/gst/tuner/tunerchannel.c:
-       (gst_tuner_channel_class_init):
-       * gst-libs/gst/xoverlay/xoverlay.c: (gst_x_overlay_base_init):
-       * gst/cutter/gstcutter.c: (gst_cutter_class_init):
-       * gst/effectv/gstvertigo.c: (gst_vertigotv_class_init):
-       * sys/cdrom/gstcdplayer.c: (cdplayer_class_init):
-       * sys/dxr3/dxr3spusink.c: (dxr3spusink_class_init):
-       * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_class_init):
-       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_class_init):
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_class_init):
-       * sys/v4l2/gstv4l2src.c: (gst_v4l2src_class_init):
-          fix signals to use - instead of _
-       * ext/libcaca/gstcacasink.h:
-       * ext/sdl/sdlvideosink.h:
-          fix header rename
-
-2004-03-04  David Schleef  <ds@schleef.org>
-
-       * testsuite/gst-lint:  Add a check for bad signal names.
-
-2004-03-04  <kost@imn.htwk-leipzig.de>
-
-       reviewed by David Schleef
-
-       * gst/videofilter/gstgamma.c: (gst_gamma_rgb32): Fix typo that
-       modified the alpha channel and caused a warning. (bug #136192)
-
-2004-04-03  Christian Schaller <Uraeus@gnome.org>
-
-       * gst-plugins.spec.in:
-       Change names of plugins to actually be correct. Try to keep things
-       alphabetical to avoid getting beat up by Thomas
-
-2004-03-03  Julien MOUTTE <julien@moutte.net>
-
-       * gst-libs/gst/gconf/gconf.c: (gst_gconf_get_default_video_sink):
-       Using ximagesink as a default if no gconf key found. We should
-       probably consider using alsasink instead of osssink for the audio
-       part.
-
-2004-03-02  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-         fix --with-plugins, don't think it ever worked before
-       * gst-plugins.spec.in:
-          even more updates
-
-2004-03-01  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/sdl/sdlvideosink.h:
-       * sys/ximage/ximagesink.h:
-       * sys/xvideo/xvideosink.h:
-       * sys/xvimage/xvimagesink.h:
-         Fix for move of gstvideosink.h -> videosink.h.
-
-2004-03-02  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-libs/gst/xwindowlistener/Makefile.am:
-         this is a plugin library, not a library
-
-2004-03-01  David Schleef  <ds@schleef.org>
-
-       * AUTHORS:  Added some names.  Add yourself if you're still
-       missing.
-
-2004-03-01  David Schleef  <ds@schleef.org>
-
-       * MAINTAINERS: Add
-
-2004-03-01  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-plugins.spec.in: clean up spec file
-
-2004-03-01  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-libs/gst/video/Makefile.am:
-       * gst-libs/gst/video/gstvideosink.c:
-       * gst-libs/gst/video/gstvideosink.h:
-          rename gstvideosink.h to videosink.h to match other headers
-       * gst/mixmatrix/Makefile.am:
-          fix plugin filename
-       * gst/tags/Makefile.am: fix plugin filename
-
-2004-03-01  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/tags/Makefile.am: fix plugin filename
-
-2004-03-01  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * examples/gstplay/player.c: (got_time_tick), (main):
-         add error handler
-          display time_tick more readably
-       * gst/mixmatrix/Makefile.am:
-          fix plugin file name
-
-2004-02-29  Christophe Fergeau  <teuf@gnome.org>
-
-       * sys/oss/gstosselement.c: (gst_osselement_probe),
-       (device_combination_append), (gst_osselement_class_probe_devices):
-       * sys/oss/gstosselement.h:
-         Reworked enumeration of oss dsps and mixers so that gst-mixer works
-         on my system using alsa oss emulation, fixes bug #135597
-
-2004-02-29  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/videodrop/gstvideodrop.c: (gst_videodrop_init),
-       (gst_videodrop_chain), (gst_videodrop_change_state):
-       * gst/videodrop/gstvideodrop.h:
-         Work based on timestamp of input data, not based on the expected
-         framerate from the input. The consequence is that this element now
-         not only scales framerates, but also functions as a framerate
-         corrector or framerate stabilizer/constantizer.
-
-2004-02-27  David Schleef  <ds@schleef.org>
-
-       patches from jmmv@menta.net (Julio M. Merino Vidal)
-
-       * gst/interleave/deinterleave.c: (deinterleave_chain): Fix
-       GST_ELEMENT_ERROR call (bug #135634)
-       * gst/interleave/interleave.c: (interleave_buffered_loop),
-       (interleave_bytestream_loop): Don't use alloca() (bug #135640)
-       * sys/cdrom/gstcdplayer_ioctl_bsd.h: Fix ioctls on NetBSD (bug #135645)
-       * sys/oss/gstosssink.c: (gst_osssink_get_delay),
-       (gst_osssink_chain): Fix ioctls on NetBSD. (bug #135644)
-       * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_sync_next_frame),
-       (gst_v4lmjpegsrc_set_capture), (gst_v4lmjpegsrc_set_capture_m),
-       (gst_v4lmjpegsrc_capture_init), (gst_v4lmjpegsrc_requeue_frame):
-       Fix GST_ELEMENT_ERROR call.
-       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_try_palette): Fix
-       GST_ELEMENT_ERROR call.
-
-2004-02-27  Benjamin Otte  <otte@gnome.org>
-
-       * gst-libs/gst/audio/audio.h:
-         add macro to make sure header isn't included twice
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_chunk):
-         don't use gst_buffer_free
-       * gst/playondemand/filter.func:
-         don't use gst_data_free. Free data only once.
-
-2004-02-26  David Schleef  <ds@schleef.org>
-
-       * gst-libs/gst/colorbalance/Makefile.am:
-       * gst-libs/gst/mixer/Makefile.am:
-       * gst-libs/gst/tuner/Makefile.am:
-       * gst/level/Makefile.am: -marshal.[ch] and -enum.[ch] files
-       should not be disted, -marshal.h files should not be installed,
-       and -enum.h files _should_ be installed.  Fix to make this the
-       case.
-
-=== release 0.7.5 ===
-
-2004-02-26  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac: release 0.7.5, "Under The Sea"
-
-2004-02-25  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link),
-       (gst_audio_convert_change_state), (gst_audio_convert_get_buffer):
-       * gst/videoscale/gstvideoscale.c:
-       * sys/oss/gstosselement.c: (gst_osselement_sync_parms):
-          assorted debug/warning fixes
-
-2004-02-25  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/videoscale/gstvideoscale.c: (gst_videoscale_getcaps),
-       (gst_videoscale_init), (gst_videoscale_chain),
-       (gst_videoscale_set_property), (plugin_init):
-       * gst/videoscale/gstvideoscale.h:
-       * gst/videoscale/videoscale.c: (gst_videoscale_setup),
-       (gst_videoscale_scale_rgb), (gst_videoscale_planar411),
-       (gst_videoscale_planar400), (gst_videoscale_packed422),
-       (gst_videoscale_packed422rev), (gst_videoscale_32bit),
-       (gst_videoscale_24bit), (gst_videoscale_16bit),
-       (gst_videoscale_bilinear), (gst_videoscale_bicubic),
-       (gst_videoscale_scale_plane_slow),
-       (gst_videoscale_scale_point_sample),
-       (gst_videoscale_scale_nearest),
-       (gst_videoscale_scale_nearest_str2),
-       (gst_videoscale_scale_nearest_str4),
-       (gst_videoscale_scale_nearest_32bit),
-       (gst_videoscale_scale_nearest_24bit),
-       (gst_videoscale_scale_nearest_16bit):
-        add debugging category and use it properly
-        fix use of GST_PTR_FORMAT
-
-2004-02-25  Andy Wingo  <wingo@pobox.com>
-
-       * gst/interleave/interleave.c (interleave_buffered_loop): Always
-       push only when channel->buffer is NULL. Prevents segfaults doing
-       the state change after a nonlocal exit, like a scheme exception.
-
-       * gst/audioconvert/gstaudioconvert.c (gst_audio_convert_getcaps):
-       Handle the case where the intersected caps is empty.
-
-2004-02-25  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/law/mulaw-decode.c: (mulawdec_link):
-       * gst/law/mulaw.c: (plugin_init):
-          fix mulawdec so it actually works again
-
-2004-02-24  Arwed v. Merkatz  <v.merkatz@gmx.net>
-
-       reviewed by: David Schleef  <ds@schleef.org>
-
-       * gst/videofilter/gstgamma.c: (gst_gamma_class_init),
-       (gst_gamma_init), (gst_gamma_set_property),
-       (gst_gamma_get_property), (gst_gamma_calculate_tables),
-       (gst_gamma_rgb24), (gst_gamma_rgb32):  Adds gamma correction
-       for RGB, with separate r g and b correction factors. (#131167)
-
-2004-02-24  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
-          only signal tags for bitrate if they're > 0 (#134894)
-
-2004-02-24  David Schleef  <ds@schleef.org>
-
-       * gst/qtdemux/qtdemux.c: (plugin_init), (gst_qtdemux_loop_header),
-       (qtdemux_parse_moov), (qtdemux_parse), (qtdemux_node_dump_foreach),
-       (qtdemux_dump_mvhd), (qtdemux_dump_tkhd), (qtdemux_dump_elst),
-       (qtdemux_dump_mdhd), (qtdemux_dump_hdlr), (qtdemux_dump_vmhd),
-       (qtdemux_dump_dref), (qtdemux_dump_stsd), (qtdemux_dump_stts),
-       (qtdemux_dump_stss), (qtdemux_dump_stsc), (qtdemux_dump_stsz),
-       (qtdemux_dump_stco), (qtdemux_dump_co64), (qtdemux_dump_dcom),
-       (qtdemux_dump_cmvd), (qtdemux_parse_tree), (qtdemux_parse_trak):
-       Cleanups.  Convert g_prints to GST_LOGs.  Add qtdemux debug
-       category.  Attempt to fix timestamp calculation.
-
-2004-02-24  Johan Dahlin  <johan@gnome.org>
-
-       * gst-libs/gst/gconf/gconf.c: Add \n to g_print error messages
-
-2004-02-23  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-       * gconf/Makefile.am:
-       * gconf/gstreamer.schemas:
-       * gst-libs/gst/gconf/Makefile.am:
-       * gst-libs/gst/gconf/gconf.c:
-          version gconf schemas and install locations
-
-2004-02-23  Benjamin Otte  <otte@gnome.org>
-
-       * ext/xine/xineinput.c: (gst_xine_input_dispose):
-       (gst_xine_input_subclass_init):
-         call parent dispose.
-         change pad template for CD reader correctly
-       * ext/xine/Makefile.am:
-       * ext/xine/gstxine.h:
-       * ext/xine/xine.c: (plugin_init):
-       * ext/xine/xineaudiosink.c:
-         wrap audio sinks, too
-       * gst-libs/gst/resample/private.h:
-       * gst-libs/gst/resample/resample.c: (gst_resample_init),
-       (gst_resample_reinit), (gst_resample_scale),
-       (gst_resample_nearest_s16), (gst_resample_bilinear_s16),
-       (gst_resample_sinc_slow_s16), (gst_resample_sinc_s16),
-       (gst_resample_sinc_ft_s16), (gst_resample_nearest_float),
-       (gst_resample_bilinear_float), (gst_resample_sinc_slow_float),
-       (gst_resample_sinc_float), (gst_resample_sinc_ft_float):
-       * gst-libs/gst/resample/resample.h:
-       * gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type),
-       (gst_audioscale_class_init), (gst_audioscale_link),
-       (gst_audioscale_get_buffer), (gst_audioscale_init),
-       (gst_audioscale_chain), (gst_audioscale_set_property),
-       (gst_audioscale_get_property):
-       * gst/audioscale/gstaudioscale.h:
-         s/resample_*/gst_resample_*/i to not clobber namespaces
-
-2004-02-23  Julien MOUTTE  <julien@moutte.net>
-
-       * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps),
-       (gst_riff_create_audio_caps), (gst_riff_create_iavs_caps),
-       (gst_riff_create_video_template_caps),
-       (gst_riff_create_audio_template_caps),
-       (gst_riff_create_iavs_template_caps):
-       * gst-libs/gst/riff/riff-media.h:
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init),
-       (gst_asf_demux_audio_caps), (gst_asf_demux_add_audio_stream),
-       (gst_asf_demux_video_caps), (gst_asf_demux_add_video_stream):
-       * gst/avi/gstavidemux.c: (gst_avi_demux_add_stream):
-       * gst/matroska/matroska-demux.c: (gst_matroska_demux_add_stream),
-       (gst_matroska_demux_video_caps), (gst_matroska_demux_audio_caps),
-       (gst_matroska_demux_plugin_init): First batch implementing audio and
-       video codec tags in demuxers.
-
-2004-02-22  Benjamin Otte  <otte@gnome.org>
-
-       * ext/xine/Makefile.am:
-       * ext/xine/gstxine.h:
-       * ext/xine/xine.c: (plugin_init):
-       * ext/xine/xineinput.c:
-         add input plugin wrapper. Playback from files, http, mms and cdda
-         works.
-       * ext/xine/xineaudiodec.c: (gst_xine_audio_dec_chain):
-         remove leftover G_GNUC_UNUSED
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_stream),
-       (gst_asf_demux_identify_guid):
-         improve debugging output
-
-2004-02-22  Benjamin Otte  <otte@gnome.org>
-
-       reported by: Padraig O'Briain <padraig.obriain@sun.com>
-
-       * autogen.sh:
-         replace test -e with test -x for mkinstalldirs to be more portable.
-         (fixes #134816)
-
-2004-02-22  Benjamin Otte  <otte@gnome.org>
-
-       reported by: Stefan Kost <kost@imn.htwk-leipzig.de>
-
-       * gst/audioconvert/gstaudioconvert.c: (plugin_init):
-         set rank to PRIMARY
-       * gst/volume/gstvolume.c: (plugin_init):
-         set rank to NONE
-       fixes #134960
-
-2004-02-22   Julio M. Merino Vidal <jmmv@menta.net>
-
-       reviewed by Benjamin Otte  <otte@gnome.org>
-
-       * ext/flac/gstflacenc.c: (gst_flacenc_chain):
-         escape NULL strings in GST_ELEMENT_ERROR properly (fixes #135116)
-
-2004-02-22  Benjamin Otte  <otte@gnome.org>
-
-       * configure.ac:
-         export [_]*{gst,Gst,GST}.* symbols from plugins
-
-2004-02-22  Christophe Fergeau <teuf@gnome.org>
-
-       reviewed by: Benjamin Otte  <otte@gnome.org>
-
-       * ext/lame/gstlame.c: (add_one_tag):
-       * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
-       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_get_tag_value),
-       (gst_vorbisenc_metadata_set1):
-       * gst/tags/gstid3tag.c:
-       * gst/tags/gstvorbistag.c: (gst_vorbis_tag_add):
-         apply fixes from bugs #135042 (lame can't write tags) and #133817
-         (add GST_ALBUM_VOLUME_{COUNT,NUMBER} tags)
-
-2004-02-22 Ramon Garcia <ramon_garcia_f@yahoo.com>
-
-       * configure.ac: Export only gst_plugin_desc from plugins.
-         Note that this change only makes any effect with Linux using libtool
-        1.5.2 or higher. Otherwise it is silently ignored, but it would build
-         fine. And don't try to have several versions of libtool in different
-         directories.
-
-2004-02-20  Andy Wingo  <wingo@pobox.com>
-
-       * gst/intfloat/, gst/oneton: Removed, replaced by audioconvert and
-       interleave respectively.
-
-       * gst/interleave/deinterleave.c: New plugin: deinterleave
-       (replaces on oneton).
-       * gst/interleave/interleave.c: New plugin: interleave.
-       * gst/interleave/plugin.h: Support file.
-       * gst/interleave/plugin.c: Support file.
-
-       * configure.ac: Remove intfloat and oneton, add interleave.
-
-       * ext/sndfile/gstsf.c: Handle events better.
-
-       * gst/audioconvert/gstaudioconvert.c: Change to support int2float
-       and float2int operation. int2float has scheduling problems as
-       noted in in2float_chain.
-
-2004-02-20  Benjamin Otte  <otte@gnome.org>
-
-       * ext/xine/Makefile.am:
-       * ext/xine/gstxine.h:
-       * ext/xine/xine.c:
-       * ext/xine/xineaudiodec.c:
-       * ext/xine/xinecaps.c:
-         add first version of xine plugin wrapper. Currently only wraps the
-         QDM2 win32 DLL, and even that only in proof-of-concept quality.
-       * configure.ac:
-       * ext/Makefile.am:
-         add xine plugin wrapper, disabled by default. Use --enable-xine to
-         build. Note that it'll segfault on gst-register if you don't remove
-         the goom and tvtime post plugins from xine.
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_handle_sink_event),
-       (qtdemux_parse), (qtdemux_parse_trak), (qtdemux_audio_caps):
-         add extradata parsing for QDM2.
-         change around debugging prints.
-
-2004-02-19  Benjamin Otte  <otte@gnome.org>
-
-       * ext/lame/gstlame.c: (gst_lame_chain):
-       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_chain):
-         use gst_tag_list_insert when you want to insert tags
-
-2004-02-18  David Schleef  <ds@schleef.org>
-
-       * configure.ac:  Move massink to gst-rotten
-       * ext/Makefile.am:
-       * ext/mas/Makefile.am:
-       * ext/mas/massink.c:
-       * ext/mas/massink.h:
-
-2004-02-18  David Schleef  <ds@schleef.org>
-
-       * ext/gdk_pixbuf/gstgdkpixbuf.c: (plugin_init): Disable gdk_pixbuf
-       typefinding, since it seems to be worse than nothing.
-       * gst/typefind/gsttypefindfunctions.c: (qt_type_find):  Add ftyp
-       atom to recognize .mp4 and .m4a files as video/quicktime.
-
-2004-02-18  David Schleef  <ds@schleef.org>
-
-       * gst/sine/demo-dparams.c: (quit_live),
-       (dynparm_log_value_changed), (dynparm_value_changed), (main):
-       Use double dparams, not float.
-       * gst/sine/gstsinesrc.c: (gst_sinesrc_class_init),
-       (gst_sinesrc_init): Change sync default to FALSE, since multiple
-       sync'd elements don't really work correctly.
-       * gst/volume/gstvolume.c: (volume_class_init), (volume_init),
-       (volume_update_volume), (volume_get_property):  Change dparam
-       to double.
-
-2004-02-18  Julien MOUTTE  <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c:
-       (gst_ximagesink_xwindow_update_geometry),
-       (gst_ximagesink_renegotiate_size), (gst_ximagesink_handle_xevents),
-       (gst_ximagesink_change_state), (gst_ximagesink_expose),
-       (gst_ximagesink_init): Rework the way software video scaling works. So
-       now we check on each chain call if the video frames are feeling the
-       window. If not we try to renegotiate caps. On failure we memorize that
-       and we won't try again for that PLAYING sessions.
-       * sys/ximage/ximagesink.h: Adding a boolean to store the caps renego
-       failure.
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_init): initialize the
-       synchronous flag.
-
-2004-02-18  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-libs/gst/play/play.c: (gst_play_pipeline_setup):
-          break up _link so we can give a better debug message for errors
-
-2004-02-18  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/gdk_pixbuf/gstgdkpixbuf.c: (plugin_init):
-          set up debug category
-
-2004-02-18  Julien MOUTTE <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_renegotiate_size),
-       (gst_ximagesink_handle_xevents), (gst_ximagesink_expose): Reorganizing
-       the way renegotiation work. The event handling function is not taking
-       care of external windows and renegotiate method check for pad flags
-       NEGOTIATING. Should fix : #133209
-
-2004-02-17  Julien MOUTTE  <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_expose): Checking if the
-       pad is negotiating before trying renegotiation.
-
-2004-02-17  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_type_find):
-          pass on all possible mime types as typefind hints
-
-2004-02-17  Julien MOUTTE <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new): Fix a
-       possible SHM leak if we crash. All other apps using XShm are doing
-       that.
-
-2004-02-17  Julien MOUTTE  <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_renegotiate_size),
-       (gst_ximagesink_expose): Renegotiate size on expose.
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_expose): Update window
-       size on expose.
-
-2004-02-16  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * testsuite/alsa/sinesrc.c:
-         cosmetic fix to fix compile issue with gcc 2.95.4
-
-2004-02-16  Julien MOUTTE <julien@moutte.net>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_open_audio),
-       (gst_alsa_timestamp_to_bytes): Alsa should trigger an error if it
-       failed opening the audio device.
-       * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
-       (gst_ximagesink_ximage_destroy), (gst_ximagesink_ximage_put),
-       (gst_ximagesink_xwindow_new), (gst_ximagesink_xwindow_destroy),
-       (gst_ximagesink_xwindow_resize), (gst_ximagesink_xwindow_clear),
-       (gst_ximagesink_renegotiate_size), (gst_ximagesink_handle_xevents),
-       (gst_ximagesink_xcontext_get), (gst_ximagesink_xcontext_clear),
-       (gst_ximagesink_change_state), (gst_ximagesink_chain),
-       (gst_ximagesink_set_xwindow_id): Clearing window in READY TO PAUSED.
-       Removing some useless g_return_if_fail like wingo suggested.
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
-       (gst_xvimagesink_xvimage_destroy), (gst_xvimagesink_xvimage_put),
-       (gst_xvimagesink_xwindow_new), (gst_xvimagesink_xwindow_destroy),
-       (gst_xvimagesink_xwindow_resize), (gst_xvimagesink_xwindow_clear),
-       (gst_xvimagesink_update_colorbalance),
-       (gst_xvimagesink_handle_xevents), (gst_xvimagesink_xcontext_get),
-       (gst_xvimagesink_xcontext_clear),
-       (gst_xvimagesink_get_fourcc_from_caps),
-       (gst_xvimagesink_change_state), (gst_xvimagesink_chain),
-       (gst_xvimagesink_set_xwindow_id),
-       (gst_xvimagesink_colorbalance_list_channels),
-       (gst_xvimagesink_colorbalance_set_value),
-       (gst_xvimagesink_colorbalance_get_value): Clearing window in READY TO
-       PAUSED. Removing some useless g_return_if_fail like wingo suggested.
-
-2004-02-16  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_chain):
-          throw error when not negotiated instead of asserting
-
-2004-02-15  Julien MOUTTE  <julien@moutte.net>
-
-       * gst/switch/gstswitch.c: (gst_switch_loop): More fixes for
-       correct data refcounting.
-
-2004-02-15  Julien MOUTTE  <julien@moutte.net>
-
-       * gst/switch/gstswitch.c: (gst_switch_change_state),
-       (gst_switch_class_init): Cleaning the sinkpads correctly on state
-       change, mostly the EOS flag.
-
-2004-02-15  Julien MOUTTE  <julien@moutte.net>
-
-       * examples/gstplay/player.c: (got_eos), (main): Adding some
-       output for debugging.
-       * gst-libs/gst/play/play.c: (gst_play_state_change): Stop our
-       timeouts if we go to any state different from PLAYING.
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_seek): Fix some
-       more EOS bugs in riff lib.
-
-2004-02-14  Julien MOUTTE  <julien@moutte.net>
-
-       * gst-libs/gst/play/play.c: (gst_play_connect_visualization): Disable
-       visualization until i find a way to fix switch correctly.
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head): Fix a bug when
-       EOS arrives.
-       * gst/switch/gstswitch.c: (gst_switch_release_pad),
-       (gst_switch_request_new_pad), (gst_switch_poll_sinkpads),
-       (gst_switch_loop), (gst_switch_dispose), (gst_switch_class_init):
-       Reworked switch to get a more correct behaviour with events and refing
-       of data stored in sinkpads.
-       * gst/switch/gstswitch.h: Adding an eos flag for every sinkpad so that
-       we don't pull from a pad in EOS.
-
-2004-02-14  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
-         remove v1 tag even if we can't read it (makes sure we don't detect
-         it again)
-
-2004-02-14  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_pcm_wait),
-       (gst_alsa_xrun_recovery):
-       * ext/alsa/gstalsa.h:
-         try xrun recovery when wait failed. Make xrun recovery function
-         return TRUE/FALSE to indicate success. (might fix #134354)
-
-2004-02-13  David Schleef  <ds@schleef.org>
-
-       * gst/sine/demo-dparams.c: (dynparm_log_value_changed),
-       (dynparm_value_changed), (main): Convert from float to double.
-       * gst/sine/gstsinesrc.c: (gst_sinesrc_init): same.
-
-2004-02-13  David Schleef  <ds@schleef.org>
-
-       * gst/silence/gstsilence.c: (gst_silence_class_init),
-       (gst_silence_set_clock), (gst_silence_get),
-       (gst_silence_set_property), (gst_silence_get_property):
-       * gst/silence/gstsilence.h: Add sync property.
-       * gst/sine/gstsinesrc.c: (gst_sinesrc_class_init),
-       (gst_sinesrc_init), (gst_sinesrc_set_clock), (gst_sinesrc_get),
-       (gst_sinesrc_set_property), (gst_sinesrc_get_property):
-       * gst/sine/gstsinesrc.h: Add sync property.
-
-2004-02-13  David Schleef  <ds@schleef.org>
-
-       * gst/intfloat/gstint2float.c: (conv_f32_s16),
-       (gst_int2float_chain_gint16):  Change stdint usage to glib types.
-
-2004-02-13  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-       * ext/Makefile.am:
-       * gst-libs/ext/Makefile.am:
-          move ffmpeg plugin to gst-ffmpeg module
-
-2004-02-13  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac: use GST_ARCH to detect architecture
-
-2004-02-12  Julien MOUTTE  <julien@moutte.net>
-
-       * gst/vbidec/vbiscreen.c: Fixing thomasvs fixes. Missing header.
-
-2004-02-12  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/ladspa/gstladspa.c: (gst_ladspa_base_init):
-          classify LADSPA plugins based on number of src/sink pads
-         (#133663, Stefan Kost)
-       * gst/sine/gstsinesrc.c: (gst_sinesrc_init):
-          fix dparams registration
-         (#133528, Stefan Kost)
-       * gst/vbidec/vbiscreen.c: (vbiscreen_set_current_cell):
-          fix use of isprint and use g_ascii_isprint instead
-         (#133316, Stefan Kost)
-
-2004-02-11  David Schleef  <ds@schleef.org>
-
-       Convert a few inner loops to use liboil.  This is currently
-       optional, and is only enabled if liboil is present (duh!).
-       * configure.ac: Check for liboil-0.1
-       * gst/intfloat/Makefile.am:
-       * gst/intfloat/gstint2float.c: (conv_f32_s16), (scalarmult_f32),
-       (gst_int2float_chain_gint16):
-       * gst/videofilter/Makefile.am:
-       * gst/videofilter/gstvideobalance.c: (gst_videobalance_class_init),
-       (tablelookup_u8), (gst_videobalance_planar411):
-       * gst/videotestsrc/Makefile.am:
-       * gst/videotestsrc/gstvideotestsrc.c: (plugin_init):
-       * gst/videotestsrc/videotestsrc.c: (splat_u8), (paint_hline_YUY2),
-       (paint_hline_IYU2), (paint_hline_str4), (paint_hline_str3),
-       (paint_hline_RGB565), (paint_hline_xRGB1555):
-
-2004-02-11  David Schleef  <ds@schleef.org>
-
-       * ext/lcs/gstcolorspace.c: (colorspace_find_lcs_format),
-       (gst_colorspace_caps_get_fourcc), (colorspace_setup_converter),
-       (gst_colorspace_getcaps), (gst_colorspace_link),
-       (gst_colorspace_base_init), (gst_colorspace_init),
-       (gst_colorspace_chain), (gst_colorspace_change_state),
-       (plugin_init): Merge Ronald's patch (bug #117897) and update
-       for new caps and negotiation.  Seems to work, although it
-       shows off bugs in lcs.
-
-2004-02-11  David Schleef  <ds@schleef.org>
-
-       * ext/alsa/Makefile.am: Fix linking against libgstinterfaces.
-       (bug #133886)  Noticed by bugs@leroutier.net (Stephane LOEUILLET)
-
-2004-02-11  David Schleef  <ds@schleef.org>
-
-       * ext/librfb/gstrfbsrc.c: (gst_rfbsrc_class_init),
-       (gst_rfbsrc_change_state), (gst_rfbsrc_init),
-       (gst_rfbsrc_set_property), (gst_rfbsrc_get_property):
-       Add server and port properties
-
-2004-02-11  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * m4/a52.m4:
-       * m4/aalib.m4:
-       * m4/as-ffmpeg.m4:
-       * m4/as-liblame.m4:
-       * m4/as-slurp-ffmpeg.m4:
-       * m4/check-libheader.m4:
-       * m4/esd.m4:
-       * m4/freetype2.m4:
-       * m4/gconf-2.m4:
-       * m4/glib.m4:
-       * m4/gst-alsa.m4:
-       * m4/gst-artsc.m4:
-       * m4/gst-ivorbis.m4:
-       * m4/gst-matroska.m4:
-       * m4/gst-sdl.m4:
-       * m4/gst-shout2.m4:
-       * m4/gst-sid.m4:
-       * m4/gtk.m4:
-       * m4/libdv.m4:
-       * m4/libfame.m4:
-       * m4/libmikmod.m4:
-       * m4/ogg.m4:
-       * m4/vorbis.m4:
-          fix underquotedness of macros (#133800)
-       * m4/as-avifile.m4:
-       * m4/xmms.m4:
-          removed because no longer used
-
-2004-02-11  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-          require gettext 0.11.5 so ulonglong.m4 gets checked out and copied
-          by autopoint (fixes #132996)
-
-2004-02-11  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_base_init):
-       * ext/ffmpeg/gstffmpegdemux.c: (gst_ffmpegdemux_base_init):
-       * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_base_init):
-       * ext/ffmpeg/gstffmpegmux.c: (gst_ffmpegmux_base_init):
-         fix memleaks
-
-2004-02-11  David Schleef  <ds@schleef.org>
-
-       * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_sink_link),
-       (gst_gdk_pixbuf_chain): Fix logic bug causing spurious errors.
-       * ext/jpeg/gstjpegdec.c: (gst_jpegdec_base_init),
-       (gst_jpegdec_init), (gst_jpegdec_chain): Fix negotiation.
-       * ext/jpeg/gstjpegenc.c: (gst_jpegenc_base_init),
-       (gst_jpegenc_class_init), (gst_jpegenc_init),
-       (gst_jpegenc_getcaps), (gst_jpegenc_link), (gst_jpegenc_resync),
-       (gst_jpegenc_chain), (gst_jpegenc_set_property),
-       (gst_jpegenc_get_property):  Fix negotiation.  Add some properties.
-       * ext/jpeg/gstjpegenc.h: Fix negotiation.
-
-2004-02-10  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/mikmod/gstmikmod.c: (gst_mikmod_init),
-       (gst_mikmod_srcfixate), (gst_mikmod_srclink), (gst_mikmod_loop):
-       * ext/mikmod/gstmikmod.h:
-         fix caps negotiation in mikmod
-       * ext/ogg/gstoggdemux.c: (gst_ogg_print):
-         output debug information
-
-2004-02-08  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst-libs/gst/colorbalance/Makefile.am:
-       * gst-libs/gst/navigation/Makefile.am:
-       * gst-libs/gst/xoverlay/Makefile.am:
-         remove unused GST_OPT_CFLAGS from Makefiles
-         include X_CFLAGS and X_LIBS in xoverlay. (#131948)
-
-2004-02-07  David Schleef  <ds@schleef.org>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_handle_event): Don't
-       push events to pads that haven't been created (#133508)
-
-2004-02-07  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_src_convert),
-       (gst_dvdec_sink_convert), (gst_dvdec_handle_sink_event),
-       (gst_dvdec_video_getcaps), (gst_dvdec_video_link),
-       (gst_dvdec_loop), (gst_dvdec_change_state):
-       Second attempt at committing a working dvdec element.
-
-2004-02-06  David Schleef  <ds@schleef.org>
-
-       Build fixes for OS X: (see #129600)
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_strh),
-       (gst_riff_read_strf_vids), (gst_riff_read_strf_auds),
-       (gst_riff_read_strf_iavs):
-       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_avih),
-       (gst_avi_demux_stream_odml):
-       * gst/playondemand/Makefile.am:
-       * gst/rtp/rtp-packet.c:
-
-2004-02-05  David Schleef  <ds@schleef.org>
-
-       * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_loop): Revert
-       last change, because it Just Doesn't Compile.
-
-2004-02-05  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
-         skip undecodable id3v2 tag instead of keeping it
-
-2004-02-05  David Schleef  <ds@schleef.org>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
-       Unref leaked buffer.  (Noticed by Ronald)
-
-2004-02-05  David I. Lehn  <dlehn@users.sourceforge.net>
-
-       * pkgconfig/gstreamer-libs-uninstalled.pc.in:
-       Sync requires with other checks.  >= vs =.
-
-2004-02-06  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_video_getcaps),
-       (gst_dvdec_video_link), (gst_dvdec_loop):
-       * ext/dv/gstdvdec.h:
-         rework the caps negotiation so that dvdec works again instead
-         of just segfaulting.
-
-=== release 0.7.4 ===
-
-2004-02-06  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * NEWS: GStreamer Plugins 0.7.4 "For Great Justice" released
-       * configure.ac: changed for release
-
-2004-02-05  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-libs/gst/gconf/gstreamer-gconf-uninstalled.pc.in:
-       * pkgconfig/gstreamer-interfaces-uninstalled.pc.in:
-       * pkgconfig/gstreamer-libs-uninstalled.pc.in:
-       * pkgconfig/gstreamer-play-uninstalled.pc.in:
-          reworked patch by David Lehn to fix libdir and includedir for
-          uninstalled libraries
-          removed play and gconf from gstreamer-libs since they have their
-          own pkgconfig files
-
-2004-02-04  David Schleef  <ds@schleef.org>
-
-       * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt): Fix a caps
-       memleak.
-
-2004-02-05  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_info):
-         use correct GST_TAG_ENCODER tag
-
-2004-02-05  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_change_state):
-         be sure to stop the clock when going to paused
-       * sys/oss/gstosssink.c: (gst_osssink_change_state):
-         reset number of transmitted when going to ready.
-       fixes #132935
-
-2004-02-05  Charles Schmidt <cschmidt2@emich.edu>
-
-       reviewed by Benjamin Otte
-
-       * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
-         extract track count (fixes #133410)
-
-2004-02-04  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_do_caps_nego):
-         that should be !=, not == (fixes #132519)
-
-2004-02-04  David Schleef  <ds@schleef.org>
-
-       Make sure set_explicit_caps() is called before adding pad.
-       * ext/ffmpeg/gstffmpegdemux.c: (gst_ffmpegdemux_loop):
-       * gst/id3/gstid3types.c: (gst_id3types_loop):
-       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead):
-       * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream):
-
-2004-02-04  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-          bump nano to 2, first prerelease
-          put back AM_PROG_LIBTOOL
-
-2004-02-04  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * testsuite/alsa/Makefile.am:
-          these are user test apps, not automatic testsuite tests
-
-2004-02-04  David Schleef  <ds@schleef.org>
-
-       Convert GST_DEBUG_CAPS() to GST_DEBUG():
-       * gst/mpeg1videoparse/gstmp1videoparse.c:
-       (mp1videoparse_parse_seq):
-       * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream):
-       * gst/videoscale/gstvideoscale.c: (gst_videoscale_getcaps):
-       * sys/xvideo/gstxwindow.c: (_gst_xwindow_new):
-       * sys/xvideo/xvideosink.c: (gst_xvideosink_sinkconnect),
-       (gst_xvideosink_getcaps):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support):
-       * testsuite/gst-lint: more tests
-
-2004-02-04  David Schleef  <ds@schleef.org>
-
-       Replace use of GST_PAD_FORMATS_FUNCTION() and similar macros
-       with the code that they would expand to.
-       * ext/flac/gstflacdec.c: (gst_flacdec_get_src_formats),
-       (gst_flacdec_get_src_query_types),
-       (gst_flacdec_get_src_event_masks):
-       * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_get_formats),
-       (gst_gnomevfssrc_get_query_types),
-       (gst_gnomevfssrc_get_event_mask):
-
-2004-02-04  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst/sine/gstsinesrc.c: (gst_sinesrc_class_init),
-       (gst_sinesrc_dispose):
-         fix memleak by properly disposing sinesrc
-
-2004-02-04  Julien MOUTTE  <julien@moutte.net>
-
-       * gst-libs/gst/xoverlay/xoverlay.c: (gst_x_overlay_expose):
-       * gst-libs/gst/xoverlay/xoverlay.h: Adding the _expose method to tell
-       an overlay to redraw the image because it has been exposed.
-       * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_destroy),
-       (gst_ximagesink_ximage_put), (gst_ximagesink_expose),
-       (gst_ximagesink_xoverlay_init), (gst_ximagesink_init):
-       * sys/ximage/ximagesink.h: Implement expose method from XOverlay
-       interface
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_destroy),
-       (gst_xvimagesink_xvimage_put), (gst_xvimagesink_expose),
-       (gst_xvimagesink_xoverlay_init), (gst_xvimagesink_init):
-       * sys/xvimage/xvimagesink.h: Implement expose method from XOverlay
-       interface
-
-2004-02-03  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_type_find):
-         more memleak fixage
-
-2004-02-03  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/gdk_pixbuf/gstgdkpixbuf.c: (plugin_init):
-       * gst/typefind/gsttypefindfunctions.c:
-         fix memleaks shown by gst-typefind
-
-2004-02-03  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * common/glib-gen.mak:
-          add hack rule to touch .Plo files
-       * gst-libs/gst/colorbalance/Makefile.am:
-       * gst-libs/gst/mixer/Makefile.am:
-       * gst-libs/gst/play/Makefile.am:
-       * gst-libs/gst/tuner/Makefile.am:
-          remove glib_root variable
-
-2004-02-03  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_add_stream):
-         set explicit caps before adding the element, so the autopluggers can
-         plug correctly.
-       * gst/typefind/gsttypefindfunctions.c: (mp3_type_find),
-       (mpeg2_sys_type_find), (mpeg1_sys_type_find),
-       (mpeg_video_type_find), (mpeg_video_stream_type_find),
-       (dv_type_find):
-         fix memleaks in typefind functions. gst_type_find_suggest takes a const
-         argument.
-
-2004-02-03  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-libs/gst/colorbalance/Makefile.am:
-       * gst-libs/gst/colorbalance/colorbalance-marshal.list:
-       * gst-libs/gst/colorbalance/colorbalance.c:
-       * gst-libs/gst/colorbalance/colorbalance.h:
-       * gst-libs/gst/colorbalance/colorbalancemarshal.list:
-       * gst-libs/gst/mixer/Makefile.am:
-       * gst-libs/gst/mixer/mixer-marshal.list:
-       * gst-libs/gst/mixer/mixer.c:
-       * gst-libs/gst/mixer/mixer.h:
-       * gst-libs/gst/mixer/mixermarshal.list:
-       * gst-libs/gst/play/Makefile.am:
-       * gst-libs/gst/play/play.h:
-       * gst-libs/gst/tuner/Makefile.am:
-       * gst-libs/gst/tuner/tuner-marshal.list:
-       * gst-libs/gst/tuner/tuner.c:
-       * gst-libs/gst/tuner/tuner.h:
-       * gst-libs/gst/tuner/tunermarshal.list:
-          use new glib-gen.mak snippet to clean up Makefile.am
-          fix various bugs in Makefile.am's
-
-2004-02-03  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain):
-         handle chain parsing correctly in the multichain case
-       * ext/theora/theoradec.c: (gst_theora_dec_init), (_theora_ilog),
-       (theora_dec_from_granulepos), (theora_dec_to_granulepos),
-       (theora_dec_src_query), (theora_dec_src_event), (theora_dec_event),
-       (theora_dec_chain):
-         handle events and queries correctly
-
-2004-02-03  David I. Lehn  <dlehn@users.sourceforge.net>
-
-       * .cvsignore:
-       Ignore generated file _stdint.h.
-
-2004-02-03  David I. Lehn  <dlehn@users.sourceforge.net>
-
-       * gst-libs/gst/colorbalance/Makefile.am:
-       * gst-libs/gst/colorbalance/colorbalance.h:
-       * gst-libs/gst/mixer/Makefile.am:
-       * gst-libs/gst/mixer/mixer.h:
-       * gst-libs/gst/play/Makefile.am:
-       * gst-libs/gst/play/play.h:
-       * gst-libs/gst/tuner/Makefile.am:
-       * gst-libs/gst/tuner/tuner.h:
-       Generate enum type code with glib-mkenums.
-       * gst-libs/gst/colorbalance/.cvsignore:
-       * gst-libs/gst/mixer/.cvsignore:
-       * gst-libs/gst/play/.cvsignore:
-       * gst-libs/gst/tuner/.cvsignore:
-       Ignore generated files.
-
-2004-02-03  David I. Lehn  <dlehn@users.sourceforge.net>
-
-       * gst-libs/gst/audio/.cvsignore:
-       Ignore generated file.
-       * gst-libs/gst/audio/Makefile.am:
-       Do not install example filter.
-
-2004-02-03  David I. Lehn  <dlehn@users.sourceforge.net>
-
-       * examples/switch/.cvsignore:
-       Ignore generated file.
-
-2004-02-03  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * common/m4/ax_create_stdint_h.m4:
-       * configure.ac:
-         add AX_CREATE_STDINT_H to get correct type definitions for a52dec in
-         _stdint.h.
-       * Makefile.am:
-         remove generated _stdint.h in DISTCLEANFILES
-       * ext/a52dec/gsta52dec.c:
-         include _stdint.h for a52dec. (should fix #133064)
-
-2004-02-02  Jeremy Simon  <jesimon@libertysurf.fr>
-
-       * gst/tags/gstvorbistag.c: (gst_vorbis_tag_add),
-       (gst_tag_to_vorbis_comments):
-       Add replaygain support to vorbistag
-
-2004-02-02  Jeremy Simon  <jesimon@libertysurf.fr>
-       * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps),
-       (gst_ffmpeg_caps_to_extradata):
-         Fix SVQ3 caps flag properties
-         Use glib macro for bytes swap
-
-2004-02-02  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/audiofile/gstafsink.c: (gst_afsink_plugin_init):
-       * ext/audiofile/gstafsrc.c: (gst_afsrc_plugin_init):
-       * ext/gnomevfs/gstgnomevfs.c: (plugin_init):
-       * ext/sndfile/gstsf.c: (plugin_init):
-       * gst/avi/gstavi.c: (plugin_init):
-       * sys/dxr3/dxr3init.c: (plugin_init):
-       * sys/oss/gstossaudio.c: (plugin_init):
-       * sys/v4l/gstv4l.c: (plugin_init):
-       * sys/v4l2/gstv4l2.c: (plugin_init):
-          remove textdomain calls
-       * po/nl.po:
-          update Dutch translation
-
-2004-02-02  Julien MOUTTE  <julien@moutte.net>
-
-       * gst-libs/gst/play/play.c: (gst_play_pipeline_setup),
-       (gst_play_set_audio_sink): Moving volume in the audio thread for
-       instantaneous volume change. Maybe i will add another volume in front
-       of visualization later, not sure yet though.
-
-2004-02-02  Julien MOUTTE  <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_renegotiate_size),
-       (gst_ximagesink_handle_xevents): Better X events handling, only take
-       the latest events for configure and motion.
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xevents): same.
-
-2004-02-02  Jon Trowbridge  <trow@gnu.org>
-
-       reviewed by: David Schleef  <ds@schleef.org>
-
-       Fix memory leaks:
-       * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_register):
-       * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_register):
-
-2004-02-02  David Schleef  <ds@schleef.org>
-
-       code cleanup.  Change bzero() to memset().  Remove duplicate ; at ends
-       of lines.
-       * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_event):
-       * ext/flac/gstflactag.c: (gst_flac_tag_chain):
-       * ext/xvid/gstxviddec.c: (gst_xviddec_src_link):
-       * gst-libs/gst/play/play.c: (gst_play_get_sink_element):
-       * gst/ac3parse/gstac3parse.c: (gst_ac3parse_chain):
-       * gst/effectv/gstedge.c: (gst_edgetv_sinkconnect):
-       * gst/effectv/gstvertigo.c: (gst_vertigotv_sinkconnect):
-       * gst/intfloat/float22int.c: (gst_float2_2_int_getcaps),
-       (gst_float2_2_int_link):
-       * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_chain_subtitle):
-       * gst/rtjpeg/RTjpeg.c: (RTjpeg_init_mcompress):
-       * gst/tcp/gsttcpsink.c: (gst_tcpsink_init_send):
-       * gst/tcp/gsttcpsrc.c: (gst_tcpsrc_init_receive):
-       * gst/udp/gstudpsink.c: (gst_udpsink_init_send):
-       * gst/udp/gstudpsrc.c: (gst_udpsrc_init_receive):
-       * sys/v4l/gstv4lelement.c: (gst_v4lelement_init):
-       * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_set_capture):
-       * testsuite/gst-lint: Add tests for bzero and ;;
-
-2004-02-02  David Schleef  <ds@schleef.org>
-
-       * gst/debug/efence.c: Add fallback if MAP_ANONYMOUS isn't defined.
-
-2004-02-02  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/aalib/gstaasink.c: (gst_aasink_open):
-       * ext/alsa/gstalsa.c: (gst_alsa_link), (gst_alsa_xrun_recovery):
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
-       * ext/alsa/gstalsasrc.c: (gst_alsa_src_loop):
-       * ext/audiofile/gstafsink.c: (gst_afsink_open_file),
-       (gst_afsink_close_file):
-       * ext/audiofile/gstafsrc.c: (gst_afsrc_open_file),
-       (gst_afsrc_close_file):
-       * ext/divx/gstdivxdec.c: (gst_divxdec_setup), (gst_divxdec_chain):
-       * ext/divx/gstdivxenc.c: (gst_divxenc_setup), (gst_divxenc_chain):
-       * ext/dv/gstdvdec.c: (gst_dvdec_loop):
-       * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_user_op), (dvdnavsrc_get):
-       * ext/esd/esdmon.c: (gst_esdmon_get):
-       * ext/esd/esdsink.c: (gst_esdsink_chain), (gst_esdsink_open_audio):
-       * ext/faac/gstfaac.c: (gst_faac_chain):
-       * ext/faad/gstfaad.c: (gst_faad_chain):
-       * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_chain):
-       * ext/ffmpeg/gstffmpegdemux.c: (gst_ffmpegdemux_loop):
-       * ext/ffmpeg/gstffmpegmux.c: (gst_ffmpegmux_loop):
-       * ext/flac/gstflacdec.c: (gst_flacdec_error_callback),
-       (gst_flacdec_loop):
-       * ext/flac/gstflacenc.c: (gst_flacenc_chain):
-       * ext/flac/gstflactag.c: (gst_flac_tag_chain):
-       * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_chain):
-       * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_open_file),
-       (gst_gnomevfssink_close_file):
-       * ext/gnomevfs/gstgnomevfssrc.c: (audiocast_init),
-       (gst_gnomevfssrc_open_file):
-       * ext/ivorbis/vorbisfile.c: (gst_ivorbisfile_loop):
-       * ext/lame/gstlame.c: (gst_lame_sink_link), (gst_lame_chain):
-       * ext/lcs/gstcolorspace.c: (gst_colorspace_srcconnect_func):
-       * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event),
-       (gst_id3_tag_do_typefind), (gst_id3_tag_chain):
-       * ext/mad/gstmad.c: (gst_mad_chain):
-       * ext/mikmod/gstmikmod.c: (gst_mikmod_loop):
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/mpeg2enc/gstmpeg2enc.cc:
-       * ext/mplex/gstmplex.cc:
-       * ext/mplex/gstmplexibitstream.cc:
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain),
-       (gst_ogg_demux_push):
-       * ext/raw1394/gstdv1394src.c:
-       * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_lock),
-       (gst_sdlvideosink_initsdl), (gst_sdlvideosink_create):
-       * ext/sndfile/gstsf.c: (gst_sf_open_file), (gst_sf_close_file),
-       (gst_sf_loop):
-       * ext/speex/gstspeexenc.c: (gst_speexenc_chain):
-       * ext/swfdec/gstswfdec.c: (gst_swfdec_loop):
-       * ext/tarkin/gsttarkindec.c: (gst_tarkindec_chain):
-       * ext/tarkin/gsttarkinenc.c: (gst_tarkinenc_chain):
-       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_chain):
-       * ext/vorbis/vorbisfile.c: (gst_vorbisfile_loop):
-       * ext/xvid/gstxviddec.c: (gst_xviddec_setup), (gst_xviddec_chain):
-       * ext/xvid/gstxvidenc.c: (gst_xvidenc_setup), (gst_xvidenc_chain):
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head),
-       (gst_riff_read_element_data), (gst_riff_read_seek),
-       (gst_riff_peek_list), (gst_riff_read_list), (gst_riff_read_header):
-       * gst/adder/gstadder.c: (gst_adder_loop):
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_segment),
-       (gst_asf_demux_process_stream), (gst_asf_demux_get_stream):
-       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_init),
-       (gst_avi_demux_add_stream), (gst_avi_demux_stream_header):
-       * gst/avi/gstavimux.c: (gst_avimux_stop_file):
-       * gst/flx/gstflxdec.c: (gst_flxdec_loop):
-       * gst/goom/gstgoom.c: (gst_goom_chain):
-       * gst/id3/gstid3types.c: (gst_id3types_loop):
-       * gst/intfloat/float22int.c: (gst_float2_2_int_chain):
-       * gst/intfloat/gstfloat2int.c: (gst_float2int_loop):
-       * gst/intfloat/gstint2float.c: (gst_int2float_chain_gint16):
-       * gst/matroska/ebml-read.c: (gst_ebml_read_element_id),
-       (gst_ebml_read_element_length), (gst_ebml_read_element_data),
-       (gst_ebml_read_seek), (gst_ebml_read_uint), (gst_ebml_read_sint),
-       (gst_ebml_read_float), (gst_ebml_read_header):
-       * gst/matroska/matroska-demux.c: (gst_matroska_demux_init_stream),
-       (gst_matroska_demux_parse_blockgroup):
-       * gst/monoscope/gstmonoscope.c: (gst_monoscope_chain):
-       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_loop):
-       * gst/oneton/gstoneton.c: (gst_oneton_chain):
-       * gst/silence/gstsilence.c: (gst_silence_get):
-       * gst/sine/gstsinesrc.c: (gst_sinesrc_get):
-       * gst/smpte/gstsmpte.c: (gst_smpte_loop):
-       * gst/speed/gstspeed.c: (speed_loop):
-       * gst/tags/gstvorbistag.c: (gst_vorbis_tag_chain):
-       * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get):
-       * gst/volenv/gstvolenv.c: (gst_volenv_chain):
-       * gst/wavenc/gstwavenc.c: (gst_wavenc_chain):
-       * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt),
-       (gst_wavparse_loop):
-       * sys/dxr3/dxr3audiosink.c: (dxr3audiosink_open),
-       (dxr3audiosink_set_mode_pcm), (dxr3audiosink_set_mode_ac3),
-       (dxr3audiosink_close):
-       * sys/dxr3/dxr3spusink.c: (dxr3spusink_open), (dxr3spusink_close):
-       * sys/dxr3/dxr3videosink.c: (dxr3videosink_open),
-       (dxr3videosink_close), (dxr3videosink_write_data):
-       * sys/oss/gstosselement.c: (gst_osselement_open_audio):
-       * sys/oss/gstosssink.c: (gst_osssink_chain):
-       * sys/oss/gstosssrc.c: (gst_osssrc_get):
-       * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_chain):
-       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_buffer_free):
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_buffer_free):
-       * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay),
-       (gst_v4l_set_window), (gst_v4l_enable_overlay):
-       * sys/v4l/v4l_calls.c: (gst_v4l_get_capabilities), (gst_v4l_open),
-       (gst_v4l_set_chan_norm), (gst_v4l_get_signal),
-       (gst_v4l_get_frequency), (gst_v4l_set_frequency),
-       (gst_v4l_get_picture), (gst_v4l_set_picture), (gst_v4l_get_audio),
-       (gst_v4l_set_audio):
-       * sys/v4l/v4l_calls.h:
-       * sys/v4l/v4lmjpegsink_calls.c: (gst_v4lmjpegsink_sync_thread),
-       (gst_v4lmjpegsink_queue_frame), (gst_v4lmjpegsink_set_playback),
-       (gst_v4lmjpegsink_playback_init),
-       (gst_v4lmjpegsink_playback_start):
-       * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_queue_frame):
-       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_queue_frame),
-       (gst_v4lsrc_sync_frame), (gst_v4lsrc_capture_init),
-       (gst_v4lsrc_requeue_frame), (gst_v4lsrc_try_palette):
-       * sys/v4l2/gstv4l2src.c: (gst_v4l2src_get):
-       * sys/v4l2/v4l2-overlay_calls.c: (gst_v4l2_set_display),
-       (gst_v4l2_set_window), (gst_v4l2_enable_overlay):
-       * sys/v4l2/v4l2_calls.c: (gst_v4l2_get_capabilities),
-       (gst_v4l2_fill_lists), (gst_v4l2_open), (gst_v4l2_get_norm),
-       (gst_v4l2_set_norm), (gst_v4l2_get_input), (gst_v4l2_set_input),
-       (gst_v4l2_get_output), (gst_v4l2_set_output),
-       (gst_v4l2_get_frequency), (gst_v4l2_set_frequency),
-       (gst_v4l2_signal_strength), (gst_v4l2_get_attribute),
-       (gst_v4l2_set_attribute):
-       * sys/v4l2/v4l2_calls.h:
-       * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_fill_format_list),
-       (gst_v4l2src_queue_frame), (gst_v4l2src_grab_frame),
-       (gst_v4l2src_get_capture), (gst_v4l2src_set_capture),
-       (gst_v4l2src_capture_init), (gst_v4l2src_capture_start),
-       (gst_v4l2src_capture_stop):
-       * sys/vcd/vcdsrc.c: (vcdsrc_open_file):
-       * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
-       (gst_ximagesink_chain):
-       * sys/xvideo/xvideosink.c: (gst_xvideosink_buffer_new),
-       (gst_xvideosink_sinkconnect), (gst_xvideosink_chain),
-       (gst_xvideosink_xwindow_new):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
-       (gst_xvimagesink_chain):
-
-2004-02-02  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/volume/gstvolume.c: (gst_volume_set_volume),
-       (gst_volume_get_volume), (volume_class_init), (volume_init),
-       (volume_chain_int16), (volume_update_volume):
-       * gst/volume/gstvolume.h:
-          make code more readable by removing magic numbers
-          make mixer interface export 0-100 range
-          make it internally map to 0.0-1.0 range so users don't distort
-          output by putting the sliders at full volume
-
-2004-02-02  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-libs/gst/play/play.c: (gst_play_tick_callback),
-       (gst_play_state_change), (gst_play_seek_to_time):
-        block the tick callback for 0.5 secs after doing a seek
-
-2004-02-02  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-libs/gst/play/play.c: (gst_play_new):
-          check for GError
-
-2004-02-01  Julien MOUTTE  <julien@moutte.net>
-
-       * gst-libs/gst/play/play.c: (gst_play_seek_to_time),
-       (gst_play_new): Accepting NULL GError, blocking time tick while seeking.
-       * sys/ximage/ximagesink.c: (gst_ximagesink_sink_link),
-       (gst_ximagesink_chain), (gst_ximagesink_init): s/sinkconnect/sink_link
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_sink_link),
-       (gst_xvimagesink_chain), (gst_xvimagesink_init): s/sinkconnect/sink_link
-
-2004-02-01  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * configure.ac:
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_event):
-          check for a function added in vorbis 1.1
-
-2004-01-31  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_change_state), (gst_alsa_start),
-       (gst_alsa_drain_audio), (gst_alsa_stop_audio):
-         really start/stop clock only on PLAYING <=> PAUSED
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
-         remove \n from debugging lines
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain):
-         make it work when seeking does not
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_event):
-         reset on DISCONT
-
-2004-01-31  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_change_state), (gst_alsa_start):
-         start clock on PAUSED=>PLAYING, not later
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
-         extract correct time for different discont formats
-       (gst_alsa_sink_get_time):
-         don't segfault when no format is negotiated yet, just return 0
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event),
-       (gst_ogg_demux_handle_event), (gst_ogg_demux_push),
-       (gst_ogg_pad_push):
-         handle flush and discont events correctly
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_event), (vorbis_dec_chain):
-         handle discont events correctly
-
-2004-01-31  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-libs/gst/play/play.c: (gst_play_error_quark),
-       (gst_play_error_create), (gst_play_error_plugin),
-       (gst_play_pipeline_setup), (gst_play_init), (gst_play_new):
-       * gst-libs/gst/play/play.h:
-          add error handling during creation
-       * examples/gstplay/player.c: (main):
-          use new gst_play_new
-
-
-2004-01-31  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/theora/theoradec.c: (theora_dec_chain):
-         make comments work
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_src_query),
-       (vorbis_dec_src_event), (vorbis_dec_chain):
-         add encoder tag, fix tag reading to be more error tolerant, change
-         BITRATE to NOMINAL_BITRATE, add debugging, don't unref events after
-         gst_pad_event_default.
-       * gst/tags/gstvorbistag.c:
-       (gst_tag_list_from_vorbiscomment_buffer):
-         undefine function specific define at end of function
-
-2004-01-31  Jeremy Simon  <jesimon@libertysurf.fr>
-
-       * ext/flac/gstflac.c: (plugin_init):
-       * ext/flac/gstflacdec.c: (gst_flacdec_class_init):
-       * ext/flac/gstflacdec.h:
-       * ext/flac/gstflacenc.h:
-         Fix typos
-
-2004-01-30  David I. Lehn  <dlehn@users.sourceforge.net>
-
-       * examples/gstplay/player.c: s/gstplay.h/play.h/
-
-2004-01-30  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-libs/gst/play/Makefile.am:
-       * gst-libs/gst/play/gstplay.c:
-       * gst-libs/gst/play/gstplay.h:
-       * gst-libs/gst/play/play.c:
-          more surgery, operation complete
-
-2004-01-30  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-libs/gst/play/play.old.c:
-       * gst-libs/gst/play/play.old.h:
-          after CVS surgery by moving, remove
-       * gst-libs/gst/play/playpipelines.c:
-          remove
-
-       * gst/intfloat/float22int.c: (gst_float2_2_int_chain):
-          add negotiation error
-
-2004-01-30  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event),
-       (gst_ogg_demux_push):
-          add some seeking debug info
-          send a flush when seeking
-
-2004-01-30  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * configure.ac:
-         use AC_C_INLINE
-       * configure.ac:
-       * ext/Makefile.am:
-       * ext/theora/Makefile.am:
-       * ext/theora/theoradec.c:
-         add theora video decoder. Does just do simple decoding for now and
-         has been tested against Theora cvs only. It only works when theora
-         is compiled with --enable-static.
-       * ext/vorbis/vorbisdec.c: (vorbis_dec_event):
-         always reset packetno on DISCONT
-
-2004-01-30  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead):
-         Fix audio.
-
-2004-01-30  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/mpegaudioparse/gstmpegaudioparse.c:
-       (mp3_type_frame_length_from_header):
-         Fix header parsing - stolen from ffmpeg (thank you! :) ).
-
-2004-01-30  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/esd/esdsink.c: (gst_esdsink_init):
-         Since we have static pad template caps, we don't need to negotiate;
-         either the core errors out or we know the format.
-
-2004-01-30  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head),
-       (gst_riff_read_seek):
-       * gst/matroska/ebml-read.c: (gst_ebml_read_element_id),
-       (gst_ebml_read_seek):
-         Fix event handling.
-
-2004-01-30  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps):
-         removee video/x-theora from vp3 decoder, it doesn't handle raw
-         theora streams
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_init):
-         fix bug with finalizing element that never went to PAUSED
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query):
-         length and position queries were swapped
-       * ext/vorbis/vorbisdec.c: (gst_vorbis_dec_init),
-       (vorbis_dec_from_granulepos), (vorbis_dec_src_query),
-       (vorbis_dec_src_event):
-         implement querying time and bytes
-
-2004-01-30  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-        * just about every source file:
-          gst_element_error -> GST_ELEMENT_ERROR
-
-2004-01-29  Julien MOUTTE  <julien@moutte.net>
-
-       * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_get): Fixing seeking
-       emiting FLUSH and even before DISCONT.
-       * gst-libs/gst/play/gstplay.c: (gst_play_seek_to_time): Fix seeking to
-       get the best instant seeking as possible yay!
-
-2004-01-29  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/mpeg1videoparse/gstmp1videoparse.c:
-       (gst_mp1videoparse_real_chain):
-         Committed wrong version last week... Grr... Didn't notice until now.
-
-2004-01-29  Julien MOUTTE <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_new):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_new): Emit the
-       have_xwindow_id signal in xwindow_create.
-
-2004-01-29  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/ogg/gstoggdemux.c:
-         lots of changes - mainly support for chained bitstreams, seeking,
-         querying and bugfixes of course
-       * ext/vorbis/Makefile.am:
-       * ext/vorbis/vorbisdec.c:
-       * ext/vorbis/vorbisdec.h:
-         add vorbisdec raw vorbis decoder
-       * ext/vorbis/vorbis.c: (plugin_init):
-         register vorbisdec as PRIMARY, vorbisfile as SECONDARY
-       * gst/intfloat/Makefile.am:
-       * gst/intfloat/float22int.c:
-       * gst/intfloat/float22int.h:
-       * gst/intfloat/gstintfloatconvert.c: (plugin_init):
-         add float2intnew plugin. It converts multichannel interleaved float to
-         multichannel interleaved int. The name should probably be changed.
-       * gst/typefind/gsttypefindfunctions.c: (theora_type_find),
-       (plugin_init):
-         add typefinding for raw theora video so oggdemux can detect it.
-
-2004-01-28  Julien MOUTTE  <julien@moutte.net>
-
-       * gst-libs/gst/play/gstplay.c: (gst_play_seek_to_time): seek on video
-       sink element first.
-       * gst/videoscale/gstvideoscale.c:
-       (gst_videoscale_handle_src_event): Fixing src event handler.
-
-2004-01-28  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_class_init), (gst_v4lsrc_init),
-       (gst_v4lsrc_open), (gst_v4lsrc_close),
-       (gst_v4lsrc_palette_to_caps), (gst_v4lsrc_srcconnect),
-       (gst_v4lsrc_getcaps), (gst_v4lsrc_set_clock):
-       * sys/v4l/gstv4lsrc.h:
-       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_capture_start),
-       (gst_v4lsrc_grab_frame), (gst_v4lsrc_capture_stop):
-         Implement resizing... Hack. But that's why v4l is b0rked...
-
-2004-01-28  Julien MOUTTE <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls),
-       (gst_ximagesink_ximage_new), (gst_ximagesink_ximage_destroy),
-       (gst_ximagesink_ximage_put), (gst_ximagesink_xwindow_new),
-       (gst_ximagesink_xwindow_destroy):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
-       (gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_destroy),
-       (gst_xvimagesink_xwindow_new), (gst_xvimagesink_xwindow_destroy),
-       (gst_xvimagesink_xwindow_resize), (gst_xvimagesink_get_xv_support),
-       (gst_xvimagesink_xcontext_get): Removing some useless debugs messages,
-       correctly cleaning the image created to check xshm calls on succes,
-       added a lot of XSync calls in X11 functions, and fixed a segfault when
-       no image format was defined before negotiation happened.
-
-2004-01-28  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_query_func):
-         use gst_element_get_time to get correct time
-
-2004-01-28  Julien MOUTTE  <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xerror),
-       (gst_ximagesink_check_xshm_calls), (gst_ximagesink_ximage_destroy),
-       (gst_ximagesink_xcontext_get), (gst_ximagesink_class_init):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xerror),
-       (gst_xvimagesink_check_xshm_calls),
-       (gst_xvimagesink_xvimage_destroy), (gst_xvimagesink_xcontext_get): Our
-       X plugins are now able to detect that XShm calls will fail even if the
-       server claims that it has XShm support (remote displays most of the
-       time). We then log the error as a GST_DEBUG and set use_shm to FALSE
-       so that we use non XShm functions. This feature is almost useless for
-       xvimagesink as Xv is not supported on remote displays anyway, but
-       it might happen than even on the local display XShm calls fail.
-
-2004-01-27  David Schleef  <ds@schleef.org>
-
-       * ext/esd/esdsink.c: (gst_esdsink_class_init), (gst_esdsink_init),
-       (gst_esdsink_link), (gst_esdsink_get_time), (gst_esdsink_chain),
-       (gst_esdsink_change_state):  Fix sync issues in esdsink.  Also
-       changed esdsink to only use 44100,16,2, since esd sucks at rate
-       conversion and esdsink has had difficulty negotiating.
-
-2004-01-27  Julien MOUTTE <julien@moutte.net>
-
-       * gst-libs/gst/play/gstplay.c: (gst_play_tick_callback),
-       (gst_play_seek_to_time): Fixing the way to get current position.
-
-2004-01-27  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * sys/oss/gstosssink.c: (gst_osssink_sink_query):
-         use gst_element_get_time to get correct time
-
-2004-01-27  Julien MOUTTE <julien@moutte.net>
-
-       * gst-libs/gst/play/gstplay.c: (gst_play_set_location): The easiest
-       fix ever... Inverting 2 lines of code make spider autoplug correctly
-       tagged mp3 !
-
-2004-01-27  David Schleef  <ds@schleef.org>
-
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
-       Use gst_pad_try_set_caps_nonfixed().
-
-2004-01-27  David Schleef  <ds@schleef.org>
-
-       * gst/ac3parse/gstac3parse.c: update to checklist 5
-       * gst/adder/gstadder.c: rewrite negotiation.  update to checklist 5
-       * gst/audioconvert/gstaudioconvert.c: update to checklist 5
-       * gst/audioscale/gstaudioscale.c: same
-       * gst/auparse/gstauparse.c: same
-       * gst/avi/gstavidemux.c: same
-
-2004-01-27  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_sink_event):
-         stop processing after EOS
-
-2004-01-27  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst/asfdemux/asfheaders.h:
-       * gst/asfdemux/gstasfdemux.c:
-       * gst/asfdemux/gstasfmux.c: (gst_asfmux_put_guid),
-       (gst_asfmux_put_string), (gst_asfmux_put_wav_header),
-       (gst_asfmux_put_vid_header), (gst_asfmux_put_bmp_header):
-         lot's of fixes to make data extraction simpler and get the code
-         architecture and compiler independant. Add debugging category
-       * gst/goom/gstgoom.c: (gst_goom_change_state):
-         reset channel count on PAUSED=>READY, not READY=>PAUSED
-
-2004-01-26  Colin Walters  <walters@verbum.org>
-
-       * ext/gnomevfs/gstgnomevfssrc.c (gst_gnomevfssrc_get): Remove ugly
-       code to pull a bigger buffer in iradio mode.  This as a side effect
-       makes typefinding work.
-
-2004-01-26  Jeremy Simon  <jesimon@libertysurf.fr>
-
-       * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_caps_to_extradata):
-       Fix SVQ3 decoding on PPC
-
-2004-01-26  Julien MOUTTE <julien@moutte.net>
-
-       * gst/videoscale/gstvideoscale.c: (gst_videoscale_chain): Dunno how
-       that one managed to stay there... Fixed.
-
-2004-01-26  Jeremy Simon  <jesimon@libertysurf.fr>
-
-       * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps),
-       (gst_ffmpeg_caps_to_extradata), (gst_ffmpeg_caps_to_pixfmt):
-       * gst/qtdemux/qtdemux.c: (plugin_init), (qtdemux_parse_trak),
-       (qtdemux_video_caps):
-       * gst/qtdemux/qtdemux.h:
-       Add SVQ3 specific flags to qtdemux and ffmpeg
-
-2004-01-26  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst-libs/gst/audio/audio.h:
-         remove buffer-frames from audio caps
-       * gst/audioconvert/gstaudioconvert.c:
-         fix plugin to really work.
-
-2004-01-25  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/mixer/mixer.c:
-       * gst-libs/gst/propertyprobe/propertyprobe.c:
-       * gst-libs/gst/tuner/tuner.c: (gst_tuner_find_norm_by_name),
-       (gst_tuner_find_channel_by_name):
-       * gst-libs/gst/tuner/tuner.h:
-         Add gtk-doc style comments. Also fix a function name.
-
-2004-01-25  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/divx/gstdivxdec.c: (gst_divxdec_init),
-       (gst_divxdec_negotiate):
-         Fix for new capsnego - also fixes gst-player with divxdec.
-
-2004-01-25  Julien MOUTTE  <julien@moutte.net>
-
-       * gst-libs/gst/play/gstplay.c: (gst_play_pipeline_setup),
-       (gst_play_identity_handoff), (gst_play_set_location),
-       (gst_play_set_visualization), (gst_play_connect_visualization): Another
-       try in visualization implementation. Still have an issue with switch
-       blocking when pulling from video_queue and only audio comes out of
-       spider.
-       * gst/switch/gstswitch.c: (gst_switch_release_pad),
-       (gst_switch_poll_sinkpads), (gst_switch_class_init): Implementing pad
-       release method. And check if the pad is usable before pulling.
-
-2004-01-25  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/videofilter/gstvideobalance.c: (gst_videobalance_dispose),
-       (gst_videobalance_init),
-       (gst_videobalance_colorbalance_list_channels),
-       (gst_videobalance_colorbalance_set_value),
-       (gst_videobalance_colorbalance_get_value),
-       (gst_videobalance_update_properties),
-       (gst_videobalance_update_tables_planar411),
-       (gst_videobalance_planar411):
-       * gst/videofilter/gstvideobalance.h:
-         Implement lookup-tables. +/- 10x faster.
-
-2004-01-25  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_avih),
-       (gst_avi_demux_stream_odml), (gst_avi_demux_stream_index):
-         The index reading was broken. The rest worked fine, but the whole
-         goal of my rewrite was to make avidemux readable, and this was
-         not at all readable. Please use typed variables.
-
-2004-01-25  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_info):
-         Additional pad usability check.
-       * gst/mpeg1videoparse/gstmp1videoparse.c: (gst_mp1videoparse_init),
-       (mp1videoparse_find_next_gop), (gst_mp1videoparse_time_code),
-       (gst_mp1videoparse_real_chain):
-         Fix MPEG video stream parsing. The original plugin had several
-         issues, including not timestamping streams where the source was
-         not timestamped (this happens with PTS values in mpeg system
-         streams, but MPEG video is also a valid stream on its own so
-         that needs timestamps too). We use the display time code for that
-         for now. Also, if one incoming buffer contains multiple valid
-         frames, we push them all on correctly now, including proper EOS
-         handling. Lastly, several potential segfaults were fixed, and we
-         properly sync on new sequence/gop headers to include them in next,
-         not previous frames (since they're header for the next frame, not
-         the previous). Also see #119206.
-       * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain),
-       (bpf_from_header):
-         Move caps setting so we only do it after finding several valid
-         MPEG-1 fraes sequentially, not right after the first one (which
-         might be coincidental).
-       * gst/typefind/gsttypefindfunctions.c: (mpeg1_sys_type_find),
-       (mpeg_video_type_find), (mpeg_video_stream_type_find),
-       (plugin_init):
-         Add unsynced MPEG video stream typefinding, and change some
-         probability values so we detect streams rightly. The idea is as
-         follows: I can have an unsynced system stream which contains
-         video. In the current code, I would randomly get a type for either
-         system or video stream type found, because the probabilities are
-         being calculated rather randomly. I now use fixed values, so we
-         always prefer system stream if that was found (and that is how it
-         should be). If no system stream was found, we can still identity                the stream as video-only.
-
-2004-01-23  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_avih),
-       (gst_avi_demux_stream_odml), (gst_avi_demux_stream_index):
-         don't write to buffer. Extract data without the need of
-         __attribute__ ((packed))
-
-2004-01-23  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/typefind/gsttypefindfunctions.c: (mpeg1_parse_header),
-       (mpeg1_sys_type_find):
-         Fix MPEG-1 stream typefinding.
-
-2004-01-23  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/typefind/gsttypefindfunctions.c: (mpeg2_sys_type_find):
-         Fix typefinding for MPEG-1 system streams, similar to MPEG-2.
-
-2004-01-23  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/esd/esdsink.c: (gst_esdsink_open_audio):
-       * ext/esd/gstesd.c: (plugin_init):
-          private debugging, better error reporting
-
-2004-01-23  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_class_init),
-       (gst_riff_read_init), (gst_riff_read_change_state):
-       * gst-libs/gst/riff/riff-read.h:
-         Remove stuff fromold metadata system.
-
-2004-01-23  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ogg/gstoggdemux.c:
-         Fix wrong file comment.
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_info):
-       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_header):
-         Add metadata reading properly.
-
-2004-01-23  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/Makefile.am:
-          Fix nas DIST_SUBDIRS
-          Uraeus:
-          Fix bug where make distcheck doesn't get run on adding stuff to
-          the build.
-
-2004-01-23  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/divx/gstdivxdec.c: (gst_divxdec_init), (gst_divxdec_setup):
-       * ext/divx/gstdivxdec.h:
-         Fix divx3 ("msmpeg4") playback using divxdec.
-
-2004-01-23  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst/typefind/gsttypefindfunctions.c:
-       (mp3_type_frame_length_from_header): fix bug in length computation
-       (mp3_type_find): improve debugging output
-
-2004-01-23  Julien MOUTTE  <julien@moutte.net>
-
-       * gst-libs/gst/play/gstplay.c: (gst_play_pipeline_setup),
-       (gst_play_set_location), (gst_play_seek_to_time),
-       (gst_play_set_audio_sink), (gst_play_set_visualization),
-       (gst_play_connect_visualization), (gst_play_get_sink_element): Reworked
-       the pipeline from scratch. Visualization is back and switch went out as
-       i realized it was not possible to use the way i wanted.
-       * sys/ximage/ximagesink.c: (gst_ximagesink_imagepool_clear),
-       (gst_ximagesink_change_state), (gst_ximagesink_dispose): Move xcontext
-       clearing in state change from READY to NULL. So that one can clean the
-       X ressources keeping the element.
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
-       (gst_xvimagesink_imagepool_clear), (gst_xvimagesink_change_state),
-       (gst_xvimagesink_colorbalance_set_value),
-       (gst_xvimagesink_colorbalance_get_value),
-       (gst_xvimagesink_set_property), (gst_xvimagesink_dispose),
-       (gst_xvimagesink_init): Same xcontext cleaning than ximagesink in state
-       change from READY to NULL and fixed some stupid bugs in colorbalance
-       get/set values. Also added the following feature : when nobody tries to
-       set some values to the colorbalance levels before the xcontext is
-       grabbed, then when creating channels list from Xv attributes we set the
-       internal values to the Xv defaults. This way we handle buggy Xv drivers
-       that set default hue values far from the middle of the range (Thanks
-       to Jon Trowbridge for pointing that issue).
-       * sys/xvimage/xvimagesink.h: Adding a cb_changed boolean to know if
-       colorbalance levels have been set before xcontext is grabbed.
-
-2004-01-22  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/oss/gstosselement.c: (gst_osselement_class_probe_devices):
-         Fix the ossmixer case where we shouldn't open /dev/dsp* because
-         it might block operations (which is bad for a mixer).
-
-2004-01-22  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-libs/gst/media-info/media-info-priv.c: (have_type_callback),
-       (deep_notify_callback), (gmi_set_decoder), (gmi_clear_decoder),
-       (gmip_find_type_pre):
-       * gst-libs/gst/media-info/media-info-priv.h:
-       * gst-libs/gst/media-info/media-info.c:
-       (gst_media_info_instance_init), (gst_media_info_read_idler):
-        add fakesink to get caps on decoder src pad again
-        fix callback prototype to match new have_type signal signature
-
-2004-01-22  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/adder/gstadder.c: (gst_adder_link):
-          fix non-compile and cut-n-paste code
-
-2004-01-21  David Schleef  <ds@schleef.org>
-
-       * ext/swfdec/gstswfdec.c: (gst_swfdec_video_getcaps),
-       (gst_swfdec_video_link), (copy_image), (gst_swfdec_loop),
-       (gst_swfdec_init), (gst_swfdec_change_state):
-       * ext/swfdec/gstswfdec.h:
-       Fix negotiation.
-       * gst/adder/gstadder.c: (gst_adder_link), (gst_adder_init),
-       (gst_adder_request_new_pad): Fix negotiation.
-       * gst/goom/gstgoom.c: (gst_goom_init), (gst_goom_src_fixate):
-       Add a fixate function.
-       * gst/intfloat/gstfloat2int.c:
-       * gst/intfloat/gstfloat2int.h:
-       * gst/intfloat/gstint2float.c:
-       * gst/intfloat/gstint2float.h:
-       Completely rewrite the negotiation.  Doesn't quite work yet,
-       due to some buffer-frames problem.
-
-2004-01-21  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/gnomevfs/gstgnomevfssrc.c:
-       * sys/v4l2/v4l2_calls.h:
-          fix includes for distcheck
-
-2004-01-21  Christian Schaller <uraeus@gnome.org>
-
-       * ext/nas/
-       Add libnas (network audio system) plugin, patch from Arwed von Merkatz
-       based on earlier patch from Laurent Vivier
-
-2004-01-20  Jeremy Simon  <jesimon@libertysurf.fr>
-
-       * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_caps_to_extradata):
-       Fix wma caps property
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_audio_caps):
-       Fix typo (flags1 and flags2)
-
-2004-01-20  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-libs/gst/media-info/media-info-priv.c:
-       (deep_notify_callback), (gmi_seek_to_track), (gmi_get_decoder),
-       (gmip_find_type_pre), (gmip_find_type), (gmip_find_stream_post),
-       (gmip_find_stream), (gmip_find_track_metadata),
-       (gmip_find_track_streaminfo_post), (gmip_find_track_streaminfo),
-       (gmip_find_track_format):
-       * gst-libs/gst/media-info/media-info-priv.h:
-       * gst-libs/gst/media-info/media-info-test.c: (main):
-       * gst-libs/gst/media-info/media-info.c: (gst_media_info_init),
-       (gst_media_info_read_idler), (gst_media_info_read):
-       * gst-libs/gst/media-info/media-info.h:
-          register debugging category and use it for debugging
-
-2004-01-20  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/vorbis/vorbisfile.c: (gst_vorbisfile_update_streaminfo),
-       (gst_vorbisfile_new_link):
-          signal streaminfo through tags
-
-2004-01-20  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/mplex/gstmplex.cc:
-       * ext/mplex/gstmplexibitstream.cc:
-         g++ doesn't like NULL in our i18n/error macros, should be
-         either (NULL) or ("").
-
-2004-01-20  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/dxr3/dxr3audiosink.c:
-       * sys/dxr3/dxr3init.c:
-       * sys/dxr3/dxr3spusink.c: (dxr3spusink_close):
-       * sys/dxr3/dxr3videosink.c: (dxr3videosink_close):
-         Fix more error error error errors (missing includes here).
-
-2004-01-20  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/mpeg2enc/gstmpeg2encpicturereader.cc:
-         fix thomas' error errors.
-
-2004-01-20  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/mpeg2enc/gstmpeg2enc.cc:
-          fix error errors.
-
-2004-01-20  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/divx/gstdivxdec.c: (gst_divxdec_setup), (gst_divxdec_chain):
-       * ext/divx/gstdivxenc.c: (gst_divxenc_setup), (gst_divxenc_chain):
-         Fix for new error system.
-
-2004-01-20  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/divx/gstdivxenc.c: (gst_divxenc_setup), (gst_divxenc_chain):
-          fix for new error reporting
-
-2004-01-20  David Schleef  <ds@schleef.org>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents),
-       (gst_ximagesink_xcontext_get), (gst_ximagesink_getcaps),
-       (gst_ximagesink_set_xwindow_id): Change to using a framerate
-       of [1,100] instead of [0,MAX], since 0 isn't handled correctly,
-       and neither is 100+, most likely.
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
-       (gst_xvimagesink_getcaps): same
-
-2004-01-19  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * configure.ac:
-         Up version requirement to 2.0.3 (not yet released) to avoid symbol
-         clashes with ffmpeg.
-
-2004-01-20  Julien MOUTTE  <julien@moutte.net>
-
-       * gst/switch/gstswitch.c: (gst_switch_request_new_pad),
-       (gst_switch_init): Fixed switch element : proxying link and setting
-       caps from src to sink on request.
-
-2004-01-19  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay):
-       * sys/v4l2/v4l2-overlay_calls.c: (gst_v4l2_set_display),
-       (gst_v4l2_set_window), (gst_v4l2_enable_overlay):
-        fix element_error
-
-2004-01-19  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/v4l/v4l_calls.h:
-       * sys/v4l2/v4l2_calls.h:
-          element_error fixes
-
-2004-01-19  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-libs/gst/gst-i18n-plugin.h:
-          add locale.h
-          remove config.h inclusion
-
-2004-01-19  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * autogen.sh:
-          adding autopoint invocation
-       * Makefile.am:
-       * configure.ac:
-       * gst-libs/gst/gettext.h:
-          adding gettext bits
-       * ext/audiofile/gstafsink.c: (gst_afsink_plugin_init):
-       * ext/audiofile/gstafsrc.c: (gst_afsrc_plugin_init):
-       * ext/gnomevfs/gstgnomevfs.c: (plugin_init):
-       * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_open_file),
-       (gst_gnomevfssink_close_file):
-       * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_open_file):
-       * ext/sndfile/gstsf.c: (gst_sf_loop), (plugin_init):
-       * gst-libs/gst/gst-i18n-plugin.h:
-       * gst/avi/gstavi.c: (plugin_init):
-       * sys/dxr3/dxr3init.c: (plugin_init):
-       * sys/dxr3/dxr3videosink.c: (dxr3videosink_write_data):
-       * sys/oss/gstossaudio.c: (plugin_init):
-       * sys/oss/gstosselement.c: (gst_osselement_open_audio):
-       * sys/v4l/gstv4l.c: (plugin_init):
-       * sys/v4l/v4l_calls.c: (gst_v4l_open):
-       * sys/v4l2/gstv4l2.c: (plugin_init):
-       * sys/v4l2/v4l2_calls.c: (gst_v4l2_get_capabilities),
-       (gst_v4l2_fill_lists), (gst_v4l2_get_norm), (gst_v4l2_set_norm),
-       (gst_v4l2_get_input), (gst_v4l2_set_input), (gst_v4l2_get_output),
-       (gst_v4l2_set_output), (gst_v4l2_get_frequency),
-       (gst_v4l2_set_frequency), (gst_v4l2_signal_strength),
-       (gst_v4l2_get_attribute), (gst_v4l2_set_attribute):
-         make sure locale and translation domain are set
-          fix translated strings
-       * po/.cvsignore:
-       * po/LINGUAS:
-       * po/Makevars:
-       * po/POTFILES.in:
-       * po/nl.po:
-          put translation files into place
-       * sys/xvideo/imagetest.c: (main):
-       * ext/dv/demo-play.c: (main):
-          fix unnecessary translations
-
-2004-01-19  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
-
-       * ext/sndfile/gstsf.c:
-       * gst/avi/gstavimux.c:
-       * ext/audiofile/gstafsink.c:
-       * ext/audiofile/gstafsrc.c:
-       * ext/gnomevfs/gstgnomevfssink.c:
-       * ext/gnomevfs/gstgnomevfssrc.c:
-       * sys/oss/gstosselement.c:
-       * sys/v4l/v4l_calls.h:
-          fix i18n include
-
-2004-01-19  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/v4l2/v4l2_calls.c: (gst_v4l2_get_capabilities),
-       (gst_v4l2_fill_lists), (gst_v4l2_open), (gst_v4l2_get_norm),
-       (gst_v4l2_set_norm), (gst_v4l2_get_input), (gst_v4l2_set_input),
-       (gst_v4l2_get_output), (gst_v4l2_set_output),
-       (gst_v4l2_get_frequency), (gst_v4l2_set_frequency),
-       (gst_v4l2_signal_strength), (gst_v4l2_get_attribute),
-       (gst_v4l2_set_attribute):
-        update to new error handling
-
-2004-01-19  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ext/sidplay/gstsiddec.cc:
-       * gst/modplug/gstmodplug.cc:
-          parenthese NULL because C++ seems angry about it
-
-2004-01-19  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-libs/gst/gst-i18n-plugin.h:
-          add skeleton i18n stuff, but needs to be further implemented
-
-2004-01-18  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * examples/gstplay/player.c: (main):
-       * ext/aalib/gstaasink.c: (gst_aasink_open):
-       * ext/alsa/gstalsa.c: (gst_alsa_link), (gst_alsa_xrun_recovery):
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
-       * ext/alsa/gstalsasrc.c: (gst_alsa_src_loop):
-       * ext/audiofile/gstafsink.c: (gst_afsink_open_file),
-       (gst_afsink_close_file):
-       * ext/audiofile/gstafsrc.c: (gst_afsrc_open_file),
-       (gst_afsrc_close_file):
-       * ext/divx/gstdivxdec.c: (gst_divxdec_setup), (gst_divxdec_chain):
-       * ext/dv/gstdvdec.c: (gst_dvdec_loop):
-       * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_user_op), (dvdnavsrc_get):
-       * ext/esd/esdmon.c: (gst_esdmon_get):
-       * ext/esd/esdsink.c: (gst_esdsink_chain):
-       * ext/faac/gstfaac.c: (gst_faac_chain):
-       * ext/faad/gstfaad.c: (gst_faad_chain):
-       * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_chain):
-       * ext/ffmpeg/gstffmpegdemux.c: (gst_ffmpegdemux_loop):
-       * ext/ffmpeg/gstffmpegmux.c: (gst_ffmpegmux_loop):
-       * ext/flac/gstflacdec.c: (gst_flacdec_error_callback),
-       (gst_flacdec_loop):
-       * ext/flac/gstflacenc.c: (gst_flacenc_chain):
-       * ext/flac/gstflactag.c: (gst_flac_tag_chain):
-       * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_chain):
-       * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_open_file),
-       (gst_gnomevfssink_close_file):
-       * ext/gnomevfs/gstgnomevfssrc.c: (audiocast_init),
-       (gst_gnomevfssrc_open_file):
-       * ext/ivorbis/vorbisfile.c: (gst_ivorbisfile_loop):
-       * ext/lame/gstlame.c: (gst_lame_sink_link), (gst_lame_chain):
-       * ext/lcs/gstcolorspace.c: (gst_colorspace_srcconnect_func):
-       * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event),
-       (gst_id3_tag_do_typefind), (gst_id3_tag_chain):
-       * ext/mad/gstmad.c: (gst_mad_chain):
-       * ext/mikmod/gstmikmod.c: (gst_mikmod_loop):
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * ext/mpeg2enc/gstmpeg2enc.cc:
-       * ext/mpeg2enc/gstmpeg2encpicturereader.cc:
-       * ext/mplex/gstmplex.cc:
-       * ext/mplex/gstmplexibitstream.cc:
-       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain),
-       (gst_ogg_demux_push), (gst_ogg_pad_push):
-       * ext/raw1394/gstdv1394src.c:
-       * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_lock),
-       (gst_sdlvideosink_initsdl), (gst_sdlvideosink_create):
-       * ext/sidplay/gstsiddec.cc:
-       * ext/sndfile/gstsf.c: (gst_sf_open_file), (gst_sf_close_file),
-       (gst_sf_loop):
-       * ext/speex/gstspeexenc.c: (gst_speexenc_chain):
-       * ext/tarkin/gsttarkindec.c: (gst_tarkindec_chain):
-       * ext/tarkin/gsttarkinenc.c: (gst_tarkinenc_chain):
-       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_chain):
-       * ext/vorbis/vorbisfile.c: (gst_vorbisfile_loop):
-       * ext/xvid/gstxviddec.c: (gst_xviddec_setup), (gst_xviddec_chain):
-       * ext/xvid/gstxvidenc.c: (gst_xvidenc_setup), (gst_xvidenc_chain):
-       * gst-libs/gst/Makefile.am:
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head),
-       (gst_riff_read_element_data), (gst_riff_read_seek),
-       (gst_riff_peek_list), (gst_riff_read_list), (gst_riff_read_header):
-       * gst/adder/gstadder.c: (gst_adder_parse_caps), (gst_adder_loop):
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_segment),
-       (gst_asf_demux_process_stream), (gst_asf_demux_get_stream):
-       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_init),
-       (gst_avi_demux_add_stream), (gst_avi_demux_stream_header):
-       * gst/avi/gstavimux.c: (gst_avimux_stop_file):
-       * gst/flx/gstflxdec.c: (gst_flxdec_loop):
-       * gst/goom/gstgoom.c: (gst_goom_chain):
-       * gst/id3/gstid3types.c: (gst_id3types_loop):
-       * gst/intfloat/gstfloat2int.c: (gst_float2int_loop):
-       * gst/intfloat/gstint2float.c: (gst_int2float_chain_gint16):
-       * gst/matroska/ebml-read.c: (gst_ebml_read_element_id),
-       (gst_ebml_read_element_length), (gst_ebml_read_element_data),
-       (gst_ebml_read_seek), (gst_ebml_read_uint), (gst_ebml_read_sint),
-       (gst_ebml_read_float), (gst_ebml_read_header):
-       * gst/matroska/matroska-demux.c: (gst_matroska_demux_init_stream),
-       (gst_matroska_demux_parse_blockgroup):
-       * gst/modplug/gstmodplug.cc:
-       * gst/monoscope/gstmonoscope.c: (gst_monoscope_chain):
-       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_loop):
-       * gst/oneton/gstoneton.c: (gst_oneton_chain):
-       * gst/silence/gstsilence.c: (gst_silence_get):
-       * gst/sine/gstsinesrc.c: (gst_sinesrc_get):
-       * gst/smpte/gstsmpte.c: (gst_smpte_loop):
-       * gst/speed/gstspeed.c: (speed_loop):
-       * gst/tags/gstvorbistag.c: (gst_vorbis_tag_chain):
-       * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get):
-       * gst/volenv/gstvolenv.c: (gst_volenv_chain):
-       * gst/wavenc/gstwavenc.c: (gst_wavenc_chain):
-       * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt),
-       (gst_wavparse_loop):
-       * sys/dxr3/dxr3audiosink.c: (dxr3audiosink_open),
-       (dxr3audiosink_set_mode_pcm), (dxr3audiosink_set_mode_ac3),
-       (dxr3audiosink_close):
-       * sys/dxr3/dxr3spusink.c: (dxr3spusink_open), (dxr3spusink_close):
-       * sys/dxr3/dxr3videosink.c: (dxr3videosink_open),
-       (dxr3videosink_close), (dxr3videosink_write_data):
-       * sys/oss/gstosselement.c: (gst_osselement_open_audio):
-       * sys/oss/gstosselement.h:
-       * sys/oss/gstosssink.c: (gst_osssink_get_type), (gst_osssink_init),
-       (gst_osssink_chain):
-       * sys/oss/gstosssrc.c: (gst_osssrc_get):
-       * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_chain):
-       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_buffer_free):
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_buffer_free):
-       * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_window),
-       (gst_v4l_enable_overlay):
-       * sys/v4l/v4l_calls.c: (gst_v4l_get_capabilities), (gst_v4l_open),
-       (gst_v4l_set_chan_norm), (gst_v4l_get_signal),
-       (gst_v4l_get_frequency), (gst_v4l_set_frequency),
-       (gst_v4l_get_picture), (gst_v4l_set_picture), (gst_v4l_get_audio),
-       (gst_v4l_set_audio):
-       * sys/v4l/v4l_calls.h:
-       * sys/v4l/v4lmjpegsink_calls.c: (gst_v4lmjpegsink_sync_thread),
-       (gst_v4lmjpegsink_queue_frame), (gst_v4lmjpegsink_set_playback),
-       (gst_v4lmjpegsink_playback_init),
-       (gst_v4lmjpegsink_playback_start):
-       * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_queue_frame),
-       (gst_v4lmjpegsrc_sync_next_frame), (gst_v4lmjpegsrc_set_capture),
-       (gst_v4lmjpegsrc_set_capture_m), (gst_v4lmjpegsrc_capture_init),
-       (gst_v4lmjpegsrc_requeue_frame):
-       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_queue_frame),
-       (gst_v4lsrc_sync_frame), (gst_v4lsrc_capture_init),
-       (gst_v4lsrc_requeue_frame), (gst_v4lsrc_try_palette):
-       * sys/v4l2/gstv4l2src.c: (gst_v4l2src_get):
-       * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_fill_format_list),
-       (gst_v4l2src_queue_frame), (gst_v4l2src_grab_frame),
-       (gst_v4l2src_get_capture), (gst_v4l2src_set_capture),
-       (gst_v4l2src_capture_init), (gst_v4l2src_capture_start),
-       (gst_v4l2src_capture_stop):
-       * sys/vcd/vcdsrc.c: (vcdsrc_open_file):
-       * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
-       (gst_ximagesink_chain):
-       * sys/xvideo/xvideosink.c: (gst_xvideosink_buffer_new),
-       (gst_xvideosink_sinkconnect), (gst_xvideosink_chain),
-       (gst_xvideosink_xwindow_new):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
-       (gst_xvimagesink_chain):
-        use new error signal, function and categories
-
-2004-01-18  Jeremy Simon <jesimon@libertysurf.fr>
-
-       * configure.ac:
-       * ext/Makefile.am:
-       * ext/musicbrainz/gsttrm.c:
-       * ext/musicbrainz/gsttrm.h:
-       * ext/musicbrainz/Makefile.am:
-       Add a trm plugin
-
-2004-01-18  Julien MOUTTE  <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_set_property),
-       (gst_ximagesink_get_property), (gst_ximagesink_class_init): Adding
-       synchronous property for debugging.
-       * sys/ximage/ximagesink.h: Adding the synchronous boolean flag.
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
-       (gst_xvimagesink_set_property): Moving a pointer declaration to a
-       smaller block, fixing indent.
-
-2004-01-16  David Schleef  <ds@schleef.org>
-
-       * gst/videofilter/gstvideobalance.c: Fix regression; changing a
-       property affects the video stream.
-       * sys/xvimage/xvimagesink.c:
-       * sys/xvimage/xvimagesink.h:
-       Add synchronous property for debugging.  Should probably be
-       disabled in non-CVS builds.  Make sure that the Xv attribute
-       exists before we set it (crash!).  Fix a silly float bug that
-       caused colorbalance to just not work.
-
-2004-01-17  Christian Schaller <Uraeus@gnome.org>
-
-       * tools/gst-launch-ext.in - update for new plugins
-
-2004-01-16  David Schleef  <ds@schleef.org>
-
-       * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_connect): Fix use of
-       already-freed caps.
-
-2994-01-16  Christian Schaller <Uraeus@gnome.org>
-
-       * Update spec for new colorspace plugin and libcaca plugin
-       * Fix compilation of libcaca plugin (clock -> id)
-
-2004-01-16  Julien MOUTTE <julien@moutte.net>
-
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_update_colorbalance),
-       (gst_xvimagesink_xcontext_get), (gst_xvimagesink_change_state),
-       (gst_xvimagesink_set_xwindow_id),
-       (gst_xvimagesink_colorbalance_set_value),
-       (gst_xvimagesink_colorbalance_get_value),
-       (gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
-       (gst_xvimagesink_init), (gst_xvimagesink_class_init): Implementing
-       correct colorbalance properties. They can now be set when the element
-       is still in NULL state. The values will be committed to the Xv Port
-       when xcontext is initialized.
-       * sys/xvimage/xvimagesink.h: Added hue, saturation, contrast,
-       brightness int values in the GstXvImagesink structure.
-
-2004-01-16  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst-libs/gst/Makefile.am:
-         restructure so having local patches works easier.
-
-2004-01-16  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/mpeg2enc/Makefile.am:
-       * ext/mpeg2enc/gstmpeg2enc.cc:
-       * ext/mpeg2enc/gstmpeg2encpicturereader.cc:
-         Bugfix with respect to EOS handling.
-
-2004-01-16  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_connect):
-         Link with right caps (else, it segfaults).
-       * ext/mplex/gstmplexjob.cc:
-         Fix for slight API change in 1.6.1.93 release of mjpegtools.
-
-2004-01-15  David Schleef  <ds@schleef.org>
-
-       * gst-libs/gst/audio/Makefile.am:
-       Add gstaudiofiltertemplate.c and building of gstaudiofilterexample.c
-       from the template.
-       * gst-libs/gst/audio/gstaudiofilter.c:
-       * gst-libs/gst/audio/gstaudiofilter.h:
-       Add bytes_per_sample and size and n_samples calculation.
-       * gst-libs/gst/audio/gstaudiofilterexample.c:
-       Remove, now autogenerated.
-       * gst-libs/gst/audio/gstaudiofiltertemplate.c:
-       Moved from gstaudiofilterexample, object name changed, code added
-       so that it actually works.
-       * gst-libs/gst/audio/make_filter:
-       Script to build an audiofilter subclass from the template.
-       * gst/colorspace/Makefile.am:
-       * gst/colorspace/yuv2yuv.c:
-       Remove file, since it's GPL, and we don't use it.
-
-2004-01-15  Julien MOUTTE  <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_chain):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain): Making both of
-       them use the buffer free function to test how the buffer was allocated.
-
-2004-01-15  David Schleef  <ds@schleef.org>
-
-       * ext/esd/esdsink.c: (gst_esdsink_class_init): Remove property
-       that handles osssink fallback.
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_init),
-       (gst_audio_convert_getcaps):
-       * gst/qtdemux/qtdemux.c: (qtdemux_audio_caps):
-       Add audio/x-qdm2 for QDM2 audio.
-       * gst/sine/gstsinesrc.c: (gst_sinesrc_get):
-       * gst/sine/gstsinesrc.h: Add example of how to implement tags.
-       * gst/videoscale/gstvideoscale.c: (gst_videoscale_getcaps):
-       Decrease minimum size to 16x16.
-       * gst/wavparse/gstwavparse.c:
-       Convert disabled pad template caps to new caps.
-       * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
-       (gst_xvimagesink_chain): Throw element error when display cannot
-       be opened.  Increase minimum framerate to 1.0.  Check the data
-       free function on a buffer to make sure it is the type we expect
-       before manipulating it.
-
-2004-01-15  Julien MOUTTE <julien@moutte.net>
-
-       * gst/videofilter/gstvideobalance.c: (gst_videobalance_init),
-       (gst_videobalance_colorbalance_set_value): Implement passthru if
-       settings are in the middle.
-       * tools/gst-launch-ext.in: Stop using xvideosink, use ximagesink.
-
-2004-01-15  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/videofilter/Makefile.am:
-       * gst/volume/Makefile.am:
-         Since we use videofilter symbols, link to it.
-
-2004-01-15  Julien MOUTTE <julien@moutte.net>
-
-       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_interface_init): Setting
-       mixer interface type to HARDWARE.
-       * gst-libs/gst/mixer/mixer.c: (gst_mixer_class_init): Adding a default
-       type to SOFTWARE.
-       * gst-libs/gst/mixer/mixer.h: Adding mixer interface type and macro.
-       * gst-libs/gst/mixer/mixertrack.h: Adding mixertrack flag SOFTWARE.
-       * gst/volume/gstvolume.c: (gst_volume_interface_supported),
-       (gst_volume_interface_init), (gst_volume_list_tracks),
-       (gst_volume_set_volume), (gst_volume_get_volume),
-       (gst_volume_set_mute), (gst_volume_mixer_init),
-       (gst_volume_dispose), (gst_volume_get_type), (volume_class_init),
-       (volume_init): Implementing mixer interface.
-       * gst/volume/gstvolume.h: Adding tracklist for mixer interface.
-       * sys/oss/gstosselement.c: (gst_osselement_get_type),
-       (gst_osselement_change_state): Removing some trailing commas in
-       structures.
-       * sys/oss/gstossmixer.c: (gst_ossmixer_interface_init): Setting mixer
-       interface type to HARDWARE.
-       * sys/v4l/gstv4lcolorbalance.c:
-       (gst_v4l_color_balance_interface_init): Setting colorbalance interface
-       type to HARDWARE.
-       * sys/v4l2/gstv4l2colorbalance.c:
-       (gst_v4l2_color_balance_interface_init): Setting colorbalance
-       interface type to HARDWARE.
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain): use exactly the
-       same code than ximagesink for event handling.
-
-2004-01-15  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/snapshot/Makefile.am:
-       * ext/snapshot/gstsnapshot.c: (gst_snapshot_sinkconnect),
-       (gst_snapshot_chain):
-       * ext/snapshot/gstsnapshot.h:
-         This has to be a joke... Snapshot should be connected to a tee,
-         colorspace element before it and EOS after that, where the other
-         src of the tee receives normal data.
-         The current way is *wrong*.
-
-2004-01-15  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/hermes/gsthermescolorspace.c:
-         Fix another compile error. Same as below.
-
-2004-01-15  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/colorspace/gstcolorspace.c:
-       * gst/colorspace/yuv2yuv.c: (gst_colorspace_yuy2_to_i420),
-       (gst_colorspace_i420_to_yv12):
-         Fix compiling... Didn't test if it actually works.
-
-2004-01-15  David Schleef  <ds@schleef.org>
-
-       * configure.ac:
-       * gst/colorspace/Makefile.am:
-       * gst/colorspace/gstcolorspace.c:
-       * gst/colorspace/gstcolorspace.h:
-       * gst/colorspace/yuv2rgb.c:
-       * gst/colorspace/yuv2rgb.h:
-       Duplicate the ext/hermes colorspace plugin, and remove Hermes
-       code and GPL code.  Fix for new caps negotiation.  Rewrite
-       much of the format handling code, and some of the conversion
-       code.  Basically, rewrote almost everything.  This element
-       handles I420, YV12 to RGB conversions.
-       * ext/hermes/Makefile.am:
-       * ext/hermes/gsthermescolorspace.c:
-       Rename colorspace to hermescolorspace.  Fix negotiation issues.
-       Remove non-Hermes related code.  This element handles lots of
-       RGB to RGB conversions, but no YUV.
-       * ext/hermes/gstcolorspace.c:
-       * ext/hermes/gstcolorspace.h:
-       * ext/hermes/rgb2yuv.c:
-       * ext/hermes/yuv2rgb.c:
-       * ext/hermes/yuv2rgb.h:
-       * ext/hermes/yuv2rgb_mmx16.s:
-       * ext/hermes/yuv2yuv.c:
-       * ext/hermes/yuv2yuv.h:
-       Remove old code.
-
-2004-01-14  Colin Walters  <walters@verbum.org>
-
-       * ext/mad/gstid3tag.c (gst_id3_tag_chain): Don't nego caps if
-       they've already been.
-
-2004-01-15  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_do_caps_nego):
-         assume tag mode when pad is not connected
-
-2004-01-15  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
-         Don't update the time of the clock
-       (gst_alsa_sink_loop):
-         sync to the clock given to alsasink, not the own clock
-       * sys/oss/gstosssink.c: (gst_osssink_chain):
-         sync to the clock
-       (gst_osssink_change_state):
-         activate the clock
-       * sys/ximage/ximagesink.c: (gst_ximagesink_chain):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain):
-         remove bogus code that made DISCONT events unhandled
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_video_caps):
-         explicitly case to double in _set_simple. (fixes 2nd warning in bug
-         #131502)
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_read_object_header),
-       (gst_asf_demux_handle_sink_event), (gst_asf_demux_audio_caps),
-       (gst_asf_demux_add_audio_stream), (gst_asf_demux_video_caps):
-         convert g_warning because of wrong asf data to GST_WARNINGs (fixes
-         2nd warning in bug #131502)
-
-2004-01-14  Julien MOUTTE  <julien@moutte.net>
-
-       * gst/videofilter/gstvideobalance.c: (gst_videobalance_init),
-       (gst_videobalance_colorbalance_set_value),
-       (gst_videobalance_colorbalance_get_value): Fixing videobalance ranges
-       for colorbalance interface implementation.
-       * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
-       (gst_ximagesink_set_property), (gst_ximagesink_get_property),
-       (gst_ximagesink_dispose), (gst_ximagesink_init),
-       (gst_ximagesink_class_init): Adding DISPLAY property.
-       * sys/ximage/ximagesink.h: Adding display_name to store display.
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
-       (gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
-       (gst_xvimagesink_dispose), (gst_xvimagesink_init),
-       (gst_xvimagesink_class_init): Adding DISPLAY property and colorbalance
-       properties (they still need polishing though for gst-launch use : no
-       xcontext yet, i ll do that tomorrow).
-       * sys/xvimage/xvimagesink.h: Adding display_name to store display.
-
-2004-01-14  Julien MOUTTE  <julien@moutte.net>
-
-       * gst-libs/gst/play/gstplay.c: (gst_play_pipeline_setup),
-       (gst_play_set_location), (gst_play_set_visualization): Preparing
-       switch integration, adding videobalance in the pipeline.
-
-2004-01-14  Julien MOUTTE <julien@moutte.net>
-
-       * gst-libs/gst/colorbalance/colorbalance.c:
-       (gst_color_balance_class_init): Adding a default type.
-       * gst-libs/gst/colorbalance/colorbalance.h: Adding a macro to access
-       the type.
-       * gst/videofilter/gstvideobalance.c: (gst_videobalance_get_type),
-       (gst_videobalance_dispose), (gst_videobalance_class_init),
-       (gst_videobalance_init), (gst_videobalance_interface_supported),
-       (gst_videobalance_interface_init),
-       (gst_videobalance_colorbalance_list_channels),
-       (gst_videobalance_colorbalance_set_value),
-       (gst_videobalance_colorbalance_get_value),
-       (gst_videobalance_colorbalance_init): Implementing colorbalance
-       interface.
-       * gst/videofilter/gstvideobalance.h: Adding colorbalance channels
-       list.
-       * sys/ximage/ximagesink.c: (gst_ximagesink_set_xwindow_id): Fixing a
-       bug which was triggering a BadAccess X error when setting an overlay
-       before pad was really negotiated.
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_colorbalance_init):
-       Using the colorbalance type macro.
-
-2004-01-14  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/flac/gstflacenc.c: (gst_flacenc_set_metadata),
-       (gst_flacenc_chain):
-         handle tags correctly
-       * gst/tags/gstid3tag.c: (gst_tag_list_new_from_id3v1):
-         extract ID3v1 tags correctly
-
-2004-01-14  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/typefind/gsttypefindfunctions.c: (matroska_type_find),
-       (plugin_init):
-         Improve matroska typefinding for odd-typed headers...
-
-2004-01-14  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/matroska/matroska-demux.c: (gst_matroska_demux_add_stream):
-         Fix for using incremental number on padnames.
-
-2004-01-14  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/divx/gstdivxdec.c:
-       * ext/divx/gstdivxenc.c:
-         Set category to divx4linux instead of divx (too generic).
-       * gst/wavparse/gstwavparse.c: (gst_wavparse_init),
-       (gst_wavparse_parse_fmt), (gst_wavparse_handle_sink_event),
-       (gst_wavparse_loop), (gst_wavparse_change_state):
-       * gst/wavparse/gstwavparse.h:
-         fix parsing of WAV files with non-standard fmt-tag size and fix
-         skipping of unrecognized chunks... Someone please fix this thing
-         to use rifflib so all this is automated.
-       * sys/v4l/Makefile.am:
-       * sys/v4l2/Makefile.am:
-         Add X_CFLAGS because we depend on X (for overlay).
-
-2004-01-14  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         Don't issue a timestamp unless we tagged the frame
-         with a PTS.
-
-2004-01-14  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst-libs/gst/play/gstplay.c: (gst_play_tick_callback):
-         Query the audio element to get the time, not the clock. We're
-         interested in the element's time here.
-
-2004-01-14  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/aalib/gstaasink.c: (gst_aasink_chain):
-       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
-       * ext/esd/esdsink.c: (gst_esdsink_chain):
-       * ext/libcaca/gstcacasink.c: (gst_cacasink_chain):
-       * ext/mas/massink.c: (gst_massink_chain):
-       * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_chain):
-       * gst/matroska/matroska-demux.c: (gst_matroska_demux_parse_index),
-       (gst_matroska_demux_parse_metadata):
-       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_loop),
-       (gst_mpeg_parse_release_locks):
-       * gst/tcp/gsttcpsink.c: (gst_tcpsink_chain):
-       * gst/udp/gstudpsink.c: (gst_udpsink_chain):
-       * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get):
-       * sys/oss/gstosssink.c: (gst_osssink_init), (gst_osssink_chain),
-       (gst_osssink_change_state):
-       * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_chain):
-       * sys/ximage/ximagesink.c: (gst_ximagesink_chain):
-       * sys/xvideo/xvideosink.c: (gst_xvideosink_chain),
-       (gst_xvideosink_release_locks):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain):
-         use element time.
-       * ext/alsa/gstalsaclock.c: (gst_alsa_clock_start),
-       (gst_alsa_clock_stop):
-       * gst-libs/gst/audio/audioclock.c: (gst_audio_clock_set_active),
-       (gst_audio_clock_get_internal_time):
-         simplify for use with new clocking code.
-       * testsuite/alsa/Makefile.am:
-       * testsuite/alsa/sinesrc.c: (sinesrc_init), (sinesrc_force_caps):
-         fix testsuite for new caps system
-
-2004-01-14  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/flac/gstflacdec.c: (gst_flacdec_update_metadata):
-       * ext/flac/gstflacenc.c: (add_one_tag):
-         length is already host endian, no need to convert. Fixes playback of
-         tagged files on PPC. (bug #128384)
-
-2004-01-13  Julien MOUTTE <julien@moutte.net>
-
-       * gst-libs/gst/colorbalance/colorbalance.h: Adding a type to the
-       colorbalance interface stating if it is hardware based or software
-       based.
-       * gst/videofilter/gstvideobalance.c: (gst_videobalance_planar411):
-       Removing a trailing comma.
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
-       (gst_xvimagesink_colorbalance_init): Integrating a patch from Jon
-       Trowbridge <trow@ximian.com> querying Xv adaptor for min/max value as
-       the documentation seems to be wrong on the -1000 to 1000 interval.
-
-2004-01-12  David Schleef  <ds@schleef.org>
-
-       * gst/debug/efence.c: (gst_efence_init), (gst_efence_chain),
-       (gst_efence_buffer_alloc), (gst_fenced_buffer_new),
-       (gst_fenced_buffer_default_free), (gst_fenced_buffer_default_copy):
-       Fix negotiation.  Add a bufferalloc function for the sink pad,
-       and generally clean up some of the code.
-
-2004-01-12  Julien MOUTTE <julien@moutte.net>
-
-       * gst-libs/gst/colorbalance/colorbalancechannel.c:
-       (gst_color_balance_channel_dispose): Adding safety check in dispose
-       method.
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
-       (gst_xvimagesink_xcontext_clear),
-       (gst_xvimagesink_interface_supported),
-       (gst_xvimagesink_colorbalance_list_channels),
-       (gst_xvimagesink_colorbalance_set_value),
-       (gst_xvimagesink_colorbalance_get_value),
-       (gst_xvimagesink_colorbalance_init), (gst_xvimagesink_get_type):
-       Adding colorbalance interface support to set XV parameters such as
-       HUE, BRIGHTNESS, CONTRAST, SATURATION.
-       * sys/xvimage/xvimagesink.h: Adding the channels list for colorbalance
-       interface.
-
-2004-01-12  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_get_type),
-       (gst_audio_convert_class_init), (gst_audioconvert_getcaps),
-       (gst_audio_convert_init), (gst_audio_convert_set_property),
-       (gst_audio_convert_get_property), (gst_audio_convert_chain),
-       (gst_audio_convert_link),
-       (gst_audio_convert_buffer_to_default_format),
-       (gst_audio_convert_buffer_from_default_format), (plugin_init):
-          - implement _getcaps and use it
-          - improve linking
-          - remove float caps since no float conversion is actually done
-          - remove properties and arguments that were to be used for rate
-            conversion
-
-2004-01-12  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst-libs/gst/audio/audio.c: (_gst_audio_structure_set_list),
-       (gst_audio_structure_set_int):
-       * gst-libs/gst/audio/audio.h:
-          add helper functions for _getcaps matching the standard audio
-          templates
-
-2004-01-12  David Schleef  <ds@schleef.org>
-
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
-       Test that pad is negotiated before getting its caps.
-
-2004-01-12  Julien MOUTTE <julien@moutte.net>
-
-       * gst-libs/gst/play/gstplay.c: (gst_play_get_sink_element): When
-       analyzing the pads of an element the bin is mostly in READY state so
-       no caps were negotiated. This helper function needs to work with
-       _get_caps directly then. I was not freeing them though, added that to
-       fix the mem leak.
-
-2004-01-12  Julien MOUTTE <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_chain):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain): Fixing the
-       direct put buffers detection. I prefer checking GST_BUFFER_PRIVATE
-       than the free_func.
-
-2004-01-12  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * sys/oss/gstossaudio.c: (plugin_init):
-       * sys/oss/gstosselement.c: (gst_osselement_sync_parms):
-       * sys/oss/gstosselement.h:
-          make an oss debugging category
-          make failure more descriptive
-
-2004-01-11  David Schleef  <ds@schleef.org>
-
-       * ext/ffmpeg/gstffmpeg.c:
-       * ext/ffmpeg/gstffmpegcodecmap.c:
-       * ext/ffmpeg/gstffmpegdec.c:
-       * ext/ffmpeg/gstffmpegenc.c:
-       * ext/ffmpeg/gstffmpegprotocol.c:
-       * ext/gdk_pixbuf/gstgdkanimation.c:
-       * ext/jpeg/gstjpeg.c:
-       * ext/libpng/gstpng.c:
-       * ext/mpeg2dec/perftest.c:
-       * ext/speex/gstspeex.c:
-       * gst-libs/gst/resample/dtos.c:
-       * gst/intfloat/gstintfloatconvert.c:
-       * gst/oneton/gstoneton.c:
-       * gst/rtjpeg/RTjpeg.c:
-       * gst/rtp/gstrtp.c:
-       * sys/dxr3/dxr3init.c:
-       * sys/glsink/gstgl_nvimage.c:
-       * sys/glsink/gstgl_pdrimage.c:
-       * sys/glsink/gstglsink.c:
-       * testsuite/gst-lint:
-       Make sure everybody wraps #include "config.h" in #ifdef HAVE_CONFIG_H
-
-2004-01-11  David Schleef  <ds@schleef.org>
-
-       * ext/alsa/gstalsasrc.c: (gst_alsa_src_set_caps):
-       * ext/faac/gstfaac.c: (gst_faac_sinkconnect):
-       * ext/gdk_pixbuf/gstgdkanimation.c:
-       (gst_gdk_animation_iter_create_pixbuf):
-       * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_sink_link),
-       (gst_gdk_pixbuf_chain):
-       * ext/gdk_pixbuf/gstgdkpixbuf.h:
-       * ext/jack/gstjack.c: (gst_jack_change_state):
-       * ext/xvid/gstxviddec.c: (gst_xviddec_sink_link):
-       * gst-libs/gst/play/gstplay.c: (gst_play_get_sink_element):
-       * gst-libs/gst/play/play.c: (gst_play_get_sink_element):
-       * gst/videofilter/gstvideofilter.c:
-       (gst_videofilter_set_output_size):
-       Remove all usage of gst_pad_get_caps(), and replace it with
-       gst_pad_get_allowed_caps() or gst_pad_get_negotiated_cap().
-
-2004-01-11  David Schleef  <ds@schleef.org>
-
-       * configure.ac:
-       * ext/Makefile.am: Fixes to make ext/libcaca compile.
-       * ext/divx/gstdivxdec.c:
-       * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_sink_link),
-       (gst_gdk_pixbuf_init), (gst_gdk_pixbuf_chain): Make gdkpixbufdec
-       handle images that span multiple buffers.  Now work with both
-       filesrc ! gdkpixbufdec and qtdemux ! gdkpixbufdec.
-       * ext/gdk_pixbuf/gstgdkpixbuf.h:
-       * ext/libcaca/gstcacasink.h: Fixes needed due to recent
-       video/video.h changes
-       * ext/xvid/gstxvid.c: (gst_xvid_csp_to_caps): same
-       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get),
-       (gst_v4lmjpegsrc_buffer_free): Use buffer free function instead
-       of GstData free function.
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get), (gst_v4lsrc_buffer_free):
-       same.
-
-2004-01-12  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * sys/v4l2/gstv4l2element.c: (gst_v4l2element_class_init),
-       (gst_v4l2element_dispose), (gst_v4l2element_set_property),
-       (gst_v4l2element_get_property):
-       * sys/v4l2/v4l2_calls.c: (gst_v4l2_set_defaults), (gst_v4l2_open):
-         add norm, channel and frequency properties.
-       * sys/v4l2/gstv4l2tuner.c:
-         fixes for tuner interface changes
-       * sys/v4l2/gstv4l2element.h:
-       * sys/v4l2/gstv4l2src.c:
-       * sys/v4l2/gstv4l2src.h:
-       * sys/v4l2/v4l2src_calls.c:
-       * sys/v4l2/v4l2src_calls.h:
-         rework v4l2src to work with saa1734 cards and allow mmaped buffers.
-
-2004-01-12  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst-libs/gst/tuner/tuner.c: (gst_tuner_class_init),
-       (gst_tuner_find_norm_by_name), (gst_v4l2_find_channel_by_name),
-       (gst_tuner_channel_changed), (gst_tuner_norm_changed),
-       (gst_tuner_frequency_changed), (gst_tuner_signal_changed):
-       * gst-libs/gst/tuner/tuner.h:
-         GObjects aren't const.
-         Add find_by_name functions.
-         Add checks to _changed functions.
-       * sys/v4l/gstv4ltuner.c: (gst_v4l_tuner_get_channel),
-       (gst_v4l_tuner_get_norm):
-         Fixes for above.
-
-2004-01-12  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst-libs/gst/video/video.h:
-         Fix caps template names to be understandable.
-         Prefix everything with GST_VIDEO.
-       * ext/aalib/gstaasink.c:
-       * ext/divx/gstdivxdec.c:
-       * ext/divx/gstdivxenc.c:
-       * ext/gdk_pixbuf/gstgdkpixbuf.c:
-       * ext/hermes/gstcolorspace.c: (gst_colorspace_base_init):
-       * ext/jpeg/gstjpegdec.c: (raw_caps_factory):
-       * ext/jpeg/gstjpegenc.c: (raw_caps_factory):
-       * ext/libcaca/gstcacasink.c:
-       * ext/libpng/gstpngenc.c: (raw_caps_factory):
-       * ext/snapshot/gstsnapshot.c:
-       * ext/swfdec/gstswfdec.c:
-       * ext/xvid/gstxviddec.c:
-       * ext/xvid/gstxvidenc.c:
-       * gst/chart/gstchart.c:
-       * gst/deinterlace/gstdeinterlace.c:
-       * gst/effectv/gsteffectv.c:
-       * gst/flx/gstflxdec.c: (gst_flxdec_loop):
-       * gst/goom/gstgoom.c:
-       * gst/median/gstmedian.c:
-       * gst/monoscope/gstmonoscope.c: (gst_monoscope_init),
-       (gst_monoscope_srcconnect), (gst_monoscope_chain):
-       * gst/overlay/gstoverlay.c:
-       * gst/smooth/gstsmooth.c:
-       * gst/smpte/gstsmpte.c:
-       * gst/synaesthesia/gstsynaesthesia.c:
-       * gst/videocrop/gstvideocrop.c:
-       * gst/videodrop/gstvideodrop.c:
-       * gst/y4m/gsty4mencode.c:
-       * sys/qcam/gstqcamsrc.c:
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_palette_to_caps):
-         Make them work with new video.h file.
-       * sys/ximage/ximagesink.c: (gst_ximagesink_chain),
-       (gst_ximagesink_buffer_free), (gst_ximagesink_buffer_alloc):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain),
-       (gst_xvimagesink_buffer_free), (gst_xvimagesink_buffer_alloc):
-         Make it work with new buffer allocation system.
-
-2004-01-11  Julien MOUTTE  <julien@moutte.net>
-
-       * ext/ffmpeg/gstffmpegcolorspace.c: (gst_ffmpegcsp_chain): Fixing the
-       pad_alloc_buffer implementation to use ->srcpad
-       * ext/hermes/gstcolorspace.c: (gst_colorspace_chain): Fixing the
-        pad_alloc_buffer implementation to use ->srcpad
-       * gst/videoscale/gstvideoscale.c: (gst_videoscale_chain):  Fixing the
-        pad_alloc_buffer implementation to use ->srcpad
-       * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
-       (gst_ximagesink_chain), (gst_ximagesink_buffer_free),
-       (gst_ximagesink_buffer_alloc): Now only use GST_BUFFER_PRIVATE to keep
-       a reference to everything we need.
-       * sys/ximage/ximagesink.h: adding a reference to the sink in the image.
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
-       (gst_xvimagesink_chain), (gst_xvimagesink_buffer_free),
-       (gst_xvimagesink_buffer_alloc): Now only use GST_BUFFER_PRIVATE to keep
-        a reference to everything we need.
-       * sys/xvimage/xvimagesink.h: adding a reference to the sink in the image
-
-2004-01-11  David Schleef  <ds@schleef.org>
-
-       * ext/divx/gstdivxenc.c: remove bogus gst_caps_is_fixed() test
-       * gst/debug/efence.c: (gst_efence_chain), (gst_fenced_buffer_new),
-       (gst_fenced_buffer_default_copy): Fix for rename of buffer private
-       structure members.
-       * gst/effectv/gstwarp.c: (gst_warptv_setup): Don't reset the time
-       value during a resize/renegotiation.
-       * gst/videofilter/gstvideofilter.c: (gst_videofilter_chain): use
-       gst_pad_alloc_buffer();
-       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get),
-       (gst_v4lmjpegsrc_buffer_free): Fix for rename of buffer private
-       structure members.
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get), (gst_v4lsrc_buffer_free):
-       Fix for rename of buffer private structure members.
-       * sys/ximage/ximagesink.c: (gst_ximagesink_chain),
-       (gst_ximagesink_buffer_free), (gst_ximagesink_buffer_alloc):
-       Fix for rename of buffer private structure members.
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain),
-       (gst_xvimagesink_buffer_free), (gst_xvimagesink_buffer_alloc):
-       Fix for rename of buffer private structure members.
-
-2004-01-11  Arwed v. Merkatz <v.merkatz@gmx.net>
-
-       reviewed by: David Schleef <ds@schleef.org>
-
-       * gst/videofilter/Makefile.am:
-       * gst/videofilter/gstgamma.c: Gamma correction filter.  Modified
-       from the patch by ds to fit in with recent make_filter changes.
-
-2004-01-11  Julien MOUTTE  <julien@moutte.net>
-
-       * configure.ac: Adding examples/switch/Makefile
-       * examples/Makefile.am: Adding examples/switch
-       * examples/switch/Makefile.am: Adding switcher example.
-       * examples/switch/switcher.c: (got_eos), (idle_iterate),
-       (switch_timer), (main): Adding an example demonstrating switch usage
-       with 2 videotestsrc showing different patterns.
-       * gst/switch/gstswitch.c: (gst_switch_request_new_pad),
-       (gst_switch_init): Fixing switch with the new caps system.
-
-2004-01-11  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst-libs/gst/video/video.h:
-         Fix 32bit caps. Issue remaining: The macro names are chosen poorly.
-         They should probably be like
-         GST_VIDEO_PAD_TEMPLATE_CAPS_{RGB,BGR,RGBx,BGRx}.
-
-2004-01-11  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
-       (qtdemux_parse_trak):
-         fix audio chunk size/timestamp calculation
-
-2004-01-11  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps):
-         fix SVQ3 caps
-
-2004-01-11  Steve Baker  <steve@stevebaker.org>
-
-       * gst/effectv/gstaging.c: (gst_agingtv_get_type),
-       (gst_agingtv_base_init), (gst_agingtv_class_init),
-       (gst_agingtv_init), (gst_agingtv_setup), (gst_agingtv_rgb32),
-       (gst_agingtv_set_property), (gst_agingtv_get_property):
-        Port agingTV to videofilter
-
-2004-01-09  Julien MOUTTE <julien@moutte.net>
-
-       * ext/hermes/gstcolorspace.c: (gst_colorspace_chain):
-       Implementing gst_pad_alloc_buffer to use optimized buffer allocation.
-
-2004-01-09  Julien MOUTTE <julien@moutte.net>
-
-       * ext/ffmpeg/gstffmpegcolorspace.c: (gst_ffmpegcsp_chain):
-       Implementing gst_pad_alloc_buffer to use optimized buffer allocation.
-       * gst-libs/gst/xoverlay/xoverlay.c:
-       (gst_x_overlay_got_desired_size): Updating doc for the xid being 0.
-       * gst/videoscale/gstvideoscale.c: (gst_videoscale_chain):
-       Implementing gst_pad_alloc_buffer to use optimized buffer allocation.
-       * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get):
-       Implementing gst_pad_alloc_buffer to use optimized buffer allocation.
-       * sys/ximage/ximagesink.c: (gst_ximagesink_chain),
-       (gst_ximagesink_buffer_free), (gst_ximagesink_buffer_alloc),
-       (gst_ximagesink_set_xwindow_id), (gst_ximagesink_init): Implementing
-       the bufferalloc_function to replace bufferpools, fixing the XOverlay
-       interface implementation to handle xid being 0 and fix some bugs
-       triggered by Benjamin's testcase.
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain),
-       (gst_xvimagesink_buffer_free), (gst_xvimagesink_buffer_alloc),
-       (gst_xvimagesink_set_xwindow_id), (gst_xvimagesink_init): Implementing
-       the bufferalloc_function to replace bufferpools, fixing the XOverlay
-       interface implementation to handle xid being 0 and fix some bugs
-       triggered by Benjamin's testcase.
-
-2004-01-09  David Schleef  <ds@schleef.org>
-
-       * ext/librfb/gstrfbsrc.c:  Hacking.  Added actual decoding and
-       mouse pointer events.  It works.
-
-2004-01-09  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/divx/gstdivxenc.c: (gst_divxenc_init):
-         Use explicit caps - fix capsnego.
-       * ext/xvid/gstxviddec.c:
-       * ext/xvid/gstxvidenc.c:
-         Remove macro-inside-macro which caused compile errors.
-       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_header):
-         Error out if it's not a RIFF file. Else we error out without
-         gst_element_error() which is not good...
-
-2004-01-08  David Schleef  <ds@schleef.org>
-
-       * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_connect):
-       Fix pad_link function to handle formats that ffmpeg returns
-       as multiple caps structures.
-       * gst/videofilter/gstvideofilter.c: (gst_videofilter_chain):
-       Only complain if source buffer is _smaller_ than expected.
-       * gst/videoscale/gstvideoscale.c: (gst_videoscale_init),
-       (gst_videoscale_handle_src_event): Resize navigation events
-       when passing them upstream.
-       * gst/videotestsrc/gstvideotestsrc.c:
-       * gst/videotestsrc/gstvideotestsrc.h:
-       * gst/videotestsrc/videotestsrc.c:
-       * gst/videotestsrc/videotestsrc.h:
-       Rewrite many of the buffer painting functions to handle odd
-       sizes (for many formats, size%4!=0 or size%8!=0).  Most have
-       been verified to work with my video card.
-       * testsuite/gst-lint:  Add check for elements calling
-       gst_pad_get_caps() instead of gst_pad_get_allowed_caps().
-
-2004-01-08  David Schleef  <ds@schleef.org>
-
-       * gst/videodrop/gstvideodrop.c: (gst_videodrop_getcaps),
-       (gst_videodrop_link), (gst_videodrop_init): Fix negotiation.
-
-2004-01-08  Julien MOUTTE  <julien@moutte.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents): A
-       configure event is not emiting the desired size signal. That fixes
-       aspect ratio issues with gst-player.
-
-2004-01-08  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/median/gstmedian.c: (gst_median_link), (gst_median_init):
-         Fix capsnego.
-
-2004-01-08  Julien MOUTTE  <julien@moutte.net>
-
-       * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_create): Using XOverlay
-       public method to fire size signal.
-
-2004-01-07  Julien MOUTTE  <julien@moutte.net>
-
-       * examples/gstplay/Makefile.am: Adding the interface library.
-       * gst-libs/gst/play/Makefile.am: Adding the interface library.
-       * gst-libs/gst/play/gstplay.c: (gst_play_set_video_sink): Connecting to         the XOverlay size signal instead of GstVideoSink.
-       * gst-libs/gst/play/gstplay.h: Including the XOverlay interface to check
-       GST_IS_X_OVERLAY before signal connect.
-       * gst-libs/gst/video/gstvideosink.c: (gst_videosink_class_init):
-       Removing the have_video_size signal.
-       * gst-libs/gst/video/gstvideosink.h: Removing the have_video_size signal
-       and associated public method.
-       * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents),
-       (gst_ximagesink_sinkconnect): Using XOverlay public method to fire size
-       signal.
-       * sys/xvideo/xvideosink.c: (gst_xvideosink_sinkconnect),
-       (gst_xvideosink_xwindow_new): Using XOverlay public method to fire size
-        signal.
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_sinkconnect):
-       Using XOverlay public method to fire size signal.
-
-2004-01-07  David Schleef  <ds@schleef.org>
-
-       * gst/videofilter/Makefile.am:
-       * gst/videofilter/gstvideotemplate.c:
-       * gst/videofilter/make_filter:
-       Create gstvideoexample.c in a srcdir!=builddir friendly way.
-       Convert make_filter to /bin/sh script.
-
-2004-01-07  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * gst/modplug/gstmodplug.cc: fix element description
-
-2004-01-07  Julien MOUTTE  <julien@moutte.net>
-
-       * examples/gstplay/player.c: (got_time_tick), (got_stream_length),
-       (got_video_size): Adding some new lines in g_print calls.
-       * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_new),
-       (gst_ximagesink_xwindow_destroy), (gst_ximagesink_xwindow_resize),
-       (gst_ximagesink_handle_xevents), (gst_ximagesink_fixate),
-       (gst_ximagesink_sinkconnect), (gst_ximagesink_change_state),
-       (gst_ximagesink_chain), (gst_ximagesink_buffer_new),
-       (gst_ximagesink_set_xwindow_id), (gst_ximagesink_get_desired_size):
-       Complete code review, reverting some stuff i disagree with, adding
-       some fixes : time synchronization on invalid timestamps, renegotiation
-       of private window.
-       * sys/ximage/ximagesink.h:
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_destroy),
-       (gst_xvimagesink_xwindow_resize), (gst_xvimagesink_handle_xevents),
-       (gst_xvimagesink_get_xv_support), (gst_xvimagesink_xcontext_get),
-       (gst_xvimagesink_fixate), (gst_xvimagesink_sinkconnect),
-       (gst_xvimagesink_change_state), (gst_xvimagesink_chain),
-       (gst_xvimagesink_buffer_new),
-       (gst_xvimagesink_navigation_send_event),
-       (gst_xvimagesink_set_xwindow_id),
-       (gst_xvimagesink_get_desired_size),
-       (gst_xvimagesink_xoverlay_init): Complete code review, reverting some
-       stuff i disagree with, adding some fixes : Renegotiation of private
-       window, implementing get_desired_size.
-
-2004-01-07  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/audiofile/gstafsink.c: (gst_afsink_init), (gst_afsink_chain),
-       (gst_afsink_handle_event):
-       * ext/jpeg/gstjpegenc.c: (gst_jpegenc_init):
-       * gst/avi/gstavimux.c: (gst_avimux_request_new_pad):
-       * sys/dxr3/dxr3audiosink.c: (dxr3audiosink_init):
-       * sys/dxr3/dxr3spusink.c: (dxr3spusink_init):
-       * sys/dxr3/dxr3videosink.c: (dxr3videosink_init):
-         Fix for instantiate-test (see core). Also remove dead code from
-         jpegenc (which still needs fixing, but that's lower on my TODO
-         list...).
-       * sys/v4l2/gstv4l2src.c: (gst_v4l2src_getcaps):
-         Never return NULL as caps.
-
-2004-01-07  David Schleef  <ds@schleef.org>
-
-       * configure.ac:
-       * ext/Makefile.am:
-       * ext/librfb/Makefile.am:
-       * ext/librfb/gstrfbsrc.c:
-       New source plugin based on librfb-0.1.  RFB (remote framebuffer)
-       is the protocol used by VNC.
-
-2004-01-07  David Schleef  <ds@schleef.org>
-
-       * gst/videofilter/gstvideotemplate.c:
-       * gst/videofilter/gstvideotemplate.h:
-       * gst/videofilter/make_filter:
-       Merge videotemplate header into source file.
-       * gst/effectv/Makefile.am:
-       * gst/effectv/gsteffectv.c: (plugin_init):
-       * gst/effectv/gstwarp.c:
-       Make warpTV a subclass of videofilter.
-
-2004-01-07  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
-         Add guard against invalid utf-8 conversions in mad. Just in case.
-
-2004-01-07  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * sys/oss/gstosssink.c: (gst_osssink_sink_fixate):
-         Fix for bug shown by poisoning
-
-2004-01-06  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get),
-       (gst_v4lmjpegsrc_buffer_free):
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_palette_to_caps),
-       (gst_v4lsrc_srcconnect), (gst_v4lsrc_getcaps), (gst_v4lsrc_get),
-       (gst_v4lsrc_buffer_free):
-         Fix for removed bufferpools.
-
-2004-01-07  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * ext/dv/gstdvdec.c: (gst_dvdec_loop):
-       Fix caps negotiation.
-
-       * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_class_init),
-       (dvdnavsrc_update_buttoninfo), (dvdnavsrc_get),
-       (dvdnavsrc_get_event_mask), (dvdnav_handle_navigation_event),
-       (dvdnavsrc_event):
-       * ext/mpeg2dec/gstmpeg2dec.c:
-       * gst-libs/gst/navigation/navigation.c:
-       (gst_navigation_send_key_event), (gst_navigation_send_mouse_event):
-       * gst-libs/gst/navigation/navigation.h:
-       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_handle_src_event):
-       * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xevents):
-       Super-simple first version of mouse and keyboard events. Clicking
-       on a DVD menu now works, although it may not take you where you
-       expected.
-
-       * gst/sine/gstsinesrc.c: (gst_sinesrc_src_fixate):
-       * gst/videotestsrc/gstvideotestsrc.c:
-       (gst_videotestsrc_src_fixate):
-       These fixate functions were broken - they never actually
-       fixated :)
-
-2004-01-06  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/shout/gstshout.c: (gst_icecastsend_base_init),
-       (gst_icecastsend_init):
-         fix for new caps system.
-       * gst-libs/gst/mixer/mixertrack.h:
-       * sys/oss/gstossmixer.c: (gst_ossmixer_build_list):
-         Add 'master track' flag (for tools like ACME that only want to
-         change the main volume).
-
-2004-01-07  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * ext/xvid/gstxvid.c: (gst_xvid_structure_to_csp),
-       (gst_xvid_csp_to_caps):
-       * ext/xvid/gstxviddec.c: (gst_xviddec_src_getcaps):
-       * ext/xvid/gstxvidenc.c:
-       ifdef out ARGB type when it isn't available
-       in xvidcore 1.0.0beta2
-
-2004-01-06  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_loop):
-         When we have received a new SCR right in the first buffer after
-         a seek (so in the same cycle that handles the discont), we should
-         handle the buffer instead of unreffing it, else we lose data.
-
-2004-01-06  Iain <iain@prettypeople.org>
-
-       * gst/intfloat/gstint2float.c (gst_int2float_link): Set the
-         buffer-frames caps too.
-
-       * gst/oneton/gstoneton.c (gst_oneton_sink_connect): Only create the new
-         caps that we need, don't destroy them all and rebuild them. And when
-         creating src pads, use the src pad template rather than the sink...
-
-2004-01-05  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead):
-         Add pad to element *after* setting functions such as event handler.
-         Without this, the scheduler (opt) will link pads, set the event
-         handler from the default event function (dispatcher in gstpad.c)
-         and *after* that, we will set our own event function, which will
-         thus never be used (and thus mpegdemux doesn't handle events).
-
-2004-01-04  David Schleef  <ds@schleef.org>
-
-       Fix the fixate functions to handle new prototype:
-       * gst/sine/gstsinesrc.c: (gst_sinesrc_src_fixate):
-       * gst/videotestsrc/gstvideotestsrc.c:
-       (gst_videotestsrc_src_fixate):
-       * sys/oss/gstosssink.c: (gst_osssink_sink_fixate):
-       * sys/ximage/ximagesink.c: (gst_ximagesink_fixate):
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_fixate):
-
-2004-01-04  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * sys/ximage/ximagesink.h:
-       * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_new),
-       (gst_ximagesink_xwindow_destroy), (gst_ximagesink_sinkconnect),
-       (gst_ximagesink_change_state), (gst_ximagesink_set_xwindow_id),
-       (gst_ximagesink_xoverlay_init):
-         assorted fixes to make (re)embedding work
-       * sys/ximage/ximagesink.c: (gst_ximagesink_sinkconnect),
-       (gst_ximagesink_get_desired_size):
-         implement desired size additions to XOverlay
-
-2004-01-04  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst-libs/gst/xoverlay/xoverlay.c: (gst_x_overlay_base_init),
-       (gst_x_overlay_got_xwindow_id), (gst_x_overlay_get_desired_size),
-       (gst_x_overlay_got_desired_size):
-       * gst-libs/gst/xoverlay/xoverlay.h:
-         Add optional "desired size" signal and querying.
-
-2004-01-04  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/matroska/matroska-demux.c:
-       (gst_matroska_demux_parse_blockgroup):
-         Fix EBML-laced block parsing. Diffs are relative to previous
-         lace, not the first lace. Thanks to Mosu from the Matroska
-         team for detecting this.
-       * gst/wavparse/gstwavparse.c: (gst_wavparse_init),
-       (gst_wavparse_parse_fmt), (gst_wavparse_getcaps),
-       (gst_wavparse_handle_sink_event), (gst_wavparse_loop),
-       (gst_wavparse_change_state):
-       * gst/wavparse/gstwavparse.h:
-         Quickfix for capsnego.
-
-2004-01-04  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/wavenc/gstwavenc.c: (set_property), (gst_wavenc_init):
-         Fix indenting, fix pad creation.
-
-2004-01-04  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/xvid/gstxviddec.c: (gst_xviddec_init),
-       (gst_xviddec_src_getcaps), (gst_xviddec_src_link),
-       (gst_xviddec_sink_link):
-         Implement src_getcaps() so proper size caps is negotiated.
-
-2004-01-04  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/flac/gstflacdec.c: (gst_flacdec_loop):
-         Finish flac decoder on EOS. See #116178.
-
-2004-01-04  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/matroska/matroska-demux.c: (gst_matroska_demux_src_getcaps),
-       (gst_matroska_demux_add_stream):
-       * gst/matroska/matroska-ids.h:
-         Add getcaps() function to fix capsnego...
-
-2004-01-04  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead),
-       (gst_mpeg_demux_parse_packet), (gst_mpeg_demux_parse_pes):
-       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead):
-         Fix more integer overflows. Again, see #126967.
-
-2004-01-03  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/mpeg2dec/gstmpeg2dec.c:
-         Add support for mpeg2dec-0.4.0 (released two weeks ago). See
-         #130416.
-
-2004-01-03  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * configure.ac:
-       * ext/xvid/gstxvid.c: (gst_xvid_init), (gst_xvid_error),
-       (gst_xvid_structure_to_csp), (gst_xvid_csp_to_caps):
-       * ext/xvid/gstxvid.h:
-       * ext/xvid/gstxviddec.c: (gst_xviddec_class_init),
-       (gst_xviddec_init), (gst_xviddec_setup), (gst_xviddec_chain),
-       (gst_xviddec_src_link), (gst_xviddec_sink_link),
-       (gst_xviddec_change_state):
-       * ext/xvid/gstxviddec.h:
-       * ext/xvid/gstxvidenc.c: (gst_xvidenc_profile_get_type),
-       (gst_xvidenc_base_init), (gst_xvidenc_class_init),
-       (gst_xvidenc_init), (gst_xvidenc_setup), (gst_xvidenc_chain),
-       (gst_xvidenc_link), (gst_xvidenc_set_property),
-       (gst_xvidenc_get_property), (gst_xvidenc_change_state):
-       * ext/xvid/gstxvidenc.h:
-         Update xvid plugin to latest xvid (1.0.0-beta3) API.
-
-2004-01-03  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/rtp/rtp-packet.c:
-         Add sys/types.h include, since OS X doesn't define in_addr_t
-         in netinet/in.h, like it does on Linux (see #129600).
-
-2004-01-03  Thomas Canty <tommydal@optushome.com.au>
-
-       reviewed by: Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_dispose):
-         Correct logic of dispose function (see #129306).
-
-2004-01-03  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_pes):
-       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_class_init),
-       (gst_mpeg_parse_init):
-       * gst/mpegstream/gstmpegparse.h:
-         Remove clock (which was never provided, i.e. dead code), and
-         also fix integer overflows at high PTS values (see #126967).
-
-2004-01-03  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/flac/gstflacdec.c:
-       * ext/libpng/gstpngenc.h:
-       * ext/mikmod/gstmikmod.h:
-         OS X fixes (see #126628).
-
-2004-01-02  David Schleef  <ds@schleef.org>
-
-       * ext/alsa/gstalsasrc.c: (gst_alsa_src_pad_factory),
-       (gst_alsa_src_base_init): Remove bogus "src" request pad.
-       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_base_init),
-       (gst_mpeg_parse_class_init): Move pad template registration
-       to class_init, since the derived class (mpegdemux) doesn't
-       want them.
-
-2004-01-03  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/ximage/Makefile.am:
-       * sys/xvideo/Makefile.am:
-       * sys/xvimage/Makefile.am:
-         Move interface libs from LDFLAGS to LIBADD, fix relocation errors
-         after installation (see #127664).
-
-2004-01-02  David Schleef  <ds@schleef.org>
-
-       * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_init),
-       (gst_ffmpegenc_connect):  Negotiation fixes.
-       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_negotiate_format):
-       Remove inappropriate gst_caps_free().
-       * sys/ximage/ximagesink.c: (gst_ximagesink_sinkconnect):
-       Reenable Ronald's internal resize code, since the core handles
-       it correctly now.
-
-2004-01-02  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_init):
-       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_init):
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_base_init), (gst_v4lsrc_init):
-         Fix pad template stuff.
-
-2004-01-02  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * gst/matroska/ebml-read.c: (gst_ebml_read_sint):
-       * gst/matroska/ebml-write.c: (gst_ebml_write_sint):
-         fix signed integer reading/writing.
-
-2004-01-02  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/alsa/README:
-         Remove outdated document
-
-2004-01-03  Jan Schmidt  <thaytan@mad.scientist.com>
-
-       * gst/cutter/gstcutter.c: (gst_cutter_init):
-         src pad was being created twice - oops.
-
-2004-01-02  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_sinkconnect):
-         Comment out internal resize. It doesn't handle the resulting
-         XEvent internally, does another try_set_caps() which leads to
-         a really nice loop.
-         Real fix will come when Julien and Dave are awake. ;).
-
-2004-01-02  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/mpeg2enc/gstmpeg2enc.cc:
-         fix const/nonconst compile issue.
-
-2004-01-02  David Schleef  <ds@schleef.org>
-
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_fixate),
-       (gst_xvimagesink_sinkconnect), (gst_xvimagesink_init):
-       Add fixate function and a check for bad formats.
-
-2004-01-01  David Schleef  <ds@schleef.org>
-
-       Negotiation fixes:
-       * gst-libs/gst/audio/gstaudiofilter.c: (gst_audiofilter_link),
-       (gst_audiofilter_init):
-       * gst/debug/efence.c: (gst_efence_init):
-       * gst/deinterlace/gstdeinterlace.c: (gst_deinterlace_link),
-       (gst_deinterlace_init):
-       * gst/volume/gstvolume.c: (volume_connect):
-
-2004-01-01  David Schleef  <ds@schleef.org>
-
-       Convert elements to use gst_pad_use_explicit_caps() where
-       appropriate:
-       * ext/a52dec/gsta52dec.c: (gst_a52dec_init), (gst_a52dec_reneg):
-       * ext/audiofile/gstafparse.c: (gst_afparse_init),
-       (gst_afparse_open_file):
-       * ext/audiofile/gstafsrc.c: (gst_afsrc_init),
-       (gst_afsrc_open_file):
-       * ext/esd/esdmon.c: (gst_esdmon_init), (gst_esdmon_get):
-       * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_init),
-       (gst_ffmpegdec_chain):
-       * ext/ffmpeg/gstffmpegdemux.c: (gst_ffmpegdemux_loop):
-       * ext/flac/gstflacdec.c: (gst_flacdec_init), (gst_flacdec_write):
-       * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_init),
-       (gst_gdk_pixbuf_chain):
-       * ext/jpeg/gstjpegdec.c: (gst_jpegdec_init), (gst_jpegdec_link),
-       (gst_jpegdec_chain):
-       * ext/mad/gstmad.c: (gst_mad_init), (gst_mad_chain):
-       * ext/mikmod/gstmikmod.c: (gst_mikmod_init),
-       (gst_mikmod_negotiate):
-       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
-       (gst_mpeg2dec_negotiate_format):
-       * ext/mpeg2enc/gstmpeg2enc.cc:
-       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
-       * ext/speex/gstspeexdec.c: (gst_speexdec_init),
-       (gst_speexdec_sinkconnect):
-       * ext/swfdec/gstswfdec.c: (gst_swfdec_loop), (gst_swfdec_init):
-       * ext/vorbis/vorbisfile.c: (gst_vorbisfile_init),
-       (gst_vorbisfile_new_link):
-       * gst/ac3parse/gstac3parse.c: (gst_ac3parse_init),
-       (gst_ac3parse_chain):
-       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_audio_stream),
-       (gst_asf_demux_setup_pad):
-       * gst/auparse/gstauparse.c: (gst_auparse_init),
-       (gst_auparse_chain):
-       * gst/id3/gstid3types.c: (gst_id3types_loop):
-       * gst/matroska/matroska-demux.c: (gst_matroska_demux_add_stream):
-       * gst/mpeg1videoparse/gstmp1videoparse.c: (gst_mp1videoparse_init),
-       (mp1videoparse_parse_seq):
-       * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_init),
-       (bpf_from_header):
-       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead),
-       (gst_mpeg_demux_parse_pes), (gst_mpeg_demux_lpcm_set_caps):
-       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_init),
-       (gst_mpeg_parse_send_data):
-       * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
-       (gst_qtdemux_add_stream):
-       * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream):
-       * gst/wavparse/gstwavparse.c: (gst_wavparse_init),
-       (gst_wavparse_parse_fmt):
-
-2004-01-01  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * configure.ac:
-         Fix configure check for mpeg2enc. We need 1.6.1.93 instead of
-         1.6.1.92, since the pkg-config file of 1.6.1.92 is borked and
-         it therefore uses the wrong include paths. Too bad... Note
-         that 1.6.1.93 is not release yet. ;).
-         Also add a check for mplex, which is now using the lib'ified
-         mplex from mjpegtools, too.
-       * ext/ffmpeg/gstffmpegcodecmap.c:
-         Add codec_tag for 3ivx/xvid. For xvid, this should fix playback
-         issues. I don't think ffmpeg handles 3ivx correctly, so this
-         probably won't work. But it won't hurt either.
-       * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_connect),
-       (gst_ffmpegdec_chain):
-       * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_connect),
-       (gst_ffmpegenc_chain_audio):
-         Fix memleak in audio encoding. Close codec if open fails, this
-         calls the cleanup routines so we can re-use the context.
-       * ext/mpeg2enc/gstmpeg2enc.cc:
-         Fix pad template names/types, fix memory issue with getcaps().
-       * ext/mpeg2enc/gstmpeg2encoder.cc:
-       * ext/mpeg2enc/gstmpeg2encoder.hh:
-         Fix compile issue with new caps system (const thingy).
-       * ext/mpeg2enc/gstmpeg2encpicturereader.cc:
-       * ext/mpeg2enc/gstmpeg2encpicturereader.hh:
-         We read a first frame right on initing, so that we have a caps
-         when we init the output. This caps is cached in padprivate and
-         read as first frame.
-       * ext/mplex/Makefile.am:
-       * ext/mplex/gstmplex.cc:
-       * ext/mplex/gstmplex.h:
-       * ext/mplex/gstmplex.hh:
-       * ext/mplex/gstmplexibitstream.cc:
-       * ext/mplex/gstmplexibitstream.hh:
-       * ext/mplex/gstmplexjob.cc:
-       * ext/mplex/gstmplexjob.hh:
-       * ext/mplex/gstmplexoutputstream.cc:
-       * ext/mplex/gstmplexoutputstream.hh:
-         We wrap mjpegtools mplex. So I rewrote the plugin. The old plugin
-         had issues, didn't do capsnego, supported only a subset of the
-         mplex features and required a mplex fork in our local CVS. Plus
-         that it worked agaist a very old mplex version. Rewriting was
-         faster than updating it.
-       * gst-libs/ext/Makefile.am:
-       * gst-libs/ext/mplex/INSTRUCT:
-       * gst-libs/ext/mplex/Makefile.am:
-       * gst-libs/ext/mplex/README:
-       * gst-libs/ext/mplex/TODO:
-       * gst-libs/ext/mplex/ac3strm_in.cc:
-       * gst-libs/ext/mplex/audiostrm.hh:
-       * gst-libs/ext/mplex/audiostrm_out.cc:
-       * gst-libs/ext/mplex/aunit.hh:
-       * gst-libs/ext/mplex/bits.cc:
-       * gst-libs/ext/mplex/bits.hh:
-       * gst-libs/ext/mplex/buffer.cc:
-       * gst-libs/ext/mplex/buffer.hh:
-       * gst-libs/ext/mplex/fastintfns.h:
-       * gst-libs/ext/mplex/format_codes.h:
-       * gst-libs/ext/mplex/inputstrm.cc:
-       * gst-libs/ext/mplex/inputstrm.hh:
-       * gst-libs/ext/mplex/lpcmstrm_in.cc:
-       * gst-libs/ext/mplex/mjpeg_logging.cc:
-       * gst-libs/ext/mplex/mjpeg_logging.h:
-       * gst-libs/ext/mplex/mjpeg_types.h:
-       * gst-libs/ext/mplex/mpastrm_in.cc:
-       * gst-libs/ext/mplex/mpegconsts.cc:
-       * gst-libs/ext/mplex/mpegconsts.h:
-       * gst-libs/ext/mplex/mplexconsts.hh:
-       * gst-libs/ext/mplex/multplex.cc:
-       * gst-libs/ext/mplex/outputstream.hh:
-       * gst-libs/ext/mplex/padstrm.cc:
-       * gst-libs/ext/mplex/padstrm.hh:
-       * gst-libs/ext/mplex/stillsstream.cc:
-       * gst-libs/ext/mplex/stillsstream.hh:
-       * gst-libs/ext/mplex/systems.cc:
-       * gst-libs/ext/mplex/systems.hh:
-       * gst-libs/ext/mplex/vector.cc:
-       * gst-libs/ext/mplex/vector.hh:
-       * gst-libs/ext/mplex/videostrm.hh:
-       * gst-libs/ext/mplex/videostrm_in.cc:
-       * gst-libs/ext/mplex/videostrm_out.cc:
-       * gst-libs/ext/mplex/yuv4mpeg.cc:
-       * gst-libs/ext/mplex/yuv4mpeg.h:
-       * gst-libs/ext/mplex/yuv4mpeg_intern.h:
-       * gst-libs/ext/mplex/yuv4mpeg_ratio.cc:
-         We don't fork mjpegtools' mplex in our CVS anymore.
-       * gst/avi/gstavidemux.c: (gst_avi_demux_src_getcaps),
-       (gst_avi_demux_add_stream):
-       * gst/avi/gstavidemux.h:
-         Add getcaps() function for proper caps nego. This makes some
-         parts of AVI playback/reading work.
-       * sys/ximage/ximagesink.c: (gst_ximagesink_sinkconnect):
-         Resize window on new capsnego. This is probably wrong, but
-         I'm still committing it because with current capsnego, the
-         first successfull capsnego is auto-fixated, therefore rounded
-         down to the lowest values in the caps. this results in a 16x16
-         XWindow that is not reized when real capsnego finishes.
-         Dave, I see more cases of this, do you know a proper solution?
-       * tools/gst-launch-ext.in:
-         Fix MPEG-4 AAC (Apple iPod/iTunes) file commandline.
-
-2003-12-31  David Schleef  <ds@schleef.org>
-
-       * gst/tcp/gsttcpsrc.c: (gst_tcpsrc_get):
-       * gst/udp/gstudpsrc.c: (gst_udpsrc_get):
-         Change gst_pad_proxy_link() to gst_pad_try_set_caps()
-
-2003-12-30  David Schleef  <ds@schleef.org>
-
-       * ext/ffmpeg/gstffmpegcolorspace.c:
-       (gst_ffmpegcsp_caps_remove_format_info), (gst_ffmpegcsp_getcaps),
-       (gst_ffmpegcsp_pad_link), (gst_ffmpegcsp_init),
-       (gst_ffmpegcsp_chain): Negotiation fixes
-       * ext/mad/gstmad.c: (gst_mad_chain): Negotiation fixes
-       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_chain),
-       (gst_audio_convert_link), (gst_audio_convert_channels):
-       * gst/audioscale/gstaudioscale.c: (gst_audioscale_getcaps),
-       (gst_audioscale_link), (gst_audioscale_get_buffer),
-       (gst_audioscale_chain): Negotiation fixes
-       * gst/audioscale/gstaudioscale.h:
-       * gst/videofilter/gstvideofilter.c:
-       (gst_videofilter_format_get_structure), (gst_videofilter_getcaps),
-       (gst_videofilter_link), (gst_videofilter_init),
-       (gst_videofilter_set_output_size), (gst_videofilter_setup),
-       (gst_videofilter_find_format_by_structure):
-       * gst/videofilter/gstvideofilter.h: Negotiation fixes
-       * gst/videoscale/gstvideoscale.c: (gst_videoscale_getcaps),
-       (gst_videoscale_link):
-       * gst/videoscale/videoscale.c: (videoscale_get_structure),
-       (videoscale_find_by_structure), (gst_videoscale_setup):
-       * gst/videoscale/videoscale.h: Negotiation fixes
-       * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents),
-       (gst_ximagesink_fixate), (gst_ximagesink_init): Add a fixate
-       function, restrict resizing to a multiple of 4 (hack until
-       everyone supports odd sizes correctly).
-
-2003-12-29  Colin Walters  <walters@verbum.org>
-
-       * ext/esd/esdsink.c (gst_esdsink_link): Fix typo; get depth instead of
-       signed.
-
-2003-12-30  Jan Schmidt <thaytan@mad.scientist.com>
-
-       * ext/sndfile/gstsf.c: (gst_sf_loop):
-         Fix warning about discarding const qualifier
-
-2003-12-27  Jeremy Simon   <jesimon@libertysurf.fr>
-
-       * gst/cutter/gstcutter.c:
-       * gst/videoscale/gstvideoscale.c:
-       * gst/volenv/gstvolenv.c:
-       * gst-libs/gst/audio/audio.c:
-       * gst-libs/gst/video/video.c:
-         Fix warnings
-
-2003-12-27  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_open_audio):
-         Don't send ALSA debugging to stderr.
-       * ext/alsa/gstalsa.h:
-         Use GST_WARNING instead of g_warning when ALSA functions fail.
-
-2003-12-27  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support):
-         Free XVAdapterInfo correctly.
-
-2003-12-27  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/mad/gstid3tag.c: (gst_id3_tag_add_src_pad),
-       (gst_id3_tag_do_caps_nego), (gst_id3_tag_src_link):
-         Make id3tag use correct caps nego.
-
-2003-12-27  Amaury Jacquot <sxpert@esitcom.org>
-
-       * ext/ivorbis/vorbis.c:
-       * ext/ivorbis/vorbisenc.h:
-       * ext/ivorbis/vorbisfile.c:
-         Modify so that it uses the new caps things
-
-2003-12-27  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * testsuite/spider/spider1.c: (main):
-       * testsuite/spider/spider2.c: (main):
-       * testsuite/spider/spider3.c: (main):
-         Make tests compile again. They probably don't work.
-
-2003-12-24  Colin Walters  <walters@verbum.org>
-
-       * sys/oss/gstosssink.c (gst_osssink_sink_fixate): Return NULL if
-       we can't fixate the caps anymore.
-
-2003-12-23  David Schleef  <ds@schleef.org>
-
-       * gst/volume/gstvolume.c: (volume_init): Proxy getcaps.
-       * sys/oss/gstosssink.c: (gst_osssink_init),
-       (gst_osssink_sink_fixate): Add fixate function.
-
-2003-12-24  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/ffmpeg/gstffmpegcodecmap.c:
-       * ext/ffmpeg/gstffmpegcolorspace.c: (gst_ffmpegcsp_getcaps),
-       (gst_ffmpegcsp_srcconnect_func), (gst_ffmpegcsp_sinkconnect),
-       (gst_ffmpegcsp_srcconnect), (gst_ffmpegcsp_get_type),
-       (gst_ffmpegcsp_base_init), (gst_ffmpegcsp_class_init),
-       (gst_ffmpegcsp_init), (gst_ffmpegcsp_chain),
-       (gst_ffmpegcsp_change_state), (gst_ffmpegcsp_set_property),
-       (gst_ffmpegcsp_get_property), (gst_ffmpegcsp_register):
-         fix typo in RGB masks, and move back to "old" colorspace
-         capsnego code until whoever wrote this new crap has actually
-         tested it so that it works.
-         And yes, this works, keep it that way please.
-
-2003-12-23  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * ext/divx/gstdivxdec.c: (gst_divxdec_base_init),
-       (gst_divxdec_init), (gst_divxdec_negotiate):
-       * ext/divx/gstdivxdec.h:
-       * ext/divx/gstdivxenc.c: (gst_divxenc_base_init),
-       (gst_divxenc_init):
-       * ext/faac/gstfaac.c: (gst_faac_base_init), (gst_faac_init),
-       (gst_faac_sinkconnect), (gst_faac_srcconnect):
-       * ext/mpeg2enc/gstmpeg2enc.cc:
-       * ext/mpeg2enc/gstmpeg2encoder.cc:
-       * ext/mpeg2enc/gstmpeg2encpicturereader.cc:
-       * sys/dxr3/dxr3audiosink.c: (dxr3audiosink_base_init),
-       (dxr3audiosink_init), (dxr3audiosink_pcm_sinklink):
-       * sys/dxr3/dxr3spusink.c: (dxr3spusink_base_init),
-       (dxr3spusink_init):
-       * sys/dxr3/dxr3videosink.c: (dxr3videosink_base_init),
-       (dxr3videosink_init):
-         Fix caps breakage after Dave's caps branch merge.
-
-2003-12-23  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get):
-         Fix for 24bpp display.
-
-2003-12-23  Colin Walters  <walters@verbum.org>
-
-       * ext/gnomevfs/gstgnomevfssink.c: Add ARG_HANDLE property that takes
-       a GnomeVFSHandle directly.
-
-2003-12-22  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst/volume/Makefile.am:
-       * gst/volume/gstvolume.c: (volume_connect), (volume_parse_caps),
-       (volume_base_init), (volume_init):
-         Reenable volume element and fix to work with new caps stuff.
-         Rhythmbox needs this.
-
-2003-12-22  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * gst/qtdemux/qtdemux.c: (plugin_init):
-         qtdemux requires bytestream
-
-2003-12-22  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/alsa/gstalsa.c: (gst_alsa_get_caps), (gst_alsa_link):
-         Fix remaining caps handling errors due to CAPS merge.
-
-2003-12-22  Benjamin Otte  <in7y118@public.uni-hamburg.de>
-
-       * ext/faad/gstfaad.c: (gst_faad_base_init), (gst_faad_init),
-       (gst_faad_sinkconnect), (gst_faad_srcgetcaps),
-       (gst_faad_srcconnect):
-         Port to new caps system.
-
-2003-12-21  Julien MOUTTE  <julien@moutte.net>
-
-       * examples/gstplay/player.c: (got_time_tick), (got_stream_length),
-       (got_video_size), (main): using g_print instead of g_message.
-       * gst-libs/gst/play/gstplay.c: (gst_play_pipeline_setup): Fixing EOS
-       signal which was not emitted because of "switch" element added to the
-       bin but not connected. (Removing from the bin temporarily)
-
-2003-12-21  Julien MOUTTE  <julien@moutte.net>
-
-       * configure.ac: X_DISPLAY_MISSING is set to 1 if AC_PATH_XTRA fails to
-       find X development files. I don't understand the previous tests and
-       they fail on my debian/ppc unstable. This one works.
-       * examples/gstplay/player.c: (main): Set the pipeline to READY before
-       exiting.
-       * gst-libs/gst/play/gstplay.c: (gst_play_get_length_callback),
-       (gst_play_set_video_sink), (gst_play_set_audio_sink),
-       (gst_play_set_visualization): Add some safety checks in set_ methods
-       and state_change. This was throwing some ugly CRITICAL messages when
-       pipeline was getting disposed and casts were failing.
-
-2003-12-21  Ronald Bultje  <rbultje@ronald.bitfreak.net>
-
-       * configure.ac:
-         Improve mpeg2enc detection. This is for distributions that do
-         ship mjpegtools, but without mpeg2enc. Also does object check
-         for might there ever be ABI incompatibility.
-       * ext/mpeg2enc/gstmpeg2enc.cc:
-         Add Andrew as second maintainer (he's helping me), and also add
-         an error if no caps was set. This happens if I pull before capsnego
-         and that's something I should solve sometime else.
-       * gst/matroska/matroska-demux.c:
-       (gst_matroska_demux_parse_blockgroup):
-         Fix time parsing.
-       * gst/matroska/matroska-mux.c: (gst_matroska_mux_audio_pad_link),
-       (gst_matroska_mux_track_header):
-         Add caps to templates.
-       * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3_sink_factory):
-         Add mpegversion=1 to prevent confusion with MPEG/AAC.
-       * gst/mpegstream/gstmpegdemux.c:
-         Remove layer since it causes warnings about unfixed caps.
-       * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get):
-         Fix obvious typo (we error out if caps were set, we should of
-         course error out if *no* caps were set).
-       * sys/oss/gstosselement.c: (gst_osselement_convert):
-         Fix format conversion, we confused bits/bytes.
-       * sys/oss/gstosselement.h:
-         Improve documentation for 'bps'.
-       * sys/v4l/TODO:
-         Remove stuff about plugins that need removing - this was done
-         ages ago.
-       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_init),
-       (gst_v4lmjpegsrc_src_convert), (gst_v4lmjpegsrc_src_query):
-       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_init), (gst_v4lsrc_src_convert),
-       (gst_v4lsrc_src_query):
-       * sys/v4l2/gstv4l2src.c: (gst_v4l2src_init),
-       (gst_v4l2src_src_convert), (gst_v4l2src_src_query):
-         Add get_query_types(), get_formats() and query() functions.
-
-2003-12-21  Thomas Vander Stichele  <thomas at apestaart dot org>
-
-       * ChangeLog: moved to gstreamer/docs/random/old/ChangeLog.gst-plugins
-        * moved CVS to freedesktop.org
-
diff --git a/docs/random/LICENSE b/docs/random/LICENSE
deleted file mode 100644 (file)
index 696b1c1..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * 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.
- */
diff --git a/docs/random/PORTED_09 b/docs/random/PORTED_09
deleted file mode 100644 (file)
index 92c40fa..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-When porting a plugin start with 0.8 CVS head, not the old code in this module. There are many bugfixes which have gone into 0.8 which you want to keep.
-
-List of ported plugins (update when you commit a ported plugin):
-effectv (wim)
-mad    (wim)
-videofilter (wim)
-aalib  (wim)
-libcaca        (zeeshan)
-law    (wim)
-shout2  (zaheer) - not fully tested
-esdsink (arwed)
-
-osssink is partially done in the threaded branch (wim)
-
-- Remember that some plugins are already ported and now in the gst-plugins-base module.
-
-When you have ported a plugin remember to copy the relevant parts from configure.ac.orig into configure.ac and re-enable it in the Makefile.am files.
diff --git a/docs/sitemap.txt b/docs/sitemap.txt
deleted file mode 100644 (file)
index 058a271..0000000
+++ /dev/null
@@ -1 +0,0 @@
-gst-index
diff --git a/ext/a52dec/gsta52dec.c b/ext/a52dec/gsta52dec.c
deleted file mode 100644 (file)
index 5beba90..0000000
+++ /dev/null
@@ -1,848 +0,0 @@
-/* GStreamer
- * Copyright (C) <2001> David I. Lehn <dlehn@users.sourceforge.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-a52dec
- * @title: a52dec
- *
- * Dolby Digital (AC-3) audio decoder.
- *
- * ## Example launch line
- * |[
- * gst-launch-1.0 dvdreadsrc title=1 ! mpegpsdemux ! a52dec ! audioconvert ! audioresample ! autoaudiosink
- * ]| Play audio part of a dvd title.
- * |[
- * gst-launch-1.0 filesrc location=abc.ac3 ! ac3parse ! a52dec ! audioconvert ! audioresample ! autoaudiosink
- * ]| Decode and play a stand alone AC-3 file.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include <stdlib.h>
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-#include <gst/gst.h>
-
-#include <a52dec/a52.h>
-#if !defined(A52_ACCEL_DETECT)
-#  include <a52dec/mm_accel.h>
-#endif
-#include "gsta52dec.h"
-
-#if HAVE_ORC
-#include <orc/orc.h>
-#endif
-
-#ifdef LIBA52_DOUBLE
-#define SAMPLE_WIDTH 64
-#define SAMPLE_FORMAT GST_AUDIO_NE(F64)
-#define SAMPLE_TYPE GST_AUDIO_FORMAT_F64
-#else
-#define SAMPLE_WIDTH 32
-#define SAMPLE_FORMAT GST_AUDIO_NE(F32)
-#define SAMPLE_TYPE GST_AUDIO_FORMAT_F32
-#endif
-
-GST_DEBUG_CATEGORY_STATIC (a52dec_debug);
-#define GST_CAT_DEFAULT (a52dec_debug)
-
-/* A52Dec args */
-enum
-{
-  ARG_0,
-  ARG_DRC,
-  ARG_MODE,
-  ARG_LFE,
-};
-
-static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-ac3; audio/ac3; audio/x-private1-ac3")
-    );
-
-static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-raw, "
-        "format = (string) " SAMPLE_FORMAT ", "
-        "layout = (string) interleaved, "
-        "rate = (int) [ 4000, 96000 ], " "channels = (int) [ 1, 6 ]")
-    );
-
-static gboolean a52_element_init (GstPlugin * plugin);
-
-#define gst_a52dec_parent_class parent_class
-G_DEFINE_TYPE (GstA52Dec, gst_a52dec, GST_TYPE_AUDIO_DECODER);
-GST_ELEMENT_REGISTER_DEFINE_CUSTOM (a52dec, a52_element_init);
-
-static gboolean gst_a52dec_start (GstAudioDecoder * dec);
-static gboolean gst_a52dec_stop (GstAudioDecoder * dec);
-static gboolean gst_a52dec_set_format (GstAudioDecoder * bdec, GstCaps * caps);
-static GstFlowReturn gst_a52dec_parse (GstAudioDecoder * dec,
-    GstAdapter * adapter, gint * offset, gint * length);
-static GstFlowReturn gst_a52dec_handle_frame (GstAudioDecoder * dec,
-    GstBuffer * buffer);
-
-static GstFlowReturn gst_a52dec_chain (GstPad * pad, GstObject * parent,
-    GstBuffer * buffer);
-static void gst_a52dec_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-static void gst_a52dec_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
-
-#define GST_TYPE_A52DEC_MODE (gst_a52dec_mode_get_type())
-static GType
-gst_a52dec_mode_get_type (void)
-{
-  static GType a52dec_mode_type = 0;
-  static const GEnumValue a52dec_modes[] = {
-    {A52_MONO, "Mono", "mono"},
-    {A52_STEREO, "Stereo", "stereo"},
-    {A52_3F, "3 Front", "3f"},
-    {A52_2F1R, "2 Front, 1 Rear", "2f1r"},
-    {A52_3F1R, "3 Front, 1 Rear", "3f1r"},
-    {A52_2F2R, "2 Front, 2 Rear", "2f2r"},
-    {A52_3F2R, "3 Front, 2 Rear", "3f2r"},
-    {A52_DOLBY, "Dolby", "dolby"},
-    {0, NULL, NULL},
-  };
-
-  if (!a52dec_mode_type) {
-    a52dec_mode_type = g_enum_register_static ("GstA52DecMode", a52dec_modes);
-  }
-  return a52dec_mode_type;
-}
-
-static void
-gst_a52dec_class_init (GstA52DecClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-  GstAudioDecoderClass *gstbase_class;
-  guint cpuflags = 0;
-
-  gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-  gstbase_class = (GstAudioDecoderClass *) klass;
-
-  gobject_class->set_property = gst_a52dec_set_property;
-  gobject_class->get_property = gst_a52dec_get_property;
-
-  gstbase_class->start = GST_DEBUG_FUNCPTR (gst_a52dec_start);
-  gstbase_class->stop = GST_DEBUG_FUNCPTR (gst_a52dec_stop);
-  gstbase_class->set_format = GST_DEBUG_FUNCPTR (gst_a52dec_set_format);
-  gstbase_class->parse = GST_DEBUG_FUNCPTR (gst_a52dec_parse);
-  gstbase_class->handle_frame = GST_DEBUG_FUNCPTR (gst_a52dec_handle_frame);
-
-  /**
-   * GstA52Dec::drc
-   *
-   * Set to true to apply the recommended Dolby Digital dynamic range compression
-   * to the audio stream. Dynamic range compression makes loud sounds
-   * softer and soft sounds louder, so you can more easily listen
-   * to the stream without disturbing other people.
-   */
-  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_DRC,
-      g_param_spec_boolean ("drc", "Dynamic Range Compression",
-          "Use Dynamic Range Compression", FALSE,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  /**
-   * GstA52Dec::mode
-   *
-   * Force a particular output channel configuration from the decoder. By default,
-   * the channel downmix (if any) is chosen automatically based on the downstream
-   * capabilities of the pipeline.
-   */
-  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_MODE,
-      g_param_spec_enum ("mode", "Decoder Mode", "Decoding Mode (default 3f2r)",
-          GST_TYPE_A52DEC_MODE, A52_3F2R,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  /**
-   * GstA52Dec::lfe
-   *
-   * Whether to output the LFE (Low Frequency Emitter) channel of the audio stream.
-   */
-  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_LFE,
-      g_param_spec_boolean ("lfe", "LFE", "LFE", TRUE,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  gst_element_class_add_static_pad_template (gstelement_class, &sink_factory);
-  gst_element_class_add_static_pad_template (gstelement_class, &src_factory);
-  gst_element_class_set_static_metadata (gstelement_class,
-      "ATSC A/52 audio decoder", "Codec/Decoder/Audio/Converter",
-      "Decodes ATSC A/52 encoded audio streams",
-      "David I. Lehn <dlehn@users.sourceforge.net>");
-
-  GST_DEBUG_CATEGORY_INIT (a52dec_debug, "a52dec", 0,
-      "AC3/A52 software decoder");
-
-  /* If no CPU instruction based acceleration is available, end up using the
-   * generic software djbfft based one when available in the used liba52 */
-#ifdef MM_ACCEL_DJBFFT
-  klass->a52_cpuflags = MM_ACCEL_DJBFFT;
-#elif defined(A52_ACCEL_DETECT)
-  klass->a52_cpuflags = A52_ACCEL_DETECT;
-#else
-  klass->a52_cpuflags = 0;
-#endif
-
-#if HAVE_ORC && !defined(A52_ACCEL_DETECT)
-  cpuflags = orc_target_get_default_flags (orc_target_get_by_name ("mmx"));
-  if (cpuflags & ORC_TARGET_MMX_MMX)
-    klass->a52_cpuflags |= MM_ACCEL_X86_MMX;
-  if (cpuflags & ORC_TARGET_MMX_3DNOW)
-    klass->a52_cpuflags |= MM_ACCEL_X86_3DNOW;
-  if (cpuflags & ORC_TARGET_MMX_MMXEXT)
-    klass->a52_cpuflags |= MM_ACCEL_X86_MMXEXT;
-#endif
-
-  GST_LOG ("CPU flags: a52=%08x, orc=%08x", klass->a52_cpuflags, cpuflags);
-
-  gst_type_mark_as_plugin_api (GST_TYPE_A52DEC_MODE, 0);
-}
-
-static void
-gst_a52dec_init (GstA52Dec * a52dec)
-{
-  a52dec->request_channels = A52_CHANNEL;
-  a52dec->dynamic_range_compression = FALSE;
-
-  a52dec->state = NULL;
-  a52dec->samples = NULL;
-
-  gst_audio_decoder_set_use_default_pad_acceptcaps (GST_AUDIO_DECODER_CAST
-      (a52dec), TRUE);
-  GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_DECODER_SINK_PAD (a52dec));
-
-  /* retrieve and intercept base class chain.
-   * Quite HACKish, but that's dvd specs/caps for you,
-   * since one buffer needs to be split into 2 frames */
-  a52dec->base_chain = GST_PAD_CHAINFUNC (GST_AUDIO_DECODER_SINK_PAD (a52dec));
-  gst_pad_set_chain_function (GST_AUDIO_DECODER_SINK_PAD (a52dec),
-      GST_DEBUG_FUNCPTR (gst_a52dec_chain));
-}
-
-static gboolean
-gst_a52dec_start (GstAudioDecoder * dec)
-{
-  GstA52Dec *a52dec = GST_A52DEC (dec);
-  GstA52DecClass *klass;
-  static GMutex init_mutex;
-
-  GST_DEBUG_OBJECT (dec, "start");
-
-  klass = GST_A52DEC_CLASS (G_OBJECT_GET_CLASS (a52dec));
-  g_mutex_lock (&init_mutex);
-#if defined(A52_ACCEL_DETECT)
-  a52dec->state = a52_init ();
-  /* This line is just to avoid being accused of not using klass */
-  a52_accel (klass->a52_cpuflags & A52_ACCEL_DETECT);
-#else
-  a52dec->state = a52_init (klass->a52_cpuflags);
-#endif
-  g_mutex_unlock (&init_mutex);
-
-  if (!a52dec->state) {
-    GST_ELEMENT_ERROR (GST_ELEMENT (a52dec), LIBRARY, INIT, (NULL),
-        ("failed to initialize a52 state"));
-    return FALSE;
-  }
-
-  a52dec->samples = a52_samples (a52dec->state);
-  a52dec->bit_rate = -1;
-  a52dec->sample_rate = -1;
-  a52dec->stream_channels = A52_CHANNEL;
-  a52dec->using_channels = A52_CHANNEL;
-  a52dec->level = 1;
-  a52dec->bias = 0;
-  a52dec->flag_update = TRUE;
-
-  /* call upon legacy upstream byte support (e.g. seeking) */
-  gst_audio_decoder_set_estimate_rate (dec, TRUE);
-
-  return TRUE;
-}
-
-static gboolean
-gst_a52dec_stop (GstAudioDecoder * dec)
-{
-  GstA52Dec *a52dec = GST_A52DEC (dec);
-
-  GST_DEBUG_OBJECT (dec, "stop");
-
-  a52dec->samples = NULL;
-  if (a52dec->state) {
-    a52_free (a52dec->state);
-    a52dec->state = NULL;
-  }
-
-  return TRUE;
-}
-
-static GstFlowReturn
-gst_a52dec_parse (GstAudioDecoder * bdec, GstAdapter * adapter,
-    gint * _offset, gint * len)
-{
-  GstA52Dec *a52dec;
-  const guint8 *data;
-  gint av, size;
-  gint length = 0, flags, sample_rate, bit_rate;
-  GstFlowReturn result = GST_FLOW_EOS;
-
-  a52dec = GST_A52DEC (bdec);
-
-  size = av = gst_adapter_available (adapter);
-  data = (const guint8 *) gst_adapter_map (adapter, av);
-
-  /* find and read header */
-  bit_rate = a52dec->bit_rate;
-  sample_rate = a52dec->sample_rate;
-  flags = 0;
-  while (size >= 7) {
-    length = a52_syncinfo ((guint8 *) data, &flags, &sample_rate, &bit_rate);
-
-    if (length == 0) {
-      /* shift window to re-find sync */
-      data++;
-      size--;
-    } else if (length <= size) {
-      GST_LOG_OBJECT (a52dec, "Sync: frame size %d", length);
-      result = GST_FLOW_OK;
-      break;
-    } else {
-      GST_LOG_OBJECT (a52dec, "Not enough data available (needed %d had %d)",
-          length, size);
-      break;
-    }
-  }
-  gst_adapter_unmap (adapter);
-
-  *_offset = av - size;
-  *len = length;
-
-  return result;
-}
-
-static gint
-gst_a52dec_channels (int flags, GstAudioChannelPosition * pos)
-{
-  gint chans = 0;
-
-  if (flags & A52_LFE) {
-    chans += 1;
-    if (pos) {
-      pos[0] = GST_AUDIO_CHANNEL_POSITION_LFE1;
-    }
-  }
-  flags &= A52_CHANNEL_MASK;
-  switch (flags) {
-    case A52_3F2R:
-      if (pos) {
-        pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
-        pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER;
-        pos[2 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
-        pos[3 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_LEFT;
-        pos[4 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT;
-      }
-      chans += 5;
-      break;
-    case A52_2F2R:
-      if (pos) {
-        pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
-        pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
-        pos[2 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_LEFT;
-        pos[3 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT;
-      }
-      chans += 4;
-      break;
-    case A52_3F1R:
-      if (pos) {
-        pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
-        pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER;
-        pos[2 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
-        pos[3 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_CENTER;
-      }
-      chans += 4;
-      break;
-    case A52_2F1R:
-      if (pos) {
-        pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
-        pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
-        pos[2 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_CENTER;
-      }
-      chans += 3;
-      break;
-    case A52_3F:
-      if (pos) {
-        pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
-        pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER;
-        pos[2 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
-      }
-      chans += 3;
-      break;
-    case A52_CHANNEL:          /* Dual mono. Should really be handled as 2 src pads */
-    case A52_STEREO:
-    case A52_DOLBY:
-      if (pos) {
-        pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
-        pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
-      }
-      chans += 2;
-      break;
-    case A52_MONO:
-      if (pos) {
-        pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_MONO;
-      }
-      chans += 1;
-      break;
-    default:
-      /* error, caller should post error message */
-      return 0;
-  }
-
-  return chans;
-}
-
-static gboolean
-gst_a52dec_reneg (GstA52Dec * a52dec)
-{
-  gint channels;
-  gboolean result = FALSE;
-  GstAudioChannelPosition from[6], to[6];
-  GstAudioInfo info;
-
-  channels = gst_a52dec_channels (a52dec->using_channels, from);
-
-  if (!channels)
-    goto done;
-
-  GST_INFO_OBJECT (a52dec, "reneg channels:%d rate:%d",
-      channels, a52dec->sample_rate);
-
-  memcpy (to, from, sizeof (GstAudioChannelPosition) * channels);
-  gst_audio_channel_positions_to_valid_order (to, channels);
-  gst_audio_get_channel_reorder_map (channels, from, to,
-      a52dec->channel_reorder_map);
-
-  gst_audio_info_init (&info);
-  gst_audio_info_set_format (&info,
-      SAMPLE_TYPE, a52dec->sample_rate, channels, (channels > 1 ? to : NULL));
-
-  if (!gst_audio_decoder_set_output_format (GST_AUDIO_DECODER (a52dec), &info))
-    goto done;
-
-  result = TRUE;
-
-done:
-  return result;
-}
-
-static void
-gst_a52dec_update_streaminfo (GstA52Dec * a52dec)
-{
-  GstTagList *taglist;
-
-  taglist = gst_tag_list_new_empty ();
-  gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_BITRATE,
-      (guint) a52dec->bit_rate, NULL);
-
-  gst_audio_decoder_merge_tags (GST_AUDIO_DECODER (a52dec), taglist,
-      GST_TAG_MERGE_REPLACE);
-  gst_tag_list_unref (taglist);
-}
-
-static GstFlowReturn
-gst_a52dec_handle_frame (GstAudioDecoder * bdec, GstBuffer * buffer)
-{
-  GstA52Dec *a52dec;
-  gint channels, i;
-  gboolean need_reneg = FALSE;
-  gint chans;
-  gint length = 0, flags, sample_rate, bit_rate;
-  GstMapInfo map;
-  GstFlowReturn result = GST_FLOW_OK;
-  GstBuffer *outbuf;
-  const gint num_blocks = 6;
-
-  a52dec = GST_A52DEC (bdec);
-
-  /* no fancy draining */
-  if (G_UNLIKELY (!buffer))
-    return GST_FLOW_OK;
-
-  /* parsed stuff already, so this should work out fine */
-  gst_buffer_map (buffer, &map, GST_MAP_READ);
-  g_assert (map.size >= 7);
-
-  /* re-obtain some sync header info,
-   * should be same as during _parse and could also be cached there,
-   * but anyway ... */
-  bit_rate = a52dec->bit_rate;
-  sample_rate = a52dec->sample_rate;
-  flags = 0;
-  length = a52_syncinfo (map.data, &flags, &sample_rate, &bit_rate);
-  g_assert (length == map.size);
-
-  /* update stream information, renegotiate or re-streaminfo if needed */
-  need_reneg = FALSE;
-  if (a52dec->sample_rate != sample_rate) {
-    GST_DEBUG_OBJECT (a52dec, "sample rate changed");
-    need_reneg = TRUE;
-    a52dec->sample_rate = sample_rate;
-  }
-
-  if (flags) {
-    if (a52dec->stream_channels != (flags & (A52_CHANNEL_MASK | A52_LFE))) {
-      GST_DEBUG_OBJECT (a52dec, "stream channel flags changed, marking update");
-      a52dec->flag_update = TRUE;
-    }
-    a52dec->stream_channels = flags & (A52_CHANNEL_MASK | A52_LFE);
-  }
-
-  if (bit_rate != a52dec->bit_rate) {
-    a52dec->bit_rate = bit_rate;
-    gst_a52dec_update_streaminfo (a52dec);
-  }
-
-  /* If we haven't had an explicit number of channels chosen through properties
-   * at this point, choose what to downmix to now, based on what the peer will
-   * accept - this allows a52dec to do downmixing in preference to a
-   * downstream element such as audioconvert.
-   */
-  if (a52dec->request_channels != A52_CHANNEL) {
-    flags = a52dec->request_channels;
-  } else if (a52dec->flag_update) {
-    GstCaps *caps;
-
-    a52dec->flag_update = FALSE;
-
-    caps = gst_pad_get_allowed_caps (GST_AUDIO_DECODER_SRC_PAD (a52dec));
-    if (caps && gst_caps_get_size (caps) > 0) {
-      GstCaps *copy = gst_caps_copy_nth (caps, 0);
-      GstStructure *structure = gst_caps_get_structure (copy, 0);
-      gint orig_channels = flags ? gst_a52dec_channels (flags, NULL) : 6;
-      gint fixed_channels = 0;
-      const int a52_channels[6] = {
-        A52_MONO,
-        A52_STEREO,
-        A52_STEREO | A52_LFE,
-        A52_2F2R,
-        A52_2F2R | A52_LFE,
-        A52_3F2R | A52_LFE,
-      };
-
-      /* Prefer the original number of channels, but fixate to something
-       * preferred (first in the caps) downstream if possible.
-       */
-      gst_structure_fixate_field_nearest_int (structure, "channels",
-          orig_channels);
-
-      if (gst_structure_get_int (structure, "channels", &fixed_channels)
-          && fixed_channels <= 6) {
-        if (fixed_channels < orig_channels)
-          flags = a52_channels[fixed_channels - 1];
-      } else {
-        flags = a52_channels[5];
-      }
-
-      gst_caps_unref (copy);
-    } else if (flags)
-      flags = a52dec->stream_channels;
-    else
-      flags = A52_3F2R | A52_LFE;
-
-    if (caps)
-      gst_caps_unref (caps);
-  } else {
-    flags = a52dec->using_channels;
-  }
-
-  /* process */
-  flags |= A52_ADJUST_LEVEL;
-  a52dec->level = 1;
-  if (a52_frame (a52dec->state, map.data, &flags, &a52dec->level, a52dec->bias)) {
-    gst_buffer_unmap (buffer, &map);
-    GST_AUDIO_DECODER_ERROR (a52dec, 1, STREAM, DECODE, (NULL),
-        ("a52_frame error"), result);
-    goto exit;
-  }
-  gst_buffer_unmap (buffer, &map);
-
-  channels = flags & (A52_CHANNEL_MASK | A52_LFE);
-  if (a52dec->using_channels != channels) {
-    need_reneg = TRUE;
-    a52dec->using_channels = channels;
-  }
-
-  /* negotiate if required */
-  if (need_reneg) {
-    GST_DEBUG_OBJECT (a52dec,
-        "a52dec reneg: sample_rate:%d stream_chans:%d using_chans:%d",
-        a52dec->sample_rate, a52dec->stream_channels, a52dec->using_channels);
-    if (!gst_a52dec_reneg (a52dec))
-      goto failed_negotiation;
-  }
-
-  if (a52dec->dynamic_range_compression == FALSE) {
-    a52_dynrng (a52dec->state, NULL, NULL);
-  }
-
-  flags &= (A52_CHANNEL_MASK | A52_LFE);
-  chans = gst_a52dec_channels (flags, NULL);
-  if (!chans)
-    goto invalid_flags;
-
-  /* handle decoded data;
-   * each frame has 6 blocks, one block is 256 samples, ea */
-  outbuf =
-      gst_buffer_new_and_alloc (256 * chans * (SAMPLE_WIDTH / 8) * num_blocks);
-
-  gst_buffer_map (outbuf, &map, GST_MAP_WRITE);
-  {
-    guint8 *ptr = map.data;
-    for (i = 0; i < num_blocks; i++) {
-      if (a52_block (a52dec->state)) {
-        /* also marks discont */
-        GST_AUDIO_DECODER_ERROR (a52dec, 1, STREAM, DECODE, (NULL),
-            ("error decoding block %d", i), result);
-        if (result != GST_FLOW_OK) {
-          gst_buffer_unmap (outbuf, &map);
-          gst_buffer_unref (outbuf);
-          goto exit;
-        }
-      } else {
-        gint n, c;
-        gint *reorder_map = a52dec->channel_reorder_map;
-
-        for (n = 0; n < 256; n++) {
-          for (c = 0; c < chans; c++) {
-            ((sample_t *) ptr)[n * chans + reorder_map[c]] =
-                a52dec->samples[c * 256 + n];
-          }
-        }
-      }
-      ptr += 256 * chans * (SAMPLE_WIDTH / 8);
-    }
-  }
-  gst_buffer_unmap (outbuf, &map);
-
-  result = gst_audio_decoder_finish_frame (bdec, outbuf, 1);
-
-exit:
-  return result;
-
-  /* ERRORS */
-failed_negotiation:
-  {
-    GST_ELEMENT_ERROR (a52dec, CORE, NEGOTIATION, (NULL), (NULL));
-    return GST_FLOW_ERROR;
-  }
-invalid_flags:
-  {
-    GST_ELEMENT_ERROR (GST_ELEMENT (a52dec), STREAM, DECODE, (NULL),
-        ("Invalid channel flags: %d", flags));
-    return GST_FLOW_ERROR;
-  }
-}
-
-static gboolean
-gst_a52dec_set_format (GstAudioDecoder * bdec, GstCaps * caps)
-{
-  GstA52Dec *a52dec = GST_A52DEC (bdec);
-  GstStructure *structure;
-
-  structure = gst_caps_get_structure (caps, 0);
-
-  if (structure && gst_structure_has_name (structure, "audio/x-private1-ac3"))
-    a52dec->dvdmode = TRUE;
-  else
-    a52dec->dvdmode = FALSE;
-
-  return TRUE;
-}
-
-static GstFlowReturn
-gst_a52dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
-{
-  GstA52Dec *a52dec = GST_A52DEC (parent);
-  GstFlowReturn ret = GST_FLOW_OK;
-  gint first_access;
-
-  if (a52dec->dvdmode) {
-    gsize size;
-    guint8 data[2];
-    gint offset;
-    gint len;
-    GstBuffer *subbuf;
-
-    size = gst_buffer_get_size (buf);
-    if (size < 2)
-      goto not_enough_data;
-
-    gst_buffer_extract (buf, 0, data, 2);
-    first_access = (data[0] << 8) | data[1];
-
-    /* Skip the first_access header */
-    offset = 2;
-
-    if (first_access > 1) {
-      /* Length of data before first_access */
-      len = first_access - 1;
-
-      if (len <= 0 || offset + len > size)
-        goto bad_first_access_parameter;
-
-      subbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, offset, len);
-      GST_BUFFER_TIMESTAMP (subbuf) = GST_CLOCK_TIME_NONE;
-      ret = a52dec->base_chain (pad, parent, subbuf);
-      if (ret != GST_FLOW_OK) {
-        gst_buffer_unref (buf);
-        goto done;
-      }
-
-      offset += len;
-      len = size - offset;
-
-      if (len > 0) {
-        subbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, offset, len);
-        GST_BUFFER_TIMESTAMP (subbuf) = GST_BUFFER_TIMESTAMP (buf);
-
-        ret = a52dec->base_chain (pad, parent, subbuf);
-      }
-      gst_buffer_unref (buf);
-    } else {
-      /* first_access = 0 or 1, so if there's a timestamp it applies to the first byte */
-      subbuf =
-          gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, offset,
-          size - offset);
-      GST_BUFFER_TIMESTAMP (subbuf) = GST_BUFFER_TIMESTAMP (buf);
-      gst_buffer_unref (buf);
-      ret = a52dec->base_chain (pad, parent, subbuf);
-    }
-  } else {
-    ret = a52dec->base_chain (pad, parent, buf);
-  }
-
-done:
-  return ret;
-
-/* ERRORS */
-not_enough_data:
-  {
-    GST_ELEMENT_ERROR (GST_ELEMENT (a52dec), STREAM, DECODE, (NULL),
-        ("Insufficient data in buffer. Can't determine first_acess"));
-    gst_buffer_unref (buf);
-    return GST_FLOW_ERROR;
-  }
-bad_first_access_parameter:
-  {
-    GST_ELEMENT_ERROR (GST_ELEMENT (a52dec), STREAM, DECODE, (NULL),
-        ("Bad first_access parameter (%d) in buffer", first_access));
-    gst_buffer_unref (buf);
-    return GST_FLOW_ERROR;
-  }
-}
-
-static void
-gst_a52dec_set_property (GObject * object, guint prop_id, const GValue * value,
-    GParamSpec * pspec)
-{
-  GstA52Dec *src = GST_A52DEC (object);
-
-  switch (prop_id) {
-    case ARG_DRC:
-      GST_OBJECT_LOCK (src);
-      src->dynamic_range_compression = g_value_get_boolean (value);
-      GST_OBJECT_UNLOCK (src);
-      break;
-    case ARG_MODE:
-      GST_OBJECT_LOCK (src);
-      src->request_channels &= ~A52_CHANNEL_MASK;
-      src->request_channels |= g_value_get_enum (value);
-      GST_OBJECT_UNLOCK (src);
-      break;
-    case ARG_LFE:
-      GST_OBJECT_LOCK (src);
-      src->request_channels &= ~A52_LFE;
-      src->request_channels |= g_value_get_boolean (value) ? A52_LFE : 0;
-      GST_OBJECT_UNLOCK (src);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_a52dec_get_property (GObject * object, guint prop_id, GValue * value,
-    GParamSpec * pspec)
-{
-  GstA52Dec *src = GST_A52DEC (object);
-
-  switch (prop_id) {
-    case ARG_DRC:
-      GST_OBJECT_LOCK (src);
-      g_value_set_boolean (value, src->dynamic_range_compression);
-      GST_OBJECT_UNLOCK (src);
-      break;
-    case ARG_MODE:
-      GST_OBJECT_LOCK (src);
-      g_value_set_enum (value, src->request_channels & A52_CHANNEL_MASK);
-      GST_OBJECT_UNLOCK (src);
-      break;
-    case ARG_LFE:
-      GST_OBJECT_LOCK (src);
-      g_value_set_boolean (value, src->request_channels & A52_LFE);
-      GST_OBJECT_UNLOCK (src);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static gboolean
-a52_element_init (GstPlugin * plugin)
-{
-#if HAVE_ORC
-  orc_init ();
-#endif
-
-  return gst_element_register (plugin, "a52dec", GST_RANK_SECONDARY,
-      GST_TYPE_A52DEC);
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  return GST_ELEMENT_REGISTER (a52dec, plugin);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    a52dec,
-    "Decodes ATSC A/52 encoded audio streams",
-    plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
diff --git a/ext/a52dec/gsta52dec.h b/ext/a52dec/gsta52dec.h
deleted file mode 100644 (file)
index c50450e..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/* GStreamer
- * Copyright (C) <2001> David I. Lehn <dlehn@users.sourceforge.net>
- *
- * 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_A52DEC_H__
-#define __GST_A52DEC_H__
-
-#include <gst/gst.h>
-#include <gst/audio/audio.h>
-#include <gst/audio/gstaudiodecoder.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_A52DEC \
-  (gst_a52dec_get_type())
-#define GST_A52DEC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_A52DEC,GstA52Dec))
-#define GST_A52DEC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_A52DEC,GstA52DecClass))
-#define GST_IS_A52DEC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_A52DEC))
-#define GST_IS_A52DEC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_A52DEC))
-
-typedef struct _GstA52Dec GstA52Dec;
-typedef struct _GstA52DecClass GstA52DecClass;
-
-struct _GstA52Dec {
-  GstAudioDecoder element;
-
-  GstPadChainFunction base_chain;
-
-  gboolean       dvdmode;
-  gboolean       flag_update;
-  int            prev_flags;
-
-  /* stream properties */
-  int            bit_rate;
-  int            sample_rate;
-  int            stream_channels;
-  int            request_channels;
-  int            using_channels;
-
-  gint           channel_reorder_map[6];
-
-  sample_t       level;
-  sample_t       bias;
-  gboolean       dynamic_range_compression;
-  sample_t      *samples;
-  a52_state_t   *state;
-};
-
-struct _GstA52DecClass {
-  GstAudioDecoderClass parent_class;
-
-  guint32 a52_cpuflags;
-};
-
-GType gst_a52dec_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (a52dec);
-
-#ifndef A52_MONO
-#define A52_MONO 1
-#endif
-#ifndef A52_STEREO
-#define A52_STEREO 2
-#endif
-#ifndef A52_3F
-#define A52_3F 3
-#endif
-#ifndef A52_2F1R
-#define A52_2F1R 4
-#endif
-#ifndef A52_3F1R
-#define A52_3F1R 5
-#endif
-#ifndef A52_2F2R
-#define A52_2F2R 6
-#endif
-#ifndef A52_3F2R
-#define A52_3F2R 7
-#endif
-#ifndef A52_DOLBY
-#define A52_DOLBY 10
-#endif
-
-G_END_DECLS
-
-#endif /* __GST_A52DEC_H__ */
diff --git a/ext/a52dec/meson.build b/ext/a52dec/meson.build
deleted file mode 100644 (file)
index 843bef0..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-if get_option('a52dec').disabled()
-  subdir_done()
-endif
-
-a52_dep = cc.find_library('a52', required : get_option('a52dec'))
-have_a52_h = cc.has_header_symbol('a52dec/a52.h', 'a52_init', prefix : '#include <stdint.h>')
-if not have_a52_h and get_option('a52dec').enabled()
-  error('a52dec plugin enabled but a52.h not found')
-endif
-
-if a52_dep.found() and have_a52_h
-  a52dec = library('gsta52dec',
-    'gsta52dec.c',
-    c_args : ugly_args,
-    include_directories : [configinc],
-    dependencies : [gstaudio_dep, orc_dep, a52_dep],
-    install : true,
-    install_dir : plugins_install_dir,
-  )
-  pkgconfig.generate(a52dec, install_dir : plugins_pkgconfig_install_dir)
-  plugins += [a52dec]
-endif
diff --git a/ext/amrnb/GstAmrnbEnc.prs b/ext/amrnb/GstAmrnbEnc.prs
deleted file mode 100644 (file)
index 69e3719..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-[_presets_]
-version=0.10
-element-name=GstAmrnbEnc
-
-[enhance-size]
-_meta/comment=Maximize compression, lowest bitrate
-band-mode=0
-
-[enhance-quality]
-_meta/comment=Maximize quality, highest bitrate
-band-mode=7
diff --git a/ext/amrnb/README b/ext/amrnb/README
deleted file mode 100644 (file)
index 879dbe7..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Compiling AMRNB:
-================
-
-To compile the amrnb plugin, you need the opencore-amrnb development package.
-If your distribution does not provide this package, you can download the 
-source code from "http://sourceforge.net/projects/opencore-amr".
diff --git a/ext/amrnb/amrnb.c b/ext/amrnb/amrnb.c
deleted file mode 100644 (file)
index 3fe3a00..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
- * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * 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 "amrnbdec.h"
-#include "amrnbenc.h"
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  gboolean ret = FALSE;
-
-  ret |= GST_ELEMENT_REGISTER (amrnbdec, plugin);
-  ret |= GST_ELEMENT_REGISTER (amrnbenc, plugin);
-
-  return ret;
-}
-
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    amrnb,
-    "Adaptive Multi-Rate Narrow-Band",
-    plugin_init, VERSION, GST_LICENSE_UNKNOWN, GST_PACKAGE_NAME,
-    GST_PACKAGE_ORIGIN);
diff --git a/ext/amrnb/amrnbdec.c b/ext/amrnb/amrnbdec.c
deleted file mode 100644 (file)
index e984fb8..0000000
+++ /dev/null
@@ -1,309 +0,0 @@
-/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
- * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-amrnbdec
- * @title: amrnbdec
- * @see_also: #GstAmrnbEnc, #GstAmrParse
- *
- * AMR narrowband decoder based on the
- * [opencore codec implementation](http://sourceforge.net/projects/opencore-amr).
- *
- * ## Example launch line
- * |[
- * gst-launch-1.0 filesrc location=abc.amr ! amrparse ! amrnbdec ! audioconvert ! audioresample ! autoaudiosink
- * ]|
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "amrnbdec.h"
-
-static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/AMR, " "rate = (int) 8000, " "channels = (int) 1")
-    );
-
-static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-raw, format = (string) " GST_AUDIO_NE (S16) ", "
-        "layout = (string) interleaved, "
-        "rate = (int) 8000," "channels = (int) 1")
-    );
-
-GST_DEBUG_CATEGORY_STATIC (gst_amrnbdec_debug);
-#define GST_CAT_DEFAULT gst_amrnbdec_debug
-
-static const gint block_size_if1[16] = { 12, 13, 15, 17, 19, 20, 26, 31, 5,
-  0, 0, 0, 0, 0, 0, 0
-};
-
-static const gint block_size_if2[16] = { 12, 13, 15, 17, 18, 20, 25, 30, 5,
-  0, 0, 0, 0, 0, 0, 0
-};
-
-static GType
-gst_amrnb_variant_get_type (void)
-{
-  static GType gst_amrnb_variant_type = 0;
-  static const GEnumValue gst_amrnb_variant[] = {
-    {GST_AMRNB_VARIANT_IF1, "IF1", "IF1"},
-    {GST_AMRNB_VARIANT_IF2, "IF2", "IF2"},
-    {0, NULL, NULL},
-  };
-  if (!gst_amrnb_variant_type) {
-    gst_amrnb_variant_type =
-        g_enum_register_static ("GstAmrnbVariant", gst_amrnb_variant);
-  }
-  return gst_amrnb_variant_type;
-}
-
-#define GST_AMRNB_VARIANT_TYPE (gst_amrnb_variant_get_type())
-
-#define VARIANT_DEFAULT GST_AMRNB_VARIANT_IF1
-enum
-{
-  PROP_0,
-  PROP_VARIANT
-};
-
-static void gst_amrnbdec_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-static void gst_amrnbdec_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
-
-static gboolean gst_amrnbdec_start (GstAudioDecoder * dec);
-static gboolean gst_amrnbdec_stop (GstAudioDecoder * dec);
-static gboolean gst_amrnbdec_set_format (GstAudioDecoder * dec, GstCaps * caps);
-static GstFlowReturn gst_amrnbdec_parse (GstAudioDecoder * dec,
-    GstAdapter * adapter, gint * offset, gint * length);
-static GstFlowReturn gst_amrnbdec_handle_frame (GstAudioDecoder * dec,
-    GstBuffer * buffer);
-
-#define gst_amrnbdec_parent_class parent_class
-G_DEFINE_TYPE (GstAmrnbDec, gst_amrnbdec, GST_TYPE_AUDIO_DECODER);
-GST_ELEMENT_REGISTER_DEFINE (amrnbdec, "amrnbdec", GST_RANK_PRIMARY,
-    GST_TYPE_AMRNBDEC);
-
-static void
-gst_amrnbdec_class_init (GstAmrnbDecClass * klass)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-  GstAudioDecoderClass *base_class = GST_AUDIO_DECODER_CLASS (klass);
-
-  object_class->set_property = gst_amrnbdec_set_property;
-  object_class->get_property = gst_amrnbdec_get_property;
-
-  gst_element_class_add_static_pad_template (element_class, &sink_template);
-  gst_element_class_add_static_pad_template (element_class, &src_template);
-
-  gst_element_class_set_static_metadata (element_class, "AMR-NB audio decoder",
-      "Codec/Decoder/Audio",
-      "Adaptive Multi-Rate Narrow-Band audio decoder",
-      "GStreamer maintainers <gstreamer-devel@lists.freedesktop.org>");
-
-  base_class->start = GST_DEBUG_FUNCPTR (gst_amrnbdec_start);
-  base_class->stop = GST_DEBUG_FUNCPTR (gst_amrnbdec_stop);
-  base_class->set_format = GST_DEBUG_FUNCPTR (gst_amrnbdec_set_format);
-  base_class->parse = GST_DEBUG_FUNCPTR (gst_amrnbdec_parse);
-  base_class->handle_frame = GST_DEBUG_FUNCPTR (gst_amrnbdec_handle_frame);
-
-  g_object_class_install_property (object_class, PROP_VARIANT,
-      g_param_spec_enum ("variant", "Variant",
-          "The decoder variant", GST_AMRNB_VARIANT_TYPE,
-          VARIANT_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
-
-  GST_DEBUG_CATEGORY_INIT (gst_amrnbdec_debug, "amrnbdec", 0,
-      "AMR-NB audio decoder");
-
-  gst_type_mark_as_plugin_api (GST_AMRNB_VARIANT_TYPE, 0);
-}
-
-static void
-gst_amrnbdec_init (GstAmrnbDec * amrnbdec)
-{
-  gst_audio_decoder_set_needs_format (GST_AUDIO_DECODER (amrnbdec), TRUE);
-  gst_audio_decoder_set_use_default_pad_acceptcaps (GST_AUDIO_DECODER_CAST
-      (amrnbdec), TRUE);
-  GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_DECODER_SINK_PAD (amrnbdec));
-}
-
-static gboolean
-gst_amrnbdec_start (GstAudioDecoder * dec)
-{
-  GstAmrnbDec *amrnbdec = GST_AMRNBDEC (dec);
-
-  GST_DEBUG_OBJECT (dec, "start");
-  if (!(amrnbdec->handle = Decoder_Interface_init ()))
-    return FALSE;
-
-  amrnbdec->rate = 0;
-  amrnbdec->channels = 0;
-
-  return TRUE;
-}
-
-static gboolean
-gst_amrnbdec_stop (GstAudioDecoder * dec)
-{
-  GstAmrnbDec *amrnbdec = GST_AMRNBDEC (dec);
-
-  GST_DEBUG_OBJECT (dec, "stop");
-  Decoder_Interface_exit (amrnbdec->handle);
-
-  return TRUE;
-}
-
-static void
-gst_amrnbdec_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstAmrnbDec *self = GST_AMRNBDEC (object);
-
-  switch (prop_id) {
-    case PROP_VARIANT:
-      self->variant = g_value_get_enum (value);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-  return;
-}
-
-static void
-gst_amrnbdec_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec)
-{
-  GstAmrnbDec *self = GST_AMRNBDEC (object);
-
-  switch (prop_id) {
-    case PROP_VARIANT:
-      g_value_set_enum (value, self->variant);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-  return;
-}
-
-static gboolean
-gst_amrnbdec_set_format (GstAudioDecoder * dec, GstCaps * caps)
-{
-  GstStructure *structure;
-  GstAmrnbDec *amrnbdec;
-  GstAudioInfo info;
-
-  amrnbdec = GST_AMRNBDEC (dec);
-
-  structure = gst_caps_get_structure (caps, 0);
-
-  /* get channel count */
-  gst_structure_get_int (structure, "channels", &amrnbdec->channels);
-  gst_structure_get_int (structure, "rate", &amrnbdec->rate);
-
-  /* create reverse caps */
-  gst_audio_info_init (&info);
-  gst_audio_info_set_format (&info,
-      GST_AUDIO_FORMAT_S16, amrnbdec->rate, amrnbdec->channels, NULL);
-
-  return gst_audio_decoder_set_output_format (dec, &info);
-}
-
-static GstFlowReturn
-gst_amrnbdec_parse (GstAudioDecoder * dec, GstAdapter * adapter,
-    gint * offset, gint * length)
-{
-  GstAmrnbDec *amrnbdec = GST_AMRNBDEC (dec);
-  guint8 head[1];
-  guint size;
-  gboolean sync, eos;
-  gint block, mode;
-
-  size = gst_adapter_available (adapter);
-  if (size < 1)
-    return GST_FLOW_ERROR;
-
-  gst_audio_decoder_get_parse_state (dec, &sync, &eos);
-
-  /* need to peek data to get the size */
-  gst_adapter_copy (adapter, head, 0, 1);
-
-  /* get size */
-  switch (amrnbdec->variant) {
-    case GST_AMRNB_VARIANT_IF1:
-      mode = (head[0] >> 3) & 0x0F;
-      block = block_size_if1[mode] + 1;
-      break;
-    case GST_AMRNB_VARIANT_IF2:
-      mode = head[0] & 0x0F;
-      block = block_size_if2[mode] + 1;
-      break;
-    default:
-      g_assert_not_reached ();
-      return GST_FLOW_ERROR;
-      break;
-  }
-
-  GST_DEBUG_OBJECT (amrnbdec, "mode %d, block %d", mode, block);
-
-  if (block > size)
-    return GST_FLOW_EOS;
-
-  *offset = 0;
-  *length = block;
-
-  return GST_FLOW_OK;
-}
-
-static GstFlowReturn
-gst_amrnbdec_handle_frame (GstAudioDecoder * dec, GstBuffer * buffer)
-{
-  GstAmrnbDec *amrnbdec;
-  GstMapInfo inmap, outmap;
-  GstBuffer *out;
-
-  amrnbdec = GST_AMRNBDEC (dec);
-
-  /* no fancy flushing */
-  if (!buffer || !gst_buffer_get_size (buffer))
-    return GST_FLOW_OK;
-
-  gst_buffer_map (buffer, &inmap, GST_MAP_READ);
-
-  /* get output */
-  out = gst_buffer_new_and_alloc (160 * 2);
-  /* decode */
-  gst_buffer_map (out, &outmap, GST_MAP_WRITE);
-  Decoder_Interface_Decode (amrnbdec->handle, inmap.data,
-      (gint16 *) outmap.data, 0);
-  gst_buffer_unmap (out, &outmap);
-
-  gst_buffer_unmap (buffer, &inmap);
-
-  return gst_audio_decoder_finish_frame (dec, out, 1);
-}
diff --git a/ext/amrnb/amrnbdec.h b/ext/amrnb/amrnbdec.h
deleted file mode 100644 (file)
index 25b3db2..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
- * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * 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_AMRNBDEC_H__
-#define __GST_AMRNBDEC_H__
-
-#include <gst/gst.h>
-#include <gst/audio/gstaudiodecoder.h>
-
-#include <opencore-amrnb/interf_dec.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_AMRNBDEC \
-  (gst_amrnbdec_get_type())
-#define GST_AMRNBDEC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_AMRNBDEC, GstAmrnbDec))
-#define GST_AMRNBDEC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_AMRNBDEC, GstAmrnbDecClass))
-#define GST_IS_AMRNBDEC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_AMRNBDEC))
-#define GST_IS_AMRNBDEC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_AMRNBDEC))
-
-typedef struct _GstAmrnbDec GstAmrnbDec;
-typedef struct _GstAmrnbDecClass GstAmrnbDecClass;
-
-typedef enum
-{
-  GST_AMRNB_VARIANT_IF1,
-  GST_AMRNB_VARIANT_IF2
-} GstAmrnbVariant;
-
-struct _GstAmrnbDec {
-  GstAudioDecoder element;
-
-  GstAmrnbVariant variant;
-
-  /* library handle */
-  void *handle;
-
-  /* output settings */
-  gint channels, rate;
-};
-
-struct _GstAmrnbDecClass {
-  GstAudioDecoderClass parent_class;
-};
-
-GType gst_amrnbdec_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (amrnbdec);
-
-G_END_DECLS
-
-#endif /* __GST_AMRNBDEC_H__ */
diff --git a/ext/amrnb/amrnbenc.c b/ext/amrnb/amrnbenc.c
deleted file mode 100644 (file)
index 8417326..0000000
+++ /dev/null
@@ -1,295 +0,0 @@
-/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
- * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-amrnbenc
- * @title: amrnbenc
- * @see_also: #GstAmrnbDec, #GstAmrnbParse
- *
- * AMR narrowband encoder based on the
- * [opencore codec implementation](http://sourceforge.net/projects/opencore-amr).
- *
- * ## Example launch line
- * |[
- * gst-launch-1.0 filesrc location=abc.wav ! wavparse ! audioconvert ! audioresample ! amrnbenc ! filesink location=abc.amr
- * ]|
- * Please note that the above stream misses the header, that is needed to play
- * the stream.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "amrnbenc.h"
-
-static GType
-gst_amrnbenc_bandmode_get_type (void)
-{
-  static GType gst_amrnbenc_bandmode_type = 0;
-  static const GEnumValue gst_amrnbenc_bandmode[] = {
-    {MR475, "MR475", "MR475"},
-    {MR515, "MR515", "MR515"},
-    {MR59, "MR59", "MR59"},
-    {MR67, "MR67", "MR67"},
-    {MR74, "MR74", "MR74"},
-    {MR795, "MR795", "MR795"},
-    {MR102, "MR102", "MR102"},
-    {MR122, "MR122", "MR122"},
-    {MRDTX, "MRDTX", "MRDTX"},
-    {0, NULL, NULL},
-  };
-  if (!gst_amrnbenc_bandmode_type) {
-    gst_amrnbenc_bandmode_type =
-        g_enum_register_static ("GstAmrnbEncBandMode", gst_amrnbenc_bandmode);
-  }
-  return gst_amrnbenc_bandmode_type;
-}
-
-#define GST_AMRNBENC_BANDMODE_TYPE (gst_amrnbenc_bandmode_get_type())
-
-#define BANDMODE_DEFAULT MR122
-enum
-{
-  PROP_0,
-  PROP_BANDMODE
-};
-
-static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-raw, format = (string) " GST_AUDIO_NE (S16) ", "
-        "layout = (string) interleaved, "
-        "rate = (int) 8000," "channels = (int) 1")
-    );
-
-static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/AMR, " "rate = (int) 8000, " "channels = (int) 1")
-    );
-
-GST_DEBUG_CATEGORY_STATIC (gst_amrnbenc_debug);
-#define GST_CAT_DEFAULT gst_amrnbenc_debug
-
-static gboolean gst_amrnbenc_start (GstAudioEncoder * enc);
-static gboolean gst_amrnbenc_stop (GstAudioEncoder * enc);
-static gboolean gst_amrnbenc_set_format (GstAudioEncoder * enc,
-    GstAudioInfo * info);
-static GstFlowReturn gst_amrnbenc_handle_frame (GstAudioEncoder * enc,
-    GstBuffer * in_buf);
-
-#define gst_amrnbenc_parent_class parent_class
-G_DEFINE_TYPE (GstAmrnbEnc, gst_amrnbenc, GST_TYPE_AUDIO_ENCODER);
-GST_ELEMENT_REGISTER_DEFINE (amrnbenc, "amrnbenc", GST_RANK_SECONDARY,
-    GST_TYPE_AMRNBENC);
-
-static void
-gst_amrnbenc_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstAmrnbEnc *self = GST_AMRNBENC (object);
-
-  switch (prop_id) {
-    case PROP_BANDMODE:
-      self->bandmode = g_value_get_enum (value);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-  return;
-}
-
-static void
-gst_amrnbenc_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec)
-{
-  GstAmrnbEnc *self = GST_AMRNBENC (object);
-
-  switch (prop_id) {
-    case PROP_BANDMODE:
-      g_value_set_enum (value, self->bandmode);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-  return;
-}
-
-static void
-gst_amrnbenc_class_init (GstAmrnbEncClass * klass)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-  GstAudioEncoderClass *base_class = GST_AUDIO_ENCODER_CLASS (klass);
-
-  object_class->set_property = gst_amrnbenc_set_property;
-  object_class->get_property = gst_amrnbenc_get_property;
-
-  base_class->start = GST_DEBUG_FUNCPTR (gst_amrnbenc_start);
-  base_class->stop = GST_DEBUG_FUNCPTR (gst_amrnbenc_stop);
-  base_class->set_format = GST_DEBUG_FUNCPTR (gst_amrnbenc_set_format);
-  base_class->handle_frame = GST_DEBUG_FUNCPTR (gst_amrnbenc_handle_frame);
-
-  g_object_class_install_property (object_class, PROP_BANDMODE,
-      g_param_spec_enum ("band-mode", "Band Mode",
-          "Encoding Band Mode (Kbps)", GST_AMRNBENC_BANDMODE_TYPE,
-          BANDMODE_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
-
-  gst_element_class_add_static_pad_template (element_class, &sink_template);
-  gst_element_class_add_static_pad_template (element_class, &src_template);
-
-  gst_element_class_set_static_metadata (element_class, "AMR-NB audio encoder",
-      "Codec/Encoder/Audio",
-      "Adaptive Multi-Rate Narrow-Band audio encoder",
-      "Wim Taymans <wim.taymans@gmail.com>");
-
-  GST_DEBUG_CATEGORY_INIT (gst_amrnbenc_debug, "amrnbenc", 0,
-      "AMR-NB audio encoder");
-
-  gst_type_mark_as_plugin_api (GST_AMRNBENC_BANDMODE_TYPE, 0);
-}
-
-static void
-gst_amrnbenc_init (GstAmrnbEnc * amrnbenc)
-{
-  GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_ENCODER_SINK_PAD (amrnbenc));
-}
-
-static gboolean
-gst_amrnbenc_start (GstAudioEncoder * enc)
-{
-  GstAmrnbEnc *amrnbenc = GST_AMRNBENC (enc);
-
-  GST_DEBUG_OBJECT (amrnbenc, "start");
-
-  if (!(amrnbenc->handle = Encoder_Interface_init (0)))
-    return FALSE;
-
-  return TRUE;
-}
-
-static gboolean
-gst_amrnbenc_stop (GstAudioEncoder * enc)
-{
-  GstAmrnbEnc *amrnbenc = GST_AMRNBENC (enc);
-
-  GST_DEBUG_OBJECT (amrnbenc, "stop");
-
-  Encoder_Interface_exit (amrnbenc->handle);
-
-  return TRUE;
-}
-
-static gboolean
-gst_amrnbenc_set_format (GstAudioEncoder * enc, GstAudioInfo * info)
-{
-  GstAmrnbEnc *amrnbenc;
-  GstCaps *copy;
-
-  amrnbenc = GST_AMRNBENC (enc);
-
-  /* parameters already parsed for us */
-  amrnbenc->rate = GST_AUDIO_INFO_RATE (info);
-  amrnbenc->channels = GST_AUDIO_INFO_CHANNELS (info);
-
-  /* we do not really accept other input, but anyway ... */
-  /* this is not wrong but will sound bad */
-  if (amrnbenc->channels != 1) {
-    g_warning ("amrnbdec is only optimized for mono channels");
-  }
-  if (amrnbenc->rate != 8000) {
-    g_warning ("amrnbdec is only optimized for 8000 Hz samplerate");
-  }
-
-  /* create reverse caps */
-  copy = gst_caps_new_simple ("audio/AMR",
-      "channels", G_TYPE_INT, amrnbenc->channels,
-      "rate", G_TYPE_INT, amrnbenc->rate, NULL);
-
-  gst_audio_encoder_set_output_format (GST_AUDIO_ENCODER (amrnbenc), copy);
-  gst_caps_unref (copy);
-
-  /* report needs to base class: hand one frame at a time */
-  gst_audio_encoder_set_frame_samples_min (enc, 160);
-  gst_audio_encoder_set_frame_samples_max (enc, 160);
-  gst_audio_encoder_set_frame_max (enc, 1);
-
-  return TRUE;
-}
-
-static GstFlowReturn
-gst_amrnbenc_handle_frame (GstAudioEncoder * enc, GstBuffer * buffer)
-{
-  GstAmrnbEnc *amrnbenc;
-  GstFlowReturn ret;
-  GstBuffer *out;
-  GstMapInfo in_map, out_map;
-  gsize out_size;
-
-  amrnbenc = GST_AMRNBENC (enc);
-
-  g_return_val_if_fail (amrnbenc->handle, GST_FLOW_FLUSHING);
-
-  /* we don't deal with squeezing remnants, so simply discard those */
-  if (G_UNLIKELY (buffer == NULL)) {
-    GST_DEBUG_OBJECT (amrnbenc, "no data");
-    return GST_FLOW_OK;
-  }
-
-  gst_buffer_map (buffer, &in_map, GST_MAP_READ);
-
-  if (G_UNLIKELY (in_map.size < 320)) {
-    gst_buffer_unmap (buffer, &in_map);
-    GST_DEBUG_OBJECT (amrnbenc, "discarding trailing data of %" G_GSIZE_FORMAT
-        " bytes", in_map.size);
-    return gst_audio_encoder_finish_frame (enc, NULL, -1);
-  }
-
-  /* get output, max size is 32 */
-  out = gst_buffer_new_and_alloc (32);
-  /* AMR encoder actually writes into the source data buffers it gets */
-  /* should be able to handle that with what we are given */
-
-  gst_buffer_map (out, &out_map, GST_MAP_WRITE);
-  /* encode */
-  out_size =
-      Encoder_Interface_Encode (amrnbenc->handle, amrnbenc->bandmode,
-      (short *) in_map.data, out_map.data, 0);
-  gst_buffer_unmap (out, &out_map);
-  gst_buffer_resize (out, 0, out_size);
-  gst_buffer_unmap (buffer, &in_map);
-
-  GST_LOG_OBJECT (amrnbenc, "output data size %" G_GSIZE_FORMAT, out_size);
-
-  if (out_size) {
-    ret = gst_audio_encoder_finish_frame (enc, out, 160);
-  } else {
-    /* should not happen (without dtx or so at least) */
-    GST_WARNING_OBJECT (amrnbenc, "no encoded data; discarding input");
-    gst_buffer_unref (out);
-    ret = gst_audio_encoder_finish_frame (enc, NULL, -1);
-  }
-
-  return ret;
-}
diff --git a/ext/amrnb/amrnbenc.h b/ext/amrnb/amrnbenc.h
deleted file mode 100644 (file)
index 83262e4..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
- * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * 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_AMRNBENC_H__
-#define __GST_AMRNBENC_H__
-
-#include <gst/gst.h>
-#include <gst/audio/gstaudioencoder.h>
-
-#include <opencore-amrnb/interf_enc.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_AMRNBENC \
-  (gst_amrnbenc_get_type())
-#define GST_AMRNBENC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_AMRNBENC, GstAmrnbEnc))
-#define GST_AMRNBENC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_AMRNBENC, GstAmrnbEncClass))
-#define GST_IS_AMRNBENC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_AMRNBENC))
-#define GST_IS_AMRNBENC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_AMRNBENC))
-
-typedef struct _GstAmrnbEnc GstAmrnbEnc;
-typedef struct _GstAmrnbEncClass GstAmrnbEncClass;
-
-struct _GstAmrnbEnc {
-  GstAudioEncoder element;
-
-  /* library handle */
-  void *handle;
-
-  /* input settings */
-  gint channels, rate;
-  gint duration;
-
-  /* property */
-  enum Mode bandmode;
-};
-
-struct _GstAmrnbEncClass {
-  GstAudioEncoderClass parent_class;
-};
-
-GType gst_amrnbenc_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (amrnbenc);
-
-G_END_DECLS
-
-#endif /* __GST_AMRNBENC_H__ */
diff --git a/ext/amrnb/meson.build b/ext/amrnb/meson.build
deleted file mode 100644 (file)
index fcddb58..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-amrnb_dep = dependency('opencore-amrnb', version : '>= 0.1.3', required : get_option('amrnb'))
-
-if amrnb_dep.found()
-  amrnb = library('gstamrnb',
-    ['amrnb.c', 'amrnbdec.c', 'amrnbenc.c'],
-    c_args : ugly_args,
-    include_directories : [configinc],
-    dependencies : [gstaudio_dep, amrnb_dep],
-    install : true,
-    install_dir : plugins_install_dir,
-  )
-  pkgconfig.generate(amrnb, install_dir : plugins_pkgconfig_install_dir)
-  plugins += [amrnb]
-  install_data(sources: 'GstAmrnbEnc.prs', install_dir: presetdir)
-endif
diff --git a/ext/amrwbdec/README b/ext/amrwbdec/README
deleted file mode 100644 (file)
index 835adef..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Compiling AMRWB decoder:
-========================
-
-To compile the amrwbdec plugin, you need the opencore-amrwb development
-package. If your distribution does not provide this package, you can
-download the source code from "http://sourceforge.net/projects/opencore-amr".
diff --git a/ext/amrwbdec/amrwb.c b/ext/amrwbdec/amrwb.c
deleted file mode 100644 (file)
index e3a028e..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* GStreamer Adaptive Multi-Rate Wide-Band (AMR-WB) Decoder plugin
- * Copyright (C) 2006 Edgard Lima <edgard.lima@gmail.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 "amrwbdec.h"
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  return GST_ELEMENT_REGISTER (amrwbdec, plugin);
-}
-
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    amrwbdec,
-    "Adaptive Multi-Rate Wide-Band Decoder",
-    plugin_init, VERSION, GST_LICENSE_UNKNOWN, GST_PACKAGE_NAME,
-    GST_PACKAGE_ORIGIN);
diff --git a/ext/amrwbdec/amrwbdec.c b/ext/amrwbdec/amrwbdec.c
deleted file mode 100644 (file)
index 3d84f64..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
- * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-amrwbdec
- * @title: amrwbdec
- * @see_also: #GstAmrwbEnc
- *
- * AMR wideband decoder based on the
- * [opencore codec implementation](http://sourceforge.net/projects/opencore-amr).
- *
- * ## Example launch line
- * |[
- * gst-launch-1.0 filesrc location=abc.amr ! amrparse ! amrwbdec ! audioconvert ! audioresample ! autoaudiosink
- * ]|
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/audio/audio.h>
-
-#include "amrwbdec.h"
-
-static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/AMR-WB, "
-        "rate = (int) 16000, " "channels = (int) 1")
-    );
-
-static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-raw, "
-        "format = (string) " GST_AUDIO_NE (S16) ", "
-        "layout = (string) interleaved, "
-        "rate = (int) 16000, " "channels = (int) 1")
-    );
-
-GST_DEBUG_CATEGORY_STATIC (gst_amrwbdec_debug);
-#define GST_CAT_DEFAULT gst_amrwbdec_debug
-
-#define L_FRAME16k      320     /* Frame size at 16kHz  */
-
-static const unsigned char block_size[16] =
-    { 18, 24, 33, 37, 41, 47, 51, 59, 61,
-  6, 0, 0, 0, 0, 1, 1
-};
-
-static gboolean gst_amrwbdec_start (GstAudioDecoder * dec);
-static gboolean gst_amrwbdec_stop (GstAudioDecoder * dec);
-static gboolean gst_amrwbdec_set_format (GstAudioDecoder * dec, GstCaps * caps);
-static GstFlowReturn gst_amrwbdec_parse (GstAudioDecoder * dec,
-    GstAdapter * adapter, gint * offset, gint * length);
-static GstFlowReturn gst_amrwbdec_handle_frame (GstAudioDecoder * dec,
-    GstBuffer * buffer);
-
-#define gst_amrwbdec_parent_class parent_class
-G_DEFINE_TYPE (GstAmrwbDec, gst_amrwbdec, GST_TYPE_AUDIO_DECODER);
-GST_ELEMENT_REGISTER_DEFINE (amrwbdec, "amrwbdec",
-    GST_RANK_PRIMARY, GST_TYPE_AMRWBDEC);
-
-static void
-gst_amrwbdec_class_init (GstAmrwbDecClass * klass)
-{
-  GstAudioDecoderClass *base_class = GST_AUDIO_DECODER_CLASS (klass);
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_add_static_pad_template (element_class, &sink_template);
-  gst_element_class_add_static_pad_template (element_class, &src_template);
-
-  gst_element_class_set_static_metadata (element_class, "AMR-WB audio decoder",
-      "Codec/Decoder/Audio",
-      "Adaptive Multi-Rate Wideband audio decoder",
-      "Renato Araujo <renato.filho@indt.org.br>");
-
-  base_class->start = GST_DEBUG_FUNCPTR (gst_amrwbdec_start);
-  base_class->stop = GST_DEBUG_FUNCPTR (gst_amrwbdec_stop);
-  base_class->set_format = GST_DEBUG_FUNCPTR (gst_amrwbdec_set_format);
-  base_class->parse = GST_DEBUG_FUNCPTR (gst_amrwbdec_parse);
-  base_class->handle_frame = GST_DEBUG_FUNCPTR (gst_amrwbdec_handle_frame);
-
-  GST_DEBUG_CATEGORY_INIT (gst_amrwbdec_debug, "amrwbdec", 0,
-      "AMR-WB audio decoder");
-}
-
-static void
-gst_amrwbdec_init (GstAmrwbDec * amrwbdec)
-{
-  gst_audio_decoder_set_needs_format (GST_AUDIO_DECODER (amrwbdec), TRUE);
-  gst_audio_decoder_set_use_default_pad_acceptcaps (GST_AUDIO_DECODER_CAST
-      (amrwbdec), TRUE);
-  GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_DECODER_SINK_PAD (amrwbdec));
-}
-
-static gboolean
-gst_amrwbdec_start (GstAudioDecoder * dec)
-{
-  GstAmrwbDec *amrwbdec = GST_AMRWBDEC (dec);
-
-  GST_DEBUG_OBJECT (dec, "start");
-  if (!(amrwbdec->handle = D_IF_init ()))
-    return FALSE;
-
-  amrwbdec->rate = 0;
-  amrwbdec->channels = 0;
-
-  return TRUE;
-}
-
-static gboolean
-gst_amrwbdec_stop (GstAudioDecoder * dec)
-{
-  GstAmrwbDec *amrwbdec = GST_AMRWBDEC (dec);
-
-  GST_DEBUG_OBJECT (dec, "stop");
-  D_IF_exit (amrwbdec->handle);
-
-  return TRUE;
-}
-
-static gboolean
-gst_amrwbdec_set_format (GstAudioDecoder * dec, GstCaps * caps)
-{
-  GstStructure *structure;
-  GstAmrwbDec *amrwbdec;
-  GstAudioInfo info;
-
-  amrwbdec = GST_AMRWBDEC (dec);
-
-  structure = gst_caps_get_structure (caps, 0);
-
-  /* get channel count */
-  gst_structure_get_int (structure, "channels", &amrwbdec->channels);
-  gst_structure_get_int (structure, "rate", &amrwbdec->rate);
-
-  /* create reverse caps */
-  gst_audio_info_init (&info);
-  gst_audio_info_set_format (&info,
-      GST_AUDIO_FORMAT_S16, amrwbdec->rate, amrwbdec->channels, NULL);
-
-  gst_audio_decoder_set_output_format (dec, &info);
-
-  return TRUE;
-}
-
-static GstFlowReturn
-gst_amrwbdec_parse (GstAudioDecoder * dec, GstAdapter * adapter,
-    gint * offset, gint * length)
-{
-  GstAmrwbDec *amrwbdec = GST_AMRWBDEC (dec);
-  guint8 header[1];
-  guint size;
-  gboolean sync, eos;
-  gint block, mode;
-
-  size = gst_adapter_available (adapter);
-  if (size < 1)
-    return GST_FLOW_ERROR;
-
-  gst_audio_decoder_get_parse_state (dec, &sync, &eos);
-
-  /* need to peek data to get the size */
-  gst_adapter_copy (adapter, header, 0, 1);
-  mode = (header[0] >> 3) & 0x0F;
-  block = block_size[mode];
-
-  GST_DEBUG_OBJECT (amrwbdec, "mode %d, block %d", mode, block);
-
-  if (block) {
-    if (block > size)
-      return GST_FLOW_EOS;
-    *offset = 0;
-    *length = block;
-  } else {
-    /* no frame yet, skip one byte */
-    GST_LOG_OBJECT (amrwbdec, "skipping byte");
-    *offset = 1;
-    return GST_FLOW_EOS;
-  }
-
-  return GST_FLOW_OK;
-}
-
-static GstFlowReturn
-gst_amrwbdec_handle_frame (GstAudioDecoder * dec, GstBuffer * buffer)
-{
-  GstAmrwbDec *amrwbdec;
-  GstBuffer *out;
-  GstMapInfo inmap, outmap;
-
-  amrwbdec = GST_AMRWBDEC (dec);
-
-  /* no fancy flushing */
-  if (!buffer || !gst_buffer_get_size (buffer))
-    return GST_FLOW_OK;
-
-  /* the library seems to write into the source data, hence the copy. */
-  /* should be no problem */
-  gst_buffer_map (buffer, &inmap, GST_MAP_READ);
-
-  /* get output */
-  out = gst_buffer_new_and_alloc (sizeof (gint16) * L_FRAME16k);
-  gst_buffer_map (out, &outmap, GST_MAP_WRITE);
-
-  /* decode */
-  D_IF_decode (amrwbdec->handle, (unsigned char *) inmap.data,
-      (short int *) outmap.data, _good_frame);
-
-  gst_buffer_unmap (out, &outmap);
-  gst_buffer_unmap (buffer, &inmap);
-
-  /* send out */
-  return gst_audio_decoder_finish_frame (dec, out, 1);
-}
diff --git a/ext/amrwbdec/amrwbdec.h b/ext/amrwbdec/amrwbdec.h
deleted file mode 100644 (file)
index 601b943..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/* GStreamer Adaptive Multi-Rate Wide-Band (AMR-WB) plugin
- * Copyright (C) 2006 Edgard Lima <edgard.lima@gmail.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_AMRWBDEC_H__
-#define __GST_AMRWBDEC_H__
-
-#include <gst/gst.h>
-#include <gst/audio/gstaudiodecoder.h>
-
-#include <opencore-amrwb/dec_if.h>
-#include <opencore-amrwb/if_rom.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_AMRWBDEC                      \
-  (gst_amrwbdec_get_type())
-#define GST_AMRWBDEC(obj)                                              \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_AMRWBDEC, GstAmrwbDec))
-#define GST_AMRWBDEC_CLASS(klass)                                      \
-  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_AMRWBDEC, GstAmrwbDecClass))
-#define GST_IS_AMRWBDEC(obj)                                   \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_AMRWBDEC))
-#define GST_IS_AMRWBDEC_CLASS(klass)                   \
-  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_AMRWBDEC))
-
-typedef struct _GstAmrwbDec GstAmrwbDec;
-typedef struct _GstAmrwbDecClass GstAmrwbDecClass;
-
-/**
- * GstAmrwbDec:
- *
- * Opaque data structure.
- */
-struct _GstAmrwbDec {
-  GstAudioDecoder element;
-
-  /* library handle */
-  void *handle;
-
-  /* output settings */
-  gint channels, rate;
-};
-
-struct _GstAmrwbDecClass {
-  GstAudioDecoderClass parent_class;
-};
-
-GType gst_amrwbdec_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (amrwbdec);
-
-G_END_DECLS
-
-#endif /* __GST_AMRWBDEC_H__ */
diff --git a/ext/amrwbdec/meson.build b/ext/amrwbdec/meson.build
deleted file mode 100644 (file)
index 734c371..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-amrwb_dep = dependency('opencore-amrwb', version : '>= 0.1.3', required : get_option('amrwbdec'))
-
-if amrwb_dep.found()
-  amrwbdec = library('gstamrwbdec',
-    ['amrwb.c', 'amrwbdec.c'],
-    c_args : ugly_args,
-    include_directories : [configinc],
-    dependencies : [gstaudio_dep, amrwb_dep],
-    install : true,
-    install_dir : plugins_install_dir,
-  )
-  pkgconfig.generate(amrwbdec, install_dir : plugins_pkgconfig_install_dir)
-  plugins += [amrwbdec]
-endif
diff --git a/ext/cdio/gstcdio.c b/ext/cdio/gstcdio.c
deleted file mode 100644 (file)
index f091f5b..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-/* GStreamer
- * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <gst/tag/tag.h>
-
-GST_DEBUG_CATEGORY_EXTERN (gst_cdio_debug);
-#define GST_CAT_DEFAULT gst_cdio_debug
-
-static gboolean plugin_init (GstPlugin * plugin);
-
-/* cdio headers redefine VERSION etc., so do this here before including them */
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    cdio,
-    "Read audio from audio CDs",
-    plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
-
-#include "gstcdio.h"
-#include "gstcdiocddasrc.h"
-
-void
-gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext, track_t track,
-    cdtext_field_t field, const gchar * gst_tag, GstTagList ** p_tags)
-{
-  const gchar *vars[] = { "GST_CDTEXT_TAG_ENCODING", "GST_TAG_ENCODING", NULL };
-  const gchar *txt;
-  gchar *txt_utf8;
-
-#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
-  txt = cdtext_get_const (cdtext, field, track);
-#else
-  txt = cdtext_get_const (field, cdtext);
-#endif
-  if (txt == NULL || *txt == '\0') {
-    GST_DEBUG_OBJECT (src, "empty CD-TEXT field %u (%s)", field, gst_tag);
-    return;
-  }
-
-  /* The character encoding is not specified, and there is no provision
-   * for indicating in the CD-Text data which encoding is in use.. */
-  txt_utf8 = gst_tag_freeform_string_to_utf8 (txt, -1, vars);
-
-  if (txt_utf8 == NULL) {
-    GST_WARNING_OBJECT (src, "CD-TEXT %s could not be converted to UTF-8, "
-        "try setting the GST_CDTEXT_TAG_ENCODING or GST_TAG_ENCODING "
-        "environment variable", gst_tag);
-    return;
-  }
-
-  /* FIXME: beautify strings (they might be all uppercase for example)? */
-
-  if (*p_tags == NULL)
-    *p_tags = gst_tag_list_new_empty ();
-
-  gst_tag_list_add (*p_tags, GST_TAG_MERGE_REPLACE, gst_tag, txt_utf8, NULL);
-
-  GST_DEBUG_OBJECT (src, "CD-TEXT: %s = %s", gst_tag, txt_utf8);
-  g_free (txt_utf8);
-}
-
-GstTagList *
-#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
-gst_cdio_get_cdtext (GstObject * src, cdtext_t * t, track_t track)
-{
-  GstTagList *tags = NULL;
-
-#else
-gst_cdio_get_cdtext (GstObject * src, CdIo * cdio, track_t track)
-{
-  GstTagList *tags = NULL;
-  cdtext_t *t;
-
-  t = cdio_get_cdtext (cdio, track);
-  if (t == NULL) {
-    GST_DEBUG_OBJECT (src, "no CD-TEXT for track %u", track);
-    return NULL;
-  }
-#endif
-
-  gst_cdio_add_cdtext_field (src, t, track, CDTEXT_FIELD_PERFORMER,
-      GST_TAG_ARTIST, &tags);
-  gst_cdio_add_cdtext_field (src, t, track, CDTEXT_FIELD_TITLE, GST_TAG_TITLE,
-      &tags);
-
-  return tags;
-}
-
-void
-#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
-gst_cdio_add_cdtext_album_tags (GstObject * src, cdtext_t * t,
-    GstTagList * tags)
-{
-#else
-gst_cdio_add_cdtext_album_tags (GstObject * src, CdIo * cdio, GstTagList * tags)
-{
-  cdtext_t *t;
-
-  t = cdio_get_cdtext (cdio, 0);
-  if (t == NULL) {
-    GST_DEBUG_OBJECT (src, "no CD-TEXT for album");
-    return;
-  }
-#endif
-
-  gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_PERFORMER,
-      GST_TAG_ALBUM_ARTIST, &tags);
-  gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_TITLE, GST_TAG_ALBUM,
-      &tags);
-  gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_GENRE, GST_TAG_GENRE,
-      &tags);
-  GST_DEBUG ("CD-TEXT album tags: %" GST_PTR_FORMAT, tags);
-}
-
-void
-gst_cdio_log_handler (cdio_log_level_t level, const char *msg)
-{
-  const gchar *level_str[] = { "DEBUG", "INFO", "WARN", "ERROR", "ASSERT" };
-  const gchar *s;
-
-  s = level_str[CLAMP (level, 1, G_N_ELEMENTS (level_str)) - 1];
-  GST_DEBUG ("CDIO-%s: %s", s, GST_STR_NULL (msg));
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  return GST_ELEMENT_REGISTER (cdiocddasrc, plugin);
-}
diff --git a/ext/cdio/gstcdio.h b/ext/cdio/gstcdio.h
deleted file mode 100644 (file)
index 8571d27..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/* GStreamer
- * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
- *
- * 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_CDIO_H__
-#define __GST_CDIO_H__
-
-#include <gst/gst.h>
-#include <cdio/cdio.h>
-#include <cdio/cdtext.h>
-#include <cdio/logging.h>
-
-#if LIBCDIO_VERSION_NUM <= 83 && LIBCDIO_VERSION_NUM >= 76
-  #define CDTEXT_FIELD_PERFORMER CDTEXT_PERFORMER
-  #define CDTEXT_FIELD_GENRE     CDTEXT_GENRE
-  #define CDTEXT_FIELD_TITLE     CDTEXT_TITLE
-#endif
-
-
-void     gst_cdio_add_cdtext_field (GstObject      * src,
-                                    cdtext_t       * cdtext,
-                                    track_t          track,
-                                    cdtext_field_t   field,
-                                    const gchar    * gst_tag,
-                                    GstTagList    ** p_tags);
-
-GstTagList  * gst_cdio_get_cdtext  (GstObject      * src,
-#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
-                                    cdtext_t       * t,
-#else
-                                    CdIo           * cdio,
-#endif
-                                    track_t          track);
-
-void      gst_cdio_add_cdtext_album_tags (GstObject  * src,
-#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
-                                          cdtext_t   * t,
-#else
-                                          CdIo       * cdio,
-#endif
-                                          GstTagList * tags);
-void gst_cdio_log_handler (cdio_log_level_t level, const char *msg);
-
-#endif /* __GST_CDIO_H__ */
-
diff --git a/ext/cdio/gstcdiocddasrc.c b/ext/cdio/gstcdiocddasrc.c
deleted file mode 100644 (file)
index 15b044c..0000000
+++ /dev/null
@@ -1,518 +0,0 @@
-/* GStreamer
- * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-cdiocddasrc
- * @title: cdiocddasrc
- * @see_also: GstCdParanoiaSrc, GstAudioCdSrc
- *
- * cdiocddasrc reads and extracts raw audio from Audio CDs. It can operate
- * in one of two modes:
- *
- *  * treat each track as a separate stream, counting time from the start
- *    of the track to the end of the track and posting EOS at the end of
- *    a track, or
- *  * treat the entire disc as one stream, counting time from the start of
- *    the first track to the end of the last track, posting EOS only at
- *    the end of the last track.
- *
- * With a recent-enough version of libcdio, the element will extract
- * CD-TEXT if this is supported by the CD-drive and CD-TEXT information
- * is available on the CD. The information will be posted on the bus in
- * form of a tag message.
- *
- * When opened, the element will also calculate a CDDB disc ID and a
- * MusicBrainz disc ID, which applications can use to query online
- * databases for artist/title information. These disc IDs will also be
- * posted on the bus as part of the tag messages.
- *
- * cdiocddasrc supports the GstUriHandler interface, so applications can use
- * playbin with cdda://&lt;track-number&gt; URIs for playback (they will have
- * to connect to playbin's notify::source signal and set the device on the
- * cd source in the notify callback if they want to set the device property).
- * Applications should use seeks in "track" format to switch between different
- * tracks of the same CD (passing a new cdda:// URI to playbin involves opening
- * and closing the CD device, which is much slower).
- *
- * ## Example launch line
- *
- * |[
- * gst-launch-1.0 cdiocddasrc track=5 device=/dev/cdrom ! audioconvert ! vorbisenc ! oggmux ! filesink location=track5.ogg
- * ]|
- * This pipeline extracts track 5 of the audio CD and encodes it into an
- * Ogg/Vorbis file.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gstcdio.h"
-#include "gstcdiocddasrc.h"
-
-#include <gst/gst.h>
-#include "gst/gst-i18n-plugin.h"
-
-#include <sys/types.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#define SAMPLES_PER_SECTOR (CDIO_CD_FRAMESIZE_RAW / sizeof (gint16))
-
-#define DEFAULT_READ_SPEED   -1
-
-enum
-{
-  PROP_0 = 0,
-  PROP_READ_SPEED
-};
-
-GST_DEBUG_CATEGORY (gst_cdio_debug);
-
-
-G_DEFINE_TYPE (GstCdioCddaSrc, gst_cdio_cdda_src, GST_TYPE_AUDIO_CD_SRC);
-#define _do_init \
-    GST_DEBUG_CATEGORY_INIT (gst_cdio_debug, "cdio", 0, "libcdio elements"); \
-    cdio_log_set_handler (gst_cdio_log_handler);
-GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (cdiocddasrc, "cdiocddasrc",
-    GST_RANK_SECONDARY - 1, GST_TYPE_CDIO_CDDA_SRC, _do_init);
-
-static void gst_cdio_cdda_src_finalize (GObject * obj);
-static void gst_cdio_cdda_src_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-static void gst_cdio_cdda_src_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
-static GstBuffer *gst_cdio_cdda_src_read_sector (GstAudioCdSrc * src,
-    gint sector);
-static gboolean gst_cdio_cdda_src_open (GstAudioCdSrc * src,
-    const gchar * device);
-static void gst_cdio_cdda_src_close (GstAudioCdSrc * src);
-
-#if 0
-static gchar *
-gst_cdio_cdda_src_get_default_device (GstAudioCdSrc * audiocdsrc)
-{
-  GstCdioCddaSrc *src;
-  gchar *default_device, *ret;
-
-  src = GST_CDIO_CDDA_SRC (audiocdsrc);
-
-  /* src->cdio may be NULL here */
-  default_device = cdio_get_default_device (src->cdio);
-
-  ret = g_strdup (default_device);
-  free (default_device);
-
-  GST_LOG_OBJECT (src, "returning default device: %s", GST_STR_NULL (ret));
-
-  return ret;
-}
-
-static gchar **
-gst_cdio_cdda_src_probe_devices (GstAudioCdSrc * audiocdsrc)
-{
-  char **devices, **ret, **d;
-
-  /* FIXME: might return the same hardware device twice, e.g.
-   * as /dev/cdrom and /dev/dvd - gotta do something more sophisticated */
-  devices = cdio_get_devices (DRIVER_DEVICE);
-
-  if (devices == NULL)
-    goto no_devices;
-
-  if (*devices == NULL)
-    goto empty_devices;
-
-  ret = g_strdupv (devices);
-  for (d = devices; *d != NULL; ++d) {
-    GST_DEBUG_OBJECT (audiocdsrc, "device: %s", GST_STR_NULL (*d));
-    free (*d);
-  }
-  free (devices);
-
-  return ret;
-
-  /* ERRORS */
-no_devices:
-  {
-    GST_DEBUG_OBJECT (audiocdsrc, "no devices found");
-    return NULL;
-  }
-empty_devices:
-  {
-    GST_DEBUG_OBJECT (audiocdsrc, "empty device list found");
-    free (devices);
-    return NULL;
-  }
-}
-#endif
-
-static GstBuffer *
-gst_cdio_cdda_src_read_sector (GstAudioCdSrc * audiocdsrc, gint sector)
-{
-  GstCdioCddaSrc *src;
-  guint8 *data;
-
-  src = GST_CDIO_CDDA_SRC (audiocdsrc);
-
-  data = g_malloc (CDIO_CD_FRAMESIZE_RAW);
-
-  /* can't use pad_alloc because we can't return the GstFlowReturn (FIXME 0.11) */
-  if (cdio_read_audio_sector (src->cdio, data, sector) != 0)
-    goto read_failed;
-
-  if (src->swap_le_be) {
-    gint16 *pcm_data = (gint16 *) data;
-    gint i;
-
-    for (i = 0; i < SAMPLES_PER_SECTOR; ++i)
-      pcm_data[i] = GUINT16_SWAP_LE_BE (pcm_data[i]);
-  }
-
-  return gst_buffer_new_wrapped (data, CDIO_CD_FRAMESIZE_RAW);
-
-  /* ERRORS */
-read_failed:
-  {
-    GST_WARNING_OBJECT (src, "read at sector %d failed!", sector);
-    GST_ELEMENT_ERROR (src, RESOURCE, READ,
-        (_("Could not read from CD.")),
-        ("cdio_read_audio_sector at %d failed: %s", sector,
-            g_strerror (errno)));
-    g_free (data);
-    return NULL;
-  }
-}
-
-static gboolean
-gst_cdio_cdda_src_do_detect_drive_endianness (GstCdioCddaSrc * src, gint from,
-    gint to)
-{
-  gint16 pcm_data[SAMPLES_PER_SECTOR], last_pcm_ne, last_pcm_oe;
-  gdouble ne_sumd0, ne_sumd1, ne_factor;
-  gdouble oe_sumd0, oe_sumd1, oe_factor;
-  gdouble diff;
-  gint sector;
-  gint i;
-
-  ne_sumd0 = ne_sumd1 = 0.0;
-  oe_sumd0 = oe_sumd1 = 0.0;
-  last_pcm_ne = 0;
-  last_pcm_oe = 0;
-
-  GST_LOG_OBJECT (src, "checking sector %d to %d", from, to);
-
-  for (sector = from; sector < to; ++sector) {
-    if (cdio_read_audio_sector (src->cdio, pcm_data, sector) != 0)
-      goto read_failed;
-
-    /* only evaluate samples for left channel */
-    for (i = 0; i < SAMPLES_PER_SECTOR; i += 2) {
-      gint16 pcm;
-
-      /* Native endianness first */
-      pcm = pcm_data[i];
-      ne_sumd0 += abs (pcm);
-      ne_sumd1 += abs (pcm - last_pcm_ne);
-      last_pcm_ne = pcm;
-
-      /* other endianness next */
-      pcm = GUINT16_SWAP_LE_BE (pcm);
-      oe_sumd0 += abs (pcm);
-      oe_sumd1 += abs (pcm - last_pcm_oe);
-      last_pcm_oe = pcm;
-    }
-
-  }
-
-  ne_factor = (ne_sumd1 / ne_sumd0);
-  oe_factor = (oe_sumd1 / oe_sumd0);
-  diff = ne_factor - oe_factor;
-
-  GST_DEBUG_OBJECT (src, "Native: %.2f, Other: %.2f, diff: %.2f",
-      ne_factor, oe_factor, diff);
-
-  if (diff > 0.5) {
-    GST_INFO_OBJECT (src, "Drive produces samples in other endianness");
-    src->swap_le_be = TRUE;
-    return TRUE;
-  } else if (diff < -0.5) {
-    GST_INFO_OBJECT (src, "Drive produces samples in host endianness");
-    src->swap_le_be = FALSE;
-    return TRUE;
-  } else {
-    GST_INFO_OBJECT (src, "Inconclusive, assuming host endianness");
-    src->swap_le_be = FALSE;
-    return FALSE;
-  }
-
-/* ERRORS */
-read_failed:
-  {
-    GST_WARNING_OBJECT (src, "could not read sector %d", sector);
-    src->swap_le_be = FALSE;
-    return FALSE;
-  }
-}
-
-static void
-gst_cdio_cdda_src_detect_drive_endianness (GstCdioCddaSrc * src, gint first,
-    gint last)
-{
-  gint from, to;
-
-  GST_INFO ("Detecting drive endianness");
-
-  /* try middle of disc first */
-  from = (first + last) / 2;
-  to = MIN (from + 10, last);
-  if (gst_cdio_cdda_src_do_detect_drive_endianness (src, from, to))
-    return;
-
-  /* if that was inconclusive, try other places */
-  from = (first + last) / 4;
-  to = MIN (from + 10, last);
-  if (gst_cdio_cdda_src_do_detect_drive_endianness (src, from, to))
-    return;
-
-  from = (first + last) * 3 / 4;
-  to = MIN (from + 10, last);
-  if (gst_cdio_cdda_src_do_detect_drive_endianness (src, from, to))
-    return;
-
-  /* if that's still inconclusive, we give up and assume host endianness */
-  return;
-}
-
-static gboolean
-notcdio_track_is_audio_track (const CdIo * p_cdio, track_t i_track)
-{
-  return (cdio_get_track_format (p_cdio, i_track) == TRACK_FORMAT_AUDIO);
-}
-
-static gboolean
-gst_cdio_cdda_src_open (GstAudioCdSrc * audiocdsrc, const gchar * device)
-{
-  GstCdioCddaSrc *src;
-  discmode_t discmode;
-  gint first_track, num_tracks, i;
-  gint first_audio_sector = 0, last_audio_sector = 0;
-#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
-  cdtext_t *cdtext;
-#endif
-
-  src = GST_CDIO_CDDA_SRC (audiocdsrc);
-
-  g_assert (device != NULL);
-  g_assert (src->cdio == NULL);
-
-  GST_LOG_OBJECT (src, "trying to open device %s", device);
-
-  if (!(src->cdio = cdio_open (device, DRIVER_UNKNOWN)))
-    goto open_failed;
-
-  discmode = cdio_get_discmode (src->cdio);
-  GST_LOG_OBJECT (src, "discmode: %d", (gint) discmode);
-
-  if (discmode != CDIO_DISC_MODE_CD_DA && discmode != CDIO_DISC_MODE_CD_MIXED)
-    goto not_audio;
-
-  first_track = cdio_get_first_track_num (src->cdio);
-  num_tracks = cdio_get_num_tracks (src->cdio);
-
-  if (num_tracks <= 0 || first_track < 0)
-    return TRUE;                /* base class will generate 'has no tracks' error */
-
-  if (src->read_speed != -1)
-    cdio_set_speed (src->cdio, src->read_speed);
-
-#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
-  cdtext = cdio_get_cdtext (src->cdio);
-
-  if (NULL == cdtext)
-    GST_DEBUG_OBJECT (src, "no CD-TEXT on disc");
-  else
-    gst_cdio_add_cdtext_album_tags (GST_OBJECT_CAST (src), cdtext,
-        audiocdsrc->tags);
-#else
-  gst_cdio_add_cdtext_album_tags (GST_OBJECT_CAST (src), src->cdio,
-      audiocdsrc->tags);
-#endif
-
-  GST_LOG_OBJECT (src, "%u tracks, first track: %d", num_tracks, first_track);
-
-  for (i = 0; i < num_tracks; ++i) {
-    GstAudioCdSrcTrack track = { 0, };
-    gint len_sectors;
-
-    len_sectors = cdio_get_track_sec_count (src->cdio, i + first_track);
-
-    track.num = i + first_track;
-    track.is_audio = notcdio_track_is_audio_track (src->cdio, i + first_track);
-
-    /* Note: LSN/LBA confusion all around us; in any case, this does
-     * the right thing here (for cddb id calculations etc. as well) */
-    track.start = cdio_get_track_lsn (src->cdio, i + first_track);
-    track.end = track.start + len_sectors - 1;  /* -1? */
-
-    if (track.is_audio) {
-      first_audio_sector = MIN (first_audio_sector, track.start);
-      last_audio_sector = MAX (last_audio_sector, track.end);
-    }
-#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
-    if (NULL != cdtext)
-      track.tags = gst_cdio_get_cdtext (GST_OBJECT (src), cdtext,
-          i + first_track);
-#else
-    track.tags = gst_cdio_get_cdtext (GST_OBJECT (src), src->cdio,
-        i + first_track);
-#endif
-
-    gst_audio_cd_src_add_track (GST_AUDIO_CD_SRC (src), &track);
-  }
-
-  /* Try to detect if we need to byte-order swap the samples coming from the
-   * drive, which might be the case if the CD drive operates in a different
-   * endianness than the host CPU's endianness (happens on e.g. Powerbook G4) */
-  gst_cdio_cdda_src_detect_drive_endianness (src, first_audio_sector,
-      last_audio_sector);
-
-  return TRUE;
-
-  /* ERRORS */
-open_failed:
-  {
-    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
-        (_("Could not open CD device for reading.")),
-        ("cdio_open() failed: %s", g_strerror (errno)));
-    return FALSE;
-  }
-not_audio:
-  {
-    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
-        (_("Disc is not an Audio CD.")), ("discmode: %d", (gint) discmode));
-
-    cdio_destroy (src->cdio);
-    src->cdio = NULL;
-    return FALSE;
-  }
-}
-
-static void
-gst_cdio_cdda_src_close (GstAudioCdSrc * audiocdsrc)
-{
-  GstCdioCddaSrc *src = GST_CDIO_CDDA_SRC (audiocdsrc);
-
-  if (src->cdio) {
-    cdio_destroy (src->cdio);
-    src->cdio = NULL;
-  }
-}
-
-static void
-gst_cdio_cdda_src_init (GstCdioCddaSrc * src)
-{
-  src->read_speed = DEFAULT_READ_SPEED; /* don't need atomic access here */
-  src->cdio = NULL;
-}
-
-static void
-gst_cdio_cdda_src_finalize (GObject * obj)
-{
-  GstCdioCddaSrc *src = GST_CDIO_CDDA_SRC (obj);
-
-  if (src->cdio) {
-    cdio_destroy (src->cdio);
-    src->cdio = NULL;
-  }
-
-  G_OBJECT_CLASS (gst_cdio_cdda_src_parent_class)->finalize (obj);
-}
-
-static void
-gst_cdio_cdda_src_class_init (GstCdioCddaSrcClass * klass)
-{
-  GstAudioCdSrcClass *audiocdsrc_class = GST_AUDIO_CD_SRC_CLASS (klass);
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
-  gobject_class->set_property = gst_cdio_cdda_src_set_property;
-  gobject_class->get_property = gst_cdio_cdda_src_get_property;
-  gobject_class->finalize = gst_cdio_cdda_src_finalize;
-
-  audiocdsrc_class->open = gst_cdio_cdda_src_open;
-  audiocdsrc_class->close = gst_cdio_cdda_src_close;
-  audiocdsrc_class->read_sector = gst_cdio_cdda_src_read_sector;
-#if 0
-  audiocdsrc_class->probe_devices = gst_cdio_cdda_src_probe_devices;
-  audiocdsrc_class->get_default_device = gst_cdio_cdda_src_get_default_device;
-#endif
-
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_READ_SPEED,
-      g_param_spec_int ("read-speed", "Read speed",
-          "Read from device at the specified speed (-1 = default)", -1, 100,
-          DEFAULT_READ_SPEED, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  gst_element_class_set_static_metadata (element_class,
-      "CD audio source (CDDA)", "Source/File",
-      "Read audio from CD using libcdio",
-      "Tim-Philipp Müller <tim centricular net>");
-}
-
-static void
-gst_cdio_cdda_src_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstCdioCddaSrc *src = GST_CDIO_CDDA_SRC (object);
-
-  switch (prop_id) {
-    case PROP_READ_SPEED:{
-      gint speed;
-
-      speed = g_value_get_int (value);
-      g_atomic_int_set (&src->read_speed, speed);
-      break;
-    }
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_cdio_cdda_src_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec)
-{
-  GstCdioCddaSrc *src = GST_CDIO_CDDA_SRC (object);
-
-  switch (prop_id) {
-    case PROP_READ_SPEED:{
-      gint speed;
-
-      speed = g_atomic_int_get (&src->read_speed);
-      g_value_set_int (value, speed);
-      break;
-    }
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
diff --git a/ext/cdio/gstcdiocddasrc.h b/ext/cdio/gstcdiocddasrc.h
deleted file mode 100644 (file)
index 478aa5f..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/* GStreamer
- * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
- *
- * 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_CDIO_CDDA_SRC_H__
-#define __GST_CDIO_CDDA_SRC_H__
-
-#include <gst/audio/gstaudiocdsrc.h>
-#include <cdio/cdio.h>
-
-#define GST_TYPE_CDIO_CDDA_SRC            (gst_cdio_cdda_src_get_type ())
-#define GST_CDIO_CDDA_SRC(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_CDIO_CDDA_SRC, GstCdioCddaSrc))
-#define GST_CDIO_CDDA_SRC_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),  GST_TYPE_CDIO_CDDA_SRC, GstCdioCddaSrcClass))
-#define GST_IS_CDIO_CDDA_SRC(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_CDIO_CDDA_SRC))
-#define GST_IS_CDIO_CDDA_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),  GST_TYPE_CDIO_CDDA_SRC))
-
-typedef struct _GstCdioCddaSrc GstCdioCddaSrc;
-typedef struct _GstCdioCddaSrcClass GstCdioCddaSrcClass;
-
-struct _GstCdioCddaSrc
-{
-  GstAudioCdSrc  audiocdsrc;
-
-  gint           read_speed;    /* ATOMIC */
-
-  gboolean       swap_le_be;    /* Drive produces samples in other endianness */
-
-  CdIo          *cdio;          /* NULL if not open */
-};
-
-struct _GstCdioCddaSrcClass
-{
-  GstAudioCdSrcClass  audiocdsrc_class;
-};
-
-GType   gst_cdio_cdda_src_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (cdiocddasrc);
-
-#endif /* __GST_CDIO_CDDA_SRC_H__ */
-
diff --git a/ext/cdio/meson.build b/ext/cdio/meson.build
deleted file mode 100644 (file)
index 054d026..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-cdio_dep = dependency('libcdio', version : '>= 0.76', required : get_option('cdio'))
-
-if cdio_dep.found()
-  cdio = library('gstcdio',
-    ['gstcdio.c', 'gstcdiocddasrc.c'],
-    c_args : ugly_args,
-    include_directories : [configinc, libsinc],
-    dependencies : [gstaudio_dep, gsttag_dep, cdio_dep],
-    install : true,
-    install_dir : plugins_install_dir,
-  )
-  pkgconfig.generate(cdio, install_dir : plugins_pkgconfig_install_dir)
-  plugins += [cdio]
-endif
diff --git a/ext/dvdread/README b/ext/dvdread/README
deleted file mode 100644 (file)
index 4594f65..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-Various Info
-============
-
-http://dvd.sourceforge.net/
diff --git a/ext/dvdread/demo-play b/ext/dvdread/demo-play
deleted file mode 100755 (executable)
index ed9d4d8..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-AUDIOSINK=`gconftool-2 -g /system/gstreamer/0.8/default/audiosink`
-VIDEOSINK=`gconftool-2 -g /system/gstreamer/0.8/default/videosink`
-gst-launch dvdreadsrc ! dvddemux name=demux .video_00 ! \
-       { queue ! mpeg2dec ! videoconvert ! videoscale ! $VIDEOSINK } \
-       { demux.audio_00 ! queue ! a52dec ! audioconvert ! audioscale ! $AUDIOSINK }
diff --git a/ext/dvdread/dvdreadsrc.c b/ext/dvdread/dvdreadsrc.c
deleted file mode 100644 (file)
index cfd72ad..0000000
+++ /dev/null
@@ -1,1819 +0,0 @@
-/* GStreamer DVD title source
- * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) 2001 Billy Biggs <vektor@dumbterm.net>.
- * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#include "dvdreadsrc.h"
-
-#include <gmodule.h>
-
-#include <gst/gst-i18n-plugin.h>
-
-GST_DEBUG_CATEGORY_STATIC (gstgst_dvd_read_src_debug);
-#define GST_CAT_DEFAULT (gstgst_dvd_read_src_debug)
-
-enum
-{
-  ARG_0,
-  ARG_DEVICE,
-  ARG_TITLE,
-  ARG_CHAPTER,
-  ARG_ANGLE
-};
-
-static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/mpeg, mpegversion=2, systemstream=(boolean)true"));
-
-static GstFormat title_format;
-static GstFormat angle_format;
-static GstFormat sector_format;
-static GstFormat chapter_format;
-
-static gboolean gst_dvd_read_src_start (GstBaseSrc * basesrc);
-static gboolean gst_dvd_read_src_stop (GstBaseSrc * basesrc);
-static GstFlowReturn gst_dvd_read_src_create (GstPushSrc * pushsrc,
-    GstBuffer ** buf);
-static gboolean gst_dvd_read_src_src_query (GstBaseSrc * basesrc,
-    GstQuery * query);
-static gboolean gst_dvd_read_src_src_event (GstBaseSrc * basesrc,
-    GstEvent * event);
-static gboolean gst_dvd_read_src_goto_title (GstDvdReadSrc * src, gint title,
-    gint angle);
-static gboolean gst_dvd_read_src_goto_chapter (GstDvdReadSrc * src,
-    gint chapter);
-static gboolean gst_dvd_read_src_goto_sector (GstDvdReadSrc * src, gint angle);
-static void gst_dvd_read_src_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-static void gst_dvd_read_src_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
-static GstEvent *gst_dvd_read_src_make_clut_change_event (GstDvdReadSrc * src,
-    const guint32 * clut);
-static gboolean gst_dvd_read_src_get_size (GstDvdReadSrc * src, gint64 * size);
-static gboolean gst_dvd_read_src_do_seek (GstBaseSrc * src, GstSegment * s);
-static gint64 gst_dvd_read_src_convert_timecode (dvd_time_t * time);
-static gint gst_dvd_read_src_get_next_cell (GstDvdReadSrc * src,
-    pgc_t * pgc, gint cell);
-static GstClockTime gst_dvd_read_src_get_time_for_sector (GstDvdReadSrc * src,
-    guint sector);
-static gint gst_dvd_read_src_get_sector_from_time (GstDvdReadSrc * src,
-    GstClockTime ts);
-
-static void gst_dvd_read_src_uri_handler_init (gpointer g_iface,
-    gpointer iface_data);
-static gboolean dvdread_element_init (GstPlugin * plugin);
-
-#define gst_dvd_read_src_parent_class parent_class
-G_DEFINE_TYPE_WITH_CODE (GstDvdReadSrc, gst_dvd_read_src, GST_TYPE_PUSH_SRC,
-    G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER,
-        gst_dvd_read_src_uri_handler_init));
-GST_ELEMENT_REGISTER_DEFINE_CUSTOM (dvdreadsrc, dvdread_element_init);
-
-static void
-gst_dvd_read_src_finalize (GObject * object)
-{
-  GstDvdReadSrc *src = GST_DVD_READ_SRC (object);
-
-  g_free (src->location);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-gst_dvd_read_src_init (GstDvdReadSrc * src)
-{
-  src->dvd = NULL;
-  src->vts_file = NULL;
-  src->vmg_file = NULL;
-  src->dvd_title = NULL;
-
-  src->location = g_strdup ("/dev/dvd");
-  src->first_seek = TRUE;
-  src->new_seek = TRUE;
-  src->new_cell = TRUE;
-  src->change_cell = FALSE;
-  src->uri_title = 1;
-  src->uri_chapter = 1;
-  src->uri_angle = 1;
-
-  src->title_lang_event_pending = NULL;
-  src->pending_clut_event = NULL;
-
-  gst_pad_use_fixed_caps (GST_BASE_SRC_PAD (src));
-  gst_pad_set_caps (GST_BASE_SRC_PAD (src),
-      gst_static_pad_template_get_caps (&srctemplate));
-}
-
-static gboolean
-gst_dvd_read_src_is_seekable (GstBaseSrc * src)
-{
-  return TRUE;
-}
-
-static void
-gst_dvd_read_src_class_init (GstDvdReadSrcClass * klass)
-{
-  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
-  GstPushSrcClass *gstpushsrc_class = GST_PUSH_SRC_CLASS (klass);
-  GstBaseSrcClass *gstbasesrc_class = GST_BASE_SRC_CLASS (klass);
-
-  gobject_class->finalize = gst_dvd_read_src_finalize;
-  gobject_class->set_property = gst_dvd_read_src_set_property;
-  gobject_class->get_property = gst_dvd_read_src_get_property;
-
-  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_DEVICE,
-      g_param_spec_string ("device", "Device",
-          "DVD device location", NULL,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_TITLE,
-      g_param_spec_int ("title", "title", "title",
-          1, 999, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_CHAPTER,
-      g_param_spec_int ("chapter", "chapter", "chapter",
-          1, 999, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_ANGLE,
-      g_param_spec_int ("angle", "angle", "angle",
-          1, 999, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  gst_element_class_add_static_pad_template (gstelement_class, &srctemplate);
-
-  gst_element_class_set_static_metadata (gstelement_class, "DVD Source",
-      "Source/File/DVD",
-      "Access a DVD title/chapter/angle using libdvdread",
-      "Erik Walthinsen <omega@cse.ogi.edu>");
-
-  gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_dvd_read_src_start);
-  gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_dvd_read_src_stop);
-  gstbasesrc_class->query = GST_DEBUG_FUNCPTR (gst_dvd_read_src_src_query);
-  gstbasesrc_class->event = GST_DEBUG_FUNCPTR (gst_dvd_read_src_src_event);
-  gstbasesrc_class->do_seek = GST_DEBUG_FUNCPTR (gst_dvd_read_src_do_seek);
-  gstbasesrc_class->is_seekable =
-      GST_DEBUG_FUNCPTR (gst_dvd_read_src_is_seekable);
-
-  gstpushsrc_class->create = GST_DEBUG_FUNCPTR (gst_dvd_read_src_create);
-
-  title_format = gst_format_register ("title", "DVD title");
-  angle_format = gst_format_register ("angle", "DVD angle");
-  sector_format = gst_format_register ("sector", "DVD sector");
-  chapter_format = gst_format_register ("chapter", "DVD chapter");
-}
-
-static gboolean
-gst_dvd_read_src_start (GstBaseSrc * basesrc)
-{
-  GstDvdReadSrc *src = GST_DVD_READ_SRC (basesrc);
-
-  g_return_val_if_fail (src->location != NULL, FALSE);
-
-  GST_DEBUG_OBJECT (src, "Opening DVD '%s'", src->location);
-
-  if ((src->dvd = DVDOpen (src->location)) == NULL)
-    goto open_failed;
-
-  /* Load the video manager to find out the information about the titles */
-  GST_DEBUG_OBJECT (src, "Loading VMG info");
-
-  if (!(src->vmg_file = ifoOpen (src->dvd, 0)))
-    goto ifo_open_failed;
-
-  src->tt_srpt = src->vmg_file->tt_srpt;
-
-  src->title = src->uri_title - 1;
-  src->chapter = src->uri_chapter - 1;
-  src->angle = src->uri_angle - 1;
-
-  if (!gst_dvd_read_src_goto_title (src, src->title, src->angle))
-    goto title_open_failed;
-
-  if (!gst_dvd_read_src_goto_chapter (src, src->chapter))
-    goto chapter_open_failed;
-
-  src->new_seek = FALSE;
-  src->change_cell = TRUE;
-
-  src->first_seek = TRUE;
-
-  return TRUE;
-
-  /* ERRORS */
-open_failed:
-  {
-    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
-        (_("Could not open DVD")),
-        ("DVDOpen(%s) failed: %s", src->location, g_strerror (errno)));
-    return FALSE;
-  }
-ifo_open_failed:
-  {
-    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
-        (_("Could not open DVD")),
-        ("ifoOpen() failed: %s", g_strerror (errno)));
-    return FALSE;
-  }
-title_open_failed:
-  {
-    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
-        (_("Could not open DVD title %d"), src->uri_title), (NULL));
-    return FALSE;
-  }
-chapter_open_failed:
-  {
-    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
-        (_("Failed to go to chapter %d of DVD title %d"),
-            src->uri_chapter, src->uri_title), (NULL));
-    return FALSE;
-  }
-}
-
-static gboolean
-gst_dvd_read_src_stop (GstBaseSrc * basesrc)
-{
-  GstDvdReadSrc *src = GST_DVD_READ_SRC (basesrc);
-
-  if (src->vts_file) {
-    ifoClose (src->vts_file);
-    src->vts_file = NULL;
-  }
-  if (src->vmg_file) {
-    ifoClose (src->vmg_file);
-    src->vmg_file = NULL;
-  }
-  if (src->dvd_title) {
-    DVDCloseFile (src->dvd_title);
-    src->dvd_title = NULL;
-  }
-  if (src->dvd) {
-    DVDClose (src->dvd);
-    src->dvd = NULL;
-  }
-  src->new_cell = TRUE;
-  src->new_seek = TRUE;
-  src->change_cell = FALSE;
-  src->chapter = 0;
-  src->title = 0;
-  src->need_newsegment = TRUE;
-  src->vts_tmapt = NULL;
-  if (src->title_lang_event_pending) {
-    gst_event_unref (src->title_lang_event_pending);
-    src->title_lang_event_pending = NULL;
-  }
-  if (src->pending_clut_event) {
-    gst_event_unref (src->pending_clut_event);
-    src->pending_clut_event = NULL;
-  }
-  if (src->chapter_starts) {
-    g_free (src->chapter_starts);
-    src->chapter_starts = NULL;
-  }
-
-  GST_LOG_OBJECT (src, "closed DVD");
-
-  return TRUE;
-}
-
-static void
-cur_title_get_chapter_pgc (GstDvdReadSrc * src, gint chapter, gint * p_pgn,
-    gint * p_pgc_id, pgc_t ** p_pgc)
-{
-  pgc_t *pgc;
-  gint pgn, pgc_id;
-
-  g_assert (chapter >= 0 && chapter < src->num_chapters);
-
-  pgc_id = src->vts_ptt_srpt->title[src->ttn - 1].ptt[chapter].pgcn;
-  pgn = src->vts_ptt_srpt->title[src->ttn - 1].ptt[chapter].pgn;
-  pgc = src->vts_file->vts_pgcit->pgci_srp[pgc_id - 1].pgc;
-
-  *p_pgn = pgn;
-  *p_pgc_id = pgc_id;
-  *p_pgc = pgc;
-}
-
-static void
-cur_title_get_chapter_bounds (GstDvdReadSrc * src, gint chapter,
-    gint * p_first_cell, gint * p_last_cell)
-{
-  pgc_t *pgc;
-  gint pgn, pgc_id, pgn_next_ch;
-
-  g_assert (chapter >= 0 && chapter < src->num_chapters);
-
-  cur_title_get_chapter_pgc (src, chapter, &pgn, &pgc_id, &pgc);
-
-  *p_first_cell = pgc->program_map[pgn - 1] - 1;
-
-  /* last cell is used as a 'up to boundary', not 'up to and including',
-   * i.e. it is the first cell not included in the chapter range */
-  if (chapter == (src->num_chapters - 1)) {
-    *p_last_cell = pgc->nr_of_cells;
-  } else {
-    pgn_next_ch = src->vts_ptt_srpt->title[src->ttn - 1].ptt[chapter + 1].pgn;
-    *p_last_cell = pgc->program_map[pgn_next_ch - 1] - 1;
-  }
-
-  GST_DEBUG_OBJECT (src, "Chapter %d bounds: %d %d (within %d cells)",
-      chapter, *p_first_cell, *p_last_cell, pgc->nr_of_cells);
-}
-
-static gboolean
-gst_dvd_read_src_goto_chapter (GstDvdReadSrc * src, gint chapter)
-{
-  gint i;
-  const guint8 *palette;
-
-  /* make sure the chapter number is valid for this title */
-  if (chapter < 0 || chapter >= src->num_chapters) {
-    GST_WARNING_OBJECT (src, "invalid chapter %d (only %d available)",
-        chapter, src->num_chapters);
-    chapter = CLAMP (chapter, 0, src->num_chapters - 1);
-  }
-
-  /* determine which program chain we want to watch. This is
-   * based on the chapter number */
-  cur_title_get_chapter_pgc (src, chapter, &src->pgn, &src->pgc_id,
-      &src->cur_pgc);
-  cur_title_get_chapter_bounds (src, chapter, &src->start_cell,
-      &src->last_cell);
-
-  GST_LOG_OBJECT (src, "Opened chapter %d - cell %d-%d", chapter + 1,
-      src->start_cell, src->last_cell);
-
-  /* retrieve position */
-  src->cur_pack = 0;
-  for (i = 0; i < chapter; i++) {
-    gint c1, c2;
-
-    cur_title_get_chapter_bounds (src, i, &c1, &c2);
-
-    while (c1 < c2) {
-      src->cur_pack +=
-          src->cur_pgc->cell_playback[c1].last_sector -
-          src->cur_pgc->cell_playback[c1].first_sector;
-      ++c1;
-    }
-  }
-
-  /* prepare reading for new cell */
-  src->new_cell = TRUE;
-  src->next_cell = src->start_cell;
-
-  src->chapter = chapter;
-
-  if (src->pending_clut_event)
-    gst_event_unref (src->pending_clut_event);
-
-  /* Work around GCC 9 compiler warning here about taking address of packed
-   * member, which may result in an unaligned pointer access */
-  palette = (const guint8 *) src->cur_pgc->palette;
-  src->pending_clut_event =
-      gst_dvd_read_src_make_clut_change_event (src, (const guint32 *) palette);
-
-  return TRUE;
-}
-
-static void
-gst_dvd_read_src_get_chapter_starts (GstDvdReadSrc * src)
-{
-  GstClockTime uptohere;
-  guint c;
-
-  g_free (src->chapter_starts);
-  src->chapter_starts = g_new (GstClockTime, src->num_chapters);
-
-  uptohere = (GstClockTime) 0;
-  for (c = 0; c < src->num_chapters; ++c) {
-    GstClockTime chapter_duration = 0;
-    gint cell_start, cell_end, cell;
-    gint pgn, pgc_id;
-    pgc_t *pgc;
-
-    cur_title_get_chapter_pgc (src, c, &pgn, &pgc_id, &pgc);
-    cur_title_get_chapter_bounds (src, c, &cell_start, &cell_end);
-
-    cell = cell_start;
-    while (cell < cell_end) {
-      dvd_time_t *cell_duration;
-
-      cell_duration = &pgc->cell_playback[cell].playback_time;
-      chapter_duration += gst_dvd_read_src_convert_timecode (cell_duration);
-      cell = gst_dvd_read_src_get_next_cell (src, pgc, cell);
-    }
-
-    src->chapter_starts[c] = uptohere;
-
-    GST_INFO_OBJECT (src, "[%02u] Chapter %02u starts at %" GST_TIME_FORMAT
-        ", dur = %" GST_TIME_FORMAT ", cells %d-%d", src->title + 1, c + 1,
-        GST_TIME_ARGS (uptohere), GST_TIME_ARGS (chapter_duration),
-        cell_start, cell_end);
-
-    uptohere += chapter_duration;
-  }
-}
-
-static gboolean
-gst_dvd_read_src_goto_title (GstDvdReadSrc * src, gint title, gint angle)
-{
-  GstStructure *s;
-  gchar lang_code[3] = { '\0', '\0', '\0' }, *t;
-  pgc_t *pgc0;
-  gint title_set_nr;
-  gint num_titles;
-  gint pgn0, pgc0_id;
-  gint i;
-
-  /* make sure our title number is valid */
-  num_titles = src->tt_srpt->nr_of_srpts;
-  GST_INFO_OBJECT (src, "There are %d titles on this DVD", num_titles);
-  if (title < 0 || title >= num_titles)
-    goto invalid_title;
-
-  src->num_chapters = src->tt_srpt->title[title].nr_of_ptts;
-  GST_INFO_OBJECT (src, "Title %d has %d chapters", title + 1,
-      src->num_chapters);
-
-  /* make sure the angle number is valid for this title */
-  src->num_angles = src->tt_srpt->title[title].nr_of_angles;
-  GST_LOG_OBJECT (src, "Title %d has %d angles", title + 1, src->num_angles);
-  if (angle < 0 || angle >= src->num_angles) {
-    GST_WARNING_OBJECT (src, "Invalid angle %d (only %d available)",
-        angle, src->num_angles);
-    angle = CLAMP (angle, 0, src->num_angles - 1);
-  }
-
-  /* load the VTS information for the title set our title is in */
-  title_set_nr = src->tt_srpt->title[title].title_set_nr;
-  src->vts_file = ifoOpen (src->dvd, title_set_nr);
-  if (src->vts_file == NULL)
-    goto ifo_open_failed;
-
-  src->ttn = src->tt_srpt->title[title].vts_ttn;
-  src->vts_ptt_srpt = src->vts_file->vts_ptt_srpt;
-
-  /* interactive title? */
-  if (src->num_chapters > 0 &&
-      src->vts_ptt_srpt->title[src->ttn - 1].ptt[0].pgn == 0) {
-    goto commands_only_pgc;
-  }
-
-  /* we've got enough info, time to open the title set data */
-  src->dvd_title = DVDOpenFile (src->dvd, title_set_nr, DVD_READ_TITLE_VOBS);
-  if (src->dvd_title == NULL)
-    goto title_open_failed;
-
-  GST_INFO_OBJECT (src, "Opened title %d, angle %d", title + 1, angle);
-  src->title = title;
-  src->angle = angle;
-
-  /* build event */
-
-  if (src->title_lang_event_pending) {
-    gst_event_unref (src->title_lang_event_pending);
-    src->title_lang_event_pending = NULL;
-  }
-
-  s = gst_structure_new ("application/x-gst-dvd",
-      "event", G_TYPE_STRING, "dvd-lang-codes", NULL);
-
-  /* so we can filter out invalid/unused streams (same for all chapters) */
-  cur_title_get_chapter_pgc (src, 0, &pgn0, &pgc0_id, &pgc0);
-
-  /* audio */
-  for (i = 0; i < src->vts_file->vtsi_mat->nr_of_vts_audio_streams; i++) {
-    const audio_attr_t *a;
-
-    /* audio stream present? */
-    if (pgc0 != NULL && (pgc0->audio_control[i] & 0x8000) == 0)
-      continue;
-
-    a = &src->vts_file->vtsi_mat->vts_audio_attr[i];
-
-    t = g_strdup_printf ("audio-%d-format", i);
-    gst_structure_set (s, t, G_TYPE_INT, (int) a->audio_format, NULL);
-    g_free (t);
-    t = g_strdup_printf ("audio-%d-stream", i);
-    gst_structure_set (s, t, G_TYPE_INT, (int) i, NULL);
-    g_free (t);
-
-    if (a->lang_type) {
-      t = g_strdup_printf ("audio-%d-language", i);
-      lang_code[0] = (a->lang_code >> 8) & 0xff;
-      lang_code[1] = a->lang_code & 0xff;
-      gst_structure_set (s, t, G_TYPE_STRING, lang_code, NULL);
-      g_free (t);
-    } else {
-      lang_code[0] = '\0';
-    }
-
-    GST_INFO_OBJECT (src, "[%02d] Audio    %02d: lang='%s', format=%d",
-        src->title + 1, i, lang_code, (gint) a->audio_format);
-  }
-
-  /* subtitle */
-  for (i = 0; i < src->vts_file->vtsi_mat->nr_of_vts_subp_streams; i++) {
-    const subp_attr_t *u;
-    const video_attr_t *v;
-    gint sid;
-
-    /* subpicture stream present? */
-    if (pgc0 != NULL && (pgc0->subp_control[i] & 0x80000000) == 0)
-      continue;
-
-    u = &src->vts_file->vtsi_mat->vts_subp_attr[i];
-    v = &src->vts_file->vtsi_mat->vts_video_attr;
-
-    sid = i;
-    if (pgc0 != NULL) {
-      if (v->display_aspect_ratio == 0) /* 4:3 */
-        sid = (pgc0->subp_control[i] >> 24) & 0x1f;
-      else if (v->display_aspect_ratio == 3)    /* 16:9 */
-        sid = (pgc0->subp_control[i] >> 8) & 0x1f;
-    }
-
-    if (u->type) {
-      t = g_strdup_printf ("subpicture-%d-language", i);
-      lang_code[0] = (u->lang_code >> 8) & 0xff;
-      lang_code[1] = u->lang_code & 0xff;
-      gst_structure_set (s, t, G_TYPE_STRING, lang_code, NULL);
-      g_free (t);
-      t = g_strdup_printf ("subpicture-%d-stream", i);
-      gst_structure_set (s, t, G_TYPE_INT, (int) sid, NULL);
-      g_free (t);
-      t = g_strdup_printf ("subpicture-%d-format", i);
-      gst_structure_set (s, t, G_TYPE_INT, (int) 0, NULL);
-      g_free (t);
-    } else {
-      lang_code[0] = '\0';
-    }
-
-    GST_INFO_OBJECT (src, "[%02d] Subtitle %02d: lang='%s', type=%d",
-        src->title + 1, sid, lang_code, u->type);
-  }
-
-  src->title_lang_event_pending =
-      gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM, s);
-
-  /* dump seek tables */
-  src->vts_tmapt = src->vts_file->vts_tmapt;
-  if (src->vts_tmapt) {
-    gint i, j;
-
-    GST_LOG_OBJECT (src, "nr_of_tmaps = %d", src->vts_tmapt->nr_of_tmaps);
-    for (i = 0; i < src->vts_tmapt->nr_of_tmaps; ++i) {
-      GST_LOG_OBJECT (src, "======= Table %d ===================", i);
-      GST_LOG_OBJECT (src, "Offset relative to VTS_TMAPTI: %d",
-          src->vts_tmapt->tmap_offset[i]);
-      GST_LOG_OBJECT (src, "Time unit (seconds)          : %d",
-          src->vts_tmapt->tmap[i].tmu);
-      GST_LOG_OBJECT (src, "Number of entries            : %d",
-          src->vts_tmapt->tmap[i].nr_of_entries);
-      for (j = 0; j < src->vts_tmapt->tmap[i].nr_of_entries; j++) {
-        guint64 time;
-
-        time = (guint64) src->vts_tmapt->tmap[i].tmu * (j + 1) * GST_SECOND;
-        GST_LOG_OBJECT (src, "Time: %" GST_TIME_FORMAT " VOBU "
-            "Sector: 0x%08x %s", GST_TIME_ARGS (time),
-            src->vts_tmapt->tmap[i].map_ent[j] & 0x7fffffff,
-            (src->vts_tmapt->tmap[i].map_ent[j] >> 31) ? "discontinuity" : "");
-      }
-    }
-  } else {
-    GST_WARNING_OBJECT (src, "no vts_tmapt - seeking will suck");
-  }
-
-  gst_dvd_read_src_get_chapter_starts (src);
-
-  return TRUE;
-
-  /* ERRORS */
-invalid_title:
-  {
-    GST_WARNING_OBJECT (src, "Invalid title %d (only %d available)",
-        title, num_titles);
-    return FALSE;
-  }
-ifo_open_failed:
-  {
-    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
-        (_("Could not open DVD title %d"), title_set_nr),
-        ("ifoOpen(%d) failed: %s", title_set_nr, g_strerror (errno)));
-    return FALSE;
-  }
-title_open_failed:
-  {
-    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
-        (_("Could not open DVD title %d"), title_set_nr),
-        ("Can't open title VOBS (VTS_%02d_1.VOB)", title_set_nr));
-    return FALSE;
-  }
-commands_only_pgc:
-  {
-    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
-        (_("Could not open DVD title %d. Interactive titles are not supported "
-                "by this element"), title_set_nr),
-        ("Commands-only PGC, not supported, use rsndvdbin"));
-    return FALSE;
-  }
-}
-
-/* FIXME: double-check this function, compare against original */
-static gint
-gst_dvd_read_src_get_next_cell (GstDvdReadSrc * src, pgc_t * pgc, gint cell)
-{
-  /* Check if we're entering an angle block. */
-  if (pgc->cell_playback[cell].block_type != BLOCK_TYPE_ANGLE_BLOCK)
-    return (cell + 1);
-
-  while (pgc->cell_playback[cell].block_mode != BLOCK_MODE_LAST_CELL)
-    ++cell;
-
-  return cell + 1;
-}
-
-/* Returns true if the pack is a NAV pack */
-static gboolean
-gst_dvd_read_src_is_nav_pack (const guint8 * data, gint lbn, dsi_t * dsi_pack)
-{
-  if (GST_READ_UINT32_BE (data + 0x26) != 0x000001BF)
-    return FALSE;
-
-  /* Check that this is substream 0 (PCI) */
-  if (data[0x2c] != 0)
-    return FALSE;
-
-  if (GST_READ_UINT32_BE (data + 0x400) != 0x000001BF)
-    return FALSE;
-
-  /* Check that this is substream 1 (DSI) */
-  if (data[0x406] != 1)
-    return FALSE;
-
-  /* Check sizes of PCI and DSI packets */
-  if (GST_READ_UINT16_BE (data + 0x2a) != 0x03d4)
-    return FALSE;
-
-  if (GST_READ_UINT16_BE (data + 0x404) != 0x03fa)
-    return FALSE;
-
-  /* Read the DSI packet into the provided struct and check it */
-  navRead_DSI (dsi_pack, (unsigned char *) data + DSI_START_BYTE);
-  if (lbn != dsi_pack->dsi_gi.nv_pck_lbn)
-    return FALSE;
-
-  return TRUE;
-}
-
-/* find time for sector from index, returns NONE if there is no exact match */
-static GstClockTime
-gst_dvd_read_src_get_time_for_sector (GstDvdReadSrc * src, guint sector)
-{
-  gint i, j;
-
-  if (src->vts_tmapt == NULL || src->vts_tmapt->nr_of_tmaps == 0)
-    return GST_CLOCK_TIME_NONE;
-
-  for (i = 0; i < src->vts_tmapt->nr_of_tmaps; ++i) {
-    for (j = 0; j < src->vts_tmapt->tmap[i].nr_of_entries; ++j) {
-      if ((src->vts_tmapt->tmap[i].map_ent[j] & 0x7fffffff) == sector)
-        return (guint64) src->vts_tmapt->tmap[i].tmu * (j + 1) * GST_SECOND;
-    }
-  }
-
-  if (sector == 0)
-    return (GstClockTime) 0;
-
-  return GST_CLOCK_TIME_NONE;
-}
-
-/* returns the sector in the index at (or before) the given time, or -1 */
-static gint
-gst_dvd_read_src_get_sector_from_time (GstDvdReadSrc * src, GstClockTime ts)
-{
-  gint sector, j;
-
-  if (src->vts_tmapt == NULL || src->vts_tmapt->nr_of_tmaps < src->ttn)
-    return -1;
-
-  sector = src->vts_tmapt->tmap[src->ttn - 1].map_ent[0] & 0x7fffffff;
-
-  for (j = 0; j < src->vts_tmapt->tmap[src->ttn - 1].nr_of_entries; ++j) {
-    GstClockTime entry_time;
-
-    entry_time =
-        (guint64) src->vts_tmapt->tmap[src->ttn - 1].tmu * (j + 1) * GST_SECOND;
-    if (entry_time <= ts) {
-      sector = src->vts_tmapt->tmap[src->ttn - 1].map_ent[j] & 0x7fffffff;
-    }
-    if (entry_time >= ts) {
-      return sector;
-    }
-  }
-
-  if (ts == 0)
-    return 0;
-
-  return -1;
-}
-
-typedef enum
-{
-  GST_DVD_READ_OK = 0,
-  GST_DVD_READ_ERROR = -1,
-  GST_DVD_READ_EOS = -2,
-  GST_DVD_READ_AGAIN = -3
-} GstDvdReadReturn;
-
-static GstDvdReadReturn
-gst_dvd_read_src_read (GstDvdReadSrc * src, gint angle, gint new_seek,
-    GstBuffer ** p_buf)
-{
-  GstBuffer *buf;
-  GstSegment *seg;
-  guint8 oneblock[DVD_VIDEO_LB_LEN];
-  dsi_t dsi_pack;
-  guint next_vobu, cur_output_size;
-  gint len;
-  gint retries;
-  gint64 next_time;
-  GstMapInfo map;
-
-  seg = &(GST_BASE_SRC (src)->segment);
-
-  /* playback by cell in this pgc, starting at the cell for our chapter */
-  if (new_seek)
-    src->cur_cell = src->start_cell;
-
-again:
-
-  if (src->cur_cell >= src->last_cell) {
-    /* advance to next chapter */
-    if (src->chapter == (src->num_chapters - 1) ||
-        (seg->format == chapter_format && seg->stop != -1 &&
-            src->chapter == (seg->stop - 1))) {
-      GST_DEBUG_OBJECT (src, "end of chapter segment");
-      goto eos;
-    }
-
-    GST_INFO_OBJECT (src, "end of chapter %d, switch to next",
-        src->chapter + 1);
-
-    ++src->chapter;
-    gst_dvd_read_src_goto_chapter (src, src->chapter);
-
-    return GST_DVD_READ_AGAIN;
-  }
-
-  if (src->new_cell || new_seek) {
-    if (!new_seek) {
-      src->cur_cell = src->next_cell;
-      if (src->cur_cell >= src->last_cell) {
-        GST_LOG_OBJECT (src, "last cell in chapter");
-        goto again;
-      }
-    }
-
-    /* take angle into account */
-    if (src->cur_pgc->cell_playback[src->cur_cell].block_type
-        == BLOCK_TYPE_ANGLE_BLOCK)
-      src->cur_cell += angle;
-
-    /* calculate next cell */
-    src->next_cell =
-        gst_dvd_read_src_get_next_cell (src, src->cur_pgc, src->cur_cell);
-
-    /* we loop until we're out of this cell */
-    src->cur_pack = src->cur_pgc->cell_playback[src->cur_cell].first_sector;
-    src->new_cell = FALSE;
-    GST_DEBUG_OBJECT (src, "Starting new cell %d @ pack %d", src->cur_cell,
-        src->cur_pack);
-  }
-
-  if (src->cur_pack >= src->cur_pgc->cell_playback[src->cur_cell].last_sector) {
-    src->new_cell = TRUE;
-    GST_LOG_OBJECT (src, "Beyond last sector for cell %d, going to next cell",
-        src->cur_cell);
-    return GST_DVD_READ_AGAIN;
-  }
-
-  /* read NAV packet */
-  retries = 0;
-nav_retry:
-  retries++;
-
-  len = DVDReadBlocks (src->dvd_title, src->cur_pack, 1, oneblock);
-  if (len != 1)
-    goto read_error;
-
-  if (!gst_dvd_read_src_is_nav_pack (oneblock, src->cur_pack, &dsi_pack)) {
-    GST_LOG_OBJECT (src, "Skipping nav packet @ pack %d", src->cur_pack);
-    src->cur_pack++;
-
-    if (retries < 2000) {
-      goto nav_retry;
-    } else {
-      GST_LOG_OBJECT (src, "No nav packet @ pack %d after 2000 blocks",
-          src->cur_pack);
-      goto read_error;
-    }
-  }
-
-  /* determine where we go next. These values are the ones we
-   * mostly care about */
-  cur_output_size = dsi_pack.dsi_gi.vobu_ea + 1;
-
-  /* If we're not at the end of this cell, we can determine the next
-   * VOBU to display using the VOBU_SRI information section of the
-   * DSI.  Using this value correctly follows the current angle,
-   * avoiding the doubled scenes in The Matrix, and makes our life
-   * really happy.
-   *
-   * Otherwise, we set our next address past the end of this cell to
-   * force the code above to go to the next cell in the program. */
-  if (dsi_pack.vobu_sri.next_vobu != SRI_END_OF_CELL) {
-    next_vobu = src->cur_pack + (dsi_pack.vobu_sri.next_vobu & 0x7fffffff);
-  } else {
-    next_vobu = src->cur_pgc->cell_playback[src->cur_cell].last_sector + 1;
-  }
-
-  g_assert (cur_output_size < 1024);
-
-  /* create the buffer (TODO: use buffer pool?) */
-  buf =
-      gst_buffer_new_allocate (NULL, cur_output_size * DVD_VIDEO_LB_LEN, NULL);
-
-  GST_LOG_OBJECT (src, "Going to read %u sectors @ pack %d", cur_output_size,
-      src->cur_pack);
-
-  gst_buffer_map (buf, &map, GST_MAP_WRITE);
-  /* read in and output cursize packs */
-  len =
-      DVDReadBlocks (src->dvd_title, src->cur_pack, cur_output_size, map.data);
-
-  if (len != cur_output_size)
-    goto block_read_error;
-
-  gst_buffer_unmap (buf, &map);
-  gst_buffer_resize (buf, 0, cur_output_size * DVD_VIDEO_LB_LEN);
-  /* GST_BUFFER_OFFSET (buf) = priv->cur_pack * DVD_VIDEO_LB_LEN; */
-  GST_BUFFER_TIMESTAMP (buf) =
-      gst_dvd_read_src_get_time_for_sector (src, src->cur_pack);
-
-  *p_buf = buf;
-
-  GST_LOG_OBJECT (src, "Read %u sectors", cur_output_size);
-
-  src->cur_pack = next_vobu;
-
-  next_time = GST_BUFFER_TIMESTAMP (buf);
-  if (GST_CLOCK_TIME_IS_VALID (next_time) && seg->format == GST_FORMAT_TIME &&
-      GST_CLOCK_TIME_IS_VALID (seg->stop) &&
-      next_time > seg->stop + 5 * GST_SECOND) {
-    GST_DEBUG_OBJECT (src, "end of TIME segment");
-    goto eos;
-  }
-
-  return GST_DVD_READ_OK;
-
-  /* ERRORS */
-eos:
-  {
-    GST_INFO_OBJECT (src, "Reached end-of-segment/stream - EOS");
-    return GST_DVD_READ_EOS;
-  }
-read_error:
-  {
-    GST_ERROR_OBJECT (src, "Read failed for block %d", src->cur_pack);
-    return GST_DVD_READ_ERROR;
-  }
-block_read_error:
-  {
-    GST_ERROR_OBJECT (src, "Read failed for %d blocks at %d",
-        cur_output_size, src->cur_pack);
-    gst_buffer_unmap (buf, &map);
-    gst_buffer_unref (buf);
-    return GST_DVD_READ_ERROR;
-  }
-}
-
-/* we don't cache the result on purpose */
-static gboolean
-gst_dvd_read_descrambler_available (void)
-{
-  GModule *module;
-  gpointer sym;
-  gsize res;
-
-  module = g_module_open ("libdvdcss", 0);
-  if (module != NULL) {
-    res = g_module_symbol (module, "dvdcss_open", &sym);
-    g_module_close (module);
-  } else {
-    res = FALSE;
-  }
-
-  return res;
-}
-
-static GstFlowReturn
-gst_dvd_read_src_create (GstPushSrc * pushsrc, GstBuffer ** p_buf)
-{
-  GstDvdReadSrc *src = GST_DVD_READ_SRC (pushsrc);
-  GstPad *srcpad;
-  gint res;
-
-  g_return_val_if_fail (src->dvd != NULL, GST_FLOW_ERROR);
-
-  srcpad = GST_BASE_SRC (src)->srcpad;
-
-  if (src->need_newsegment) {
-    GstSegment seg;
-
-    gst_segment_init (&seg, GST_FORMAT_BYTES);
-    seg.start = src->cur_pack * DVD_VIDEO_LB_LEN;
-    seg.stop = -1;
-    seg.time = 0;
-    gst_pad_push_event (srcpad, gst_event_new_segment (&seg));
-    src->need_newsegment = FALSE;
-  }
-
-  if (src->new_seek) {
-    gst_dvd_read_src_goto_title (src, src->title, src->angle);
-    gst_dvd_read_src_goto_chapter (src, src->chapter);
-
-    src->new_seek = FALSE;
-    src->change_cell = TRUE;
-  }
-
-  if (src->title_lang_event_pending) {
-    gst_pad_push_event (srcpad, src->title_lang_event_pending);
-    src->title_lang_event_pending = NULL;
-  }
-
-  if (src->pending_clut_event) {
-    gst_pad_push_event (srcpad, src->pending_clut_event);
-    src->pending_clut_event = NULL;
-  }
-
-  /* read it in */
-  do {
-    res = gst_dvd_read_src_read (src, src->angle, src->change_cell, p_buf);
-  } while (res == GST_DVD_READ_AGAIN);
-
-  switch (res) {
-    case GST_DVD_READ_ERROR:{
-      /* FIXME: figure out a way to detect if scrambling is the problem */
-      if (!gst_dvd_read_descrambler_available ()) {
-        GST_ELEMENT_ERROR (src, RESOURCE, READ,
-            (_("Could not read DVD. This may be because the DVD is encrypted "
-                    "and a DVD decryption library is not installed.")), (NULL));
-      } else {
-        GST_ELEMENT_ERROR (src, RESOURCE, READ, (_("Could not read DVD.")),
-            (NULL));
-      }
-      return GST_FLOW_ERROR;
-    }
-    case GST_DVD_READ_EOS:{
-      return GST_FLOW_EOS;
-    }
-    case GST_DVD_READ_OK:{
-      src->change_cell = FALSE;
-      return GST_FLOW_OK;
-    }
-    default:
-      break;
-  }
-
-  g_return_val_if_reached (GST_FLOW_EOS);
-}
-
-static void
-gst_dvd_read_src_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstDvdReadSrc *src = GST_DVD_READ_SRC (object);
-  gboolean started;
-
-  GST_OBJECT_LOCK (src);
-  started = GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED);
-
-  switch (prop_id) {
-    case ARG_DEVICE:{
-      if (started) {
-        g_warning ("%s: property '%s' needs to be set before the device is "
-            "opened", GST_ELEMENT_NAME (src), pspec->name);
-        break;
-      }
-
-      g_free (src->location);
-      /* clear the filename if we get a NULL (is that possible?) */
-      if (g_value_get_string (value) == NULL) {
-        src->location = g_strdup ("/dev/dvd");
-      } else {
-        src->location = g_value_dup_string (value);
-      }
-      break;
-    }
-    case ARG_TITLE:
-      src->uri_title = g_value_get_int (value);
-      if (started) {
-        src->title = src->uri_title - 1;
-        src->new_seek = TRUE;
-      }
-      break;
-    case ARG_CHAPTER:
-      src->uri_chapter = g_value_get_int (value);
-      if (started) {
-        src->chapter = src->uri_chapter - 1;
-        src->new_seek = TRUE;
-      }
-      break;
-    case ARG_ANGLE:
-      src->uri_angle = g_value_get_int (value);
-      if (started) {
-        src->angle = src->uri_angle - 1;
-      }
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-
-  GST_OBJECT_UNLOCK (src);
-}
-
-static void
-gst_dvd_read_src_get_property (GObject * object, guint prop_id, GValue * value,
-    GParamSpec * pspec)
-{
-  GstDvdReadSrc *src = GST_DVD_READ_SRC (object);
-
-  GST_OBJECT_LOCK (src);
-
-  switch (prop_id) {
-    case ARG_DEVICE:
-      g_value_set_string (value, src->location);
-      break;
-    case ARG_TITLE:
-      g_value_set_int (value, src->uri_title);
-      break;
-    case ARG_CHAPTER:
-      g_value_set_int (value, src->uri_chapter);
-      break;
-    case ARG_ANGLE:
-      g_value_set_int (value, src->uri_angle);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-
-  GST_OBJECT_UNLOCK (src);
-}
-
-static gboolean
-gst_dvd_read_src_get_size (GstDvdReadSrc * src, gint64 * size)
-{
-  gboolean ret = FALSE;
-
-  if (src->dvd_title) {
-    gssize blocks;
-
-    blocks = DVDFileSize (src->dvd_title);
-    if (blocks >= 0) {
-      *size = (gint64) blocks *DVD_VIDEO_LB_LEN;
-
-      ret = TRUE;
-    } else {
-      GST_WARNING_OBJECT (src, "DVDFileSize(%p) failed!", src->dvd_title);
-    }
-  }
-
-  return ret;
-}
-
-/*** Querying and seeking ***/
-
-static gboolean
-gst_dvd_read_src_handle_seek_event (GstDvdReadSrc * src, GstEvent * event)
-{
-  GstSeekFlags flags;
-  GstSeekType cur_type, end_type;
-  gint64 new_off, total;
-  GstFormat format;
-  GstPad *srcpad;
-  gboolean query_ok;
-  gdouble rate;
-
-  gst_event_parse_seek (event, &rate, &format, &flags, &cur_type, &new_off,
-      &end_type, NULL);
-
-  if (rate <= 0.0) {
-    GST_DEBUG_OBJECT (src, "cannot do backwards playback yet");
-    return FALSE;
-  }
-
-  if (end_type != GST_SEEK_TYPE_NONE) {
-    if ((format != chapter_format && format != GST_FORMAT_TIME) ||
-        end_type != GST_SEEK_TYPE_SET) {
-      GST_DEBUG_OBJECT (src, "end seek type not supported");
-      return FALSE;
-    }
-  }
-
-  if (cur_type != GST_SEEK_TYPE_SET) {
-    GST_DEBUG_OBJECT (src, "only SEEK_TYPE_SET is supported");
-    return FALSE;
-  }
-
-  if (format == angle_format) {
-    GST_OBJECT_LOCK (src);
-    if (new_off < 0 || new_off >= src->num_angles) {
-      GST_OBJECT_UNLOCK (src);
-      GST_DEBUG_OBJECT (src, "invalid angle %d, only %d available",
-          src->num_angles, src->num_angles);
-      return FALSE;
-    }
-    src->angle = (gint) new_off;
-    GST_OBJECT_UNLOCK (src);
-    GST_DEBUG_OBJECT (src, "switched to angle %d", (gint) new_off + 1);
-    return TRUE;
-  }
-
-  if (format != chapter_format && format != title_format &&
-      format != GST_FORMAT_BYTES && format != GST_FORMAT_TIME) {
-    GST_DEBUG_OBJECT (src, "unsupported seek format %d (%s)", format,
-        gst_format_get_name (format));
-    return FALSE;
-  }
-
-  if (format == GST_FORMAT_BYTES) {
-    GST_DEBUG_OBJECT (src, "Requested seek to byte %" G_GUINT64_FORMAT,
-        new_off);
-  } else if (format == GST_FORMAT_TIME) {
-    GST_DEBUG_OBJECT (src, "Requested seek to time %" GST_TIME_FORMAT,
-        GST_TIME_ARGS (new_off));
-    if (gst_dvd_read_src_get_sector_from_time (src, new_off) < 0) {
-      GST_DEBUG_OBJECT (src, "Can't find sector for requested time");
-      return FALSE;
-    }
-  }
-
-  srcpad = GST_BASE_SRC_PAD (src);
-
-  /* check whether the seek looks reasonable (ie within possible range) */
-  if (format == GST_FORMAT_BYTES) {
-    GST_OBJECT_LOCK (src);
-    query_ok = gst_dvd_read_src_get_size (src, &total);
-    GST_OBJECT_UNLOCK (src);
-  } else {
-    query_ok = gst_pad_query_duration (srcpad, format, &total);
-  }
-
-  if (!query_ok) {
-    GST_DEBUG_OBJECT (src, "Failed to query duration in format %s",
-        gst_format_get_name (format));
-    return FALSE;
-  }
-
-  GST_DEBUG_OBJECT (src, "Total      %s: %12" G_GINT64_FORMAT,
-      gst_format_get_name (format), total);
-  GST_DEBUG_OBJECT (src, "Seek to    %s: %12" G_GINT64_FORMAT,
-      gst_format_get_name (format), new_off);
-
-  if (new_off >= total) {
-    GST_DEBUG_OBJECT (src, "Seek position out of range");
-    return FALSE;
-  }
-
-  /* set segment to seek format; this allows us to use the do_seek
-   * virtual function and let the base source handle all the tricky
-   * stuff for us. We don't use the segment internally anyway */
-  /* FIXME: can't take the stream lock here - what to do? */
-  GST_OBJECT_LOCK (src);
-  GST_BASE_SRC (src)->segment.format = format;
-  GST_BASE_SRC (src)->segment.start = 0;
-  GST_BASE_SRC (src)->segment.stop = total;
-  GST_BASE_SRC (src)->segment.duration = total;
-  GST_OBJECT_UNLOCK (src);
-
-  return GST_BASE_SRC_CLASS (parent_class)->event (GST_BASE_SRC (src), event);
-}
-
-static void
-gst_dvd_read_src_get_sector_bounds (GstDvdReadSrc * src, gint * first,
-    gint * last)
-{
-  gint c1, c2, tmp;
-  cur_title_get_chapter_bounds (src, 0, &c1, &tmp);
-  cur_title_get_chapter_bounds (src, src->num_chapters - 1, &tmp, &c2);
-  *first = src->cur_pgc->cell_playback[c1].first_sector;
-  *last = src->cur_pgc->cell_playback[c2].last_sector;
-}
-
-static gboolean
-gst_dvd_read_src_do_seek (GstBaseSrc * basesrc, GstSegment * s)
-{
-  GstDvdReadSrc *src;
-
-  src = GST_DVD_READ_SRC (basesrc);
-
-  GST_DEBUG_OBJECT (src, "Seeking to %s: %12" G_GINT64_FORMAT,
-      gst_format_get_name (s->format), s->position);
-
-  /* Ignore the first seek to 0, as it breaks starting playback
-   * from another chapter by seeking back to sector 0 */
-  if (src->first_seek && s->format == GST_FORMAT_BYTES && s->start == 0) {
-    src->first_seek = FALSE;
-    return TRUE;
-  }
-
-  if (s->format == sector_format || s->format == GST_FORMAT_BYTES
-      || s->format == GST_FORMAT_TIME) {
-    guint old;
-
-    old = src->cur_pack;
-
-    if (s->format == sector_format) {
-      gint first, last;
-      gst_dvd_read_src_get_sector_bounds (src, &first, &last);
-      GST_DEBUG_OBJECT (src, "Format is sector, seeking to %" G_GINT64_FORMAT,
-          s->position);
-      src->cur_pack = s->position;
-      if (src->cur_pack < first)
-        src->cur_pack = first;
-      if (src->cur_pack > last)
-        src->cur_pack = last;
-    } else if (s->format == GST_FORMAT_TIME) {
-      gint sector;
-      GST_DEBUG_OBJECT (src, "Format is time");
-
-      sector = gst_dvd_read_src_get_sector_from_time (src, s->position);
-
-      GST_DEBUG_OBJECT (src, "Time %" GST_TIME_FORMAT " => sector %d",
-          GST_TIME_ARGS (s->position), sector);
-
-      /* really shouldn't happen, we've checked this earlier ... */
-      g_return_val_if_fail (sector >= 0, FALSE);
-
-      src->cur_pack = sector;
-    } else {
-      /* byte format */
-      gint first, last;
-      gst_dvd_read_src_get_sector_bounds (src, &first, &last);
-      GST_DEBUG_OBJECT (src, "Format is byte");
-      src->cur_pack = s->position / DVD_VIDEO_LB_LEN;
-      if (((gint64) src->cur_pack * DVD_VIDEO_LB_LEN) != s->position) {
-        GST_LOG_OBJECT (src, "rounded down offset %" G_GINT64_FORMAT " => %"
-            G_GINT64_FORMAT, s->position,
-            (gint64) src->cur_pack * DVD_VIDEO_LB_LEN);
-      }
-      src->cur_pack += first;
-    }
-
-    if (!gst_dvd_read_src_goto_sector (src, src->angle)) {
-      GST_DEBUG_OBJECT (src, "seek to sector 0x%08x failed", src->cur_pack);
-      src->cur_pack = old;
-      return FALSE;
-    }
-
-    GST_LOG_OBJECT (src, "seek to sector 0x%08x ok", src->cur_pack);
-  } else if (s->format == chapter_format) {
-    if (!gst_dvd_read_src_goto_chapter (src, (gint) s->position)) {
-      GST_DEBUG_OBJECT (src, "seek to chapter %d failed",
-          (gint) s->position + 1);
-      return FALSE;
-    }
-    GST_INFO_OBJECT (src, "seek to chapter %d ok", (gint) s->position + 1);
-    src->chapter = s->position;
-  } else if (s->format == title_format) {
-    if (!gst_dvd_read_src_goto_title (src, (gint) s->position, src->angle) ||
-        !gst_dvd_read_src_goto_chapter (src, 0)) {
-      GST_DEBUG_OBJECT (src, "seek to title %d failed", (gint) s->position);
-      return FALSE;
-    }
-    src->title = (gint) s->position;
-    src->chapter = 0;
-    GST_INFO_OBJECT (src, "seek to title %d ok", src->title + 1);
-  } else {
-    g_return_val_if_reached (FALSE);
-  }
-
-  src->need_newsegment = TRUE;
-  return TRUE;
-}
-
-static gboolean
-gst_dvd_read_src_src_event (GstBaseSrc * basesrc, GstEvent * event)
-{
-  GstDvdReadSrc *src = GST_DVD_READ_SRC (basesrc);
-  gboolean res;
-
-  GST_LOG_OBJECT (src, "handling %s event", GST_EVENT_TYPE_NAME (event));
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_SEEK:
-      res = gst_dvd_read_src_handle_seek_event (src, event);
-      break;
-    default:
-      res = GST_BASE_SRC_CLASS (parent_class)->event (basesrc, event);
-      break;
-  }
-
-  return res;
-}
-
-static GstEvent *
-gst_dvd_read_src_make_clut_change_event (GstDvdReadSrc * src,
-    const guint32 * clut)
-{
-  GstStructure *structure;
-  gchar name[16];
-  gint i;
-
-  structure = gst_structure_new ("application/x-gst-dvd",
-      "event", G_TYPE_STRING, "dvd-spu-clut-change", NULL);
-
-  /* Create a separate field for each value in the table. */
-  for (i = 0; i < 16; i++) {
-    g_snprintf (name, sizeof (name), "clut%02d", i);
-    gst_structure_set (structure, name, G_TYPE_INT, (int) clut[i], NULL);
-  }
-
-  /* Create the DVD event and put the structure into it. */
-  return gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM_STICKY, structure);
-}
-
-static gint64
-gst_dvd_read_src_convert_timecode (dvd_time_t * time)
-{
-  gint64 ret_time;
-  const gint64 one_hour = 3600 * GST_SECOND;
-  const gint64 one_min = 60 * GST_SECOND;
-
-  g_return_val_if_fail ((time->hour >> 4) < 0xa
-      && (time->hour & 0xf) < 0xa, -1);
-  g_return_val_if_fail ((time->minute >> 4) < 0x7
-      && (time->minute & 0xf) < 0xa, -1);
-  g_return_val_if_fail ((time->second >> 4) < 0x7
-      && (time->second & 0xf) < 0xa, -1);
-
-  ret_time = ((time->hour >> 4) * 10 + (time->hour & 0xf)) * one_hour;
-  ret_time += ((time->minute >> 4) * 10 + (time->minute & 0xf)) * one_min;
-  ret_time += ((time->second >> 4) * 10 + (time->second & 0xf)) * GST_SECOND;
-
-  return ret_time;
-}
-
-static gboolean
-gst_dvd_read_src_do_duration_query (GstDvdReadSrc * src, GstQuery * query)
-{
-  GstFormat format;
-  gint64 val = 0;
-
-  gst_query_parse_duration (query, &format, NULL);
-
-  switch (format) {
-    case GST_FORMAT_TIME:{
-      if (src->cur_pgc == NULL)
-        return FALSE;
-      val = gst_dvd_read_src_convert_timecode (&src->cur_pgc->playback_time);
-      if (val < 0)
-        return FALSE;
-      break;
-    }
-    case GST_FORMAT_BYTES:{
-      if (!gst_dvd_read_src_get_size (src, &val))
-        return FALSE;
-      break;
-    }
-    default:{
-      if (format == sector_format) {
-        val = DVDFileSize (src->dvd_title);
-      } else if (format == title_format) {
-        val = src->tt_srpt->nr_of_srpts;
-      } else if (format == chapter_format) {
-        val = src->num_chapters;
-      } else if (format == angle_format) {
-        val = src->tt_srpt->title[src->title].nr_of_angles;
-      } else {
-        GST_DEBUG_OBJECT (src, "Don't know how to handle format %d (%s)",
-            format, gst_format_get_name (format));
-        return FALSE;
-      }
-      break;
-    }
-  }
-
-  GST_LOG_OBJECT (src, "duration = %" G_GINT64_FORMAT " %s", val,
-      gst_format_get_name (format));
-
-  gst_query_set_duration (query, format, val);
-  return TRUE;
-}
-
-static gboolean
-gst_dvd_read_src_do_position_query (GstDvdReadSrc * src, GstQuery * query)
-{
-  GstFormat format;
-  gint64 val;
-
-  gst_query_parse_position (query, &format, NULL);
-
-  switch (format) {
-    case GST_FORMAT_BYTES:{
-      val = (gint64) src->cur_pack * DVD_VIDEO_LB_LEN;
-      break;
-    }
-    default:{
-      if (format == sector_format) {
-        val = src->cur_pack;
-      } else if (format == title_format) {
-        val = src->title;
-      } else if (format == chapter_format) {
-        val = src->chapter;
-      } else if (format == angle_format) {
-        val = src->angle;
-      } else {
-        GST_DEBUG_OBJECT (src, "Don't know how to handle format %d (%s)",
-            format, gst_format_get_name (format));
-        return FALSE;
-      }
-      break;
-    }
-  }
-
-  GST_LOG_OBJECT (src, "position = %" G_GINT64_FORMAT " %s", val,
-      gst_format_get_name (format));
-
-  gst_query_set_position (query, format, val);
-  return TRUE;
-}
-
-static gboolean
-gst_dvd_read_src_do_convert_query (GstDvdReadSrc * src, GstQuery * query)
-{
-  GstFormat src_format, dest_format;
-  gboolean ret = FALSE;
-  gint64 src_val, dest_val = -1;
-
-  gst_query_parse_convert (query, &src_format, &src_val, &dest_format, NULL);
-
-  if (src_format == dest_format) {
-    dest_val = src_val;
-    ret = TRUE;
-    goto done;
-  }
-
-  /* Formats to consider: TIME, DEFAULT, BYTES, title, chapter, sector.
-   * Note: title and chapter are counted as starting from 0 here, just like
-   * in the context of seek events. Another note: DEFAULT format is undefined */
-
-  if (src_format == GST_FORMAT_BYTES) {
-    src_format = sector_format;
-    src_val /= DVD_VIDEO_LB_LEN;
-  }
-
-  if (src_format == sector_format) {
-    /* SECTOR => xyz */
-    if (dest_format == GST_FORMAT_TIME && src_val < G_MAXUINT) {
-      dest_val = gst_dvd_read_src_get_time_for_sector (src, (guint) src_val);
-      ret = (dest_val >= 0);
-    } else if (dest_format == GST_FORMAT_BYTES) {
-      dest_val = src_val * DVD_VIDEO_LB_LEN;
-      ret = TRUE;
-    } else {
-      ret = FALSE;
-    }
-  } else if (src_format == title_format) {
-    /* TITLE => xyz */
-    if (dest_format == GST_FORMAT_TIME) {
-      /* not really true, but we use this to trick the base source into
-       * handling seeks in title-format for us (the source won't know that
-       * we changed the title in this case) (changing titles should really
-       * be done with an interface rather than a seek, but for now we're
-       * stuck with this mechanism. Fix in 0.11) */
-      dest_val = (GstClockTime) 0;
-      ret = TRUE;
-    } else {
-      ret = FALSE;
-    }
-  } else if (src_format == chapter_format) {
-    /* CHAPTER => xyz */
-    if (dest_format == GST_FORMAT_TIME) {
-      if (src->num_chapters >= 0 && src_val < src->num_chapters) {
-        dest_val = src->chapter_starts[src_val];
-        ret = TRUE;
-      }
-    } else if (dest_format == sector_format) {
-    } else {
-      ret = FALSE;
-    }
-  } else if (src_format == GST_FORMAT_TIME) {
-    /* TIME => xyz */
-    if (dest_format == sector_format || dest_format == GST_FORMAT_BYTES) {
-      dest_val = gst_dvd_read_src_get_sector_from_time (src, src_val);
-      ret = (dest_val >= 0);
-      if (dest_format == GST_FORMAT_BYTES)
-        dest_val *= DVD_VIDEO_LB_LEN;
-    } else if (dest_format == chapter_format) {
-      if (src->chapter_starts != NULL) {
-        gint i;
-
-        for (i = src->num_chapters - 1; i >= 0; --i) {
-          if (src->chapter_starts && src->chapter_starts[i] >= src_val) {
-            dest_val = i;
-            ret = TRUE;
-            break;
-          }
-        }
-      } else {
-        ret = FALSE;
-      }
-    } else {
-      ret = FALSE;
-    }
-  } else {
-    ret = FALSE;
-  }
-
-done:
-
-  if (ret) {
-    gst_query_set_convert (query, src_format, src_val, dest_format, dest_val);
-  }
-
-  return ret;
-}
-
-static gboolean
-gst_dvd_read_src_src_query (GstBaseSrc * basesrc, GstQuery * query)
-{
-  GstDvdReadSrc *src = GST_DVD_READ_SRC (basesrc);
-  gboolean res = TRUE;
-
-  GST_LOG_OBJECT (src, "handling %s query", GST_QUERY_TYPE_NAME (query));
-
-  switch (GST_QUERY_TYPE (query)) {
-    case GST_QUERY_DURATION:
-      GST_OBJECT_LOCK (src);
-      if (GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED)) {
-        res = gst_dvd_read_src_do_duration_query (src, query);
-      } else {
-        GST_DEBUG_OBJECT (src, "query failed: not started");
-        res = FALSE;
-      }
-      GST_OBJECT_UNLOCK (src);
-      break;
-    case GST_QUERY_POSITION:
-      GST_OBJECT_LOCK (src);
-      if (GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED)) {
-        res = gst_dvd_read_src_do_position_query (src, query);
-      } else {
-        GST_DEBUG_OBJECT (src, "query failed: not started");
-        res = FALSE;
-      }
-      GST_OBJECT_UNLOCK (src);
-      break;
-    case GST_QUERY_CONVERT:
-      GST_OBJECT_LOCK (src);
-      if (GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED)) {
-        res = gst_dvd_read_src_do_convert_query (src, query);
-      } else {
-        GST_DEBUG_OBJECT (src, "query failed: not started");
-        res = FALSE;
-      }
-      GST_OBJECT_UNLOCK (src);
-      break;
-    default:
-      res = GST_BASE_SRC_CLASS (parent_class)->query (basesrc, query);
-      break;
-  }
-
-  return res;
-}
-
-static gboolean
-gst_dvd_read_src_goto_sector (GstDvdReadSrc * src, int angle)
-{
-  gint seek_to = src->cur_pack;
-  gint chapter, next, cur, i;
-
-  /* retrieve position */
-  src->cur_pack = 0;
-  GST_DEBUG_OBJECT (src, "Goto sector %d, angle %d, within %d chapters",
-      seek_to, angle, src->num_chapters);
-
-  for (i = 0; i < src->num_chapters; i++) {
-    gint c1, c2;
-
-    cur_title_get_chapter_bounds (src, i, &c1, &c2);
-    GST_DEBUG_OBJECT (src, " Looking in chapter %d, bounds: %d %d", i, c1, c2);
-
-    for (next = cur = c1; cur < c2;) {
-      gint first = src->cur_pgc->cell_playback[cur].first_sector;
-      gint last = src->cur_pgc->cell_playback[cur].last_sector;
-      GST_DEBUG_OBJECT (src, "Cell %d sector bounds: %d %d", cur, first, last);
-      cur = next;
-      if (src->cur_pgc->cell_playback[cur].block_type == BLOCK_TYPE_ANGLE_BLOCK)
-        cur += angle;
-      next = gst_dvd_read_src_get_next_cell (src, src->cur_pgc, cur);
-      /* seeking to 0 should end up at first chapter in any case */
-      if ((seek_to >= first && seek_to <= last) || (seek_to == 0 && i == 0)) {
-        GST_DEBUG_OBJECT (src, "Seek target found in chapter %d", i);
-        chapter = i;
-        goto done;
-      }
-    }
-  }
-
-  GST_DEBUG_OBJECT (src, "Seek to sector %u failed", seek_to);
-
-  return FALSE;
-
-done:
-  {
-    /* so chapter $chapter and cell $cur contain our sector
-     * of interest. Let's go there! */
-    GST_INFO_OBJECT (src, "Seek succeeded, going to chapter %u, cell %u",
-        chapter + 1, cur);
-
-    gst_dvd_read_src_goto_chapter (src, chapter);
-    src->cur_cell = cur;
-    src->next_cell = next;
-    src->new_cell = FALSE;
-    src->cur_pack = seek_to;
-
-    return TRUE;
-  }
-}
-
-
-/*** URI interface ***/
-
-static GstURIType
-gst_dvd_read_src_uri_get_type (GType type)
-{
-  return GST_URI_SRC;
-}
-
-static const gchar *const *
-gst_dvd_read_src_uri_get_protocols (GType type)
-{
-  static const gchar *protocols[] = { "dvd", NULL };
-
-  return protocols;
-}
-
-static gchar *
-gst_dvd_read_src_uri_get_uri (GstURIHandler * handler)
-{
-  GstDvdReadSrc *src = GST_DVD_READ_SRC (handler);
-  gchar *uri;
-
-  GST_OBJECT_LOCK (src);
-  uri = g_strdup_printf ("dvd://%d,%d,%d", src->uri_title, src->uri_chapter,
-      src->uri_angle);
-  GST_OBJECT_UNLOCK (src);
-
-  return uri;
-}
-
-static gboolean
-gst_dvd_read_src_uri_set_uri (GstURIHandler * handler, const gchar * uri,
-    GError ** error)
-{
-  GstDvdReadSrc *src = GST_DVD_READ_SRC (handler);
-
-  /* parse out the new t/c/a and seek to them */
-  {
-    gchar *location = NULL;
-    gchar **strs;
-    gchar **strcur;
-    gint pos = 0;
-
-    location = gst_uri_get_location (uri);
-
-    GST_OBJECT_LOCK (src);
-
-    src->uri_title = 1;
-    src->uri_chapter = 1;
-    src->uri_angle = 1;
-
-    if (!location)
-      goto empty_location;
-
-    strcur = strs = g_strsplit (location, ",", 0);
-    while (strcur && *strcur) {
-      gint val;
-
-      if (!sscanf (*strcur, "%d", &val))
-        break;
-
-      if (val <= 0) {
-        g_warning ("Invalid value %d in URI '%s'. Must be 1 or greater",
-            val, location);
-        break;
-      }
-
-      switch (pos) {
-        case 0:
-          src->uri_title = val;
-          break;
-        case 1:
-          src->uri_chapter = val;
-          break;
-        case 2:
-          src->uri_angle = val;
-          break;
-      }
-
-      strcur++;
-      pos++;
-    }
-
-    if (pos > 0 && GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED)) {
-      src->title = src->uri_title - 1;
-      src->chapter = src->uri_chapter - 1;
-      src->angle = src->uri_angle - 1;
-      src->new_seek = TRUE;
-    }
-
-    g_strfreev (strs);
-    g_free (location);
-
-  empty_location:
-
-    GST_OBJECT_UNLOCK (src);
-  }
-
-  return TRUE;
-}
-
-static void
-gst_dvd_read_src_uri_handler_init (gpointer g_iface, gpointer iface_data)
-{
-  GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface;
-
-  iface->get_type = gst_dvd_read_src_uri_get_type;
-  iface->get_protocols = gst_dvd_read_src_uri_get_protocols;
-  iface->get_uri = gst_dvd_read_src_uri_get_uri;
-  iface->set_uri = gst_dvd_read_src_uri_set_uri;
-}
-
-static gboolean
-dvdread_element_init (GstPlugin * plugin)
-{
-  GST_DEBUG_CATEGORY_INIT (gstgst_dvd_read_src_debug, "dvdreadsrc", 0,
-      "DVD reader element based on dvdreadsrc");
-
-#ifdef ENABLE_NLS
-  GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE,
-      LOCALEDIR);
-  bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
-  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-#endif /* ENABLE_NLS */
-  return gst_element_register (plugin, "dvdreadsrc", GST_RANK_NONE,
-      GST_TYPE_DVD_READ_SRC);
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  return GST_ELEMENT_REGISTER (dvdreadsrc, plugin);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    dvdread,
-    "Access a DVD with dvdread",
-    plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
diff --git a/ext/dvdread/dvdreadsrc.h b/ext/dvdread/dvdreadsrc.h
deleted file mode 100644 (file)
index d31c961..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/* GStreamer DVD title source
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) <2001> Billy Biggs <vektor@dumbterm.net>.
- * Copyright (C) <2006> Tim-Philipp Müller <tim centricular net>
- *
- * 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_DVD_READ_SRC_H__
-#define __GST_DVD_READ_SRC_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstpushsrc.h>
-
-#include <dvdread/dvd_reader.h>
-#include <dvdread/ifo_types.h>
-#include <dvdread/ifo_read.h>
-#include <dvdread/nav_read.h>
-#include <dvdread/nav_print.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_DVD_READ_SRC            (gst_dvd_read_src_get_type())
-#define GST_DVD_READ_SRC(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DVD_READ_SRC,GstDvdReadSrc))
-#define GST_DVD_READ_SRC_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DVD_READ_SRC,GstDvdReadSrcClass))
-#define GST_IS_DVD_READ_SRC(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DVD_READ_SRC))
-#define GST_IS_DVD_READ_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DVD_READ_SRC))
-
-typedef struct _GstDvdReadSrc GstDvdReadSrc;
-typedef struct _GstDvdReadSrcClass GstDvdReadSrcClass;
-
-struct _GstDvdReadSrc {
-  GstPushSrc       pushsrc;
-
-  /* location */
-  gchar           *location;
-
-  gboolean         first_seek;
-  gboolean         new_seek;
-  gboolean         change_cell;
-
-  gboolean         new_cell;
-
-  gint             uri_title;     /* set via the URI handler or properties,  */
-  gint             uri_chapter;   /* otherwise not touched; these values     */
-  gint             uri_angle;     /* start from 1                            */
-
-  gint             title;         /* current position while open, set to the */
-  gint             chapter;       /* URI-set values in ::start(). these      */
-  gint             angle;         /* values start from 0                     */
-
-  gint             start_cell, last_cell, cur_cell;
-  gint             cur_pack;
-  gint             next_cell;
-  dvd_reader_t    *dvd;
-  ifo_handle_t    *vmg_file;
-
-  /* title stuff */
-  gint             ttn;
-  tt_srpt_t       *tt_srpt;
-  ifo_handle_t    *vts_file;
-  vts_ptt_srpt_t  *vts_ptt_srpt;
-  vts_tmapt_t     *vts_tmapt;
-  dvd_file_t      *dvd_title;
-  gint             num_chapters;
-  gint             num_angles;
-
-  GstClockTime    *chapter_starts;  /* start time of chapters within title   */
-
-  /* which program chain to watch (based on title and chapter number) */
-  pgc_t           *cur_pgc;
-  gint             pgc_id;
-  gint             pgn;
-
-  gboolean         need_newsegment;
-  GstEvent        *title_lang_event_pending;
-  GstEvent        *pending_clut_event;
-};
-
-struct _GstDvdReadSrcClass {
-  GstPushSrcClass parent_class;
-};
-
-GType gst_dvd_read_src_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (dvdreadsrc);
-
-G_END_DECLS
-
-#endif /* __GST_DVD_READ_SRC_H__ */
-
diff --git a/ext/dvdread/meson.build b/ext/dvdread/meson.build
deleted file mode 100644 (file)
index f075d84..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-dvdread_dep = dependency('dvdread', version : '>= 0.5.0', required : get_option('dvdread'))
-
-if gmodule_dep.found() and dvdread_dep.found()
-  dvdread = library('gstdvdread',
-    ['dvdreadsrc.c'],
-    c_args : ugly_args,
-    include_directories : [configinc, libsinc],
-    dependencies : [gstbase_dep, gmodule_dep, dvdread_dep],
-    install : true,
-    install_dir : plugins_install_dir,
-  )
-  pkgconfig.generate(dvdread, install_dir : plugins_pkgconfig_install_dir)
-  plugins += [dvdread]
-endif
diff --git a/ext/meson.build b/ext/meson.build
deleted file mode 100644 (file)
index c33bb1c..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-subdir('a52dec')
-subdir('amrnb')
-subdir('amrwbdec')
-subdir('cdio')
-subdir('dvdread')
-subdir('mpeg2dec')
-subdir('sidplay')
-subdir('x264')
diff --git a/ext/mpeg2dec/gstmpeg2dec.c b/ext/mpeg2dec/gstmpeg2dec.c
deleted file mode 100644 (file)
index 12b3cac..0000000
+++ /dev/null
@@ -1,1180 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <string.h>
-
-#include <inttypes.h>
-
-#include "gstmpeg2dec.h"
-
-#include <gst/video/gstvideometa.h>
-#include <gst/video/gstvideopool.h>
-
-/* 16byte-aligns a buffer for libmpeg2 */
-#define ALIGN_16(p) ((void *)(((uintptr_t)(p) + 15) & ~((uintptr_t)15)))
-
-GST_DEBUG_CATEGORY_STATIC (mpeg2dec_debug);
-#define GST_CAT_DEFAULT mpeg2dec_debug
-GST_DEBUG_CATEGORY_STATIC (CAT_PERFORMANCE);
-
-/* Send a warning message about decoding errors after receiving this many
- * STATE_INVALID return values from mpeg2_parse. -1 means never.
- */
-#define WARN_THRESHOLD (5)
-
-static GstStaticPadTemplate sink_template_factory =
-GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/mpeg, "
-        "mpegversion = (int) [ 1, 2 ], " "systemstream = (boolean) false")
-    );
-
-static GstStaticPadTemplate src_template_factory =
-GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/x-raw, "
-        "format = (string) { YV12, I420, Y42B, Y444 }, "
-        "width = (int) [ 16, 4096 ], "
-        "height = (int) [ 16, 4096 ], "
-        "framerate = (fraction) [ 0/1, 2147483647/1 ]")
-    );
-
-#define gst_mpeg2dec_parent_class parent_class
-G_DEFINE_TYPE (GstMpeg2dec, gst_mpeg2dec, GST_TYPE_VIDEO_DECODER);
-GST_ELEMENT_REGISTER_DEFINE (mpeg2dec, "mpeg2dec", GST_RANK_SECONDARY,
-    GST_TYPE_MPEG2DEC);
-
-static void gst_mpeg2dec_finalize (GObject * object);
-
-/* GstVideoDecoder base class method */
-static gboolean gst_mpeg2dec_open (GstVideoDecoder * decoder);
-static gboolean gst_mpeg2dec_close (GstVideoDecoder * decoder);
-static gboolean gst_mpeg2dec_start (GstVideoDecoder * decoder);
-static gboolean gst_mpeg2dec_stop (GstVideoDecoder * decoder);
-static gboolean gst_mpeg2dec_set_format (GstVideoDecoder * decoder,
-    GstVideoCodecState * state);
-static gboolean gst_mpeg2dec_flush (GstVideoDecoder * decoder);
-static GstFlowReturn gst_mpeg2dec_finish (GstVideoDecoder * decoder);
-static GstFlowReturn gst_mpeg2dec_handle_frame (GstVideoDecoder * decoder,
-    GstVideoCodecFrame * frame);
-static gboolean gst_mpeg2dec_decide_allocation (GstVideoDecoder * decoder,
-    GstQuery * query);
-
-static void gst_mpeg2dec_clear_buffers (GstMpeg2dec * mpeg2dec);
-static gboolean gst_mpeg2dec_crop_buffer (GstMpeg2dec * dec,
-    GstVideoCodecFrame * in_frame, GstVideoFrame * in_vframe);
-
-static void
-gst_mpeg2dec_class_init (GstMpeg2decClass * klass)
-{
-  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-  GstVideoDecoderClass *video_decoder_class = GST_VIDEO_DECODER_CLASS (klass);
-
-  gobject_class->finalize = gst_mpeg2dec_finalize;
-
-  gst_element_class_add_static_pad_template (element_class,
-      &src_template_factory);
-  gst_element_class_add_static_pad_template (element_class,
-      &sink_template_factory);
-  gst_element_class_set_static_metadata (element_class,
-      "mpeg1 and mpeg2 video decoder", "Codec/Decoder/Video",
-      "Uses libmpeg2 to decode MPEG video streams",
-      "Wim Taymans <wim.taymans@chello.be>");
-
-  video_decoder_class->open = GST_DEBUG_FUNCPTR (gst_mpeg2dec_open);
-  video_decoder_class->close = GST_DEBUG_FUNCPTR (gst_mpeg2dec_close);
-  video_decoder_class->start = GST_DEBUG_FUNCPTR (gst_mpeg2dec_start);
-  video_decoder_class->stop = GST_DEBUG_FUNCPTR (gst_mpeg2dec_stop);
-  video_decoder_class->flush = GST_DEBUG_FUNCPTR (gst_mpeg2dec_flush);
-  video_decoder_class->set_format = GST_DEBUG_FUNCPTR (gst_mpeg2dec_set_format);
-  video_decoder_class->handle_frame =
-      GST_DEBUG_FUNCPTR (gst_mpeg2dec_handle_frame);
-  video_decoder_class->finish = GST_DEBUG_FUNCPTR (gst_mpeg2dec_finish);
-  video_decoder_class->decide_allocation =
-      GST_DEBUG_FUNCPTR (gst_mpeg2dec_decide_allocation);
-
-  GST_DEBUG_CATEGORY_INIT (mpeg2dec_debug, "mpeg2dec", 0,
-      "MPEG-2 Video Decoder");
-  GST_DEBUG_CATEGORY_GET (CAT_PERFORMANCE, "GST_PERFORMANCE");
-}
-
-static void
-gst_mpeg2dec_init (GstMpeg2dec * mpeg2dec)
-{
-  gst_video_decoder_set_packetized (GST_VIDEO_DECODER (mpeg2dec), TRUE);
-  gst_video_decoder_set_needs_format (GST_VIDEO_DECODER (mpeg2dec), TRUE);
-  gst_video_decoder_set_use_default_pad_acceptcaps (GST_VIDEO_DECODER_CAST
-      (mpeg2dec), TRUE);
-  GST_PAD_SET_ACCEPT_TEMPLATE (GST_VIDEO_DECODER_SINK_PAD (mpeg2dec));
-
-  /* initialize the mpeg2dec acceleration */
-}
-
-static void
-gst_mpeg2dec_finalize (GObject * object)
-{
-  GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (object);
-
-  if (mpeg2dec->decoder) {
-    GST_DEBUG_OBJECT (mpeg2dec, "closing decoder");
-    mpeg2_close (mpeg2dec->decoder);
-    mpeg2dec->decoder = NULL;
-  }
-
-  gst_mpeg2dec_clear_buffers (mpeg2dec);
-  g_free (mpeg2dec->dummybuf[3]);
-  mpeg2dec->dummybuf[3] = NULL;
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static gboolean
-gst_mpeg2dec_open (GstVideoDecoder * decoder)
-{
-  GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
-
-  mpeg2_accel (MPEG2_ACCEL_DETECT);
-  if ((mpeg2dec->decoder = mpeg2_init ()) == NULL)
-    return FALSE;
-  mpeg2dec->info = mpeg2_info (mpeg2dec->decoder);
-
-  return TRUE;
-}
-
-static gboolean
-gst_mpeg2dec_close (GstVideoDecoder * decoder)
-{
-  GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
-
-  if (mpeg2dec->decoder) {
-    mpeg2_close (mpeg2dec->decoder);
-    mpeg2dec->decoder = NULL;
-    mpeg2dec->info = NULL;
-  }
-  gst_mpeg2dec_clear_buffers (mpeg2dec);
-
-  return TRUE;
-}
-
-static gboolean
-gst_mpeg2dec_set_format (GstVideoDecoder * decoder, GstVideoCodecState * state)
-{
-  GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
-
-  /* Save input state to be used as reference for output state */
-  if (mpeg2dec->input_state)
-    gst_video_codec_state_unref (mpeg2dec->input_state);
-  mpeg2dec->input_state = gst_video_codec_state_ref (state);
-
-  return TRUE;
-}
-
-static gboolean
-gst_mpeg2dec_start (GstVideoDecoder * decoder)
-{
-  GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
-
-  mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_PICTURE;
-
-  return TRUE;
-}
-
-static gboolean
-gst_mpeg2dec_stop (GstVideoDecoder * decoder)
-{
-  GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
-
-  mpeg2_reset (mpeg2dec->decoder, 0);
-  mpeg2_skip (mpeg2dec->decoder, 1);
-
-  gst_mpeg2dec_clear_buffers (mpeg2dec);
-
-  if (mpeg2dec->input_state)
-    gst_video_codec_state_unref (mpeg2dec->input_state);
-  mpeg2dec->input_state = NULL;
-
-  if (mpeg2dec->downstream_pool) {
-    gst_buffer_pool_set_active (mpeg2dec->downstream_pool, FALSE);
-    gst_object_unref (mpeg2dec->downstream_pool);
-  }
-
-  return TRUE;
-}
-
-static gboolean
-gst_mpeg2dec_flush (GstVideoDecoder * decoder)
-{
-  GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
-
-  /* reset the initial video state */
-  mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_PICTURE;
-  mpeg2_reset (mpeg2dec->decoder, 1);
-  mpeg2_skip (mpeg2dec->decoder, 1);
-
-  gst_mpeg2dec_clear_buffers (mpeg2dec);
-
-  if (mpeg2dec->downstream_pool)
-    gst_buffer_pool_set_active (mpeg2dec->downstream_pool, FALSE);
-
-  return TRUE;
-}
-
-static GstFlowReturn
-gst_mpeg2dec_finish (GstVideoDecoder * decoder)
-{
-  return GST_FLOW_OK;
-}
-
-static GstBufferPool *
-gst_mpeg2dec_create_generic_pool (GstAllocator * allocator,
-    GstAllocationParams * params, GstCaps * caps, guint size, guint min,
-    guint max, GstStructure ** out_config)
-{
-  GstBufferPool *pool;
-  GstStructure *config;
-
-  pool = gst_video_buffer_pool_new ();
-  config = gst_buffer_pool_get_config (pool);
-
-  gst_buffer_pool_config_set_allocator (config, allocator, params);
-  gst_buffer_pool_config_set_params (config, caps, size, min, max);
-  gst_buffer_pool_config_add_option (config, GST_BUFFER_POOL_OPTION_VIDEO_META);
-
-  *out_config = config;
-  return pool;
-}
-
-static gboolean
-gst_mpeg2dec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query)
-{
-  GstMpeg2dec *dec = GST_MPEG2DEC (decoder);
-  GstBufferPool *pool;
-  guint size, min, max;
-  GstStructure *config, *down_config = NULL;
-  GstAllocator *allocator;
-  GstAllocationParams params;
-  gboolean update_allocator;
-  gboolean has_videometa = FALSE;
-  GstCaps *caps;
-
-  /* Get rid of ancient pool */
-  if (dec->downstream_pool) {
-    gst_buffer_pool_set_active (dec->downstream_pool, FALSE);
-    gst_object_unref (dec->downstream_pool);
-    dec->downstream_pool = NULL;
-  }
-
-  /* Get negotiated allocation caps */
-  gst_query_parse_allocation (query, &caps, NULL);
-
-  /* Set allocation parameters to guarantee 16-byte aligned output buffers */
-  if (gst_query_get_n_allocation_params (query) > 0) {
-    gst_query_parse_nth_allocation_param (query, 0, &allocator, &params);
-    update_allocator = TRUE;
-  } else {
-    allocator = NULL;
-    gst_allocation_params_init (&params);
-    update_allocator = FALSE;
-  }
-
-  params.align = MAX (params.align, 15);
-
-  if (update_allocator)
-    gst_query_set_nth_allocation_param (query, 0, allocator, &params);
-  else
-    gst_query_add_allocation_param (query, allocator, &params);
-
-  /* Now chain up to the parent class to guarantee that we can
-   * get a buffer pool from the query */
-  if (!GST_VIDEO_DECODER_CLASS (parent_class)->decide_allocation (decoder,
-          query)) {
-    if (allocator)
-      gst_object_unref (allocator);
-    return FALSE;
-  }
-
-  gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max);
-
-  config = gst_buffer_pool_get_config (pool);
-  if (gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL)) {
-    gst_buffer_pool_config_add_option (config,
-        GST_BUFFER_POOL_OPTION_VIDEO_META);
-    has_videometa = TRUE;
-  }
-
-  if (dec->need_alignment) {
-    /* If downstream does not support video meta, we will have to copy, keep
-     * the downstream pool to avoid double copying */
-    if (!has_videometa) {
-      dec->downstream_pool = pool;
-      pool = NULL;
-      down_config = config;
-      config = NULL;
-      min = 2;
-      max = 0;
-    }
-
-    /* In case downstream support video meta, but the downstream pool does not
-     * have alignment support, discard downstream pool and use video pool */
-    else if (!gst_buffer_pool_has_option (pool,
-            GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT)) {
-      gst_object_unref (pool);
-      pool = NULL;
-      gst_structure_free (config);
-      config = NULL;
-    }
-
-    if (!pool)
-      pool = gst_mpeg2dec_create_generic_pool (allocator, &params, caps, size,
-          min, max, &config);
-
-    gst_buffer_pool_config_add_option (config,
-        GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
-    gst_buffer_pool_config_set_video_alignment (config, &dec->valign);
-  }
-
-  if (allocator)
-    gst_object_unref (allocator);
-
-  /* If we are copying out, we'll need to setup and activate the other pool */
-  if (dec->downstream_pool) {
-    if (!gst_buffer_pool_set_config (dec->downstream_pool, down_config)) {
-      down_config = gst_buffer_pool_get_config (dec->downstream_pool);
-      if (!gst_buffer_pool_config_validate_params (down_config, caps, size, min,
-              max)) {
-        gst_structure_free (down_config);
-        goto config_failed;
-      }
-
-      if (!gst_buffer_pool_set_config (dec->downstream_pool, down_config))
-        goto config_failed;
-    }
-
-    if (!gst_buffer_pool_set_active (dec->downstream_pool, TRUE))
-      goto activate_failed;
-  }
-
-  /* Now configure the pool, if the pool had made some changes, it will
-   * return FALSE. Validate the changes ...*/
-  if (!gst_buffer_pool_set_config (pool, config)) {
-    config = gst_buffer_pool_get_config (pool);
-
-    /* Check basic params */
-    if (!gst_buffer_pool_config_validate_params (config, caps, size, min, max)) {
-      gst_structure_free (config);
-      goto config_failed;
-    }
-
-    /* If needed, check that resulting alignment is still valid */
-    if (dec->need_alignment) {
-      GstVideoAlignment valign;
-
-      if (!gst_buffer_pool_config_get_video_alignment (config, &valign)) {
-        gst_structure_free (config);
-        goto config_failed;
-      }
-
-      if (valign.padding_left != 0 || valign.padding_top != 0
-          || valign.padding_right < dec->valign.padding_right
-          || valign.padding_bottom < dec->valign.padding_bottom) {
-        gst_structure_free (config);
-        goto config_failed;
-      }
-    }
-
-    if (!gst_buffer_pool_set_config (pool, config))
-      goto config_failed;
-  }
-
-  /* For external pools, we need to check strides */
-  if (!GST_IS_VIDEO_BUFFER_POOL (pool) && has_videometa) {
-    GstBuffer *buffer;
-    const GstVideoFormatInfo *finfo;
-    GstVideoMeta *vmeta;
-    gint uv_stride;
-
-    if (!gst_buffer_pool_set_active (pool, TRUE))
-      goto activate_failed;
-
-    if (gst_buffer_pool_acquire_buffer (pool, &buffer, NULL) != GST_FLOW_OK) {
-      gst_buffer_pool_set_active (pool, FALSE);
-      goto acquire_failed;
-    }
-
-    vmeta = gst_buffer_get_video_meta (buffer);
-    finfo = gst_video_format_get_info (vmeta->format);
-
-    /* Check that strides are compatible. In this case, we can scale the
-     * stride directly since all the pixel strides for the formats we support
-     * is 1 */
-    uv_stride = GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (finfo, 1, vmeta->stride[0]);
-    if (uv_stride != vmeta->stride[1] || uv_stride != vmeta->stride[2]) {
-      gst_buffer_pool_set_active (pool, FALSE);
-      gst_object_unref (pool);
-
-      pool = gst_mpeg2dec_create_generic_pool (allocator, &params, caps, size,
-          min, max, &config);
-
-      if (dec->need_alignment) {
-        gst_buffer_pool_config_add_option (config,
-            GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
-        gst_buffer_pool_config_set_video_alignment (config, &dec->valign);
-      }
-
-      /* Generic pool don't fail on _set_config() */
-      gst_buffer_pool_set_config (pool, config);
-    }
-
-    gst_buffer_unref (buffer);
-  }
-
-  gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max);
-  gst_object_unref (pool);
-
-  return TRUE;
-
-config_failed:
-  gst_object_unref (pool);
-  GST_ELEMENT_ERROR (dec, RESOURCE, SETTINGS,
-      ("Failed to configure buffer pool"),
-      ("Configuration is most likely invalid, please report this issue."));
-  return FALSE;
-
-activate_failed:
-  gst_object_unref (pool);
-  GST_ELEMENT_ERROR (dec, RESOURCE, SETTINGS,
-      ("Failed to activate buffer pool"), (NULL));
-  return FALSE;
-
-acquire_failed:
-  gst_object_unref (pool);
-  GST_ELEMENT_ERROR (dec, RESOURCE, SETTINGS,
-      ("Failed to acquire a buffer"), (NULL));
-  return FALSE;
-}
-
-static GstFlowReturn
-gst_mpeg2dec_crop_buffer (GstMpeg2dec * dec, GstVideoCodecFrame * in_frame,
-    GstVideoFrame * input_vframe)
-{
-  GstVideoCodecState *state;
-  GstVideoInfo *info;
-  GstVideoInfo *dinfo;
-  GstVideoFrame output_frame;
-  GstFlowReturn ret;
-  GstBuffer *buffer = NULL;
-
-  state = gst_video_decoder_get_output_state (GST_VIDEO_DECODER (dec));
-  info = &state->info;
-  dinfo = &dec->decoded_info;
-
-  GST_CAT_LOG_OBJECT (CAT_PERFORMANCE, dec,
-      "Copying input buffer %ux%u (%" G_GSIZE_FORMAT ") to output buffer "
-      "%ux%u (%" G_GSIZE_FORMAT ")", dinfo->width, dinfo->height,
-      dinfo->size, info->width, info->height, info->size);
-
-  ret = gst_buffer_pool_acquire_buffer (dec->downstream_pool, &buffer, NULL);
-  if (ret != GST_FLOW_OK)
-    goto beach;
-
-  if (!gst_video_frame_map (&output_frame, info, buffer, GST_MAP_WRITE))
-    goto map_fail;
-
-  if (in_frame->output_buffer)
-    gst_buffer_unref (in_frame->output_buffer);
-  in_frame->output_buffer = buffer;
-
-  if (!gst_video_frame_copy (&output_frame, input_vframe))
-    goto copy_failed;
-
-  gst_video_frame_unmap (&output_frame);
-
-  GST_BUFFER_FLAGS (in_frame->output_buffer) =
-      GST_BUFFER_FLAGS (input_vframe->buffer);
-
-beach:
-  gst_video_codec_state_unref (state);
-
-  return ret;
-
-map_fail:
-  {
-    GST_ERROR_OBJECT (dec, "Failed to map output frame");
-    gst_video_codec_state_unref (state);
-    return GST_FLOW_ERROR;
-  }
-
-copy_failed:
-  {
-    GST_ERROR_OBJECT (dec, "Failed to copy output frame");
-    gst_video_frame_unmap (&output_frame);
-    gst_video_codec_state_unref (state);
-    return GST_FLOW_ERROR;
-  }
-}
-
-typedef struct
-{
-  gint id;
-  GstVideoFrame frame;
-} GstMpeg2DecBuffer;
-
-static void
-gst_mpeg2dec_clear_buffers (GstMpeg2dec * mpeg2dec)
-{
-  GList *l;
-  while ((l = g_list_first (mpeg2dec->buffers))) {
-    GstMpeg2DecBuffer *mbuf = l->data;
-    gst_video_frame_unmap (&mbuf->frame);
-    g_slice_free (GstMpeg2DecBuffer, mbuf);
-    mpeg2dec->buffers = g_list_delete_link (mpeg2dec->buffers, l);
-  }
-}
-
-static void
-gst_mpeg2dec_save_buffer (GstMpeg2dec * mpeg2dec, gint id,
-    GstVideoFrame * frame)
-{
-  GstMpeg2DecBuffer *mbuf;
-
-  GST_LOG_OBJECT (mpeg2dec, "Saving local info for frame %d", id);
-
-  mbuf = g_slice_new0 (GstMpeg2DecBuffer);
-  mbuf->id = id;
-  mbuf->frame = *frame;
-
-  mpeg2dec->buffers = g_list_prepend (mpeg2dec->buffers, mbuf);
-}
-
-static gint
-gst_mpeg2dec_buffer_compare (GstMpeg2DecBuffer * mbuf, gconstpointer id)
-{
-  if (mbuf->id == GPOINTER_TO_INT (id))
-    return 0;
-  return -1;
-}
-
-static void
-gst_mpeg2dec_discard_buffer (GstMpeg2dec * mpeg2dec, gint id)
-{
-  GList *l = g_list_find_custom (mpeg2dec->buffers, GINT_TO_POINTER (id),
-      (GCompareFunc) gst_mpeg2dec_buffer_compare);
-
-  if (l) {
-    GstMpeg2DecBuffer *mbuf = l->data;
-    gst_video_frame_unmap (&mbuf->frame);
-    g_slice_free (GstMpeg2DecBuffer, mbuf);
-    mpeg2dec->buffers = g_list_delete_link (mpeg2dec->buffers, l);
-    GST_LOG_OBJECT (mpeg2dec, "Discarded local info for frame %d", id);
-  } else {
-    GST_WARNING ("Could not find buffer %d, will be leaked until next reset",
-        id);
-  }
-}
-
-static GstVideoFrame *
-gst_mpeg2dec_get_buffer (GstMpeg2dec * mpeg2dec, gint id)
-{
-  GList *l = g_list_find_custom (mpeg2dec->buffers, GINT_TO_POINTER (id),
-      (GCompareFunc) gst_mpeg2dec_buffer_compare);
-
-  if (l) {
-    GstMpeg2DecBuffer *mbuf = l->data;
-    return &mbuf->frame;
-  }
-
-  return NULL;
-}
-
-static void
-init_dummybuf (GstMpeg2dec * mpeg2dec)
-{
-  g_free (mpeg2dec->dummybuf[3]);
-
-  /* libmpeg2 needs 16 byte aligned buffers... care for this here */
-  mpeg2dec->dummybuf[3] = g_malloc0 (mpeg2dec->decoded_info.size + 15);
-  mpeg2dec->dummybuf[0] = ALIGN_16 (mpeg2dec->dummybuf[3]);
-  mpeg2dec->dummybuf[1] =
-      mpeg2dec->dummybuf[0] +
-      GST_VIDEO_INFO_PLANE_OFFSET (&mpeg2dec->decoded_info, 1);
-  mpeg2dec->dummybuf[2] =
-      mpeg2dec->dummybuf[0] +
-      GST_VIDEO_INFO_PLANE_OFFSET (&mpeg2dec->decoded_info, 2);
-}
-
-static GstFlowReturn
-handle_sequence (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info)
-{
-  GstFlowReturn ret = GST_FLOW_OK;
-  GstClockTime latency;
-  const mpeg2_sequence_t *sequence;
-  GstVideoCodecState *state;
-  GstVideoInfo *vinfo;
-  GstVideoFormat format;
-
-  sequence = info->sequence;
-
-  if (sequence->frame_period == 0)
-    goto invalid_frame_period;
-
-  /* mpeg2 video can only be from 16x16 to 4096x4096. Everything
-   * else is a corrupted file */
-  if (sequence->width > 4096 || sequence->width < 16 ||
-      sequence->height > 4096 || sequence->height < 16)
-    goto invalid_size;
-
-  GST_DEBUG_OBJECT (mpeg2dec,
-      "widthxheight: %dx%d , decoded_widthxheight: %dx%d",
-      sequence->picture_width, sequence->picture_height, sequence->width,
-      sequence->height);
-
-  gst_video_alignment_reset (&mpeg2dec->valign);
-
-  if (sequence->picture_width < sequence->width ||
-      sequence->picture_height < sequence->height) {
-    GST_DEBUG_OBJECT (mpeg2dec, "we need to crop");
-    mpeg2dec->valign.padding_right = sequence->width - sequence->picture_width;
-    mpeg2dec->valign.padding_bottom =
-        sequence->height - sequence->picture_height;
-    mpeg2dec->need_alignment = TRUE;
-  } else if (sequence->picture_width == sequence->width ||
-      sequence->picture_height == sequence->height) {
-    GST_DEBUG_OBJECT (mpeg2dec, "no cropping needed");
-    mpeg2dec->need_alignment = FALSE;
-  } else {
-    goto invalid_picture;
-  }
-
-  /* get subsampling */
-  if (sequence->chroma_width < sequence->width) {
-    /* horizontally subsampled */
-    if (sequence->chroma_height < sequence->height) {
-      /* and vertically subsamples */
-      format = GST_VIDEO_FORMAT_I420;
-    } else {
-      format = GST_VIDEO_FORMAT_Y42B;
-    }
-  } else {
-    /* not subsampled */
-    format = GST_VIDEO_FORMAT_Y444;
-  }
-
-  state = gst_video_decoder_set_output_state (GST_VIDEO_DECODER (mpeg2dec),
-      format, sequence->picture_width, sequence->picture_height,
-      mpeg2dec->input_state);
-  vinfo = &state->info;
-
-  /* If we don't have a valid upstream PAR override it */
-  if (GST_VIDEO_INFO_PAR_N (vinfo) == 1 &&
-      GST_VIDEO_INFO_PAR_D (vinfo) == 1 &&
-      sequence->pixel_width != 0 && sequence->pixel_height != 0) {
-    guint pixel_width, pixel_height;
-
-    if (mpeg2_guess_aspect (sequence, &pixel_width, &pixel_height)) {
-      vinfo->par_n = pixel_width;
-      vinfo->par_d = pixel_height;
-    }
-    GST_DEBUG_OBJECT (mpeg2dec, "Setting PAR %d x %d",
-        vinfo->par_n, vinfo->par_d);
-  }
-  vinfo->fps_n = 27000000;
-  vinfo->fps_d = sequence->frame_period;
-
-  if (!(sequence->flags & SEQ_FLAG_PROGRESSIVE_SEQUENCE))
-    vinfo->interlace_mode = GST_VIDEO_INTERLACE_MODE_MIXED;
-  else
-    vinfo->interlace_mode = GST_VIDEO_INTERLACE_MODE_PROGRESSIVE;
-
-  vinfo->chroma_site = GST_VIDEO_CHROMA_SITE_MPEG2;
-  vinfo->colorimetry.range = GST_VIDEO_COLOR_RANGE_16_235;
-
-  if (sequence->flags & SEQ_FLAG_COLOUR_DESCRIPTION) {
-    /* do color description */
-    switch (sequence->colour_primaries) {
-      case 1:
-        vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT709;
-        break;
-      case 4:
-        vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT470M;
-        break;
-      case 5:
-        vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT470BG;
-        break;
-      case 6:
-        vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_SMPTE170M;
-        break;
-      case 7:
-        vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_SMPTE240M;
-        break;
-        /* 0 forbidden */
-        /* 2 unspecified */
-        /* 3 reserved */
-        /* 8-255 reserved */
-      default:
-        vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_UNKNOWN;
-        break;
-    }
-    /* matrix coefficients */
-    switch (sequence->matrix_coefficients) {
-      case 1:
-        vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_BT709;
-        break;
-      case 4:
-        vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_FCC;
-        break;
-      case 5:
-      case 6:
-        vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_BT601;
-        break;
-      case 7:
-        vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_SMPTE240M;
-        break;
-        /* 0 forbidden */
-        /* 2 unspecified */
-        /* 3 reserved */
-        /* 8-255 reserved */
-      default:
-        vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_UNKNOWN;
-        break;
-    }
-    /* transfer characteristics */
-    switch (sequence->transfer_characteristics) {
-      case 1:
-        vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_BT709;
-        break;
-      case 4:
-        vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_GAMMA22;
-        break;
-      case 5:
-        vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_GAMMA28;
-        break;
-      case 6:
-        vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_BT709;
-        break;
-      case 7:
-        vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_SMPTE240M;
-        break;
-      case 8:
-        vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_GAMMA10;
-        break;
-        /* 0 forbidden */
-        /* 2 unspecified */
-        /* 3 reserved */
-        /* 9-255 reserved */
-      default:
-        vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_UNKNOWN;
-        break;
-    }
-  }
-
-  GST_DEBUG_OBJECT (mpeg2dec,
-      "sequence flags: %d, frame period: %d, frame rate: %d/%d",
-      sequence->flags, sequence->frame_period, vinfo->fps_n, vinfo->fps_d);
-  GST_DEBUG_OBJECT (mpeg2dec, "profile: %02x, colour_primaries: %d",
-      sequence->profile_level_id, sequence->colour_primaries);
-  GST_DEBUG_OBJECT (mpeg2dec, "transfer chars: %d, matrix coef: %d",
-      sequence->transfer_characteristics, sequence->matrix_coefficients);
-  GST_DEBUG_OBJECT (mpeg2dec,
-      "FLAGS: CONSTRAINED_PARAMETERS:%d, PROGRESSIVE_SEQUENCE:%d",
-      sequence->flags & SEQ_FLAG_CONSTRAINED_PARAMETERS,
-      sequence->flags & SEQ_FLAG_PROGRESSIVE_SEQUENCE);
-  GST_DEBUG_OBJECT (mpeg2dec, "FLAGS: LOW_DELAY:%d, COLOUR_DESCRIPTION:%d",
-      sequence->flags & SEQ_FLAG_LOW_DELAY,
-      sequence->flags & SEQ_FLAG_COLOUR_DESCRIPTION);
-
-  /* Save the padded video information */
-  mpeg2dec->decoded_info = *vinfo;
-  gst_video_info_align (&mpeg2dec->decoded_info, &mpeg2dec->valign);
-
-  /* Mpeg2dec has 2 frame latency to produce a picture and 1 frame latency in
-   * it's parser */
-  latency = gst_util_uint64_scale (3 * GST_SECOND, vinfo->fps_d, vinfo->fps_n);
-  gst_video_decoder_set_latency (GST_VIDEO_DECODER (mpeg2dec), latency,
-      latency);
-
-  if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (mpeg2dec)))
-    goto negotiation_fail;
-
-  gst_video_codec_state_unref (state);
-
-  mpeg2_custom_fbuf (mpeg2dec->decoder, 1);
-
-  init_dummybuf (mpeg2dec);
-
-  /* Pump in some null buffers, because otherwise libmpeg2 doesn't
-   * initialise the discard_fbuf->id */
-  mpeg2_set_buf (mpeg2dec->decoder, mpeg2dec->dummybuf, NULL);
-  mpeg2_set_buf (mpeg2dec->decoder, mpeg2dec->dummybuf, NULL);
-  mpeg2_set_buf (mpeg2dec->decoder, mpeg2dec->dummybuf, NULL);
-  gst_mpeg2dec_clear_buffers (mpeg2dec);
-
-  return ret;
-
-invalid_frame_period:
-  {
-    GST_WARNING_OBJECT (mpeg2dec, "Frame period is 0!");
-    return GST_FLOW_ERROR;
-  }
-invalid_size:
-  {
-    GST_ERROR_OBJECT (mpeg2dec, "Invalid frame dimensions: %d x %d",
-        sequence->width, sequence->height);
-    return GST_FLOW_ERROR;
-  }
-
-invalid_picture:
-  {
-    GST_ERROR_OBJECT (mpeg2dec, "Picture dimension bigger then frame: "
-        "%d x %d is bigger then %d x %d", sequence->picture_width,
-        sequence->picture_height, sequence->width, sequence->height);
-    return GST_FLOW_ERROR;
-  }
-
-
-negotiation_fail:
-  {
-    GST_WARNING_OBJECT (mpeg2dec, "Failed to negotiate with downstream");
-    gst_video_codec_state_unref (state);
-    return GST_FLOW_ERROR;
-  }
-}
-
-static GstFlowReturn
-handle_picture (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info,
-    GstVideoCodecFrame * frame)
-{
-  GstVideoDecoder *decoder = (GstVideoDecoder *) mpeg2dec;
-  GstFlowReturn ret;
-  gint type;
-  const gchar *type_str = NULL;
-  gboolean key_frame = FALSE;
-  const mpeg2_picture_t *picture = info->current_picture;
-  GstVideoFrame vframe;
-  guint8 *buf[3];
-
-  ret = gst_video_decoder_allocate_output_frame (decoder, frame);
-  if (ret != GST_FLOW_OK)
-    return ret;
-
-  type = picture->flags & PIC_MASK_CODING_TYPE;
-  switch (type) {
-    case PIC_FLAG_CODING_TYPE_I:
-      key_frame = TRUE;
-      mpeg2_skip (mpeg2dec->decoder, 0);
-      type_str = "I";
-      break;
-    case PIC_FLAG_CODING_TYPE_P:
-      type_str = "P";
-      break;
-    case PIC_FLAG_CODING_TYPE_B:
-      type_str = "B";
-      break;
-    default:
-      gst_video_codec_frame_ref (frame);
-      ret = gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
-      GST_VIDEO_DECODER_ERROR (mpeg2dec, 1, STREAM, DECODE,
-          ("decoding error"), ("Invalid picture type"), ret);
-      return ret;
-  }
-
-  GST_DEBUG_OBJECT (mpeg2dec, "handle picture type %s", type_str);
-  GST_DEBUG_OBJECT (mpeg2dec, "picture %s, frame %i",
-      key_frame ? ", kf," : "    ", frame->system_frame_number);
-
-  if (GST_VIDEO_INFO_IS_INTERLACED (&mpeg2dec->decoded_info)) {
-    /* This implies SEQ_FLAG_PROGRESSIVE_SEQUENCE is not set */
-    if (picture->flags & PIC_FLAG_TOP_FIELD_FIRST) {
-      GST_BUFFER_FLAG_SET (frame->output_buffer, GST_VIDEO_BUFFER_FLAG_TFF);
-    }
-    if (!(picture->flags & PIC_FLAG_PROGRESSIVE_FRAME)) {
-      GST_BUFFER_FLAG_SET (frame->output_buffer,
-          GST_VIDEO_BUFFER_FLAG_INTERLACED);
-    }
-    if (picture->flags & PIC_FLAG_REPEAT_FIRST_FIELD) {
-      GST_BUFFER_FLAG_SET (frame->output_buffer, GST_VIDEO_BUFFER_FLAG_RFF);
-    }
-  }
-
-  if (mpeg2dec->discont_state == MPEG2DEC_DISC_NEW_PICTURE && key_frame) {
-    mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_KEYFRAME;
-  }
-
-  GST_DEBUG_OBJECT (mpeg2dec,
-      "picture: %s %s %s %s %s fields:%d ts:%"
-      GST_TIME_FORMAT,
-      (picture->flags & PIC_FLAG_PROGRESSIVE_FRAME ? "prog" : "    "),
-      (picture->flags & PIC_FLAG_TOP_FIELD_FIRST ? "tff" : "   "),
-      (picture->flags & PIC_FLAG_REPEAT_FIRST_FIELD ? "rff" : "   "),
-      (picture->flags & PIC_FLAG_SKIP ? "skip" : "    "),
-      (picture->flags & PIC_FLAG_COMPOSITE_DISPLAY ? "composite" : "         "),
-      picture->nb_fields, GST_TIME_ARGS (frame->pts));
-
-  if (!gst_video_frame_map (&vframe, &mpeg2dec->decoded_info,
-          frame->output_buffer, GST_MAP_READ | GST_MAP_WRITE))
-    goto map_fail;
-
-  buf[0] = GST_VIDEO_FRAME_PLANE_DATA (&vframe, 0);
-  buf[1] = GST_VIDEO_FRAME_PLANE_DATA (&vframe, 1);
-  buf[2] = GST_VIDEO_FRAME_PLANE_DATA (&vframe, 2);
-
-  GST_DEBUG_OBJECT (mpeg2dec, "set_buf: %p %p %p, frame %i",
-      buf[0], buf[1], buf[2], frame->system_frame_number);
-
-  /* Note: We use a non-null 'id' value to make the distinction
-   * between the dummy buffers (which have an id of NULL) and the
-   * ones we did */
-  mpeg2_stride (mpeg2dec->decoder, vframe.info.stride[0]);
-  mpeg2_set_buf (mpeg2dec->decoder, buf,
-      GINT_TO_POINTER (frame->system_frame_number + 1));
-  gst_mpeg2dec_save_buffer (mpeg2dec, frame->system_frame_number, &vframe);
-
-  return ret;
-
-map_fail:
-  {
-    GST_ELEMENT_ERROR (mpeg2dec, RESOURCE, WRITE, ("Failed to map frame"),
-        (NULL));
-    return GST_FLOW_ERROR;
-  }
-}
-
-static GstFlowReturn
-handle_slice (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info)
-{
-  GstFlowReturn ret = GST_FLOW_OK;
-  GstVideoCodecFrame *frame;
-  const mpeg2_picture_t *picture;
-  gboolean key_frame = FALSE;
-  gboolean bidirect_frame = FALSE;
-  gboolean closed_gop = FALSE;
-
-  GST_DEBUG_OBJECT (mpeg2dec,
-      "fbuf:%p display_picture:%p current_picture:%p fbuf->id:%d",
-      info->display_fbuf, info->display_picture, info->current_picture,
-      GPOINTER_TO_INT (info->display_fbuf->id) - 1);
-
-  /* Note, the fbuf-id is shifted by 1 to make the difference between
-   * NULL values (used by dummy buffers) and 'real' values */
-  frame = gst_video_decoder_get_frame (GST_VIDEO_DECODER (mpeg2dec),
-      GPOINTER_TO_INT (info->display_fbuf->id) - 1);
-  if (!frame)
-    goto no_frame;
-  picture = info->display_picture;
-  key_frame = (picture->flags & PIC_MASK_CODING_TYPE) == PIC_FLAG_CODING_TYPE_I;
-  bidirect_frame =
-      (picture->flags & PIC_MASK_CODING_TYPE) == PIC_FLAG_CODING_TYPE_B;
-  closed_gop = (info->gop->flags & GOP_FLAG_CLOSED_GOP);
-
-  GST_DEBUG_OBJECT (mpeg2dec, "picture flags: %d, type: %d, keyframe: %d",
-      picture->flags, picture->flags & PIC_MASK_CODING_TYPE, key_frame);
-
-  if (key_frame) {
-    mpeg2_skip (mpeg2dec->decoder, 0);
-  }
-
-  if (mpeg2dec->discont_state == MPEG2DEC_DISC_NEW_KEYFRAME && key_frame)
-    mpeg2dec->discont_state = MPEG2DEC_DISC_NONE;
-
-  if (picture->flags & PIC_FLAG_SKIP) {
-    GST_DEBUG_OBJECT (mpeg2dec, "dropping buffer because of skip flag");
-    ret = gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
-    mpeg2_skip (mpeg2dec->decoder, 1);
-    return ret;
-  }
-
-  /* Skip B-frames if GOP is not closed and waiting for the first keyframe. */
-  if (mpeg2dec->discont_state != MPEG2DEC_DISC_NONE) {
-    if (bidirect_frame && !closed_gop) {
-      GST_DEBUG_OBJECT (mpeg2dec, "dropping buffer, discont state %d",
-          mpeg2dec->discont_state);
-      ret = gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
-      return ret;
-    }
-  }
-
-  /* do cropping if the target region is smaller than the input one */
-  if (mpeg2dec->downstream_pool) {
-    GstVideoFrame *vframe;
-
-    if (gst_video_decoder_get_max_decode_time (GST_VIDEO_DECODER (mpeg2dec),
-            frame) < 0) {
-      GST_DEBUG_OBJECT (mpeg2dec, "dropping buffer crop, too late");
-      return gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
-    }
-
-    GST_DEBUG_OBJECT (mpeg2dec, "Doing a crop copy of the decoded buffer");
-
-    vframe = gst_mpeg2dec_get_buffer (mpeg2dec, frame->system_frame_number);
-    g_assert (vframe != NULL);
-    ret = gst_mpeg2dec_crop_buffer (mpeg2dec, frame, vframe);
-
-    if (ret != GST_FLOW_OK) {
-      gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
-      return ret;
-    }
-  }
-
-  ret = gst_video_decoder_finish_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
-
-  return ret;
-
-no_frame:
-  {
-    GST_DEBUG ("display buffer does not have a valid frame");
-    return GST_FLOW_OK;
-  }
-}
-
-static GstFlowReturn
-gst_mpeg2dec_handle_frame (GstVideoDecoder * decoder,
-    GstVideoCodecFrame * frame)
-{
-  GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
-  GstBuffer *buf = frame->input_buffer;
-  GstMapInfo minfo;
-  const mpeg2_info_t *info;
-  mpeg2_state_t state;
-  gboolean done = FALSE;
-  GstFlowReturn ret = GST_FLOW_OK;
-
-  GST_LOG_OBJECT (mpeg2dec, "received frame %d, timestamp %"
-      GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT,
-      frame->system_frame_number,
-      GST_TIME_ARGS (frame->pts), GST_TIME_ARGS (frame->duration));
-
-  gst_buffer_ref (buf);
-  if (!gst_buffer_map (buf, &minfo, GST_MAP_READ)) {
-    GST_ERROR_OBJECT (mpeg2dec, "Failed to map input buffer");
-    gst_buffer_unref (buf);
-    return GST_FLOW_ERROR;
-  }
-
-  info = mpeg2dec->info;
-
-  GST_LOG_OBJECT (mpeg2dec, "calling mpeg2_buffer");
-  mpeg2_buffer (mpeg2dec->decoder, minfo.data, minfo.data + minfo.size);
-  GST_LOG_OBJECT (mpeg2dec, "calling mpeg2_buffer done");
-
-  while (!done) {
-    GST_LOG_OBJECT (mpeg2dec, "calling parse");
-    state = mpeg2_parse (mpeg2dec->decoder);
-    GST_DEBUG_OBJECT (mpeg2dec, "parse state %d", state);
-
-    switch (state) {
-      case STATE_SEQUENCE_MODIFIED:
-        GST_DEBUG_OBJECT (mpeg2dec, "sequence modified");
-        mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_PICTURE;
-        gst_mpeg2dec_clear_buffers (mpeg2dec);
-        /* fall through */
-      case STATE_SEQUENCE:
-        ret = handle_sequence (mpeg2dec, info);
-        /* if there is an error handling the sequence
-         * reset the decoder, maybe something more elegant
-         * could be done.
-         */
-        if (ret == GST_FLOW_ERROR) {
-          GST_VIDEO_DECODER_ERROR (decoder, 1, STREAM, DECODE,
-              ("decoding error"), ("Bad sequence header"), ret);
-          gst_video_decoder_drop_frame (decoder, frame);
-          gst_mpeg2dec_flush (decoder);
-          goto done;
-        }
-        break;
-      case STATE_SEQUENCE_REPEATED:
-        GST_DEBUG_OBJECT (mpeg2dec, "sequence repeated");
-        break;
-      case STATE_GOP:
-        GST_DEBUG_OBJECT (mpeg2dec, "gop");
-        break;
-      case STATE_PICTURE:
-        ret = handle_picture (mpeg2dec, info, frame);
-        break;
-      case STATE_SLICE_1ST:
-        GST_LOG_OBJECT (mpeg2dec, "1st slice of frame encountered");
-        break;
-      case STATE_PICTURE_2ND:
-        GST_LOG_OBJECT (mpeg2dec,
-            "Second picture header encountered. Decoding 2nd field");
-        break;
-      case STATE_INVALID_END:
-        GST_DEBUG_OBJECT (mpeg2dec, "invalid end");
-      case STATE_END:
-        GST_DEBUG_OBJECT (mpeg2dec, "end");
-      case STATE_SLICE:
-        GST_DEBUG_OBJECT (mpeg2dec, "display_fbuf:%p, discard_fbuf:%p",
-            info->display_fbuf, info->discard_fbuf);
-        if (info->display_fbuf && info->display_fbuf->id) {
-          ret = handle_slice (mpeg2dec, info);
-        } else {
-          GST_DEBUG_OBJECT (mpeg2dec, "no picture to display");
-        }
-        if (info->discard_fbuf && info->discard_fbuf->id)
-          gst_mpeg2dec_discard_buffer (mpeg2dec,
-              GPOINTER_TO_INT (info->discard_fbuf->id) - 1);
-        if (state != STATE_SLICE) {
-          gst_mpeg2dec_clear_buffers (mpeg2dec);
-        }
-        break;
-      case STATE_BUFFER:
-        done = TRUE;
-        break;
-        /* error */
-      case STATE_INVALID:
-        GST_VIDEO_DECODER_ERROR (decoder, 1, STREAM, DECODE,
-            ("decoding error"), ("Reached libmpeg2 invalid state"), ret);
-        continue;
-      default:
-        GST_ERROR_OBJECT (mpeg2dec, "Unknown libmpeg2 state %d, FIXME", state);
-        ret = GST_FLOW_OK;
-        gst_video_codec_frame_unref (frame);
-        goto done;
-    }
-
-    if (ret != GST_FLOW_OK) {
-      GST_DEBUG_OBJECT (mpeg2dec, "exit loop, reason %s",
-          gst_flow_get_name (ret));
-      break;
-    }
-  }
-
-  gst_video_codec_frame_unref (frame);
-
-done:
-  gst_buffer_unmap (buf, &minfo);
-  gst_buffer_unref (buf);
-  return ret;
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  return GST_ELEMENT_REGISTER (mpeg2dec, plugin);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    mpeg2dec,
-    "LibMpeg2 decoder", plugin_init, VERSION, "GPL", GST_PACKAGE_NAME,
-    GST_PACKAGE_ORIGIN);
diff --git a/ext/mpeg2dec/gstmpeg2dec.h b/ext/mpeg2dec/gstmpeg2dec.h
deleted file mode 100644 (file)
index 3ae4b7b..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * 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_MPEG2DEC_H__
-#define __GST_MPEG2DEC_H__
-
-
-#include <gst/gst.h>
-#include <gst/video/video.h>
-#include <gst/video/gstvideodecoder.h>
-#include <mpeg2.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_MPEG2DEC \
-  (gst_mpeg2dec_get_type())
-#define GST_MPEG2DEC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_MPEG2DEC,GstMpeg2dec))
-#define GST_MPEG2DEC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_MPEG2DEC,GstMpeg2decClass))
-#define GST_IS_MPEG2DEC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MPEG2DEC))
-#define GST_IS_MPEG2DEC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MPEG2DEC))
-
-#define MPEG_TIME_TO_GST_TIME(time) ((time) == -1 ? -1 : ((time) * (GST_MSECOND/10)) / G_GINT64_CONSTANT(9))
-#define GST_TIME_TO_MPEG_TIME(time) ((time) == -1 ? -1 : ((time) * G_GINT64_CONSTANT(9)) / (GST_MSECOND/10))
-
-typedef struct _GstMpeg2dec GstMpeg2dec;
-typedef struct _GstMpeg2decClass GstMpeg2decClass;
-
-typedef enum
-{
-  MPEG2DEC_DISC_NONE            = 0,
-  MPEG2DEC_DISC_NEW_PICTURE,
-  MPEG2DEC_DISC_NEW_KEYFRAME
-} DiscontState;
-
-struct _GstMpeg2dec {
-  GstVideoDecoder element;
-
-  mpeg2dec_t    *decoder;
-  const mpeg2_info_t *info;
-
-  /* Buffer lifetime management */
-  GList         *buffers;
-
-  /* FIXME This should not be necessary. It is used to prevent image
-   * corruption when the parser does not behave the way it should.
-   * See https://bugzilla.gnome.org/show_bug.cgi?id=674238
-   */
-  DiscontState   discont_state;
-
-  /* video state */
-  GstVideoCodecState *input_state;
-  GstVideoInfo        decoded_info;
-  GstVideoAlignment   valign;
-  GstBufferPool *     downstream_pool;
-  gboolean            need_alignment;
-
-  guint8        *dummybuf[4];
-};
-
-struct _GstMpeg2decClass {
-  GstVideoDecoderClass parent_class;
-};
-
-GType gst_mpeg2dec_get_type(void);
-GST_ELEMENT_REGISTER_DECLARE (mpeg2dec);
-
-G_END_DECLS
-
-#endif /* __GST_MPEG2DEC_H__ */
diff --git a/ext/mpeg2dec/meson.build b/ext/mpeg2dec/meson.build
deleted file mode 100644 (file)
index aa5262a..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-mpeg2_dep = dependency('libmpeg2', version : '>= 0.4.0', required : get_option('mpeg2dec'))
-
-if mpeg2_dep.found()
-  mpeg2dec = library('gstmpeg2dec',
-    ['gstmpeg2dec.c'],
-    c_args : ugly_args,
-    include_directories : [configinc],
-    dependencies : [gstvideo_dep, mpeg2_dep],
-    install : true,
-    install_dir : plugins_install_dir,
-  )
-  pkgconfig.generate(mpeg2dec, install_dir : plugins_pkgconfig_install_dir)
-  plugins += [mpeg2dec]
-endif
diff --git a/ext/sidplay/gstsiddec.cc b/ext/sidplay/gstsiddec.cc
deleted file mode 100644 (file)
index 1a7c91e..0000000
+++ /dev/null
@@ -1,780 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *           (C) <2006> Wim Taymans <wim@fluendo.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-siddec
- *
- * This element decodes .sid files to raw audio. .sid files are in fact
- * small Commodore 64 programs that are executed on an emulated 6502 CPU and a
- * MOS 6581 sound chip.
- *
- * This plugin will first load the complete program into memory before starting
- * the emulator and producing output.
- *
- * Seeking is not (and cannot be) implemented.
- *
- * ## Example pipelines
- *
- * |[
- * gst-launch-1.0 -v filesrc location=Hawkeye.sid ! siddec ! audioconvert ! audioresample ! autoaudiosink
- * ]| Decode a sid file and play it back.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include <gst/audio/audio.h>
-#include "gstsiddec.h"
-
-#define DEFAULT_TUNE           0
-#define DEFAULT_CLOCK          SIDTUNE_CLOCK_PAL
-#define DEFAULT_MEMORY         MPU_BANK_SWITCHING
-#define DEFAULT_FILTER         TRUE
-#define DEFAULT_MEASURED_VOLUME        TRUE
-#define DEFAULT_MOS8580                FALSE
-#define DEFAULT_FORCE_SPEED    FALSE
-#define DEFAULT_BLOCKSIZE      4096
-
-enum
-{
-  PROP_0,
-  PROP_TUNE,
-  PROP_CLOCK,
-  PROP_MEMORY,
-  PROP_FILTER,
-  PROP_MEASURED_VOLUME,
-  PROP_MOS8580,
-  PROP_FORCE_SPEED,
-  PROP_BLOCKSIZE,
-  PROP_METADATA
-};
-
-static GstStaticPadTemplate sink_templ = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-sid")
-    );
-
-#define FORMATS "{ " GST_AUDIO_NE(S16) "," GST_AUDIO_NE(U16) ", S8, U8 }"
-
-static GstStaticPadTemplate src_templ = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-raw, "
-        "format = (string) " FORMATS ", "
-        "layout = (string) interleaved, "
-        "rate = (int) [ 8000, 48000 ], " "channels = (int) [ 1, 2 ]")
-    );
-
-GST_DEBUG_CATEGORY_STATIC (gst_siddec_debug);
-#define GST_CAT_DEFAULT gst_siddec_debug
-
-#define GST_TYPE_SID_CLOCK (gst_sid_clock_get_type())
-static GType
-gst_sid_clock_get_type (void)
-{
-  static GType sid_clock_type = 0;
-  static const GEnumValue sid_clock[] = {
-    {SIDTUNE_CLOCK_PAL, "PAL", "pal"},
-    {SIDTUNE_CLOCK_NTSC, "NTSC", "ntsc"},
-    {0, NULL, NULL},
-  };
-
-  if (!sid_clock_type) {
-    sid_clock_type = g_enum_register_static ("GstSidClock", sid_clock);
-  }
-  return sid_clock_type;
-}
-
-#define GST_TYPE_SID_MEMORY (gst_sid_memory_get_type())
-static GType
-gst_sid_memory_get_type (void)
-{
-  static GType sid_memory_type = 0;
-  static const GEnumValue sid_memory[] = {
-    {MPU_BANK_SWITCHING, "Bank Switching", "bank-switching"},
-    {MPU_TRANSPARENT_ROM, "Transparent ROM", "transparent-rom"},
-    {MPU_PLAYSID_ENVIRONMENT, "Playsid Environment", "playsid-environment"},
-    {0, NULL, NULL},
-  };
-
-  if (!sid_memory_type) {
-    sid_memory_type = g_enum_register_static ("GstSidMemory", sid_memory);
-  }
-  return sid_memory_type;
-}
-
-static void gst_siddec_finalize (GObject * object);
-
-static GstFlowReturn gst_siddec_chain (GstPad * pad, GstObject * parent,
-    GstBuffer * buffer);
-static gboolean gst_siddec_sink_event (GstPad * pad, GstObject * parent,
-    GstEvent * event);
-
-static gboolean gst_siddec_src_convert (GstPad * pad, GstFormat src_format,
-    gint64 src_value, GstFormat * dest_format, gint64 * dest_value);
-static gboolean gst_siddec_src_event (GstPad * pad, GstObject * parent,
-    GstEvent * event);
-static gboolean gst_siddec_src_query (GstPad * pad, GstObject * parent,
-    GstQuery * query);
-
-static void gst_siddec_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
-static void gst_siddec_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-
-#define gst_siddec_parent_class parent_class
-G_DEFINE_TYPE (GstSidDec, gst_siddec, GST_TYPE_ELEMENT);
-GST_ELEMENT_REGISTER_DEFINE (siddec, "siddec", GST_RANK_PRIMARY,
-    GST_TYPE_SIDDEC);
-
-static void
-gst_siddec_class_init (GstSidDecClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-
-  gobject_class->finalize = gst_siddec_finalize;
-  gobject_class->set_property = gst_siddec_set_property;
-  gobject_class->get_property = gst_siddec_get_property;
-
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_TUNE,
-      g_param_spec_int ("tune", "tune", "tune",
-          0, 100, DEFAULT_TUNE,
-          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_CLOCK,
-      g_param_spec_enum ("clock", "clock", "clock",
-          GST_TYPE_SID_CLOCK, DEFAULT_CLOCK,
-          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MEMORY,
-      g_param_spec_enum ("memory", "memory", "memory", GST_TYPE_SID_MEMORY,
-          DEFAULT_MEMORY,
-          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_FILTER,
-      g_param_spec_boolean ("filter", "filter", "filter", DEFAULT_FILTER,
-          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MEASURED_VOLUME,
-      g_param_spec_boolean ("measured-volume", "measured_volume",
-          "measured_volume", DEFAULT_MEASURED_VOLUME,
-          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MOS8580,
-      g_param_spec_boolean ("mos8580", "mos8580", "mos8580", DEFAULT_MOS8580,
-          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_FORCE_SPEED,
-      g_param_spec_boolean ("force-speed", "force_speed", "force_speed",
-          DEFAULT_FORCE_SPEED,
-          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
-  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BLOCKSIZE,
-      g_param_spec_uint ("blocksize", "Block size",
-          "Size in bytes to output per buffer", 1, G_MAXUINT,
-          DEFAULT_BLOCKSIZE,
-          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
-  g_object_class_install_property (gobject_class, PROP_METADATA,
-      g_param_spec_boxed ("metadata", "Metadata", "Metadata", GST_TYPE_CAPS,
-          (GParamFlags) (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)));
-
-  gst_element_class_set_static_metadata (gstelement_class, "Sid decoder",
-      "Codec/Decoder/Audio", "Use libsidplay to decode SID audio tunes",
-      "Wim Taymans <wim.taymans@gmail.com>");
-
-  gst_element_class_add_static_pad_template (gstelement_class, &src_templ);
-  gst_element_class_add_static_pad_template (gstelement_class, &sink_templ);
-
-  GST_DEBUG_CATEGORY_INIT (gst_siddec_debug, "siddec", 0,
-      "C64 sid song player");
-
-  gst_type_mark_as_plugin_api (GST_TYPE_SID_CLOCK, static_cast<GstPluginAPIFlags>(0));
-  gst_type_mark_as_plugin_api (GST_TYPE_SID_MEMORY, static_cast<GstPluginAPIFlags>(0));
-}
-
-static void
-gst_siddec_init (GstSidDec * siddec)
-{
-  siddec->sinkpad = gst_pad_new_from_static_template (&sink_templ, "sink");
-  gst_pad_set_event_function (siddec->sinkpad, gst_siddec_sink_event);
-  gst_pad_set_chain_function (siddec->sinkpad, gst_siddec_chain);
-  gst_element_add_pad (GST_ELEMENT (siddec), siddec->sinkpad);
-
-  siddec->srcpad = gst_pad_new_from_static_template (&src_templ, "src");
-  gst_pad_set_event_function (siddec->srcpad, gst_siddec_src_event);
-  gst_pad_set_query_function (siddec->srcpad, gst_siddec_src_query);
-  gst_pad_use_fixed_caps (siddec->srcpad);
-  gst_element_add_pad (GST_ELEMENT (siddec), siddec->srcpad);
-
-  siddec->engine = new emuEngine ();
-  siddec->tune = new sidTune (0);
-  siddec->config = (emuConfig *) g_malloc (sizeof (emuConfig));
-
-  /* get default config parameters */
-  siddec->engine->getConfig (*siddec->config);
-
-  siddec->config->mos8580 = DEFAULT_MOS8580;    // mos8580
-  siddec->config->memoryMode = DEFAULT_MEMORY;  // memory mode
-  siddec->config->clockSpeed = DEFAULT_CLOCK;   // clock speed
-  siddec->config->forceSongSpeed = DEFAULT_FORCE_SPEED; // force song speed
-
-  siddec->engine->setConfig (*siddec->config);
-
-  siddec->tune_buffer = (guchar *) g_malloc (maxSidtuneFileLen);
-  siddec->tune_len = 0;
-  siddec->tune_number = 0;
-  siddec->total_bytes = 0;
-  siddec->blocksize = DEFAULT_BLOCKSIZE;
-
-  siddec->have_group_id = FALSE;
-  siddec->group_id = G_MAXUINT;
-}
-
-static void
-gst_siddec_finalize (GObject * object)
-{
-  GstSidDec *siddec = GST_SIDDEC (object);
-
-  g_free (siddec->config);
-  g_free (siddec->tune_buffer);
-
-  delete (siddec->tune);
-  delete (siddec->engine);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-update_tags (GstSidDec * siddec)
-{
-  sidTuneInfo info;
-  GstTagList *list;
-
-  if (siddec->tune->getInfo (info)) {
-    list = gst_tag_list_new_empty ();
-
-    if (info.nameString) {
-      gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
-          GST_TAG_TITLE, info.nameString, (void *) NULL);
-    }
-    if (info.authorString) {
-      gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
-          GST_TAG_ARTIST, info.authorString, (void *) NULL);
-    }
-    if (info.copyrightString) {
-      gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
-          GST_TAG_COPYRIGHT, info.copyrightString, (void *) NULL);
-    }
-    gst_pad_push_event (siddec->srcpad, gst_event_new_tag (list));
-  }
-}
-
-static gboolean
-siddec_negotiate (GstSidDec * siddec)
-{
-  GstCaps *allowed;
-  GstStructure *structure;
-  int rate = 44100;
-  int channels = 1;
-  GstCaps *caps;
-  const gchar *str;
-  GstAudioFormat format;
-  GstEvent *event;
-  gchar *stream_id;
-
-  allowed = gst_pad_get_allowed_caps (siddec->srcpad);
-  if (!allowed)
-    goto nothing_allowed;
-
-  GST_DEBUG_OBJECT (siddec, "allowed caps: %" GST_PTR_FORMAT, allowed);
-
-  allowed = gst_caps_normalize (allowed);
-
-  structure = gst_caps_get_structure (allowed, 0);
-
-  str = gst_structure_get_string (structure, "format");
-  if (str == NULL)
-    goto invalid_format;
-
-  format = gst_audio_format_from_string (str);
-  switch (format) {
-    case GST_AUDIO_FORMAT_S8:
-      siddec->config->bitsPerSample = 8;
-      siddec->config->sampleFormat = SIDEMU_SIGNED_PCM;
-      break;
-    case GST_AUDIO_FORMAT_U8:
-      siddec->config->bitsPerSample = 8;
-      siddec->config->sampleFormat = SIDEMU_UNSIGNED_PCM;
-      break;
-    case GST_AUDIO_FORMAT_S16:
-      siddec->config->bitsPerSample = 16;
-      siddec->config->sampleFormat = SIDEMU_SIGNED_PCM;
-      break;
-    case GST_AUDIO_FORMAT_U16:
-      siddec->config->bitsPerSample = 16;
-      siddec->config->sampleFormat = SIDEMU_UNSIGNED_PCM;
-      break;
-    default:
-      goto invalid_format;
-  }
-
-  gst_structure_get_int (structure, "rate", &rate);
-  siddec->config->frequency = rate;
-  gst_structure_get_int (structure, "channels", &channels);
-  siddec->config->channels = channels;
-
-  stream_id =
-      gst_pad_create_stream_id (siddec->srcpad, GST_ELEMENT_CAST (siddec),
-      NULL);
-
-  event = gst_pad_get_sticky_event (siddec->sinkpad, GST_EVENT_STREAM_START, 0);
-  if (event) {
-    if (gst_event_parse_group_id (event, &siddec->group_id))
-      siddec->have_group_id = TRUE;
-    else
-      siddec->have_group_id = FALSE;
-    gst_event_unref (event);
-  } else if (!siddec->have_group_id) {
-    siddec->have_group_id = TRUE;
-    siddec->group_id = gst_util_group_id_next ();
-  }
-
-  event = gst_event_new_stream_start (stream_id);
-  if (siddec->have_group_id)
-    gst_event_set_group_id (event, siddec->group_id);
-
-  gst_pad_push_event (siddec->srcpad, event);
-  g_free (stream_id);
-
-  caps = gst_caps_new_simple ("audio/x-raw",
-      "format", G_TYPE_STRING, gst_audio_format_to_string (format),
-      "layout", G_TYPE_STRING, "interleaved",
-      "rate", G_TYPE_INT, siddec->config->frequency,
-      "channels", G_TYPE_INT, siddec->config->channels, NULL);
-  gst_pad_set_caps (siddec->srcpad, caps);
-  gst_caps_unref (caps);
-
-  gst_caps_unref (allowed);
-
-  siddec->engine->setConfig (*siddec->config);
-
-  return TRUE;
-
-  /* ERRORS */
-nothing_allowed:
-  {
-    GST_DEBUG_OBJECT (siddec, "could not get allowed caps");
-    return FALSE;
-  }
-invalid_format:
-  {
-    GST_DEBUG_OBJECT (siddec, "invalid audio caps");
-    gst_caps_unref (allowed);
-    return FALSE;
-  }
-}
-
-static void
-play_loop (GstPad * pad)
-{
-  GstFlowReturn ret;
-  GstSidDec *siddec;
-  GstBuffer *out;
-  GstMapInfo outmap;
-  gint64 value, offset, time = 0;
-  GstFormat format;
-
-  siddec = GST_SIDDEC (gst_pad_get_parent (pad));
-
-  out = gst_buffer_new_and_alloc (siddec->blocksize);
-
-  gst_buffer_map (out, &outmap, GST_MAP_WRITE);
-  sidEmuFillBuffer (*siddec->engine, *siddec->tune,
-      outmap.data, siddec->blocksize);
-  gst_buffer_unmap (out, &outmap);
-
-  /* get offset in samples */
-  format = GST_FORMAT_DEFAULT;
-  if (gst_siddec_src_convert (siddec->srcpad,
-          GST_FORMAT_BYTES, siddec->total_bytes, &format, &offset))
-    GST_BUFFER_OFFSET (out) = offset;
-
-  /* get current timestamp */
-  format = GST_FORMAT_TIME;
-  if (gst_siddec_src_convert (siddec->srcpad,
-          GST_FORMAT_BYTES, siddec->total_bytes, &format, &time))
-    GST_BUFFER_TIMESTAMP (out) = time;
-
-  /* update position and get new timestamp to calculate duration */
-  siddec->total_bytes += siddec->blocksize;
-
-  /* get offset in samples */
-  format = GST_FORMAT_DEFAULT;
-  if (gst_siddec_src_convert (siddec->srcpad,
-          GST_FORMAT_BYTES, siddec->total_bytes, &format, &value))
-    GST_BUFFER_OFFSET_END (out) = value;
-
-  format = GST_FORMAT_TIME;
-  if (gst_siddec_src_convert (siddec->srcpad,
-          GST_FORMAT_BYTES, siddec->total_bytes, &format, &value))
-    GST_BUFFER_DURATION (out) = value - time;
-
-  if ((ret = gst_pad_push (siddec->srcpad, out)) != GST_FLOW_OK)
-    goto pause;
-
-done:
-  gst_object_unref (siddec);
-
-  return;
-
-  /* ERRORS */
-pause:
-  {
-    if (ret == GST_FLOW_EOS) {
-      /* perform EOS logic, FIXME, segment seek? */
-      gst_pad_push_event (pad, gst_event_new_eos ());
-    } else if (ret < GST_FLOW_EOS || ret == GST_FLOW_NOT_LINKED) {
-      /* for fatal errors we post an error message */
-      GST_ELEMENT_FLOW_ERROR (siddec, ret);
-      gst_pad_push_event (pad, gst_event_new_eos ());
-    }
-
-    GST_INFO_OBJECT (siddec, "pausing task, reason: %s",
-        gst_flow_get_name (ret));
-    gst_pad_pause_task (pad);
-    goto done;
-  }
-}
-
-static gboolean
-start_play_tune (GstSidDec * siddec)
-{
-  gboolean res;
-  GstSegment segment;
-
-  if (!siddec->tune->load (siddec->tune_buffer, siddec->tune_len))
-    goto could_not_load;
-
-  update_tags (siddec);
-
-  if (!siddec_negotiate (siddec))
-    goto could_not_negotiate;
-
-  if (!sidEmuInitializeSong (*siddec->engine, *siddec->tune,
-          siddec->tune_number))
-    goto could_not_init;
-
-  gst_segment_init (&segment, GST_FORMAT_TIME);
-  gst_pad_push_event (siddec->srcpad, gst_event_new_segment (&segment));
-  siddec->total_bytes = 0;
-  siddec->have_group_id = FALSE;
-  siddec->group_id = G_MAXUINT;
-
-  res = gst_pad_start_task (siddec->srcpad,
-      (GstTaskFunction) play_loop, siddec->srcpad, NULL);
-  return res;
-
-  /* ERRORS */
-could_not_load:
-  {
-    GST_ELEMENT_ERROR (siddec, LIBRARY, INIT,
-        ("Could not load tune"), ("Could not load tune"));
-    return FALSE;
-  }
-could_not_negotiate:
-  {
-    GST_ELEMENT_ERROR (siddec, CORE, NEGOTIATION,
-        ("Could not negotiate format"), ("Could not negotiate format"));
-    return FALSE;
-  }
-could_not_init:
-  {
-    GST_ELEMENT_ERROR (siddec, LIBRARY, INIT,
-        ("Could not initialize song"), ("Could not initialize song"));
-    return FALSE;
-  }
-}
-
-static gboolean
-gst_siddec_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
-  GstSidDec *siddec;
-  gboolean res;
-
-  siddec = GST_SIDDEC (parent);
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_EOS:
-      res = start_play_tune (siddec);
-      break;
-    case GST_EVENT_SEGMENT:
-      res = TRUE;
-      break;
-    default:
-      res = TRUE;
-      break;
-  }
-  gst_event_unref (event);
-
-  return res;
-}
-
-static GstFlowReturn
-gst_siddec_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
-{
-  GstSidDec *siddec;
-  guint64 size;
-
-  siddec = GST_SIDDEC (parent);
-
-  size = gst_buffer_get_size (buffer);
-  if (siddec->tune_len + size > maxSidtuneFileLen)
-    goto overflow;
-
-  gst_buffer_extract (buffer, 0, siddec->tune_buffer + siddec->tune_len, size);
-
-  siddec->tune_len += size;
-
-  gst_buffer_unref (buffer);
-
-  return GST_FLOW_OK;
-
-  /* ERRORS */
-overflow:
-  {
-    GST_ELEMENT_ERROR (siddec, STREAM, DECODE,
-        (NULL), ("Input data bigger than allowed buffer size"));
-    return GST_FLOW_ERROR;
-  }
-}
-
-static gboolean
-gst_siddec_src_convert (GstPad * pad, GstFormat src_format, gint64 src_value,
-    GstFormat * dest_format, gint64 * dest_value)
-{
-  gboolean res = TRUE;
-  guint scale = 1;
-  GstSidDec *siddec;
-  gint bytes_per_sample;
-
-  siddec = GST_SIDDEC (gst_pad_get_parent (pad));
-
-  if (src_format == *dest_format) {
-    *dest_value = src_value;
-    return TRUE;
-  }
-
-  bytes_per_sample =
-      (siddec->config->bitsPerSample >> 3) * siddec->config->channels;
-
-  switch (src_format) {
-    case GST_FORMAT_BYTES:
-      switch (*dest_format) {
-        case GST_FORMAT_DEFAULT:
-          if (bytes_per_sample == 0)
-            return FALSE;
-          *dest_value = src_value / bytes_per_sample;
-          break;
-        case GST_FORMAT_TIME:
-        {
-          gint byterate = bytes_per_sample * siddec->config->frequency;
-
-          if (byterate == 0)
-            return FALSE;
-          *dest_value =
-              gst_util_uint64_scale_int (src_value, GST_SECOND, byterate);
-          break;
-        }
-        default:
-          res = FALSE;
-      }
-      break;
-    case GST_FORMAT_DEFAULT:
-      switch (*dest_format) {
-        case GST_FORMAT_BYTES:
-          *dest_value = src_value * bytes_per_sample;
-          break;
-        case GST_FORMAT_TIME:
-          if (siddec->config->frequency == 0)
-            return FALSE;
-          *dest_value =
-              gst_util_uint64_scale_int (src_value, GST_SECOND,
-              siddec->config->frequency);
-          break;
-        default:
-          res = FALSE;
-      }
-      break;
-    case GST_FORMAT_TIME:
-      switch (*dest_format) {
-        case GST_FORMAT_BYTES:
-          scale = bytes_per_sample;
-          /* fallthrough */
-        case GST_FORMAT_DEFAULT:
-          *dest_value =
-              gst_util_uint64_scale_int (src_value,
-              scale * siddec->config->frequency, GST_SECOND);
-          break;
-        default:
-          res = FALSE;
-      }
-      break;
-    default:
-      res = FALSE;
-  }
-
-  return res;
-}
-
-static gboolean
-gst_siddec_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
-  gboolean res = FALSE;
-
-  switch (GST_EVENT_TYPE (event)) {
-    default:
-      break;
-  }
-  gst_event_unref (event);
-
-  return res;
-}
-
-static gboolean
-gst_siddec_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
-{
-  gboolean res = TRUE;
-  GstSidDec *siddec;
-
-  siddec = GST_SIDDEC (parent);
-
-  switch (GST_QUERY_TYPE (query)) {
-    case GST_QUERY_POSITION:
-    {
-      GstFormat format;
-      gint64 current;
-
-      gst_query_parse_position (query, &format, NULL);
-
-      /* we only know about our bytes, convert to requested format */
-      res &= gst_siddec_src_convert (pad,
-          GST_FORMAT_BYTES, siddec->total_bytes, &format, &current);
-      if (res) {
-        gst_query_set_position (query, format, current);
-      }
-      break;
-    }
-    default:
-      res = gst_pad_query_default (pad, parent, query);
-      break;
-  }
-
-  return res;
-}
-
-static void
-gst_siddec_set_property (GObject * object, guint prop_id, const GValue * value,
-    GParamSpec * pspec)
-{
-  GstSidDec *siddec = GST_SIDDEC (object);
-
-  switch (prop_id) {
-    case PROP_TUNE:
-      siddec->tune_number = g_value_get_int (value);
-      break;
-    case PROP_CLOCK:
-      siddec->config->clockSpeed = g_value_get_enum (value);
-      break;
-    case PROP_MEMORY:
-      siddec->config->memoryMode = g_value_get_enum (value);
-      break;
-    case PROP_FILTER:
-      siddec->config->emulateFilter = g_value_get_boolean (value);
-      break;
-    case PROP_MEASURED_VOLUME:
-      siddec->config->measuredVolume = g_value_get_boolean (value);
-      break;
-    case PROP_MOS8580:
-      siddec->config->mos8580 = g_value_get_boolean (value);
-      break;
-    case PROP_BLOCKSIZE:
-      siddec->blocksize = g_value_get_uint (value);
-      break;
-    case PROP_FORCE_SPEED:
-      siddec->config->forceSongSpeed = g_value_get_boolean (value);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      return;
-  }
-  siddec->engine->setConfig (*siddec->config);
-}
-
-static void
-gst_siddec_get_property (GObject * object, guint prop_id, GValue * value,
-    GParamSpec * pspec)
-{
-  GstSidDec *siddec = GST_SIDDEC (object);
-
-  switch (prop_id) {
-    case PROP_TUNE:
-      g_value_set_int (value, siddec->tune_number);
-      break;
-    case PROP_CLOCK:
-      g_value_set_enum (value, siddec->config->clockSpeed);
-      break;
-    case PROP_MEMORY:
-      g_value_set_enum (value, siddec->config->memoryMode);
-      break;
-    case PROP_FILTER:
-      g_value_set_boolean (value, siddec->config->emulateFilter);
-      break;
-    case PROP_MEASURED_VOLUME:
-      g_value_set_boolean (value, siddec->config->measuredVolume);
-      break;
-    case PROP_MOS8580:
-      g_value_set_boolean (value, siddec->config->mos8580);
-      break;
-    case PROP_FORCE_SPEED:
-      g_value_set_boolean (value, siddec->config->forceSongSpeed);
-      break;
-    case PROP_BLOCKSIZE:
-      g_value_set_uint (value, siddec->blocksize);
-      break;
-    case PROP_METADATA:
-      g_value_set_boxed (value, NULL);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  return GST_ELEMENT_REGISTER (siddec, plugin);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    sid,
-    "Uses libsidplay to decode .sid files",
-    plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
diff --git a/ext/sidplay/gstsiddec.h b/ext/sidplay/gstsiddec.h
deleted file mode 100644 (file)
index 15fa88e..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * 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_SIDDEC_H__
-#define __GST_SIDDEC_H__
-
-#include <stdlib.h>
-#include <sidplay/player.h>
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_SIDDEC \
-  (gst_siddec_get_type())
-#define GST_SIDDEC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SIDDEC,GstSidDec))
-#define GST_SIDDEC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SIDDEC,GstSidDecClass))
-#define GST_IS_SIDDEC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SIDDEC))
-#define GST_IS_SIDDEC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SIDDEC))
-
-typedef struct _GstSidDec GstSidDec;
-typedef struct _GstSidDecClass GstSidDecClass;
-
-struct _GstSidDec {
-  GstElement     element;
-
-  /* pads */
-  GstPad        *sinkpad, 
-                *srcpad;
-
-  gboolean       have_group_id;
-  guint          group_id;
-
-  guchar        *tune_buffer;
-  gint           tune_len;
-  gint           tune_number;
-  guint64        total_bytes;
-
-  emuEngine     *engine;
-  sidTune       *tune;
-  emuConfig     *config;
-
-  guint         blocksize;
-};
-
-struct _GstSidDecClass {
-  GstElementClass parent_class;
-};
-
-GType gst_siddec_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (siddec);
-
-G_END_DECLS
-
-#endif /* __GST_SIDDEC_H__ */
diff --git a/ext/sidplay/meson.build b/ext/sidplay/meson.build
deleted file mode 100644 (file)
index 6310652..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-sidplay_option = get_option('sidplay')
-if sidplay_option.disabled()
-  subdir_done()
-endif
-
-if not add_languages('cpp', native: false, required: sidplay_option)
-  subdir_done()
-endif
-
-if not cxx.has_header('sidplay/player.h', required: sidplay_option)
-  subdir_done()
-endif
-
-sidplay_dep = cxx.find_library('sidplay', required: sidplay_option)
-if not sidplay_dep.found()
-  subdir_done()
-endif
-
-# sidplay plugin works with libsidplay 1.36.x (not 2.x.x)
-sid_code = '''#include <sidplay/player.h>
-              void somefunc (void) {
-                sidTune tune = sidTune(0);
-              }'''
-if not cxx.compiles(sid_code, dependencies: sidplay_dep, name : 'sidplay usage')
-  if sidplay_option.enabled()
-    error('sidplay headers and libraries were found, but were not usable')
-  endif
-  subdir_done()
-endif
-
-gstsid = library('gstsid', 'gstsiddec.cc',
-  cpp_args : ugly_args,
-  include_directories : [configinc],
-  dependencies : [gstaudio_dep, sidplay_dep],
-  install : true,
-  install_dir : plugins_install_dir)
-pkgconfig.generate(gstsid, install_dir : plugins_pkgconfig_install_dir)
-plugins += [gstsid]
diff --git a/ext/x264/GstX264Enc.prs b/ext/x264/GstX264Enc.prs
deleted file mode 100644 (file)
index 4ad3c82..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-[_presets_]
-version=0.10
-element-name=GstX264Enc
-
-[Profile Baseline]
-_meta/comment=Baseline Profile
-bframes=0
-cabac=false
-dct8x8=false
-
-[Profile Main]
-_meta/comment=Main Profile
-cabac=true
-dct8x8=false
-
-[Profile High]
-_meta/comment=High Profile
-cabac=true
-dct8x8=true
-
-[Quality Low]
-_meta/comment=Low quality
-pass=qual
-quantizer=27
-subme=4
-threads=0
-
-[Quality Normal]
-_meta/comment=Normal quality
-pass=qual
-quantizer=21
-me=umh
-subme=6
-ref=3
-threads=0
-
-[Quality High]
-_meta/comment=High quality
-pass=qual
-quantizer=18
-me=umh
-subme=6
-ref=3
-threads=0
-
-[Profile YouTube]
-_meta/comment=YouTube recommended settings (https://support.google.com/youtube/answer/1722171)
-pass=qual
-cabac=true
-dct8x8=true
-bframes=2
-
-[Zero Latency]
-tune=zerolatency
diff --git a/ext/x264/gstencoderbitrateprofilemanager.c b/ext/x264/gstencoderbitrateprofilemanager.c
deleted file mode 100644 (file)
index ed2371e..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-/* GStreamer
- * Copyright (C) 2019 Thibault Saunier <tsaunier@igalia.com>
- *
- * gstencoderbitrateprofilemanager.c
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * 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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gstencoderbitrateprofilemanager.h"
-
-GST_DEBUG_CATEGORY_STATIC (encoderbitratemanager_debug);
-#define GST_CAT_DEFAULT encoderbitratemanager_debug
-
-typedef struct
-{
-  gchar *name;
-  gsize n_vals;
-  GstEncoderBitrateTargetForPixelsMap *map;
-} GstEncoderBitrateProfile;
-
-struct _GstEncoderBitrateProfileManager
-{
-  GList *profiles;
-  gchar *preset;
-  guint bitrate;
-
-  gboolean setting_preset;
-  gboolean user_bitrate;
-};
-
-/* *INDENT-OFF* */
-/* Copied from https://support.google.com/youtube/answer/1722171?hl=en */
-static const GstEncoderBitrateTargetForPixelsMap youtube_bitrate_profiles[] = {
-  {
-        .n_pixels = 3840 * 2160,
-        .low_framerate_bitrate = 40000,
-        .high_framerate_bitrate = 60000,
-  },
-  {
-        .n_pixels = 2560 * 1440,
-        .low_framerate_bitrate = 16000,
-        .high_framerate_bitrate = 24000,
-  },
-  {
-        .n_pixels = 1920 * 1080,
-        .low_framerate_bitrate = 8000,
-        .high_framerate_bitrate = 12000,
-  },
-  {
-        .n_pixels = 1080 * 720,
-        .low_framerate_bitrate = 5000,
-        .high_framerate_bitrate = 7500,
-      },
-  {
-        .n_pixels = 640 * 480,
-        .low_framerate_bitrate = 2500,
-        .high_framerate_bitrate = 4000,
-  },
-  {
-        .n_pixels = 0,
-        .low_framerate_bitrate = 2500,
-        .high_framerate_bitrate = 4000,
-  },
-  {
-        .n_pixels = 0,
-        .low_framerate_bitrate = 0,
-        .high_framerate_bitrate = 0,
-  },
-};
-/* *INDENT-ON* */
-
-static void
-gst_encoder_bitrate_profile_free (GstEncoderBitrateProfile * profile)
-{
-  g_free (profile->name);
-  g_free (profile->map);
-  g_free (profile);
-}
-
-void
-gst_encoder_bitrate_profile_manager_add_profile (GstEncoderBitrateProfileManager
-    * self, const gchar * profile_name,
-    const GstEncoderBitrateTargetForPixelsMap * map)
-{
-  guint n_vals;
-  GstEncoderBitrateProfile *profile;
-
-  for (n_vals = 0;
-      map[n_vals].low_framerate_bitrate != 0
-      && map[n_vals].high_framerate_bitrate != 0; n_vals++);
-  n_vals++;
-
-  profile = g_new0 (GstEncoderBitrateProfile, 1);
-  profile->name = g_strdup (profile_name);
-  profile->n_vals = n_vals;
-  profile->map
-      = g_memdup2 (map, sizeof (GstEncoderBitrateTargetForPixelsMap) * n_vals);
-  self->profiles = g_list_prepend (self->profiles, profile);
-}
-
-guint
-gst_encoder_bitrate_profile_manager_get_bitrate (GstEncoderBitrateProfileManager
-    * self, GstVideoInfo * info)
-{
-  gint i;
-  gboolean high_fps;
-  guint num_pix;
-  GList *tmp;
-
-  GstEncoderBitrateProfile *profile = NULL;
-
-  g_return_val_if_fail (self != NULL, -1);
-
-  if (!info || info->finfo == NULL
-      || info->finfo->format == GST_VIDEO_FORMAT_UNKNOWN) {
-    GST_INFO ("Video info %p not usable, returning current bitrate", info);
-    return self->bitrate;
-  }
-
-  if (!self->preset) {
-    GST_INFO ("No preset used, returning current bitrate");
-    return self->bitrate;
-
-  }
-
-  for (tmp = self->profiles; tmp; tmp = tmp->next) {
-    GstEncoderBitrateProfile *tmpprof = tmp->data;
-    if (!g_strcmp0 (tmpprof->name, self->preset)) {
-      profile = tmpprof;
-      break;
-    }
-  }
-
-  if (!profile) {
-    GST_INFO ("Could not find map for profile: %s", self->preset);
-
-    return self->bitrate;
-  }
-
-  high_fps = GST_VIDEO_INFO_FPS_N (info) / GST_VIDEO_INFO_FPS_D (info) > 30.0;
-  num_pix = GST_VIDEO_INFO_WIDTH (info) * GST_VIDEO_INFO_HEIGHT (info);
-  for (i = 0; i < profile->n_vals; i++) {
-    GstEncoderBitrateTargetForPixelsMap *bitrate_values = &profile->map[i];
-
-    if (num_pix < bitrate_values->n_pixels)
-      continue;
-
-    self->bitrate =
-        high_fps ? bitrate_values->
-        high_framerate_bitrate : bitrate_values->low_framerate_bitrate;
-    GST_INFO ("Using %s bitrate! %d", self->preset, self->bitrate);
-    return self->bitrate;
-  }
-
-  return -1;
-}
-
-void gst_encoder_bitrate_profile_manager_start_loading_preset
-    (GstEncoderBitrateProfileManager * self)
-{
-  self->setting_preset = TRUE;
-}
-
-void gst_encoder_bitrate_profile_manager_end_loading_preset
-    (GstEncoderBitrateProfileManager * self, const gchar * preset)
-{
-  self->setting_preset = FALSE;
-  g_free (self->preset);
-  self->preset = g_strdup (preset);
-}
-
-void
-gst_encoder_bitrate_profile_manager_set_bitrate (GstEncoderBitrateProfileManager
-    * self, guint bitrate)
-{
-  self->bitrate = bitrate;
-  self->user_bitrate = !self->setting_preset;
-}
-
-void
-gst_encoder_bitrate_profile_manager_free (GstEncoderBitrateProfileManager *
-    self)
-{
-  g_free (self->preset);
-  g_list_free_full (self->profiles,
-      (GDestroyNotify) gst_encoder_bitrate_profile_free);
-  g_free (self);
-}
-
-GstEncoderBitrateProfileManager *
-gst_encoder_bitrate_profile_manager_new (guint default_bitrate)
-{
-  GstEncoderBitrateProfileManager *self =
-      g_new0 (GstEncoderBitrateProfileManager, 1);
-  static gsize _init = 0;
-
-  if (g_once_init_enter (&_init)) {
-    GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "encoderbitratemanager", 0,
-        "Encoder bitrate manager");
-    g_once_init_leave (&_init, 1);
-  }
-
-  self->bitrate = default_bitrate;
-  gst_encoder_bitrate_profile_manager_add_profile (self,
-      "Profile YouTube", youtube_bitrate_profiles);
-
-  return self;
-}
diff --git a/ext/x264/gstencoderbitrateprofilemanager.h b/ext/x264/gstencoderbitrateprofilemanager.h
deleted file mode 100644 (file)
index d6db733..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/* GStreamer
- * Copyright (C) 2019 Thibault Saunier <tsaunier@igalia.com>
- *
- * gstencoderbitrateprofilemanager.h
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * 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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#pragma once
-
-#include <gst/gst.h>
-#include <gst/video/video.h>
-
-typedef struct _GstEncoderBitrateProfileManager GstEncoderBitrateProfileManager;
-
-typedef struct _GstEncoderBitrateTargetForPixelsMap
-{
-  guint n_pixels;
-  guint low_framerate_bitrate;
-  guint high_framerate_bitrate;
-
-  gpointer _gst_reserved[GST_PADDING_LARGE];
-} GstEncoderBitrateTargetForPixelsMap;
-
-void
-gst_encoder_bitrate_profile_manager_add_profile(GstEncoderBitrateProfileManager* self,
-    const gchar* profile_name, const GstEncoderBitrateTargetForPixelsMap* map);
-guint gst_encoder_bitrate_profile_manager_get_bitrate(GstEncoderBitrateProfileManager* self, GstVideoInfo* info);
-void gst_encoder_bitrate_profile_manager_start_loading_preset (GstEncoderBitrateProfileManager* self);
-void gst_encoder_bitrate_profile_manager_end_loading_preset(GstEncoderBitrateProfileManager* self, const gchar* preset);
-void gst_encoder_bitrate_profile_manager_set_bitrate(GstEncoderBitrateProfileManager* self, guint bitrate);
-GstEncoderBitrateProfileManager* gst_encoder_bitrate_profile_manager_new(guint default_bitrate);
-void gst_encoder_bitrate_profile_manager_free(GstEncoderBitrateProfileManager* self);
\ No newline at end of file
diff --git a/ext/x264/gstx264enc.c b/ext/x264/gstx264enc.c
deleted file mode 100644 (file)
index 2604506..0000000
+++ /dev/null
@@ -1,3057 +0,0 @@
-/* GStreamer H264 encoder plugin
- * Copyright (C) 2005 Michal Benes <michal.benes@itonis.tv>
- * Copyright (C) 2005 Josef Zlomek <josef.zlomek@itonis.tv>
- * Copyright (C) 2008 Mark Nauwelaerts <mnauw@users.sf.net>
- * Copyright (C) 2016 Sebastian Dröge <sebastian@centricular.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-x264enc
- * @title: x264enc
- * @see_also: faac
- *
- * This element encodes raw video into H264 compressed data,
- * also otherwise known as MPEG-4 AVC (Advanced Video Codec).
- *
- * The #GstX264Enc:pass property controls the type of encoding.  In case of Constant
- * Bitrate Encoding (actually ABR), the #GstX264Enc:bitrate will determine the quality
- * of the encoding.  This will similarly be the case if this target bitrate
- * is to obtained in multiple (2 or 3) pass encoding.
- * Alternatively, one may choose to perform Constant Quantizer or Quality encoding,
- * in which case the #GstX264Enc:quantizer property controls much of the outcome, in that case #GstX264Enc:bitrate is the maximum bitrate.
- *
- * The H264 profile that is eventually used depends on a few settings.
- * If #GstX264Enc:dct8x8 is enabled, then High profile is used.
- * Otherwise, if #GstX264Enc:cabac entropy coding is enabled or #GstX264Enc:bframes
- * are allowed, then Main Profile is in effect, and otherwise Baseline profile
- * applies.  The high profile is imposed by default,
- * which is fine for most software players and settings,
- * but in some cases (e.g. hardware platforms) a more restricted profile/level
- * may be necessary. The recommended way to set a profile is to set it in the
- * downstream caps.
- *
- * If a preset/tuning are specified then these will define the default values and
- * the property defaults will be ignored. After this the option-string property is
- * applied, followed by the user-set properties, fast first pass restrictions and
- * finally the profile restrictions.
- *
- * > Some settings, including the default settings, may lead to quite
- * > some latency (i.e. frame buffering) in the encoder. This may cause problems
- * > with pipeline stalling in non-trivial pipelines, because the encoder latency
- * > is often considerably higher than the default size of a simple queue
- * > element. Such problems are caused by one of the queues in the other
- * > non-x264enc streams/branches filling up and blocking upstream. They can
- * > be fixed by relaxing the default time/size/buffer limits on the queue
- * > elements in the non-x264 branches, or using a (single) multiqueue element
- * > for all branches. Also see the last example below. You can also work around
- * > this problem by setting the tune=zerolatency property, but this will affect
- * > overall encoding quality so may not be appropriate for your use case.
- *
- * ## Example pipeline
- * |[
- * gst-launch-1.0 -v videotestsrc num-buffers=1000 ! x264enc qp-min=18 ! \
- *   avimux ! filesink location=videotestsrc.avi
- * ]| This example pipeline will encode a test video source to H264 muxed in an
- * AVI container, while ensuring a sane minimum quantization factor to avoid
- * some (excessive) waste. You should ideally never put H264 into an AVI
- * container (or really anything else, for that matter) - use Matroska or
- * MP4/QuickTime or MPEG-TS instead.
- * |[
- * gst-launch-1.0 -v videotestsrc num-buffers=1000 ! x264enc pass=quant ! \
- *   matroskamux ! filesink location=videotestsrc.mkv
- * ]| This example pipeline will encode a test video source to H264 using fixed
- * quantization, and muxes it in a Matroska container.
- * |[
- * gst-launch-1.0 -v videotestsrc num-buffers=1000 ! x264enc pass=5 quantizer=25 speed-preset=6 ! video/x-h264, profile=baseline ! \
- *   qtmux ! filesink location=videotestsrc.mov
- * ]| This example pipeline will encode a test video source to H264 using
- * constant quality at around Q25 using the 'medium' speed/quality preset and
- * restricting the options used so that the output is H.264 Baseline Profile
- * compliant and finally multiplexing the output in Quicktime mov format.
- * |[
- * gst-launch-1.0 -v videotestsrc num-buffers=1000 ! tee name=t ! queue ! videoconvert ! autovideosink \
- *   t. ! queue ! x264enc rc-lookahead=5 ! fakesink
- * ]| This example pipeline will encode a test video source to H264 while
- * displaying the input material at the same time.  As mentioned above,
- * specific settings are needed in this case to avoid pipeline stalling.
- * Depending on goals and context, other approaches are possible, e.g.
- * tune=zerolatency might be configured, or queue sizes increased.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#endif
-
-#include "gstx264enc.h"
-
-#include <gst/pbutils/pbutils.h>
-#include <gst/video/video.h>
-#include <gst/video/gstvideometa.h>
-#include <gst/video/gstvideopool.h>
-
-#include <string.h>
-#include <stdlib.h>
-#include <gmodule.h>
-
-GST_DEBUG_CATEGORY_STATIC (x264_enc_debug);
-#define GST_CAT_DEFAULT x264_enc_debug
-
-struct _GstX264EncVTable
-{
-  GModule *module;
-
-#if X264_BUILD < 153
-  const int *x264_bit_depth;
-#endif
-  const int *x264_chroma_format;
-  void (*x264_encoder_close) (x264_t *);
-  int (*x264_encoder_delayed_frames) (x264_t *);
-  int (*x264_encoder_encode) (x264_t *, x264_nal_t ** pp_nal, int *pi_nal,
-      x264_picture_t * pic_in, x264_picture_t * pic_out);
-  int (*x264_encoder_headers) (x264_t *, x264_nal_t ** pp_nal, int *pi_nal);
-  void (*x264_encoder_intra_refresh) (x264_t *);
-  int (*x264_encoder_maximum_delayed_frames) (x264_t *);
-  x264_t *(*x264_encoder_open) (x264_param_t *);
-  int (*x264_encoder_reconfig) (x264_t *, x264_param_t *);
-  const x264_level_t (*x264_levels)[];
-  void (*x264_param_apply_fastfirstpass) (x264_param_t *);
-  int (*x264_param_apply_profile) (x264_param_t *, const char *);
-  int (*x264_param_default_preset) (x264_param_t *, const char *preset,
-      const char *tune);
-  int (*x264_param_parse) (x264_param_t *, const char *name, const char *value);
-};
-
-static GstX264EncVTable default_vtable;
-
-static GstX264EncVTable *vtable_8bit = NULL, *vtable_10bit = NULL;
-
-#if X264_BUILD < 153
-#define LOAD_SYMBOL(name) G_STMT_START { \
-  if (!g_module_symbol (module, #name, (gpointer *) &vtable->name)) { \
-    GST_ERROR ("Failed to load '" #name "' from '%s'", filename); \
-    goto error; \
-  } \
-} G_STMT_END;
-
-#ifdef HAVE_X264_ADDITIONAL_LIBRARIES
-static GstX264EncVTable *
-load_x264 (const gchar * filename)
-{
-  GModule *module;
-  GstX264EncVTable *vtable;
-
-  module = g_module_open (filename, G_MODULE_BIND_LOCAL);
-  if (!module) {
-    GST_ERROR ("Failed to load '%s'", filename);
-    return NULL;
-  }
-
-  vtable = g_new0 (GstX264EncVTable, 1);
-  vtable->module = module;
-
-  if (!g_module_symbol (module, G_STRINGIFY (x264_encoder_open),
-          (gpointer *) & vtable->x264_encoder_open)) {
-    GST_ERROR ("Failed to load '" G_STRINGIFY (x264_encoder_open)
-        "' from '%s'. Incompatible version?", filename);
-    goto error;
-  }
-  LOAD_SYMBOL (x264_bit_depth);
-  LOAD_SYMBOL (x264_chroma_format);
-  LOAD_SYMBOL (x264_encoder_close);
-  LOAD_SYMBOL (x264_encoder_delayed_frames);
-  LOAD_SYMBOL (x264_encoder_encode);
-  LOAD_SYMBOL (x264_encoder_headers);
-  LOAD_SYMBOL (x264_encoder_intra_refresh);
-  LOAD_SYMBOL (x264_encoder_maximum_delayed_frames);
-  LOAD_SYMBOL (x264_encoder_reconfig);
-  LOAD_SYMBOL (x264_levels);
-  LOAD_SYMBOL (x264_param_apply_fastfirstpass);
-  LOAD_SYMBOL (x264_param_apply_profile);
-  LOAD_SYMBOL (x264_param_default_preset);
-  LOAD_SYMBOL (x264_param_parse);
-
-  return vtable;
-
-error:
-  g_module_close (vtable->module);
-  g_free (vtable);
-  return NULL;
-}
-
-static void
-unload_x264 (GstX264EncVTable * vtable)
-{
-  if (vtable->module) {
-    g_module_close (vtable->module);
-    g_free (vtable);
-  }
-}
-#endif
-
-#undef LOAD_SYMBOL
-#endif
-
-static gboolean
-gst_x264_enc_add_x264_chroma_format (GstStructure * s,
-    gboolean allow_420_8, gboolean allow_420_10, gboolean allow_422,
-    gboolean allow_444)
-{
-  GValue fmts = G_VALUE_INIT;
-  GValue fmt = G_VALUE_INIT;
-  gboolean ret = FALSE;
-
-  g_value_init (&fmts, GST_TYPE_LIST);
-  g_value_init (&fmt, G_TYPE_STRING);
-
-  if (vtable_8bit) {
-    gint chroma_format = *vtable_8bit->x264_chroma_format;
-
-    if ((chroma_format == 0 || chroma_format == X264_CSP_I444) && allow_444) {
-      g_value_set_string (&fmt, "Y444");
-      gst_value_list_append_value (&fmts, &fmt);
-    }
-
-    if ((chroma_format == 0 || chroma_format == X264_CSP_I422) && allow_422) {
-      g_value_set_string (&fmt, "Y42B");
-      gst_value_list_append_value (&fmts, &fmt);
-    }
-
-    if ((chroma_format == 0 || chroma_format == X264_CSP_I420) && allow_420_8) {
-      g_value_set_string (&fmt, "I420");
-      gst_value_list_append_value (&fmts, &fmt);
-      g_value_set_string (&fmt, "YV12");
-      gst_value_list_append_value (&fmts, &fmt);
-      g_value_set_string (&fmt, "NV12");
-      gst_value_list_append_value (&fmts, &fmt);
-    }
-  }
-
-  if (vtable_10bit) {
-    gint chroma_format = *vtable_10bit->x264_chroma_format;
-
-    if ((chroma_format == 0 || chroma_format == X264_CSP_I444) && allow_444) {
-      if (G_BYTE_ORDER == G_LITTLE_ENDIAN)
-        g_value_set_string (&fmt, "Y444_10LE");
-      else
-        g_value_set_string (&fmt, "Y444_10BE");
-
-      gst_value_list_append_value (&fmts, &fmt);
-    }
-
-    if ((chroma_format == 0 || chroma_format == X264_CSP_I422) && allow_422) {
-      if (G_BYTE_ORDER == G_LITTLE_ENDIAN)
-        g_value_set_string (&fmt, "I422_10LE");
-      else
-        g_value_set_string (&fmt, "I422_10BE");
-
-      gst_value_list_append_value (&fmts, &fmt);
-    }
-
-    if ((chroma_format == 0 || chroma_format == X264_CSP_I420) && allow_420_10) {
-      if (G_BYTE_ORDER == G_LITTLE_ENDIAN)
-        g_value_set_string (&fmt, "I420_10LE");
-      else
-        g_value_set_string (&fmt, "I420_10BE");
-
-      gst_value_list_append_value (&fmts, &fmt);
-    }
-  }
-
-  if (gst_value_list_get_size (&fmts) != 0) {
-    gst_structure_take_value (s, "format", &fmts);
-    ret = TRUE;
-  } else {
-    g_value_unset (&fmts);
-  }
-
-  g_value_unset (&fmt);
-
-  return ret;
-}
-
-#if X264_BUILD < 153
-static gboolean
-load_x264_libraries (void)
-{
-  if (*default_vtable.x264_bit_depth == 8) {
-    vtable_8bit = &default_vtable;
-    GST_INFO ("8-bit depth supported");
-  } else if (*default_vtable.x264_bit_depth == 10) {
-    vtable_10bit = &default_vtable;
-    GST_INFO ("10-bit depth supported");
-  }
-#ifdef HAVE_X264_ADDITIONAL_LIBRARIES
-  {
-    gchar **libraries = g_strsplit (HAVE_X264_ADDITIONAL_LIBRARIES, ":", -1);
-    gchar **p = libraries;
-
-    while (*p && (!vtable_8bit || !vtable_10bit)) {
-      GstX264EncVTable *vtable = load_x264 (*p);
-
-      if (vtable) {
-        if (!vtable_8bit && *vtable->x264_bit_depth == 8) {
-          GST_INFO ("8-bit depth support loaded from %s", *p);
-          vtable_8bit = vtable;
-        } else if (!vtable_10bit && *vtable->x264_bit_depth == 10) {
-          GST_INFO ("10-bit depth support loaded from %s", *p);
-          vtable_10bit = vtable;
-        } else {
-          unload_x264 (vtable);
-        }
-      }
-
-      p++;
-    }
-    g_strfreev (libraries);
-  }
-#endif
-
-  if (!vtable_8bit && !vtable_10bit)
-    return FALSE;
-
-  return TRUE;
-}
-
-#else /* X264_BUILD >= 153 */
-
-static gboolean
-load_x264_libraries (void)
-{
-#if X264_BIT_DEPTH == 0         /* all */
-  GST_INFO ("8-bit depth and 10-bit depth supported");
-  vtable_8bit = &default_vtable;
-  vtable_10bit = &default_vtable;
-#elif X264_BIT_DEPTH == 8
-  GST_INFO ("Only 8-bit depth supported");
-  vtable_8bit = &default_vtable;
-#elif X264_BIT_DEPTH == 10
-  GST_INFO ("Only 10-bit depth supported");
-  vtable_10bit = &default_vtable;
-#else
-#error "unexpected X264_BIT_DEPTH value"
-#endif
-
-#ifdef HAVE_X264_ADDITIONAL_LIBRARIES
-  GST_WARNING ("Ignoring configured additional libraries %s, using libx264 "
-      "version enabled for multiple bit depths",
-      HAVE_X264_ADDITIONAL_LIBRARIES);
-#endif
-
-  return TRUE;
-}
-
-#endif
-
-enum
-{
-  ARG_0,
-  ARG_THREADS,
-  ARG_SLICED_THREADS,
-  ARG_SYNC_LOOKAHEAD,
-  ARG_PASS,
-  ARG_QUANTIZER,
-  ARG_MULTIPASS_CACHE_FILE,
-  ARG_BYTE_STREAM,
-  ARG_BITRATE,
-  ARG_INTRA_REFRESH,
-  ARG_VBV_BUF_CAPACITY,
-  ARG_ME,
-  ARG_SUBME,
-  ARG_ANALYSE,
-  ARG_DCT8x8,
-  ARG_REF,
-  ARG_BFRAMES,
-  ARG_B_ADAPT,
-  ARG_B_PYRAMID,
-  ARG_WEIGHTB,
-  ARG_SPS_ID,
-  ARG_AU_NALU,
-  ARG_TRELLIS,
-  ARG_KEYINT_MAX,
-  ARG_CABAC,
-  ARG_QP_MIN,
-  ARG_QP_MAX,
-  ARG_QP_STEP,
-  ARG_IP_FACTOR,
-  ARG_PB_FACTOR,
-  ARG_RC_MB_TREE,
-  ARG_RC_LOOKAHEAD,
-  ARG_NR,
-  ARG_INTERLACED,
-  ARG_OPTION_STRING,
-  ARG_SPEED_PRESET,
-  ARG_PSY_TUNE,
-  ARG_TUNE,
-  ARG_FRAME_PACKING,
-  ARG_INSERT_VUI,
-};
-
-#define ARG_THREADS_DEFAULT            0        /* 0 means 'auto' which is 1.5x number of CPU cores */
-#define ARG_PASS_DEFAULT               0
-#define ARG_QUANTIZER_DEFAULT          21
-#define ARG_MULTIPASS_CACHE_FILE_DEFAULT "x264.log"
-#define ARG_BYTE_STREAM_DEFAULT        FALSE
-#define ARG_BITRATE_DEFAULT            (2 * 1024)
-#define ARG_VBV_BUF_CAPACITY_DEFAULT   600
-#define ARG_ME_DEFAULT                 X264_ME_HEX
-#define ARG_SUBME_DEFAULT              1
-#define ARG_ANALYSE_DEFAULT            0
-#define ARG_DCT8x8_DEFAULT             FALSE
-#define ARG_REF_DEFAULT                3
-#define ARG_BFRAMES_DEFAULT            0
-#define ARG_B_ADAPT_DEFAULT            TRUE
-#define ARG_B_PYRAMID_DEFAULT          FALSE
-#define ARG_WEIGHTB_DEFAULT            FALSE
-#define ARG_SPS_ID_DEFAULT             0
-#define ARG_AU_NALU_DEFAULT            TRUE
-#define ARG_TRELLIS_DEFAULT            TRUE
-#define ARG_KEYINT_MAX_DEFAULT         0
-#define ARG_CABAC_DEFAULT              TRUE
-#define ARG_QP_MIN_DEFAULT             10
-#define ARG_QP_MAX_DEFAULT             51
-#define ARG_QP_STEP_DEFAULT            4
-#define ARG_IP_FACTOR_DEFAULT          1.4
-#define ARG_PB_FACTOR_DEFAULT          1.3
-#define ARG_NR_DEFAULT                 0
-#define ARG_INTERLACED_DEFAULT         FALSE
-#define ARG_SLICED_THREADS_DEFAULT     FALSE
-#define ARG_SYNC_LOOKAHEAD_DEFAULT     -1
-#define ARG_RC_MB_TREE_DEFAULT         TRUE
-#define ARG_RC_LOOKAHEAD_DEFAULT       40
-#define ARG_INTRA_REFRESH_DEFAULT      FALSE
-#define ARG_OPTION_STRING_DEFAULT      ""
-static GString *x264enc_defaults;
-#define ARG_SPEED_PRESET_DEFAULT       6        /* 'medium' preset - matches x264 CLI default */
-#define ARG_PSY_TUNE_DEFAULT           0        /* no psy tuning */
-#define ARG_TUNE_DEFAULT               0        /* no tuning */
-#define ARG_FRAME_PACKING_DEFAULT      -1       /* automatic (none, or from input caps) */
-#define ARG_INSERT_VUI_DEFAULT         TRUE
-
-enum
-{
-  GST_X264_ENC_STREAM_FORMAT_FROM_PROPERTY,
-  GST_X264_ENC_STREAM_FORMAT_AVC,
-  GST_X264_ENC_STREAM_FORMAT_BYTE_STREAM
-};
-
-enum
-{
-  GST_X264_ENC_PASS_CBR = 0,
-  GST_X264_ENC_PASS_QUANT = 0x04,
-  GST_X264_ENC_PASS_QUAL,
-  GST_X264_ENC_PASS_PASS1 = 0x11,
-  GST_X264_ENC_PASS_PASS2,
-  GST_X264_ENC_PASS_PASS3
-};
-
-#define GST_X264_ENC_PASS_TYPE (gst_x264_enc_pass_get_type())
-static GType
-gst_x264_enc_pass_get_type (void)
-{
-  static GType pass_type = 0;
-
-  static const GEnumValue pass_types[] = {
-    {GST_X264_ENC_PASS_CBR, "Constant Bitrate Encoding", "cbr"},
-    {GST_X264_ENC_PASS_QUANT, "Constant Quantizer", "quant"},
-    {GST_X264_ENC_PASS_QUAL, "Constant Quality", "qual"},
-    {GST_X264_ENC_PASS_PASS1, "VBR Encoding - Pass 1", "pass1"},
-    {GST_X264_ENC_PASS_PASS2, "VBR Encoding - Pass 2", "pass2"},
-    {GST_X264_ENC_PASS_PASS3, "VBR Encoding - Pass 3", "pass3"},
-    {0, NULL, NULL}
-  };
-
-  if (!pass_type) {
-    pass_type = g_enum_register_static ("GstX264EncPass", pass_types);
-  }
-  return pass_type;
-}
-
-#define GST_X264_ENC_ME_TYPE (gst_x264_enc_me_get_type())
-static GType
-gst_x264_enc_me_get_type (void)
-{
-  static GType me_type = 0;
-  static GEnumValue *me_types;
-  int n, i;
-
-  if (me_type != 0)
-    return me_type;
-
-  n = 0;
-  while (x264_motion_est_names[n] != NULL)
-    n++;
-
-  me_types = g_new0 (GEnumValue, n + 1);
-
-  for (i = 0; i < n; i++) {
-    me_types[i].value = i;
-    me_types[i].value_name = x264_motion_est_names[i];
-    me_types[i].value_nick = x264_motion_est_names[i];
-  }
-
-  me_type = g_enum_register_static ("GstX264EncMe", me_types);
-
-  return me_type;
-}
-
-#define GST_X264_ENC_ANALYSE_TYPE (gst_x264_enc_analyse_get_type())
-static GType
-gst_x264_enc_analyse_get_type (void)
-{
-  static GType analyse_type = 0;
-  static const GFlagsValue analyse_types[] = {
-    {X264_ANALYSE_I4x4, "i4x4", "i4x4"},
-    {X264_ANALYSE_I8x8, "i8x8", "i8x8"},
-    {X264_ANALYSE_PSUB16x16, "p8x8", "p8x8"},
-    {X264_ANALYSE_PSUB8x8, "p4x4", "p4x4"},
-    {X264_ANALYSE_BSUB16x16, "b8x8", "b8x8"},
-    {0, NULL, NULL},
-  };
-
-  if (!analyse_type) {
-    analyse_type = g_flags_register_static ("GstX264EncAnalyse", analyse_types);
-  }
-  return analyse_type;
-}
-
-#define GST_X264_ENC_SPEED_PRESET_TYPE (gst_x264_enc_speed_preset_get_type())
-static GType
-gst_x264_enc_speed_preset_get_type (void)
-{
-  static GType speed_preset_type = 0;
-  static GEnumValue *speed_preset_types;
-  int n, i;
-
-  if (speed_preset_type != 0)
-    return speed_preset_type;
-
-  n = 0;
-  while (x264_preset_names[n] != NULL)
-    n++;
-
-  speed_preset_types = g_new0 (GEnumValue, n + 2);
-
-  speed_preset_types[0].value = 0;
-  speed_preset_types[0].value_name = "No preset";
-  speed_preset_types[0].value_nick = "None";
-
-  for (i = 1; i <= n; i++) {
-    speed_preset_types[i].value = i;
-    speed_preset_types[i].value_name = x264_preset_names[i - 1];
-    speed_preset_types[i].value_nick = x264_preset_names[i - 1];
-  }
-
-  speed_preset_type =
-      g_enum_register_static ("GstX264EncPreset", speed_preset_types);
-
-  return speed_preset_type;
-}
-
-static const GFlagsValue tune_types[] = {
-  {0x0, "No tuning", "none"},
-  {0x1, "Still image", "stillimage"},
-  {0x2, "Fast decode", "fastdecode"},
-  {0x4, "Zero latency", "zerolatency"},
-  {0, NULL, NULL},
-};
-
-#define GST_X264_ENC_TUNE_TYPE (gst_x264_enc_tune_get_type())
-static GType
-gst_x264_enc_tune_get_type (void)
-{
-  static GType tune_type = 0;
-
-  if (!tune_type) {
-    tune_type = g_flags_register_static ("GstX264EncTune", tune_types + 1);
-  }
-  return tune_type;
-}
-
-enum
-{
-  GST_X264_ENC_TUNE_NONE,
-  GST_X264_ENC_TUNE_FILM,
-  GST_X264_ENC_TUNE_ANIMATION,
-  GST_X264_ENC_TUNE_GRAIN,
-  GST_X264_ENC_TUNE_PSNR,
-  GST_X264_ENC_TUNE_SSIM,
-  GST_X264_ENC_TUNE_LAST
-};
-
-static const GEnumValue psy_tune_types[] = {
-  {GST_X264_ENC_TUNE_NONE, "No tuning", "none"},
-  {GST_X264_ENC_TUNE_FILM, "Film", "film"},
-  {GST_X264_ENC_TUNE_ANIMATION, "Animation", "animation"},
-  {GST_X264_ENC_TUNE_GRAIN, "Grain", "grain"},
-  {GST_X264_ENC_TUNE_PSNR, "PSNR", "psnr"},
-  {GST_X264_ENC_TUNE_SSIM, "SSIM", "ssim"},
-  {0, NULL, NULL},
-};
-
-#define GST_X264_ENC_PSY_TUNE_TYPE (gst_x264_enc_psy_tune_get_type())
-static GType
-gst_x264_enc_psy_tune_get_type (void)
-{
-  static GType psy_tune_type = 0;
-
-  if (!psy_tune_type) {
-    psy_tune_type =
-        g_enum_register_static ("GstX264EncPsyTune", psy_tune_types);
-  }
-  return psy_tune_type;
-}
-
-static void
-gst_x264_enc_build_tunings_string (GstX264Enc * x264enc)
-{
-  int i = 1;
-
-  if (x264enc->tunings)
-    g_string_free (x264enc->tunings, TRUE);
-
-  if (x264enc->psy_tune) {
-    x264enc->tunings =
-        g_string_new (psy_tune_types[x264enc->psy_tune].value_nick);
-  } else {
-    x264enc->tunings = g_string_new (NULL);
-  }
-
-  while (tune_types[i].value_name) {
-    if (x264enc->tune & (1 << (i - 1)))
-      g_string_append_printf (x264enc->tunings, "%s%s",
-          x264enc->tunings->len ? "," : "", tune_types[i].value_nick);
-    i++;
-  }
-
-  if (x264enc->tunings->len)
-    GST_DEBUG_OBJECT (x264enc, "Constructed tunings string: %s",
-        x264enc->tunings->str);
-}
-
-#define GST_X264_ENC_FRAME_PACKING_TYPE (gst_x264_enc_frame_packing_get_type())
-static GType
-gst_x264_enc_frame_packing_get_type (void)
-{
-  static GType fpa_type = 0;
-
-  static const GEnumValue fpa_types[] = {
-    {-1, "Automatic (use incoming video information)", "auto"},
-    {0, "checkerboard - Left and Right pixels alternate in a checkerboard pattern", "checkerboard"},
-    {1, "column interleaved - Alternating pixel columns represent Left and Right views", "column-interleaved"},
-    {2, "row interleaved - Alternating pixel rows represent Left and Right views", "row-interleaved"},
-    {3, "side by side - The left half of the frame contains the Left eye view, the right half the Right eye view", "side-by-side"},
-    {4, "top bottom - L is on top, R on bottom", "top-bottom"},
-    {5, "frame interleaved - Each frame contains either Left or Right view alternately", "frame-interleaved"},
-    {0, NULL, NULL}
-  };
-
-  if (!fpa_type) {
-    fpa_type = g_enum_register_static ("GstX264EncFramePacking", fpa_types);
-  }
-  return fpa_type;
-}
-
-static gint
-gst_x264_enc_mview_mode_to_frame_packing (GstVideoMultiviewMode mode)
-{
-  switch (mode) {
-    case GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD:
-      return 0;
-    case GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED:
-      return 1;
-    case GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED:
-      return 2;
-    case GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE:
-      return 3;
-    case GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM:
-      return 4;
-    case GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME:
-      return 5;
-    default:
-      break;
-  }
-
-  return -1;
-}
-
-static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/x-h264, "
-        "framerate = (fraction) [0/1, MAX], "
-        "width = (int) [ 1, MAX ], " "height = (int) [ 1, MAX ], "
-        "stream-format = (string) { avc, byte-stream }, "
-        "alignment = (string) au, "
-        "profile = (string) { high-4:4:4, high-4:2:2, high-10, high, main,"
-        " baseline, constrained-baseline, high-4:4:4-intra, high-4:2:2-intra,"
-        " high-10-intra }")
-    );
-
-static void gst_x264_enc_finalize (GObject * object);
-static gboolean gst_x264_enc_start (GstVideoEncoder * encoder);
-static gboolean gst_x264_enc_stop (GstVideoEncoder * encoder);
-static gboolean gst_x264_enc_flush (GstVideoEncoder * encoder);
-
-static gboolean gst_x264_enc_init_encoder (GstX264Enc * encoder);
-static void gst_x264_enc_close_encoder (GstX264Enc * encoder);
-
-static GstFlowReturn gst_x264_enc_finish (GstVideoEncoder * encoder);
-static GstFlowReturn gst_x264_enc_handle_frame (GstVideoEncoder * encoder,
-    GstVideoCodecFrame * frame);
-static void gst_x264_enc_flush_frames (GstX264Enc * encoder, gboolean send);
-static GstFlowReturn gst_x264_enc_encode_frame (GstX264Enc * encoder,
-    x264_picture_t * pic_in, GstVideoCodecFrame * input_frame, int *i_nal,
-    gboolean send);
-static gboolean gst_x264_enc_set_format (GstVideoEncoder * video_enc,
-    GstVideoCodecState * state);
-static gboolean gst_x264_enc_propose_allocation (GstVideoEncoder * encoder,
-    GstQuery * query);
-
-static void gst_x264_enc_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-static void gst_x264_enc_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
-static gboolean x264_element_init (GstPlugin * plugin);
-
-typedef gboolean (*LoadPresetFunc) (GstPreset * preset, const gchar * name);
-
-LoadPresetFunc parent_load_preset = NULL;
-
-static gboolean
-gst_x264_enc_load_preset (GstPreset * preset, const gchar * name)
-{
-  GstX264Enc *enc = GST_X264_ENC (preset);
-  gboolean res;
-
-  gst_encoder_bitrate_profile_manager_start_loading_preset
-      (enc->bitrate_manager);
-  res = parent_load_preset (preset, name);
-  gst_encoder_bitrate_profile_manager_end_loading_preset (enc->bitrate_manager,
-      res ? name : NULL);
-
-  return res;
-}
-
-static void
-gst_x264_enc_preset_interface_init (GstPresetInterface * iface)
-{
-  parent_load_preset = iface->load_preset;
-  iface->load_preset = gst_x264_enc_load_preset;
-}
-
-#define gst_x264_enc_parent_class parent_class
-G_DEFINE_TYPE_WITH_CODE (GstX264Enc, gst_x264_enc, GST_TYPE_VIDEO_ENCODER,
-    G_IMPLEMENT_INTERFACE (GST_TYPE_PRESET,
-        gst_x264_enc_preset_interface_init));
-GST_ELEMENT_REGISTER_DEFINE_CUSTOM (x264enc, x264_element_init)
-/* don't forget to free the string after use */
-     static const gchar *gst_x264_enc_build_partitions (gint analyse)
-{
-  GString *string;
-
-  if (!analyse)
-    return NULL;
-
-  string = g_string_new (NULL);
-  if (analyse & X264_ANALYSE_I4x4)
-    g_string_append (string, "i4x4");
-  if (analyse & X264_ANALYSE_I8x8)
-    g_string_append (string, ",i8x8");
-  if (analyse & X264_ANALYSE_PSUB16x16)
-    g_string_append (string, ",p8x8");
-  if (analyse & X264_ANALYSE_PSUB8x8)
-    g_string_append (string, ",p4x4");
-  if (analyse & X264_ANALYSE_BSUB16x16)
-    g_string_append (string, ",b8x8");
-
-  return (const gchar *) g_string_free (string, FALSE);
-}
-
-static void
-check_formats (const gchar * str, gboolean * has_420_8, gboolean * has_420_10,
-    gboolean * has_422, gboolean * has_444)
-{
-  if (g_str_has_prefix (str, "high-4:4:4"))
-    *has_444 = TRUE;
-  else if (g_str_has_prefix (str, "high-4:2:2"))
-    *has_422 = TRUE;
-  else if (g_str_has_prefix (str, "high-10"))
-    *has_420_10 = TRUE;
-  else
-    *has_420_8 = TRUE;
-}
-
-
-/* allowed input caps depending on whether libx264 was built for 8 or 10 bits */
-static GstCaps *
-gst_x264_enc_sink_getcaps (GstVideoEncoder * enc, GstCaps * filter)
-{
-  GstCaps *supported_incaps;
-  GstCaps *allowed;
-  GstCaps *filter_caps, *fcaps;
-  gint i, j, k;
-
-  supported_incaps =
-      gst_pad_get_pad_template_caps (GST_VIDEO_ENCODER_SINK_PAD (enc));
-
-  /* Allow downstream to specify width/height/framerate/PAR constraints
-   * and forward them upstream for video converters to handle
-   */
-  allowed = gst_pad_get_allowed_caps (enc->srcpad);
-
-  if (!allowed || gst_caps_is_empty (allowed) || gst_caps_is_any (allowed)) {
-    fcaps = supported_incaps;
-    goto done;
-  }
-
-  GST_LOG_OBJECT (enc, "template caps %" GST_PTR_FORMAT, supported_incaps);
-  GST_LOG_OBJECT (enc, "allowed caps %" GST_PTR_FORMAT, allowed);
-
-  filter_caps = gst_caps_new_empty ();
-
-  for (i = 0; i < gst_caps_get_size (supported_incaps); i++) {
-    GQuark q_name =
-        gst_structure_get_name_id (gst_caps_get_structure (supported_incaps,
-            i));
-
-    for (j = 0; j < gst_caps_get_size (allowed); j++) {
-      const GstStructure *allowed_s = gst_caps_get_structure (allowed, j);
-      const GValue *val;
-      GstStructure *s;
-
-      /* FIXME Find a way to reuse gst_video_encoder_proxy_getcaps so that
-       * we do not need to copy that logic */
-      s = gst_structure_new_id_empty (q_name);
-      if ((val = gst_structure_get_value (allowed_s, "width")))
-        gst_structure_set_value (s, "width", val);
-      if ((val = gst_structure_get_value (allowed_s, "height")))
-        gst_structure_set_value (s, "height", val);
-      if ((val = gst_structure_get_value (allowed_s, "framerate")))
-        gst_structure_set_value (s, "framerate", val);
-      if ((val = gst_structure_get_value (allowed_s, "pixel-aspect-ratio")))
-        gst_structure_set_value (s, "pixel-aspect-ratio", val);
-      if ((val = gst_structure_get_value (allowed_s, "colorimetry")))
-        gst_structure_set_value (s, "colorimetry", val);
-      if ((val = gst_structure_get_value (allowed_s, "chroma-site")))
-        gst_structure_set_value (s, "chroma-site", val);
-
-      if ((val = gst_structure_get_value (allowed_s, "profile"))) {
-        gboolean has_420_8 = FALSE;
-        gboolean has_420_10 = FALSE;
-        gboolean has_422 = FALSE;
-        gboolean has_444 = FALSE;
-
-        if (G_VALUE_HOLDS_STRING (val)) {
-          check_formats (g_value_get_string (val), &has_420_8, &has_420_10,
-              &has_422, &has_444);
-        } else if (GST_VALUE_HOLDS_LIST (val)) {
-          for (k = 0; k < gst_value_list_get_size (val); k++) {
-            const GValue *vlist = gst_value_list_get_value (val, k);
-
-            if (G_VALUE_HOLDS_STRING (vlist))
-              check_formats (g_value_get_string (vlist), &has_420_8,
-                  &has_420_10, &has_422, &has_444);
-          }
-        }
-
-        gst_x264_enc_add_x264_chroma_format (s, has_420_8, has_420_10, has_422,
-            has_444);
-      }
-
-      filter_caps = gst_caps_merge_structure (filter_caps, s);
-    }
-  }
-
-  fcaps = gst_caps_intersect (filter_caps, supported_incaps);
-  gst_caps_unref (filter_caps);
-  gst_caps_unref (supported_incaps);
-
-  if (filter) {
-    GST_LOG_OBJECT (enc, "intersecting with %" GST_PTR_FORMAT, filter);
-    filter_caps = gst_caps_intersect (fcaps, filter);
-    gst_caps_unref (fcaps);
-    fcaps = filter_caps;
-  }
-
-done:
-  gst_caps_replace (&allowed, NULL);
-
-  GST_LOG_OBJECT (enc, "proxy caps %" GST_PTR_FORMAT, fcaps);
-
-  return fcaps;
-}
-
-static gboolean
-gst_x264_enc_sink_query (GstVideoEncoder * enc, GstQuery * query)
-{
-  GstPad *pad = GST_VIDEO_ENCODER_SINK_PAD (enc);
-  gboolean ret = FALSE;
-
-  GST_DEBUG ("Received %s query on sinkpad, %" GST_PTR_FORMAT,
-      GST_QUERY_TYPE_NAME (query), query);
-
-  switch (GST_QUERY_TYPE (query)) {
-    case GST_QUERY_ACCEPT_CAPS:{
-      GstCaps *acceptable, *caps;
-
-      acceptable = gst_pad_get_pad_template_caps (pad);
-
-      gst_query_parse_accept_caps (query, &caps);
-
-      gst_query_set_accept_caps_result (query,
-          gst_caps_is_subset (caps, acceptable));
-      gst_caps_unref (acceptable);
-      ret = TRUE;
-    }
-      break;
-    default:
-      ret = GST_VIDEO_ENCODER_CLASS (parent_class)->sink_query (enc, query);
-      break;
-  }
-
-  return ret;
-}
-
-static void
-gst_x264_enc_class_init (GstX264EncClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *element_class;
-  GstVideoEncoderClass *gstencoder_class;
-  const gchar *partitions = NULL;
-  GstPadTemplate *sink_templ;
-  GstCaps *supported_sinkcaps;
-
-  x264enc_defaults = g_string_new ("");
-
-  gobject_class = G_OBJECT_CLASS (klass);
-  element_class = GST_ELEMENT_CLASS (klass);
-  gstencoder_class = GST_VIDEO_ENCODER_CLASS (klass);
-
-  gobject_class->set_property = gst_x264_enc_set_property;
-  gobject_class->get_property = gst_x264_enc_get_property;
-  gobject_class->finalize = gst_x264_enc_finalize;
-
-  gstencoder_class->set_format = GST_DEBUG_FUNCPTR (gst_x264_enc_set_format);
-  gstencoder_class->handle_frame =
-      GST_DEBUG_FUNCPTR (gst_x264_enc_handle_frame);
-  gstencoder_class->start = GST_DEBUG_FUNCPTR (gst_x264_enc_start);
-  gstencoder_class->stop = GST_DEBUG_FUNCPTR (gst_x264_enc_stop);
-  gstencoder_class->flush = GST_DEBUG_FUNCPTR (gst_x264_enc_flush);
-  gstencoder_class->finish = GST_DEBUG_FUNCPTR (gst_x264_enc_finish);
-  gstencoder_class->getcaps = GST_DEBUG_FUNCPTR (gst_x264_enc_sink_getcaps);
-  gstencoder_class->propose_allocation =
-      GST_DEBUG_FUNCPTR (gst_x264_enc_propose_allocation);
-  gstencoder_class->sink_query = GST_DEBUG_FUNCPTR (gst_x264_enc_sink_query);
-
-  /* options for which we don't use string equivalents */
-  g_object_class_install_property (gobject_class, ARG_PASS,
-      g_param_spec_enum ("pass", "Encoding pass/type",
-          "Encoding pass/type", GST_X264_ENC_PASS_TYPE,
-          ARG_PASS_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (gobject_class, ARG_QUANTIZER,
-      g_param_spec_uint ("quantizer", "Constant Quantizer",
-          "Constant quantizer or quality to apply",
-          0, 50, ARG_QUANTIZER_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (gobject_class, ARG_BITRATE,
-      g_param_spec_uint ("bitrate", "Bitrate", "Bitrate in kbit/sec", 1,
-          2000 * 1024, ARG_BITRATE_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
-          GST_PARAM_MUTABLE_PLAYING));
-  g_object_class_install_property (gobject_class, ARG_VBV_BUF_CAPACITY,
-      g_param_spec_uint ("vbv-buf-capacity", "VBV buffer capacity",
-          "Size of the VBV buffer in milliseconds",
-          0, 10000, ARG_VBV_BUF_CAPACITY_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
-          GST_PARAM_MUTABLE_PLAYING));
-  g_object_class_install_property (gobject_class, ARG_SPEED_PRESET,
-      g_param_spec_enum ("speed-preset", "Speed/quality preset",
-          "Preset name for speed/quality tradeoff options (can affect decode "
-          "compatibility - impose restrictions separately for your target decoder)",
-          GST_X264_ENC_SPEED_PRESET_TYPE, ARG_SPEED_PRESET_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (gobject_class, ARG_PSY_TUNE,
-      g_param_spec_enum ("psy-tune", "Psychovisual tuning preset",
-          "Preset name for psychovisual tuning options",
-          GST_X264_ENC_PSY_TUNE_TYPE, ARG_PSY_TUNE_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (gobject_class, ARG_TUNE,
-      g_param_spec_flags ("tune", "Content tuning preset",
-          "Preset name for non-psychovisual tuning options",
-          GST_X264_ENC_TUNE_TYPE, ARG_TUNE_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (gobject_class, ARG_OPTION_STRING,
-      g_param_spec_string ("option-string", "Option string",
-          "String of x264 options (overridden by element properties)"
-          " in the format \"key1=value1:key2=value2\".",
-          ARG_OPTION_STRING_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, ARG_FRAME_PACKING,
-      g_param_spec_enum ("frame-packing", "Frame Packing",
-          "Set frame packing mode for Stereoscopic content",
-          GST_X264_ENC_FRAME_PACKING_TYPE, ARG_FRAME_PACKING_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  g_object_class_install_property (gobject_class, ARG_INSERT_VUI,
-      g_param_spec_boolean ("insert-vui", "Insert VUI",
-          "Insert VUI NAL in stream",
-          ARG_INSERT_VUI_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  /* options for which we _do_ use string equivalents */
-  g_object_class_install_property (gobject_class, ARG_THREADS,
-      g_param_spec_uint ("threads", "Threads",
-          "Number of threads used by the codec (0 for automatic)",
-          0, G_MAXINT, ARG_THREADS_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  /* NOTE: this first string append doesn't require the ':' delimiter but the
-   * rest do */
-  g_string_append_printf (x264enc_defaults, "threads=%d", ARG_THREADS_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_SLICED_THREADS,
-      g_param_spec_boolean ("sliced-threads", "Sliced Threads",
-          "Low latency but lower efficiency threading",
-          ARG_SLICED_THREADS_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":sliced-threads=%d",
-      ARG_SLICED_THREADS_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_SYNC_LOOKAHEAD,
-      g_param_spec_int ("sync-lookahead", "Sync Lookahead",
-          "Number of buffer frames for threaded lookahead (-1 for automatic)",
-          -1, 250, ARG_SYNC_LOOKAHEAD_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":sync-lookahead=%d",
-      ARG_SYNC_LOOKAHEAD_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_MULTIPASS_CACHE_FILE,
-      g_param_spec_string ("multipass-cache-file", "Multipass Cache File",
-          "Filename for multipass cache file",
-          ARG_MULTIPASS_CACHE_FILE_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":stats=%s",
-      ARG_MULTIPASS_CACHE_FILE_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_BYTE_STREAM,
-      g_param_spec_boolean ("byte-stream", "Byte Stream",
-          "Generate byte stream format of NALU", ARG_BYTE_STREAM_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":annexb=%d",
-      ARG_BYTE_STREAM_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_INTRA_REFRESH,
-      g_param_spec_boolean ("intra-refresh", "Intra Refresh",
-          "Use Periodic Intra Refresh instead of IDR frames",
-          ARG_INTRA_REFRESH_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":intra-refresh=%d",
-      ARG_INTRA_REFRESH_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_ME,
-      g_param_spec_enum ("me", "Motion Estimation",
-          "Integer pixel motion estimation method", GST_X264_ENC_ME_TYPE,
-          ARG_ME_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":me=%s",
-      x264_motion_est_names[ARG_ME_DEFAULT]);
-  g_object_class_install_property (gobject_class, ARG_SUBME,
-      g_param_spec_uint ("subme", "Subpixel Motion Estimation",
-          "Subpixel motion estimation and partition decision quality: 1=fast, 10=best",
-          1, 10, ARG_SUBME_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":subme=%d", ARG_SUBME_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_ANALYSE,
-      g_param_spec_flags ("analyse", "Analyse", "Partitions to consider",
-          GST_X264_ENC_ANALYSE_TYPE, ARG_ANALYSE_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  partitions = gst_x264_enc_build_partitions (ARG_ANALYSE_DEFAULT);
-  if (partitions) {
-    g_string_append_printf (x264enc_defaults, ":partitions=%s", partitions);
-    g_free ((gpointer) partitions);
-  }
-  g_object_class_install_property (gobject_class, ARG_DCT8x8,
-      g_param_spec_boolean ("dct8x8", "DCT8x8",
-          "Adaptive spatial transform size", ARG_DCT8x8_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":8x8dct=%d", ARG_DCT8x8_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_REF,
-      g_param_spec_uint ("ref", "Reference Frames",
-          "Number of reference frames",
-          1, 16, ARG_REF_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":ref=%d", ARG_REF_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_BFRAMES,
-      g_param_spec_uint ("bframes", "B-Frames",
-          "Number of B-frames between I and P",
-          0, 16, ARG_BFRAMES_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":bframes=%d", ARG_BFRAMES_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_B_ADAPT,
-      g_param_spec_boolean ("b-adapt", "B-Adapt",
-          "Automatically decide how many B-frames to use",
-          ARG_B_ADAPT_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":b-adapt=%d", ARG_B_ADAPT_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_B_PYRAMID,
-      g_param_spec_boolean ("b-pyramid", "B-Pyramid",
-          "Keep some B-frames as references", ARG_B_PYRAMID_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":b-pyramid=%s",
-      x264_b_pyramid_names[ARG_B_PYRAMID_DEFAULT]);
-  g_object_class_install_property (gobject_class, ARG_WEIGHTB,
-      g_param_spec_boolean ("weightb", "Weighted B-Frames",
-          "Weighted prediction for B-frames", ARG_WEIGHTB_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":weightb=%d", ARG_WEIGHTB_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_SPS_ID,
-      g_param_spec_uint ("sps-id", "SPS ID",
-          "SPS and PPS ID number",
-          0, 31, ARG_SPS_ID_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":sps-id=%d", ARG_SPS_ID_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_AU_NALU,
-      g_param_spec_boolean ("aud", "AUD",
-          "Use AU (Access Unit) delimiter", ARG_AU_NALU_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":aud=%d", ARG_AU_NALU_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_TRELLIS,
-      g_param_spec_boolean ("trellis", "Trellis quantization",
-          "Enable trellis searched quantization", ARG_TRELLIS_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":trellis=%d", ARG_TRELLIS_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_KEYINT_MAX,
-      g_param_spec_uint ("key-int-max", "Key-frame maximal interval",
-          "Maximal distance between two key-frames (0 for automatic)",
-          0, G_MAXINT, ARG_KEYINT_MAX_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":keyint=%d",
-      ARG_KEYINT_MAX_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_CABAC,
-      g_param_spec_boolean ("cabac", "Use CABAC", "Enable CABAC entropy coding",
-          ARG_CABAC_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":cabac=%d", ARG_CABAC_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_QP_MIN,
-      g_param_spec_uint ("qp-min", "Minimum Quantizer",
-          "Minimum quantizer", 0, 63, ARG_QP_MIN_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":qpmin=%d", ARG_QP_MIN_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_QP_MAX,
-      g_param_spec_uint ("qp-max", "Maximum Quantizer",
-          "Maximum quantizer", 0, 63, ARG_QP_MAX_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":qpmax=%d", ARG_QP_MAX_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_QP_STEP,
-      g_param_spec_uint ("qp-step", "Maximum Quantizer Difference",
-          "Maximum quantizer difference between frames",
-          0, 63, ARG_QP_STEP_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":qpstep=%d", ARG_QP_STEP_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_IP_FACTOR,
-      g_param_spec_float ("ip-factor", "IP-Factor",
-          "Quantizer factor between I- and P-frames",
-          0, 2, ARG_IP_FACTOR_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":ip-factor=%f",
-      ARG_IP_FACTOR_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_PB_FACTOR,
-      g_param_spec_float ("pb-factor", "PB-Factor",
-          "Quantizer factor between P- and B-frames", 0, 2,
-          ARG_PB_FACTOR_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":pb-factor=%f",
-      ARG_PB_FACTOR_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_RC_MB_TREE,
-      g_param_spec_boolean ("mb-tree", "Macroblock Tree",
-          "Macroblock-Tree ratecontrol",
-          ARG_RC_MB_TREE_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":mbtree=%d",
-      ARG_RC_MB_TREE_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_RC_LOOKAHEAD,
-      g_param_spec_int ("rc-lookahead", "Rate Control Lookahead",
-          "Number of frames for frametype lookahead", 0, 250,
-          ARG_RC_LOOKAHEAD_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":rc-lookahead=%d",
-      ARG_RC_LOOKAHEAD_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_NR,
-      g_param_spec_uint ("noise-reduction", "Noise Reduction",
-          "Noise reduction strength",
-          0, 100000, ARG_NR_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":nr=%d", ARG_NR_DEFAULT);
-  g_object_class_install_property (gobject_class, ARG_INTERLACED,
-      g_param_spec_boolean ("interlaced", "Interlaced",
-          "Interlaced material", ARG_INTERLACED_DEFAULT,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-  g_string_append_printf (x264enc_defaults, ":interlaced=%d",
-      ARG_INTERLACED_DEFAULT);
-
-  /* append deblock parameters */
-  g_string_append_printf (x264enc_defaults, ":deblock=0,0");
-  /* append weighted prediction parameter */
-  g_string_append_printf (x264enc_defaults, ":weightp=0");
-
-  gst_element_class_set_static_metadata (element_class,
-      "x264enc", "Codec/Encoder/Video", "H264 Encoder",
-      "Josef Zlomek <josef.zlomek@itonis.tv>, "
-      "Mark Nauwelaerts <mnauw@users.sf.net>");
-
-  supported_sinkcaps = gst_caps_new_simple ("video/x-raw",
-      "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1,
-      "width", GST_TYPE_INT_RANGE, 1, G_MAXINT,
-      "height", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL);
-
-  gst_x264_enc_add_x264_chroma_format (gst_caps_get_structure
-      (supported_sinkcaps, 0), TRUE, TRUE, TRUE, TRUE);
-
-  sink_templ = gst_pad_template_new ("sink",
-      GST_PAD_SINK, GST_PAD_ALWAYS, supported_sinkcaps);
-
-  gst_caps_unref (supported_sinkcaps);
-
-  gst_element_class_add_pad_template (element_class, sink_templ);
-  gst_element_class_add_static_pad_template (element_class, &src_factory);
-
-  gst_type_mark_as_plugin_api (GST_X264_ENC_ANALYSE_TYPE, 0);
-  gst_type_mark_as_plugin_api (GST_X264_ENC_FRAME_PACKING_TYPE, 0);
-  gst_type_mark_as_plugin_api (GST_X264_ENC_ME_TYPE, 0);
-  gst_type_mark_as_plugin_api (GST_X264_ENC_PASS_TYPE, 0);
-  gst_type_mark_as_plugin_api (GST_X264_ENC_PSY_TUNE_TYPE, 0);
-  gst_type_mark_as_plugin_api (GST_X264_ENC_SPEED_PRESET_TYPE, 0);
-  gst_type_mark_as_plugin_api (GST_X264_ENC_TUNE_TYPE, 0);
-}
-
-/* *INDENT-OFF* */
-G_GNUC_PRINTF (3, 0)
-/* *INDENT-ON* */
-
-static void
-gst_x264_enc_log_callback (gpointer private, gint level, const char *format,
-    va_list args)
-{
-#ifndef GST_DISABLE_GST_DEBUG
-  GstDebugLevel gst_level;
-  GObject *object = (GObject *) private;
-  gchar *formatted;
-
-  switch (level) {
-    case X264_LOG_NONE:
-      gst_level = GST_LEVEL_NONE;
-      break;
-    case X264_LOG_ERROR:
-      gst_level = GST_LEVEL_ERROR;
-      break;
-    case X264_LOG_WARNING:
-      gst_level = GST_LEVEL_WARNING;
-      break;
-    case X264_LOG_INFO:
-      gst_level = GST_LEVEL_INFO;
-      break;
-    default:
-      /* push x264enc debug down to our lower levels to avoid some clutter */
-      gst_level = GST_LEVEL_LOG;
-      break;
-  }
-
-  if (G_LIKELY (gst_level > _gst_debug_min))
-    return;
-
-  if (G_LIKELY (gst_level > gst_debug_category_get_threshold (GST_CAT_DEFAULT)))
-    return;
-
-  formatted = g_strdup_vprintf (format, args);
-  g_strchomp (formatted);
-
-  GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, gst_level, object, "%s", formatted);
-
-  g_free (formatted);
-#endif /* GST_DISABLE_GST_DEBUG */
-}
-
-/* initialize the new element
- * instantiate pads and add them to element
- * set functions
- * initialize structure
- */
-static void
-gst_x264_enc_init (GstX264Enc * encoder)
-{
-  /* properties */
-  encoder->threads = ARG_THREADS_DEFAULT;
-  encoder->sliced_threads = ARG_SLICED_THREADS_DEFAULT;
-  encoder->sync_lookahead = ARG_SYNC_LOOKAHEAD_DEFAULT;
-  encoder->pass = ARG_PASS_DEFAULT;
-  encoder->quantizer = ARG_QUANTIZER_DEFAULT;
-  encoder->mp_cache_file = g_strdup (ARG_MULTIPASS_CACHE_FILE_DEFAULT);
-  encoder->byte_stream = ARG_BYTE_STREAM_DEFAULT;
-  encoder->intra_refresh = ARG_INTRA_REFRESH_DEFAULT;
-  encoder->vbv_buf_capacity = ARG_VBV_BUF_CAPACITY_DEFAULT;
-  encoder->me = ARG_ME_DEFAULT;
-  encoder->subme = ARG_SUBME_DEFAULT;
-  encoder->analyse = ARG_ANALYSE_DEFAULT;
-  encoder->dct8x8 = ARG_DCT8x8_DEFAULT;
-  encoder->ref = ARG_REF_DEFAULT;
-  encoder->bframes = ARG_BFRAMES_DEFAULT;
-  encoder->b_adapt = ARG_B_ADAPT_DEFAULT;
-  encoder->b_pyramid = ARG_B_PYRAMID_DEFAULT;
-  encoder->weightb = ARG_WEIGHTB_DEFAULT;
-  encoder->sps_id = ARG_SPS_ID_DEFAULT;
-  encoder->au_nalu = ARG_AU_NALU_DEFAULT;
-  encoder->trellis = ARG_TRELLIS_DEFAULT;
-  encoder->keyint_max = ARG_KEYINT_MAX_DEFAULT;
-  encoder->cabac = ARG_CABAC_DEFAULT;
-  encoder->qp_min = ARG_QP_MIN_DEFAULT;
-  encoder->qp_max = ARG_QP_MAX_DEFAULT;
-  encoder->qp_step = ARG_QP_STEP_DEFAULT;
-  encoder->ip_factor = ARG_IP_FACTOR_DEFAULT;
-  encoder->pb_factor = ARG_PB_FACTOR_DEFAULT;
-  encoder->mb_tree = ARG_RC_MB_TREE_DEFAULT;
-  encoder->rc_lookahead = ARG_RC_LOOKAHEAD_DEFAULT;
-  encoder->noise_reduction = ARG_NR_DEFAULT;
-  encoder->interlaced = ARG_INTERLACED_DEFAULT;
-  encoder->option_string = g_string_new (NULL);
-  encoder->option_string_prop = g_string_new (ARG_OPTION_STRING_DEFAULT);
-  encoder->speed_preset = ARG_SPEED_PRESET_DEFAULT;
-  encoder->psy_tune = ARG_PSY_TUNE_DEFAULT;
-  encoder->tune = ARG_TUNE_DEFAULT;
-  encoder->frame_packing = ARG_FRAME_PACKING_DEFAULT;
-  encoder->insert_vui = ARG_INSERT_VUI_DEFAULT;
-
-  encoder->bitrate_manager =
-      gst_encoder_bitrate_profile_manager_new (ARG_BITRATE_DEFAULT);
-}
-
-typedef struct
-{
-  GstVideoCodecFrame *frame;
-  GstVideoFrame vframe;
-} FrameData;
-
-static FrameData *
-gst_x264_enc_queue_frame (GstX264Enc * enc, GstVideoCodecFrame * frame,
-    GstVideoInfo * info)
-{
-  GstVideoFrame vframe;
-  FrameData *fdata;
-
-  if (!gst_video_frame_map (&vframe, info, frame->input_buffer, GST_MAP_READ))
-    return NULL;
-
-  fdata = g_slice_new (FrameData);
-  fdata->frame = gst_video_codec_frame_ref (frame);
-  fdata->vframe = vframe;
-
-  enc->pending_frames = g_list_prepend (enc->pending_frames, fdata);
-
-  return fdata;
-}
-
-static void
-gst_x264_enc_dequeue_frame (GstX264Enc * enc, GstVideoCodecFrame * frame)
-{
-  GList *l;
-
-  for (l = enc->pending_frames; l; l = l->next) {
-    FrameData *fdata = l->data;
-
-    if (fdata->frame != frame)
-      continue;
-
-    gst_video_frame_unmap (&fdata->vframe);
-    gst_video_codec_frame_unref (fdata->frame);
-    g_slice_free (FrameData, fdata);
-
-    enc->pending_frames = g_list_delete_link (enc->pending_frames, l);
-    return;
-  }
-}
-
-static void
-gst_x264_enc_dequeue_all_frames (GstX264Enc * enc)
-{
-  GList *l;
-
-  for (l = enc->pending_frames; l; l = l->next) {
-    FrameData *fdata = l->data;
-
-    gst_video_frame_unmap (&fdata->vframe);
-    gst_video_codec_frame_unref (fdata->frame);
-    g_slice_free (FrameData, fdata);
-  }
-  g_list_free (enc->pending_frames);
-  enc->pending_frames = NULL;
-}
-
-static gboolean
-gst_x264_enc_start (GstVideoEncoder * encoder)
-{
-  GstX264Enc *x264enc = GST_X264_ENC (encoder);
-
-  x264enc->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_FROM_PROPERTY;
-
-  /* make sure that we have enough time for first DTS,
-     this is probably overkill for most streams */
-  gst_video_encoder_set_min_pts (encoder, GST_SECOND * 60 * 60 * 1000);
-
-  return TRUE;
-}
-
-static gboolean
-gst_x264_enc_stop (GstVideoEncoder * encoder)
-{
-  GstX264Enc *x264enc = GST_X264_ENC (encoder);
-
-  gst_x264_enc_flush_frames (x264enc, FALSE);
-  gst_x264_enc_close_encoder (x264enc);
-  gst_x264_enc_dequeue_all_frames (x264enc);
-
-  if (x264enc->input_state)
-    gst_video_codec_state_unref (x264enc->input_state);
-  x264enc->input_state = NULL;
-
-  return TRUE;
-}
-
-
-static gboolean
-gst_x264_enc_flush (GstVideoEncoder * encoder)
-{
-  GstX264Enc *x264enc = GST_X264_ENC (encoder);
-
-  gst_x264_enc_flush_frames (x264enc, FALSE);
-  gst_x264_enc_close_encoder (x264enc);
-  gst_x264_enc_dequeue_all_frames (x264enc);
-
-  gst_x264_enc_init_encoder (x264enc);
-
-  return TRUE;
-}
-
-static void
-gst_x264_enc_finalize (GObject * object)
-{
-  GstX264Enc *encoder = GST_X264_ENC (object);
-
-  if (encoder->input_state)
-    gst_video_codec_state_unref (encoder->input_state);
-  encoder->input_state = NULL;
-
-#define FREE_STRING(ptr) \
-  if (ptr) \
-    g_string_free (ptr, TRUE);
-
-  FREE_STRING (encoder->tunings);
-  FREE_STRING (encoder->option_string);
-  FREE_STRING (encoder->option_string_prop);
-  gst_encoder_bitrate_profile_manager_free (encoder->bitrate_manager);
-
-#undef FREE_STRING
-
-  g_free (encoder->mp_cache_file);
-  encoder->mp_cache_file = NULL;
-
-  gst_x264_enc_close_encoder (encoder);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-/*
- * gst_x264_enc_parse_options
- * @encoder: Encoder to which options are assigned
- * @str: Option string
- *
- * Parse option string and assign to x264 parameters
- *
- */
-static gboolean
-gst_x264_enc_parse_options (GstX264Enc * encoder, const gchar * str)
-{
-  GStrv kvpairs;
-  guint npairs, i;
-  gint parse_result = 0, ret = 0;
-  gchar *options = (gchar *) str;
-
-  while (*options == ':')
-    options++;
-
-  kvpairs = g_strsplit (options, ":", 0);
-  npairs = g_strv_length (kvpairs);
-
-  for (i = 0; i < npairs; i++) {
-    GStrv key_val = g_strsplit (kvpairs[i], "=", 2);
-
-    parse_result =
-        encoder->vtable->x264_param_parse (&encoder->x264param, key_val[0],
-        key_val[1]);
-
-    if (parse_result == X264_PARAM_BAD_NAME) {
-      GST_ERROR_OBJECT (encoder, "Bad name for option %s=%s",
-          key_val[0] ? key_val[0] : "", key_val[1] ? key_val[1] : "");
-    }
-    if (parse_result == X264_PARAM_BAD_VALUE) {
-      GST_ERROR_OBJECT (encoder,
-          "Bad value for option %s=%s (Note: a NULL value for a non-boolean triggers this)",
-          key_val[0] ? key_val[0] : "", key_val[1] ? key_val[1] : "");
-    }
-
-    g_strfreev (key_val);
-
-    if (parse_result)
-      ret++;
-  }
-
-  g_strfreev (kvpairs);
-  return !ret;
-}
-
-static gint
-gst_x264_enc_gst_to_x264_video_format (GstVideoFormat format, gint * nplanes)
-{
-  switch (format) {
-    case GST_VIDEO_FORMAT_I420:
-    case GST_VIDEO_FORMAT_YV12:
-      if (nplanes)
-        *nplanes = 3;
-      return X264_CSP_I420;
-    case GST_VIDEO_FORMAT_I420_10BE:
-    case GST_VIDEO_FORMAT_I420_10LE:
-      if (nplanes)
-        *nplanes = 3;
-      return X264_CSP_I420 | X264_CSP_HIGH_DEPTH;
-    case GST_VIDEO_FORMAT_Y42B:
-      if (nplanes)
-        *nplanes = 3;
-      return X264_CSP_I422;
-    case GST_VIDEO_FORMAT_I422_10BE:
-    case GST_VIDEO_FORMAT_I422_10LE:
-      if (nplanes)
-        *nplanes = 3;
-      return X264_CSP_I422 | X264_CSP_HIGH_DEPTH;
-    case GST_VIDEO_FORMAT_Y444:
-      if (nplanes)
-        *nplanes = 3;
-      return X264_CSP_I444;
-    case GST_VIDEO_FORMAT_Y444_10BE:
-    case GST_VIDEO_FORMAT_Y444_10LE:
-      if (nplanes)
-        *nplanes = 3;
-      return X264_CSP_I444 | X264_CSP_HIGH_DEPTH;
-    case GST_VIDEO_FORMAT_NV12:
-      if (nplanes)
-        *nplanes = 2;
-      return X264_CSP_NV12;
-    default:
-      g_return_val_if_reached (GST_VIDEO_FORMAT_UNKNOWN);
-  }
-}
-
-/*
- * gst_x264_enc_init_encoder
- * @encoder:  Encoder which should be initialized.
- *
- * Initialize x264 encoder.
- *
- */
-static gboolean
-gst_x264_enc_init_encoder (GstX264Enc * encoder)
-{
-  guint pass = 0;
-  GstVideoInfo *info;
-  guint bitrate;
-
-  if (!encoder->input_state) {
-    GST_DEBUG_OBJECT (encoder, "Have no input state yet");
-    return FALSE;
-  }
-
-  info = &encoder->input_state->info;
-
-  /* make sure that the encoder is closed */
-  gst_x264_enc_close_encoder (encoder);
-
-  GST_OBJECT_LOCK (encoder);
-
-  if (GST_VIDEO_INFO_COMP_DEPTH (info, 0) == 8)
-    encoder->vtable = vtable_8bit;
-  else if (GST_VIDEO_INFO_COMP_DEPTH (info, 0) == 10)
-    encoder->vtable = vtable_10bit;
-
-  g_assert (encoder->vtable != NULL);
-
-  gst_x264_enc_build_tunings_string (encoder);
-
-  /* set x264 parameters and use preset/tuning if present */
-  GST_DEBUG_OBJECT (encoder, "Applying defaults with preset %s, tunings %s",
-      encoder->speed_preset ? x264_preset_names[encoder->speed_preset - 1] : "",
-      encoder->tunings && encoder->tunings->len ? encoder->tunings->str : "");
-  encoder->vtable->x264_param_default_preset (&encoder->x264param,
-      encoder->speed_preset ? x264_preset_names[encoder->speed_preset -
-          1] : NULL, encoder->tunings
-      && encoder->tunings->len ? encoder->tunings->str : NULL);
-
-  /* log callback setup; part of parameters
-   * this needs to be done again after every *param_default* () call */
-  encoder->x264param.pf_log = gst_x264_enc_log_callback;
-  encoder->x264param.p_log_private = encoder;
-  encoder->x264param.i_log_level = X264_LOG_DEBUG;
-
-  /* if no preset nor tuning, use property defaults */
-  if (!encoder->speed_preset && !encoder->tunings->len) {
-    GST_DEBUG_OBJECT (encoder, "Applying x264enc_defaults");
-    if (x264enc_defaults->len
-        && gst_x264_enc_parse_options (encoder,
-            x264enc_defaults->str) == FALSE) {
-      GST_DEBUG_OBJECT (encoder,
-          "x264enc_defaults string contains errors. This is a bug.");
-      goto unlock_and_return;
-    }
-  } else {
-    /* When using presets we need to respect the default output format */
-    encoder->x264param.b_aud = encoder->au_nalu;
-    encoder->x264param.b_annexb = encoder->byte_stream;
-  }
-
-  /* setup appropriate timebase for gstreamer */
-  encoder->x264param.i_timebase_num = 1;
-  encoder->x264param.i_timebase_den = 1000000000;
-
-  /* apply option-string property */
-  if (encoder->option_string_prop && encoder->option_string_prop->len) {
-    GST_DEBUG_OBJECT (encoder, "Applying option-string: %s",
-        encoder->option_string_prop->str);
-    if (gst_x264_enc_parse_options (encoder,
-            encoder->option_string_prop->str) == FALSE) {
-      GST_DEBUG_OBJECT (encoder, "Your option-string contains errors.");
-      goto unlock_and_return;
-    }
-  }
-  /* apply user-set options */
-  if (encoder->option_string && encoder->option_string->len) {
-    GST_DEBUG_OBJECT (encoder, "Applying user-set options: %s",
-        encoder->option_string->str);
-    if (gst_x264_enc_parse_options (encoder,
-            encoder->option_string->str) == FALSE) {
-      GST_DEBUG_OBJECT (encoder, "Failed to parse internal option string. "
-          "This could be due to use of an old libx264 version. Option string "
-          "was: %s", encoder->option_string->str);
-    }
-  }
-
-  /* set up encoder parameters */
-#if X264_BUILD >= 153
-  encoder->x264param.i_bitdepth = GST_VIDEO_INFO_COMP_DEPTH (info, 0);
-#endif
-  encoder->x264param.i_csp =
-      gst_x264_enc_gst_to_x264_video_format (info->finfo->format,
-      &encoder->x264_nplanes);
-  if (info->fps_d == 0 || info->fps_n == 0) {
-    /* No FPS so must use VFR
-     * This raises latency apparently see http://mewiki.project357.com/wiki/X264_Encoding_Suggestions */
-    encoder->x264param.b_vfr_input = TRUE;
-    if (encoder->keyint_max) {  /* NB the default is 250 setup by x264 itself */
-      encoder->x264param.i_keyint_max = encoder->keyint_max;
-    }
-  } else {
-    /* FPS available so set it up */
-    encoder->x264param.b_vfr_input = FALSE;
-    encoder->x264param.i_fps_num = info->fps_n;
-    encoder->x264param.i_fps_den = info->fps_d;
-    encoder->x264param.i_keyint_max =
-        encoder->keyint_max ? encoder->keyint_max : (10 * info->fps_n /
-        info->fps_d);
-  }
-  encoder->x264param.i_width = info->width;
-  encoder->x264param.i_height = info->height;
-  if (info->par_d > 0) {
-    encoder->x264param.vui.i_sar_width = info->par_n;
-    encoder->x264param.vui.i_sar_height = info->par_d;
-  }
-
-  if ((((info->height == 576) && ((info->width == 720)
-                  || (info->width == 704) || (info->width == 352)))
-          || ((info->height == 288) && (info->width == 352)))
-      && (info->fps_d == 1) && (info->fps_n == 25)) {
-    encoder->x264param.vui.i_vidformat = 1;     /* PAL */
-  } else if ((((info->height == 480) && ((info->width == 720)
-                  || (info->width == 704) || (info->width == 352)))
-          || ((info->height == 240) && (info->width == 352)))
-      && (info->fps_d == 1001) && ((info->fps_n == 30000)
-          || (info->fps_n == 24000))) {
-    encoder->x264param.vui.i_vidformat = 2;     /* NTSC */
-  } else {
-    encoder->x264param.vui.i_vidformat = 5;     /* unspecified */
-  }
-
-  if (!encoder->insert_vui)
-    goto skip_vui_parameters;
-
-  encoder->x264param.vui.i_colorprim =
-      gst_video_color_primaries_to_iso (info->colorimetry.primaries);
-
-  encoder->x264param.vui.i_transfer =
-      gst_video_transfer_function_to_iso (info->colorimetry.transfer);
-
-  encoder->x264param.vui.i_colmatrix =
-      gst_video_color_matrix_to_iso (info->colorimetry.matrix);
-
-  if (info->colorimetry.range == GST_VIDEO_COLOR_RANGE_0_255) {
-    encoder->x264param.vui.b_fullrange = 1;
-  } else {
-    encoder->x264param.vui.b_fullrange = 0;
-  }
-
-  switch (info->chroma_site) {
-    case GST_VIDEO_CHROMA_SITE_MPEG2:
-      encoder->x264param.vui.i_chroma_loc = 0;
-      break;
-    case GST_VIDEO_CHROMA_SITE_JPEG:
-      encoder->x264param.vui.i_chroma_loc = 1;
-      break;
-    case GST_VIDEO_CHROMA_SITE_V_COSITED:
-      encoder->x264param.vui.i_chroma_loc = 3;
-      break;
-    case GST_VIDEO_CHROMA_SITE_DV:
-      encoder->x264param.vui.i_chroma_loc = 2;
-      break;
-    default:
-      encoder->x264param.vui.i_chroma_loc = 0;
-      break;
-  }
-
-skip_vui_parameters:
-
-  encoder->x264param.analyse.b_psnr = 0;
-
-  bitrate =
-      gst_encoder_bitrate_profile_manager_get_bitrate (encoder->bitrate_manager,
-      encoder->input_state ? &encoder->input_state->info : NULL);
-
-  /* FIXME 2.0 make configuration more sane and consistent with x264 cmdline:
-   * + split pass property into a pass property (pass1/2/3 enum) and rc-method
-   * + bitrate property should only be used in case of CBR method
-   * + vbv bitrate/buffer should have separate configuration that is then
-   *   applied independently of the mode:
-   *    + either using properties (new) vbv-maxrate and (renamed) vbv-bufsize
-   *    + or dropping vbv-buf-capacity altogether and simply using option-string
-   */
-  switch (encoder->pass) {
-    case GST_X264_ENC_PASS_QUANT:
-      encoder->x264param.rc.i_rc_method = X264_RC_CQP;
-      encoder->x264param.rc.i_qp_constant = encoder->quantizer;
-      break;
-    case GST_X264_ENC_PASS_QUAL:
-      encoder->x264param.rc.i_rc_method = X264_RC_CRF;
-      encoder->x264param.rc.f_rf_constant = encoder->quantizer;
-      encoder->x264param.rc.i_vbv_max_bitrate = bitrate;
-      encoder->x264param.rc.i_vbv_buffer_size
-          = encoder->x264param.rc.i_vbv_max_bitrate
-          * encoder->vbv_buf_capacity / 1000;
-      break;
-    case GST_X264_ENC_PASS_CBR:
-    case GST_X264_ENC_PASS_PASS1:
-    case GST_X264_ENC_PASS_PASS2:
-    case GST_X264_ENC_PASS_PASS3:
-    default:
-      encoder->x264param.rc.i_rc_method = X264_RC_ABR;
-      encoder->x264param.rc.i_bitrate = bitrate;
-      encoder->x264param.rc.i_vbv_max_bitrate = bitrate;
-      encoder->x264param.rc.i_vbv_buffer_size =
-          encoder->x264param.rc.i_vbv_max_bitrate
-          * encoder->vbv_buf_capacity / 1000;
-      pass = encoder->pass & 0xF;
-      break;
-  }
-
-  switch (pass) {
-    case 0:
-      encoder->x264param.rc.b_stat_read = 0;
-      encoder->x264param.rc.b_stat_write = 0;
-      break;
-    case 1:
-      encoder->x264param.rc.b_stat_read = 0;
-      encoder->x264param.rc.b_stat_write = 1;
-      encoder->vtable->x264_param_apply_fastfirstpass (&encoder->x264param);
-      encoder->x264param.i_frame_reference = 1;
-      encoder->x264param.analyse.b_transform_8x8 = 0;
-      encoder->x264param.analyse.inter = 0;
-      encoder->x264param.analyse.i_me_method = X264_ME_DIA;
-      encoder->x264param.analyse.i_subpel_refine =
-          MIN (2, encoder->x264param.analyse.i_subpel_refine);
-      encoder->x264param.analyse.i_trellis = 0;
-      encoder->x264param.analyse.b_fast_pskip = 1;
-      break;
-    case 2:
-      encoder->x264param.rc.b_stat_read = 1;
-      encoder->x264param.rc.b_stat_write = 0;
-      break;
-    case 3:
-      encoder->x264param.rc.b_stat_read = 1;
-      encoder->x264param.rc.b_stat_write = 1;
-      break;
-  }
-
-  if (encoder->peer_profile) {
-    if (encoder->vtable->x264_param_apply_profile (&encoder->x264param,
-            encoder->peer_profile))
-      GST_WARNING_OBJECT (encoder, "Bad downstream profile name: %s",
-          encoder->peer_profile);
-  }
-
-  /* If using an intra profile, all frames are intra frames */
-  if (encoder->peer_intra_profile)
-    encoder->x264param.i_keyint_max = encoder->x264param.i_keyint_min = 1;
-
-  /* Enforce level limits if they were in the caps */
-  if (encoder->peer_level_idc != -1) {
-    gint i;
-    const x264_level_t *peer_level = NULL;
-
-    for (i = 0; (*encoder->vtable->x264_levels)[i].level_idc; i++) {
-      if (encoder->peer_level_idc ==
-          (*encoder->vtable->x264_levels)[i].level_idc) {
-        int mb_width = (info->width + 15) / 16;
-        int mb_height = (info->height + 15) / 16;
-        int mbs = mb_width * mb_height;
-
-        if ((*encoder->vtable->x264_levels)[i].frame_size < mbs ||
-            (*encoder->vtable->x264_levels)[i].frame_size * 8 <
-            mb_width * mb_width
-            || (*encoder->vtable->x264_levels)[i].frame_size * 8 <
-            mb_height * mb_height) {
-          GST_WARNING_OBJECT (encoder,
-              "Frame size larger than level %d allows",
-              encoder->peer_level_idc);
-          break;
-        }
-
-        if (info->fps_d && (*encoder->vtable->x264_levels)[i].mbps
-            < (gint64) mbs * info->fps_n / info->fps_d) {
-          GST_WARNING_OBJECT (encoder,
-              "Macroblock rate higher than level %d allows",
-              encoder->peer_level_idc);
-          break;
-        }
-
-        peer_level = &(*encoder->vtable->x264_levels)[i];
-        break;
-      }
-    }
-
-    if (!peer_level)
-      goto unlock_and_return;
-
-    encoder->x264param.i_level_idc = peer_level->level_idc;
-
-    encoder->x264param.rc.i_bitrate = MIN (encoder->x264param.rc.i_bitrate,
-        peer_level->bitrate);
-    encoder->x264param.rc.i_vbv_max_bitrate =
-        MIN (encoder->x264param.rc.i_vbv_max_bitrate, peer_level->bitrate);
-    encoder->x264param.rc.i_vbv_buffer_size =
-        MIN (encoder->x264param.rc.i_vbv_buffer_size, peer_level->cpb);
-    encoder->x264param.analyse.i_mv_range =
-        MIN (encoder->x264param.analyse.i_mv_range, peer_level->mv_range);
-
-    if (peer_level->frame_only) {
-      encoder->x264param.b_interlaced = FALSE;
-      encoder->x264param.b_fake_interlaced = FALSE;
-    }
-  }
-
-  if (GST_VIDEO_INFO_IS_INTERLACED (info)) {
-    encoder->x264param.b_interlaced = TRUE;
-    if (GST_VIDEO_INFO_INTERLACE_MODE (info) == GST_VIDEO_INTERLACE_MODE_MIXED) {
-      encoder->x264param.b_pic_struct = TRUE;
-    }
-    if (GST_VIDEO_INFO_FIELD_ORDER (info) ==
-        GST_VIDEO_FIELD_ORDER_TOP_FIELD_FIRST) {
-      encoder->x264param.b_tff = TRUE;
-    } else {
-      encoder->x264param.b_tff = FALSE;
-    }
-  } else {
-    encoder->x264param.b_interlaced = FALSE;
-  }
-
-  /* Set 3D frame packing */
-  if (encoder->frame_packing != GST_VIDEO_MULTIVIEW_MODE_NONE)
-    encoder->x264param.i_frame_packing = encoder->frame_packing;
-  else
-    encoder->x264param.i_frame_packing =
-        gst_x264_enc_mview_mode_to_frame_packing (GST_VIDEO_INFO_MULTIVIEW_MODE
-        (info));
-
-  GST_DEBUG_OBJECT (encoder, "Stereo frame packing = %d",
-      encoder->x264param.i_frame_packing);
-
-  encoder->reconfig = FALSE;
-
-  GST_OBJECT_UNLOCK (encoder);
-
-  encoder->x264enc = encoder->vtable->x264_encoder_open (&encoder->x264param);
-  if (!encoder->x264enc) {
-    GST_ELEMENT_ERROR (encoder, STREAM, ENCODE,
-        ("Can not initialize x264 encoder."), (NULL));
-    return FALSE;
-  }
-
-  return TRUE;
-
-unlock_and_return:
-  GST_OBJECT_UNLOCK (encoder);
-  return FALSE;
-}
-
-/* gst_x264_enc_close_encoder
- * @encoder:  Encoder which should close.
- *
- * Close x264 encoder.
- */
-static void
-gst_x264_enc_close_encoder (GstX264Enc * encoder)
-{
-  if (encoder->x264enc != NULL) {
-    encoder->vtable->x264_encoder_close (encoder->x264enc);
-    encoder->x264enc = NULL;
-  }
-  encoder->vtable = NULL;
-}
-
-static gboolean
-gst_x264_enc_set_profile_and_level (GstX264Enc * encoder, GstCaps * caps)
-{
-  x264_nal_t *nal;
-  int i_nal;
-  int header_return;
-  gint sps_ni = 0;
-  guint8 *sps;
-  GstStructure *s;
-  const gchar *profile;
-  GstCaps *allowed_caps;
-  GstStructure *s2;
-  const gchar *allowed_profile;
-
-  header_return =
-      encoder->vtable->x264_encoder_headers (encoder->x264enc, &nal, &i_nal);
-  if (header_return < 0) {
-    GST_ELEMENT_ERROR (encoder, STREAM, ENCODE, ("Encode x264 header failed."),
-        ("x264_encoder_headers return code=%d", header_return));
-    return FALSE;
-  }
-
-  /* old x264 returns SEI, SPS and PPS, newer one has SEI last */
-  if (i_nal == 3 && nal[sps_ni].i_type != 7)
-    sps_ni = 1;
-
-  sps = nal[sps_ni].p_payload + 4;
-  /* skip NAL unit type */
-  sps++;
-
-  gst_codec_utils_h264_caps_set_level_and_profile (caps, sps, 3);
-
-  /* Constrained baseline is a strict subset of baseline. If downstream
-   * wanted baseline and we produced constrained baseline, we can just
-   * set the profile to baseline in the caps to make negotiation happy.
-   * Same goes for baseline as subset of main profile and main as a subset
-   * of high profile.
-   */
-  s = gst_caps_get_structure (caps, 0);
-  profile = gst_structure_get_string (s, "profile");
-
-  allowed_caps = gst_pad_get_allowed_caps (GST_VIDEO_ENCODER_SRC_PAD (encoder));
-
-  if (allowed_caps == NULL)
-    goto no_peer;
-
-  if (!gst_caps_can_intersect (allowed_caps, caps)) {
-    allowed_caps = gst_caps_make_writable (allowed_caps);
-    allowed_caps = gst_caps_truncate (allowed_caps);
-    s2 = gst_caps_get_structure (allowed_caps, 0);
-    gst_structure_fixate_field_string (s2, "profile", profile);
-    allowed_profile = gst_structure_get_string (s2, "profile");
-    if (!strcmp (allowed_profile, "high")) {
-      if (!strcmp (profile, "constrained-baseline")
-          || !strcmp (profile, "baseline") || !strcmp (profile, "main")) {
-        gst_structure_set (s, "profile", G_TYPE_STRING, "high", NULL);
-        GST_INFO_OBJECT (encoder, "downstream requested high profile, but "
-            "encoder will now output %s profile (which is a subset), due "
-            "to how it's been configured", profile);
-      }
-    } else if (!strcmp (allowed_profile, "main")) {
-      if (!strcmp (profile, "constrained-baseline")
-          || !strcmp (profile, "baseline")) {
-        gst_structure_set (s, "profile", G_TYPE_STRING, "main", NULL);
-        GST_INFO_OBJECT (encoder, "downstream requested main profile, but "
-            "encoder will now output %s profile (which is a subset), due "
-            "to how it's been configured", profile);
-      }
-    } else if (!strcmp (allowed_profile, "baseline")) {
-      if (!strcmp (profile, "constrained-baseline"))
-        gst_structure_set (s, "profile", G_TYPE_STRING, "baseline", NULL);
-    }
-  }
-  gst_caps_unref (allowed_caps);
-
-no_peer:
-
-  return TRUE;
-}
-
-/*
- * Returns: Buffer with the stream headers.
- */
-static GstBuffer *
-gst_x264_enc_header_buf (GstX264Enc * encoder)
-{
-  GstBuffer *buf;
-  x264_nal_t *nal;
-  int i_nal;
-  int header_return;
-  int i_size;
-  int nal_size;
-  guint8 *buffer, *sps;
-  gulong buffer_size;
-  gint sei_ni = 2, sps_ni = 0, pps_ni = 1;
-
-  if (G_UNLIKELY (encoder->x264enc == NULL))
-    return NULL;
-
-  /* Create avcC header. */
-
-  header_return =
-      encoder->vtable->x264_encoder_headers (encoder->x264enc, &nal, &i_nal);
-  if (header_return < 0) {
-    GST_ELEMENT_ERROR (encoder, STREAM, ENCODE, ("Encode x264 header failed."),
-        ("x264_encoder_headers return code=%d", header_return));
-    return NULL;
-  }
-
-  /* old x264 returns SEI, SPS and PPS, newer one has SEI last */
-  if (i_nal == 3 && nal[sps_ni].i_type != 7) {
-    sei_ni = 0;
-    sps_ni = 1;
-    pps_ni = 2;
-  }
-
-  /* x264 is expected to return an SEI (some identification info),
-   * and SPS and PPS */
-  if (i_nal != 3 || nal[sps_ni].i_type != 7 || nal[pps_ni].i_type != 8 ||
-      nal[sps_ni].i_payload < 4 || nal[pps_ni].i_payload < 1) {
-    GST_ELEMENT_ERROR (encoder, STREAM, ENCODE, (NULL),
-        ("Unexpected x264 header."));
-    return NULL;
-  }
-
-  GST_MEMDUMP ("SEI", nal[sei_ni].p_payload, nal[sei_ni].i_payload);
-  GST_MEMDUMP ("SPS", nal[sps_ni].p_payload, nal[sps_ni].i_payload);
-  GST_MEMDUMP ("PPS", nal[pps_ni].p_payload, nal[pps_ni].i_payload);
-
-  /* nal payloads with emulation_prevention_three_byte, and some header data */
-  buffer_size = (nal[sps_ni].i_payload + nal[pps_ni].i_payload) * 4 + 100;
-  buffer = g_malloc (buffer_size);
-
-  sps = nal[sps_ni].p_payload + 4;
-  /* skip NAL unit type */
-  sps++;
-
-  buffer[0] = 1;                /* AVC Decoder Configuration Record ver. 1 */
-  buffer[1] = sps[0];           /* profile_idc                             */
-  buffer[2] = sps[1];           /* profile_compability                     */
-  buffer[3] = sps[2];           /* level_idc                               */
-  buffer[4] = 0xfc | (4 - 1);   /* nal_length_size_minus1                  */
-
-  i_size = 5;
-
-  buffer[i_size++] = 0xe0 | 1;  /* number of SPSs */
-
-  nal_size = nal[sps_ni].i_payload - 4;
-  memcpy (buffer + i_size + 2, nal[sps_ni].p_payload + 4, nal_size);
-
-  GST_WRITE_UINT16_BE (buffer + i_size, nal_size);
-  i_size += nal_size + 2;
-
-  buffer[i_size++] = 1;         /* number of PPSs */
-
-  nal_size = nal[pps_ni].i_payload - 4;
-  memcpy (buffer + i_size + 2, nal[pps_ni].p_payload + 4, nal_size);
-
-  GST_WRITE_UINT16_BE (buffer + i_size, nal_size);
-  i_size += nal_size + 2;
-
-  buf = gst_buffer_new_and_alloc (i_size);
-  gst_buffer_fill (buf, 0, buffer, i_size);
-
-  GST_MEMDUMP ("header", buffer, i_size);
-  g_free (buffer);
-
-  return buf;
-}
-
-/* gst_x264_enc_set_src_caps
- * Returns: TRUE on success.
- */
-static gboolean
-gst_x264_enc_set_src_caps (GstX264Enc * encoder, GstCaps * caps)
-{
-  GstCaps *outcaps;
-  GstStructure *structure;
-  GstVideoCodecState *state;
-  GstTagList *tags;
-  guint bitrate =
-      gst_encoder_bitrate_profile_manager_get_bitrate (encoder->bitrate_manager,
-      encoder->input_state ? &encoder->input_state->info : NULL);
-
-  outcaps = gst_caps_new_empty_simple ("video/x-h264");
-  structure = gst_caps_get_structure (outcaps, 0);
-
-  if (encoder->current_byte_stream == GST_X264_ENC_STREAM_FORMAT_FROM_PROPERTY) {
-    if (encoder->byte_stream) {
-      encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_BYTE_STREAM;
-    } else {
-      encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_AVC;
-    }
-  }
-  if (encoder->current_byte_stream == GST_X264_ENC_STREAM_FORMAT_AVC) {
-    GstBuffer *buf = gst_x264_enc_header_buf (encoder);
-    if (buf != NULL) {
-      gst_caps_set_simple (outcaps, "codec_data", GST_TYPE_BUFFER, buf, NULL);
-      gst_buffer_unref (buf);
-    }
-    gst_structure_set (structure, "stream-format", G_TYPE_STRING, "avc", NULL);
-  } else {
-    gst_structure_set (structure, "stream-format", G_TYPE_STRING, "byte-stream",
-        NULL);
-  }
-  gst_structure_set (structure, "alignment", G_TYPE_STRING, "au", NULL);
-
-  if (!gst_x264_enc_set_profile_and_level (encoder, outcaps)) {
-    gst_caps_unref (outcaps);
-    return FALSE;
-  }
-
-  state = gst_video_encoder_set_output_state (GST_VIDEO_ENCODER (encoder),
-      outcaps, encoder->input_state);
-  GST_DEBUG_OBJECT (encoder, "output caps: %" GST_PTR_FORMAT, state->caps);
-
-  /* If set, local frame packing setting overrides any upstream config */
-  switch (encoder->frame_packing) {
-    case 0:
-      GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
-          GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD;
-      break;
-    case 1:
-      GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
-          GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED;
-      break;
-    case 2:
-      GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
-          GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED;
-      break;
-    case 3:
-      GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
-          GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE;
-      break;
-    case 4:
-      GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
-          GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM;
-      break;
-    case 5:
-      GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
-          GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME;
-      break;
-    default:
-      break;
-  }
-
-  gst_video_codec_state_unref (state);
-
-  tags = gst_tag_list_new_empty ();
-  gst_tag_list_add (tags, GST_TAG_MERGE_REPLACE, GST_TAG_ENCODER, "x264",
-      GST_TAG_ENCODER_VERSION, X264_BUILD,
-      GST_TAG_MAXIMUM_BITRATE, bitrate * 1024,
-      GST_TAG_NOMINAL_BITRATE, bitrate * 1024, NULL);
-  gst_video_encoder_merge_tags (GST_VIDEO_ENCODER (encoder), tags,
-      GST_TAG_MERGE_REPLACE);
-  gst_tag_list_unref (tags);
-
-  return TRUE;
-}
-
-static void
-gst_x264_enc_set_latency (GstX264Enc * encoder)
-{
-  GstVideoInfo *info = &encoder->input_state->info;
-  gint max_delayed_frames;
-  GstClockTime latency;
-
-  max_delayed_frames =
-      encoder->vtable->x264_encoder_maximum_delayed_frames (encoder->x264enc);
-
-  if (info->fps_n) {
-    latency = gst_util_uint64_scale_ceil (GST_SECOND * info->fps_d,
-        max_delayed_frames, info->fps_n);
-  } else {
-    /* FIXME: Assume 25fps. This is better than reporting no latency at
-     * all and then later failing in live pipelines
-     */
-    latency = gst_util_uint64_scale_ceil (GST_SECOND * 1,
-        max_delayed_frames, 25);
-  }
-
-  GST_INFO_OBJECT (encoder,
-      "Updating latency to %" GST_TIME_FORMAT " (%d frames)",
-      GST_TIME_ARGS (latency), max_delayed_frames);
-
-  gst_video_encoder_set_latency (GST_VIDEO_ENCODER (encoder), latency, latency);
-}
-
-static gboolean
-gst_x264_enc_set_format (GstVideoEncoder * video_enc,
-    GstVideoCodecState * state)
-{
-  GstX264Enc *encoder = GST_X264_ENC (video_enc);
-  GstVideoInfo *info = &state->info;
-  GstCaps *template_caps;
-  GstCaps *allowed_caps = NULL;
-
-  /* If the encoder is initialized, do not reinitialize it again if not
-   * necessary */
-  if (encoder->x264enc) {
-    GstVideoInfo *old = &encoder->input_state->info;
-
-    if (info->finfo->format == old->finfo->format
-        && info->width == old->width && info->height == old->height
-        && info->fps_n == old->fps_n && info->fps_d == old->fps_d
-        && info->par_n == old->par_n && info->par_d == old->par_d) {
-      gst_video_codec_state_unref (encoder->input_state);
-      encoder->input_state = gst_video_codec_state_ref (state);
-      return TRUE;
-    }
-
-    /* clear out pending frames */
-    gst_x264_enc_flush_frames (encoder, TRUE);
-
-    encoder->sps_id++;
-  }
-
-  if (encoder->input_state)
-    gst_video_codec_state_unref (encoder->input_state);
-  encoder->input_state = gst_video_codec_state_ref (state);
-
-  encoder->peer_profile = NULL;
-  encoder->peer_intra_profile = FALSE;
-  encoder->peer_level_idc = -1;
-
-  template_caps = gst_static_pad_template_get_caps (&src_factory);
-  allowed_caps = gst_pad_get_allowed_caps (GST_VIDEO_ENCODER_SRC_PAD (encoder));
-
-  /* Output byte-stream if downstream has ANY caps, it's what people expect,
-   * and it makes more sense too */
-  if (allowed_caps == template_caps) {
-    GST_INFO_OBJECT (encoder,
-        "downstream has ANY caps, outputting byte-stream");
-    encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_BYTE_STREAM;
-    g_string_append_printf (encoder->option_string, ":annexb=1");
-    gst_caps_unref (allowed_caps);
-  } else if (allowed_caps) {
-    GstStructure *s;
-    const gchar *profile;
-    const gchar *level;
-    const gchar *stream_format;
-
-    if (gst_caps_is_empty (allowed_caps)) {
-      gst_caps_unref (allowed_caps);
-      gst_caps_unref (template_caps);
-      return FALSE;
-    }
-
-    allowed_caps = gst_caps_make_writable (allowed_caps);
-    allowed_caps = gst_caps_fixate (allowed_caps);
-    s = gst_caps_get_structure (allowed_caps, 0);
-
-    profile = gst_structure_get_string (s, "profile");
-    if (profile) {
-      /* FIXME - if libx264 ever adds support for FMO, ASO or redundant slices
-       * make sure constrained profile has a separate case which disables
-       * those */
-      if (g_str_has_suffix (profile, "-intra")) {
-        encoder->peer_intra_profile = TRUE;
-      }
-      if (!strcmp (profile, "constrained-baseline") ||
-          !strcmp (profile, "baseline")) {
-        encoder->peer_profile = "baseline";
-      } else if (g_str_has_prefix (profile, "high-10")) {
-        encoder->peer_profile = "high10";
-      } else if (g_str_has_prefix (profile, "high-4:2:2")) {
-        encoder->peer_profile = "high422";
-      } else if (g_str_has_prefix (profile, "high-4:4:4")) {
-        encoder->peer_profile = "high444";
-      } else if (g_str_has_prefix (profile, "high")) {
-        encoder->peer_profile = "high";
-      } else if (!strcmp (profile, "main")) {
-        encoder->peer_profile = "main";
-      } else {
-        g_assert_not_reached ();
-      }
-    }
-
-    level = gst_structure_get_string (s, "level");
-    if (level) {
-      encoder->peer_level_idc = gst_codec_utils_h264_get_level_idc (level);
-    }
-
-    stream_format = gst_structure_get_string (s, "stream-format");
-    encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_FROM_PROPERTY;
-    if (stream_format) {
-      if (!strcmp (stream_format, "avc")) {
-        encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_AVC;
-        g_string_append_printf (encoder->option_string, ":annexb=0");
-      } else if (!strcmp (stream_format, "byte-stream")) {
-        encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_BYTE_STREAM;
-        g_string_append_printf (encoder->option_string, ":annexb=1");
-      } else {
-        /* means we have both in caps and _FROM_PROPERTY should be the option */
-      }
-    }
-
-    gst_caps_unref (allowed_caps);
-  }
-
-  gst_caps_unref (template_caps);
-
-  if (!gst_x264_enc_init_encoder (encoder))
-    return FALSE;
-
-  if (!gst_x264_enc_set_src_caps (encoder, state->caps)) {
-    gst_x264_enc_close_encoder (encoder);
-    return FALSE;
-  }
-
-  gst_x264_enc_set_latency (encoder);
-
-  return TRUE;
-}
-
-static GstFlowReturn
-gst_x264_enc_finish (GstVideoEncoder * encoder)
-{
-  gst_x264_enc_flush_frames (GST_X264_ENC (encoder), TRUE);
-  return GST_FLOW_OK;
-}
-
-static gboolean
-gst_x264_enc_propose_allocation (GstVideoEncoder * encoder, GstQuery * query)
-{
-  GstX264Enc *self = GST_X264_ENC (encoder);
-  GstVideoInfo *info;
-  guint num_buffers;
-
-  gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL);
-
-  if (!self->input_state)
-    return FALSE;
-
-  if (self->vtable == NULL)
-    return FALSE;
-
-  info = &self->input_state->info;
-  num_buffers =
-      self->vtable->x264_encoder_maximum_delayed_frames (self->x264enc) + 1;
-
-  gst_query_add_allocation_pool (query, NULL, info->size, num_buffers, 0);
-
-  return GST_VIDEO_ENCODER_CLASS (parent_class)->propose_allocation (encoder,
-      query);
-}
-
-static void
-gst_x264_enc_add_cc (GstBuffer * buffer, x264_picture_t * pic_in)
-{
-  GstVideoCaptionMeta *cc_meta;
-  gpointer iter = NULL;
-
-  while ((cc_meta =
-          (GstVideoCaptionMeta *) gst_buffer_iterate_meta_filtered (buffer,
-              &iter, GST_VIDEO_CAPTION_META_API_TYPE))) {
-    guint i = pic_in->extra_sei.num_payloads;
-
-    if (cc_meta->caption_type != GST_VIDEO_CAPTION_TYPE_CEA708_RAW)
-      continue;
-
-    pic_in->extra_sei.num_payloads += 1;
-
-    if (!pic_in->extra_sei.payloads)
-      pic_in->extra_sei.payloads = g_new0 (x264_sei_payload_t, 1);
-    else
-      pic_in->extra_sei.payloads =
-          g_renew (x264_sei_payload_t, pic_in->extra_sei.payloads,
-          pic_in->extra_sei.num_payloads);
-
-    pic_in->extra_sei.sei_free = g_free;
-
-    pic_in->extra_sei.payloads[i].payload_size = cc_meta->size + 11;
-    pic_in->extra_sei.payloads[i].payload =
-        g_malloc0 (pic_in->extra_sei.payloads[i].payload_size);
-    pic_in->extra_sei.payloads[i].payload_type = 4;     /* Registered user data */
-    memcpy (pic_in->extra_sei.payloads[i].payload + 10, cc_meta->data,
-        cc_meta->size);
-    pic_in->extra_sei.payloads[i].payload[0] = 181;     /* 8-bits itu_t_t35_country_code */
-    pic_in->extra_sei.payloads[i].payload[1] = 0;       /* 16-bits itu_t_t35_provider_code */
-    pic_in->extra_sei.payloads[i].payload[2] = 49;
-    pic_in->extra_sei.payloads[i].payload[3] = 'G';     /* 32-bits ATSC_user_identifier */
-    pic_in->extra_sei.payloads[i].payload[4] = 'A';
-    pic_in->extra_sei.payloads[i].payload[5] = '9';
-    pic_in->extra_sei.payloads[i].payload[6] = '4';
-    pic_in->extra_sei.payloads[i].payload[7] = 3;       /* 8-bits ATSC1_data_user_data_type_code */
-    /* 8-bits:
-     * 1 bit process_em_data_flag (0)
-     * 1 bit process_cc_data_flag (1)
-     * 1 bit additional_data_flag (0)
-     * 5-bits cc_count
-     */
-    pic_in->extra_sei.payloads[i].payload[8] =
-        ((cc_meta->size / 3) & 0x1f) | 0x40;
-    pic_in->extra_sei.payloads[i].payload[9] = 255;     /* 8 bits em_data, unused */
-    pic_in->extra_sei.payloads[i].payload[cc_meta->size + 10] = 255;    /* 8 marker bits */
-  }
-}
-
-/* chain function
- * this function does the actual processing
- */
-static GstFlowReturn
-gst_x264_enc_handle_frame (GstVideoEncoder * video_enc,
-    GstVideoCodecFrame * frame)
-{
-  GstX264Enc *encoder = GST_X264_ENC (video_enc);
-  GstVideoInfo *info = &encoder->input_state->info;
-  GstFlowReturn ret;
-  x264_picture_t pic_in;
-  gint i_nal, i;
-  FrameData *fdata;
-  gint nplanes = encoder->x264_nplanes;
-
-  if (G_UNLIKELY (encoder->x264enc == NULL))
-    goto not_inited;
-
-  /* create x264_picture_t from the buffer */
-  /* mostly taken from mplayer (file ve_x264.c) */
-
-  /* set up input picture */
-  memset (&pic_in, 0, sizeof (pic_in));
-
-  fdata = gst_x264_enc_queue_frame (encoder, frame, info);
-  if (!fdata)
-    goto invalid_frame;
-
-  pic_in.img.i_csp = encoder->x264param.i_csp;
-  pic_in.img.i_plane = nplanes;
-  for (i = 0; i < nplanes; i++) {
-    pic_in.img.plane[i] = GST_VIDEO_FRAME_COMP_DATA (&fdata->vframe, i);
-    pic_in.img.i_stride[i] = GST_VIDEO_FRAME_COMP_STRIDE (&fdata->vframe, i);
-  }
-
-  pic_in.i_type = X264_TYPE_AUTO;
-  pic_in.i_pts = frame->pts;
-  pic_in.opaque = GINT_TO_POINTER (frame->system_frame_number);
-
-  if (GST_VIDEO_INFO_INTERLACE_MODE (info) == GST_VIDEO_INTERLACE_MODE_MIXED) {
-    if ((fdata->vframe.flags & GST_VIDEO_FRAME_FLAG_INTERLACED) == 0) {
-      pic_in.i_pic_struct = PIC_STRUCT_PROGRESSIVE;
-    } else if ((fdata->vframe.flags & GST_VIDEO_FRAME_FLAG_RFF) != 0) {
-      if ((fdata->vframe.flags & GST_VIDEO_FRAME_FLAG_TFF) != 0) {
-        pic_in.i_pic_struct = PIC_STRUCT_TOP_BOTTOM_TOP;
-      } else {
-        pic_in.i_pic_struct = PIC_STRUCT_BOTTOM_TOP_BOTTOM;
-      }
-    } else {
-      if ((fdata->vframe.flags & GST_VIDEO_FRAME_FLAG_TFF) != 0) {
-        pic_in.i_pic_struct = PIC_STRUCT_TOP_BOTTOM;
-      } else {
-        pic_in.i_pic_struct = PIC_STRUCT_BOTTOM_TOP;
-      }
-    }
-  }
-
-  gst_x264_enc_add_cc (frame->input_buffer, &pic_in);
-
-  ret = gst_x264_enc_encode_frame (encoder, &pic_in, frame, &i_nal, TRUE);
-
-  /* input buffer is released later on */
-  return ret;
-
-/* ERRORS */
-not_inited:
-  {
-    GST_WARNING_OBJECT (encoder, "Got buffer before set_caps was called");
-    return GST_FLOW_NOT_NEGOTIATED;
-  }
-invalid_frame:
-  {
-    GST_ERROR_OBJECT (encoder, "Failed to map frame");
-    return GST_FLOW_ERROR;
-  }
-}
-
-static GstFlowReturn
-gst_x264_enc_encode_frame (GstX264Enc * encoder, x264_picture_t * pic_in,
-    GstVideoCodecFrame * input_frame, int *i_nal, gboolean send)
-{
-  GstVideoCodecFrame *frame = NULL;
-  GstBuffer *out_buf = NULL;
-  x264_picture_t pic_out;
-  x264_nal_t *nal;
-  int i_size;
-  int encoder_return;
-  GstFlowReturn ret = GST_FLOW_OK;
-  guint8 *data;
-  gboolean update_latency = FALSE;
-
-  if (G_UNLIKELY (encoder->x264enc == NULL)) {
-    if (input_frame)
-      gst_video_codec_frame_unref (input_frame);
-    return GST_FLOW_NOT_NEGOTIATED;
-  }
-
-  GST_OBJECT_LOCK (encoder);
-  if (encoder->reconfig) {
-    encoder->reconfig = FALSE;
-    if (encoder->vtable->x264_encoder_reconfig (encoder->x264enc,
-            &encoder->x264param) < 0)
-      GST_WARNING_OBJECT (encoder, "Could not reconfigure");
-    update_latency = TRUE;
-  }
-
-  if (pic_in && input_frame) {
-    if (GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME (input_frame)) {
-      GST_INFO_OBJECT (encoder, "Forcing key frame");
-      if (encoder->intra_refresh)
-        encoder->vtable->x264_encoder_intra_refresh (encoder->x264enc);
-      else
-        pic_in->i_type = X264_TYPE_IDR;
-    }
-  }
-  GST_OBJECT_UNLOCK (encoder);
-
-  if (G_UNLIKELY (update_latency))
-    gst_x264_enc_set_latency (encoder);
-
-  encoder_return = encoder->vtable->x264_encoder_encode (encoder->x264enc,
-      &nal, i_nal, pic_in, &pic_out);
-
-  if (encoder_return < 0) {
-    GST_ELEMENT_ERROR (encoder, STREAM, ENCODE, ("Encode x264 frame failed."),
-        ("x264_encoder_encode return code=%d", encoder_return));
-    ret = GST_FLOW_ERROR;
-    /* Make sure we finish this frame */
-    frame = input_frame;
-    goto out;
-  }
-
-  /* Input frame is now queued */
-  if (input_frame)
-    gst_video_codec_frame_unref (input_frame);
-
-  if (!*i_nal) {
-    ret = GST_FLOW_OK;
-    goto out;
-  }
-
-  i_size = encoder_return;
-  data = nal[0].p_payload;
-
-  frame = gst_video_encoder_get_frame (GST_VIDEO_ENCODER (encoder),
-      GPOINTER_TO_INT (pic_out.opaque));
-  g_assert (frame || !send);
-
-  if (!send || !frame) {
-    ret = GST_FLOW_OK;
-    goto out;
-  }
-
-  out_buf = gst_buffer_new_allocate (NULL, i_size, NULL);
-  gst_buffer_fill (out_buf, 0, data, i_size);
-  frame->output_buffer = out_buf;
-
-  GST_LOG_OBJECT (encoder,
-      "output: dts %" G_GINT64_FORMAT " pts %" G_GINT64_FORMAT,
-      (gint64) pic_out.i_dts, (gint64) pic_out.i_pts);
-
-  /* we want to know if x264 is messing around with this */
-  g_assert (frame->pts == pic_out.i_pts);
-
-  frame->dts = pic_out.i_dts;
-  frame->pts = pic_out.i_pts;
-
-  if (pic_out.b_keyframe) {
-    GST_DEBUG_OBJECT (encoder, "Output keyframe");
-    GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT (frame);
-  }
-
-out:
-  if (frame) {
-    gst_x264_enc_dequeue_frame (encoder, frame);
-    ret = gst_video_encoder_finish_frame (GST_VIDEO_ENCODER (encoder), frame);
-  }
-
-  return ret;
-}
-
-static void
-gst_x264_enc_flush_frames (GstX264Enc * encoder, gboolean send)
-{
-  GstFlowReturn flow_ret;
-  gint i_nal;
-
-  /* first send the remaining frames */
-  if (encoder->x264enc)
-    do {
-      flow_ret = gst_x264_enc_encode_frame (encoder, NULL, NULL, &i_nal, send);
-    } while (flow_ret == GST_FLOW_OK
-        && encoder->vtable->x264_encoder_delayed_frames (encoder->x264enc) > 0);
-}
-
-static void
-gst_x264_enc_reconfig (GstX264Enc * encoder)
-{
-  guint bitrate;
-
-  if (!encoder->vtable)
-    return;
-
-  bitrate =
-      gst_encoder_bitrate_profile_manager_get_bitrate (encoder->bitrate_manager,
-      encoder->input_state ? &encoder->input_state->info : NULL);
-  switch (encoder->pass) {
-    case GST_X264_ENC_PASS_QUAL:
-      encoder->x264param.rc.f_rf_constant = encoder->quantizer;
-      encoder->x264param.rc.i_vbv_max_bitrate = bitrate;
-      encoder->x264param.rc.i_vbv_buffer_size
-          = encoder->x264param.rc.i_vbv_max_bitrate
-          * encoder->vbv_buf_capacity / 1000;
-      break;
-    case GST_X264_ENC_PASS_CBR:
-    case GST_X264_ENC_PASS_PASS1:
-    case GST_X264_ENC_PASS_PASS2:
-    case GST_X264_ENC_PASS_PASS3:
-    default:
-      encoder->x264param.rc.i_bitrate = bitrate;
-      encoder->x264param.rc.i_vbv_max_bitrate = bitrate;
-      encoder->x264param.rc.i_vbv_buffer_size
-          = encoder->x264param.rc.i_vbv_max_bitrate
-          * encoder->vbv_buf_capacity / 1000;
-      break;
-  }
-
-  encoder->reconfig = TRUE;
-}
-
-static void
-gst_x264_enc_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstX264Enc *encoder;
-  GstState state;
-
-  const gchar *partitions = NULL;
-
-  encoder = GST_X264_ENC (object);
-
-  GST_OBJECT_LOCK (encoder);
-  /* state at least matters for sps, bytestream, pass,
-   * and so by extension ... */
-
-  state = GST_STATE (encoder);
-  if ((state != GST_STATE_READY && state != GST_STATE_NULL) &&
-      !(pspec->flags & GST_PARAM_MUTABLE_PLAYING))
-    goto wrong_state;
-
-  switch (prop_id) {
-    case ARG_PASS:
-      encoder->pass = g_value_get_enum (value);
-      break;
-    case ARG_QUANTIZER:
-      encoder->quantizer = g_value_get_uint (value);
-      gst_x264_enc_reconfig (encoder);
-      break;
-    case ARG_BITRATE:
-      gst_encoder_bitrate_profile_manager_set_bitrate (encoder->bitrate_manager,
-          g_value_get_uint (value));
-      gst_x264_enc_reconfig (encoder);
-      break;
-    case ARG_VBV_BUF_CAPACITY:
-      encoder->vbv_buf_capacity = g_value_get_uint (value);
-      gst_x264_enc_reconfig (encoder);
-      break;
-    case ARG_SPEED_PRESET:
-      encoder->speed_preset = g_value_get_enum (value);
-      break;
-    case ARG_PSY_TUNE:
-      encoder->psy_tune = g_value_get_enum (value);
-      break;
-    case ARG_TUNE:
-      encoder->tune = g_value_get_flags (value);
-      break;
-    case ARG_OPTION_STRING:
-      g_string_assign (encoder->option_string_prop, g_value_get_string (value));
-      break;
-    case ARG_THREADS:
-      encoder->threads = g_value_get_uint (value);
-      g_string_append_printf (encoder->option_string, ":threads=%d",
-          encoder->threads);
-      break;
-    case ARG_SLICED_THREADS:
-      encoder->sliced_threads = g_value_get_boolean (value);
-      g_string_append_printf (encoder->option_string, ":sliced-threads=%d",
-          encoder->sliced_threads);
-      break;
-    case ARG_SYNC_LOOKAHEAD:
-      encoder->sync_lookahead = g_value_get_int (value);
-      g_string_append_printf (encoder->option_string, ":sync-lookahead=%d",
-          encoder->sync_lookahead);
-      break;
-    case ARG_MULTIPASS_CACHE_FILE:
-      g_free (encoder->mp_cache_file);
-      encoder->mp_cache_file = g_value_dup_string (value);
-      g_string_append_printf (encoder->option_string, ":stats=%s",
-          encoder->mp_cache_file);
-      break;
-    case ARG_BYTE_STREAM:
-      encoder->byte_stream = g_value_get_boolean (value);
-      g_string_append_printf (encoder->option_string, ":annexb=%d",
-          encoder->byte_stream);
-      break;
-    case ARG_INTRA_REFRESH:
-      encoder->intra_refresh = g_value_get_boolean (value);
-      g_string_append_printf (encoder->option_string, ":intra-refresh=%d",
-          encoder->intra_refresh);
-      break;
-    case ARG_ME:
-      encoder->me = g_value_get_enum (value);
-      g_string_append_printf (encoder->option_string, ":me=%s",
-          x264_motion_est_names[encoder->me]);
-      break;
-    case ARG_SUBME:
-      encoder->subme = g_value_get_uint (value);
-      g_string_append_printf (encoder->option_string, ":subme=%d",
-          encoder->subme);
-      break;
-    case ARG_ANALYSE:
-      encoder->analyse = g_value_get_flags (value);
-      partitions = gst_x264_enc_build_partitions (encoder->analyse);
-      if (partitions) {
-        g_string_append_printf (encoder->option_string, ":partitions=%s",
-            partitions);
-        g_free ((gpointer) partitions);
-      }
-      break;
-    case ARG_DCT8x8:
-      encoder->dct8x8 = g_value_get_boolean (value);
-      g_string_append_printf (encoder->option_string, ":8x8dct=%d",
-          encoder->dct8x8);
-      break;
-    case ARG_REF:
-      encoder->ref = g_value_get_uint (value);
-      g_string_append_printf (encoder->option_string, ":ref=%d", encoder->ref);
-      break;
-    case ARG_BFRAMES:
-      encoder->bframes = g_value_get_uint (value);
-      g_string_append_printf (encoder->option_string, ":bframes=%d",
-          encoder->bframes);
-      break;
-    case ARG_B_ADAPT:
-      encoder->b_adapt = g_value_get_boolean (value);
-      g_string_append_printf (encoder->option_string, ":b-adapt=%d",
-          encoder->b_adapt);
-      break;
-    case ARG_B_PYRAMID:
-      encoder->b_pyramid = g_value_get_boolean (value);
-      g_string_append_printf (encoder->option_string, ":b-pyramid=%s",
-          x264_b_pyramid_names[encoder->b_pyramid]);
-      break;
-    case ARG_WEIGHTB:
-      encoder->weightb = g_value_get_boolean (value);
-      g_string_append_printf (encoder->option_string, ":weightb=%d",
-          encoder->weightb);
-      break;
-    case ARG_SPS_ID:
-      encoder->sps_id = g_value_get_uint (value);
-      g_string_append_printf (encoder->option_string, ":sps-id=%d",
-          encoder->sps_id);
-      break;
-    case ARG_AU_NALU:
-      encoder->au_nalu = g_value_get_boolean (value);
-      g_string_append_printf (encoder->option_string, ":aud=%d",
-          encoder->au_nalu);
-      break;
-    case ARG_TRELLIS:
-      encoder->trellis = g_value_get_boolean (value);
-      g_string_append_printf (encoder->option_string, ":trellis=%d",
-          encoder->trellis);
-      break;
-    case ARG_KEYINT_MAX:
-      encoder->keyint_max = g_value_get_uint (value);
-      g_string_append_printf (encoder->option_string, ":keyint=%d",
-          encoder->keyint_max);
-      break;
-    case ARG_CABAC:
-      encoder->cabac = g_value_get_boolean (value);
-      g_string_append_printf (encoder->option_string, ":cabac=%d",
-          encoder->cabac);
-      break;
-    case ARG_QP_MIN:
-      encoder->qp_min = g_value_get_uint (value);
-      g_string_append_printf (encoder->option_string, ":qpmin=%d",
-          encoder->qp_min);
-      break;
-    case ARG_QP_MAX:
-      encoder->qp_max = g_value_get_uint (value);
-      g_string_append_printf (encoder->option_string, ":qpmax=%d",
-          encoder->qp_max);
-      break;
-    case ARG_QP_STEP:
-      encoder->qp_step = g_value_get_uint (value);
-      g_string_append_printf (encoder->option_string, ":qpstep=%d",
-          encoder->qp_step);
-      break;
-    case ARG_IP_FACTOR:
-      encoder->ip_factor = g_value_get_float (value);
-      g_string_append_printf (encoder->option_string, ":ip-factor=%f",
-          encoder->ip_factor);
-      break;
-    case ARG_PB_FACTOR:
-      encoder->pb_factor = g_value_get_float (value);
-      g_string_append_printf (encoder->option_string, ":pb-factor=%f",
-          encoder->pb_factor);
-      break;
-    case ARG_RC_MB_TREE:
-      encoder->mb_tree = g_value_get_boolean (value);
-      g_string_append_printf (encoder->option_string, ":mbtree=%d",
-          encoder->mb_tree);
-      break;
-    case ARG_RC_LOOKAHEAD:
-      encoder->rc_lookahead = g_value_get_int (value);
-      g_string_append_printf (encoder->option_string, ":rc-lookahead=%d",
-          encoder->rc_lookahead);
-      break;
-    case ARG_NR:
-      encoder->noise_reduction = g_value_get_uint (value);
-      g_string_append_printf (encoder->option_string, ":nr=%d",
-          encoder->noise_reduction);
-      break;
-    case ARG_INTERLACED:
-      encoder->interlaced = g_value_get_boolean (value);
-      break;
-    case ARG_FRAME_PACKING:
-      encoder->frame_packing = g_value_get_enum (value);
-      break;
-    case ARG_INSERT_VUI:
-      encoder->insert_vui = g_value_get_boolean (value);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-  GST_OBJECT_UNLOCK (encoder);
-  return;
-
-  /* ERROR */
-wrong_state:
-  {
-    GST_WARNING_OBJECT (encoder, "setting property in wrong state");
-    GST_OBJECT_UNLOCK (encoder);
-  }
-}
-
-static void
-gst_x264_enc_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec)
-{
-  GstX264Enc *encoder;
-
-  encoder = GST_X264_ENC (object);
-
-  GST_OBJECT_LOCK (encoder);
-  switch (prop_id) {
-    case ARG_THREADS:
-      g_value_set_uint (value, encoder->threads);
-      break;
-    case ARG_SLICED_THREADS:
-      g_value_set_boolean (value, encoder->sliced_threads);
-      break;
-    case ARG_SYNC_LOOKAHEAD:
-      g_value_set_int (value, encoder->sync_lookahead);
-      break;
-    case ARG_PASS:
-      g_value_set_enum (value, encoder->pass);
-      break;
-    case ARG_QUANTIZER:
-      g_value_set_uint (value, encoder->quantizer);
-      break;
-    case ARG_MULTIPASS_CACHE_FILE:
-      g_value_set_string (value, encoder->mp_cache_file);
-      break;
-    case ARG_BYTE_STREAM:
-      g_value_set_boolean (value, encoder->byte_stream);
-      break;
-    case ARG_BITRATE:
-      g_value_set_uint (value,
-          gst_encoder_bitrate_profile_manager_get_bitrate
-          (encoder->bitrate_manager, NULL));
-      break;
-    case ARG_INTRA_REFRESH:
-      g_value_set_boolean (value, encoder->intra_refresh);
-      break;
-    case ARG_VBV_BUF_CAPACITY:
-      g_value_set_uint (value, encoder->vbv_buf_capacity);
-      break;
-    case ARG_ME:
-      g_value_set_enum (value, encoder->me);
-      break;
-    case ARG_SUBME:
-      g_value_set_uint (value, encoder->subme);
-      break;
-    case ARG_ANALYSE:
-      g_value_set_flags (value, encoder->analyse);
-      break;
-    case ARG_DCT8x8:
-      g_value_set_boolean (value, encoder->dct8x8);
-      break;
-    case ARG_REF:
-      g_value_set_uint (value, encoder->ref);
-      break;
-    case ARG_BFRAMES:
-      g_value_set_uint (value, encoder->bframes);
-      break;
-    case ARG_B_ADAPT:
-      g_value_set_boolean (value, encoder->b_adapt);
-      break;
-    case ARG_B_PYRAMID:
-      g_value_set_boolean (value, encoder->b_pyramid);
-      break;
-    case ARG_WEIGHTB:
-      g_value_set_boolean (value, encoder->weightb);
-      break;
-    case ARG_SPS_ID:
-      g_value_set_uint (value, encoder->sps_id);
-      break;
-    case ARG_AU_NALU:
-      g_value_set_boolean (value, encoder->au_nalu);
-      break;
-    case ARG_TRELLIS:
-      g_value_set_boolean (value, encoder->trellis);
-      break;
-    case ARG_KEYINT_MAX:
-      g_value_set_uint (value, encoder->keyint_max);
-      break;
-    case ARG_QP_MIN:
-      g_value_set_uint (value, encoder->qp_min);
-      break;
-    case ARG_QP_MAX:
-      g_value_set_uint (value, encoder->qp_max);
-      break;
-    case ARG_QP_STEP:
-      g_value_set_uint (value, encoder->qp_step);
-      break;
-    case ARG_CABAC:
-      g_value_set_boolean (value, encoder->cabac);
-      break;
-    case ARG_IP_FACTOR:
-      g_value_set_float (value, encoder->ip_factor);
-      break;
-    case ARG_PB_FACTOR:
-      g_value_set_float (value, encoder->pb_factor);
-      break;
-    case ARG_RC_MB_TREE:
-      g_value_set_boolean (value, encoder->mb_tree);
-      break;
-    case ARG_RC_LOOKAHEAD:
-      g_value_set_int (value, encoder->rc_lookahead);
-      break;
-    case ARG_NR:
-      g_value_set_uint (value, encoder->noise_reduction);
-      break;
-    case ARG_INTERLACED:
-      g_value_set_boolean (value, encoder->interlaced);
-      break;
-    case ARG_SPEED_PRESET:
-      g_value_set_enum (value, encoder->speed_preset);
-      break;
-    case ARG_PSY_TUNE:
-      g_value_set_enum (value, encoder->psy_tune);
-      break;
-    case ARG_TUNE:
-      g_value_set_flags (value, encoder->tune);
-      break;
-    case ARG_OPTION_STRING:
-      g_value_set_string (value, encoder->option_string_prop->str);
-      break;
-    case ARG_FRAME_PACKING:
-      g_value_set_enum (value, encoder->frame_packing);
-      break;
-    case ARG_INSERT_VUI:
-      g_value_set_boolean (value, encoder->insert_vui);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-  GST_OBJECT_UNLOCK (encoder);
-}
-
-static gboolean
-x264_element_init (GstPlugin * plugin)
-{
-  GST_DEBUG_CATEGORY_INIT (x264_enc_debug, "x264enc", 0,
-      "h264 encoding element");
-
-  GST_INFO ("linked against x264 build: %u", X264_BUILD);
-
-  /* Initialize the static GstX264EncVTable which is overridden in load_x264()
-   * if needed. We can't initialize statically because these values are not
-   * constant on Windows. */
-  default_vtable.module = NULL;
-#if X264_BUILD < 153
-  default_vtable.x264_bit_depth = &x264_bit_depth;
-#endif
-  default_vtable.x264_chroma_format = &x264_chroma_format;
-  default_vtable.x264_encoder_close = x264_encoder_close;
-  default_vtable.x264_encoder_delayed_frames = x264_encoder_delayed_frames;
-  default_vtable.x264_encoder_encode = x264_encoder_encode;
-  default_vtable.x264_encoder_headers = x264_encoder_headers;
-  default_vtable.x264_encoder_intra_refresh = x264_encoder_intra_refresh;
-  default_vtable.x264_encoder_maximum_delayed_frames =
-      x264_encoder_maximum_delayed_frames;
-  default_vtable.x264_encoder_open = x264_encoder_open;
-  default_vtable.x264_encoder_reconfig = x264_encoder_reconfig;
-  default_vtable.x264_levels = &x264_levels;
-  default_vtable.x264_param_apply_fastfirstpass =
-      x264_param_apply_fastfirstpass;
-  default_vtable.x264_param_apply_profile = x264_param_apply_profile;
-  default_vtable.x264_param_default_preset = x264_param_default_preset;
-  default_vtable.x264_param_parse = x264_param_parse;
-
-  if (!load_x264_libraries ())
-    return FALSE;
-
-  return gst_element_register (plugin, "x264enc",
-      GST_RANK_PRIMARY, GST_TYPE_X264_ENC);
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  return GST_ELEMENT_REGISTER (x264enc, plugin);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    x264,
-    "libx264-based H264 plugins",
-    plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/ext/x264/gstx264enc.h b/ext/x264/gstx264enc.h
deleted file mode 100644 (file)
index 6cbfc5c..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/* GStreamer H264 encoder plugin
- * Copyright (C) 2005 Michal Benes <michal.benes@itonis.tv>
- * Copyright (C) 2005 Josef Zlomek <josef.zlomek@itonis.tv>
- * Copyright (C) 2016 Sebastian Dröge <sebastian@centricular.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GST_X264_ENC_H__
-#define __GST_X264_ENC_H__
-
-#include <gst/gst.h>
-#include <gst/video/video.h>
-#include <gst/video/gstvideoencoder.h>
-#include "gstencoderbitrateprofilemanager.h"
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-/* The x264.h header says this isn't needed with MinGW, but sometimes the
- * compiler is unable to correctly do the pointer indirection for us, which
- * leads to a segfault when you try to dereference any const values provided
- * by x264.dll. See: https://bugzilla.gnome.org/show_bug.cgi?id=779249 */
-#if defined(_WIN32) && !defined(X264_API_IMPORTS)
-# define X264_API_IMPORTS
-#endif
-#include <x264.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_X264_ENC \
-  (gst_x264_enc_get_type())
-#define GST_X264_ENC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_X264_ENC,GstX264Enc))
-#define GST_X264_ENC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_X264_ENC,GstX264EncClass))
-#define GST_IS_X264_ENC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_X264_ENC))
-#define GST_IS_X264_ENC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_X264_ENC))
-
-typedef struct _GstX264Enc GstX264Enc;
-typedef struct _GstX264EncClass GstX264EncClass;
-typedef struct _GstX264EncVTable GstX264EncVTable;
-
-struct _GstX264Enc
-{
-  GstVideoEncoder element;
-
-  /*< private >*/
-  GstX264EncVTable *vtable;
-  x264_t *x264enc;
-  x264_param_t x264param;
-  gint current_byte_stream;
-
-  /* List of frame/buffer mapping structs for
-   * pending frames */
-  GList *pending_frames;
-
-  /* properties */
-  guint threads;
-  gboolean sliced_threads;
-  gint sync_lookahead;
-  gint pass;
-  guint quantizer;
-  gchar *mp_cache_file;
-  gboolean byte_stream;
-  guint bitrate;
-  gboolean intra_refresh;
-  gint me;
-  guint subme;
-  guint analyse;
-  gboolean dct8x8;
-  guint ref;
-  guint bframes;
-  gboolean b_adapt;
-  gboolean b_pyramid;
-  gboolean weightb;
-  guint sps_id;
-  gboolean au_nalu;
-  gboolean trellis;
-  guint vbv_buf_capacity;
-  guint keyint_max;
-  gboolean cabac;
-  gfloat ip_factor;
-  gfloat pb_factor;
-  guint qp_min;
-  guint qp_max;
-  guint qp_step;
-  gboolean mb_tree;
-  gint rc_lookahead;
-  guint noise_reduction;
-  gboolean interlaced;
-  gint speed_preset;
-  gint psy_tune;
-  guint tune;
-  GString *tunings;
-  GString *option_string_prop; /* option-string property */
-  GString *option_string; /* used by set prop */
-  gint frame_packing;
-  gboolean insert_vui;
-
-  /* input description */
-  GstVideoCodecState *input_state;
-
-  /* configuration changed  while playing */
-  gboolean reconfig;
-
-  /* from the downstream caps */
-  const gchar *peer_profile;
-  gboolean peer_intra_profile;
-  gint peer_level_idc;
-
-  /* cached values to set x264_picture_t */
-  gint x264_nplanes;
-
-  GstEncoderBitrateProfileManager *bitrate_manager;
-};
-
-struct _GstX264EncClass
-{
-  GstVideoEncoderClass parent_class;
-};
-
-GType gst_x264_enc_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (x264enc);
-
-G_END_DECLS
-
-#endif /* __GST_X264_ENC_H__ */
diff --git a/ext/x264/meson.build b/ext/x264/meson.build
deleted file mode 100644 (file)
index fdbfeeb..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-x264_sources = [
-  'gstx264enc.c',
-  'gstencoderbitrateprofilemanager.c',
-]
-
-x264_dep = dependency('x264', required : get_option('x264'),
-                      fallback: ['x264', 'libx264_dep'])
-
-if x264_dep.found()
-  x264_libraries = get_option('x264_libraries')
-  x264_args = []
-  if x264_libraries != ''
-    x264_args += ['-DHAVE_X264_ADDITIONAL_LIBRARIES="@0@"'.format(x264_libraries)]
-    extra_gmodule_dep = [gmodule_dep]
-  else
-    extra_gmodule_dep = []
-  endif
-
-  gstx264 = library('gstx264',
-    x264_sources,
-    c_args : ugly_args + x264_args,
-    include_directories : [configinc],
-    dependencies : [gstbase_dep, gstvideo_dep, gstpbutils_dep, x264_dep] + extra_gmodule_dep,
-    install : true,
-    install_dir : plugins_install_dir,
-  )
-  pkgconfig.generate(gstx264, install_dir : plugins_pkgconfig_install_dir)
-  plugins += [gstx264]
-
-  install_data(sources: 'GstX264Enc.prs', install_dir: presetdir)
-endif
diff --git a/gst-libs/gst/gettext.h b/gst-libs/gst/gettext.h
deleted file mode 100644 (file)
index fc70ab7..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Convenience header for conditional use of GNU <libintl.h>.
-   Copyright (C) 1995-1998, 2000-2002 Free Software Foundation, Inc.
-
-   This program 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, or (at your option)
-   any later version.
-
-   This program 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 program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
-   USA.  */
-
-#ifndef _LIBGETTEXT_H
-#define _LIBGETTEXT_H 1
-
-/* NLS can be disabled through the configure --disable-nls option.  */
-#ifdef ENABLE_NLS
-
-/* Get declarations of GNU message catalog functions.  */
-# include <libintl.h>
-
-#else
-
-/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
-   chokes if dcgettext is defined as a macro.  So include it now, to make
-   later inclusions of <locale.h> a NOP.  We don't include <libintl.h>
-   as well because people using "gettext.h" will not include <libintl.h>,
-   and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
-   is OK.  */
-#if defined(__sun)
-# include <locale.h>
-#endif
-
-/* Disabled NLS.
-   The casts to 'const char *' serve the purpose of producing warnings
-   for invalid uses of the value returned from these functions.
-   On pre-ANSI systems without 'const', the config.h file is supposed to
-   contain "#define const".  */
-# define gettext(Msgid) ((const char *) (Msgid))
-# define dgettext(Domainname, Msgid) ((const char *) (Msgid))
-# define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid))
-# define ngettext(Msgid1, Msgid2, N) \
-    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
-# define dngettext(Domainname, Msgid1, Msgid2, N) \
-    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
-# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
-    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
-# define textdomain(Domainname) ((const char *) (Domainname))
-# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname))
-# define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset))
-
-#endif
-
-/* A pseudo function call that serves as a marker for the automated
-   extraction of messages, but does not call gettext().  The run-time
-   translation is done at a different place in the code.
-   The argument, String, should be a literal string.  Concatenated strings
-   and other string expressions won't work.
-   The macro's expansion is not parenthesized, so that it is suitable as
-   initializer for static 'char[]' or 'const char[]' variables.  */
-#define gettext_noop(String) String
-
-#endif /* _LIBGETTEXT_H */
diff --git a/gst-libs/gst/glib-compat-private.h b/gst-libs/gst/glib-compat-private.h
deleted file mode 100644 (file)
index 8f37de2..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * glib-compat.c
- * Functions copied from glib 2.10
- *
- * Copyright 2005 David Schleef <ds@schleef.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GLIB_COMPAT_PRIVATE_H__
-#define __GLIB_COMPAT_PRIVATE_H__
-
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-/* copies */
-
-/* adaptations */
-
-G_END_DECLS
-
-#endif
diff --git a/gst-libs/gst/gst-i18n-plugin.h b/gst-libs/gst/gst-i18n-plugin.h
deleted file mode 100644 (file)
index 4d92b90..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/* GStreamer
- * Copyright (C) 2004 Thomas Vander Stichele <thomas@apestaart.org>
- *
- * gst-i18n-plugins.h: internationalization macros for the GStreamer plugins
- *
- * 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_I18N_PLUGIN_H__
-#define __GST_I18N_PLUGIN_H__
-
-#include <locale.h>  /* some people need it and some people don't */
-#include "gettext.h" /* included with gettext distribution and copied */
-
-#ifndef GETTEXT_PACKAGE
-#error You must define GETTEXT_PACKAGE before including this header.
-#endif
-
-/* we want to use shorthand _() for translating and N_() for marking */
-#define _(String) dgettext (GETTEXT_PACKAGE, String)
-#define N_(String) gettext_noop (String)
-/* FIXME: if we need it, we can add Q_ as well, like in glib */
-
-#endif /* __GST_I18N_PLUGIN_H__ */
diff --git a/gst-plugins-ugly.doap b/gst-plugins-ugly.doap
deleted file mode 100644 (file)
index 3b25aed..0000000
+++ /dev/null
@@ -1,875 +0,0 @@
-<Project
-  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
-  xmlns="http://usefulinc.com/ns/doap#"
-  xmlns:foaf="http://xmlns.com/foaf/0.1/"
-  xmlns:admin="http://webns.net/mvcb/">
-
- <name>GStreamer Ugly Plug-ins</name>
- <shortname>gst-plugins-ugly</shortname>
- <homepage rdf:resource="http://gstreamer.freedesktop.org/modules/gst-plugins-ugly.html" />
- <created>2005-09-06</created>
- <shortdesc xml:lang="en">
-a set of good-quality plug-ins with license or patent problems.
-</shortdesc>
- <description xml:lang="en">
-GStreamer Ugly Plug-ins is a set of plug-ins that have good quality and correct
-functionality, but distributing them might pose problems. The license on either
-the plug-ins or the supporting libraries might not be how we'd like. The code
-might be widely known to present patent problems.
- </description>
- <category></category>
- <bug-database rdf:resource="https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/issues/" />
- <screenshots></screenshots>
- <mailing-list rdf:resource="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" />
- <programming-language>C</programming-language>
- <license rdf:resource="http://usefulinc.com/doap/licenses/lgpl"/>
- <download-page rdf:resource="http://gstreamer.freedesktop.org/download/" />
-
- <repository>
-   <GitRepository>
-     <location rdf:resource="git://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly"/>
-     <browse rdf:resource="http://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly"/>
-   </GitRepository>
- </repository>
-
- <release>
-  <Version>
-   <revision>1.19.2</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2021-09-23</created>
-   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.19.2.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.19.1</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2021-06-01</created>
-   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.19.1.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.18.0</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2020-09-08</created>
-   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.18.0.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.17.90</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2020-08-20</created>
-   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.17.90.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.17.2</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2020-07-03</created>
-   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.17.2.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.17.1</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2020-06-19</created>
-   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.17.1.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.16.0</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2019-04-19</created>
-   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.16.0.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.15.90</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2019-04-11</created>
-   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.15.90.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.15.2</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2019-02-26</created>
-   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.15.2.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.15.1</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2019-01-17</created>
-   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.15.1.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.14.0</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2018-03-19</created>
-   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.14.0.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.13.91</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2018-03-13</created>
-   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.13.91.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.13.90</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2018-03-03</created>
-   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.13.90.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.13.1</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2018-02-15</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.13.1.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.12.4</revision>
-   <branch>1.12</branch>
-   <name></name>
-   <created>2017-12-07</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.12.4.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.12.3</revision>
-   <branch>1.12</branch>
-   <name></name>
-   <created>2017-09-18</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.12.3.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.12.2</revision>
-   <branch>1.12</branch>
-   <name></name>
-   <created>2017-07-14</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.12.2.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.12.1</revision>
-   <branch>1.12</branch>
-   <name></name>
-   <created>2017-06-20</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.12.1.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.12.0</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2017-05-04</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.12.0.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.11.91</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2017-04-27</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.11.91.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.11.90</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2017-04-07</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.11.90.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.11.2</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2017-02-24</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.11.2.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.11.1</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2017-01-12</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.11.1.tar.xz" />
-  </Version>
- </release>
-
-  <release>
-  <Version>
-   <revision>1.10.0</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2016-11-01</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.10.0.tar.xz" />
-  </Version>
- </release>
-
-  <release>
-  <Version>
-   <revision>1.9.90</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2016-09-30</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.9.90.tar.xz" />
-  </Version>
- </release>
-
-  <release>
-  <Version>
-   <revision>1.9.2</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2016-09-01</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.9.2.tar.xz" />
-  </Version>
- </release>
-
-  <release>
-  <Version>
-   <revision>1.9.1</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2016-06-06</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.9.1.tar.xz" />
-  </Version>
- </release>
-
-  <release>
-  <Version>
-   <revision>1.8.0</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2016-03-24</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.8.0.tar.xz" />
-  </Version>
- </release>
-
-  <release>
-  <Version>
-   <revision>1.7.91</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2016-03-15</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.7.91.tar.xz" />
-  </Version>
- </release>
-
-  <release>
-  <Version>
-   <revision>1.7.90</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2016-03-01</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.7.90.tar.xz" />
-  </Version>
- </release>
-
-  <release>
-  <Version>
-   <revision>1.7.2</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2016-02-19</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.7.2.tar.xz" />
-  </Version>
- </release>
-
-  <release>
-  <Version>
-   <revision>1.7.1</revision>
-   <branch>master</branch>
-   <name></name>
-   <created>2015-12-24</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.7.1.tar.xz" />
-  </Version>
- </release>
-
-  <release>
-  <Version>
-   <revision>1.6.2</revision>
-   <branch>1.6</branch>
-   <name></name>
-   <created>2015-12-14</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.6.2.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.6.1</revision>
-   <branch>1.6</branch>
-   <name></name>
-   <created>2015-10-30</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.6.1.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.6.0</revision>
-   <branch>1.6</branch>
-   <name></name>
-   <created>2015-09-25</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.6.0.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.5.91</revision>
-   <branch>1.5</branch>
-   <name></name>
-   <created>2015-09-18</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.5.91.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.5.90</revision>
-   <branch>1.5</branch>
-   <name></name>
-   <created>2015-08-19</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.5.90.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.5.2</revision>
-   <branch>1.5</branch>
-   <name></name>
-   <created>2015-06-24</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.5.2.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.5.1</revision>
-   <branch>1.5</branch>
-   <name></name>
-   <created>2015-06-07</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.5.1.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.4.0</revision>
-   <branch>1.4</branch>
-   <name></name>
-   <created>2014-07-19</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.4.0.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.3.91</revision>
-   <branch>1.3</branch>
-   <name></name>
-   <created>2014-07-11</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.3.91.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.3.90</revision>
-   <branch>1.3</branch>
-   <name></name>
-   <created>2014-06-28</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.3.90.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.3.3</revision>
-   <branch>1.3</branch>
-   <name></name>
-   <created>2014-06-22</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.3.3.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.3.2</revision>
-   <branch>1.3</branch>
-   <name></name>
-   <created>2014-05-21</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.3.2.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.3.1</revision>
-   <branch>1.3</branch>
-   <name></name>
-   <created>2014-05-03</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.3.1.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.2.0</revision>
-   <branch>1.2</branch>
-   <name></name>
-   <created>2013-09-24</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.2.0.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.1.90</revision>
-   <branch>1.1</branch>
-   <name></name>
-   <created>2013-09-19</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.1.90.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.1.4</revision>
-   <branch>1.1</branch>
-   <name></name>
-   <created>2013-08-28</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.1.4.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.1.3</revision>
-   <branch>1.1</branch>
-   <name></name>
-   <created>2013-07-29</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.1.3.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.1.2</revision>
-   <branch>1.1</branch>
-   <name></name>
-   <created>2013-07-11</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.1.2.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.1.1</revision>
-   <branch>1.1</branch>
-   <name></name>
-   <created>2013-06-05</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.1.1.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.0.2</revision>
-   <branch>1.0</branch>
-   <name></name>
-   <created>2012-10-24</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.0.2.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.0.1</revision>
-   <branch>1.0</branch>
-   <name></name>
-   <created>2012-10-07</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.0.1.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.0.0</revision>
-   <branch>1.0</branch>
-   <name></name>
-   <created>2012-09-24</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.0.0.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.11.99</revision>
-   <branch>0.11</branch>
-   <name>Stole Many a Mans Soul and Faith</name>
-   <created>2012-09-17</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.99.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.11.94</revision>
-   <branch>0.11</branch>
-   <name>Rag Hummin'</name>
-   <created>2012-09-14</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.94.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.11.93</revision>
-   <branch>0.11</branch>
-   <name>Rag Doll Physics</name>
-   <created>2012-08-08</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.93.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.11.92</revision>
-   <branch>0.11</branch>
-   <name>Hey You</name>
-   <created>2012-06-07</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.92.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.11.91</revision>
-   <branch>0.11</branch>
-   <name>I’ll grind his bones to make my bread!</name>
-   <created>2012-05-13</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.91.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.11.90</revision>
-   <branch>0.11</branch>
-   <name>Is all that we see or seem but a dream within a dream?</name>
-   <created>2012-04-12</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.90.tar.bz2" />
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.90.tar.gz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.11.2</revision>
-   <branch>0.11</branch>
-   <name>Savior from Anger</name>
-   <created>2012-03-22</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.2.tar.bz2" />
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.2.tar.gz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.11.1</revision>
-   <branch>0.11</branch>
-   <name>Moonlapse Vertigo</name>
-   <created>2012-02-16</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.1.tar.bz2" />
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.1.tar.gz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.10.18</revision>
-   <branch>0.10</branch>
-   <name>Extra Life</name>
-   <created>2011-05-10</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.18.tar.bz2" />
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.18.tar.gz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.10.17</revision>
-   <branch>0.10</branch>
-   <name>Raised by Wolves</name>
-   <created>2011-01-21</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.17.tar.bz2" />
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.17.tar.gz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.10.16</revision>
-   <branch>0.10</branch>
-   <name>Because He Knows the Time is Short</name>
-   <created>2010-09-02</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.16.tar.bz2" />
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.16.tar.gz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.10.15</revision>
-   <branch>0.10</branch>
-   <name>Englishman in a Baseball Cap</name>
-   <created>2010-05-30</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.15.tar.bz2" />
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.15.tar.gz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.10.14</revision>
-   <branch>0.10</branch>
-   <name>Run Rabbit</name>
-   <created>2010-03-06</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.14.tar.bz2" />
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.14.tar.gz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.10.13</revision>
-   <branch>0.10</branch>
-   <name>Appointed Point</name>
-   <created>2009-10-21</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.13.tar.bz2" />
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.13.tar.gz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.10.12</revision>
-   <branch>0.10</branch>
-   <name>Moving Along The Highway</name>
-   <created>2009-06-18</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.12.tar.bz2" />
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.12.tar.gz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.10.11</revision>
-   <branch>0.10</branch>
-   <name>Their swords and their knives</name>
-   <created>2009-03-20</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.11.tar.bz2" />
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.11.tar.gz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.10.10</revision>
-   <branch>0.10</branch>
-   <name>Under the House</name>
-   <created>2008-11-19</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.10.tar.bz2" />
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.10.tar.gz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.10.9</revision>
-   <branch>0.10</branch>
-   <name>Back The Way It Was</name>
-   <created>2008-08-26</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.9.tar.bz2" />
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.9.tar.gz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.10.8</revision>
-   <branch>0.10</branch>
-   <name>And yet</name>
-   <created>2008-05-21</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.8.tar.bz2" />
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.8.tar.gz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.10.7</revision>
-   <branch>0.10</branch>
-   <name>I Cheated Time</name>
-   <created>2008-01-20</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.7.tar.bz2" />
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.7.tar.gz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.10.6</revision>
-   <branch>0.10</branch>
-   <name>The Sacrifice</name>
-   <created>2007-06-19</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.6.tar.bz2" />
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.6.tar.gz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.10.5</revision>
-   <branch>0.10</branch>
-   <name>She said</name>
-   <created>2006-12-13</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.5.tar.bz2" />
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.5.tar.gz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.10.4</revision>
-   <branch>0.10</branch>
-   <name>Metal Molly</name>
-   <created>2006-08-14</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.4.tar.bz2" />
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.4.tar.gz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.10.3</revision>
-   <branch>0.10</branch>
-   <name>Late Plane</name>
-   <created>2006-03-31</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.3.tar.bz2" />
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.3.tar.gz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.10.2</revision>
-   <branch>0.10</branch>
-   <name>Season to Taste</name>
-   <created>2006-02-20</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.2.tar.bz2" />
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.2.tar.gz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.10.1</revision>
-   <branch>0.10</branch>
-   <name>Peng</name>
-   <created>2006-01-13</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.1.tar.bz2" />
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.1.tar.gz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>0.10.0</revision>
-   <branch>0.10</branch>
-   <name>Brie</name>
-   <created>2005-12-05</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.0.tar.bz2" />
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.0.tar.gz" />
-  </Version>
- </release>
-
- <maintainer>
-  <foaf:Person>
-     <foaf:name>Wim Taymans</foaf:name>
-     <foaf:mbox_sha1sum>0d93fde052812d51a05fd86de9bdbf674423daa2</foaf:mbox_sha1sum>
-  </foaf:Person>
- </maintainer>
-
-</Project>
diff --git a/gst/asfdemux/README b/gst/asfdemux/README
deleted file mode 100644 (file)
index d864eb0..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-ASF Demuxer Plugin
-==================
-
-Overview
---------
-
-This plugin is a demuxer for Microsoft's ASF Advanced Streaming Format
-or ASF [1]. This demuxer only supports ASF v1.0 since the vast
-majority of existing ASF files use that version. The specification
-has been derived from a third party source [2] without reference to
-the original.
-
-Design
-------
-
-The ASF format can carry any combination of audio, video or
-'ASF_Command_Media' streams. For simplicity it is assumed that each
-file can carry up to 16 audio streams and 16 video streams. These are
-implemented as dynamic pads and appear as appropriate once the file
-headers have been parsed.
-
-    (-------------------------)
-    ! asfdemux                !
-    !                    (video/raw0)---
-    !                    (video/raw1)---
-    !                    (video/raw...
-  --- src                     !
-    !                    (audio/raw0)---
-    !                    (audio/raw1)---
-    !                    (audio/raw...
-    !                         !
-    (-------------------------)
-
-
-Known stream fourccs are:
-
-Type           Tags            MIME type
-------------------------------------------
-H263           H263 I263       video/x-h263
-MJPEG          MJPG            image/jpeg      
-MPEG4          DIVX divx DX50  video/mpeg
-               XVID xvid mp4s  
-               MP4S M4S2 m4s2
-               0x04000000
-MSMPEG4V1      MPG4            video/mpeg
-MSMPEG4V2      MP42            video/mpeg
-MSMPEG4V3      MP43 DIV3       video/mpeg
-WMV1           WMV1            video/x-wmv, wmvversion = (int) 1
-WMV2           WMV2            video/x-wmv, wmvversion = (int) 2
-WMV3           WMV3            video/x-wmv, wmvversion = (int) 3
-WMA1           WMA1            audio/x-wma, wmaversion = (int) 1
-WMA2           WMA2            audio/x-wma, wmaversion = (int) 2
-                               audio/x-wma, wmaversion = (int) 3
-
-These video stream headers is very similar to that used in the AVI
-format as are the audio stream headers. In addition the content types
-are basically the same also so, for compatibility with existing
-plugins the src pads are set up as video/x-msvideo. This enables
-compatibility with the ffmpeg plugin.
-
-The demuxing process begins with the loop function gst_asf_demux_loop
-and parses the file in a recursive tree as follows:
-
-       gst_asf_demux_loop()
-       +-> gst_asf_demux_process_object()   <----
-           +-> gst_asf_demux_process_stream()    \
-           |-> gst_asf_demux_process_file()      |
-           |-> gst_asf_demux_process_header()  --+
-           |-> gst_asf_demux_process_data()
-               +-> gst_asf_demux_process_segment()
-                   +-> gst_asf_demux_process_chunk()
-
-Todo
-----
-
-- Support for ASF v2.0
-- Support for command media streams
-
-
-
-References
-----------
-
-[1] Microsoft. ASF Specification - Windows Media Technologies. 
-http://www.microsoft.com/windows/windowsmedia/format/asfspec.aspx (v01.20.01e, September 2003)
-
-[2] divx at euro.ru. ASF format version 1.0,
-reconstruction. http://avifile.sourceforge.net/asf-1.0.htm
diff --git a/gst/asfdemux/asfheaders.c b/gst/asfdemux/asfheaders.c
deleted file mode 100644 (file)
index b8e8a3c..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <gst/gst.h>
-
-#include "asfheaders.h"
-
-const ASFGuidHash asf_payload_ext_guids[] = {
-  {ASF_PAYLOAD_EXTENSION_DURATION, "ASF_PAYLOAD_EXTENSION_DURATION",
-        {0xC6BD9450, 0x4907867F, 0x79C7A383, 0xAD33B721}
-      },
-  {ASF_PAYLOAD_EXTENSION_SYSTEM_CONTENT, "ASF_PAYLOAD_EXTENSION_SYSTEM_CONTENT",
-      {0xD590DC20, 0x436C07BC, 0xBBF3f79C, 0xDCA4F1FB}},
-  {ASF_PAYLOAD_EXTENSION_SYSTEM_PIXEL_ASPECT_RATIO,
-        "ASF_PAYLOAD_EXTENSION_SYSTEM_PIXEL_ASPECT_RATIO",
-      {0x1b1ee554, 0x4bc8f9ea, 0x6b371a82, 0xb8c4e474}},
-  {ASF_PAYLOAD_EXTENSION_TIMING, "ASF_PAYLOAD_EXTENSION_TIMING",
-      {0XFD3CC02A, 0X4CFA06DB, 0X12721C80, 0XE44587D3}},
-  {ASF_PAYLOAD_EXTENSION_UNDEFINED, "ASF_PAYLOAD_EXTENSION_UNDEFINED",
-        {0, 0, 0, 0}
-      }
-};
-
-const ASFGuidHash asf_correction_guids[] = {
-  {ASF_CORRECTION_ON, "ASF_CORRECTION_ON",
-        {0xBFC3CD50, 0x11CF618F, 0xAA00B28B, 0x20E2B400}
-      },
-  {ASF_CORRECTION_OFF, "ASF_CORRECTION_OFF",
-        {0x20FB5700, 0x11CF5B55, 0x8000FDA8, 0x2B445C5F}
-      },
-  /* CHECKME: where does this 49F1A440... GUID come from? (tpm) */
-  {ASF_CORRECTION_OFF, "ASF_CORRECTION_OFF",
-        {0x49F1A440, 0x11D04ECE, 0xA000ACA3, 0xF64803C9}
-      },
-  {ASF_CORRECTION_UNDEFINED, "ASF_CORRECTION_UNDEFINED",
-        {0, 0, 0, 0}
-      }
-};
-
-const ASFGuidHash asf_stream_guids[] = {
-  {ASF_STREAM_VIDEO, "ASF_STREAM_VIDEO",
-        {0xBC19EFC0, 0x11CF5B4D, 0x8000FDA8, 0x2B445C5F}
-      },
-  {ASF_STREAM_AUDIO, "ASF_STREAM_AUDIO",
-        {0xF8699E40, 0x11CF5B4D, 0x8000FDA8, 0x2B445C5F}
-      },
-  {ASF_STREAM_EXT_EMBED_HEADER, "ASF_STREAM_EXT_EMBED_HEADER",
-      {0X3AFB65E2, 0X40F247EF, 0XA9702CAC, 0X43D3710D}},
-  {ASF_STREAM_UNDEFINED, "ASF_STREAM_UNDEFINED",
-        {0, 0, 0, 0}
-      }
-};
-
-const ASFGuidHash asf_ext_stream_guids[] = {
-  {ASF_EXT_STREAM_AUDIO, "ASF_EXT_STREAM_AUDIO",
-        {0X31178C9D, 0X452803E1, 0XF93D82B5, 0X03F522DB}
-      },
-  {ASF_EXT_STREAM_UNDEFINED, "ASF_EXT_STREAM_UNDEFINED",
-        {0, 0, 0, 0}
-      }
-};
-
-const ASFGuidHash asf_object_guids[] = {
-  {ASF_OBJ_STREAM, "ASF_OBJ_STREAM",
-        {0xB7DC0791, 0x11CFA9B7, 0xC000E68E, 0x6553200C}
-      },
-  {ASF_OBJ_DATA, "ASF_OBJ_DATA",
-        {0x75b22636, 0x11cf668e, 0xAA00D9a6, 0x6Cce6200}
-      },
-  {ASF_OBJ_FILE, "ASF_OBJ_FILE",
-        {0x8CABDCA1, 0x11CFA947, 0xC000E48E, 0x6553200C}
-      },
-  {ASF_OBJ_HEADER, "ASF_OBJ_HEADER",
-        {0x75B22630, 0x11CF668E, 0xAA00D9A6, 0x6CCE6200}
-      },
-  {ASF_OBJ_CONCEAL_NONE, "ASF_OBJ_CONCEAL_NONE",
-        {0x20fb5700, 0x11cf5b55, 0x8000FDa8, 0x2B445C5f}
-      },
-  {ASF_OBJ_COMMENT, "ASF_OBJ_COMMENT",
-        {0x75b22633, 0x11cf668e, 0xAA00D9a6, 0x6Cce6200}
-      },
-  {ASF_OBJ_CODEC_COMMENT, "ASF_OBJ_CODEC_COMMENT",
-        {0x86D15240, 0x11D0311D, 0xA000A4A3, 0xF64803C9}
-      },
-  {ASF_OBJ_CODEC_COMMENT1, "ASF_OBJ_CODEC_COMMENT1",
-        {0x86d15241, 0x11d0311d, 0xA000A4a3, 0xF64803c9}
-      },
-  {ASF_OBJ_SIMPLE_INDEX, "ASF_OBJ_SIMPLE_INDEX",
-        {0x33000890, 0x11cfe5b1, 0xA000F489, 0xCB4903c9}
-      },
-  {ASF_OBJ_INDEX, "ASF_OBJ_INDEX",
-        {0xd6e229d3, 0x11d135da, 0xa0003490, 0xbe4903c9}
-      },
-  {ASF_OBJ_HEAD1, "ASF_OBJ_HEAD1",
-        {0x5fbf03b5, 0x11cfa92e, 0xC000E38e, 0x6553200c}
-      },
-  {ASF_OBJ_HEAD2, "ASF_OBJ_HEAD2",
-        {0xabd3d211, 0x11cfa9ba, 0xC000E68e, 0x6553200c}
-      },
-  {ASF_OBJ_PADDING, "ASF_OBJ_PADDING",
-        {0x1806D474, 0x4509CADF, 0xAB9ABAA4, 0xE8AA96CB}
-      },
-  {ASF_OBJ_BITRATE_PROPS, "ASF_OBJ_BITRATE_PROPS",
-        {0x7bf875ce, 0x11d1468d, 0x6000828d, 0xb2a2c997}
-      },
-  {ASF_OBJ_EXT_CONTENT_DESC, "ASF_OBJ_EXT_CONTENT_DESC",
-        {0xd2d0a440, 0x11d2e307, 0xa000f097, 0x50a85ec9}
-      },
-  {ASF_OBJ_BITRATE_MUTEX, "ASF_OBJ_BITRATE_MUTEX",
-        {0xd6e229dc, 0x11d135da, 0xa0003490, 0xbe4903c9}
-      },
-  {ASF_OBJ_LANGUAGE_LIST, "ASF_OBJ_LANGUAGE_LIST",
-        {0x7c4346a9, 0x4bfcefe0, 0x3e3929b2, 0x855c41de}
-      },
-  {ASF_OBJ_METADATA_OBJECT, "ASF_OBJ_METADATA_OBJECT",
-        {0xc5f8cbea, 0x48775baf, 0x8caa6784, 0xca4cfa44}
-      },
-  {ASF_OBJ_EXTENDED_STREAM_PROPS, "ASF_OBJ_EXTENDED_STREAM_PROPS",
-        {0x14e6a5cb, 0x4332c672, 0x69a99983, 0x5a5b0652}
-      },
-  {ASF_OBJ_COMPATIBILITY, "ASF_OBJ_COMPATIBILITY",
-        {0x26f18b5d, 0x47ec4584, 0x650e5f9f, 0xc952041f}
-      },
-  {ASF_OBJ_INDEX_PLACEHOLDER, "ASF_OBJ_INDEX_PLACEHOLDER",
-        {0xd9aade20, 0x4f9c7c17, 0x558528bc, 0xa2e298dd}
-      },
-  {ASF_OBJ_INDEX_PARAMETERS, "ASF_OBJ_INDEX_PARAMETERS",
-        {0xd6e229df, 0x11d135da, 0xa0003490, 0xbe4903c9}
-      },
-  {ASF_OBJ_ADVANCED_MUTUAL_EXCLUSION, "ASF_OBJ_ADVANCED_MUTUAL_EXCLUSION",
-        {0xa08649cf, 0x46704775, 0x356e168a, 0xcd667535}
-      },
-  {ASF_OBJ_STREAM_PRIORITIZATION, "ASF_OBJ_STREAM_PRIORITIZATION",
-        {0xd4fed15b, 0x454f88d3, 0x5cedf081, 0x249e9945}
-      },
-  {ASF_OBJ_CONTENT_ENCRYPTION, "ASF_OBJ_CONTENT_ENCRYPTION",
-        {0x2211b3fb, 0x11d2bd23, 0xa000b7b4, 0x6efc55c9}
-      },
-  {ASF_OBJ_EXT_CONTENT_ENCRYPTION, "ASF_OBJ_EXT_CONTENT_ENCRYPTION",
-        {0x298ae614, 0x4c172622, 0xe0da35b9, 0x9c28e97e}
-      },
-  {ASF_OBJ_DIGITAL_SIGNATURE_OBJECT, "ASF_OBJ_DIGITAL_SIGNATURE_OBJECT",
-        {0x2211b3fc, 0x11d2bd23, 0xa000b7b4, 0x6efc55c9}
-      },
-  {ASF_OBJ_SCRIPT_COMMAND, "ASF_OBJ_SCRIPT_COMMAND",
-        {0x1efb1a30, 0x11d00b62, 0xa0009ba3, 0xf64803c9}
-      },
-  {ASF_OBJ_MARKER, "ASF_OBJ_MARKER",
-        {0xf487cd01, 0x11cfa951, 0xc000e68e, 0x6553200c}
-      },
-  /* This guid is definitely used for encryption (mentioned in MS smooth
-   * streaming docs) in new PlayReady (c) (tm) (wtf) system, but I haven't
-   * found a proper name for it.
-   * (Edward Jan 11 2011).*/
-  {ASF_OBJ_UNKNOWN_ENCRYPTION_OBJECT, "ASF_OBJ_UNKNOWN_ENCRYPTION_OBJECT",
-        {0x9a04f079, 0x42869840, 0x5be692ab, 0x955f88e0}
-      },
-  {ASF_OBJ_METADATA_LIBRARY_OBJECT, "ASF_OBJ_METADATA_LIBRARY_OBJECT",
-        {0x44231c94, 0x49d19498, 0x131d41a1, 0x5470454e}
-      },
-  {ASF_OBJ_UNDEFINED, "ASF_OBJ_UNDEFINED",
-        {0, 0, 0, 0}
-      }
-};
-
-guint32
-gst_asf_identify_guid (const ASFGuidHash * guids, ASFGuid * guid)
-{
-  gint i;
-
-  for (i = 0; guids[i].obj_id != ASF_OBJ_UNDEFINED; ++i) {
-    if (guids[i].guid.v1 == guid->v1 &&
-        guids[i].guid.v2 == guid->v2 &&
-        guids[i].guid.v3 == guid->v3 && guids[i].guid.v4 == guid->v4) {
-      return guids[i].obj_id;
-    }
-  }
-
-  /* The base case if none is found */
-  return ASF_OBJ_UNDEFINED;
-}
-
-const gchar *
-gst_asf_get_guid_nick (const ASFGuidHash * guids, guint32 obj_id)
-{
-  gint i;
-
-  for (i = 0; guids[i].obj_id != ASF_OBJ_UNDEFINED; ++i) {
-    if (guids[i].obj_id == obj_id) {
-      return guids[i].obj_id_str;
-    }
-  }
-
-  /* The base case if none is found */
-  return "ASF_OBJ_UNDEFINED";
-}
diff --git a/gst/asfdemux/asfheaders.h b/gst/asfdemux/asfheaders.h
deleted file mode 100644 (file)
index 55796c5..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * 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 __ASFHEADERS_H__
-#define __ASFHEADERS_H__
-
-G_BEGIN_DECLS
-
-typedef struct {
-  guint32 v1;
-  guint32 v2;
-  guint32 v3;
-  guint32 v4;
-} ASFGuid;
-  
-
-
-typedef struct {
-  guint8       obj_id;
-  const gchar *obj_id_str;
-  ASFGuid      guid;
-} ASFGuidHash;
-
-typedef enum {
-  ASF_OBJ_UNDEFINED = 0,
-  ASF_OBJ_STREAM,
-  ASF_OBJ_DATA,
-  ASF_OBJ_FILE,
-  ASF_OBJ_HEADER,
-  ASF_OBJ_CONCEAL_NONE,
-  ASF_OBJ_COMMENT,
-  ASF_OBJ_CODEC_COMMENT,
-  ASF_OBJ_CODEC_COMMENT1,
-  ASF_OBJ_SIMPLE_INDEX,
-  ASF_OBJ_INDEX,
-  ASF_OBJ_HEAD1,
-  ASF_OBJ_HEAD2,
-  ASF_OBJ_PADDING,
-  ASF_OBJ_BITRATE_PROPS,
-  ASF_OBJ_EXT_CONTENT_DESC,
-  ASF_OBJ_BITRATE_MUTEX,
-  ASF_OBJ_LANGUAGE_LIST,
-  ASF_OBJ_METADATA_OBJECT,
-  ASF_OBJ_EXTENDED_STREAM_PROPS,
-  ASF_OBJ_COMPATIBILITY,
-  ASF_OBJ_INDEX_PLACEHOLDER,
-  ASF_OBJ_INDEX_PARAMETERS,
-  ASF_OBJ_ADVANCED_MUTUAL_EXCLUSION,
-  ASF_OBJ_STREAM_PRIORITIZATION,
-  ASF_OBJ_CONTENT_ENCRYPTION,
-  ASF_OBJ_EXT_CONTENT_ENCRYPTION,
-  ASF_OBJ_DIGITAL_SIGNATURE_OBJECT,
-  ASF_OBJ_SCRIPT_COMMAND,
-  ASF_OBJ_MARKER,
-  ASF_OBJ_UNKNOWN_ENCRYPTION_OBJECT,
-  ASF_OBJ_METADATA_LIBRARY_OBJECT,
-} AsfObjectID;
-
-typedef enum {
-  ASF_STREAM_UNDEFINED = 0,
-  ASF_STREAM_VIDEO,
-  ASF_STREAM_AUDIO,
-  ASF_STREAM_EXT_EMBED_HEADER
-} AsfStreamType;
-
-typedef enum {
-  ASF_EXT_STREAM_UNDEFINED = 0,
-  ASF_EXT_STREAM_AUDIO
-} AsfExtStreamType;
-
-typedef enum {
-  ASF_CORRECTION_UNDEFINED = 0,
-  ASF_CORRECTION_ON,
-  ASF_CORRECTION_OFF
-} AsfCorrectionType;
-
-typedef enum {
-  ASF_PAYLOAD_EXTENSION_UNDEFINED = 0,
-  ASF_PAYLOAD_EXTENSION_DURATION,
-  ASF_PAYLOAD_EXTENSION_SYSTEM_CONTENT,
-  ASF_PAYLOAD_EXTENSION_SYSTEM_PIXEL_ASPECT_RATIO,
-  ASF_PAYLOAD_EXTENSION_TIMING
-} AsfPayloadExtensionID;
-
-extern const ASFGuidHash asf_payload_ext_guids[];
-
-extern const ASFGuidHash asf_correction_guids[];
-
-extern const ASFGuidHash asf_stream_guids[];
-
-extern const ASFGuidHash asf_ext_stream_guids[];
-
-extern const ASFGuidHash asf_object_guids[];
-
-/* GUID utilities */
-guint32        gst_asf_identify_guid (const ASFGuidHash * guids,
-                                      ASFGuid           * guid);
-
-const gchar   *gst_asf_get_guid_nick (const ASFGuidHash * guids,
-                                      guint32             obj_id);
-
-struct _asf_stream_audio {
-  guint16 codec_tag;
-  guint16 channels;
-  guint32 sample_rate;
-  guint32 byte_rate;
-  guint16 block_align;
-  guint16 word_size;
-  guint16 size;
-};
-
-typedef struct _asf_stream_audio asf_stream_audio;
-
-struct _asf_stream_video {
-  guint32 width;
-  guint32 height;
-  guint8  unknown;
-  guint16 size;
-};
-
-typedef struct _asf_stream_video asf_stream_video;
-
-struct _asf_stream_video_format {
-  guint32 size;
-  guint32 width;
-  guint32 height;
-  guint16 planes;
-  guint16 depth;
-  guint32 tag;
-  guint32 image_size;
-  guint32 xpels_meter;
-  guint32 ypels_meter;
-  guint32 num_colors;
-  guint32 imp_colors;
-};
-
-typedef struct _asf_stream_video_format asf_stream_video_format;
-
-G_END_DECLS
-
-#endif /* __ASFHEADERS_H__ */
diff --git a/gst/asfdemux/asfpacket.c b/gst/asfdemux/asfpacket.c
deleted file mode 100644 (file)
index d25abbe..0000000
+++ /dev/null
@@ -1,808 +0,0 @@
-/* GStreamer ASF/WMV/WMA demuxer
- * Copyright (C) 2007 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/* FIXME:
- *  file:///home/tpm/samples/video/asf//336370-regis-velo862.wmv
- *  file:///home/tpm/samples/video/asf//336370-eichhoer.wmv
- * throw errors (not always necessarily) in this code path
- * (looks like they carry broken payloads/packets though) */
-
-#include "asfpacket.h"
-
-#include <gst/gstutils.h>
-#include <gst/gstinfo.h>
-#include <string.h>
-
-#define GST_ASF_PAYLOAD_KF_COMPLETE(stream, payload) (stream->is_video && payload->keyframe && payload->buf_filled >= payload->mo_size)
-
-/* we are unlikely to deal with lengths > 2GB here any time soon, so just
- * return a signed int and use that for error reporting */
-static inline gint
-asf_packet_read_varlen_int (guint lentype_flags, guint lentype_bit_offset,
-    const guint8 ** p_data, guint * p_size)
-{
-  static const guint lens[4] = { 0, 1, 2, 4 };
-  guint len, val;
-
-  len = lens[(lentype_flags >> lentype_bit_offset) & 0x03];
-
-  /* will make caller bail out with a short read if there's not enough data */
-  if (G_UNLIKELY (*p_size < len)) {
-    GST_WARNING ("need %u bytes, but only %u bytes available", len, *p_size);
-    return -1;
-  }
-
-  switch (len) {
-    case 0:
-      val = 0;
-      break;
-    case 1:
-      val = GST_READ_UINT8 (*p_data);
-      break;
-    case 2:
-      val = GST_READ_UINT16_LE (*p_data);
-      break;
-    case 4:
-      val = GST_READ_UINT32_LE (*p_data);
-      break;
-    default:
-      val = 0;
-      g_assert_not_reached ();
-  }
-
-  *p_data += len;
-  *p_size -= len;
-
-  return (gint) val;
-}
-
-static GstBuffer *
-asf_packet_create_payload_buffer (AsfPacket * packet, const guint8 ** p_data,
-    guint * p_size, guint payload_len)
-{
-  guint off;
-
-  g_assert (payload_len <= *p_size);
-
-  off = (guint) (*p_data - packet->bdata);
-  g_assert (off < gst_buffer_get_size (packet->buf));
-
-  *p_data += payload_len;
-  *p_size -= payload_len;
-
-  return gst_buffer_copy_region (packet->buf, GST_BUFFER_COPY_ALL, off,
-      payload_len);
-}
-
-static AsfPayload *
-asf_payload_search_payloads_queue (AsfPayload * payload, GArray * payload_list)
-{
-  AsfPayload *ret = NULL;
-  gint idx;
-  for (idx = payload_list->len - 1; idx >= 0; idx--) {
-    ret = &g_array_index (payload_list, AsfPayload, idx);
-
-    if (G_UNLIKELY (ret->mo_size == payload->mo_size &&
-            ret->mo_number == payload->mo_number)) {
-      return ret;
-    }
-  }
-  return NULL;
-}
-
-static AsfPayload *
-asf_payload_find_previous_fragment (GstASFDemux * demux, AsfPayload * payload,
-    AsfStream * stream)
-{
-  AsfPayload *ret = NULL;
-
-  if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
-
-    /* Search in queued payloads list */
-    ret = asf_payload_search_payloads_queue (payload, stream->payloads);
-    if (ret) {
-      GST_DEBUG
-          ("previous fragments found in payloads queue for reverse playback : object ID %d",
-          ret->mo_number);
-      return ret;
-    }
-
-    /* Search in payloads 'to be queued' list */
-    ret = asf_payload_search_payloads_queue (payload, stream->payloads_rev);
-    if (ret) {
-      GST_DEBUG
-          ("previous fragments found in temp payload queue for reverse playback : object ID %d",
-          ret->mo_number);
-      return ret;
-    }
-  } else {
-    if (G_UNLIKELY (stream->payloads->len == 0)) {
-      GST_DEBUG ("No previous fragments to merge with for stream %u",
-          stream->id);
-      return NULL;
-    }
-
-    ret =
-        &g_array_index (stream->payloads, AsfPayload,
-        stream->payloads->len - 1);
-
-    if (G_UNLIKELY (ret->mo_size != payload->mo_size ||
-            ret->mo_number != payload->mo_number || ret->mo_offset != 0)) {
-      if (payload->mo_size != 0) {
-        GST_WARNING ("Previous fragment does not match continued fragment");
-        return NULL;
-      } else {
-        /* Warn about this case, but accept it anyway: files in the wild sometimes
-         * have continued packets where the subsequent fragments say that they're
-         * zero-sized. */
-        GST_WARNING ("Previous fragment found, but current fragment has "
-            "zero size, accepting anyway");
-      }
-    }
-  }
-
-#if 0
-  if (this_fragment->mo_offset + this_payload_len > first_fragment->mo_size) {
-    GST_WARNING ("Merged fragments would be bigger than the media object");
-    return FALSE;
-  }
-#endif
-
-  return ret;
-}
-
-/* TODO: if we have another payload already queued for this stream and that
- * payload doesn't have a duration, maybe we can calculate a duration for it
- * (if the previous timestamp is smaller etc. etc.) */
-static void
-gst_asf_payload_queue_for_stream_forward (GstASFDemux * demux,
-    AsfPayload * payload, AsfStream * stream)
-{
-  GST_DEBUG_OBJECT (demux, "Got payload for stream %d ts:%" GST_TIME_FORMAT,
-      stream->id, GST_TIME_ARGS (payload->ts));
-
-  /* make timestamps start from 0; first_ts will be determined during activation (once we have enough data),
-     which will also update ts of all packets queued before we knew first_ts;  */
-  if (G_LIKELY (GST_CLOCK_TIME_IS_VALID (demux->first_ts)
-          && GST_CLOCK_TIME_IS_VALID (payload->ts))) {
-    if (payload->ts > demux->first_ts)
-      payload->ts -= demux->first_ts;
-    else
-      payload->ts = 0;
-  }
-
-  /* remove any incomplete payloads that will never be completed */
-  while (stream->payloads->len > 0) {
-    AsfPayload *prev;
-    guint idx_last;
-
-    idx_last = stream->payloads->len - 1;
-    prev = &g_array_index (stream->payloads, AsfPayload, idx_last);
-
-    if (G_UNLIKELY (gst_asf_payload_is_complete (prev)))
-      break;
-
-    GST_DEBUG_OBJECT (demux, "Dropping incomplete fragmented media object "
-        "queued for stream %u", stream->id);
-
-    gst_buffer_replace (&prev->buf, NULL);
-    g_array_remove_index (stream->payloads, idx_last);
-
-    /* there's data missing, so there's a discontinuity now */
-    GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DISCONT);
-  }
-
-  /* If we're about to queue a key frame that is before the segment start, we
-   * can ditch any previously queued payloads (which would also be before the
-   * segment start). This makes sure the decoder doesn't decode more than
-   * absolutely necessary after a seek (we don't push out payloads that are
-   * before the segment start until we have at least one that falls within the
-   * segment) */
-  if (G_UNLIKELY (GST_CLOCK_TIME_IS_VALID (payload->ts) &&
-          payload->ts < demux->segment.start && payload->keyframe)) {
-    GST_DEBUG_OBJECT (demux, "Queueing keyframe before segment start, removing"
-        " %u previously-queued payloads, which would be out of segment too and"
-        " hence don't have to be decoded", stream->payloads->len);
-    while (stream->payloads->len > 0) {
-      AsfPayload *last;
-      guint idx_last;
-
-      idx_last = stream->payloads->len - 1;
-      last = &g_array_index (stream->payloads, AsfPayload, idx_last);
-      gst_buffer_replace (&last->buf, NULL);
-      g_array_remove_index (stream->payloads, idx_last);
-    }
-
-    /* Mark discontinuity (should be done via stream->discont anyway though) */
-    GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DISCONT);
-  }
-
-  g_array_append_vals (stream->payloads, payload, 1);
-}
-
-static void
-gst_asf_payload_queue_for_stream_reverse (GstASFDemux * demux,
-    AsfPayload * payload, AsfStream * stream)
-{
-  GST_DEBUG_OBJECT (demux, "Got payload for stream %d ts:%" GST_TIME_FORMAT,
-      stream->id, GST_TIME_ARGS (payload->ts));
-
-  if (demux->multiple_payloads) {
-    /* store the payload in temporary buffer, until we parse all payloads in this packet */
-    g_array_append_vals (stream->payloads_rev, payload, 1);
-  } else {
-    if (G_LIKELY (GST_CLOCK_TIME_IS_VALID (payload->ts))) {
-      g_array_append_vals (stream->payloads, payload, 1);
-      if (GST_ASF_PAYLOAD_KF_COMPLETE (stream, payload)) {
-        stream->kf_pos = stream->payloads->len - 1;
-      }
-    } else {
-      gst_buffer_unref (payload->buf);
-    }
-  }
-}
-
-
-static void
-gst_asf_payload_queue_for_stream (GstASFDemux * demux, AsfPayload * payload,
-    AsfStream * stream)
-{
-  GST_DEBUG_OBJECT (demux, "Got payload for stream %d ts:%" GST_TIME_FORMAT,
-      stream->id, GST_TIME_ARGS (payload->ts));
-
-  if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
-    gst_asf_payload_queue_for_stream_reverse (demux, payload, stream);
-  } else {
-    gst_asf_payload_queue_for_stream_forward (demux, payload, stream);
-  }
-
-}
-
-static void
-asf_payload_parse_replicated_data_extensions (AsfStream * stream,
-    AsfPayload * payload)
-{
-  AsfPayloadExtension *ext;
-  guint off;
-  guint16 ext_len;
-
-  if (!stream->ext_props.valid || stream->ext_props.payload_extensions == NULL)
-    return;
-
-  off = 8;
-  for (ext = stream->ext_props.payload_extensions; ext->len > 0; ++ext) {
-    ext_len = ext->len;
-    if (ext_len == 0xFFFF) {    /* extension length is determined by first two bytes in replicated data */
-      ext_len = GST_READ_UINT16_LE (payload->rep_data + off);
-      off += 2;
-    }
-    if (G_UNLIKELY (off + ext_len > payload->rep_data_len)) {
-      GST_WARNING ("not enough replicated data for defined extensions");
-      return;
-    }
-    switch (ext->id) {
-      case ASF_PAYLOAD_EXTENSION_DURATION:
-        if (G_LIKELY (ext_len == 2)) {
-          guint16 tdur = GST_READ_UINT16_LE (payload->rep_data + off);
-          /* packet durations of 1ms are mostly invalid */
-          if (tdur != 1)
-            payload->duration = tdur * GST_MSECOND;
-        } else {
-          GST_WARNING ("unexpected DURATION extensions len %u", ext_len);
-        }
-        break;
-      case ASF_PAYLOAD_EXTENSION_SYSTEM_CONTENT:
-        if (G_LIKELY (ext_len == 1)) {
-          guint8 data = payload->rep_data[off];
-
-          payload->interlaced = data & 0x1;
-          payload->rff = data & 0x8;
-          payload->tff = (data & 0x2) || !(data & 0x4);
-          GST_DEBUG ("SYSTEM_CONTENT: interlaced:%d, rff:%d, tff:%d",
-              payload->interlaced, payload->rff, payload->tff);
-        } else {
-          GST_WARNING ("unexpected SYSTEM_CONTE extensions len %u", ext_len);
-        }
-        break;
-      case ASF_PAYLOAD_EXTENSION_SYSTEM_PIXEL_ASPECT_RATIO:
-        if (G_LIKELY (ext_len == 2)) {
-          payload->par_x = payload->rep_data[off];
-          payload->par_y = payload->rep_data[off + 1];
-          GST_DEBUG ("PAR %d / %d", payload->par_x, payload->par_y);
-        } else {
-          GST_WARNING ("unexpected SYSTEM_PIXEL_ASPECT_RATIO extensions len %u",
-              ext_len);
-        }
-        break;
-      case ASF_PAYLOAD_EXTENSION_TIMING:
-      {
-        /* dvr-ms timing - this will override packet timestamp */
-        guint64 time = GST_READ_UINT64_LE (payload->rep_data + off + 8);
-        if (time != 0xFFFFFFFFFFFFFFFF)
-          payload->ts = time * 100;
-        else
-          payload->ts = GST_CLOCK_TIME_NONE;
-      }
-        break;
-      default:
-        GST_LOG ("UNKNOWN PAYLOAD EXTENSION!");
-        break;
-    }
-    off += ext_len;
-  }
-}
-
-static gboolean
-gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet,
-    gint lentype, const guint8 ** p_data, guint * p_size)
-{
-  AsfPayload payload = { 0, };
-  AsfStream *stream;
-  gboolean is_compressed;
-  guint payload_len;
-  guint stream_num;
-
-  if (G_UNLIKELY (*p_size < 1)) {
-    GST_WARNING_OBJECT (demux, "Short packet!");
-    return FALSE;
-  }
-
-  stream_num = GST_READ_UINT8 (*p_data) & 0x7f;
-  payload.keyframe = ((GST_READ_UINT8 (*p_data) & 0x80) != 0);
-
-  *p_data += 1;
-  *p_size -= 1;
-
-  payload.ts = GST_CLOCK_TIME_NONE;
-  payload.duration = GST_CLOCK_TIME_NONE;
-  payload.par_x = 0;
-  payload.par_y = 0;
-  payload.interlaced = FALSE;
-  payload.tff = FALSE;
-  payload.rff = FALSE;
-
-  payload.mo_number =
-      asf_packet_read_varlen_int (packet->prop_flags, 4, p_data, p_size);
-  payload.mo_offset =
-      asf_packet_read_varlen_int (packet->prop_flags, 2, p_data, p_size);
-  payload.rep_data_len =
-      asf_packet_read_varlen_int (packet->prop_flags, 0, p_data, p_size);
-
-  is_compressed = (payload.rep_data_len == 1);
-
-  GST_LOG_OBJECT (demux, "payload for stream %u", stream_num);
-  GST_LOG_OBJECT (demux, "keyframe   : %s", (payload.keyframe) ? "yes" : "no");
-  GST_LOG_OBJECT (demux, "compressed : %s", (is_compressed) ? "yes" : "no");
-
-  if (G_UNLIKELY (*p_size < payload.rep_data_len)) {
-    GST_WARNING_OBJECT (demux, "Short packet! rep_data_len=%u, size=%u",
-        payload.rep_data_len, *p_size);
-    return FALSE;
-  }
-
-  memcpy (payload.rep_data, *p_data,
-      MIN (sizeof (payload.rep_data), payload.rep_data_len));
-
-  *p_data += payload.rep_data_len;
-  *p_size -= payload.rep_data_len;
-
-  if (G_UNLIKELY (*p_size == 0)) {
-    GST_WARNING_OBJECT (demux, "payload without data!?");
-    return FALSE;
-  }
-
-  /* we use -1 as lentype for a single payload that's the size of the packet */
-  if (G_UNLIKELY ((lentype >= 0 && lentype <= 3))) {
-    payload_len = asf_packet_read_varlen_int (lentype, 0, p_data, p_size);
-    if (*p_size < payload_len) {
-      GST_WARNING_OBJECT (demux, "Short packet! payload_len=%u, size=%u",
-          payload_len, *p_size);
-      return FALSE;
-    }
-  } else {
-    payload_len = *p_size;
-  }
-
-  GST_LOG_OBJECT (demux, "payload length: %u", payload_len);
-
-  stream = gst_asf_demux_get_stream (demux, stream_num);
-
-  if (G_UNLIKELY (stream == NULL)) {
-    if (gst_asf_demux_is_unknown_stream (demux, stream_num)) {
-      GST_WARNING_OBJECT (demux, "Payload for unknown stream %u, skipping",
-          stream_num);
-    }
-    if (*p_size < payload_len) {
-      *p_data += *p_size;
-      *p_size = 0;
-    } else {
-      *p_data += payload_len;
-      *p_size -= payload_len;
-    }
-    return TRUE;
-  }
-
-  if (!stream->is_video)
-    stream->kf_pos = 0;
-
-  if (G_UNLIKELY (!is_compressed)) {
-    GST_LOG_OBJECT (demux, "replicated data length: %u", payload.rep_data_len);
-
-    if (payload.rep_data_len >= 8) {
-      payload.mo_size = GST_READ_UINT32_LE (payload.rep_data);
-      payload.ts = GST_READ_UINT32_LE (payload.rep_data + 4) * GST_MSECOND;
-      if (G_UNLIKELY (payload.ts < demux->preroll))
-        payload.ts = 0;
-      else
-        payload.ts -= demux->preroll;
-      asf_payload_parse_replicated_data_extensions (stream, &payload);
-
-      GST_LOG_OBJECT (demux, "media object size   : %u", payload.mo_size);
-      GST_LOG_OBJECT (demux, "media object ts     : %" GST_TIME_FORMAT,
-          GST_TIME_ARGS (payload.ts));
-      GST_LOG_OBJECT (demux, "media object dur    : %" GST_TIME_FORMAT,
-          GST_TIME_ARGS (payload.duration));
-    } else if (payload.rep_data_len == 0) {
-      payload.mo_size = 0;
-    } else if (payload.rep_data_len != 0) {
-      GST_WARNING_OBJECT (demux, "invalid replicated data length, very bad");
-      *p_data += payload_len;
-      *p_size -= payload_len;
-      return FALSE;
-    }
-
-    GST_LOG_OBJECT (demux, "media object offset : %u", payload.mo_offset);
-
-    GST_LOG_OBJECT (demux, "payload length: %u", payload_len);
-
-    if (payload_len == 0) {
-      GST_DEBUG_OBJECT (demux, "skipping empty payload");
-    } else if (payload.mo_offset == 0 && payload.mo_size == payload_len) {
-      /* if the media object is not fragmented, just create a sub-buffer */
-      GST_LOG_OBJECT (demux, "unfragmented media object size %u", payload_len);
-      payload.buf = asf_packet_create_payload_buffer (packet, p_data, p_size,
-          payload_len);
-      payload.buf_filled = payload_len;
-      gst_asf_payload_queue_for_stream (demux, &payload, stream);
-    } else if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
-      /* Handle fragmented payloads for reverse playback */
-      AsfPayload *prev;
-      const guint8 *payload_data = *p_data;
-      prev = asf_payload_find_previous_fragment (demux, &payload, stream);
-
-      if (prev) {
-        gint idx;
-        AsfPayload *p;
-        gst_buffer_fill (prev->buf, payload.mo_offset,
-            payload_data, payload_len);
-        prev->buf_filled += payload_len;
-        if (payload.keyframe && payload.mo_offset == 0) {
-          stream->reverse_kf_ready = TRUE;
-
-          for (idx = stream->payloads->len - 1; idx >= 0; idx--) {
-            p = &g_array_index (stream->payloads, AsfPayload, idx);
-            if (p->mo_number == payload.mo_number) {
-              /* Mark position of KF for reverse play */
-              stream->kf_pos = idx;
-            }
-          }
-        }
-      } else {
-        payload.buf = gst_buffer_new_allocate (NULL, payload.mo_size, NULL);    /* can we use (mo_size - offset) for size? */
-        gst_buffer_fill (payload.buf, payload.mo_offset,
-            payload_data, payload_len);
-        payload.buf_filled = payload.mo_size - (payload.mo_offset);
-        gst_asf_payload_queue_for_stream (demux, &payload, stream);
-      }
-      *p_data += payload_len;
-      *p_size -= payload_len;
-    } else {
-      const guint8 *payload_data = *p_data;
-
-      g_assert (payload_len <= *p_size);
-
-      *p_data += payload_len;
-      *p_size -= payload_len;
-
-      /* n-th fragment of a fragmented media object? */
-      if (payload.mo_offset != 0) {
-        AsfPayload *prev;
-
-        if ((prev =
-                asf_payload_find_previous_fragment (demux, &payload, stream))) {
-          if (prev->buf == NULL || (payload.mo_size > 0
-                  && payload.mo_size != prev->mo_size)
-              || payload.mo_offset >= gst_buffer_get_size (prev->buf)
-              || payload.mo_offset + payload_len >
-              gst_buffer_get_size (prev->buf)) {
-            GST_WARNING_OBJECT (demux, "Offset doesn't match previous data?!");
-          } else {
-            /* we assume fragments are payloaded with increasing mo_offset */
-            if (payload.mo_offset != prev->buf_filled) {
-              GST_WARNING_OBJECT (demux, "media object payload discontinuity: "
-                  "offset=%u vs buf_filled=%u", payload.mo_offset,
-                  prev->buf_filled);
-            }
-            gst_buffer_fill (prev->buf, payload.mo_offset,
-                payload_data, payload_len);
-            prev->buf_filled =
-                MAX (prev->buf_filled, payload.mo_offset + payload_len);
-            GST_LOG_OBJECT (demux, "Merged media object fragments, size now %u",
-                prev->buf_filled);
-          }
-        } else {
-          GST_DEBUG_OBJECT (demux, "n-th payload fragment, but don't have "
-              "any previous fragment, ignoring payload");
-        }
-      } else {
-        GST_LOG_OBJECT (demux, "allocating buffer of size %u for fragmented "
-            "media object", payload.mo_size);
-        payload.buf = gst_buffer_new_allocate (NULL, payload.mo_size, NULL);
-        gst_buffer_fill (payload.buf, 0, payload_data, payload_len);
-        payload.buf_filled = payload_len;
-
-        gst_asf_payload_queue_for_stream (demux, &payload, stream);
-      }
-    }
-  } else {
-    const guint8 *payload_data;
-    GstClockTime ts, ts_delta;
-    guint num;
-
-    GST_LOG_OBJECT (demux, "Compressed payload, length=%u", payload_len);
-
-    payload_data = *p_data;
-
-    *p_data += payload_len;
-    *p_size -= payload_len;
-
-    ts = payload.mo_offset * GST_MSECOND;
-    if (G_UNLIKELY (ts < demux->preroll))
-      ts = 0;
-    else
-      ts -= demux->preroll;
-    ts_delta = payload.rep_data[0] * GST_MSECOND;
-
-    for (num = 0; payload_len > 0; ++num) {
-      guint sub_payload_len;
-
-      sub_payload_len = GST_READ_UINT8 (payload_data);
-
-      GST_LOG_OBJECT (demux, "subpayload #%u: len=%u, ts=%" GST_TIME_FORMAT,
-          num, sub_payload_len, GST_TIME_ARGS (ts));
-
-      ++payload_data;
-      --payload_len;
-
-      if (G_UNLIKELY (payload_len < sub_payload_len)) {
-        GST_WARNING_OBJECT (demux, "Short payload! %u bytes left", payload_len);
-        return FALSE;
-      }
-
-      if (G_LIKELY (sub_payload_len > 0)) {
-        payload.buf = asf_packet_create_payload_buffer (packet,
-            &payload_data, &payload_len, sub_payload_len);
-        payload.buf_filled = sub_payload_len;
-
-        payload.ts = ts;
-        if (G_LIKELY (ts_delta))
-          payload.duration = ts_delta;
-        else
-          payload.duration = GST_CLOCK_TIME_NONE;
-
-        gst_asf_payload_queue_for_stream (demux, &payload, stream);
-      }
-
-      ts += ts_delta;
-    }
-  }
-
-  return TRUE;
-}
-
-GstAsfDemuxParsePacketError
-gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf)
-{
-  AsfPacket packet = { 0, };
-  GstMapInfo map;
-  const guint8 *data;
-  gboolean has_multiple_payloads;
-  GstAsfDemuxParsePacketError ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE;
-  guint8 ec_flags, flags1;
-  guint size;
-
-  gst_buffer_map (buf, &map, GST_MAP_READ);
-  data = map.data;
-  size = map.size;
-  GST_LOG_OBJECT (demux, "Buffer size: %u", size);
-
-  /* need at least two payload flag bytes, send time, and duration */
-  if (G_UNLIKELY (size < 2 + 4 + 2)) {
-    GST_WARNING_OBJECT (demux, "Packet size is < 8");
-    ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE;
-    goto done;
-  }
-
-  packet.buf = buf;
-  /* evidently transient */
-  packet.bdata = data;
-
-  ec_flags = GST_READ_UINT8 (data);
-
-  /* skip optional error correction stuff */
-  if ((ec_flags & 0x80) != 0) {
-    guint ec_len_type, ec_len;
-
-    ec_len_type = (ec_flags & 0x60) >> 5;
-    if (ec_len_type == 0) {
-      ec_len = ec_flags & 0x0f;
-    } else {
-      GST_WARNING_OBJECT (demux, "unexpected error correction length type %u",
-          ec_len_type);
-      ec_len = 2;
-    }
-    GST_LOG_OBJECT (demux, "packet has error correction (%u bytes)", ec_len);
-
-    /* still need at least two payload flag bytes, send time, and duration */
-    if (size <= (1 + ec_len) + 2 + 4 + 2) {
-      GST_WARNING_OBJECT (demux, "Packet size is < 8 with Error Correction");
-      ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL;
-      goto done;
-    }
-
-    data += 1 + ec_len;
-    size -= 1 + ec_len;
-  }
-
-  /* parse payload info */
-  flags1 = GST_READ_UINT8 (data);
-  packet.prop_flags = GST_READ_UINT8 (data + 1);
-
-  data += 2;
-  size -= 2;
-
-  has_multiple_payloads = (flags1 & 0x01) != 0;
-
-  packet.length = asf_packet_read_varlen_int (flags1, 5, &data, &size);
-
-  packet.sequence = asf_packet_read_varlen_int (flags1, 1, &data, &size);
-
-  packet.padding = asf_packet_read_varlen_int (flags1, 3, &data, &size);
-
-  if (G_UNLIKELY (size < 6)) {
-    GST_WARNING_OBJECT (demux, "Packet size is < 6");
-    ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL;
-    goto done;
-  }
-
-  packet.send_time = GST_READ_UINT32_LE (data) * GST_MSECOND;
-  packet.duration = GST_READ_UINT16_LE (data + 4) * GST_MSECOND;
-
-  data += 4 + 2;
-  size -= 4 + 2;
-
-  GST_LOG_OBJECT (demux, "flags            : 0x%x", flags1);
-  GST_LOG_OBJECT (demux, "multiple payloads: %u", has_multiple_payloads);
-  GST_LOG_OBJECT (demux, "packet length    : %u", packet.length);
-  GST_LOG_OBJECT (demux, "sequence         : %u", packet.sequence);
-  GST_LOG_OBJECT (demux, "padding          : %u", packet.padding);
-  GST_LOG_OBJECT (demux, "send time        : %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (packet.send_time));
-
-  GST_LOG_OBJECT (demux, "duration         : %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (packet.duration));
-
-  if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)
-      && demux->seek_to_cur_pos == TRUE) {
-    /* For reverse playback, initially parse packets forward until we reach packet with 'seek' timestamp */
-    if (packet.send_time - demux->preroll > demux->segment.stop) {
-      demux->seek_to_cur_pos = FALSE;
-    }
-    ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE;
-    goto done;
-  }
-
-  if (G_UNLIKELY (packet.padding == (guint) - 1 || size < packet.padding)) {
-    GST_WARNING_OBJECT (demux, "No padding, or padding bigger than buffer");
-    ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE;
-    goto done;
-  }
-
-  size -= packet.padding;
-
-  /* adjust available size for parsing if there's less actual packet data for
-   * parsing than there is data in bytes (for sample see bug 431318) */
-  if (G_UNLIKELY (packet.length != 0 && packet.padding == 0
-          && packet.length < demux->packet_size)) {
-    GST_LOG_OBJECT (demux, "shortened packet with implicit padding, "
-        "adjusting available data size");
-    if (size < demux->packet_size - packet.length) {
-      /* the buffer is smaller than the implicit padding */
-      GST_WARNING_OBJECT (demux, "Buffer is smaller than the implicit padding");
-      ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE;
-      goto done;
-    } else {
-      /* subtract the implicit padding */
-      size -= (demux->packet_size - packet.length);
-    }
-  }
-
-  if (has_multiple_payloads) {
-    guint i, num, lentype;
-    demux->multiple_payloads = TRUE;
-
-    if (G_UNLIKELY (size < 1)) {
-      GST_WARNING_OBJECT (demux, "No room more in buffer");
-      ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE;
-      goto done;
-    }
-
-    num = (GST_READ_UINT8 (data) & 0x3F) >> 0;
-    lentype = (GST_READ_UINT8 (data) & 0xC0) >> 6;
-
-    ++data;
-    --size;
-
-    GST_LOG_OBJECT (demux, "num payloads     : %u", num);
-
-    for (i = 0; i < num; ++i) {
-      GST_LOG_OBJECT (demux, "Parsing payload %u/%u, size left: %u", i + 1, num,
-          size);
-
-      if (G_UNLIKELY (!gst_asf_demux_parse_payload (demux, &packet, lentype,
-                  &data, &size))) {
-        GST_WARNING_OBJECT (demux, "Failed to parse payload %u/%u", i + 1, num);
-        ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL;
-        break;
-      }
-    }
-
-    if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
-      /* In reverse playback, we parsed the packet (with multiple payloads) and stored the payloads in temporary queue.
-         Now, add them to the stream's payload queue */
-      for (i = 0; i < demux->num_streams; i++) {
-        AsfStream *s = &demux->stream[i];
-        while (s->payloads_rev->len > 0) {
-          AsfPayload *p;
-          p = &g_array_index (s->payloads_rev, AsfPayload,
-              s->payloads_rev->len - 1);
-          g_array_append_vals (s->payloads, p, 1);
-          if (GST_ASF_PAYLOAD_KF_COMPLETE (s, p)) {
-            /* Mark position of KF for reverse play */
-            s->kf_pos = s->payloads->len - 1;
-          }
-          g_array_remove_index (s->payloads_rev, (s->payloads_rev->len - 1));
-        }
-      }
-    }
-
-  } else {
-    GST_LOG_OBJECT (demux, "Parsing single payload");
-    demux->multiple_payloads = FALSE;
-    if (G_UNLIKELY (!gst_asf_demux_parse_payload (demux, &packet, -1, &data,
-                &size))) {
-      GST_WARNING_OBJECT (demux, "Failed to parse payload");
-      ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE;
-    }
-  }
-
-done:
-  gst_buffer_unmap (buf, &map);
-  return ret;
-}
diff --git a/gst/asfdemux/asfpacket.h b/gst/asfdemux/asfpacket.h
deleted file mode 100644 (file)
index a812e74..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/* GStreamer ASF/WMV/WMA demuxer
- * Copyright (C) 2007 Tim-Philipp Müller <tim centricular net>
- *
- * 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 __ASF_PACKET_H__
-#define __ASF_PACKET_H__
-
-#include <gst/gstbuffer.h>
-#include <gst/gstclock.h>
-
-#include "gstasfdemux.h"
-
-G_BEGIN_DECLS
-
-typedef struct {
-  gboolean      keyframe;          /* buffer flags might not survive merge.. */
-  guint         mo_number;         /* media object number (unused)           */
-  guint         mo_offset;         /* offset (timestamp for compressed data) */
-  guint         mo_size;           /* size of media-object-to-be, or 0       */
-  guint         buf_filled;        /* how much of the mo data we got so far  */
-  GstBuffer    *buf;               /* buffer to assemble media-object or NULL*/
-  guint         rep_data_len;      /* should never be more than 256, since   */
-  guint8        rep_data[256];     /* the length should be stored in a byte  */
-  GstClockTime  ts;
-  GstClockTime  duration;          /* is not always available                */
-  guint8        par_x;             /* not always available (0:deactivated)   */
-  guint8        par_y;             /* not always available (0:deactivated)   */
-  gboolean      interlaced;        /* default: FALSE */
-  gboolean      tff;
-  gboolean      rff;
-} AsfPayload;
-
-typedef struct {
-  GstBuffer    *buf;
-  const guint8 *bdata;
-  guint         length;            /* packet length (unused)               */
-  guint         padding;           /* length of padding at end of packet   */
-  guint         sequence;          /* sequence (unused)                    */
-  GstClockTime  send_time;
-  GstClockTime  duration;
-
-  guint8        prop_flags;        /* payload length types                 */
-} AsfPacket;
-
-typedef enum {
-  GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE,
-  GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE,
-  GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL
-} GstAsfDemuxParsePacketError;
-
-GstAsfDemuxParsePacketError gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf);
-
-#define gst_asf_payload_is_complete(payload) \
-    ((payload)->buf_filled >= (payload)->mo_size)
-
-G_END_DECLS
-
-#endif /* __ASF_PACKET_H__ */
-
diff --git a/gst/asfdemux/gstasf.c b/gst/asfdemux/gstasf.c
deleted file mode 100644 (file)
index 73a7db2..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <gst/riff/riff-read.h>
-#include "gst/gst-i18n-plugin.h"
-
-#include "gstasfelements.h"
-
-
-/* #include "gstasfmux.h" */
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  gboolean ret = FALSE;
-
-  ret |= GST_ELEMENT_REGISTER (asfdemux, plugin);
-  ret |= GST_ELEMENT_REGISTER (rtspwms, plugin);
-  ret |= GST_ELEMENT_REGISTER (rtpasfdepay, plugin);
-/*
-  if (!gst_element_register (plugin, "asfmux", GST_RANK_NONE, GST_TYPE_ASFMUX))
-    return FALSE;
-*/
-  return ret;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    asf,
-    "Demuxes and muxes audio and video in Microsofts ASF format",
-    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/gst/asfdemux/gstasfdemux.c b/gst/asfdemux/gstasfdemux.c
deleted file mode 100644 (file)
index 0c8dc84..0000000
+++ /dev/null
@@ -1,4921 +0,0 @@
-/* GStreamer ASF/WMV/WMA demuxer
- * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) 2006-2009 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/* TODO:
- *
- * - _loop():
- *   stop if at end of segment if != end of file, ie. demux->segment.stop
- *
- * - fix packet parsing:
- *   there's something wrong with timestamps for packets with keyframes,
- *   and durations too.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gstutils.h>
-#include <gst/base/gstbytereader.h>
-#include <gst/base/gsttypefindhelper.h>
-#include <gst/riff/riff-media.h>
-#include <gst/tag/tag.h>
-#include <gst/gst-i18n-plugin.h>
-#include <gst/video/video.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "gstasfelements.h"
-#include "gstasfdemux.h"
-#include "asfheaders.h"
-#include "asfpacket.h"
-
-GST_DEBUG_CATEGORY (asfdemux_dbg);
-#define GST_CAT_DEFAULT asfdemux_dbg
-
-static GstStaticPadTemplate gst_asf_demux_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/x-ms-asf")
-    );
-
-static GstStaticPadTemplate audio_src_template =
-GST_STATIC_PAD_TEMPLATE ("audio_%u",
-    GST_PAD_SRC,
-    GST_PAD_SOMETIMES,
-    GST_STATIC_CAPS_ANY);
-
-static GstStaticPadTemplate video_src_template =
-GST_STATIC_PAD_TEMPLATE ("video_%u",
-    GST_PAD_SRC,
-    GST_PAD_SOMETIMES,
-    GST_STATIC_CAPS_ANY);
-
-/* size of an ASF object header, ie. GUID (16 bytes) + object size (8 bytes) */
-#define ASF_OBJECT_HEADER_SIZE  (16+8)
-
-/* FIXME: get rid of this */
-/* abuse this GstFlowReturn enum for internal usage */
-#define ASF_FLOW_NEED_MORE_DATA  99
-
-#define gst_asf_get_flow_name(flow)    \
-  (flow == ASF_FLOW_NEED_MORE_DATA) ?  \
-  "need-more-data" : gst_flow_get_name (flow)
-
-static void gst_asf_demux_finalize (GObject * object);
-static GstStateChangeReturn gst_asf_demux_change_state (GstElement * element,
-    GstStateChange transition);
-static gboolean gst_asf_demux_element_send_event (GstElement * element,
-    GstEvent * event);
-static gboolean gst_asf_demux_send_event_unlocked (GstASFDemux * demux,
-    GstEvent * event);
-static gboolean gst_asf_demux_handle_src_query (GstPad * pad,
-    GstObject * parent, GstQuery * query);
-static GstFlowReturn gst_asf_demux_chain (GstPad * pad, GstObject * parent,
-    GstBuffer * buf);
-static gboolean gst_asf_demux_sink_event (GstPad * pad, GstObject * parent,
-    GstEvent * event);
-static GstFlowReturn gst_asf_demux_process_object (GstASFDemux * demux,
-    guint8 ** p_data, guint64 * p_size);
-static gboolean gst_asf_demux_activate (GstPad * sinkpad, GstObject * parent);
-static gboolean gst_asf_demux_activate_mode (GstPad * sinkpad,
-    GstObject * parent, GstPadMode mode, gboolean active);
-static void gst_asf_demux_loop (GstASFDemux * demux);
-static void
-gst_asf_demux_process_queued_extended_stream_objects (GstASFDemux * demux);
-static gboolean gst_asf_demux_pull_headers (GstASFDemux * demux,
-    GstFlowReturn * pflow);
-static GstFlowReturn gst_asf_demux_pull_indices (GstASFDemux * demux);
-static void gst_asf_demux_reset_stream_state_after_discont (GstASFDemux * asf);
-static gboolean
-gst_asf_demux_parse_data_object_start (GstASFDemux * demux, guint8 * data);
-static void gst_asf_demux_descramble_buffer (GstASFDemux * demux,
-    AsfStream * stream, GstBuffer ** p_buffer);
-static void gst_asf_demux_activate_stream (GstASFDemux * demux,
-    AsfStream * stream);
-static GstStructure *gst_asf_demux_get_metadata_for_stream (GstASFDemux * d,
-    guint stream_num);
-static GstFlowReturn gst_asf_demux_push_complete_payloads (GstASFDemux * demux,
-    gboolean force);
-
-#define gst_asf_demux_parent_class parent_class
-G_DEFINE_TYPE (GstASFDemux, gst_asf_demux, GST_TYPE_ELEMENT);
-GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (asfdemux, "asfdemux", GST_RANK_SECONDARY,
-    GST_TYPE_ASF_DEMUX, asf_element_init (plugin));
-
-static void
-gst_asf_demux_class_init (GstASFDemuxClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-
-  gobject_class = G_OBJECT_CLASS (klass);
-  gstelement_class = (GstElementClass *) klass;
-
-  gobject_class->finalize = gst_asf_demux_finalize;
-
-  gst_element_class_set_static_metadata (gstelement_class, "ASF Demuxer",
-      "Codec/Demuxer",
-      "Demultiplexes ASF Streams", "Owen Fraser-Green <owen@discobabe.net>");
-
-  gst_element_class_add_static_pad_template (gstelement_class,
-      &audio_src_template);
-  gst_element_class_add_static_pad_template (gstelement_class,
-      &video_src_template);
-  gst_element_class_add_static_pad_template (gstelement_class,
-      &gst_asf_demux_sink_template);
-
-  gstelement_class->change_state =
-      GST_DEBUG_FUNCPTR (gst_asf_demux_change_state);
-  gstelement_class->send_event =
-      GST_DEBUG_FUNCPTR (gst_asf_demux_element_send_event);
-}
-
-static void
-gst_asf_demux_free_stream (GstASFDemux * demux, AsfStream * stream)
-{
-  gst_caps_replace (&stream->caps, NULL);
-  if (stream->pending_tags) {
-    gst_tag_list_unref (stream->pending_tags);
-    stream->pending_tags = NULL;
-  }
-  if (stream->streamheader) {
-    gst_buffer_unref (stream->streamheader);
-    stream->streamheader = NULL;
-  }
-  if (stream->pad) {
-    if (stream->active) {
-      gst_element_remove_pad (GST_ELEMENT_CAST (demux), stream->pad);
-      gst_flow_combiner_remove_pad (demux->flowcombiner, stream->pad);
-    } else
-      gst_object_unref (stream->pad);
-    stream->pad = NULL;
-  }
-
-  if (stream->payloads) {
-    while (stream->payloads->len > 0) {
-      AsfPayload *payload;
-      guint last;
-
-      last = stream->payloads->len - 1;
-      payload = &g_array_index (stream->payloads, AsfPayload, last);
-      gst_buffer_replace (&payload->buf, NULL);
-      g_array_remove_index (stream->payloads, last);
-    }
-    g_array_free (stream->payloads, TRUE);
-    stream->payloads = NULL;
-  }
-
-  if (stream->payloads_rev) {
-    while (stream->payloads_rev->len > 0) {
-      AsfPayload *payload;
-      guint last;
-
-      last = stream->payloads_rev->len - 1;
-      payload = &g_array_index (stream->payloads_rev, AsfPayload, last);
-      gst_buffer_replace (&payload->buf, NULL);
-      g_array_remove_index (stream->payloads_rev, last);
-    }
-    g_array_free (stream->payloads_rev, TRUE);
-    stream->payloads_rev = NULL;
-  }
-
-  if (stream->ext_props.valid) {
-    g_free (stream->ext_props.payload_extensions);
-    stream->ext_props.payload_extensions = NULL;
-  }
-}
-
-static void
-gst_asf_demux_reset (GstASFDemux * demux, gboolean chain_reset)
-{
-  GST_LOG_OBJECT (demux, "resetting");
-
-  gst_segment_init (&demux->segment, GST_FORMAT_UNDEFINED);
-  demux->segment_running = FALSE;
-  if (demux->adapter && !chain_reset) {
-    gst_adapter_clear (demux->adapter);
-    g_object_unref (demux->adapter);
-    demux->adapter = NULL;
-  }
-  if (demux->taglist) {
-    gst_tag_list_unref (demux->taglist);
-    demux->taglist = NULL;
-  }
-  if (demux->metadata) {
-    gst_caps_unref (demux->metadata);
-    demux->metadata = NULL;
-  }
-  demux->metadata = gst_caps_new_empty ();
-  if (demux->global_metadata) {
-    gst_structure_free (demux->global_metadata);
-    demux->global_metadata = NULL;
-  }
-  demux->global_metadata = gst_structure_new_empty ("metadata");
-  if (demux->mut_ex_streams) {
-    g_slist_free (demux->mut_ex_streams);
-    demux->mut_ex_streams = NULL;
-  }
-
-  demux->state = GST_ASF_DEMUX_STATE_HEADER;
-  g_free (demux->objpath);
-  demux->objpath = NULL;
-  g_strfreev (demux->languages);
-  demux->languages = NULL;
-  demux->num_languages = 0;
-  g_slist_foreach (demux->ext_stream_props, (GFunc) gst_mini_object_unref,
-      NULL);
-  g_slist_free (demux->ext_stream_props);
-  demux->ext_stream_props = NULL;
-
-  while (demux->old_num_streams > 0) {
-    gst_asf_demux_free_stream (demux,
-        &demux->old_stream[demux->old_num_streams - 1]);
-    --demux->old_num_streams;
-  }
-  memset (demux->old_stream, 0, sizeof (demux->old_stream));
-  demux->old_num_streams = 0;
-
-  /* when resetting for a new chained asf, we don't want to remove the pads
-   * before adding the new ones */
-  if (chain_reset) {
-    memcpy (demux->old_stream, demux->stream, sizeof (demux->stream));
-    demux->old_num_streams = demux->num_streams;
-    demux->num_streams = 0;
-  }
-
-  while (demux->num_streams > 0) {
-    gst_asf_demux_free_stream (demux, &demux->stream[demux->num_streams - 1]);
-    --demux->num_streams;
-  }
-  memset (demux->stream, 0, sizeof (demux->stream));
-  if (!chain_reset) {
-    /* do not remove those for not adding pads with same name */
-    demux->num_audio_streams = 0;
-    demux->num_video_streams = 0;
-    demux->have_group_id = FALSE;
-    demux->group_id = G_MAXUINT;
-  }
-  demux->num_streams = 0;
-  demux->activated_streams = FALSE;
-  demux->first_ts = GST_CLOCK_TIME_NONE;
-  demux->segment_ts = GST_CLOCK_TIME_NONE;
-  demux->in_gap = 0;
-  if (!chain_reset)
-    gst_segment_init (&demux->in_segment, GST_FORMAT_UNDEFINED);
-  demux->state = GST_ASF_DEMUX_STATE_HEADER;
-  demux->seekable = FALSE;
-  demux->broadcast = FALSE;
-  demux->sidx_interval = 0;
-  demux->sidx_num_entries = 0;
-  g_free (demux->sidx_entries);
-  demux->sidx_entries = NULL;
-
-  demux->speed_packets = 1;
-
-  demux->asf_3D_mode = GST_ASF_3D_NONE;
-
-  if (chain_reset) {
-    GST_LOG_OBJECT (demux, "Restarting");
-    gst_segment_init (&demux->segment, GST_FORMAT_TIME);
-    demux->need_newsegment = TRUE;
-    demux->segment_seqnum = 0;
-    demux->segment_running = FALSE;
-    demux->keyunit_sync = FALSE;
-    demux->accurate = FALSE;
-    demux->data_size = 0;
-    demux->data_offset = 0;
-    demux->index_offset = 0;
-  } else {
-    demux->base_offset = 0;
-  }
-
-  g_slist_free (demux->other_streams);
-  demux->other_streams = NULL;
-}
-
-static void
-gst_asf_demux_init (GstASFDemux * demux)
-{
-  demux->sinkpad =
-      gst_pad_new_from_static_template (&gst_asf_demux_sink_template, "sink");
-  gst_pad_set_chain_function (demux->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_asf_demux_chain));
-  gst_pad_set_event_function (demux->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_asf_demux_sink_event));
-  gst_pad_set_activate_function (demux->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_asf_demux_activate));
-  gst_pad_set_activatemode_function (demux->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_asf_demux_activate_mode));
-  gst_element_add_pad (GST_ELEMENT (demux), demux->sinkpad);
-
-  /* set initial state */
-  gst_asf_demux_reset (demux, FALSE);
-}
-
-static gboolean
-gst_asf_demux_activate (GstPad * sinkpad, GstObject * parent)
-{
-  GstQuery *query;
-  gboolean pull_mode;
-
-  query = gst_query_new_scheduling ();
-
-  if (!gst_pad_peer_query (sinkpad, query)) {
-    gst_query_unref (query);
-    goto activate_push;
-  }
-
-  pull_mode = gst_query_has_scheduling_mode_with_flags (query,
-      GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE);
-  gst_query_unref (query);
-
-  if (!pull_mode)
-    goto activate_push;
-
-  GST_DEBUG_OBJECT (sinkpad, "activating pull");
-  return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PULL, TRUE);
-
-activate_push:
-  {
-    GST_DEBUG_OBJECT (sinkpad, "activating push");
-    return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PUSH, TRUE);
-  }
-}
-
-static gboolean
-gst_asf_demux_activate_mode (GstPad * sinkpad, GstObject * parent,
-    GstPadMode mode, gboolean active)
-{
-  gboolean res;
-  GstASFDemux *demux;
-
-  demux = GST_ASF_DEMUX (parent);
-
-  switch (mode) {
-    case GST_PAD_MODE_PUSH:
-      demux->state = GST_ASF_DEMUX_STATE_HEADER;
-      demux->streaming = TRUE;
-      res = TRUE;
-      break;
-    case GST_PAD_MODE_PULL:
-      if (active) {
-        demux->state = GST_ASF_DEMUX_STATE_HEADER;
-        demux->streaming = FALSE;
-
-        res = gst_pad_start_task (sinkpad, (GstTaskFunction) gst_asf_demux_loop,
-            demux, NULL);
-      } else {
-        res = gst_pad_stop_task (sinkpad);
-      }
-      break;
-    default:
-      res = FALSE;
-      break;
-  }
-  return res;
-}
-
-static gboolean
-gst_asf_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
-  GstASFDemux *demux;
-  gboolean ret = TRUE;
-
-  demux = GST_ASF_DEMUX (parent);
-
-  GST_LOG_OBJECT (demux, "handling %s event", GST_EVENT_TYPE_NAME (event));
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_SEGMENT:{
-      const GstSegment *segment;
-
-      gst_event_parse_segment (event, &segment);
-
-      if (segment->format == GST_FORMAT_BYTES) {
-        if (demux->packet_size && segment->start > demux->data_offset)
-          demux->packet = (segment->start - demux->data_offset) /
-              demux->packet_size;
-        else
-          demux->packet = 0;
-      } else if (segment->format == GST_FORMAT_TIME) {
-        /* do not know packet position, not really a problem */
-        demux->packet = -1;
-      } else {
-        GST_WARNING_OBJECT (demux, "unsupported newsegment format, ignoring");
-        gst_event_unref (event);
-        break;
-      }
-
-      /* record upstream segment for interpolation */
-      if (segment->format != demux->in_segment.format)
-        gst_segment_init (&demux->in_segment, GST_FORMAT_UNDEFINED);
-      gst_segment_copy_into (segment, &demux->in_segment);
-
-      /* in either case, clear some state and generate newsegment later on */
-      GST_OBJECT_LOCK (demux);
-      demux->segment_ts = GST_CLOCK_TIME_NONE;
-      demux->in_gap = GST_CLOCK_TIME_NONE;
-      demux->need_newsegment = TRUE;
-      demux->segment_seqnum = gst_event_get_seqnum (event);
-      gst_asf_demux_reset_stream_state_after_discont (demux);
-      /* if we seek back after reaching EOS, go back to packet reading state */
-      if (demux->data_offset > 0 && segment->start >= demux->data_offset
-          && demux->state == GST_ASF_DEMUX_STATE_INDEX) {
-        demux->state = GST_ASF_DEMUX_STATE_DATA;
-      }
-      GST_OBJECT_UNLOCK (demux);
-
-      gst_event_unref (event);
-      break;
-    }
-    case GST_EVENT_EOS:{
-      GstFlowReturn flow;
-
-      if (demux->state == GST_ASF_DEMUX_STATE_HEADER) {
-        GST_ELEMENT_ERROR (demux, STREAM, DEMUX,
-            (_("This stream contains no data.")),
-            ("got eos and didn't receive a complete header object"));
-        break;
-      }
-      flow = gst_asf_demux_push_complete_payloads (demux, TRUE);
-      if (!demux->activated_streams) {
-        /* If we still haven't got activated streams, the file is most likely corrupt */
-        GST_ELEMENT_ERROR (demux, STREAM, WRONG_TYPE,
-            (_("This stream contains no data.")),
-            ("got eos and didn't receive a complete header object"));
-        break;
-      }
-      if (flow < GST_FLOW_EOS || flow == GST_FLOW_NOT_LINKED) {
-        GST_ELEMENT_FLOW_ERROR (demux, flow);
-        break;
-      }
-
-      GST_OBJECT_LOCK (demux);
-      gst_adapter_clear (demux->adapter);
-      GST_OBJECT_UNLOCK (demux);
-      gst_asf_demux_send_event_unlocked (demux, event);
-      break;
-    }
-
-    case GST_EVENT_FLUSH_STOP:
-      GST_OBJECT_LOCK (demux);
-      gst_asf_demux_reset_stream_state_after_discont (demux);
-      GST_OBJECT_UNLOCK (demux);
-      gst_asf_demux_send_event_unlocked (demux, event);
-      /* upon activation, latency is no longer introduced, e.g. after seek */
-      if (demux->activated_streams)
-        demux->latency = 0;
-      break;
-
-    default:
-      ret = gst_pad_event_default (pad, parent, event);
-      break;
-  }
-
-  return ret;
-}
-
-static gboolean
-gst_asf_demux_seek_index_lookup (GstASFDemux * demux, guint * packet,
-    GstClockTime seek_time, GstClockTime * p_idx_time, guint * speed,
-    gboolean next, gboolean * eos)
-{
-  GstClockTime idx_time;
-  guint idx;
-
-  if (eos)
-    *eos = FALSE;
-
-  if (G_UNLIKELY (demux->sidx_num_entries == 0 || demux->sidx_interval == 0))
-    return FALSE;
-
-  idx = (guint) ((seek_time + demux->preroll) / demux->sidx_interval);
-
-  if (next) {
-    /* if we want the next keyframe, we have to go forward till we find
-       a different packet number */
-    guint idx2;
-    if (idx >= demux->sidx_num_entries - 1) {
-      /* If we get here, we're asking for next keyframe after the last one. There isn't one. */
-      if (eos)
-        *eos = TRUE;
-      return FALSE;
-    }
-    for (idx2 = idx + 1; idx2 < demux->sidx_num_entries; ++idx2) {
-      if (demux->sidx_entries[idx].packet != demux->sidx_entries[idx2].packet) {
-        idx = idx2;
-        break;
-      }
-    }
-  }
-
-  if (G_UNLIKELY (idx >= demux->sidx_num_entries)) {
-    if (eos)
-      *eos = TRUE;
-    return FALSE;
-  }
-
-  *packet = demux->sidx_entries[idx].packet;
-  if (speed)
-    *speed = demux->sidx_entries[idx].count;
-
-  /* so we get closer to the actual time of the packet ... actually, let's not
-   * do this, since we throw away superfluous payloads before the seek position
-   * anyway; this way, our key unit seek 'snap resolution' is a bit better
-   * (ie. same as index resolution) */
-  /*
-     while (idx > 0 && demux->sidx_entries[idx-1] == demux->sidx_entries[idx])
-     --idx;
-   */
-
-  idx_time = demux->sidx_interval * idx;
-  if (G_LIKELY (idx_time >= demux->preroll))
-    idx_time -= demux->preroll;
-
-  GST_DEBUG_OBJECT (demux, "%" GST_TIME_FORMAT " => packet %u at %"
-      GST_TIME_FORMAT, GST_TIME_ARGS (seek_time), *packet,
-      GST_TIME_ARGS (idx_time));
-
-  if (G_LIKELY (p_idx_time))
-    *p_idx_time = idx_time;
-
-  return TRUE;
-}
-
-static void
-gst_asf_demux_reset_stream_state_after_discont (GstASFDemux * demux)
-{
-  guint n;
-
-  gst_adapter_clear (demux->adapter);
-
-  GST_DEBUG_OBJECT (demux, "reset stream state");
-
-  gst_flow_combiner_reset (demux->flowcombiner);
-  for (n = 0; n < demux->num_streams; n++) {
-    demux->stream[n].discont = TRUE;
-    demux->stream[n].first_buffer = TRUE;
-
-    while (demux->stream[n].payloads->len > 0) {
-      AsfPayload *payload;
-      guint last;
-
-      last = demux->stream[n].payloads->len - 1;
-      payload = &g_array_index (demux->stream[n].payloads, AsfPayload, last);
-      gst_buffer_replace (&payload->buf, NULL);
-      g_array_remove_index (demux->stream[n].payloads, last);
-    }
-  }
-}
-
-static void
-gst_asf_demux_mark_discont (GstASFDemux * demux)
-{
-  guint n;
-
-  GST_DEBUG_OBJECT (demux, "Mark stream discont");
-
-  for (n = 0; n < demux->num_streams; n++)
-    demux->stream[n].discont = TRUE;
-}
-
-/* do a seek in push based mode */
-static gboolean
-gst_asf_demux_handle_seek_push (GstASFDemux * demux, GstEvent * event)
-{
-  gdouble rate;
-  GstFormat format;
-  GstSeekFlags flags;
-  GstSeekType cur_type, stop_type;
-  gint64 cur, stop;
-  guint packet;
-  gboolean res;
-  GstEvent *byte_event;
-
-  gst_event_parse_seek (event, &rate, &format, &flags, &cur_type, &cur,
-      &stop_type, &stop);
-
-  stop_type = GST_SEEK_TYPE_NONE;
-  stop = -1;
-
-  GST_DEBUG_OBJECT (demux, "seeking to %" GST_TIME_FORMAT, GST_TIME_ARGS (cur));
-
-  /* determine packet, by index or by estimation */
-  if (!gst_asf_demux_seek_index_lookup (demux, &packet, cur, NULL, NULL, FALSE,
-          NULL)) {
-    packet =
-        (guint) gst_util_uint64_scale (demux->num_packets, cur,
-        demux->play_time);
-  }
-
-  if (packet > demux->num_packets) {
-    GST_DEBUG_OBJECT (demux, "could not determine packet to seek to, "
-        "seek aborted.");
-    return FALSE;
-  }
-
-  GST_DEBUG_OBJECT (demux, "seeking to packet %d", packet);
-
-  cur = demux->data_offset + ((guint64) packet * demux->packet_size);
-
-  GST_DEBUG_OBJECT (demux, "Pushing BYTE seek rate %g, "
-      "start %" G_GINT64_FORMAT ", stop %" G_GINT64_FORMAT, rate, cur, stop);
-  /* BYTE seek event */
-  byte_event = gst_event_new_seek (rate, GST_FORMAT_BYTES, flags, cur_type,
-      cur, stop_type, stop);
-  gst_event_set_seqnum (byte_event, gst_event_get_seqnum (event));
-  res = gst_pad_push_event (demux->sinkpad, byte_event);
-
-  return res;
-}
-
-static gboolean
-gst_asf_demux_handle_seek_event (GstASFDemux * demux, GstEvent * event)
-{
-  gboolean ret = TRUE;
-  GstClockTime idx_time;
-  GstSegment segment;
-  GstSeekFlags flags;
-  GstSeekType cur_type, stop_type;
-  GstFormat format;
-  gboolean only_need_update;
-  gboolean after, before, next;
-  gboolean flush;
-  gdouble rate;
-  gint64 cur, stop;
-  gint64 seek_time;
-  guint packet, speed_count = 1;
-  gboolean eos;
-  guint32 seqnum;
-  GstEvent *fevent;
-  gint i;
-
-  gst_event_parse_seek (event, &rate, &format, &flags, &cur_type, &cur,
-      &stop_type, &stop);
-
-  if (G_UNLIKELY (format != GST_FORMAT_TIME)) {
-    GST_LOG_OBJECT (demux, "seeking is only supported in TIME format");
-    return FALSE;
-  }
-
-  if (G_UNLIKELY (demux->seekable == FALSE || demux->packet_size == 0 ||
-          demux->num_packets == 0 || demux->play_time == 0)) {
-    GST_LOG_OBJECT (demux, "stream is not seekable");
-    return FALSE;
-  }
-
-  if (G_UNLIKELY (!demux->activated_streams)) {
-    GST_LOG_OBJECT (demux, "streams not yet activated, ignoring seek");
-    return FALSE;
-  }
-
-  if (G_UNLIKELY (rate <= 0.0)) {
-    GST_LOG_OBJECT (demux, "backward playback");
-    demux->seek_to_cur_pos = TRUE;
-    for (i = 0; i < demux->num_streams; i++) {
-      demux->stream[i].reverse_kf_ready = FALSE;
-    }
-  }
-
-  seqnum = gst_event_get_seqnum (event);
-  flush = ((flags & GST_SEEK_FLAG_FLUSH) == GST_SEEK_FLAG_FLUSH);
-  demux->accurate =
-      ((flags & GST_SEEK_FLAG_ACCURATE) == GST_SEEK_FLAG_ACCURATE);
-  demux->keyunit_sync =
-      ((flags & GST_SEEK_FLAG_KEY_UNIT) == GST_SEEK_FLAG_KEY_UNIT);
-  after = ((flags & GST_SEEK_FLAG_SNAP_AFTER) == GST_SEEK_FLAG_SNAP_AFTER);
-  before = ((flags & GST_SEEK_FLAG_SNAP_BEFORE) == GST_SEEK_FLAG_SNAP_BEFORE);
-  next = after && !before;
-
-  if (G_UNLIKELY (demux->streaming)) {
-    /* upstream might handle TIME seek, e.g. mms or rtsp, or not, e.g. http,
-     * so first try to let it handle the seek event. */
-    if (gst_pad_push_event (demux->sinkpad, gst_event_ref (event)))
-      return TRUE;
-
-    /* support it safely needs more segment handling, e.g. closing etc */
-    if (!flush) {
-      GST_LOG_OBJECT (demux, "streaming; non-flushing seek not supported");
-      return FALSE;
-    }
-    /* we can (re)construct the start later on, but not the end */
-    if (stop_type != GST_SEEK_TYPE_NONE &&
-        (stop_type != GST_SEEK_TYPE_SET || GST_CLOCK_TIME_IS_VALID (stop))) {
-      GST_LOG_OBJECT (demux, "streaming; end position must be NONE");
-      return FALSE;
-    }
-    return gst_asf_demux_handle_seek_push (demux, event);
-  }
-
-  /* unlock the streaming thread */
-  if (G_LIKELY (flush)) {
-    fevent = gst_event_new_flush_start ();
-
-    gst_event_set_seqnum (fevent, seqnum);
-    gst_pad_push_event (demux->sinkpad, gst_event_ref (fevent));
-    gst_asf_demux_send_event_unlocked (demux, fevent);
-  } else {
-    gst_pad_pause_task (demux->sinkpad);
-  }
-
-  /* grab the stream lock so that streaming cannot continue, for
-   * non flushing seeks when the element is in PAUSED this could block
-   * forever */
-  GST_PAD_STREAM_LOCK (demux->sinkpad);
-
-  if (G_LIKELY (flush)) {
-    /* we now can stop flushing, since we have the stream lock now */
-    fevent = gst_event_new_flush_stop (TRUE);
-    gst_event_set_seqnum (fevent, seqnum);
-    gst_pad_push_event (demux->sinkpad, gst_event_ref (fevent));
-    gst_asf_demux_send_event_unlocked (demux, fevent);
-  }
-
-  /* operating on copy of segment until we know the seek worked */
-  segment = demux->segment;
-
-  if (!gst_segment_do_seek (&segment, rate, format, flags, cur_type,
-          cur, stop_type, stop, &only_need_update)) {
-    ret = FALSE;
-    goto skip;
-  }
-
-  GST_DEBUG_OBJECT (demux, "seeking to time %" GST_TIME_FORMAT ", segment: "
-      "%" GST_SEGMENT_FORMAT, GST_TIME_ARGS (segment.start), &segment);
-
-  if (cur_type != GST_SEEK_TYPE_SET)
-    seek_time = segment.start;
-  else
-    seek_time = cur;
-
-  /* FIXME: should check the KEY_UNIT flag; need to adjust position to
-   * real start of data and segment_start to indexed time for key unit seek*/
-  if (G_UNLIKELY (!gst_asf_demux_seek_index_lookup (demux, &packet, seek_time,
-              &idx_time, &speed_count, next, &eos))) {
-    gint64 offset;
-
-    if (eos) {
-      demux->packet = demux->num_packets;
-      goto skip;
-    }
-
-    /* First try to query our source to see if it can convert for us. This is
-       the case when our source is an mms stream, notice that in this case
-       gstmms will do a time based seek to get the byte offset, this is not a
-       problem as the seek to this offset needs to happen anyway. */
-    if (gst_pad_peer_query_convert (demux->sinkpad, GST_FORMAT_TIME, seek_time,
-            GST_FORMAT_BYTES, &offset)) {
-      packet = (offset - demux->data_offset) / demux->packet_size;
-      GST_LOG_OBJECT (demux, "convert %" GST_TIME_FORMAT
-          " to bytes query result: %" G_GINT64_FORMAT ", data_ofset: %"
-          G_GINT64_FORMAT ", packet_size: %u," " resulting packet: %u\n",
-          GST_TIME_ARGS (seek_time), offset, demux->data_offset,
-          demux->packet_size, packet);
-    } else {
-      /* FIXME: For streams containing video, seek to an earlier position in
-       * the hope of hitting a keyframe and let the sinks throw away the stuff
-       * before the segment start. For audio-only this is unnecessary as every
-       * frame is 'key'. */
-      if (flush && (demux->accurate || (demux->keyunit_sync && !next))
-          && demux->num_video_streams > 0) {
-        seek_time -= 5 * GST_SECOND;
-        if (seek_time < 0)
-          seek_time = 0;
-      }
-
-      packet = (guint) gst_util_uint64_scale (demux->num_packets,
-          seek_time, demux->play_time);
-
-      if (packet > demux->num_packets)
-        packet = demux->num_packets;
-    }
-  } else {
-    if (G_LIKELY (demux->keyunit_sync && !demux->accurate)) {
-      GST_DEBUG_OBJECT (demux, "key unit seek, adjust seek_time = %"
-          GST_TIME_FORMAT " to index_time = %" GST_TIME_FORMAT,
-          GST_TIME_ARGS (seek_time), GST_TIME_ARGS (idx_time));
-      segment.start = idx_time;
-      segment.position = idx_time;
-      segment.time = idx_time;
-    }
-  }
-
-  GST_DEBUG_OBJECT (demux, "seeking to packet %u (%d)", packet, speed_count);
-
-  GST_OBJECT_LOCK (demux);
-  demux->segment = segment;
-  if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
-    demux->packet = (gint64) gst_util_uint64_scale (demux->num_packets,
-        stop, demux->play_time);
-  } else {
-    demux->packet = packet;
-  }
-
-  demux->need_newsegment = TRUE;
-  demux->segment_seqnum = seqnum;
-  demux->speed_packets =
-      GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment) ? 1 : speed_count;
-  gst_asf_demux_reset_stream_state_after_discont (demux);
-  GST_OBJECT_UNLOCK (demux);
-
-skip:
-  /* restart our task since it might have been stopped when we did the flush */
-  gst_pad_start_task (demux->sinkpad, (GstTaskFunction) gst_asf_demux_loop,
-      demux, NULL);
-
-  /* streaming can continue now */
-  GST_PAD_STREAM_UNLOCK (demux->sinkpad);
-
-  return ret;
-}
-
-static gboolean
-gst_asf_demux_handle_src_event (GstPad * pad, GstObject * parent,
-    GstEvent * event)
-{
-  GstASFDemux *demux;
-  gboolean ret;
-  guint32 seqnum;
-
-  demux = GST_ASF_DEMUX (parent);
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_SEEK:
-      GST_LOG_OBJECT (pad, "seek event");
-      seqnum = gst_event_get_seqnum (event);
-      if (demux->segment_seqnum == seqnum) {
-        GST_LOG_OBJECT (pad,
-            "Drop duplicated SEEK event seqnum %" G_GUINT32_FORMAT, seqnum);
-        gst_event_unref (event);
-        ret = TRUE;
-        break;
-      }
-      ret = gst_asf_demux_handle_seek_event (demux, event);
-      gst_event_unref (event);
-      break;
-    case GST_EVENT_QOS:
-    case GST_EVENT_NAVIGATION:
-      /* just drop these two silently */
-      gst_event_unref (event);
-      ret = FALSE;
-      break;
-    default:
-      GST_LOG_OBJECT (pad, "%s event", GST_EVENT_TYPE_NAME (event));
-      ret = gst_pad_event_default (pad, parent, event);
-      break;
-  }
-
-  return ret;
-}
-
-static inline guint32
-gst_asf_demux_identify_guid (const ASFGuidHash * guids, ASFGuid * guid)
-{
-  guint32 ret;
-
-  ret = gst_asf_identify_guid (guids, guid);
-
-  GST_LOG ("%s  0x%08x-0x%08x-0x%08x-0x%08x",
-      gst_asf_get_guid_nick (guids, ret),
-      guid->v1, guid->v2, guid->v3, guid->v4);
-
-  return ret;
-}
-
-typedef struct
-{
-  AsfObjectID id;
-  guint64 size;
-} AsfObject;
-
-
-/* Peek for an object.
- *
- * Returns FALSE is the object is corrupted (such as the reported
- * object size being greater than 2**32bits.
- */
-static gboolean
-asf_demux_peek_object (GstASFDemux * demux, const guint8 * data,
-    guint data_len, AsfObject * object, gboolean expect)
-{
-  ASFGuid guid;
-
-  /* Callers should have made sure that data_len is big enough */
-  g_assert (data_len >= ASF_OBJECT_HEADER_SIZE);
-
-  if (data_len < ASF_OBJECT_HEADER_SIZE)
-    return FALSE;
-
-  guid.v1 = GST_READ_UINT32_LE (data + 0);
-  guid.v2 = GST_READ_UINT32_LE (data + 4);
-  guid.v3 = GST_READ_UINT32_LE (data + 8);
-  guid.v4 = GST_READ_UINT32_LE (data + 12);
-
-  /* FIXME: make asf_demux_identify_object_guid() */
-  object->id = gst_asf_demux_identify_guid (asf_object_guids, &guid);
-  if (object->id == ASF_OBJ_UNDEFINED && expect) {
-    GST_WARNING_OBJECT (demux, "Unknown object %08x-%08x-%08x-%08x",
-        guid.v1, guid.v2, guid.v3, guid.v4);
-  }
-
-  object->size = GST_READ_UINT64_LE (data + 16);
-  if (object->id != ASF_OBJ_DATA && object->size >= G_MAXUINT) {
-    GST_WARNING_OBJECT (demux,
-        "ASF Object size corrupted (greater than 32bit)");
-    return FALSE;
-  }
-
-
-  return TRUE;
-}
-
-static void
-gst_asf_demux_release_old_pads (GstASFDemux * demux)
-{
-  GST_DEBUG_OBJECT (demux, "Releasing old pads");
-
-  while (demux->old_num_streams > 0) {
-    gst_pad_push_event (demux->old_stream[demux->old_num_streams - 1].pad,
-        gst_event_new_eos ());
-    gst_asf_demux_free_stream (demux,
-        &demux->old_stream[demux->old_num_streams - 1]);
-    --demux->old_num_streams;
-  }
-  memset (demux->old_stream, 0, sizeof (demux->old_stream));
-  demux->old_num_streams = 0;
-}
-
-static GstFlowReturn
-gst_asf_demux_chain_headers (GstASFDemux * demux)
-{
-  AsfObject obj;
-  guint8 *header_data, *data = NULL;
-  const guint8 *cdata = NULL;
-  guint64 header_size;
-  GstFlowReturn flow = GST_FLOW_OK;
-
-  cdata = (guint8 *) gst_adapter_map (demux->adapter, ASF_OBJECT_HEADER_SIZE);
-  if (cdata == NULL)
-    goto need_more_data;
-
-  if (!asf_demux_peek_object (demux, cdata, ASF_OBJECT_HEADER_SIZE, &obj, TRUE))
-    goto parse_failed;
-  if (obj.id != ASF_OBJ_HEADER)
-    goto wrong_type;
-
-  GST_LOG_OBJECT (demux, "header size = %u", (guint) obj.size);
-
-  /* + 50 for non-packet data at beginning of ASF_OBJ_DATA */
-  if (gst_adapter_available (demux->adapter) < obj.size + 50)
-    goto need_more_data;
-
-  data = gst_adapter_take (demux->adapter, obj.size + 50);
-
-  header_data = data;
-  header_size = obj.size;
-  flow = gst_asf_demux_process_object (demux, &header_data, &header_size);
-  if (flow != GST_FLOW_OK)
-    goto parse_failed;
-
-  /* calculate where the packet data starts */
-  demux->data_offset = obj.size + 50;
-
-  /* now parse the beginning of the ASF_OBJ_DATA object */
-  if (!gst_asf_demux_parse_data_object_start (demux, data + obj.size))
-    goto wrong_type;
-
-  if (demux->num_streams == 0)
-    goto no_streams;
-
-  g_free (data);
-  return GST_FLOW_OK;
-
-/* NON-FATAL */
-need_more_data:
-  {
-    GST_LOG_OBJECT (demux, "not enough data in adapter yet");
-    return GST_FLOW_OK;
-  }
-
-/* ERRORS */
-wrong_type:
-  {
-    GST_ELEMENT_ERROR (demux, STREAM, WRONG_TYPE, (NULL),
-        ("This doesn't seem to be an ASF file"));
-    g_free (data);
-    return GST_FLOW_ERROR;
-  }
-no_streams:
-parse_failed:
-  {
-    GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
-        ("header parsing failed, or no streams found, flow = %s",
-            gst_flow_get_name (flow)));
-    g_free (data);
-    return GST_FLOW_ERROR;
-  }
-}
-
-static gboolean
-gst_asf_demux_pull_data (GstASFDemux * demux, guint64 offset, guint size,
-    GstBuffer ** p_buf, GstFlowReturn * p_flow)
-{
-  gsize buffer_size;
-  GstFlowReturn flow;
-
-  GST_LOG_OBJECT (demux, "pulling buffer at %" G_GUINT64_FORMAT "+%u",
-      offset, size);
-
-  flow = gst_pad_pull_range (demux->sinkpad, offset, size, p_buf);
-
-  if (G_LIKELY (p_flow))
-    *p_flow = flow;
-
-  if (G_UNLIKELY (flow != GST_FLOW_OK)) {
-    GST_DEBUG_OBJECT (demux, "flow %s pulling buffer at %" G_GUINT64_FORMAT
-        "+%u", gst_flow_get_name (flow), offset, size);
-    *p_buf = NULL;
-    return FALSE;
-  }
-
-  g_assert (*p_buf != NULL);
-
-  buffer_size = gst_buffer_get_size (*p_buf);
-  if (G_UNLIKELY (buffer_size < size)) {
-    GST_DEBUG_OBJECT (demux, "short read pulling buffer at %" G_GUINT64_FORMAT
-        "+%u (got only %" G_GSIZE_FORMAT " bytes)", offset, size, buffer_size);
-    gst_buffer_unref (*p_buf);
-    if (G_LIKELY (p_flow))
-      *p_flow = GST_FLOW_EOS;
-    *p_buf = NULL;
-    return FALSE;
-  }
-
-  return TRUE;
-}
-
-static GstFlowReturn
-gst_asf_demux_pull_indices (GstASFDemux * demux)
-{
-  GstBuffer *buf = NULL;
-  guint64 offset;
-  guint num_read = 0;
-  GstFlowReturn ret = GST_FLOW_OK;
-
-  offset = demux->index_offset;
-
-  if (G_UNLIKELY (offset == 0)) {
-    GST_DEBUG_OBJECT (demux, "can't read indices, don't know index offset");
-    /* non-fatal */
-    return GST_FLOW_OK;
-  }
-
-  while (gst_asf_demux_pull_data (demux, offset, 16 + 8, &buf, NULL)) {
-    AsfObject obj;
-    GstMapInfo map;
-    guint8 *bufdata;
-    guint64 obj_size;
-
-    gst_buffer_map (buf, &map, GST_MAP_READ);
-    g_assert (map.size >= 16 + 8);
-    if (!asf_demux_peek_object (demux, map.data, 16 + 8, &obj, TRUE)) {
-      GST_DEBUG_OBJECT (demux, "No valid object, corrupted index, ignoring");
-      GST_MEMDUMP_OBJECT (demux, "Corrupted index ?", map.data, MIN (map.size,
-              64));
-      gst_buffer_unmap (buf, &map);
-      gst_buffer_replace (&buf, NULL);
-      /* Non-fatal, return */
-      break;
-    }
-    gst_buffer_unmap (buf, &map);
-    gst_buffer_replace (&buf, NULL);
-
-    /* check for sanity */
-    if (G_UNLIKELY (obj.size > (5 * 1024 * 1024))) {
-      GST_DEBUG_OBJECT (demux, "implausible index object size, bailing out");
-      break;
-    }
-
-    if (G_UNLIKELY (!gst_asf_demux_pull_data (demux, offset, obj.size, &buf,
-                NULL)))
-      break;
-
-    GST_LOG_OBJECT (demux, "index object at offset 0x%" G_GINT64_MODIFIER "X"
-        ", size %u", offset, (guint) obj.size);
-
-    offset += obj.size;         /* increase before _process_object changes it */
-
-    gst_buffer_map (buf, &map, GST_MAP_READ);
-    g_assert (map.size >= obj.size);
-    bufdata = (guint8 *) map.data;
-    obj_size = obj.size;
-    ret = gst_asf_demux_process_object (demux, &bufdata, &obj_size);
-    gst_buffer_unmap (buf, &map);
-    gst_buffer_replace (&buf, NULL);
-
-    if (ret == ASF_FLOW_NEED_MORE_DATA) {
-      /* Since indices are at the end of the file, if we need more data,
-       * we consider it as a non-fatal corrupted index */
-      ret = GST_FLOW_OK;
-      break;
-    }
-
-    if (G_UNLIKELY (ret != GST_FLOW_OK))
-      break;
-
-    ++num_read;
-  }
-
-  GST_DEBUG_OBJECT (demux, "read %u index objects , returning %s", num_read,
-      gst_flow_get_name (ret));
-  return ret;
-}
-
-static gboolean
-gst_asf_demux_parse_data_object_start (GstASFDemux * demux, guint8 * data)
-{
-  AsfObject obj;
-
-  if (!asf_demux_peek_object (demux, data, 50, &obj, TRUE)) {
-    GST_WARNING_OBJECT (demux, "Corrupted data");
-    return FALSE;
-  }
-  if (obj.id != ASF_OBJ_DATA) {
-    GST_WARNING_OBJECT (demux, "headers not followed by a DATA object");
-    return FALSE;
-  }
-
-  demux->state = GST_ASF_DEMUX_STATE_DATA;
-
-  if (!demux->broadcast && obj.size > 50) {
-    demux->data_size = obj.size - 50;
-    /* CHECKME: for at least one file this is off by +158 bytes?! */
-    demux->index_offset = demux->data_offset + demux->data_size;
-  } else {
-    demux->data_size = 0;
-    demux->index_offset = 0;
-  }
-
-  demux->packet = 0;
-
-  if (!demux->broadcast) {
-    /* skip object header (24 bytes) and file GUID (16 bytes) */
-    demux->num_packets = GST_READ_UINT64_LE (data + (16 + 8) + 16);
-  } else {
-    demux->num_packets = 0;
-  }
-
-  if (demux->num_packets == 0)
-    demux->seekable = FALSE;
-
-  /* fallback in the unlikely case that headers are inconsistent, can't hurt */
-  if (demux->data_size == 0 && demux->num_packets > 0) {
-    demux->data_size = demux->num_packets * demux->packet_size;
-    demux->index_offset = demux->data_offset + demux->data_size;
-  }
-
-  /* process pending stream objects and create pads for those */
-  gst_asf_demux_process_queued_extended_stream_objects (demux);
-
-  GST_INFO_OBJECT (demux, "Stream has %" G_GUINT64_FORMAT " packets, "
-      "data_offset=%" G_GINT64_FORMAT ", data_size=%" G_GINT64_FORMAT
-      ", index_offset=%" G_GUINT64_FORMAT, demux->num_packets,
-      demux->data_offset, demux->data_size, demux->index_offset);
-
-  return TRUE;
-}
-
-static gboolean
-gst_asf_demux_pull_headers (GstASFDemux * demux, GstFlowReturn * pflow)
-{
-  GstFlowReturn flow = GST_FLOW_OK;
-  AsfObject obj;
-  GstBuffer *buf = NULL;
-  guint64 size;
-  GstMapInfo map;
-  guint8 *bufdata;
-
-  GST_LOG_OBJECT (demux, "reading headers");
-
-  /* pull HEADER object header, so we know its size */
-  if (!gst_asf_demux_pull_data (demux, demux->base_offset, 16 + 8, &buf, &flow))
-    goto read_failed;
-
-  gst_buffer_map (buf, &map, GST_MAP_READ);
-  g_assert (map.size >= 16 + 8);
-  if (!asf_demux_peek_object (demux, map.data, 16 + 8, &obj, TRUE)) {
-    gst_buffer_unmap (buf, &map);
-    gst_buffer_replace (&buf, NULL);
-    flow = GST_FLOW_ERROR;
-    goto read_failed;
-  }
-  gst_buffer_unmap (buf, &map);
-  gst_buffer_replace (&buf, NULL);
-
-  if (obj.id != ASF_OBJ_HEADER)
-    goto wrong_type;
-
-  GST_LOG_OBJECT (demux, "header size = %" G_GUINT64_FORMAT, obj.size);
-
-  /* pull HEADER object */
-  if (!gst_asf_demux_pull_data (demux, demux->base_offset, obj.size, &buf,
-          &flow))
-    goto read_failed;
-
-  size = obj.size;              /* don't want obj.size changed */
-  gst_buffer_map (buf, &map, GST_MAP_READ);
-  g_assert (map.size >= size);
-  bufdata = (guint8 *) map.data;
-  flow = gst_asf_demux_process_object (demux, &bufdata, &size);
-  gst_buffer_unmap (buf, &map);
-  gst_buffer_replace (&buf, NULL);
-
-  if (flow != GST_FLOW_OK) {
-    GST_WARNING_OBJECT (demux, "process_object: %s", gst_flow_get_name (flow));
-    goto parse_failed;
-  }
-
-  /* calculate where the packet data starts */
-  demux->data_offset = demux->base_offset + obj.size + 50;
-
-  /* now pull beginning of DATA object before packet data */
-  if (!gst_asf_demux_pull_data (demux, demux->base_offset + obj.size, 50, &buf,
-          &flow))
-    goto read_failed;
-
-  gst_buffer_map (buf, &map, GST_MAP_READ);
-  g_assert (map.size >= size);
-  bufdata = (guint8 *) map.data;
-  if (!gst_asf_demux_parse_data_object_start (demux, bufdata))
-    goto wrong_type;
-
-  if (demux->num_streams == 0)
-    goto no_streams;
-
-  gst_buffer_unmap (buf, &map);
-  gst_buffer_replace (&buf, NULL);
-
-  return TRUE;
-
-/* ERRORS */
-wrong_type:
-  {
-    if (buf != NULL) {
-      gst_buffer_unmap (buf, &map);
-      gst_buffer_replace (&buf, NULL);
-    }
-    GST_ELEMENT_ERROR (demux, STREAM, WRONG_TYPE, (NULL),
-        ("This doesn't seem to be an ASF file"));
-    *pflow = GST_FLOW_ERROR;
-    return FALSE;
-  }
-
-no_streams:
-  flow = GST_FLOW_ERROR;
-  GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
-      ("header parsing failed, or no streams found, flow = %s",
-          gst_flow_get_name (flow)));
-read_failed:
-parse_failed:
-  {
-    if (buf)
-      gst_buffer_unmap (buf, &map);
-    gst_buffer_replace (&buf, NULL);
-    if (flow == ASF_FLOW_NEED_MORE_DATA)
-      flow = GST_FLOW_ERROR;
-    *pflow = flow;
-    return FALSE;
-  }
-}
-
-static gboolean
-all_streams_prerolled (GstASFDemux * demux)
-{
-  GstClockTime preroll_time;
-  guint i, num_no_data = 0;
-  AsfStreamType prerolled_types = 0, all_types = 0;
-
-  /* Allow at least 500ms of preroll_time  */
-  preroll_time = MAX (demux->preroll, 500 * GST_MSECOND);
-
-  /* returns TRUE as long as there isn't a stream which (a) has data queued
-   * and (b) the timestamp of last piece of data queued is < demux->preroll
-   * AND there is at least one other stream with data queued */
-  for (i = 0; i < demux->num_streams; ++i) {
-    AsfPayload *last_payload = NULL;
-    AsfStream *stream;
-    gint last_idx;
-
-    stream = &demux->stream[i];
-
-    all_types |= stream->type;
-
-    if (G_UNLIKELY (stream->payloads->len == 0)) {
-      ++num_no_data;
-      GST_LOG_OBJECT (stream->pad, "no data queued");
-      continue;
-    }
-
-    prerolled_types |= stream->type;
-
-    /* find last payload with timestamp */
-    for (last_idx = stream->payloads->len - 1;
-        last_idx >= 0 && (last_payload == NULL
-            || !GST_CLOCK_TIME_IS_VALID (last_payload->ts)); --last_idx) {
-      last_payload = &g_array_index (stream->payloads, AsfPayload, last_idx);
-    }
-
-    GST_LOG_OBJECT (stream->pad, "checking if %" GST_TIME_FORMAT " > %"
-        GST_TIME_FORMAT, GST_TIME_ARGS (last_payload->ts),
-        GST_TIME_ARGS (preroll_time));
-    if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (last_payload->ts)
-            || last_payload->ts <= preroll_time)) {
-      GST_LOG_OBJECT (stream->pad, "not beyond preroll point yet");
-      return FALSE;
-    }
-  }
-
-  GST_LOG_OBJECT (demux, "all_types:%d prerolled_types:%d",
-      all_types, prerolled_types);
-
-  /* If streams of each present type have prerolled, we are good to go */
-  if (all_types != 0 && prerolled_types == all_types)
-    return TRUE;
-
-  if (G_UNLIKELY (num_no_data > 0))
-    return FALSE;
-
-  return TRUE;
-}
-
-#if 0
-static gboolean
-gst_asf_demux_have_mutually_exclusive_active_stream (GstASFDemux * demux,
-    AsfStream * stream)
-{
-  GSList *l;
-
-  for (l = demux->mut_ex_streams; l != NULL; l = l->next) {
-    guint8 *mes;
-
-    /* check for each mutual exclusion group whether it affects this stream */
-    for (mes = (guint8 *) l->data; mes != NULL && *mes != 0xff; ++mes) {
-      if (*mes == stream->id) {
-        /* we are in this group; let's check if we've already activated streams
-         * that are in the same group (and hence mutually exclusive to this
-         * one) */
-        for (mes = (guint8 *) l->data; mes != NULL && *mes != 0xff; ++mes) {
-          guint i;
-
-          for (i = 0; i < demux->num_streams; ++i) {
-            if (demux->stream[i].id == *mes && demux->stream[i].active) {
-              GST_LOG_OBJECT (demux, "stream with ID %d is mutually exclusive "
-                  "to already active stream with ID %d", stream->id,
-                  demux->stream[i].id);
-              return TRUE;
-            }
-          }
-        }
-        /* we can only be in this group once, let's break out and move on to
-         * the next mutual exclusion group */
-        break;
-      }
-    }
-  }
-
-  return FALSE;
-}
-#endif
-
-static void
-gst_asf_demux_check_segment_ts (GstASFDemux * demux, GstClockTime payload_ts)
-{
-  /* remember the first queued timestamp for the segment */
-  if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (demux->segment_ts) &&
-          GST_CLOCK_TIME_IS_VALID (demux->first_ts))) {
-    GST_DEBUG_OBJECT (demux, "segment ts: %" GST_TIME_FORMAT,
-        GST_TIME_ARGS (demux->first_ts));
-    demux->segment_ts = payload_ts;
-    /* always note, but only determines segment when streaming */
-    if (demux->streaming)
-      if (!gst_segment_do_seek (&demux->segment, demux->in_segment.rate,
-              GST_FORMAT_TIME, (GstSeekFlags) demux->segment.flags,
-              GST_SEEK_TYPE_SET, demux->segment_ts, GST_SEEK_TYPE_NONE, 0,
-              NULL)) {
-        GST_WARNING_OBJECT (demux, "Initial segment seek failed");
-      }
-  }
-}
-
-static gboolean
-gst_asf_demux_get_first_ts (GstASFDemux * demux)
-{
-  if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (demux->first_ts))) {
-    GstClockTime first_ts = GST_CLOCK_TIME_NONE;
-    int i;
-
-    /* go trhough each stream, find smallest timestamp */
-    for (i = 0; i < demux->num_streams; ++i) {
-      AsfStream *stream;
-      int j;
-      GstClockTime stream_min_ts = GST_CLOCK_TIME_NONE;
-      GstClockTime stream_min_ts2 = GST_CLOCK_TIME_NONE;        /* second smallest timestamp */
-      stream = &demux->stream[i];
-
-      for (j = 0; j < stream->payloads->len; ++j) {
-        AsfPayload *payload = &g_array_index (stream->payloads, AsfPayload, j);
-        if (GST_CLOCK_TIME_IS_VALID (payload->ts) &&
-            (!GST_CLOCK_TIME_IS_VALID (stream_min_ts)
-                || stream_min_ts > payload->ts)) {
-          stream_min_ts = payload->ts;
-        }
-        if (GST_CLOCK_TIME_IS_VALID (payload->ts) &&
-            payload->ts > stream_min_ts &&
-            (!GST_CLOCK_TIME_IS_VALID (stream_min_ts2)
-                || stream_min_ts2 > payload->ts)) {
-          stream_min_ts2 = payload->ts;
-        }
-      }
-
-      /* there are some DVR ms files where first packet has TS of 0 (instead of -1) while subsequent packets have
-         regular (singificantly larger) timestamps. If we don't deal with it, we may end up with huge gap in timestamps
-         which makes playback stuck. The 0 timestamp may also be valid though, if the second packet timestamp continues 
-         from it. I haven't found a better way to distinguish between these two, except to set an arbitrary boundary
-         and disregard the first 0 timestamp if the second timestamp is bigger than the boundary) */
-
-      GST_DEBUG_OBJECT (demux,
-          "stream #%u stream_min_ts %" GST_TIME_FORMAT " stream_min_ts2 %"
-          GST_TIME_FORMAT, stream->id, GST_TIME_ARGS (stream_min_ts),
-          GST_TIME_ARGS (stream_min_ts2));
-
-      if (stream_min_ts == 0 && stream_min_ts2 > GST_SECOND)    /* first timestamp is 0 and second is significantly larger, disregard the 0 */
-        stream_min_ts = stream_min_ts2;
-
-      if (GST_CLOCK_TIME_IS_VALID (stream_min_ts) &&
-          (!GST_CLOCK_TIME_IS_VALID (first_ts) || first_ts > stream_min_ts))
-        first_ts = stream_min_ts;
-    }
-
-    if (!GST_CLOCK_TIME_IS_VALID (first_ts))    /* can happen */
-      first_ts = 0;
-
-    demux->first_ts = first_ts;
-
-    /* update packets queued before we knew first timestamp */
-    for (i = 0; i < demux->num_streams; ++i) {
-      AsfStream *stream;
-      int j;
-      stream = &demux->stream[i];
-
-      for (j = 0; j < stream->payloads->len; ++j) {
-        AsfPayload *payload = &g_array_index (stream->payloads, AsfPayload, j);
-        if (GST_CLOCK_TIME_IS_VALID (payload->ts)) {
-          if (payload->ts > first_ts)
-            payload->ts -= first_ts;
-          else
-            payload->ts = 0;
-        }
-      }
-    }
-  }
-
-  gst_asf_demux_check_segment_ts (demux, 0);
-
-  return TRUE;
-}
-
-static gboolean
-gst_asf_demux_update_caps_from_payload (GstASFDemux * demux, AsfStream * stream)
-{
-  /* try to determine whether the stream is AC-3 or MPEG; In dvr-ms the codecTag is unreliable
-     and often set wrong, inspecting the data is the only way that seem to be working */
-  GstTypeFindProbability prob = GST_TYPE_FIND_NONE;
-  GstCaps *caps = NULL;
-  int i;
-  GstAdapter *adapter = gst_adapter_new ();
-
-  for (i = 0; i < stream->payloads->len && prob < GST_TYPE_FIND_LIKELY; ++i) {
-    const guint8 *data;
-    AsfPayload *payload;
-    int len;
-
-    payload = &g_array_index (stream->payloads, AsfPayload, i);
-    gst_adapter_push (adapter, gst_buffer_ref (payload->buf));
-    len = gst_adapter_available (adapter);
-    data = gst_adapter_map (adapter, len);
-
-  again:
-
-#define MIN_LENGTH 128
-
-    /* look for the sync points */
-    while (TRUE) {
-      if (len < MIN_LENGTH ||   /* give typefind something to work on */
-          (data[0] == 0x0b && data[1] == 0x77) ||       /* AC-3 sync point */
-          (data[0] == 0xFF && ((data[1] & 0xF0) >> 4) == 0xF))  /* MPEG sync point */
-        break;
-      ++data;
-      --len;
-    }
-
-    gst_caps_take (&caps, gst_type_find_helper_for_data (GST_OBJECT (demux),
-            data, len, &prob));
-
-    if (prob < GST_TYPE_FIND_LIKELY) {
-      ++data;
-      --len;
-      if (len > MIN_LENGTH)
-        /* this wasn't it, look for another sync point */
-        goto again;
-    }
-
-    gst_adapter_unmap (adapter);
-  }
-
-  gst_object_unref (adapter);
-
-  if (caps) {
-    gst_caps_take (&stream->caps, caps);
-    return TRUE;
-  } else {
-    return FALSE;
-  }
-}
-
-static gboolean
-gst_asf_demux_check_activate_streams (GstASFDemux * demux, gboolean force)
-{
-  guint i, actual_streams = 0;
-
-  if (demux->activated_streams)
-    return TRUE;
-
-  if (!all_streams_prerolled (demux) && !force) {
-    GST_DEBUG_OBJECT (demux, "not all streams with data beyond preroll yet");
-    return FALSE;
-  }
-
-  if (G_UNLIKELY (!gst_asf_demux_get_first_ts (demux)))
-    return FALSE;
-
-  for (i = 0; i < demux->num_streams; ++i) {
-    AsfStream *stream = &demux->stream[i];
-
-    if (stream->payloads->len > 0) {
-
-      if (stream->inspect_payload &&    /* dvr-ms required payload inspection */
-          !stream->active &&    /* do not inspect active streams (caps were already set) */
-          !gst_asf_demux_update_caps_from_payload (demux, stream) &&    /* failed to determine caps */
-          stream->payloads->len < 20) { /* if we couldn't determine the caps from 20 packets then just give up and use whatever was in codecTag */
-        /* try to gather some more data  */
-        return FALSE;
-      }
-      /* we don't check mutual exclusion stuff here; either we have data for
-       * a stream, then we active it, or we don't, then we'll ignore it */
-      GST_LOG_OBJECT (stream->pad, "is prerolled - activate!");
-      gst_asf_demux_activate_stream (demux, stream);
-      actual_streams += 1;
-    } else {
-      GST_LOG_OBJECT (stream->pad, "no data, ignoring stream");
-    }
-  }
-
-  if (actual_streams == 0) {
-    /* We don't have any streams activated ! */
-    GST_ERROR_OBJECT (demux, "No streams activated!");
-    return FALSE;
-  }
-
-  gst_asf_demux_release_old_pads (demux);
-
-  demux->activated_streams = TRUE;
-  GST_LOG_OBJECT (demux, "signalling no more pads");
-  gst_element_no_more_pads (GST_ELEMENT (demux));
-  return TRUE;
-}
-
-/* returns the stream that has a complete payload with the lowest timestamp
- * queued, or NULL (we push things by timestamp because during the internal
- * prerolling we might accumulate more data then the external queues can take,
- * so we'd lock up if we pushed all accumulated data for stream N in one go) */
-static AsfStream *
-gst_asf_demux_find_stream_with_complete_payload (GstASFDemux * demux)
-{
-  AsfPayload *best_payload = NULL;
-  AsfStream *best_stream = NULL;
-  guint i;
-
-  for (i = 0; i < demux->num_streams; ++i) {
-    AsfStream *stream;
-    int j;
-
-    stream = &demux->stream[i];
-
-    /* Don't push any data until we have at least one payload that falls within
-     * the current segment. This way we can remove out-of-segment payloads that
-     * don't need to be decoded after a seek, sending only data from the
-     * keyframe directly before our segment start */
-    if (stream->payloads->len > 0) {
-      AsfPayload *payload = NULL;
-      gint last_idx;
-
-      if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
-        /* Reverse playback */
-
-        if (stream->is_video) {
-          /* We have to push payloads from KF to the first frame we accumulated (reverse order) */
-          if (stream->reverse_kf_ready) {
-            payload =
-                &g_array_index (stream->payloads, AsfPayload, stream->kf_pos);
-            if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (payload->ts))) {
-              /* TODO : remove payload from the list? */
-              continue;
-            }
-          } else {
-            continue;
-          }
-        } else {
-          /* find first complete payload with timestamp */
-          for (j = stream->payloads->len - 1;
-              j >= 0 && (payload == NULL
-                  || !GST_CLOCK_TIME_IS_VALID (payload->ts)); --j) {
-            payload = &g_array_index (stream->payloads, AsfPayload, j);
-          }
-
-          /* If there's a complete payload queued for this stream */
-          if (!gst_asf_payload_is_complete (payload))
-            continue;
-
-        }
-      } else {
-
-        /* find last payload with timestamp */
-        for (last_idx = stream->payloads->len - 1;
-            last_idx >= 0 && (payload == NULL
-                || !GST_CLOCK_TIME_IS_VALID (payload->ts)); --last_idx) {
-          payload = &g_array_index (stream->payloads, AsfPayload, last_idx);
-        }
-
-        /* if this is first payload after seek we might need to update the segment */
-        if (GST_CLOCK_TIME_IS_VALID (payload->ts))
-          gst_asf_demux_check_segment_ts (demux, payload->ts);
-
-        if (G_UNLIKELY (GST_CLOCK_TIME_IS_VALID (payload->ts) &&
-                (payload->ts < demux->segment.start))) {
-          if (G_UNLIKELY ((demux->keyunit_sync) && (!demux->accurate)
-                  && payload->keyframe)) {
-            GST_DEBUG_OBJECT (stream->pad,
-                "Found keyframe, updating segment start to %" GST_TIME_FORMAT,
-                GST_TIME_ARGS (payload->ts));
-            demux->segment.start = payload->ts;
-            demux->segment.time = payload->ts;
-          } else {
-            GST_DEBUG_OBJECT (stream->pad, "Last queued payload has timestamp %"
-                GST_TIME_FORMAT " which is before our segment start %"
-                GST_TIME_FORMAT ", not pushing yet",
-                GST_TIME_ARGS (payload->ts),
-                GST_TIME_ARGS (demux->segment.start));
-            continue;
-          }
-        }
-        payload = NULL;
-        /* find first complete payload with timestamp */
-        for (j = 0;
-            j < stream->payloads->len && (payload == NULL
-                || !GST_CLOCK_TIME_IS_VALID (payload->ts)); ++j) {
-          payload = &g_array_index (stream->payloads, AsfPayload, j);
-        }
-
-        /* Now see if there's a complete payload queued for this stream */
-        if (!gst_asf_payload_is_complete (payload))
-          continue;
-      }
-
-      /* ... and whether its timestamp is lower than the current best */
-      if (best_stream == NULL || best_payload->ts > payload->ts) {
-        best_stream = stream;
-        best_payload = payload;
-      }
-    }
-  }
-
-  return best_stream;
-}
-
-static GstFlowReturn
-gst_asf_demux_push_complete_payloads (GstASFDemux * demux, gboolean force)
-{
-  AsfStream *stream;
-  GstFlowReturn ret = GST_FLOW_OK;
-
-  if (G_UNLIKELY (!demux->activated_streams)) {
-    if (!gst_asf_demux_check_activate_streams (demux, force))
-      return GST_FLOW_OK;
-    /* streams are now activated */
-  }
-
-  while ((stream = gst_asf_demux_find_stream_with_complete_payload (demux))) {
-    AsfPayload *payload;
-    GstClockTime timestamp = GST_CLOCK_TIME_NONE;
-    GstClockTime duration = GST_CLOCK_TIME_NONE;
-
-    /* wait until we had a chance to "lock on" some payload's timestamp */
-    if (G_UNLIKELY (demux->need_newsegment
-            && !GST_CLOCK_TIME_IS_VALID (demux->segment_ts)))
-      return GST_FLOW_OK;
-
-    if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment) && stream->is_video
-        && stream->payloads->len) {
-      payload = &g_array_index (stream->payloads, AsfPayload, stream->kf_pos);
-    } else {
-      payload = &g_array_index (stream->payloads, AsfPayload, 0);
-    }
-
-    /* do we need to send a newsegment event */
-    if ((G_UNLIKELY (demux->need_newsegment))) {
-      GstEvent *segment_event;
-
-      /* safe default if insufficient upstream info */
-      if (!GST_CLOCK_TIME_IS_VALID (demux->in_gap))
-        demux->in_gap = 0;
-
-      if (demux->segment.stop == GST_CLOCK_TIME_NONE &&
-          demux->segment.duration > 0) {
-        /* slight HACK; prevent clipping of last bit */
-        demux->segment.stop = demux->segment.duration + demux->in_gap;
-      }
-
-      /* FIXME : only if ACCURATE ! */
-      if (G_LIKELY (demux->keyunit_sync && !demux->accurate
-              && (GST_CLOCK_TIME_IS_VALID (payload->ts)))
-          && !GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
-        GST_DEBUG ("Adjusting newsegment start to %" GST_TIME_FORMAT,
-            GST_TIME_ARGS (payload->ts));
-        demux->segment.start = payload->ts;
-        demux->segment.time = payload->ts;
-      }
-
-      GST_DEBUG_OBJECT (demux, "sending new-segment event %" GST_SEGMENT_FORMAT,
-          &demux->segment);
-
-      /* note: we fix up all timestamps to start from 0, so this should be ok */
-      segment_event = gst_event_new_segment (&demux->segment);
-      if (demux->segment_seqnum)
-        gst_event_set_seqnum (segment_event, demux->segment_seqnum);
-      gst_asf_demux_send_event_unlocked (demux, segment_event);
-
-      /* now post any global tags we may have found */
-      if (demux->taglist == NULL) {
-        demux->taglist = gst_tag_list_new_empty ();
-        gst_tag_list_set_scope (demux->taglist, GST_TAG_SCOPE_GLOBAL);
-      }
-
-      gst_tag_list_add (demux->taglist, GST_TAG_MERGE_REPLACE,
-          GST_TAG_CONTAINER_FORMAT, "ASF", NULL);
-
-      GST_DEBUG_OBJECT (demux, "global tags: %" GST_PTR_FORMAT, demux->taglist);
-      gst_asf_demux_send_event_unlocked (demux,
-          gst_event_new_tag (demux->taglist));
-      demux->taglist = NULL;
-
-      demux->need_newsegment = FALSE;
-      demux->segment_running = TRUE;
-    }
-
-    /* Do we have tags pending for this stream? */
-    if (G_UNLIKELY (stream->pending_tags)) {
-      GST_LOG_OBJECT (stream->pad, "%" GST_PTR_FORMAT, stream->pending_tags);
-      gst_pad_push_event (stream->pad,
-          gst_event_new_tag (stream->pending_tags));
-      stream->pending_tags = NULL;
-    }
-
-    /* We have the whole packet now so we should push the packet to
-     * the src pad now. First though we should check if we need to do
-     * descrambling */
-    if (G_UNLIKELY (stream->span > 1)) {
-      gst_asf_demux_descramble_buffer (demux, stream, &payload->buf);
-    }
-
-    payload->buf = gst_buffer_make_writable (payload->buf);
-
-    if (G_LIKELY (!payload->keyframe)) {
-      GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DELTA_UNIT);
-    }
-
-    if (G_UNLIKELY (stream->discont)) {
-      GST_DEBUG_OBJECT (stream->pad, "marking DISCONT on stream");
-      GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DISCONT);
-      stream->discont = FALSE;
-    }
-
-    if (G_UNLIKELY (stream->is_video && payload->par_x && payload->par_y &&
-            (payload->par_x != stream->par_x) &&
-            (payload->par_y != stream->par_y))) {
-      GST_DEBUG ("Updating PAR (%d/%d => %d/%d)",
-          stream->par_x, stream->par_y, payload->par_x, payload->par_y);
-      stream->par_x = payload->par_x;
-      stream->par_y = payload->par_y;
-      stream->caps = gst_caps_make_writable (stream->caps);
-      gst_caps_set_simple (stream->caps, "pixel-aspect-ratio",
-          GST_TYPE_FRACTION, stream->par_x, stream->par_y, NULL);
-      gst_pad_set_caps (stream->pad, stream->caps);
-    }
-
-    if (G_UNLIKELY (stream->interlaced != payload->interlaced)) {
-      GST_DEBUG ("Updating interlaced status (%d => %d)", stream->interlaced,
-          payload->interlaced);
-      stream->interlaced = payload->interlaced;
-      stream->caps = gst_caps_make_writable (stream->caps);
-      gst_caps_set_simple (stream->caps, "interlace-mode", G_TYPE_BOOLEAN,
-          (stream->interlaced ? "mixed" : "progressive"), NULL);
-      gst_pad_set_caps (stream->pad, stream->caps);
-    }
-
-    /* (sort of) interpolate timestamps using upstream "frame of reference",
-     * typically useful for live src, but might (unavoidably) mess with
-     * position reporting if a live src is playing not so live content
-     * (e.g. rtspsrc taking some time to fall back to tcp) */
-    timestamp = payload->ts;
-    if (GST_CLOCK_TIME_IS_VALID (timestamp)
-        && !GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
-      timestamp += demux->in_gap;
-
-      /* Check if we're after the segment already, if so no need to push
-       * anything here */
-      if (demux->segment.stop != -1 && timestamp > demux->segment.stop) {
-        GST_DEBUG_OBJECT (stream->pad,
-            "Payload after segment stop %" GST_TIME_FORMAT,
-            GST_TIME_ARGS (demux->segment.stop));
-        ret =
-            gst_flow_combiner_update_pad_flow (demux->flowcombiner, stream->pad,
-            GST_FLOW_EOS);
-        gst_buffer_unref (payload->buf);
-        payload->buf = NULL;
-        g_array_remove_index (stream->payloads, 0);
-        /* Break out as soon as we have an issue */
-        if (G_UNLIKELY (ret != GST_FLOW_OK))
-          break;
-
-        continue;
-      }
-    }
-
-    GST_BUFFER_PTS (payload->buf) = timestamp;
-
-    if (payload->duration == GST_CLOCK_TIME_NONE
-        && stream->ext_props.avg_time_per_frame != 0) {
-      duration = stream->ext_props.avg_time_per_frame * 100;
-    } else {
-      duration = payload->duration;
-    }
-    GST_BUFFER_DURATION (payload->buf) = duration;
-
-    /* FIXME: we should really set durations on buffers if we can */
-
-    GST_LOG_OBJECT (stream->pad, "pushing buffer, %" GST_PTR_FORMAT,
-        payload->buf);
-
-    if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment) && stream->is_video) {
-      if (stream->reverse_kf_ready == TRUE && stream->kf_pos == 0) {
-        GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DISCONT);
-      }
-    } else if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
-      GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DISCONT);
-    }
-
-
-    if (stream->active) {
-      if (G_UNLIKELY (stream->first_buffer)) {
-        if (stream->streamheader != NULL) {
-          GST_DEBUG_OBJECT (stream->pad,
-              "Pushing streamheader before first buffer");
-          gst_pad_push (stream->pad, gst_buffer_ref (stream->streamheader));
-        }
-        stream->first_buffer = FALSE;
-      }
-
-      if (GST_CLOCK_TIME_IS_VALID (timestamp)
-          && timestamp > demux->segment.position) {
-        demux->segment.position = timestamp;
-        if (GST_CLOCK_TIME_IS_VALID (duration))
-          demux->segment.position += timestamp;
-      }
-
-      ret = gst_pad_push (stream->pad, payload->buf);
-      ret =
-          gst_flow_combiner_update_pad_flow (demux->flowcombiner, stream->pad,
-          ret);
-    } else {
-      gst_buffer_unref (payload->buf);
-      ret = GST_FLOW_OK;
-    }
-    payload->buf = NULL;
-    if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment) && stream->is_video
-        && stream->reverse_kf_ready) {
-      g_array_remove_index (stream->payloads, stream->kf_pos);
-      stream->kf_pos--;
-
-      if (stream->reverse_kf_ready == TRUE && stream->kf_pos < 0) {
-        stream->kf_pos = 0;
-        stream->reverse_kf_ready = FALSE;
-      }
-    } else {
-      g_array_remove_index (stream->payloads, 0);
-    }
-
-    /* Break out as soon as we have an issue */
-    if (G_UNLIKELY (ret != GST_FLOW_OK))
-      break;
-  }
-
-  return ret;
-}
-
-static gboolean
-gst_asf_demux_check_buffer_is_header (GstASFDemux * demux, GstBuffer * buf)
-{
-  AsfObject obj;
-  GstMapInfo map;
-  gboolean valid;
-  g_assert (buf != NULL);
-
-  GST_LOG_OBJECT (demux, "Checking if buffer is a header");
-
-  gst_buffer_map (buf, &map, GST_MAP_READ);
-
-  /* we return false on buffer too small */
-  if (map.size < ASF_OBJECT_HEADER_SIZE) {
-    gst_buffer_unmap (buf, &map);
-    return FALSE;
-  }
-
-  /* check if it is a header */
-  valid =
-      asf_demux_peek_object (demux, map.data, ASF_OBJECT_HEADER_SIZE, &obj,
-      TRUE);
-  gst_buffer_unmap (buf, &map);
-  if (valid && obj.id == ASF_OBJ_HEADER) {
-    return TRUE;
-  }
-  return FALSE;
-}
-
-static gboolean
-gst_asf_demux_check_chained_asf (GstASFDemux * demux)
-{
-  guint64 off = demux->data_offset + (demux->packet * demux->packet_size);
-  GstFlowReturn ret = GST_FLOW_OK;
-  GstBuffer *buf = NULL;
-  gboolean header = FALSE;
-
-  /* TODO maybe we should skip index objects after the data and look
-   * further for a new header */
-  if (gst_asf_demux_pull_data (demux, off, ASF_OBJECT_HEADER_SIZE, &buf, &ret)) {
-    g_assert (buf != NULL);
-    /* check if it is a header */
-    if (gst_asf_demux_check_buffer_is_header (demux, buf)) {
-      GST_DEBUG_OBJECT (demux, "new base offset: %" G_GUINT64_FORMAT, off);
-      demux->base_offset = off;
-      header = TRUE;
-    }
-
-    gst_buffer_unref (buf);
-  }
-
-  return header;
-}
-
-static void
-gst_asf_demux_loop (GstASFDemux * demux)
-{
-  GstFlowReturn flow = GST_FLOW_OK;
-  GstBuffer *buf = NULL;
-  guint64 off;
-
-  if (G_UNLIKELY (demux->state == GST_ASF_DEMUX_STATE_HEADER)) {
-    if (!gst_asf_demux_pull_headers (demux, &flow)) {
-      goto pause;
-    }
-
-    flow = gst_asf_demux_pull_indices (demux);
-    if (flow != GST_FLOW_OK)
-      goto pause;
-  }
-
-  g_assert (demux->state == GST_ASF_DEMUX_STATE_DATA);
-
-  if (G_UNLIKELY (demux->num_packets != 0
-          && demux->packet >= demux->num_packets))
-    goto eos;
-
-  GST_LOG_OBJECT (demux, "packet %u/%u", (guint) demux->packet + 1,
-      (guint) demux->num_packets);
-
-  off = demux->data_offset + (demux->packet * demux->packet_size);
-
-  if (G_UNLIKELY (!gst_asf_demux_pull_data (demux, off,
-              demux->packet_size * demux->speed_packets, &buf, &flow))) {
-    GST_DEBUG_OBJECT (demux, "got flow %s", gst_flow_get_name (flow));
-    if (flow == GST_FLOW_EOS) {
-      goto eos;
-    } else if (flow == GST_FLOW_FLUSHING) {
-      GST_DEBUG_OBJECT (demux, "Not fatal");
-      goto pause;
-    } else {
-      goto read_failed;
-    }
-  }
-
-  if (G_LIKELY (demux->speed_packets == 1)) {
-    GstAsfDemuxParsePacketError err;
-    err = gst_asf_demux_parse_packet (demux, buf);
-    if (G_UNLIKELY (err != GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE)) {
-      /* when we don't know when the data object ends, we should check
-       * for a chained asf */
-      if (demux->num_packets == 0) {
-        if (gst_asf_demux_check_buffer_is_header (demux, buf)) {
-          GST_INFO_OBJECT (demux, "Chained asf found");
-          demux->base_offset = off;
-          gst_asf_demux_reset (demux, TRUE);
-          gst_buffer_unref (buf);
-          return;
-        }
-      }
-      /* FIXME: We should tally up fatal errors and error out only
-       * after a few broken packets in a row? */
-
-      GST_INFO_OBJECT (demux, "Ignoring recoverable parse error");
-      gst_buffer_unref (buf);
-
-      if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)
-          && !demux->seek_to_cur_pos) {
-        --demux->packet;
-        if (demux->packet < 0) {
-          goto eos;
-        }
-      } else {
-        ++demux->packet;
-      }
-
-      return;
-    }
-
-    flow = gst_asf_demux_push_complete_payloads (demux, FALSE);
-
-    if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)
-        && !demux->seek_to_cur_pos) {
-      --demux->packet;
-      if (demux->packet < 0) {
-        goto eos;
-      }
-    } else {
-      ++demux->packet;
-    }
-
-  } else {
-    guint n;
-    for (n = 0; n < demux->speed_packets; n++) {
-      GstBuffer *sub;
-      GstAsfDemuxParsePacketError err;
-
-      sub =
-          gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL,
-          n * demux->packet_size, demux->packet_size);
-      err = gst_asf_demux_parse_packet (demux, sub);
-      if (G_UNLIKELY (err != GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE)) {
-        /* when we don't know when the data object ends, we should check
-         * for a chained asf */
-        if (demux->num_packets == 0) {
-          if (gst_asf_demux_check_buffer_is_header (demux, sub)) {
-            GST_INFO_OBJECT (demux, "Chained asf found");
-            demux->base_offset = off + n * demux->packet_size;
-            gst_asf_demux_reset (demux, TRUE);
-            gst_buffer_unref (sub);
-            gst_buffer_unref (buf);
-            return;
-          }
-        }
-        /* FIXME: We should tally up fatal errors and error out only
-         * after a few broken packets in a row? */
-
-        GST_INFO_OBJECT (demux, "Ignoring recoverable parse error");
-        flow = GST_FLOW_OK;
-      }
-
-      gst_buffer_unref (sub);
-
-      if (err == GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE)
-        flow = gst_asf_demux_push_complete_payloads (demux, FALSE);
-
-      ++demux->packet;
-
-    }
-
-    /* reset speed pull */
-    demux->speed_packets = 1;
-  }
-
-  gst_buffer_unref (buf);
-
-  if (G_UNLIKELY ((demux->num_packets > 0
-              && demux->packet >= demux->num_packets)
-          || flow == GST_FLOW_EOS)) {
-    GST_LOG_OBJECT (demux, "reached EOS");
-    goto eos;
-  }
-
-  if (G_UNLIKELY (flow != GST_FLOW_OK)) {
-    GST_DEBUG_OBJECT (demux, "pushing complete payloads failed");
-    goto pause;
-  }
-
-  /* check if we're at the end of the configured segment */
-  /* FIXME: check if segment end reached etc. */
-
-  return;
-
-eos:
-  {
-    /* if we haven't activated our streams yet, this might be because we have
-     * less data queued than required for preroll; force stream activation and
-     * send any pending payloads before sending EOS */
-    if (!demux->activated_streams)
-      flow = gst_asf_demux_push_complete_payloads (demux, TRUE);
-
-    /* we want to push an eos or post a segment-done in any case */
-    if (demux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
-      gint64 stop;
-
-      /* for segment playback we need to post when (in stream time)
-       * we stopped, this is either stop (when set) or the duration. */
-      if ((stop = demux->segment.stop) == -1)
-        stop = demux->segment.duration;
-
-      GST_INFO_OBJECT (demux, "Posting segment-done, at end of segment");
-      gst_element_post_message (GST_ELEMENT_CAST (demux),
-          gst_message_new_segment_done (GST_OBJECT (demux), GST_FORMAT_TIME,
-              stop));
-      gst_asf_demux_send_event_unlocked (demux,
-          gst_event_new_segment_done (GST_FORMAT_TIME, stop));
-    } else if (flow != GST_FLOW_EOS) {
-      /* check if we have a chained asf, in case, we don't eos yet */
-      if (gst_asf_demux_check_chained_asf (demux)) {
-        GST_INFO_OBJECT (demux, "Chained ASF starting");
-        gst_asf_demux_reset (demux, TRUE);
-        return;
-      }
-    }
-
-    if (!(demux->segment.flags & GST_SEEK_FLAG_SEGMENT)) {
-      if (demux->activated_streams) {
-        /* normal playback, send EOS to all linked pads */
-        GST_INFO_OBJECT (demux, "Sending EOS, at end of stream");
-        gst_asf_demux_send_event_unlocked (demux, gst_event_new_eos ());
-      } else {
-        GST_WARNING_OBJECT (demux, "EOS without exposed streams");
-        flow = GST_FLOW_EOS;
-      }
-    }
-    /* ... and fall through to pause */
-  }
-pause:
-  {
-    GST_DEBUG_OBJECT (demux, "pausing task, flow return: %s",
-        gst_flow_get_name (flow));
-    demux->segment_running = FALSE;
-    gst_pad_pause_task (demux->sinkpad);
-
-    /* For the error cases */
-    if (flow == GST_FLOW_EOS && !demux->activated_streams) {
-      GST_ELEMENT_ERROR (demux, STREAM, WRONG_TYPE, (NULL),
-          ("This doesn't seem to be an ASF file"));
-    } else if (flow < GST_FLOW_EOS || flow == GST_FLOW_NOT_LINKED) {
-      /* Post an error. Hopefully something else already has, but if not... */
-      GST_ELEMENT_FLOW_ERROR (demux, flow);
-      gst_asf_demux_send_event_unlocked (demux, gst_event_new_eos ());
-    }
-
-    return;
-  }
-
-/* ERRORS */
-read_failed:
-  {
-    GST_DEBUG_OBJECT (demux, "Read failed, doh");
-    flow = GST_FLOW_EOS;
-    goto pause;
-  }
-#if 0
-  /* See FIXMEs above */
-parse_error:
-  {
-    gst_buffer_unref (buf);
-    GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
-        ("Error parsing ASF packet %u", (guint) demux->packet));
-    gst_asf_demux_send_event_unlocked (demux, gst_event_new_eos ());
-    flow = GST_FLOW_ERROR;
-    goto pause;
-  }
-#endif
-}
-
-#define GST_ASF_DEMUX_CHECK_HEADER_YES       0
-#define GST_ASF_DEMUX_CHECK_HEADER_NO        1
-#define GST_ASF_DEMUX_CHECK_HEADER_NEED_DATA 2
-
-static gint
-gst_asf_demux_check_header (GstASFDemux * demux)
-{
-  AsfObject obj;
-  guint8 *cdata = (guint8 *) gst_adapter_map (demux->adapter,
-      ASF_OBJECT_HEADER_SIZE);
-  if (cdata == NULL)            /* need more data */
-    return GST_ASF_DEMUX_CHECK_HEADER_NEED_DATA;
-
-  if (asf_demux_peek_object (demux, cdata, ASF_OBJECT_HEADER_SIZE, &obj, FALSE)
-      && obj.id == ASF_OBJ_HEADER) {
-    return GST_ASF_DEMUX_CHECK_HEADER_YES;
-  }
-
-  return GST_ASF_DEMUX_CHECK_HEADER_NO;
-}
-
-static GstFlowReturn
-gst_asf_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
-{
-  GstFlowReturn ret = GST_FLOW_OK;
-  GstASFDemux *demux;
-
-  demux = GST_ASF_DEMUX (parent);
-
-  GST_LOG_OBJECT (demux,
-      "buffer: size=%" G_GSIZE_FORMAT ", offset=%" G_GINT64_FORMAT ", time=%"
-      GST_TIME_FORMAT, gst_buffer_get_size (buf), GST_BUFFER_OFFSET (buf),
-      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
-
-  if (G_UNLIKELY (GST_BUFFER_IS_DISCONT (buf))) {
-    GST_DEBUG_OBJECT (demux, "received DISCONT");
-    gst_asf_demux_mark_discont (demux);
-  }
-
-  if (G_UNLIKELY ((!GST_CLOCK_TIME_IS_VALID (demux->in_gap) &&
-              GST_BUFFER_TIMESTAMP_IS_VALID (buf)))) {
-    demux->in_gap = GST_BUFFER_TIMESTAMP (buf) - demux->in_segment.start;
-    GST_DEBUG_OBJECT (demux, "upstream segment start %" GST_TIME_FORMAT
-        ", interpolation gap: %" GST_TIME_FORMAT,
-        GST_TIME_ARGS (demux->in_segment.start), GST_TIME_ARGS (demux->in_gap));
-  }
-
-  gst_adapter_push (demux->adapter, buf);
-
-  switch (demux->state) {
-    case GST_ASF_DEMUX_STATE_INDEX:{
-      gint result = gst_asf_demux_check_header (demux);
-      if (result == GST_ASF_DEMUX_CHECK_HEADER_NEED_DATA)       /* need more data */
-        break;
-
-      if (result == GST_ASF_DEMUX_CHECK_HEADER_NO) {
-        /* we don't care about this, probably an index */
-        /* TODO maybe would be smarter to skip all the indices
-         * until we got a new header or EOS to decide */
-        GST_LOG_OBJECT (demux, "Received index object, its EOS");
-        goto eos;
-      } else {
-        GST_INFO_OBJECT (demux, "Chained asf starting");
-        /* cleanup and get ready for a chained asf */
-        gst_asf_demux_reset (demux, TRUE);
-        /* fall through */
-      }
-    }
-    case GST_ASF_DEMUX_STATE_HEADER:{
-      ret = gst_asf_demux_chain_headers (demux);
-      if (demux->state != GST_ASF_DEMUX_STATE_DATA)
-        break;
-      /* otherwise fall through */
-    }
-    case GST_ASF_DEMUX_STATE_DATA:
-    {
-      guint64 data_size;
-
-      data_size = demux->packet_size;
-
-      while (gst_adapter_available (demux->adapter) >= data_size) {
-        GstBuffer *buf;
-        GstAsfDemuxParsePacketError err;
-
-        /* we don't know the length of the stream
-         * check for a chained asf every time */
-        if (demux->num_packets == 0) {
-          gint result = gst_asf_demux_check_header (demux);
-
-          if (result == GST_ASF_DEMUX_CHECK_HEADER_YES) {
-            GST_INFO_OBJECT (demux, "Chained asf starting");
-            /* cleanup and get ready for a chained asf */
-            gst_asf_demux_reset (demux, TRUE);
-            break;
-          }
-        } else if (G_UNLIKELY (demux->num_packets != 0 && demux->packet >= 0
-                && demux->packet >= demux->num_packets)) {
-          /* do not overshoot data section when streaming */
-          break;
-        }
-
-        buf = gst_adapter_take_buffer (demux->adapter, data_size);
-
-        /* FIXME: We should tally up fatal errors and error out only
-         * after a few broken packets in a row? */
-        err = gst_asf_demux_parse_packet (demux, buf);
-
-        gst_buffer_unref (buf);
-
-        if (G_LIKELY (err == GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE))
-          ret = gst_asf_demux_push_complete_payloads (demux, FALSE);
-        else
-          GST_WARNING_OBJECT (demux, "Parse error");
-
-        if (demux->packet >= 0)
-          ++demux->packet;
-      }
-      if (G_UNLIKELY (demux->num_packets != 0 && demux->packet >= 0
-              && demux->packet >= demux->num_packets)) {
-        demux->state = GST_ASF_DEMUX_STATE_INDEX;
-      }
-      break;
-    }
-    default:
-      g_assert_not_reached ();
-  }
-
-done:
-  if (ret != GST_FLOW_OK)
-    GST_DEBUG_OBJECT (demux, "flow: %s", gst_flow_get_name (ret));
-
-  return ret;
-
-eos:
-  {
-    GST_DEBUG_OBJECT (demux, "Handled last packet, setting EOS");
-    ret = GST_FLOW_EOS;
-    goto done;
-  }
-}
-
-static inline gboolean
-gst_asf_demux_skip_bytes (guint num_bytes, guint8 ** p_data, guint64 * p_size)
-{
-  if (*p_size < num_bytes)
-    return FALSE;
-
-  *p_data += num_bytes;
-  *p_size -= num_bytes;
-  return TRUE;
-}
-
-static inline guint8
-gst_asf_demux_get_uint8 (guint8 ** p_data, guint64 * p_size)
-{
-  guint8 ret;
-
-  g_assert (*p_size >= 1);
-  ret = GST_READ_UINT8 (*p_data);
-  *p_data += sizeof (guint8);
-  *p_size -= sizeof (guint8);
-  return ret;
-}
-
-static inline guint16
-gst_asf_demux_get_uint16 (guint8 ** p_data, guint64 * p_size)
-{
-  guint16 ret;
-
-  g_assert (*p_size >= 2);
-  ret = GST_READ_UINT16_LE (*p_data);
-  *p_data += sizeof (guint16);
-  *p_size -= sizeof (guint16);
-  return ret;
-}
-
-static inline guint32
-gst_asf_demux_get_uint32 (guint8 ** p_data, guint64 * p_size)
-{
-  guint32 ret;
-
-  g_assert (*p_size >= 4);
-  ret = GST_READ_UINT32_LE (*p_data);
-  *p_data += sizeof (guint32);
-  *p_size -= sizeof (guint32);
-  return ret;
-}
-
-static inline guint64
-gst_asf_demux_get_uint64 (guint8 ** p_data, guint64 * p_size)
-{
-  guint64 ret;
-
-  g_assert (*p_size >= 8);
-  ret = GST_READ_UINT64_LE (*p_data);
-  *p_data += sizeof (guint64);
-  *p_size -= sizeof (guint64);
-  return ret;
-}
-
-static gboolean
-gst_asf_demux_get_buffer (GstBuffer ** p_buf, guint num_bytes_to_read,
-    guint8 ** p_data, guint64 * p_size)
-{
-  *p_buf = NULL;
-
-  if (*p_size < num_bytes_to_read)
-    return FALSE;
-
-  *p_buf = gst_buffer_new_and_alloc (num_bytes_to_read);
-  gst_buffer_fill (*p_buf, 0, *p_data, num_bytes_to_read);
-
-  *p_data += num_bytes_to_read;
-  *p_size -= num_bytes_to_read;
-
-  return TRUE;
-}
-
-static gboolean
-gst_asf_demux_get_bytes (guint8 ** p_buf, guint64 num_bytes_to_read,
-    guint8 ** p_data, guint64 * p_size)
-{
-  *p_buf = NULL;
-
-  if (num_bytes_to_read >= G_MAXUINT)
-    return FALSE;
-
-  if (*p_size < num_bytes_to_read)
-    return FALSE;
-
-  *p_buf = g_memdup2 (*p_data, num_bytes_to_read);
-  *p_data += num_bytes_to_read;
-  *p_size -= num_bytes_to_read;
-  return TRUE;
-}
-
-static gboolean
-gst_asf_demux_get_string (gchar ** p_str, guint16 * p_strlen,
-    guint8 ** p_data, guint64 * p_size)
-{
-  guint16 s_length;
-  guint8 *s;
-
-  *p_str = NULL;
-
-  if (*p_size < 2)
-    return FALSE;
-
-  s_length = gst_asf_demux_get_uint16 (p_data, p_size);
-
-  if (p_strlen)
-    *p_strlen = s_length;
-
-  if (s_length == 0) {
-    GST_WARNING ("zero-length string");
-    *p_str = g_strdup ("");
-    return TRUE;
-  }
-
-  if (!gst_asf_demux_get_bytes (&s, s_length, p_data, p_size))
-    return FALSE;
-
-  g_assert (s != NULL);
-
-  /* just because They don't exist doesn't
-   * mean They are not out to get you ... */
-  if (s[s_length - 1] != '\0') {
-    s = g_realloc (s, s_length + 1);
-    s[s_length] = '\0';
-  }
-
-  *p_str = (gchar *) s;
-  return TRUE;
-}
-
-
-static void
-gst_asf_demux_get_guid (ASFGuid * guid, guint8 ** p_data, guint64 * p_size)
-{
-  g_assert (*p_size >= 4 * sizeof (guint32));
-
-  guid->v1 = gst_asf_demux_get_uint32 (p_data, p_size);
-  guid->v2 = gst_asf_demux_get_uint32 (p_data, p_size);
-  guid->v3 = gst_asf_demux_get_uint32 (p_data, p_size);
-  guid->v4 = gst_asf_demux_get_uint32 (p_data, p_size);
-}
-
-static gboolean
-gst_asf_demux_get_stream_audio (asf_stream_audio * audio, guint8 ** p_data,
-    guint64 * p_size)
-{
-  if (*p_size < (2 + 2 + 4 + 4 + 2 + 2 + 2))
-    return FALSE;
-
-  /* WAVEFORMATEX Structure */
-  audio->codec_tag = gst_asf_demux_get_uint16 (p_data, p_size);
-  audio->channels = gst_asf_demux_get_uint16 (p_data, p_size);
-  audio->sample_rate = gst_asf_demux_get_uint32 (p_data, p_size);
-  audio->byte_rate = gst_asf_demux_get_uint32 (p_data, p_size);
-  audio->block_align = gst_asf_demux_get_uint16 (p_data, p_size);
-  audio->word_size = gst_asf_demux_get_uint16 (p_data, p_size);
-  /* Codec specific data size */
-  audio->size = gst_asf_demux_get_uint16 (p_data, p_size);
-  if (audio->size > *p_size) {
-    GST_WARNING ("Corrupted audio codec_data (should be at least %u bytes, is %"
-        G_GUINT64_FORMAT " long)", audio->size, *p_size);
-    return FALSE;
-  }
-  return TRUE;
-}
-
-static gboolean
-gst_asf_demux_get_stream_video (asf_stream_video * video, guint8 ** p_data,
-    guint64 * p_size)
-{
-  if (*p_size < (4 + 4 + 1 + 2))
-    return FALSE;
-
-  video->width = gst_asf_demux_get_uint32 (p_data, p_size);
-  video->height = gst_asf_demux_get_uint32 (p_data, p_size);
-  video->unknown = gst_asf_demux_get_uint8 (p_data, p_size);
-  video->size = gst_asf_demux_get_uint16 (p_data, p_size);
-  return TRUE;
-}
-
-static gboolean
-gst_asf_demux_get_stream_video_format (asf_stream_video_format * fmt,
-    guint8 ** p_data, guint64 * p_size)
-{
-  if (*p_size < (4 + 4 + 4 + 2 + 2 + 4 + 4 + 4 + 4 + 4 + 4))
-    return FALSE;
-
-  fmt->size = gst_asf_demux_get_uint32 (p_data, p_size);
-  /* Sanity checks */
-  if (fmt->size < 40) {
-    GST_WARNING ("Corrupted asf_stream_video_format (size < 40)");
-    return FALSE;
-  }
-  if ((guint64) fmt->size - 4 > *p_size) {
-    GST_WARNING ("Corrupted asf_stream_video_format (codec_data is too small)");
-    return FALSE;
-  }
-  fmt->width = gst_asf_demux_get_uint32 (p_data, p_size);
-  fmt->height = gst_asf_demux_get_uint32 (p_data, p_size);
-  fmt->planes = gst_asf_demux_get_uint16 (p_data, p_size);
-  fmt->depth = gst_asf_demux_get_uint16 (p_data, p_size);
-  fmt->tag = gst_asf_demux_get_uint32 (p_data, p_size);
-  fmt->image_size = gst_asf_demux_get_uint32 (p_data, p_size);
-  fmt->xpels_meter = gst_asf_demux_get_uint32 (p_data, p_size);
-  fmt->ypels_meter = gst_asf_demux_get_uint32 (p_data, p_size);
-  fmt->num_colors = gst_asf_demux_get_uint32 (p_data, p_size);
-  fmt->imp_colors = gst_asf_demux_get_uint32 (p_data, p_size);
-  return TRUE;
-}
-
-AsfStream *
-gst_asf_demux_get_stream (GstASFDemux * demux, guint16 id)
-{
-  guint i;
-
-  for (i = 0; i < demux->num_streams; i++) {
-    if (demux->stream[i].id == id)
-      return &demux->stream[i];
-  }
-
-  if (gst_asf_demux_is_unknown_stream (demux, id))
-    GST_WARNING ("Segment found for undefined stream: (%d)", id);
-  return NULL;
-}
-
-static AsfStream *
-gst_asf_demux_setup_pad (GstASFDemux * demux, GstPad * src_pad,
-    GstCaps * caps, guint16 id, gboolean is_video, GstBuffer * streamheader,
-    GstTagList * tags)
-{
-  AsfStream *stream;
-
-  gst_pad_use_fixed_caps (src_pad);
-  gst_pad_set_caps (src_pad, caps);
-
-  gst_pad_set_event_function (src_pad,
-      GST_DEBUG_FUNCPTR (gst_asf_demux_handle_src_event));
-  gst_pad_set_query_function (src_pad,
-      GST_DEBUG_FUNCPTR (gst_asf_demux_handle_src_query));
-
-  stream = &demux->stream[demux->num_streams];
-  stream->caps = caps;
-  stream->pad = src_pad;
-  stream->id = id;
-  stream->fps_known = !is_video;        /* bit hacky for audio */
-  stream->is_video = is_video;
-  stream->pending_tags = tags;
-  stream->discont = TRUE;
-  stream->first_buffer = TRUE;
-  stream->streamheader = streamheader;
-  if (stream->streamheader) {
-    stream->streamheader = gst_buffer_make_writable (streamheader);
-    GST_BUFFER_FLAG_SET (stream->streamheader, GST_BUFFER_FLAG_HEADER);
-  }
-  if (is_video) {
-    GstStructure *st;
-    gint par_x, par_y;
-    st = gst_caps_get_structure (caps, 0);
-    if (gst_structure_get_fraction (st, "pixel-aspect-ratio", &par_x, &par_y) &&
-        par_x > 0 && par_y > 0) {
-      GST_DEBUG ("PAR %d/%d", par_x, par_y);
-      stream->par_x = par_x;
-      stream->par_y = par_y;
-    }
-  }
-
-  stream->payloads = g_array_new (FALSE, FALSE, sizeof (AsfPayload));
-
-  /* TODO: create this array during reverse play? */
-  stream->payloads_rev = g_array_new (FALSE, FALSE, sizeof (AsfPayload));
-
-  GST_INFO ("Created pad %s for stream %u with caps %" GST_PTR_FORMAT,
-      GST_PAD_NAME (src_pad), demux->num_streams, caps);
-
-  ++demux->num_streams;
-
-  stream->active = FALSE;
-
-  return stream;
-}
-
-static void
-gst_asf_demux_add_stream_headers_to_caps (GstASFDemux * demux,
-    GstBuffer * buffer, GstStructure * structure)
-{
-  GValue arr_val = G_VALUE_INIT;
-  GValue buf_val = G_VALUE_INIT;
-
-  g_value_init (&arr_val, GST_TYPE_ARRAY);
-  g_value_init (&buf_val, GST_TYPE_BUFFER);
-
-  gst_value_set_buffer (&buf_val, buffer);
-  gst_value_array_append_and_take_value (&arr_val, &buf_val);
-
-  gst_structure_take_value (structure, "streamheader", &arr_val);
-}
-
-static AsfStream *
-gst_asf_demux_add_audio_stream (GstASFDemux * demux,
-    asf_stream_audio * audio, guint16 id, guint8 ** p_data, guint64 * p_size)
-{
-  GstTagList *tags = NULL;
-  GstBuffer *extradata = NULL;
-  GstPad *src_pad;
-  GstCaps *caps;
-  guint16 size_left = 0;
-  gchar *codec_name = NULL;
-  gchar *name = NULL;
-
-  size_left = audio->size;
-
-  /* Create the audio pad */
-  name = g_strdup_printf ("audio_%u", demux->num_audio_streams);
-
-  src_pad = gst_pad_new_from_static_template (&audio_src_template, name);
-  g_free (name);
-
-  /* Swallow up any left over data and set up the 
-   * standard properties from the header info */
-  if (size_left) {
-    GST_INFO_OBJECT (demux, "Audio header contains %d bytes of "
-        "codec specific data", size_left);
-
-    g_assert (size_left <= *p_size);
-    gst_asf_demux_get_buffer (&extradata, size_left, p_data, p_size);
-  }
-
-  /* asf_stream_audio is the same as gst_riff_strf_auds, but with an
-   * additional two bytes indicating extradata. */
-  /* FIXME: Handle the channel reorder map here */
-  caps = gst_riff_create_audio_caps (audio->codec_tag, NULL,
-      (gst_riff_strf_auds *) audio, extradata, NULL, &codec_name, NULL);
-
-  if (caps == NULL) {
-    caps = gst_caps_new_simple ("audio/x-asf-unknown", "codec_id",
-        G_TYPE_INT, (gint) audio->codec_tag, NULL);
-  }
-
-  /* Informing about that audio format we just added */
-  if (codec_name) {
-    tags = gst_tag_list_new (GST_TAG_AUDIO_CODEC, codec_name, NULL);
-    g_free (codec_name);
-  }
-
-  if (audio->byte_rate > 0) {
-    /* Some ASF files have no bitrate props object (often seen with
-     * ASF files that contain raw audio data). Example files can
-     * be generated with FFmpeg (tested with v2.8.6), like this:
-     *
-     *   ffmpeg -i sine-wave.wav -c:a pcm_alaw file.asf
-     *
-     * In this case, if audio->byte_rate is nonzero, use that as
-     * the bitrate. */
-
-    guint bitrate = audio->byte_rate * 8;
-
-    if (tags == NULL)
-      tags = gst_tag_list_new_empty ();
-
-    /* Add bitrate, but only if there is none set already, since
-     * this is just a fallback in case there is no bitrate tag
-     * already present */
-    gst_tag_list_add (tags, GST_TAG_MERGE_KEEP, GST_TAG_BITRATE, bitrate, NULL);
-  }
-
-  if (extradata)
-    gst_buffer_unref (extradata);
-
-  GST_INFO ("Adding audio stream #%u, id %u codec %u (0x%04x), tags=%"
-      GST_PTR_FORMAT, demux->num_audio_streams, id, audio->codec_tag,
-      audio->codec_tag, tags);
-
-  ++demux->num_audio_streams;
-
-  return gst_asf_demux_setup_pad (demux, src_pad, caps, id, FALSE, NULL, tags);
-}
-
-static AsfStream *
-gst_asf_demux_add_video_stream (GstASFDemux * demux,
-    asf_stream_video_format * video, guint16 id,
-    guint8 ** p_data, guint64 * p_size)
-{
-  GstTagList *tags = NULL;
-  GstStructure *caps_s;
-  GstBuffer *extradata = NULL;
-  GstPad *src_pad;
-  GstCaps *caps;
-  gchar *str;
-  gchar *name = NULL;
-  gchar *codec_name = NULL;
-  guint64 size_left = video->size - 40;
-  GstBuffer *streamheader = NULL;
-  guint par_w = 1, par_h = 1;
-
-  /* Create the video pad */
-  name = g_strdup_printf ("video_%u", demux->num_video_streams);
-  src_pad = gst_pad_new_from_static_template (&video_src_template, name);
-  g_free (name);
-
-  /* Now try some gstreamer formatted MIME types (from gst_avi_demux_strf_vids) */
-  if (size_left) {
-    GST_LOG ("Video header has %" G_GUINT64_FORMAT
-        " bytes of codec specific data (vs %" G_GUINT64_FORMAT ")", size_left,
-        *p_size);
-    g_assert (size_left <= *p_size);
-    gst_asf_demux_get_buffer (&extradata, size_left, p_data, p_size);
-  }
-
-  GST_DEBUG ("video codec %" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (video->tag));
-
-  /* yes, asf_stream_video_format and gst_riff_strf_vids are the same */
-  caps = gst_riff_create_video_caps (video->tag, NULL,
-      (gst_riff_strf_vids *) video, extradata, NULL, &codec_name);
-
-  if (caps == NULL) {
-    caps = gst_caps_new_simple ("video/x-asf-unknown", "fourcc",
-        G_TYPE_UINT, video->tag, NULL);
-  } else {
-    GstStructure *s;
-    gint ax, ay;
-
-    s = gst_asf_demux_get_metadata_for_stream (demux, id);
-    if (gst_structure_get_int (s, "AspectRatioX", &ax) &&
-        gst_structure_get_int (s, "AspectRatioY", &ay) && (ax > 0 && ay > 0)) {
-      par_w = ax;
-      par_h = ay;
-      gst_caps_set_simple (caps, "pixel-aspect-ratio", GST_TYPE_FRACTION,
-          ax, ay, NULL);
-    } else {
-      guint ax, ay;
-      /* retry with the global metadata */
-      GST_DEBUG ("Retrying with global metadata %" GST_PTR_FORMAT,
-          demux->global_metadata);
-      s = demux->global_metadata;
-      if (gst_structure_get_uint (s, "AspectRatioX", &ax) &&
-          gst_structure_get_uint (s, "AspectRatioY", &ay)) {
-        GST_DEBUG ("ax:%d, ay:%d", ax, ay);
-        if (ax > 0 && ay > 0) {
-          par_w = ax;
-          par_h = ay;
-          gst_caps_set_simple (caps, "pixel-aspect-ratio", GST_TYPE_FRACTION,
-              ax, ay, NULL);
-        }
-      }
-    }
-    s = gst_caps_get_structure (caps, 0);
-    gst_structure_remove_field (s, "framerate");
-  }
-
-  caps_s = gst_caps_get_structure (caps, 0);
-
-  /* add format field with fourcc to WMV/VC1 caps to differentiate variants */
-  if (gst_structure_has_name (caps_s, "video/x-wmv")) {
-    str = g_strdup_printf ("%" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (video->tag));
-    gst_caps_set_simple (caps, "format", G_TYPE_STRING, str, NULL);
-    g_free (str);
-
-    /* check if h264 has codec_data (avc) or streamheaders (bytestream) */
-  } else if (gst_structure_has_name (caps_s, "video/x-h264")) {
-    const GValue *value = gst_structure_get_value (caps_s, "codec_data");
-    if (value) {
-      GstBuffer *buf = gst_value_get_buffer (value);
-      GstMapInfo mapinfo;
-
-      if (gst_buffer_map (buf, &mapinfo, GST_MAP_READ)) {
-        if (mapinfo.size >= 4 && GST_READ_UINT32_BE (mapinfo.data) == 1) {
-          /* this looks like a bytestream start */
-          streamheader = gst_buffer_ref (buf);
-          gst_asf_demux_add_stream_headers_to_caps (demux, buf, caps_s);
-          gst_structure_remove_field (caps_s, "codec_data");
-          gst_structure_set (caps_s, "stream-format", G_TYPE_STRING,
-              "byte-stream", NULL);
-        } else {
-          gst_structure_set (caps_s, "stream-format", G_TYPE_STRING, "avc",
-              NULL);
-        }
-
-        gst_buffer_unmap (buf, &mapinfo);
-      }
-    } else {
-      gst_structure_set (caps_s, "stream-format", G_TYPE_STRING, "byte-stream",
-          NULL);
-    }
-  }
-
-  /* For a 3D video, set multiview information into the caps based on
-   * what was detected during object parsing */
-  if (demux->asf_3D_mode != GST_ASF_3D_NONE) {
-    GstVideoMultiviewMode mv_mode = GST_VIDEO_MULTIVIEW_MODE_NONE;
-    GstVideoMultiviewFlags mv_flags = GST_VIDEO_MULTIVIEW_FLAGS_NONE;
-    const gchar *mview_mode_str;
-
-    switch (demux->asf_3D_mode) {
-      case GST_ASF_3D_SIDE_BY_SIDE_HALF_LR:
-        mv_mode = GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE;
-        break;
-      case GST_ASF_3D_SIDE_BY_SIDE_HALF_RL:
-        mv_mode = GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE;
-        mv_flags = GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST;
-        break;
-      case GST_ASF_3D_TOP_AND_BOTTOM_HALF_LR:
-        mv_mode = GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM;
-        break;
-      case GST_ASF_3D_TOP_AND_BOTTOM_HALF_RL:
-        mv_mode = GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM;
-        mv_flags = GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST;
-        break;
-      case GST_ASF_3D_DUAL_STREAM:{
-        gboolean is_right_view = FALSE;
-        /* if Advanced_Mutual_Exclusion object exists, use it
-         * to figure out which is the left view (lower ID) */
-        if (demux->mut_ex_streams != NULL) {
-          guint length;
-          gint i;
-
-          length = g_slist_length (demux->mut_ex_streams);
-
-          for (i = 0; i < length; i++) {
-            gpointer v_s_id;
-
-            v_s_id = g_slist_nth_data (demux->mut_ex_streams, i);
-
-            GST_DEBUG_OBJECT (demux,
-                "has Mutual_Exclusion object. stream id in object is %d",
-                GPOINTER_TO_INT (v_s_id));
-
-            if (id > GPOINTER_TO_INT (v_s_id))
-              is_right_view = TRUE;
-          }
-        } else {
-          /* if the Advaced_Mutual_Exclusion object doesn't exist, assume the
-           * first video stream encountered has the lower ID */
-          if (demux->num_video_streams > 0) {
-            /* This is not the first video stream, assuming right eye view */
-            is_right_view = TRUE;
-          }
-        }
-        if (is_right_view)
-          mv_mode = GST_VIDEO_MULTIVIEW_MODE_RIGHT;
-        else
-          mv_mode = GST_VIDEO_MULTIVIEW_MODE_LEFT;
-        break;
-      }
-      default:
-        break;
-    }
-
-    GST_INFO_OBJECT (demux,
-        "stream_id %d, has multiview-mode %d flags 0x%x", id, mv_mode,
-        (guint) mv_flags);
-
-    mview_mode_str = gst_video_multiview_mode_to_caps_string (mv_mode);
-    if (mview_mode_str != NULL) {
-      if (gst_video_multiview_guess_half_aspect (mv_mode, video->width,
-              video->height, par_w, par_h))
-        mv_flags |= GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT;
-
-      gst_caps_set_simple (caps,
-          "multiview-mode", G_TYPE_STRING, mview_mode_str,
-          "multiview-flags", GST_TYPE_VIDEO_MULTIVIEW_FLAGSET, mv_flags,
-          GST_FLAG_SET_MASK_EXACT, NULL);
-    }
-  }
-
-  if (codec_name) {
-    tags = gst_tag_list_new (GST_TAG_VIDEO_CODEC, codec_name, NULL);
-    g_free (codec_name);
-  }
-
-  if (extradata)
-    gst_buffer_unref (extradata);
-
-  GST_INFO ("Adding video stream #%u, id %u, codec %"
-      GST_FOURCC_FORMAT " (0x%08x)", demux->num_video_streams, id,
-      GST_FOURCC_ARGS (video->tag), video->tag);
-
-  ++demux->num_video_streams;
-
-  return gst_asf_demux_setup_pad (demux, src_pad, caps, id, TRUE,
-      streamheader, tags);
-}
-
-static void
-gst_asf_demux_activate_stream (GstASFDemux * demux, AsfStream * stream)
-{
-  if (!stream->active) {
-    GstEvent *event;
-    gchar *stream_id;
-
-    GST_INFO_OBJECT (demux, "Activating stream %2u, pad %s, caps %"
-        GST_PTR_FORMAT, stream->id, GST_PAD_NAME (stream->pad), stream->caps);
-    gst_pad_set_active (stream->pad, TRUE);
-
-    stream_id =
-        gst_pad_create_stream_id_printf (stream->pad, GST_ELEMENT_CAST (demux),
-        "%03u", stream->id);
-
-    event =
-        gst_pad_get_sticky_event (demux->sinkpad, GST_EVENT_STREAM_START, 0);
-    if (event) {
-      if (gst_event_parse_group_id (event, &demux->group_id))
-        demux->have_group_id = TRUE;
-      else
-        demux->have_group_id = FALSE;
-      gst_event_unref (event);
-    } else if (!demux->have_group_id) {
-      demux->have_group_id = TRUE;
-      demux->group_id = gst_util_group_id_next ();
-    }
-
-    event = gst_event_new_stream_start (stream_id);
-    if (demux->have_group_id)
-      gst_event_set_group_id (event, demux->group_id);
-
-    gst_pad_push_event (stream->pad, event);
-    g_free (stream_id);
-    gst_pad_set_caps (stream->pad, stream->caps);
-
-    gst_element_add_pad (GST_ELEMENT_CAST (demux), stream->pad);
-    gst_flow_combiner_add_pad (demux->flowcombiner, stream->pad);
-    stream->active = TRUE;
-  }
-}
-
-static AsfStream *
-gst_asf_demux_parse_stream_object (GstASFDemux * demux, guint8 * data,
-    guint64 size)
-{
-  AsfCorrectionType correction_type;
-  AsfStreamType stream_type;
-  GstClockTime time_offset;
-  gboolean is_encrypted G_GNUC_UNUSED;
-  guint16 stream_id;
-  guint16 flags;
-  ASFGuid guid;
-  guint stream_specific_size;
-  guint type_specific_size G_GNUC_UNUSED;
-  guint unknown G_GNUC_UNUSED;
-  gboolean inspect_payload = FALSE;
-  AsfStream *stream = NULL;
-
-  /* Get the rest of the header's header */
-  if (size < (16 + 16 + 8 + 4 + 4 + 2 + 4))
-    goto not_enough_data;
-
-  gst_asf_demux_get_guid (&guid, &data, &size);
-  stream_type = gst_asf_demux_identify_guid (asf_stream_guids, &guid);
-
-  gst_asf_demux_get_guid (&guid, &data, &size);
-  correction_type = gst_asf_demux_identify_guid (asf_correction_guids, &guid);
-
-  time_offset = gst_asf_demux_get_uint64 (&data, &size) * 100;
-
-  type_specific_size = gst_asf_demux_get_uint32 (&data, &size);
-  stream_specific_size = gst_asf_demux_get_uint32 (&data, &size);
-
-  flags = gst_asf_demux_get_uint16 (&data, &size);
-  stream_id = flags & 0x7f;
-  is_encrypted = ! !(flags & 0x8000);
-  unknown = gst_asf_demux_get_uint32 (&data, &size);
-
-  GST_DEBUG_OBJECT (demux, "Found stream %u, time_offset=%" GST_TIME_FORMAT,
-      stream_id, GST_TIME_ARGS (time_offset));
-
-  /* dvr-ms has audio stream declared in stream specific data */
-  if (stream_type == ASF_STREAM_EXT_EMBED_HEADER) {
-    AsfExtStreamType ext_stream_type;
-    gst_asf_demux_get_guid (&guid, &data, &size);
-    ext_stream_type = gst_asf_demux_identify_guid (asf_ext_stream_guids, &guid);
-
-    if (ext_stream_type == ASF_EXT_STREAM_AUDIO) {
-      inspect_payload = TRUE;
-
-      gst_asf_demux_get_guid (&guid, &data, &size);
-      gst_asf_demux_get_uint32 (&data, &size);
-      gst_asf_demux_get_uint32 (&data, &size);
-      gst_asf_demux_get_uint32 (&data, &size);
-      gst_asf_demux_get_guid (&guid, &data, &size);
-      gst_asf_demux_get_uint32 (&data, &size);
-      stream_type = ASF_STREAM_AUDIO;
-    }
-  }
-
-  switch (stream_type) {
-    case ASF_STREAM_AUDIO:{
-      asf_stream_audio audio_object;
-
-      if (!gst_asf_demux_get_stream_audio (&audio_object, &data, &size))
-        goto not_enough_data;
-
-      GST_INFO ("Object is an audio stream with %u bytes of additional data",
-          audio_object.size);
-
-      stream = gst_asf_demux_add_audio_stream (demux, &audio_object, stream_id,
-          &data, &size);
-
-      switch (correction_type) {
-        case ASF_CORRECTION_ON:{
-          guint span, packet_size, chunk_size, data_size, silence_data;
-
-          GST_INFO ("Using error correction");
-
-          if (size < (1 + 2 + 2 + 2 + 1))
-            goto not_enough_data;
-
-          span = gst_asf_demux_get_uint8 (&data, &size);
-          packet_size = gst_asf_demux_get_uint16 (&data, &size);
-          chunk_size = gst_asf_demux_get_uint16 (&data, &size);
-          data_size = gst_asf_demux_get_uint16 (&data, &size);
-          silence_data = gst_asf_demux_get_uint8 (&data, &size);
-
-          stream->span = span;
-
-          GST_DEBUG_OBJECT (demux, "Descrambling ps:%u cs:%u ds:%u s:%u sd:%u",
-              packet_size, chunk_size, data_size, span, silence_data);
-
-          if (stream->span > 1) {
-            if (chunk_size == 0 || ((packet_size / chunk_size) <= 1)) {
-              /* Disable descrambling */
-              stream->span = 0;
-            } else {
-              /* FIXME: this else branch was added for
-               * weird_al_yankovic - the saga begins.asf */
-              stream->ds_packet_size = packet_size;
-              stream->ds_chunk_size = chunk_size;
-            }
-          } else {
-            /* Descambling is enabled */
-            stream->ds_packet_size = packet_size;
-            stream->ds_chunk_size = chunk_size;
-          }
-#if 0
-          /* Now skip the rest of the silence data */
-          if (data_size > 1)
-            gst_bytestream_flush (demux->bs, data_size - 1);
-#else
-          /* FIXME: CHECKME. And why -1? */
-          if (data_size > 1) {
-            if (!gst_asf_demux_skip_bytes (data_size - 1, &data, &size)) {
-              goto not_enough_data;
-            }
-          }
-#endif
-          break;
-        }
-        case ASF_CORRECTION_OFF:{
-          GST_INFO ("Error correction off");
-          if (!gst_asf_demux_skip_bytes (stream_specific_size, &data, &size))
-            goto not_enough_data;
-          break;
-        }
-        default:
-          GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
-              ("Audio stream using unknown error correction"));
-          return NULL;
-      }
-
-      break;
-    }
-
-    case ASF_STREAM_VIDEO:{
-      asf_stream_video_format video_format_object;
-      asf_stream_video video_object;
-      guint16 vsize;
-
-      if (!gst_asf_demux_get_stream_video (&video_object, &data, &size))
-        goto not_enough_data;
-
-      vsize = video_object.size - 40;   /* Byte order gets offset by single byte */
-
-      GST_INFO ("object is a video stream with %u bytes of "
-          "additional data", vsize);
-
-      if (!gst_asf_demux_get_stream_video_format (&video_format_object,
-              &data, &size)) {
-        goto not_enough_data;
-      }
-
-      stream = gst_asf_demux_add_video_stream (demux, &video_format_object,
-          stream_id, &data, &size);
-
-      break;
-    }
-
-    default:
-      GST_WARNING_OBJECT (demux, "Unknown stream type for stream %u",
-          stream_id);
-      demux->other_streams =
-          g_slist_append (demux->other_streams, GINT_TO_POINTER (stream_id));
-      break;
-  }
-
-  if (stream) {
-    stream->inspect_payload = inspect_payload;
-    stream->type = stream_type;
-  }
-  return stream;
-
-not_enough_data:
-  {
-    GST_WARNING_OBJECT (demux, "Unexpected end of data parsing stream object");
-    /* we'll error out later if we found no streams */
-    return NULL;
-  }
-}
-
-static const gchar *
-gst_asf_demux_get_gst_tag_from_tag_name (const gchar * name_utf8)
-{
-  /* *INDENT-OFF* */
-  const struct
-  {
-    const gchar *asf_name;
-    const gchar *gst_name;
-  } tags[] = {
-    {
-    "WM/Genre", GST_TAG_GENRE}, {
-    "WM/AlbumTitle", GST_TAG_ALBUM}, {
-    "WM/AlbumArtist", GST_TAG_ARTIST}, {
-    "WM/PartOfSet", GST_TAG_ALBUM_VOLUME_COUNT}, {
-    "WM/Picture", GST_TAG_IMAGE}, {
-    "WM/Track", GST_TAG_TRACK_NUMBER}, {
-    "WM/TrackNumber", GST_TAG_TRACK_NUMBER}, {
-    "WM/Year", GST_TAG_DATE_TIME}
-    /* { "WM/Composer", GST_TAG_COMPOSER } */
-  };
-  /* *INDENT-ON* */
-  gsize out;
-  guint i;
-
-  if (name_utf8 == NULL) {
-    GST_WARNING ("Failed to convert name to UTF8, skipping");
-    return NULL;
-  }
-
-  out = strlen (name_utf8);
-
-  for (i = 0; i < G_N_ELEMENTS (tags); ++i) {
-    if (strncmp (tags[i].asf_name, name_utf8, out) == 0) {
-      GST_LOG ("map tagname '%s' -> '%s'", name_utf8, tags[i].gst_name);
-      return tags[i].gst_name;
-    }
-  }
-
-  return NULL;
-}
-
-/* gst_asf_demux_add_global_tags() takes ownership of taglist! */
-static void
-gst_asf_demux_add_global_tags (GstASFDemux * demux, GstTagList * taglist)
-{
-  GstTagList *t;
-
-  GST_DEBUG_OBJECT (demux, "adding global tags: %" GST_PTR_FORMAT, taglist);
-
-  if (taglist == NULL)
-    return;
-
-  if (gst_tag_list_is_empty (taglist)) {
-    gst_tag_list_unref (taglist);
-    return;
-  }
-
-  t = gst_tag_list_merge (demux->taglist, taglist, GST_TAG_MERGE_APPEND);
-  gst_tag_list_set_scope (t, GST_TAG_SCOPE_GLOBAL);
-  if (demux->taglist)
-    gst_tag_list_unref (demux->taglist);
-  gst_tag_list_unref (taglist);
-  demux->taglist = t;
-  GST_LOG_OBJECT (demux, "global tags now: %" GST_PTR_FORMAT, demux->taglist);
-}
-
-#define ASF_DEMUX_DATA_TYPE_UTF16LE_STRING  0
-#define ASF_DEMUX_DATA_TYPE_BYTE_ARRAY      1
-#define ASF_DEMUX_DATA_TYPE_BOOL                       2
-#define ASF_DEMUX_DATA_TYPE_DWORD           3
-
-static void
-asf_demux_parse_picture_tag (GstTagList * tags, const guint8 * tag_data,
-    guint tag_data_len)
-{
-  GstByteReader r;
-  const guint8 *img_data = NULL;
-  guint32 img_data_len = 0;
-  guint8 pic_type = 0;
-
-  gst_byte_reader_init (&r, tag_data, tag_data_len);
-
-  /* skip mime type string (we don't trust it and do our own typefinding),
-   * and also skip the description string, since we don't use it */
-  if (!gst_byte_reader_get_uint8 (&r, &pic_type) ||
-      !gst_byte_reader_get_uint32_le (&r, &img_data_len) ||
-      !gst_byte_reader_skip_string_utf16 (&r) ||
-      !gst_byte_reader_skip_string_utf16 (&r) ||
-      !gst_byte_reader_get_data (&r, img_data_len, &img_data)) {
-    goto not_enough_data;
-  }
-
-
-  if (!gst_tag_list_add_id3_image (tags, img_data, img_data_len, pic_type))
-    GST_DEBUG ("failed to add image extracted from WM/Picture tag to taglist");
-
-  return;
-
-not_enough_data:
-  {
-    GST_DEBUG ("Failed to read WM/Picture tag: not enough data");
-    GST_MEMDUMP ("WM/Picture data", tag_data, tag_data_len);
-    return;
-  }
-}
-
-/* Extended Content Description Object */
-static GstFlowReturn
-gst_asf_demux_process_ext_content_desc (GstASFDemux * demux, guint8 * data,
-    guint64 size)
-{
-  /* Other known (and unused) 'text/unicode' metadata available :
-   *
-   *   WM/Lyrics =
-   *   WM/MediaPrimaryClassID = {D1607DBC-E323-4BE2-86A1-48A42A28441E}
-   *   WMFSDKVersion = 9.00.00.2980
-   *   WMFSDKNeeded = 0.0.0.0000
-   *   WM/UniqueFileIdentifier = AMGa_id=R    15334;AMGp_id=P     5149;AMGt_id=T  2324984
-   *   WM/Publisher = 4AD
-   *   WM/Provider = AMG
-   *   WM/ProviderRating = 8
-   *   WM/ProviderStyle = Rock (similar to WM/Genre)
-   *   WM/GenreID (similar to WM/Genre)
-   *   WM/TrackNumber (same as WM/Track but as a string)
-   *
-   * Other known (and unused) 'non-text' metadata available :
-   *
-   *   WM/EncodingTime
-   *   WM/MCDI
-   *   IsVBR
-   *
-   * We might want to read WM/TrackNumber and use atoi() if we don't have
-   * WM/Track
-   */
-
-  GstTagList *taglist;
-  guint16 blockcount, i;
-  gboolean content3D = FALSE;
-
-  /* *INDENT-OFF* */
-  struct
-  {
-    const gchar *interleave_name;
-    GstASF3DMode interleaving_type;
-  } stereoscopic_layout_map[] = {
-    {
-    "SideBySideRF", GST_ASF_3D_SIDE_BY_SIDE_HALF_RL}, {
-    "SideBySideLF", GST_ASF_3D_SIDE_BY_SIDE_HALF_LR}, {
-    "OverUnderRT", GST_ASF_3D_TOP_AND_BOTTOM_HALF_RL}, {
-    "OverUnderLT", GST_ASF_3D_TOP_AND_BOTTOM_HALF_LR}, {
-    "DualStream", GST_ASF_3D_DUAL_STREAM}
-  };
-  /* *INDENT-ON* */
-
-  GST_INFO_OBJECT (demux, "object is an extended content description");
-
-  taglist = gst_tag_list_new_empty ();
-
-  /* Content Descriptor Count */
-  if (size < 2)
-    goto not_enough_data;
-
-  blockcount = gst_asf_demux_get_uint16 (&data, &size);
-
-  for (i = 1; i <= blockcount; ++i) {
-    const gchar *gst_tag_name;
-    guint16 datatype;
-    guint16 value_len;
-    guint16 name_len;
-    GValue tag_value = { 0, };
-    gsize in, out;
-    gchar *name;
-    gchar *name_utf8 = NULL;
-    gchar *value;
-
-    /* Descriptor */
-    if (!gst_asf_demux_get_string (&name, &name_len, &data, &size))
-      goto not_enough_data;
-
-    if (size < 2) {
-      g_free (name);
-      goto not_enough_data;
-    }
-    /* Descriptor Value Data Type */
-    datatype = gst_asf_demux_get_uint16 (&data, &size);
-
-    /* Descriptor Value (not really a string, but same thing reading-wise) */
-    if (!gst_asf_demux_get_string (&value, &value_len, &data, &size)) {
-      g_free (name);
-      goto not_enough_data;
-    }
-
-    name_utf8 =
-        g_convert (name, name_len, "UTF-8", "UTF-16LE", &in, &out, NULL);
-
-    if (name_utf8 != NULL) {
-      GST_DEBUG ("Found tag/metadata %s", name_utf8);
-
-      gst_tag_name = gst_asf_demux_get_gst_tag_from_tag_name (name_utf8);
-      GST_DEBUG ("gst_tag_name %s", GST_STR_NULL (gst_tag_name));
-
-      switch (datatype) {
-        case ASF_DEMUX_DATA_TYPE_UTF16LE_STRING:{
-          gchar *value_utf8;
-
-          value_utf8 = g_convert (value, value_len, "UTF-8", "UTF-16LE",
-              &in, &out, NULL);
-
-          /* get rid of tags with empty value */
-          if (value_utf8 != NULL && *value_utf8 != '\0') {
-            GST_DEBUG ("string value %s", value_utf8);
-
-            value_utf8[out] = '\0';
-
-            if (gst_tag_name != NULL) {
-              if (strcmp (gst_tag_name, GST_TAG_DATE_TIME) == 0) {
-                guint year = atoi (value_utf8);
-
-                if (year > 0) {
-                  g_value_init (&tag_value, GST_TYPE_DATE_TIME);
-                  g_value_take_boxed (&tag_value, gst_date_time_new_y (year));
-                }
-              } else if (strcmp (gst_tag_name, GST_TAG_GENRE) == 0) {
-                guint id3v1_genre_id;
-                const gchar *genre_str;
-
-                if (sscanf (value_utf8, "(%u)", &id3v1_genre_id) == 1 &&
-                    ((genre_str = gst_tag_id3_genre_get (id3v1_genre_id)))) {
-                  GST_DEBUG ("Genre: %s -> %s", value_utf8, genre_str);
-                  g_free (value_utf8);
-                  value_utf8 = g_strdup (genre_str);
-                }
-              } else if (!strcmp (gst_tag_name, GST_TAG_ALBUM_VOLUME_COUNT)) {
-                guint num = 0, count = 0;
-
-                if (sscanf (value_utf8, "%u/%u", &num, &count) == 2
-                    && num > 0 && num <= 99999 && count > 0 && count <= 99999) {
-                  GST_DEBUG ("Disc %u of %u (%s)", num, count, value_utf8);
-                  g_value_init (&tag_value, G_TYPE_UINT);
-                  /* disc number */
-                  g_value_set_uint (&tag_value, num);
-                  gst_tag_list_add_values (taglist, GST_TAG_MERGE_APPEND,
-                      GST_TAG_ALBUM_VOLUME_NUMBER, &tag_value, NULL);
-                  /* disc count (will be added to the taglist below) */
-                  g_value_set_uint (&tag_value, count);
-                } else {
-                  GST_DEBUG ("Couldn't parse PartOfSet value %s", value_utf8);
-                }
-              } else {
-                GType tag_type;
-
-                /* convert tag from string to other type if required */
-                tag_type = gst_tag_get_type (gst_tag_name);
-                g_value_init (&tag_value, tag_type);
-                if (!gst_value_deserialize (&tag_value, value_utf8)) {
-                  GValue from_val = { 0, };
-
-                  g_value_init (&from_val, G_TYPE_STRING);
-                  g_value_set_string (&from_val, value_utf8);
-                  if (!g_value_transform (&from_val, &tag_value)) {
-                    GST_WARNING_OBJECT (demux,
-                        "Could not transform string tag to " "%s tag type %s",
-                        gst_tag_name, g_type_name (tag_type));
-                    g_value_unset (&tag_value);
-                  }
-                  g_value_unset (&from_val);
-                }
-              }
-            } else {
-              /* metadata ! */
-              GST_DEBUG ("Setting metadata");
-              g_value_init (&tag_value, G_TYPE_STRING);
-              g_value_set_string (&tag_value, value_utf8);
-              /* If we found a stereoscopic marker, look for StereoscopicLayout
-               * metadata */
-              if (content3D) {
-                guint i;
-                if (strncmp ("StereoscopicLayout", name_utf8,
-                        strlen (name_utf8)) == 0) {
-                  for (i = 0; i < G_N_ELEMENTS (stereoscopic_layout_map); i++) {
-                    if (g_str_equal (stereoscopic_layout_map[i].interleave_name,
-                            value_utf8)) {
-                      demux->asf_3D_mode =
-                          stereoscopic_layout_map[i].interleaving_type;
-                      GST_INFO ("find interleave type %u", demux->asf_3D_mode);
-                    }
-                  }
-                }
-                GST_INFO_OBJECT (demux, "3d type is %u", demux->asf_3D_mode);
-              } else {
-                demux->asf_3D_mode = GST_ASF_3D_NONE;
-                GST_INFO_OBJECT (demux, "None 3d type");
-              }
-            }
-          } else if (value_utf8 == NULL) {
-            GST_WARNING ("Failed to convert string value to UTF8, skipping");
-          } else {
-            GST_DEBUG ("Skipping empty string value for %s",
-                GST_STR_NULL (gst_tag_name));
-          }
-          g_free (value_utf8);
-          break;
-        }
-        case ASF_DEMUX_DATA_TYPE_BYTE_ARRAY:{
-          if (gst_tag_name) {
-            if (!g_str_equal (gst_tag_name, GST_TAG_IMAGE)) {
-              GST_FIXME ("Unhandled byte array tag %s",
-                  GST_STR_NULL (gst_tag_name));
-              break;
-            } else {
-              asf_demux_parse_picture_tag (taglist, (guint8 *) value,
-                  value_len);
-            }
-          }
-          break;
-        }
-        case ASF_DEMUX_DATA_TYPE_DWORD:{
-          guint uint_val;
-
-          if (value_len < 4)
-            break;
-
-          uint_val = GST_READ_UINT32_LE (value);
-
-          /* this is the track number */
-          g_value_init (&tag_value, G_TYPE_UINT);
-
-          /* WM/Track counts from 0 */
-          if (!strcmp (name_utf8, "WM/Track"))
-            ++uint_val;
-
-          g_value_set_uint (&tag_value, uint_val);
-          break;
-        }
-          /* Detect 3D */
-        case ASF_DEMUX_DATA_TYPE_BOOL:{
-          gboolean bool_val;
-
-          if (value_len < 4)
-            break;
-
-          bool_val = GST_READ_UINT32_LE (value);
-
-          if (strncmp ("Stereoscopic", name_utf8, strlen (name_utf8)) == 0) {
-            if (bool_val) {
-              GST_INFO_OBJECT (demux, "This is 3D contents");
-              content3D = TRUE;
-            } else {
-              GST_INFO_OBJECT (demux, "This is not 3D contenst");
-              content3D = FALSE;
-            }
-          }
-
-          break;
-        }
-        default:{
-          GST_DEBUG ("Skipping tag %s of type %d", gst_tag_name, datatype);
-          break;
-        }
-      }
-
-      if (G_IS_VALUE (&tag_value)) {
-        if (gst_tag_name) {
-          GstTagMergeMode merge_mode = GST_TAG_MERGE_APPEND;
-
-          /* WM/TrackNumber is more reliable than WM/Track, since the latter
-           * is supposed to have a 0 base but is often wrongly written to start
-           * from 1 as well, so prefer WM/TrackNumber when we have it: either
-           * replace the value added earlier from WM/Track or put it first in
-           * the list, so that it will get picked up by _get_uint() */
-          if (strcmp (name_utf8, "WM/TrackNumber") == 0)
-            merge_mode = GST_TAG_MERGE_REPLACE;
-
-          gst_tag_list_add_values (taglist, merge_mode, gst_tag_name,
-              &tag_value, NULL);
-        } else {
-          GST_DEBUG ("Setting global metadata %s", name_utf8);
-          gst_structure_set_value (demux->global_metadata, name_utf8,
-              &tag_value);
-        }
-
-        g_value_unset (&tag_value);
-      }
-    }
-
-    g_free (name);
-    g_free (value);
-    g_free (name_utf8);
-  }
-
-  gst_asf_demux_add_global_tags (demux, taglist);
-
-  return GST_FLOW_OK;
-
-  /* Errors */
-not_enough_data:
-  {
-    GST_WARNING ("Unexpected end of data parsing ext content desc object");
-    gst_tag_list_unref (taglist);
-    return GST_FLOW_OK;         /* not really fatal */
-  }
-}
-
-static GstStructure *
-gst_asf_demux_get_metadata_for_stream (GstASFDemux * demux, guint stream_num)
-{
-  gchar sname[32];
-  guint i;
-
-  g_snprintf (sname, sizeof (sname), "stream-%u", stream_num);
-
-  for (i = 0; i < gst_caps_get_size (demux->metadata); ++i) {
-    GstStructure *s;
-
-    s = gst_caps_get_structure (demux->metadata, i);
-    if (gst_structure_has_name (s, sname))
-      return s;
-  }
-
-  gst_caps_append_structure (demux->metadata, gst_structure_new_empty (sname));
-
-  /* try lookup again; demux->metadata took ownership of the structure, so we
-   * can't really make any assumptions about what happened to it, so we can't
-   * just return it directly after appending it */
-  return gst_asf_demux_get_metadata_for_stream (demux, stream_num);
-}
-
-static GstFlowReturn
-gst_asf_demux_process_metadata (GstASFDemux * demux, guint8 * data,
-    guint64 size)
-{
-  guint16 blockcount, i;
-
-  GST_INFO_OBJECT (demux, "object is a metadata object");
-
-  /* Content Descriptor Count */
-  if (size < 2)
-    goto not_enough_data;
-
-  blockcount = gst_asf_demux_get_uint16 (&data, &size);
-
-  for (i = 0; i < blockcount; ++i) {
-    GstStructure *s;
-    guint16 stream_num, name_len, data_type, lang_idx G_GNUC_UNUSED;
-    guint32 data_len, ival;
-    gchar *name_utf8;
-
-    if (size < (2 + 2 + 2 + 2 + 4))
-      goto not_enough_data;
-
-    lang_idx = gst_asf_demux_get_uint16 (&data, &size);
-    stream_num = gst_asf_demux_get_uint16 (&data, &size);
-    name_len = gst_asf_demux_get_uint16 (&data, &size);
-    data_type = gst_asf_demux_get_uint16 (&data, &size);
-    data_len = gst_asf_demux_get_uint32 (&data, &size);
-
-    if (size < name_len + data_len)
-      goto not_enough_data;
-
-    /* convert name to UTF-8 */
-    name_utf8 = g_convert ((gchar *) data, name_len, "UTF-8", "UTF-16LE",
-        NULL, NULL, NULL);
-    gst_asf_demux_skip_bytes (name_len, &data, &size);
-
-    if (name_utf8 == NULL) {
-      GST_WARNING ("Failed to convert value name to UTF8, skipping");
-      gst_asf_demux_skip_bytes (data_len, &data, &size);
-      continue;
-    }
-
-    if (data_type != ASF_DEMUX_DATA_TYPE_DWORD) {
-      gst_asf_demux_skip_bytes (data_len, &data, &size);
-      g_free (name_utf8);
-      continue;
-    }
-
-    /* read DWORD */
-    if (size < 4) {
-      g_free (name_utf8);
-      goto not_enough_data;
-    }
-
-    ival = gst_asf_demux_get_uint32 (&data, &size);
-
-    /* skip anything else there may be, just in case */
-    gst_asf_demux_skip_bytes (data_len - 4, &data, &size);
-
-    s = gst_asf_demux_get_metadata_for_stream (demux, stream_num);
-    gst_structure_set (s, name_utf8, G_TYPE_INT, ival, NULL);
-    g_free (name_utf8);
-  }
-
-  GST_INFO_OBJECT (demux, "metadata = %" GST_PTR_FORMAT, demux->metadata);
-  return GST_FLOW_OK;
-
-  /* Errors */
-not_enough_data:
-  {
-    GST_WARNING ("Unexpected end of data parsing metadata object");
-    return GST_FLOW_OK;         /* not really fatal */
-  }
-}
-
-static GstFlowReturn
-gst_asf_demux_process_header (GstASFDemux * demux, guint8 * data, guint64 size)
-{
-  GstFlowReturn ret = GST_FLOW_OK;
-  guint32 i, num_objects;
-  guint8 unknown G_GNUC_UNUSED;
-
-  /* Get the rest of the header's header */
-  if (size < (4 + 1 + 1))
-    goto not_enough_data;
-
-  num_objects = gst_asf_demux_get_uint32 (&data, &size);
-  unknown = gst_asf_demux_get_uint8 (&data, &size);
-  unknown = gst_asf_demux_get_uint8 (&data, &size);
-
-  GST_INFO_OBJECT (demux, "object is a header with %u parts", num_objects);
-  demux->saw_file_header = FALSE;
-  /* Loop through the header's objects, processing those */
-  for (i = 0; i < num_objects; ++i) {
-    GST_INFO_OBJECT (demux, "reading header part %u", i);
-    ret = gst_asf_demux_process_object (demux, &data, &size);
-    if (ret != GST_FLOW_OK) {
-      GST_WARNING ("process_object returned %s", gst_asf_get_flow_name (ret));
-      break;
-    }
-  }
-  if (!demux->saw_file_header) {
-    GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
-        ("Header does not have mandatory FILE section"));
-    return GST_FLOW_ERROR;
-  }
-
-  return ret;
-
-not_enough_data:
-  {
-    GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
-        ("short read parsing HEADER object"));
-    return GST_FLOW_ERROR;
-  }
-}
-
-static GstFlowReturn
-gst_asf_demux_process_file (GstASFDemux * demux, guint8 * data, guint64 size)
-{
-  guint64 creation_time G_GNUC_UNUSED;
-  guint64 file_size G_GNUC_UNUSED;
-  guint64 send_time G_GNUC_UNUSED;
-  guint64 packets_count, play_time, preroll;
-  guint32 flags, min_pktsize, max_pktsize, min_bitrate G_GNUC_UNUSED;
-
-  if (size < (16 + 8 + 8 + 8 + 8 + 8 + 8 + 4 + 4 + 4 + 4))
-    goto not_enough_data;
-
-  gst_asf_demux_skip_bytes (16, &data, &size);  /* skip GUID */
-  file_size = gst_asf_demux_get_uint64 (&data, &size);
-  creation_time = gst_asf_demux_get_uint64 (&data, &size);
-  packets_count = gst_asf_demux_get_uint64 (&data, &size);
-  play_time = gst_asf_demux_get_uint64 (&data, &size);
-  send_time = gst_asf_demux_get_uint64 (&data, &size);
-  preroll = gst_asf_demux_get_uint64 (&data, &size);
-  flags = gst_asf_demux_get_uint32 (&data, &size);
-  min_pktsize = gst_asf_demux_get_uint32 (&data, &size);
-  max_pktsize = gst_asf_demux_get_uint32 (&data, &size);
-  min_bitrate = gst_asf_demux_get_uint32 (&data, &size);
-
-  demux->broadcast = ! !(flags & 0x01);
-  demux->seekable = ! !(flags & 0x02);
-
-  GST_DEBUG_OBJECT (demux, "min_pktsize = %u", min_pktsize);
-  GST_DEBUG_OBJECT (demux, "flags::broadcast = %d", demux->broadcast);
-  GST_DEBUG_OBJECT (demux, "flags::seekable  = %d", demux->seekable);
-
-  if (demux->broadcast) {
-    /* these fields are invalid if the broadcast flag is set */
-    play_time = 0;
-    file_size = 0;
-  }
-
-  if (min_pktsize != max_pktsize)
-    goto non_fixed_packet_size;
-
-  demux->packet_size = max_pktsize;
-
-  /* FIXME: do we need send_time as well? what is it? */
-  if ((play_time * 100) >= (preroll * GST_MSECOND))
-    demux->play_time = (play_time * 100) - (preroll * GST_MSECOND);
-  else
-    demux->play_time = 0;
-
-  demux->preroll = preroll * GST_MSECOND;
-
-  /* initial latency */
-  demux->latency = demux->preroll;
-
-  if (demux->play_time == 0)
-    demux->seekable = FALSE;
-
-  GST_DEBUG_OBJECT (demux, "play_time %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (demux->play_time));
-  GST_DEBUG_OBJECT (demux, "preroll   %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (demux->preroll));
-
-  if (demux->play_time > 0) {
-    demux->segment.duration = demux->play_time;
-  }
-
-  GST_INFO ("object is a file with %" G_GUINT64_FORMAT " data packets",
-      packets_count);
-  GST_INFO ("preroll = %" G_GUINT64_FORMAT, demux->preroll);
-
-  demux->saw_file_header = TRUE;
-
-  return GST_FLOW_OK;
-
-/* ERRORS */
-non_fixed_packet_size:
-  {
-    GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
-        ("packet size must be fixed"));
-    return GST_FLOW_ERROR;
-  }
-not_enough_data:
-  {
-    GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
-        ("short read parsing FILE object"));
-    return GST_FLOW_ERROR;
-  }
-}
-
-/* Content Description Object */
-static GstFlowReturn
-gst_asf_demux_process_comment (GstASFDemux * demux, guint8 * data, guint64 size)
-{
-  /* *INDENT-OFF* */
-  struct
-  {
-    const gchar *gst_tag;
-    guint16 val_length;
-    gchar *val_utf8;
-  } tags[5] = {
-    {
-    GST_TAG_TITLE, 0, NULL}, {
-    GST_TAG_ARTIST, 0, NULL}, {
-    GST_TAG_COPYRIGHT, 0, NULL}, {
-    GST_TAG_DESCRIPTION, 0, NULL}, {
-    GST_TAG_COMMENT, 0, NULL}
-  };
-  /* *INDENT-ON* */
-  GstTagList *taglist;
-  GValue value = { 0 };
-  gsize in, out;
-  gint i = -1;
-
-  GST_INFO_OBJECT (demux, "object is a comment");
-
-  if (size < (2 + 2 + 2 + 2 + 2))
-    goto not_enough_data;
-
-  tags[0].val_length = gst_asf_demux_get_uint16 (&data, &size);
-  tags[1].val_length = gst_asf_demux_get_uint16 (&data, &size);
-  tags[2].val_length = gst_asf_demux_get_uint16 (&data, &size);
-  tags[3].val_length = gst_asf_demux_get_uint16 (&data, &size);
-  tags[4].val_length = gst_asf_demux_get_uint16 (&data, &size);
-
-  GST_DEBUG_OBJECT (demux, "Comment lengths: title=%d author=%d copyright=%d "
-      "description=%d rating=%d", tags[0].val_length, tags[1].val_length,
-      tags[2].val_length, tags[3].val_length, tags[4].val_length);
-
-  for (i = 0; i < G_N_ELEMENTS (tags); ++i) {
-    if (size < tags[i].val_length)
-      goto not_enough_data;
-
-    /* might be just '/0', '/0'... */
-    if (tags[i].val_length > 2 && tags[i].val_length % 2 == 0) {
-      /* convert to UTF-8 */
-      tags[i].val_utf8 = g_convert ((gchar *) data, tags[i].val_length,
-          "UTF-8", "UTF-16LE", &in, &out, NULL);
-    }
-    gst_asf_demux_skip_bytes (tags[i].val_length, &data, &size);
-  }
-
-  /* parse metadata into taglist */
-  taglist = gst_tag_list_new_empty ();
-  g_value_init (&value, G_TYPE_STRING);
-  for (i = 0; i < G_N_ELEMENTS (tags); ++i) {
-    if (tags[i].val_utf8 && strlen (tags[i].val_utf8) > 0 && tags[i].gst_tag) {
-      g_value_set_string (&value, tags[i].val_utf8);
-      gst_tag_list_add_values (taglist, GST_TAG_MERGE_APPEND,
-          tags[i].gst_tag, &value, NULL);
-    }
-  }
-  g_value_unset (&value);
-
-  gst_asf_demux_add_global_tags (demux, taglist);
-
-  for (i = 0; i < G_N_ELEMENTS (tags); ++i)
-    g_free (tags[i].val_utf8);
-
-  return GST_FLOW_OK;
-
-not_enough_data:
-  {
-    GST_WARNING_OBJECT (demux, "unexpectedly short of data while processing "
-        "comment tag section %d, skipping comment object", i);
-    for (i = 0; i < G_N_ELEMENTS (tags); i++)
-      g_free (tags[i].val_utf8);
-    return GST_FLOW_OK;         /* not really fatal */
-  }
-}
-
-static GstFlowReturn
-gst_asf_demux_process_bitrate_props_object (GstASFDemux * demux, guint8 * data,
-    guint64 size)
-{
-  guint16 num_streams, i;
-  AsfStream *stream;
-
-  if (size < 2)
-    goto not_enough_data;
-
-  num_streams = gst_asf_demux_get_uint16 (&data, &size);
-
-  GST_INFO ("object is a bitrate properties object with %u streams",
-      num_streams);
-
-  if (size < (num_streams * (2 + 4)))
-    goto not_enough_data;
-
-  for (i = 0; i < num_streams; ++i) {
-    guint32 bitrate;
-    guint16 stream_id;
-
-    stream_id = gst_asf_demux_get_uint16 (&data, &size);
-    bitrate = gst_asf_demux_get_uint32 (&data, &size);
-
-    if (stream_id < GST_ASF_DEMUX_NUM_STREAM_IDS) {
-      GST_DEBUG_OBJECT (demux, "bitrate of stream %u = %u", stream_id, bitrate);
-      stream = gst_asf_demux_get_stream (demux, stream_id);
-      if (stream) {
-        if (stream->pending_tags == NULL)
-          stream->pending_tags = gst_tag_list_new_empty ();
-        gst_tag_list_add (stream->pending_tags, GST_TAG_MERGE_REPLACE,
-            GST_TAG_BITRATE, bitrate, NULL);
-      } else {
-        GST_WARNING_OBJECT (demux, "Stream id %u wasn't found", stream_id);
-      }
-    } else {
-      GST_WARNING ("stream id %u is too large", stream_id);
-    }
-  }
-
-  return GST_FLOW_OK;
-
-not_enough_data:
-  {
-    GST_WARNING_OBJECT (demux, "short read parsing bitrate props object!");
-    return GST_FLOW_OK;         /* not really fatal */
-  }
-}
-
-static GstFlowReturn
-gst_asf_demux_process_header_ext (GstASFDemux * demux, guint8 * data,
-    guint64 size)
-{
-  GstFlowReturn ret = GST_FLOW_OK;
-  guint64 hdr_size;
-
-  /* Get the rest of the header's header */
-  if (size < (16 + 2 + 4))
-    goto not_enough_data;
-
-  /* skip GUID and two other bytes */
-  gst_asf_demux_skip_bytes (16 + 2, &data, &size);
-  hdr_size = gst_asf_demux_get_uint32 (&data, &size);
-
-  GST_INFO ("extended header object with a size of %u bytes", (guint) size);
-
-  /* FIXME: does data_size include the rest of the header that we have read? */
-  if (hdr_size > size)
-    goto not_enough_data;
-
-  while (hdr_size > 0) {
-    ret = gst_asf_demux_process_object (demux, &data, &hdr_size);
-    if (ret != GST_FLOW_OK)
-      break;
-  }
-
-  return ret;
-
-not_enough_data:
-  {
-    GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
-        ("short read parsing extended header object"));
-    return GST_FLOW_ERROR;
-  }
-}
-
-static GstFlowReturn
-gst_asf_demux_process_language_list (GstASFDemux * demux, guint8 * data,
-    guint64 size)
-{
-  guint i;
-
-  if (size < 2)
-    goto not_enough_data;
-
-  if (demux->languages) {
-    GST_WARNING ("More than one LANGUAGE_LIST object in stream");
-    g_strfreev (demux->languages);
-    demux->languages = NULL;
-    demux->num_languages = 0;
-  }
-
-  demux->num_languages = gst_asf_demux_get_uint16 (&data, &size);
-  GST_LOG ("%u languages:", demux->num_languages);
-
-  demux->languages = g_new0 (gchar *, demux->num_languages + 1);
-  for (i = 0; i < demux->num_languages; ++i) {
-    guint8 len, *lang_data = NULL;
-
-    if (size < 1)
-      goto not_enough_data;
-    len = gst_asf_demux_get_uint8 (&data, &size);
-    if (gst_asf_demux_get_bytes (&lang_data, len, &data, &size)) {
-      gchar *utf8;
-
-      utf8 = g_convert ((gchar *) lang_data, len, "UTF-8", "UTF-16LE", NULL,
-          NULL, NULL);
-
-      /* truncate "en-us" etc. to just "en" */
-      if (utf8 && strlen (utf8) >= 5 && (utf8[2] == '-' || utf8[2] == '_')) {
-        utf8[2] = '\0';
-      }
-      GST_DEBUG ("[%u] %s", i, GST_STR_NULL (utf8));
-      demux->languages[i] = utf8;
-      g_free (lang_data);
-    } else {
-      goto not_enough_data;
-    }
-  }
-
-  return GST_FLOW_OK;
-
-not_enough_data:
-  {
-    GST_WARNING_OBJECT (demux, "short read parsing language list object!");
-    g_free (demux->languages);
-    demux->languages = NULL;
-    demux->num_languages = 0;
-    return GST_FLOW_OK;         /* not fatal */
-  }
-}
-
-static GstFlowReturn
-gst_asf_demux_process_simple_index (GstASFDemux * demux, guint8 * data,
-    guint64 size)
-{
-  GstClockTime interval;
-  guint32 count, i;
-
-  if (size < (16 + 8 + 4 + 4))
-    goto not_enough_data;
-
-  /* skip file id */
-  gst_asf_demux_skip_bytes (16, &data, &size);
-  interval = gst_asf_demux_get_uint64 (&data, &size) * (GstClockTime) 100;
-  gst_asf_demux_skip_bytes (4, &data, &size);
-  count = gst_asf_demux_get_uint32 (&data, &size);
-  if (count > 0) {
-    demux->sidx_interval = interval;
-    demux->sidx_num_entries = count;
-    g_free (demux->sidx_entries);
-    demux->sidx_entries = g_new0 (AsfSimpleIndexEntry, count);
-
-    for (i = 0; i < count; ++i) {
-      if (G_UNLIKELY (size < 6)) {
-        /* adjust for broken files, to avoid having entries at the end
-         * of the parsed index that point to time=0. Resulting in seeking to
-         * the end of the file leading back to the beginning */
-        demux->sidx_num_entries -= (count - i);
-        break;
-      }
-      demux->sidx_entries[i].packet = gst_asf_demux_get_uint32 (&data, &size);
-      demux->sidx_entries[i].count = gst_asf_demux_get_uint16 (&data, &size);
-      GST_LOG_OBJECT (demux, "%" GST_TIME_FORMAT " = packet %4u  count : %2d",
-          GST_TIME_ARGS (i * interval), demux->sidx_entries[i].packet,
-          demux->sidx_entries[i].count);
-    }
-  } else {
-    GST_DEBUG_OBJECT (demux, "simple index object with 0 entries");
-  }
-
-  return GST_FLOW_OK;
-
-not_enough_data:
-  {
-    GST_WARNING_OBJECT (demux, "short read parsing simple index object!");
-    return GST_FLOW_OK;         /* not fatal */
-  }
-}
-
-static GstFlowReturn
-gst_asf_demux_process_advanced_mutual_exclusion (GstASFDemux * demux,
-    guint8 * data, guint64 size)
-{
-  ASFGuid guid;
-  guint16 num, i;
-
-  if (size < 16 + 2 + (2 * 2))
-    goto not_enough_data;
-
-  gst_asf_demux_get_guid (&guid, &data, &size);
-  num = gst_asf_demux_get_uint16 (&data, &size);
-
-  if (num < 2) {
-    GST_WARNING_OBJECT (demux, "nonsensical mutually exclusive streams count");
-    return GST_FLOW_OK;
-  }
-
-  if (size < (num * sizeof (guint16)))
-    goto not_enough_data;
-
-  /* read mutually exclusive stream numbers */
-  for (i = 0; i < num; ++i) {
-    guint8 mes;
-    mes = gst_asf_demux_get_uint16 (&data, &size) & 0x7f;
-    GST_LOG_OBJECT (demux, "mutually exclusive: stream %d", mes);
-
-    demux->mut_ex_streams =
-        g_slist_append (demux->mut_ex_streams, GINT_TO_POINTER (mes));
-  }
-
-
-  return GST_FLOW_OK;
-
-  /* Errors */
-not_enough_data:
-  {
-    GST_WARNING_OBJECT (demux, "short read parsing advanced mutual exclusion");
-    return GST_FLOW_OK;         /* not absolutely fatal */
-  }
-}
-
-gboolean
-gst_asf_demux_is_unknown_stream (GstASFDemux * demux, guint stream_num)
-{
-  return g_slist_find (demux->other_streams,
-      GINT_TO_POINTER (stream_num)) == NULL;
-}
-
-static GstFlowReturn
-gst_asf_demux_process_ext_stream_props (GstASFDemux * demux, guint8 * data,
-    guint64 size)
-{
-  AsfStreamExtProps esp;
-  AsfStream *stream = NULL;
-  AsfObject stream_obj;
-  guint16 stream_name_count;
-  guint16 num_payload_ext;
-  guint64 len;
-  guint8 *stream_obj_data = NULL;
-  guint8 *data_start;
-  guint obj_size;
-  guint i, stream_num;
-
-  data_start = data;
-  obj_size = (guint) size;
-
-  esp.payload_extensions = NULL;
-
-  if (size < 64)
-    goto not_enough_data;
-
-  esp.valid = TRUE;
-  esp.start_time = gst_asf_demux_get_uint64 (&data, &size) * GST_MSECOND;
-  esp.end_time = gst_asf_demux_get_uint64 (&data, &size) * GST_MSECOND;
-  esp.data_bitrate = gst_asf_demux_get_uint32 (&data, &size);
-  esp.buffer_size = gst_asf_demux_get_uint32 (&data, &size);
-  esp.intial_buf_fullness = gst_asf_demux_get_uint32 (&data, &size);
-  esp.data_bitrate2 = gst_asf_demux_get_uint32 (&data, &size);
-  esp.buffer_size2 = gst_asf_demux_get_uint32 (&data, &size);
-  esp.intial_buf_fullness2 = gst_asf_demux_get_uint32 (&data, &size);
-  esp.max_obj_size = gst_asf_demux_get_uint32 (&data, &size);
-  esp.flags = gst_asf_demux_get_uint32 (&data, &size);
-  stream_num = gst_asf_demux_get_uint16 (&data, &size);
-  esp.lang_idx = gst_asf_demux_get_uint16 (&data, &size);
-  esp.avg_time_per_frame = gst_asf_demux_get_uint64 (&data, &size);
-  stream_name_count = gst_asf_demux_get_uint16 (&data, &size);
-  num_payload_ext = gst_asf_demux_get_uint16 (&data, &size);
-
-  GST_INFO ("start_time             = %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (esp.start_time));
-  GST_INFO ("end_time               = %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (esp.end_time));
-  GST_INFO ("flags                  = %08x", esp.flags);
-  GST_INFO ("average time per frame = %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (esp.avg_time_per_frame * 100));
-  GST_INFO ("stream number          = %u", stream_num);
-  GST_INFO ("stream language ID idx = %u (%s)", esp.lang_idx,
-      (esp.lang_idx < demux->num_languages) ?
-      GST_STR_NULL (demux->languages[esp.lang_idx]) : "??");
-  GST_INFO ("stream name count      = %u", stream_name_count);
-
-  /* read stream names */
-  for (i = 0; i < stream_name_count; ++i) {
-    guint16 stream_lang_idx G_GNUC_UNUSED;
-    gchar *stream_name = NULL;
-
-    if (size < 2)
-      goto not_enough_data;
-    stream_lang_idx = gst_asf_demux_get_uint16 (&data, &size);
-    if (!gst_asf_demux_get_string (&stream_name, NULL, &data, &size))
-      goto not_enough_data;
-    GST_INFO ("stream name %d: %s", i, GST_STR_NULL (stream_name));
-    g_free (stream_name);       /* TODO: store names in struct */
-  }
-
-  /* read payload extension systems stuff */
-  GST_LOG ("payload extension systems count = %u", num_payload_ext);
-
-  if (num_payload_ext > 0)
-    esp.payload_extensions = g_new0 (AsfPayloadExtension, num_payload_ext + 1);
-
-  for (i = 0; i < num_payload_ext; ++i) {
-    AsfPayloadExtension ext;
-    ASFGuid ext_guid;
-    guint32 sys_info_len;
-
-    if (size < 16 + 2 + 4)
-      goto not_enough_data;
-
-    gst_asf_demux_get_guid (&ext_guid, &data, &size);
-    ext.id = gst_asf_demux_identify_guid (asf_payload_ext_guids, &ext_guid);
-    ext.len = gst_asf_demux_get_uint16 (&data, &size);
-
-    sys_info_len = gst_asf_demux_get_uint32 (&data, &size);
-    GST_LOG ("payload systems info len = %u", sys_info_len);
-    if (!gst_asf_demux_skip_bytes (sys_info_len, &data, &size))
-      goto not_enough_data;
-
-    esp.payload_extensions[i] = ext;
-  }
-
-  GST_LOG ("bytes read: %u/%u", (guint) (data - data_start), obj_size);
-
-  /* there might be an optional STREAM_INFO object here now; if not, we
-   * should have parsed the corresponding stream info object already (since
-   * we are parsing the extended stream properties objects delayed) */
-  if (size == 0) {
-    stream = gst_asf_demux_get_stream (demux, stream_num);
-    goto done;
-  }
-
-  if (size < ASF_OBJECT_HEADER_SIZE)
-    goto not_enough_data;
-
-  /* get size of the stream object */
-  if (!asf_demux_peek_object (demux, data, size, &stream_obj, TRUE))
-    goto corrupted_stream;
-
-  if (stream_obj.id != ASF_OBJ_STREAM)
-    goto expected_stream_object;
-
-  if (stream_obj.size < ASF_OBJECT_HEADER_SIZE ||
-      stream_obj.size > (10 * 1024 * 1024))
-    goto not_enough_data;
-
-  gst_asf_demux_skip_bytes (ASF_OBJECT_HEADER_SIZE, &data, &size);
-
-  /* process this stream object later after all the other 'normal' ones
-   * have been processed (since the others are more important/non-hidden) */
-  len = stream_obj.size - ASF_OBJECT_HEADER_SIZE;
-  if (!gst_asf_demux_get_bytes (&stream_obj_data, len, &data, &size))
-    goto not_enough_data;
-
-  /* parse stream object */
-  stream = gst_asf_demux_parse_stream_object (demux, stream_obj_data, len);
-  g_free (stream_obj_data);
-
-done:
-
-  if (stream) {
-    stream->ext_props = esp;
-
-    /* try to set the framerate */
-    if (stream->is_video && stream->caps) {
-      GValue framerate = { 0 };
-      GstStructure *s;
-      gint num, denom;
-
-      g_value_init (&framerate, GST_TYPE_FRACTION);
-
-      num = GST_SECOND / 100;
-      denom = esp.avg_time_per_frame;
-      if (denom == 0) {
-        /* avoid division by 0, assume 25/1 framerate */
-        denom = GST_SECOND / 2500;
-      }
-
-      gst_value_set_fraction (&framerate, num, denom);
-
-      stream->caps = gst_caps_make_writable (stream->caps);
-      s = gst_caps_get_structure (stream->caps, 0);
-      gst_structure_set_value (s, "framerate", &framerate);
-      g_value_unset (&framerate);
-      GST_DEBUG_OBJECT (demux, "setting framerate of %d/%d = %f",
-          num, denom, ((gdouble) num) / denom);
-    }
-
-    /* add language info now if we have it */
-    if (stream->ext_props.lang_idx < demux->num_languages) {
-      if (stream->pending_tags == NULL)
-        stream->pending_tags = gst_tag_list_new_empty ();
-      GST_LOG_OBJECT (demux, "stream %u has language '%s'", stream->id,
-          demux->languages[stream->ext_props.lang_idx]);
-      gst_tag_list_add (stream->pending_tags, GST_TAG_MERGE_APPEND,
-          GST_TAG_LANGUAGE_CODE, demux->languages[stream->ext_props.lang_idx],
-          NULL);
-    }
-  } else if (gst_asf_demux_is_unknown_stream (demux, stream_num)) {
-    GST_WARNING_OBJECT (demux, "Ext. stream properties for unknown stream");
-  }
-
-  if (!stream)
-    g_free (esp.payload_extensions);
-
-  return GST_FLOW_OK;
-
-  /* Errors */
-not_enough_data:
-  {
-    GST_WARNING_OBJECT (demux, "short read parsing ext stream props object!");
-    g_free (esp.payload_extensions);
-    return GST_FLOW_OK;         /* not absolutely fatal */
-  }
-expected_stream_object:
-  {
-    GST_WARNING_OBJECT (demux, "error parsing extended stream properties "
-        "object: expected embedded stream object, but got %s object instead!",
-        gst_asf_get_guid_nick (asf_object_guids, stream_obj.id));
-    g_free (esp.payload_extensions);
-    return GST_FLOW_OK;         /* not absolutely fatal */
-  }
-corrupted_stream:
-  {
-    GST_WARNING_OBJECT (demux, "Corrupted stream");
-    g_free (esp.payload_extensions);
-    return GST_FLOW_ERROR;
-  }
-}
-
-static const gchar *
-gst_asf_demux_push_obj (GstASFDemux * demux, guint32 obj_id)
-{
-  const gchar *nick;
-
-  nick = gst_asf_get_guid_nick (asf_object_guids, obj_id);
-  if (g_str_has_prefix (nick, "ASF_OBJ_"))
-    nick += strlen ("ASF_OBJ_");
-
-  if (demux->objpath == NULL) {
-    demux->objpath = g_strdup (nick);
-  } else {
-    gchar *newpath;
-
-    newpath = g_strdup_printf ("%s/%s", demux->objpath, nick);
-    g_free (demux->objpath);
-    demux->objpath = newpath;
-  }
-
-  return (const gchar *) demux->objpath;
-}
-
-static void
-gst_asf_demux_pop_obj (GstASFDemux * demux)
-{
-  gchar *s;
-
-  if ((s = g_strrstr (demux->objpath, "/"))) {
-    *s = '\0';
-  } else {
-    g_free (demux->objpath);
-    demux->objpath = NULL;
-  }
-}
-
-static void
-gst_asf_demux_process_queued_extended_stream_objects (GstASFDemux * demux)
-{
-  GSList *l;
-  guint i;
-
-  /* Parse the queued extended stream property objects and add the info
-   * to the existing streams or add the new embedded streams, but without
-   * activating them yet */
-  GST_LOG_OBJECT (demux, "%u queued extended stream properties objects",
-      g_slist_length (demux->ext_stream_props));
-
-  for (l = demux->ext_stream_props, i = 0; l != NULL; l = l->next, ++i) {
-    GstBuffer *buf = GST_BUFFER (l->data);
-    GstMapInfo map;
-
-    gst_buffer_map (buf, &map, GST_MAP_READ);
-
-    GST_LOG_OBJECT (demux, "parsing ext. stream properties object #%u", i);
-    gst_asf_demux_process_ext_stream_props (demux, map.data, map.size);
-    gst_buffer_unmap (buf, &map);
-    gst_buffer_unref (buf);
-  }
-  g_slist_free (demux->ext_stream_props);
-  demux->ext_stream_props = NULL;
-}
-
-#if 0
-static void
-gst_asf_demux_activate_ext_props_streams (GstASFDemux * demux)
-{
-  guint i, j;
-
-  for (i = 0; i < demux->num_streams; ++i) {
-    AsfStream *stream;
-    gboolean is_hidden;
-    GSList *x;
-
-    stream = &demux->stream[i];
-
-    GST_LOG_OBJECT (demux, "checking  stream %2u", stream->id);
-
-    if (stream->active) {
-      GST_LOG_OBJECT (demux, "stream %2u is already activated", stream->id);
-      continue;
-    }
-
-    is_hidden = FALSE;
-    for (x = demux->mut_ex_streams; x != NULL; x = x->next) {
-      guint8 *mes;
-
-      /* check for each mutual exclusion whether it affects this stream */
-      for (mes = (guint8 *) x->data; mes != NULL && *mes != 0xff; ++mes) {
-        if (*mes == stream->id) {
-          /* if yes, check if we've already added streams that are mutually
-           * exclusive with the stream we're about to add */
-          for (mes = (guint8 *) x->data; mes != NULL && *mes != 0xff; ++mes) {
-            for (j = 0; j < demux->num_streams; ++j) {
-              /* if the broadcast flag is set, assume the hidden streams aren't
-               * actually streamed and hide them (or playbin won't work right),
-               * otherwise assume their data is available */
-              if (demux->stream[j].id == *mes && demux->broadcast) {
-                is_hidden = TRUE;
-                GST_LOG_OBJECT (demux, "broadcast stream ID %d to be added is "
-                    "mutually exclusive with already existing stream ID %d, "
-                    "hiding stream", stream->id, demux->stream[j].id);
-                goto next;
-              }
-            }
-          }
-          break;
-        }
-      }
-    }
-
-  next:
-
-    /* FIXME: we should do stream activation based on preroll data in
-     * streaming mode too */
-    if (demux->streaming && !is_hidden)
-      gst_asf_demux_activate_stream (demux, stream);
-  }
-}
-#endif
-
-static GstFlowReturn
-gst_asf_demux_process_object (GstASFDemux * demux, guint8 ** p_data,
-    guint64 * p_size)
-{
-  GstFlowReturn ret = GST_FLOW_OK;
-  AsfObject obj;
-  guint64 obj_data_size;
-
-  if (*p_size < ASF_OBJECT_HEADER_SIZE)
-    return ASF_FLOW_NEED_MORE_DATA;
-
-  if (!asf_demux_peek_object (demux, *p_data, ASF_OBJECT_HEADER_SIZE, &obj,
-          TRUE))
-    return GST_FLOW_ERROR;
-  gst_asf_demux_skip_bytes (ASF_OBJECT_HEADER_SIZE, p_data, p_size);
-
-  obj_data_size = obj.size - ASF_OBJECT_HEADER_SIZE;
-
-  if (*p_size < obj_data_size)
-    return ASF_FLOW_NEED_MORE_DATA;
-
-  gst_asf_demux_push_obj (demux, obj.id);
-
-  GST_INFO ("%s: size %" G_GUINT64_FORMAT, demux->objpath, obj.size);
-
-  switch (obj.id) {
-    case ASF_OBJ_STREAM:
-      gst_asf_demux_parse_stream_object (demux, *p_data, obj_data_size);
-      ret = GST_FLOW_OK;
-      break;
-    case ASF_OBJ_FILE:
-      ret = gst_asf_demux_process_file (demux, *p_data, obj_data_size);
-      break;
-    case ASF_OBJ_HEADER:
-      ret = gst_asf_demux_process_header (demux, *p_data, obj_data_size);
-      break;
-    case ASF_OBJ_COMMENT:
-      ret = gst_asf_demux_process_comment (demux, *p_data, obj_data_size);
-      break;
-    case ASF_OBJ_HEAD1:
-      ret = gst_asf_demux_process_header_ext (demux, *p_data, obj_data_size);
-      break;
-    case ASF_OBJ_BITRATE_PROPS:
-      ret =
-          gst_asf_demux_process_bitrate_props_object (demux, *p_data,
-          obj_data_size);
-      break;
-    case ASF_OBJ_EXT_CONTENT_DESC:
-      ret =
-          gst_asf_demux_process_ext_content_desc (demux, *p_data,
-          obj_data_size);
-      break;
-    case ASF_OBJ_METADATA_OBJECT:
-      ret = gst_asf_demux_process_metadata (demux, *p_data, obj_data_size);
-      break;
-    case ASF_OBJ_EXTENDED_STREAM_PROPS:{
-      GstBuffer *buf;
-
-      /* process these later, we might not have parsed the corresponding
-       * stream object yet */
-      GST_LOG ("%s: queued for later parsing", demux->objpath);
-      buf = gst_buffer_new_and_alloc (obj_data_size);
-      gst_buffer_fill (buf, 0, *p_data, obj_data_size);
-      demux->ext_stream_props = g_slist_append (demux->ext_stream_props, buf);
-      ret = GST_FLOW_OK;
-      break;
-    }
-    case ASF_OBJ_LANGUAGE_LIST:
-      ret = gst_asf_demux_process_language_list (demux, *p_data, obj_data_size);
-      break;
-    case ASF_OBJ_ADVANCED_MUTUAL_EXCLUSION:
-      ret = gst_asf_demux_process_advanced_mutual_exclusion (demux, *p_data,
-          obj_data_size);
-      break;
-    case ASF_OBJ_SIMPLE_INDEX:
-      ret = gst_asf_demux_process_simple_index (demux, *p_data, obj_data_size);
-      break;
-    case ASF_OBJ_CONTENT_ENCRYPTION:
-    case ASF_OBJ_EXT_CONTENT_ENCRYPTION:
-    case ASF_OBJ_DIGITAL_SIGNATURE_OBJECT:
-    case ASF_OBJ_UNKNOWN_ENCRYPTION_OBJECT:
-      goto error_encrypted;
-    case ASF_OBJ_CONCEAL_NONE:
-    case ASF_OBJ_HEAD2:
-    case ASF_OBJ_UNDEFINED:
-    case ASF_OBJ_CODEC_COMMENT:
-    case ASF_OBJ_INDEX:
-    case ASF_OBJ_PADDING:
-    case ASF_OBJ_BITRATE_MUTEX:
-    case ASF_OBJ_COMPATIBILITY:
-    case ASF_OBJ_INDEX_PLACEHOLDER:
-    case ASF_OBJ_INDEX_PARAMETERS:
-    case ASF_OBJ_STREAM_PRIORITIZATION:
-    case ASF_OBJ_SCRIPT_COMMAND:
-    case ASF_OBJ_METADATA_LIBRARY_OBJECT:
-    default:
-      /* Unknown/unhandled object, skip it and hope for the best */
-      GST_INFO ("%s: skipping object", demux->objpath);
-      ret = GST_FLOW_OK;
-      break;
-  }
-
-  /* this can't fail, we checked the number of bytes available before */
-  gst_asf_demux_skip_bytes (obj_data_size, p_data, p_size);
-
-  GST_LOG ("%s: ret = %s", demux->objpath, gst_asf_get_flow_name (ret));
-
-  gst_asf_demux_pop_obj (demux);
-
-  return ret;
-
-/* ERRORS */
-error_encrypted:
-  {
-    GST_ELEMENT_ERROR (demux, STREAM, DECRYPT, (NULL), (NULL));
-    return GST_FLOW_ERROR;
-  }
-}
-
-static void
-gst_asf_demux_descramble_buffer (GstASFDemux * demux, AsfStream * stream,
-    GstBuffer ** p_buffer)
-{
-  GstBuffer *descrambled_buffer;
-  GstBuffer *scrambled_buffer;
-  GstBuffer *sub_buffer;
-  guint offset;
-  guint off;
-  guint row;
-  guint col;
-  guint idx;
-
-  /* descrambled_buffer is initialised in the first iteration */
-  descrambled_buffer = NULL;
-  scrambled_buffer = *p_buffer;
-
-  if (gst_buffer_get_size (scrambled_buffer) <
-      stream->ds_packet_size * stream->span)
-    return;
-
-  for (offset = 0; offset < gst_buffer_get_size (scrambled_buffer);
-      offset += stream->ds_chunk_size) {
-    off = offset / stream->ds_chunk_size;
-    row = off / stream->span;
-    col = off % stream->span;
-    idx = row + col * stream->ds_packet_size / stream->ds_chunk_size;
-    GST_DEBUG ("idx=%u, row=%u, col=%u, off=%u, ds_chunk_size=%u", idx, row,
-        col, off, stream->ds_chunk_size);
-    GST_DEBUG ("scrambled buffer size=%" G_GSIZE_FORMAT
-        ", span=%u, packet_size=%u", gst_buffer_get_size (scrambled_buffer),
-        stream->span, stream->ds_packet_size);
-    GST_DEBUG ("gst_buffer_get_size (scrambled_buffer) = %" G_GSIZE_FORMAT,
-        gst_buffer_get_size (scrambled_buffer));
-    sub_buffer =
-        gst_buffer_copy_region (scrambled_buffer, GST_BUFFER_COPY_MEMORY,
-        idx * stream->ds_chunk_size, stream->ds_chunk_size);
-    if (!offset) {
-      descrambled_buffer = sub_buffer;
-    } else {
-      descrambled_buffer = gst_buffer_append (descrambled_buffer, sub_buffer);
-    }
-  }
-
-  GST_BUFFER_TIMESTAMP (descrambled_buffer) =
-      GST_BUFFER_TIMESTAMP (scrambled_buffer);
-  GST_BUFFER_DURATION (descrambled_buffer) =
-      GST_BUFFER_DURATION (scrambled_buffer);
-  GST_BUFFER_OFFSET (descrambled_buffer) = GST_BUFFER_OFFSET (scrambled_buffer);
-  GST_BUFFER_OFFSET_END (descrambled_buffer) =
-      GST_BUFFER_OFFSET_END (scrambled_buffer);
-
-  /* FIXME/CHECK: do we need to transfer buffer flags here too? */
-
-  gst_buffer_unref (scrambled_buffer);
-  *p_buffer = descrambled_buffer;
-}
-
-static gboolean
-gst_asf_demux_element_send_event (GstElement * element, GstEvent * event)
-{
-  GstASFDemux *demux = GST_ASF_DEMUX (element);
-  gint i;
-
-  GST_DEBUG ("handling element event of type %s", GST_EVENT_TYPE_NAME (event));
-
-  for (i = 0; i < demux->num_streams; ++i) {
-    gst_event_ref (event);
-    if (gst_asf_demux_handle_src_event (demux->stream[i].pad,
-            GST_OBJECT_CAST (element), event)) {
-      gst_event_unref (event);
-      return TRUE;
-    }
-  }
-
-  gst_event_unref (event);
-  return FALSE;
-}
-
-/* takes ownership of the passed event */
-static gboolean
-gst_asf_demux_send_event_unlocked (GstASFDemux * demux, GstEvent * event)
-{
-  gboolean ret = TRUE;
-  gint i;
-
-  GST_DEBUG_OBJECT (demux, "sending %s event to all source pads",
-      GST_EVENT_TYPE_NAME (event));
-
-  for (i = 0; i < demux->num_streams; ++i) {
-    gst_event_ref (event);
-    ret &= gst_pad_push_event (demux->stream[i].pad, event);
-  }
-  gst_event_unref (event);
-  return ret;
-}
-
-static gboolean
-gst_asf_demux_handle_src_query (GstPad * pad, GstObject * parent,
-    GstQuery * query)
-{
-  GstASFDemux *demux;
-  gboolean res = FALSE;
-
-  demux = GST_ASF_DEMUX (parent);
-
-  GST_DEBUG ("handling %s query",
-      gst_query_type_get_name (GST_QUERY_TYPE (query)));
-
-  switch (GST_QUERY_TYPE (query)) {
-    case GST_QUERY_DURATION:
-    {
-      GstFormat format;
-
-      gst_query_parse_duration (query, &format, NULL);
-
-      if (format != GST_FORMAT_TIME) {
-        GST_LOG ("only support duration queries in TIME format");
-        break;
-      }
-
-      res = gst_pad_query_default (pad, parent, query);
-      if (!res) {
-        GST_OBJECT_LOCK (demux);
-
-        if (demux->segment.duration != GST_CLOCK_TIME_NONE) {
-          GST_LOG ("returning duration: %" GST_TIME_FORMAT,
-              GST_TIME_ARGS (demux->segment.duration));
-
-          gst_query_set_duration (query, GST_FORMAT_TIME,
-              demux->segment.duration);
-
-          res = TRUE;
-        } else {
-          GST_LOG ("duration not known yet");
-        }
-
-        GST_OBJECT_UNLOCK (demux);
-      }
-      break;
-    }
-
-    case GST_QUERY_POSITION:{
-      GstFormat format;
-
-      gst_query_parse_position (query, &format, NULL);
-
-      if (format != GST_FORMAT_TIME) {
-        GST_LOG ("only support position queries in TIME format");
-        break;
-      }
-
-      GST_OBJECT_LOCK (demux);
-
-      if (demux->segment.position != GST_CLOCK_TIME_NONE) {
-        GST_LOG ("returning position: %" GST_TIME_FORMAT,
-            GST_TIME_ARGS (demux->segment.position));
-
-        gst_query_set_position (query, GST_FORMAT_TIME,
-            demux->segment.position);
-
-        res = TRUE;
-      } else {
-        GST_LOG ("position not known yet");
-      }
-
-      GST_OBJECT_UNLOCK (demux);
-      break;
-    }
-
-    case GST_QUERY_SEEKING:{
-      GstFormat format;
-
-      gst_query_parse_seeking (query, &format, NULL, NULL, NULL);
-      if (format == GST_FORMAT_TIME) {
-        gint64 duration;
-
-        GST_OBJECT_LOCK (demux);
-        duration = demux->segment.duration;
-        GST_OBJECT_UNLOCK (demux);
-
-        if (!demux->streaming || !demux->seekable) {
-          gst_query_set_seeking (query, GST_FORMAT_TIME, demux->seekable, 0,
-              duration);
-          res = TRUE;
-        } else {
-          GstFormat fmt;
-          gboolean seekable;
-
-          /* try upstream first in TIME */
-          res = gst_pad_query_default (pad, parent, query);
-
-          gst_query_parse_seeking (query, &fmt, &seekable, NULL, NULL);
-          GST_LOG_OBJECT (demux, "upstream %s seekable %d",
-              GST_STR_NULL (gst_format_get_name (fmt)), seekable);
-          /* if no luck, maybe in BYTES */
-          if (!seekable || fmt != GST_FORMAT_TIME) {
-            GstQuery *q;
-
-            q = gst_query_new_seeking (GST_FORMAT_BYTES);
-            if ((res = gst_pad_peer_query (demux->sinkpad, q))) {
-              gst_query_parse_seeking (q, &fmt, &seekable, NULL, NULL);
-              GST_LOG_OBJECT (demux, "upstream %s seekable %d",
-                  GST_STR_NULL (gst_format_get_name (fmt)), seekable);
-              if (fmt != GST_FORMAT_BYTES)
-                seekable = FALSE;
-            }
-            gst_query_unref (q);
-            gst_query_set_seeking (query, GST_FORMAT_TIME, seekable, 0,
-                duration);
-            res = TRUE;
-          }
-        }
-      } else
-        GST_LOG_OBJECT (demux, "only support seeking in TIME format");
-      break;
-    }
-
-    case GST_QUERY_LATENCY:
-    {
-      gboolean live;
-      GstClockTime min, max;
-
-      /* preroll delay does not matter in non-live pipeline,
-       * but we might end up in a live (rtsp) one ... */
-
-      /* first forward */
-      res = gst_pad_query_default (pad, parent, query);
-      if (!res)
-        break;
-
-      gst_query_parse_latency (query, &live, &min, &max);
-
-      GST_DEBUG_OBJECT (demux, "Peer latency: live %d, min %"
-          GST_TIME_FORMAT " max %" GST_TIME_FORMAT, live,
-          GST_TIME_ARGS (min), GST_TIME_ARGS (max));
-
-      GST_OBJECT_LOCK (demux);
-      min += demux->latency;
-      if (max != -1)
-        max += demux->latency;
-      GST_OBJECT_UNLOCK (demux);
-
-      gst_query_set_latency (query, live, min, max);
-      break;
-    }
-    case GST_QUERY_SEGMENT:
-    {
-      GstFormat format;
-      gint64 start, stop;
-
-      format = demux->segment.format;
-
-      start =
-          gst_segment_to_stream_time (&demux->segment, format,
-          demux->segment.start);
-      if ((stop = demux->segment.stop) == -1)
-        stop = demux->segment.duration;
-      else
-        stop = gst_segment_to_stream_time (&demux->segment, format, stop);
-
-      gst_query_set_segment (query, demux->segment.rate, format, start, stop);
-      res = TRUE;
-      break;
-    }
-    default:
-      res = gst_pad_query_default (pad, parent, query);
-      break;
-  }
-
-  return res;
-}
-
-static void
-gst_asf_demux_finalize (GObject * object)
-{
-  GstASFDemux *demux = GST_ASF_DEMUX (object);
-
-  if (demux->metadata)
-    gst_caps_unref (demux->metadata);
-  demux->metadata = NULL;
-
-  if (demux->global_metadata)
-    gst_structure_free (demux->global_metadata);
-  demux->global_metadata = NULL;
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static GstStateChangeReturn
-gst_asf_demux_change_state (GstElement * element, GstStateChange transition)
-{
-  GstASFDemux *demux = GST_ASF_DEMUX (element);
-  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
-
-  switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:{
-      gst_segment_init (&demux->segment, GST_FORMAT_TIME);
-      demux->need_newsegment = TRUE;
-      demux->segment_running = FALSE;
-      demux->keyunit_sync = FALSE;
-      demux->accurate = FALSE;
-      demux->adapter = gst_adapter_new ();
-      demux->data_size = 0;
-      demux->data_offset = 0;
-      demux->index_offset = 0;
-      demux->base_offset = 0;
-      demux->flowcombiner = gst_flow_combiner_new ();
-
-      break;
-    }
-    default:
-      break;
-  }
-
-  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-  if (ret == GST_STATE_CHANGE_FAILURE)
-    return ret;
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      gst_asf_demux_reset (demux, FALSE);
-      break;
-
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      gst_asf_demux_reset (demux, FALSE);
-      gst_flow_combiner_free (demux->flowcombiner);
-      demux->flowcombiner = NULL;
-      break;
-    default:
-      break;
-  }
-
-  return ret;
-}
diff --git a/gst/asfdemux/gstasfdemux.h b/gst/asfdemux/gstasfdemux.h
deleted file mode 100644 (file)
index 841b21a..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * 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 __ASF_DEMUX_H__
-#define __ASF_DEMUX_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstadapter.h>
-#include <gst/base/gstflowcombiner.h>
-
-#include "asfheaders.h"
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_ASF_DEMUX \
-  (gst_asf_demux_get_type())
-#define GST_ASF_DEMUX(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ASF_DEMUX,GstASFDemux))
-#define GST_ASF_DEMUX_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_ASF_DEMUX,GstASFDemuxClass))
-#define GST_IS_ASF_DEMUX(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ASF_DEMUX))
-#define GST_IS_ASF_DEMUX_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_ASF_DEMUX))
-
-typedef struct _GstASFDemux GstASFDemux;
-typedef struct _GstASFDemuxClass GstASFDemuxClass;
-typedef enum _GstASF3DMode GstASF3DMode;
-
-typedef struct {
-  guint32      packet;
-  guint16      count;
-} AsfSimpleIndexEntry;
-
-typedef struct {
-  AsfPayloadExtensionID   id : 16;  /* extension ID; the :16 makes sure the
-                                     * struct gets packed into 4 bytes       */
-  guint16                 len;      /* save this so we can skip unknown IDs  */
-} AsfPayloadExtension;
-
-/*
- * 3D Types for Media play
- */
-enum _GstASF3DMode
-{
-  GST_ASF_3D_NONE = 0x00,
-
-  //added, interim format - half
-  GST_ASF_3D_SIDE_BY_SIDE_HALF_LR = 0x01,
-  GST_ASF_3D_SIDE_BY_SIDE_HALF_RL = 0x02,
-  GST_ASF_3D_TOP_AND_BOTTOM_HALF_LR = 0x03,
-  GST_ASF_3D_TOP_AND_BOTTOM_HALF_RL = 0x04,
-  GST_ASF_3D_DUAL_STREAM = 0x0D,                  /*< Full format*/
-};
-
-typedef struct
-{
-  gboolean        valid;               /* TRUE if structure is valid/filled */
-
-  GstClockTime    start_time;
-  GstClockTime    end_time;
-  GstClockTime    avg_time_per_frame;
-  guint32         data_bitrate;
-  guint32         buffer_size;
-  guint32         intial_buf_fullness;
-  guint32         data_bitrate2;
-  guint32         buffer_size2;
-  guint32         intial_buf_fullness2;
-  guint32         max_obj_size;
-  guint32         flags;
-  guint16         lang_idx;
-
-  /* may be NULL if there are no extensions; otherwise, terminated by
-   * an AsfPayloadExtension record with len 0 */
-  AsfPayloadExtension  *payload_extensions;
-
-  /* missing: stream names */
-} AsfStreamExtProps;
-
-typedef struct
-{
-  AsfStreamType      type;
-
-  gboolean           active;  /* if the stream has been activated (pad added) */
-
-  GstPad     *pad;
-  guint16     id;
-
-  /* video-only */
-  gboolean    is_video;
-  gboolean    fps_known;
-
-  GstCaps    *caps;
-
-  GstBuffer *streamheader;
-
-  GstTagList *pending_tags;
-
-  gboolean    discont;
-  gboolean    first_buffer;
-
-  /* Descrambler settings */
-  guint8               span;
-  guint16              ds_packet_size;
-  guint16              ds_chunk_size;
-  guint16              ds_data_size;
-
-  /* for new parsing code */
-  GArray         *payloads;  /* pending payloads */
-
-  /* Video stream PAR & interlacing */
-  guint8       par_x;
-  guint8       par_y;
-  gboolean      interlaced;
-
-  /* For reverse playback */
-  gboolean     reverse_kf_ready; /* Found complete KF payload*/
-  GArray       *payloads_rev; /* Temp queue for storing multiple payloads of packet*/
-  gint         kf_pos; /* KF position in payload queue. Payloads from this pos will be pushed */
-
-  /* extended stream properties (optional) */
-  AsfStreamExtProps  ext_props;
-
-  gboolean     inspect_payload;
-} AsfStream;
-
-typedef enum {
-  GST_ASF_DEMUX_STATE_HEADER,
-  GST_ASF_DEMUX_STATE_DATA,
-  GST_ASF_DEMUX_STATE_INDEX
-} GstASFDemuxState;
-
-#define GST_ASF_DEMUX_IS_REVERSE_PLAYBACK(seg) (seg.rate < 0.0? TRUE:FALSE)
-
-#define GST_ASF_DEMUX_NUM_VIDEO_PADS   16
-#define GST_ASF_DEMUX_NUM_AUDIO_PADS   32
-#define GST_ASF_DEMUX_NUM_STREAMS      32
-#define GST_ASF_DEMUX_NUM_STREAM_IDS  127
-
-struct _GstASFDemux {
-  GstElement        element;
-
-  GstPad            *sinkpad;
-
-  gboolean           have_group_id;
-  guint              group_id;
-
-  GstAdapter        *adapter;
-  GstTagList        *taglist;
-  GstASFDemuxState   state;
-
-  /* byte offset where the asf starts, which might not be zero on chained
-   * asfs, index_offset and data_offset already are 'offseted' by base_offset */
-  guint64            base_offset;
-
-  guint64            index_offset; /* byte offset where index might be, or 0   */
-  guint64            data_offset;  /* byte offset where packets start          */
-  guint64            data_size;    /* total size of packet data in bytes, or 0 */
-  guint64            num_packets;  /* total number of data packets, or 0       */
-  gint64             packet;       /* current packet                           */
-  guint              speed_packets; /* Known number of packets to get in one go*/
-
-  gchar              **languages;
-  guint                num_languages;
-
-  GstCaps             *metadata;         /* metadata, for delayed parsing; one
-                                          * structure ('stream-N') per stream */
-  GstStructure       *global_metadata;  /* metadata which isn't specific to one stream */
-  GSList              *ext_stream_props; /* for delayed processing (buffers) */
-  GSList              *mut_ex_streams;   /* mutually exclusive streams */
-
-  guint32              num_audio_streams;
-  guint32              num_video_streams;
-  guint32              num_streams;
-  AsfStream            stream[GST_ASF_DEMUX_NUM_STREAMS];
-  gboolean             activated_streams;
-  GstFlowCombiner     *flowcombiner;
-
-  /* for chained asf handling, we need to hold the old asf streams until
-   * we detect the new ones */
-  AsfStream            old_stream[GST_ASF_DEMUX_NUM_STREAMS];
-  gboolean             old_num_streams;
-
-  GstClockTime         first_ts;        /* smallest timestamp found        */
-
-  guint32              packet_size;
-  guint64              play_time;
-
-  guint64              preroll;
-
-  gboolean             seekable;
-  gboolean             broadcast;
-
-  GstSegment           segment;          /* configured play segment                 */
-  gboolean             keyunit_sync;
-  gboolean             accurate;
-
-  gboolean             need_newsegment;  /* do we need to send a new-segment event? */
-  guint32              segment_seqnum;   /* if the new segment must have this seqnum */
-  GstClockTime         segment_ts;       /* streaming; timestamp for segment start */
-  GstSegment           in_segment;       /* streaming; upstream segment info */
-  GstClockTime         in_gap;           /* streaming; upstream initial segment gap for interpolation */
-  gboolean             segment_running;  /* if we've started the current segment    */
-  gboolean             streaming;        /* TRUE if we are operating chain-based    */
-  GstClockTime         latency;
-
-  /* for debugging only */
-  gchar               *objpath;
-
-  /* simple index, if available */
-  GstClockTime         sidx_interval;    /* interval between entries in ns */
-  guint                sidx_num_entries; /* number of index entries        */
-  AsfSimpleIndexEntry *sidx_entries;     /* packet number for each entry   */
-
-  GSList              *other_streams;    /* remember streams that are in header but have unknown type */
-
-  /* For reverse playback */
-  gboolean             seek_to_cur_pos; /* Search packets till we reach 'seek' time */
-  gboolean             multiple_payloads; /* Whether packet has multiple payloads */
-
-  /* parsing 3D */
-  GstASF3DMode asf_3D_mode;
-
-  gboolean saw_file_header;
-};
-
-struct _GstASFDemuxClass {
-  GstElementClass parent_class;
-};
-
-GType           gst_asf_demux_get_type (void);
-
-AsfStream     * gst_asf_demux_get_stream (GstASFDemux * demux, guint16 id);
-
-gboolean        gst_asf_demux_is_unknown_stream(GstASFDemux *demux, guint stream_num);
-
-G_END_DECLS
-
-#endif /* __ASF_DEMUX_H__ */
diff --git a/gst/asfdemux/gstasfelement.c b/gst/asfdemux/gstasfelement.c
deleted file mode 100644 (file)
index 3991f48..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <gst/gst.h>
-#include <gst/riff/riff-read.h>
-#include "gst/gst-i18n-plugin.h"
-
-#include "gstasfelements.h"
-
-/* #include "gstasfmux.h" */
-GST_DEBUG_CATEGORY_EXTERN (asfdemux_dbg);
-#define GST_CAT_DEFAULT asfdemux_dbg
-
-void
-asf_element_init (GstPlugin * plugin)
-{
-  static gsize res = FALSE;
-  if (g_once_init_enter (&res)) {
-    GST_DEBUG_CATEGORY_INIT (asfdemux_dbg, "asfdemux", 0,
-        "asf demuxer element");
-
-#ifdef ENABLE_NLS
-    GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE,
-        LOCALEDIR);
-    bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
-    bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-#endif /* ENABLE_NLS */
-    gst_riff_init ();
-    g_once_init_leave (&res, TRUE);
-  }
-
-}
diff --git a/gst/asfdemux/gstasfelements.h b/gst/asfdemux/gstasfelements.h
deleted file mode 100644 (file)
index 5495322..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * 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_ASF_ELEMENTS_H__
-#define __GST_ASF_ELEMENTS_H__
-
-
-#include <gst/gst.h>
-#include <gst/video/video.h>
-
-
-G_BEGIN_DECLS
-
-void asf_element_init (GstPlugin * plugin);
-
-GST_ELEMENT_REGISTER_DECLARE (asfdemux);
-GST_ELEMENT_REGISTER_DECLARE (rtspwms);
-GST_ELEMENT_REGISTER_DECLARE (rtpasfdepay);
-
-G_END_DECLS
-
-#endif /* __GST_ASF_ELEMENTS_H__ */
diff --git a/gst/asfdemux/gstrtpasfdepay.c b/gst/asfdemux/gstrtpasfdepay.c
deleted file mode 100644 (file)
index c9e2472..0000000
+++ /dev/null
@@ -1,546 +0,0 @@
-/* GStreamer RTP ASF depayloader
- * Copyright (C) 2006 Tim-Philipp Müller  <tim centricular net>
- *               2009 Wim Taymans  <wim.taymans@gmail.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 "gstasfelements.h"
-#include "gstrtpasfdepay.h"
-#include <gst/rtp/gstrtpbuffer.h>
-
-#include <string.h>
-#include <stdlib.h>
-
-GST_DEBUG_CATEGORY_STATIC (rtpasfdepayload_debug);
-#define GST_CAT_DEFAULT rtpasfdepayload_debug
-
-static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/x-ms-asf")
-    );
-
-/* Other parameters: config, maxps */
-#define SINK_CAPS \
-  "application/x-rtp, "                                          \
-  "media = (string) { \"application\", \"video\", \"audio\" }, " \
-  "payload = (int) " GST_RTP_PAYLOAD_DYNAMIC_STRING ", "         \
-  "clock-rate = (int) [1, MAX ], "                               \
-  "encoding-name = (string) \"X-ASF-PF\""
-
-static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (SINK_CAPS)
-    );
-
-#define gst_rtp_asf_depay_parent_class parent_class
-G_DEFINE_TYPE (GstRtpAsfDepay, gst_rtp_asf_depay, GST_TYPE_RTP_BASE_DEPAYLOAD);
-GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (rtpasfdepay, "rtpasfdepay",
-    GST_RANK_MARGINAL, GST_TYPE_RTP_ASF_DEPAY, asf_element_init (plugin));
-
-static void gst_rtp_asf_depay_finalize (GObject * object);
-
-static GstStateChangeReturn gst_rtp_asf_depay_change_state (GstElement *
-    element, GstStateChange transition);
-
-static gboolean gst_rtp_asf_depay_setcaps (GstRTPBaseDepayload * depay,
-    GstCaps * caps);
-static GstBuffer *gst_rtp_asf_depay_process (GstRTPBaseDepayload * basedepay,
-    GstBuffer * buf);
-
-static void
-gst_rtp_asf_depay_class_init (GstRtpAsfDepayClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-  GstRTPBaseDepayloadClass *gstrtpbasedepayload_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-  gstrtpbasedepayload_class = (GstRTPBaseDepayloadClass *) klass;
-
-  gst_element_class_add_static_pad_template (gstelement_class, &src_factory);
-  gst_element_class_add_static_pad_template (gstelement_class, &sink_factory);
-
-  gst_element_class_set_static_metadata (gstelement_class,
-      "RTP ASF packet depayloader", "Codec/Depayloader/Network",
-      "Extracts ASF streams from RTP",
-      "Tim-Philipp Müller <tim centricular net>, "
-      "Wim Taymans <wim.taymans@gmail.com>");
-
-  gobject_class->finalize = gst_rtp_asf_depay_finalize;
-
-  gstelement_class->change_state =
-      GST_DEBUG_FUNCPTR (gst_rtp_asf_depay_change_state);
-
-  gstrtpbasedepayload_class->set_caps =
-      GST_DEBUG_FUNCPTR (gst_rtp_asf_depay_setcaps);
-  gstrtpbasedepayload_class->process =
-      GST_DEBUG_FUNCPTR (gst_rtp_asf_depay_process);
-
-  GST_DEBUG_CATEGORY_INIT (rtpasfdepayload_debug, "rtpasfdepayload", 0,
-      "RTP asf depayloader element");
-}
-
-static void
-gst_rtp_asf_depay_init (GstRtpAsfDepay * depay)
-{
-  depay->adapter = gst_adapter_new ();
-}
-
-static void
-gst_rtp_asf_depay_finalize (GObject * object)
-{
-  GstRtpAsfDepay *depay;
-
-  depay = GST_RTP_ASF_DEPAY (object);
-
-  g_object_unref (depay->adapter);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static const guint8 asf_marker[16] = { 0x30, 0x26, 0xb2, 0x75, 0x8e, 0x66,
-  0xcf, 0x11, 0xa6, 0xd9, 0x00, 0xaa, 0x00, 0x62, 0xce, 0x6c
-};
-
-static gboolean
-gst_rtp_asf_depay_setcaps (GstRTPBaseDepayload * depayload, GstCaps * caps)
-{
-  GstRtpAsfDepay *depay;
-  GstStructure *s;
-  const gchar *config_str, *ps_string;
-  GstBuffer *buf;
-  GstCaps *src_caps;
-  guint8 *headers;
-  gsize headers_len;
-  gint clock_rate;
-
-  depay = GST_RTP_ASF_DEPAY (depayload);
-
-  s = gst_caps_get_structure (caps, 0);
-
-  if (!gst_structure_get_int (s, "clock-rate", &clock_rate) || clock_rate < 0)
-    clock_rate = 1000;
-  depayload->clock_rate = clock_rate;
-
-  /* config contains the asf headers in base64 coding */
-  config_str = gst_structure_get_string (s, "config");
-  if (config_str == NULL || *config_str == '\0')
-    goto no_config;
-
-  ps_string = gst_structure_get_string (s, "maxps");
-  if (ps_string == NULL || *ps_string == '\0')
-    goto no_packetsize;
-
-  if (depay->packet_size) {
-    /* header sent again following seek;
-     * discard to avoid confusing upstream */
-    if (depay->packet_size == atoi (ps_string)) {
-      goto duplicate_header;
-    } else {
-      /* since we should fiddle with downstream state to handle this */
-      goto refuse_renegotiation;
-    }
-  } else
-    depay->packet_size = atoi (ps_string);
-  if (depay->packet_size <= 16)
-    goto invalid_packetsize;
-
-  headers = (guint8 *) g_base64_decode (config_str, &headers_len);
-
-  if (headers == NULL || headers_len < 16
-      || memcmp (headers, asf_marker, 16) != 0)
-    goto invalid_headers;
-
-  src_caps = gst_caps_new_empty_simple ("video/x-ms-asf");
-  gst_pad_set_caps (depayload->srcpad, src_caps);
-  gst_caps_unref (src_caps);
-
-  buf = gst_buffer_new ();
-  gst_buffer_append_memory (buf,
-      gst_memory_new_wrapped (0, headers, headers_len, 0, headers_len, headers,
-          g_free));
-
-  gst_rtp_base_depayload_push (depayload, buf);
-
-  return TRUE;
-
-  /* ERRORS */
-no_config:
-  {
-    GST_WARNING_OBJECT (depay, "caps without 'config' field with asf headers");
-    return FALSE;
-  }
-no_packetsize:
-  {
-    GST_WARNING_OBJECT (depay, "caps without 'maxps' (packet size) field");
-    return FALSE;
-  }
-invalid_packetsize:
-  {
-    GST_WARNING_OBJECT (depay, "packet size %u invalid", depay->packet_size);
-    return FALSE;
-  }
-invalid_headers:
-  {
-    GST_WARNING_OBJECT (depay, "headers don't look like valid ASF headers");
-    g_free (headers);
-    return FALSE;
-  }
-duplicate_header:
-  {
-    GST_DEBUG_OBJECT (depayload, "discarding duplicate header");
-    return TRUE;
-  }
-refuse_renegotiation:
-  {
-    GST_WARNING_OBJECT (depayload, "cannot renegotiate to different header");
-    return FALSE;
-  }
-}
-
-static gint
-field_size (guint8 field)
-{
-  switch (field) {
-      /* DWORD - 32 bits */
-    case 3:
-      return 4;
-
-      /* WORD - 16 bits */
-    case 2:
-      return 2;
-
-      /* BYTE - 8 bits */
-    case 1:
-      return 1;
-
-      /* non-exitent */
-    case 0:
-    default:
-      return 0;
-  }
-}
-
-/* Set the padding field to te correct value as the spec
- * says it should be se to 0 in the rtp packets
- */
-static GstBuffer *
-gst_rtp_asf_depay_update_padding (GstRtpAsfDepay * depayload, GstBuffer * buf)
-{
-  GstBuffer *result;
-  GstMapInfo map;
-  guint8 *data;
-  gint offset = 0;
-  guint8 aux;
-  guint8 seq_type;
-  guint8 pad_type;
-  guint8 pkt_type;
-  gsize plen, padding;
-
-  plen = gst_buffer_get_size (buf);
-  if (plen == depayload->packet_size)
-    return buf;
-
-  padding = depayload->packet_size - plen;
-
-  GST_LOG_OBJECT (depayload,
-      "padding buffer size %" G_GSIZE_FORMAT " to packet size %d", plen,
-      depayload->packet_size);
-
-  result = gst_buffer_new_and_alloc (depayload->packet_size);
-
-  gst_buffer_map (result, &map, GST_MAP_READ);
-  data = map.data;
-  memset (data + plen, 0, padding);
-
-  gst_buffer_extract (buf, 0, data, plen);
-  gst_buffer_unref (buf);
-
-  aux = data[offset++];
-  if (aux & 0x80) {
-    guint8 err_len = 0;
-    if (aux & 0x60) {
-      GST_WARNING_OBJECT (depayload, "Error correction length type should be "
-          "set to 0");
-      /* this packet doesn't follow the spec */
-      gst_buffer_unmap (result, &map);
-      return result;
-    }
-    err_len = aux & 0x0F;
-    offset += err_len;
-
-    aux = data[offset++];
-  }
-  seq_type = (aux >> 1) & 0x3;
-  pad_type = (aux >> 3) & 0x3;
-  pkt_type = (aux >> 5) & 0x3;
-
-  offset += 1;                  /* skip property flags */
-  offset += field_size (pkt_type);      /* skip packet length */
-  offset += field_size (seq_type);      /* skip sequence field */
-
-  /* write padding */
-  switch (pad_type) {
-      /* DWORD */
-    case 3:
-      GST_WRITE_UINT32_LE (&(data[offset]), padding);
-      break;
-
-      /* WORD */
-    case 2:
-      GST_WRITE_UINT16_LE (&(data[offset]), padding);
-      break;
-
-      /* BYTE */
-    case 1:
-      data[offset] = (guint8) padding;
-      break;
-
-      /* non-existent */
-    case 0:
-    default:
-      break;
-  }
-  gst_buffer_unmap (result, &map);
-
-  return result;
-}
-
-/* Docs: 'RTSP Protocol PDF' document from http://sdp.ppona.com/ (page 8) */
-
-static GstBuffer *
-gst_rtp_asf_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf)
-{
-  GstRtpAsfDepay *depay;
-  const guint8 *payload;
-  GstBuffer *outbuf;
-  gboolean S, L, R, D, I;
-  guint payload_len, hdr_len, offset;
-  guint len_offs;
-  GstClockTime timestamp;
-  GstRTPBuffer rtpbuf = { NULL };
-
-  depay = GST_RTP_ASF_DEPAY (depayload);
-
-  /* flush remaining data on discont */
-  if (GST_BUFFER_IS_DISCONT (buf)) {
-    GST_LOG_OBJECT (depay, "got DISCONT");
-    gst_adapter_clear (depay->adapter);
-    depay->discont = TRUE;
-  }
-
-  gst_rtp_buffer_map (buf, GST_MAP_READ, &rtpbuf);
-  timestamp = GST_BUFFER_TIMESTAMP (buf);
-
-  payload_len = gst_rtp_buffer_get_payload_len (&rtpbuf);
-  payload = gst_rtp_buffer_get_payload (&rtpbuf);
-  offset = 0;
-
-  GST_LOG_OBJECT (depay, "got payload len of %u", payload_len);
-
-  do {
-    guint packet_len;
-
-    /* packet header is at least 4 bytes */
-    if (payload_len < 4)
-      goto too_small;
-
-    /*                      1                   2                   3
-     *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
-     * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     * |S|L|R|D|I|RES  | Length/Offset                                 |
-     * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     * | Relative Timestamp (optional)                                 |
-     * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     * | Duration (optional)                                           |
-     * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     * | LocationId (optional)                                         |
-     * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-     *
-     * S: packet contains a keyframe.
-     * L: If 1, Length/Offset contains length, else contains the byte offset
-     *    of the fragment's first byte counted from the beginning of the
-     *    complete ASF data packet.
-     * R: relative timestamp present
-     * D: duration present
-     * I: locationid present
-     */
-
-    S = ((payload[0] & 0x80) != 0);
-    L = ((payload[0] & 0x40) != 0);
-    R = ((payload[0] & 0x20) != 0);
-    D = ((payload[0] & 0x10) != 0);
-    I = ((payload[0] & 0x08) != 0);
-
-    hdr_len = 4;
-
-    len_offs = (payload[1] << 16) | (payload[2] << 8) | payload[3];
-
-    if (R) {
-      GST_DEBUG ("Relative timestamp field present : %u",
-          GST_READ_UINT32_BE (payload + hdr_len));
-      hdr_len += 4;
-    }
-    if (D) {
-      GST_DEBUG ("Duration field present : %u",
-          GST_READ_UINT32_BE (payload + hdr_len));
-      hdr_len += 4;
-    }
-    if (I) {
-      GST_DEBUG ("LocationId field present : %u",
-          GST_READ_UINT32_BE (payload + hdr_len));
-      hdr_len += 4;
-    }
-
-    GST_LOG_OBJECT (depay, "S %d, L %d, R %d, D %d, I %d", S, L, R, D, I);
-    GST_LOG_OBJECT (depay, "payload_len:%d, hdr_len:%d, len_offs:%d",
-        payload_len, hdr_len, len_offs);
-
-    if (payload_len < hdr_len)
-      goto too_small;
-
-    /* skip headers */
-    payload_len -= hdr_len;
-    payload += hdr_len;
-    offset += hdr_len;
-
-    if (L) {
-      /* L bit set, len contains the length of the packet */
-      packet_len = len_offs;
-    } else {
-      /* else it contains an offset which we don't handle yet */
-      GST_LOG_OBJECT (depay, "We have a fragmented packet");
-      packet_len = payload_len;
-    }
-
-    if (packet_len > payload_len)
-      packet_len = payload_len;
-
-    GST_LOG_OBJECT (depay, "packet len %u, payload len %u, packet_size:%u",
-        packet_len, payload_len, depay->packet_size);
-
-    if (!L) {
-      guint available;
-      GstBuffer *sub;
-
-      /* Fragmented packet handling */
-      outbuf = NULL;
-
-      if (len_offs == (available = gst_adapter_available (depay->adapter))) {
-        /* fragment aligns with what we have, add it */
-        GST_LOG_OBJECT (depay, "collecting fragment");
-        sub =
-            gst_rtp_buffer_get_payload_subbuffer (&rtpbuf, offset, packet_len);
-        gst_adapter_push (depay->adapter, sub);
-        /* RTP marker bit M is set if this is last fragment */
-        if (gst_rtp_buffer_get_marker (&rtpbuf)) {
-          GST_LOG_OBJECT (depay, "last fragment, assembling packet");
-          outbuf =
-              gst_adapter_take_buffer (depay->adapter, available + packet_len);
-        }
-      } else {
-        if (available) {
-          GST_WARNING_OBJECT (depay, "Offset doesn't match previous data?!");
-          GST_DEBUG_OBJECT (depay, "clearing for re-sync");
-          gst_adapter_clear (depay->adapter);
-        } else
-          GST_DEBUG_OBJECT (depay, "waiting for start of packet");
-      }
-    } else {
-      GST_LOG_OBJECT (depay, "collecting packet");
-      outbuf =
-          gst_rtp_buffer_get_payload_subbuffer (&rtpbuf, offset, packet_len);
-    }
-
-    /* If we haven't completed a full ASF packet, return */
-    if (!outbuf)
-      return NULL;
-
-    outbuf = gst_rtp_asf_depay_update_padding (depay, outbuf);
-
-    if (!S)
-      GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DELTA_UNIT);
-
-    if (depay->discont) {
-      GST_LOG_OBJECT (depay, "setting DISCONT");
-      GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
-      depay->discont = FALSE;
-    }
-
-    GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
-
-    gst_rtp_base_depayload_push (depayload, outbuf);
-
-    /* only apply the timestamp to the first buffer of this packet */
-    timestamp = -1;
-
-    /* skip packet data */
-    payload += packet_len;
-    offset += packet_len;
-    payload_len -= packet_len;
-  } while (payload_len > 0);
-
-  gst_rtp_buffer_unmap (&rtpbuf);
-
-  return NULL;
-
-/* ERRORS */
-too_small:
-  {
-    gst_rtp_buffer_unmap (&rtpbuf);
-    GST_WARNING_OBJECT (depayload, "Payload too small, expected at least 4 "
-        "bytes for header, but got only %d bytes", payload_len);
-    return NULL;
-  }
-}
-
-static GstStateChangeReturn
-gst_rtp_asf_depay_change_state (GstElement * element, GstStateChange trans)
-{
-  GstStateChangeReturn ret;
-  GstRtpAsfDepay *depay;
-
-  depay = GST_RTP_ASF_DEPAY (element);
-
-  switch (trans) {
-    case GST_STATE_CHANGE_READY_TO_PAUSED:
-      gst_adapter_clear (depay->adapter);
-      depay->discont = TRUE;
-      break;
-    default:
-      break;
-  }
-
-  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, trans);
-
-  switch (trans) {
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      gst_adapter_clear (depay->adapter);
-      break;
-    default:
-      break;
-  }
-
-  return ret;
-}
diff --git a/gst/asfdemux/gstrtpasfdepay.h b/gst/asfdemux/gstrtpasfdepay.h
deleted file mode 100644 (file)
index 8388c8a..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/* GStreamer RTP ASF depayloader
- * Copyright (C) 2006 Tim-Philipp Müller  <tim centricular net>
- *               2009 Wim Taymans  <wim.taymans@gmail.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_RTP_ASF_DEPAY_H__
-#define __GST_RTP_ASF_DEPAY_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstadapter.h>
-
-#include <gst/rtp/gstrtpbasedepayload.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_RTP_ASF_DEPAY \
-  (gst_rtp_asf_depay_get_type())
-#define GST_RTP_ASF_DEPAY(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTP_ASF_DEPAY,GstRtpAsfDepay))
-#define GST_RTP_ASF_DEPAY_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTP_ASF_DEPAY,GstRtpAsfDepayClass))
-#define GST_IS_RTP_ASF_DEPAY(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_ASF_DEPAY))
-#define GST_IS_RTP_ASF_DEPAY_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_ASF_DEPAY))
-
-typedef struct _GstRtpAsfDepay      GstRtpAsfDepay;
-typedef struct _GstRtpAsfDepayClass GstRtpAsfDepayClass;
-
-struct _GstRtpAsfDepay
-{
-  GstRTPBaseDepayload depayload;
-
-  guint packet_size;
-
-  GstAdapter *adapter;
-  gboolean    discont;
-};
-
-struct _GstRtpAsfDepayClass
-{
-  GstRTPBaseDepayloadClass depayload_class;
-};
-
-GType    gst_rtp_asf_depay_get_type (void);
-
-G_END_DECLS
-
-#endif /* __GST_RTP_ASF_DEPAY_H__ */
diff --git a/gst/asfdemux/gstrtspwms.c b/gst/asfdemux/gstrtspwms.c
deleted file mode 100644 (file)
index ff58e1b..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-/* GStreamer
- * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.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.
- */
-/* Element-Checklist-Version: 5 */
-
-/**
- * SECTION:element-rtspwms
- * @title: rtspwms
- *
- * A WMS RTSP extension
- */
-
-#include <string.h>
-
-#include <gst/rtsp/gstrtspextension.h>
-
-#include "gstasfelements.h"
-#include "gstrtspwms.h"
-
-GST_DEBUG_CATEGORY_STATIC (rtspwms_debug);
-#define GST_CAT_DEFAULT (rtspwms_debug)
-
-#define SERVER_PREFIX "WMServer/"
-#define HEADER_PREFIX "data:application/vnd.ms.wms-hdr.asfv1;base64,"
-#define EXTENSION_CMD "application/x-wms-extension-cmd"
-
-static GstRTSPResult
-gst_rtsp_wms_before_send (GstRTSPExtension * ext, GstRTSPMessage * request)
-{
-  GstRTSPWMS *ctx = (GstRTSPWMS *) ext;
-
-  GST_DEBUG_OBJECT (ext, "before send");
-
-  switch (request->type_data.request.method) {
-    case GST_RTSP_OPTIONS:
-    {
-      /* activate ourselves with the first request */
-      ctx->active = TRUE;
-      break;
-    }
-    default:
-      break;
-  }
-  return GST_RTSP_OK;
-}
-
-static GstRTSPResult
-gst_rtsp_wms_after_send (GstRTSPExtension * ext, GstRTSPMessage * req,
-    GstRTSPMessage * resp)
-{
-  GstRTSPWMS *ctx = (GstRTSPWMS *) ext;
-
-  GST_DEBUG_OBJECT (ext, "after send");
-
-  switch (req->type_data.request.method) {
-    case GST_RTSP_OPTIONS:
-    {
-      gchar *server = NULL;
-
-      gst_rtsp_message_get_header (resp, GST_RTSP_HDR_SERVER, &server, 0);
-      if (server && g_str_has_prefix (server, SERVER_PREFIX))
-        ctx->active = TRUE;
-      else
-        ctx->active = FALSE;
-      break;
-    }
-    default:
-      break;
-  }
-  return GST_RTSP_OK;
-}
-
-
-static GstRTSPResult
-gst_rtsp_wms_parse_sdp (GstRTSPExtension * ext, GstSDPMessage * sdp,
-    GstStructure * props)
-{
-  const gchar *config, *maxps;
-  gint i;
-  GstRTSPWMS *ctx = (GstRTSPWMS *) ext;
-
-  if (!ctx->active)
-    return GST_RTSP_OK;
-
-  for (i = 0; (config = gst_sdp_message_get_attribute_val_n (sdp, "pgmpu", i));
-      i++) {
-    if (g_str_has_prefix (config, HEADER_PREFIX)) {
-      config += strlen (HEADER_PREFIX);
-      gst_structure_set (props, "config", G_TYPE_STRING, config, NULL);
-      break;
-    }
-  }
-  if (config == NULL)
-    goto no_config;
-
-  gst_structure_set (props, "config", G_TYPE_STRING, config, NULL);
-
-  maxps = gst_sdp_message_get_attribute_val (sdp, "maxps");
-  if (maxps)
-    gst_structure_set (props, "maxps", G_TYPE_STRING, maxps, NULL);
-
-  gst_structure_set (props, "encoding-name", G_TYPE_STRING, "X-ASF-PF", NULL);
-  gst_structure_set (props, "media", G_TYPE_STRING, "application", NULL);
-
-  return GST_RTSP_OK;
-
-  /* ERRORS */
-no_config:
-  {
-    GST_DEBUG_OBJECT (ctx, "Could not find config SDP field, deactivating.");
-    ctx->active = FALSE;
-    return GST_RTSP_OK;
-  }
-}
-
-static gboolean
-gst_rtsp_wms_configure_stream (GstRTSPExtension * ext, GstCaps * caps)
-{
-  GstRTSPWMS *ctx;
-  GstStructure *s;
-  const gchar *encoding;
-
-  ctx = (GstRTSPWMS *) ext;
-  s = gst_caps_get_structure (caps, 0);
-  encoding = gst_structure_get_string (s, "encoding-name");
-
-  if (!encoding)
-    return TRUE;
-
-  GST_DEBUG_OBJECT (ctx, "%" GST_PTR_FORMAT " encoding-name: %s", caps,
-      encoding);
-
-  /* rtx streams do not need to be configured */
-  if (!strcmp (encoding, "X-WMS-RTX"))
-    return FALSE;
-
-  return TRUE;
-}
-
-static GstRTSPResult
-gst_rtsp_wms_receive_request (GstRTSPExtension * ext, GstRTSPMessage * request)
-{
-  GstRTSPWMS *ctx;
-  GstRTSPResult res = GST_RTSP_ENOTIMPL;
-  GstRTSPMessage response = { 0 };
-
-  ctx = (GstRTSPWMS *) ext;
-
-  GST_DEBUG_OBJECT (ext, "before send");
-
-  switch (request->type_data.request.method) {
-    case GST_RTSP_SET_PARAMETER:
-    {
-      gchar *content_type = NULL;
-
-      gst_rtsp_message_get_header (request, GST_RTSP_HDR_CONTENT_TYPE,
-          &content_type, 0);
-
-      if (content_type && !g_ascii_strcasecmp (content_type, EXTENSION_CMD)) {
-        /* parse the command */
-
-        /* default implementation, send OK */
-        res = gst_rtsp_message_init_response (&response, GST_RTSP_STS_OK, "OK",
-            request);
-        if (res < 0)
-          goto send_error;
-
-        GST_DEBUG_OBJECT (ctx, "replying with OK");
-
-        /* send reply */
-        if ((res = gst_rtsp_extension_send (ext, request, &response)) < 0)
-          goto send_error;
-
-        res = GST_RTSP_EEOF;
-      }
-      break;
-    }
-    default:
-      break;
-  }
-  return res;
-
-send_error:
-  {
-    return res;
-  }
-}
-
-static void gst_rtsp_wms_extension_init (gpointer g_iface, gpointer iface_data);
-
-G_DEFINE_TYPE_WITH_CODE (GstRTSPWMS, gst_rtsp_wms, GST_TYPE_ELEMENT,
-    G_IMPLEMENT_INTERFACE (GST_TYPE_RTSP_EXTENSION,
-        gst_rtsp_wms_extension_init));
-GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (rtspwms, "rtspwms", GST_RANK_SECONDARY,
-    GST_TYPE_RTSP_WMS, asf_element_init (plugin));
-
-static void
-gst_rtsp_wms_class_init (GstRTSPWMSClass * g_class)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
-  GST_DEBUG_CATEGORY_INIT (rtspwms_debug, "rtspwms", 0, "WMS RTSP extension");
-
-  gst_element_class_set_static_metadata (element_class, "WMS RTSP Extension",
-      "Network/Extension/Protocol",
-      "Extends RTSP so that it can handle WMS setup",
-      "Wim Taymans <wim.taymans@gmail.com>");
-}
-
-static void
-gst_rtsp_wms_init (GstRTSPWMS * rtspwms)
-{
-}
-
-static void
-gst_rtsp_wms_extension_init (gpointer g_iface, gpointer iface_data)
-{
-  GstRTSPExtensionInterface *iface = (GstRTSPExtensionInterface *) g_iface;
-
-  iface->parse_sdp = gst_rtsp_wms_parse_sdp;
-  iface->before_send = gst_rtsp_wms_before_send;
-  iface->after_send = gst_rtsp_wms_after_send;
-  iface->configure_stream = gst_rtsp_wms_configure_stream;
-  iface->receive_request = gst_rtsp_wms_receive_request;
-}
diff --git a/gst/asfdemux/gstrtspwms.h b/gst/asfdemux/gstrtspwms.h
deleted file mode 100644 (file)
index feb8c43..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/* GStreamer
- * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.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_RTSP_WMS_H__
-#define __GST_RTSP_WMS_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_RTSP_WMS              (gst_rtsp_wms_get_type())
-#define GST_IS_RTSP_WMS(obj)           (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTSP_WMS))
-#define GST_IS_RTSP_WMS_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTSP_WMS))
-#define GST_RTSP_WMS(obj)              (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTSP_WMS, GstRTSPWMS))
-#define GST_RTSP_WMS_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTSP_WMS, GstRTSPWMSClass))
-
-typedef struct _GstRTSPWMS GstRTSPWMS;
-typedef struct _GstRTSPWMSClass GstRTSPWMSClass;
-
-struct _GstRTSPWMS {
-  GstElement  element;
-
-  gboolean active;
-};
-
-struct _GstRTSPWMSClass {
-  GstElementClass parent_class;
-};
-
-GType gst_rtsp_wms_get_type(void);
-
-G_END_DECLS
-
-#endif /* __GST_RTSP_WMS_H__ */
diff --git a/gst/asfdemux/meson.build b/gst/asfdemux/meson.build
deleted file mode 100644 (file)
index a86188b..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-asf_sources = [
-  'gstasfdemux.c',
-  'gstasf.c',
-  'gstasfelement.c',
-  'asfheaders.c',
-  'asfpacket.c',
-  'gstrtpasfdepay.c',
-  'gstrtspwms.c',
-]
-
-gstasf = library('gstasf',
-  asf_sources,
-  c_args : ugly_args,
-  include_directories : [configinc, libsinc],
-  dependencies : [gstbase_dep, gstrtp_dep, gstvideo_dep,
-                  gstaudio_dep, gsttag_dep, gstriff_dep,
-                  gstrtsp_dep, gstsdp_dep],
-  install : true,
-  install_dir : plugins_install_dir,
-)
-pkgconfig.generate(gstasf, install_dir : plugins_pkgconfig_install_dir)
-plugins += [gstasf]
diff --git a/gst/dvdlpcmdec/gstdvdlpcmdec.c b/gst/dvdlpcmdec/gstdvdlpcmdec.c
deleted file mode 100644 (file)
index 9a32d48..0000000
+++ /dev/null
@@ -1,1018 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) <2005> Jan Schmidt <jan@noraisin.net>
- *
- * 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.
- */
-/* Element-Checklist-Version: TODO */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <stdlib.h>
-#include <string.h>
-
-#include "gstdvdlpcmdec.h"
-#include <gst/audio/audio.h>
-
-GST_DEBUG_CATEGORY_STATIC (dvdlpcm_debug);
-#define GST_CAT_DEFAULT dvdlpcm_debug
-
-static GstStaticPadTemplate gst_dvdlpcmdec_sink_template =
-    GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-private1-lpcm; "
-        "audio/x-private2-lpcm; "
-        "audio/x-private-ts-lpcm; "
-        "audio/x-lpcm, "
-        "width = (int) { 16, 20, 24 }, "
-        "rate = (int) { 32000, 44100, 48000, 96000 }, "
-        "channels = (int) [ 1, 8 ], "
-        "dynamic_range = (int) [ 0, 255 ], "
-        "emphasis = (boolean) { TRUE, FALSE }, "
-        "mute = (boolean) { TRUE, FALSE } ")
-    );
-
-static GstStaticPadTemplate gst_dvdlpcmdec_src_template =
-GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-raw, "
-        "format = (string) { S16BE, S24BE }, "
-        "layout = (string) interleaved, "
-        "rate = (int) { 32000, 44100, 48000, 96000 }, "
-        "channels = (int) [ 1, 8 ]")
-    );
-
-#define gst_dvdlpcmdec_parent_class parent_class
-G_DEFINE_TYPE (GstDvdLpcmDec, gst_dvdlpcmdec, GST_TYPE_AUDIO_DECODER);
-GST_ELEMENT_REGISTER_DEFINE (dvdlpcmdec, "dvdlpcmdec", GST_RANK_PRIMARY,
-    GST_TYPE_DVDLPCMDEC);
-
-static gboolean gst_dvdlpcmdec_set_format (GstAudioDecoder * bdec,
-    GstCaps * caps);
-static GstFlowReturn gst_dvdlpcmdec_parse (GstAudioDecoder * bdec,
-    GstAdapter * adapter, gint * offset, gint * len);
-static GstFlowReturn gst_dvdlpcmdec_handle_frame (GstAudioDecoder * bdec,
-    GstBuffer * buffer);
-static GstFlowReturn gst_dvdlpcmdec_chain (GstPad * pad, GstObject * parent,
-    GstBuffer * buffer);
-
-
-static void
-gst_dvdlpcmdec_class_init (GstDvdLpcmDecClass * klass)
-{
-  GstElementClass *element_class;
-  GstAudioDecoderClass *gstbase_class;
-
-  element_class = (GstElementClass *) klass;
-  gstbase_class = (GstAudioDecoderClass *) klass;
-
-  gstbase_class->set_format = GST_DEBUG_FUNCPTR (gst_dvdlpcmdec_set_format);
-  gstbase_class->parse = GST_DEBUG_FUNCPTR (gst_dvdlpcmdec_parse);
-  gstbase_class->handle_frame = GST_DEBUG_FUNCPTR (gst_dvdlpcmdec_handle_frame);
-
-  gst_element_class_add_static_pad_template (element_class,
-      &gst_dvdlpcmdec_sink_template);
-  gst_element_class_add_static_pad_template (element_class,
-      &gst_dvdlpcmdec_src_template);
-  gst_element_class_set_static_metadata (element_class,
-      "DVD LPCM Audio decoder", "Codec/Decoder/Audio",
-      "Decode DVD LPCM frames into standard PCM audio",
-      "Jan Schmidt <jan@noraisin.net>, Michael Smith <msmith@fluendo.com>");
-
-  GST_DEBUG_CATEGORY_INIT (dvdlpcm_debug, "dvdlpcmdec", 0, "DVD LPCM Decoder");
-}
-
-static void
-gst_dvdlpcm_reset (GstDvdLpcmDec * dvdlpcmdec)
-{
-  gst_audio_info_init (&dvdlpcmdec->info);
-  dvdlpcmdec->dynamic_range = 0;
-  dvdlpcmdec->emphasis = FALSE;
-  dvdlpcmdec->mute = FALSE;
-
-  dvdlpcmdec->header = 0;
-
-  dvdlpcmdec->mode = GST_LPCM_UNKNOWN;
-}
-
-static void
-gst_dvdlpcmdec_init (GstDvdLpcmDec * dvdlpcmdec)
-{
-  gst_dvdlpcm_reset (dvdlpcmdec);
-
-  gst_audio_decoder_set_use_default_pad_acceptcaps (GST_AUDIO_DECODER_CAST
-      (dvdlpcmdec), TRUE);
-  GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_DECODER_SINK_PAD (dvdlpcmdec));
-
-  /* retrieve and intercept base class chain.
-   * Quite HACKish, but that's dvd specs/caps for you,
-   * since one buffer needs to be split into 2 frames */
-  dvdlpcmdec->base_chain =
-      GST_PAD_CHAINFUNC (GST_AUDIO_DECODER_SINK_PAD (dvdlpcmdec));
-  gst_pad_set_chain_function (GST_AUDIO_DECODER_SINK_PAD (dvdlpcmdec),
-      GST_DEBUG_FUNCPTR (gst_dvdlpcmdec_chain));
-}
-
-static const GstAudioChannelPosition channel_positions[][8] = {
-  {GST_AUDIO_CHANNEL_POSITION_MONO},
-  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT},
-  {GST_AUDIO_CHANNEL_POSITION_INVALID},
-  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
-      GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT},
-  {GST_AUDIO_CHANNEL_POSITION_INVALID},
-  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
-        GST_AUDIO_CHANNEL_POSITION_LFE1, GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
-      GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT},
-  {GST_AUDIO_CHANNEL_POSITION_INVALID},
-  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
-        GST_AUDIO_CHANNEL_POSITION_LFE1, GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
-      GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT},
-  {GST_AUDIO_CHANNEL_POSITION_INVALID}
-};
-
-static const GstAudioChannelPosition bluray_channel_positions[][8] = {
-  /* invalid */
-  {GST_AUDIO_CHANNEL_POSITION_INVALID},
-  /* mono */
-  {GST_AUDIO_CHANNEL_POSITION_MONO},
-  /* invalid */
-  {GST_AUDIO_CHANNEL_POSITION_INVALID},
-  /* stereo */
-  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT},
-  /* surround */
-  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-      GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER},
-  /* 2.1 */
-  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-      GST_AUDIO_CHANNEL_POSITION_REAR_CENTER},
-  /* 4.0 */
-  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
-      GST_AUDIO_CHANNEL_POSITION_REAR_CENTER},
-  /* 2.2 */
-  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
-      GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT},
-  /* 5.0 */
-  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
-        GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
-      GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT},
-  /* 5.1 */
-  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
-        GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
-      GST_AUDIO_CHANNEL_POSITION_LFE1},
-  /* 7.0 */
-  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
-        GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
-      GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT},
-  /* 7.1 */
-  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
-        GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
-      GST_AUDIO_CHANNEL_POSITION_LFE1},
-  /* invalid */
-  {GST_AUDIO_CHANNEL_POSITION_INVALID},
-  /* invalid */
-  {GST_AUDIO_CHANNEL_POSITION_INVALID},
-  /* invalid */
-  {GST_AUDIO_CHANNEL_POSITION_INVALID},
-  /* invalid */
-  {GST_AUDIO_CHANNEL_POSITION_INVALID}
-};
-
-static void
-gst_dvdlpcmdec_send_tags (GstDvdLpcmDec * dvdlpcmdec)
-{
-  GstTagList *taglist;
-  guint bitrate;
-  gint bpf, rate;
-
-  bpf = GST_AUDIO_INFO_BPF (&dvdlpcmdec->info);
-  rate = GST_AUDIO_INFO_RATE (&dvdlpcmdec->info);
-
-  bitrate = bpf * 8 * rate;
-
-  taglist = gst_tag_list_new (GST_TAG_AUDIO_CODEC, "LPCM Audio",
-      GST_TAG_BITRATE, bitrate, NULL);
-
-  gst_audio_decoder_merge_tags (GST_AUDIO_DECODER (dvdlpcmdec), taglist,
-      GST_TAG_MERGE_REPLACE);
-  gst_tag_list_unref (taglist);
-}
-
-static gboolean
-gst_dvdlpcmdec_set_output_format (GstDvdLpcmDec * dvdlpcmdec)
-{
-  gboolean res = TRUE;
-
-  res = gst_audio_decoder_set_output_format (GST_AUDIO_DECODER (dvdlpcmdec),
-      &dvdlpcmdec->info);
-  if (res) {
-    GST_DEBUG_OBJECT (dvdlpcmdec, "Successfully set output format");
-
-    gst_dvdlpcmdec_send_tags (dvdlpcmdec);
-  } else {
-    GST_DEBUG_OBJECT (dvdlpcmdec, "Failed to set output format");
-  }
-
-  return res;
-}
-
-static void
-gst_dvdlpcmdec_update_audio_formats (GstDvdLpcmDec * dec, gint channels,
-    gint rate, GstAudioFormat format, guint8 channel_indicator,
-    const GstAudioChannelPosition positions[][8])
-{
-  GST_DEBUG_OBJECT (dec, "got channels = %d, rate = %d, format = %d", channels,
-      rate, format);
-
-  /* Reorder the channel positions and set the default into for the audio */
-  if (channels < 9
-      && positions[channel_indicator][0] !=
-      GST_AUDIO_CHANNEL_POSITION_INVALID) {
-    const GstAudioChannelPosition *position;
-    GstAudioChannelPosition sorted_position[8];
-    guint c;
-
-    position = positions[channel_indicator];
-    for (c = 0; c < channels; ++c)
-      sorted_position[c] = position[c];
-    gst_audio_channel_positions_to_valid_order (sorted_position, channels);
-    gst_audio_info_set_format (&dec->info, format, rate, channels,
-        sorted_position);
-    if (memcmp (position, sorted_position,
-            channels * sizeof (position[0])) != 0)
-      dec->lpcm_layout = position;
-    else
-      dec->lpcm_layout = NULL;
-  } else {
-    gst_audio_info_set_format (&dec->info, format, rate, channels, NULL);
-  }
-}
-
-static gboolean
-gst_dvdlpcmdec_set_format (GstAudioDecoder * bdec, GstCaps * caps)
-{
-  GstDvdLpcmDec *dvdlpcmdec = GST_DVDLPCMDEC (bdec);
-  GstStructure *structure;
-  gboolean res = TRUE;
-  GstAudioFormat format;
-  gint rate, channels, width;
-
-  gst_dvdlpcm_reset (dvdlpcmdec);
-
-  structure = gst_caps_get_structure (caps, 0);
-
-  /* If we have the DVD structured LPCM (including header) then we wait
-   * for incoming data before creating the output pad caps */
-  if (gst_structure_has_name (structure, "audio/x-private1-lpcm")) {
-    dvdlpcmdec->mode = GST_LPCM_DVD;
-    goto done;
-  }
-  if (gst_structure_has_name (structure, "audio/x-private2-lpcm")) {
-    dvdlpcmdec->mode = GST_LPCM_1394;
-    goto done;
-  }
-  if (gst_structure_has_name (structure, "audio/x-private-ts-lpcm")) {
-    dvdlpcmdec->mode = GST_LPCM_BLURAY;
-    goto done;
-  }
-
-  dvdlpcmdec->mode = GST_LPCM_RAW;
-
-  res &= gst_structure_get_int (structure, "rate", &rate);
-  res &= gst_structure_get_int (structure, "channels", &channels);
-  res &= gst_structure_get_int (structure, "width", &width);
-  res &= gst_structure_get_int (structure, "dynamic_range",
-      &dvdlpcmdec->dynamic_range);
-  res &= gst_structure_get_boolean (structure, "emphasis",
-      &dvdlpcmdec->emphasis);
-  res &= gst_structure_get_boolean (structure, "mute", &dvdlpcmdec->mute);
-
-  if (!res)
-    goto caps_parse_error;
-
-  switch (width) {
-    case 24:
-    case 20:
-      format = GST_AUDIO_FORMAT_S24BE;
-      break;
-    case 16:
-      format = GST_AUDIO_FORMAT_S16BE;
-      break;
-    default:
-      format = GST_AUDIO_FORMAT_UNKNOWN;
-      break;
-  }
-
-  gst_dvdlpcmdec_update_audio_formats (dvdlpcmdec, channels, rate, format,
-      channels - 1, channel_positions);
-
-  dvdlpcmdec->width = width;
-
-  res = gst_dvdlpcmdec_set_output_format (dvdlpcmdec);
-
-done:
-  return res;
-
-  /* ERRORS */
-caps_parse_error:
-  {
-    GST_DEBUG_OBJECT (dvdlpcmdec, "Couldn't get parameters; missing caps?");
-    return FALSE;
-  }
-}
-
-static void
-parse_header (GstDvdLpcmDec * dec, guint32 header)
-{
-  GstAudioFormat format;
-  gint rate, channels, width;
-
-  /* We don't actually use 'dynamic range', 'mute', or 'emphasis' currently,
-   * but parse them out */
-  dec->dynamic_range = header & 0xff;
-
-  dec->mute = (header & 0x400000) != 0;
-  dec->emphasis = (header & 0x800000) != 0;
-
-  /* These two bits tell us the bit depth */
-  switch (header & 0xC000) {
-    case 0x8000:
-      /* 24 bits in 3 bytes */
-      format = GST_AUDIO_FORMAT_S24BE;
-      width = 24;
-      break;
-    case 0x4000:
-      /* 20 bits in 3 bytes */
-      format = GST_AUDIO_FORMAT_S24BE;
-      width = 20;
-      break;
-    default:
-      format = GST_AUDIO_FORMAT_S16BE;
-      width = 16;
-      break;
-  }
-
-  dec->width = width;
-
-  /* Only four sample rates supported */
-  switch (header & 0x3000) {
-    case 0x0000:
-      rate = 48000;
-      break;
-    case 0x1000:
-      rate = 96000;
-      break;
-    case 0x2000:
-      rate = 44100;
-      break;
-    case 0x3000:
-      rate = 32000;
-      break;
-    default:
-      rate = 0;
-      break;
-  }
-
-  /* And, of course, the number of channels (up to 8) */
-  channels = ((header >> 8) & 0x7) + 1;
-
-  gst_dvdlpcmdec_update_audio_formats (dec, channels, rate, format,
-      channels - 1, channel_positions);
-}
-
-static GstFlowReturn
-gst_dvdlpcmdec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
-{
-  GstDvdLpcmDec *dvdlpcmdec = GST_DVDLPCMDEC (parent);
-  guint8 data[2];
-  gsize size;
-  guint first_access;
-  GstBuffer *subbuf;
-  GstFlowReturn ret = GST_FLOW_OK;
-  gint off, len;
-
-  if (dvdlpcmdec->mode != GST_LPCM_DVD)
-    return dvdlpcmdec->base_chain (pad, parent, buf);
-
-  size = gst_buffer_get_size (buf);
-  if (size < 5)
-    goto too_small;
-
-  gst_buffer_extract (buf, 0, data, 2);
-  first_access = (data[0] << 8) | data[1];
-  if (first_access > size)
-    goto invalid_data;
-
-  /* After first_access, we have an additional 3 bytes of header data; this
-   * is included within the value of first_access.
-   * So a first_access value of between 1 and 3 is just broken, we treat that
-   * the same as zero. first_access == 4 means we only need to create a single
-   * sub-buffer, greater than that we need to create two. */
-
-  /* skip access unit bytes */
-  off = 2;
-
-  if (first_access > 4) {
-    /* length of first buffer */
-    len = first_access - 1;
-
-    GST_LOG_OBJECT (dvdlpcmdec, "Creating first sub-buffer off %d, len %d",
-        off, len);
-
-    /* see if we need a subbuffer without timestamp */
-    if (off + len > size)
-      goto bad_first_access;
-
-    subbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, off, len);
-    GST_BUFFER_TIMESTAMP (subbuf) = GST_CLOCK_TIME_NONE;
-    ret = dvdlpcmdec->base_chain (pad, parent, subbuf);
-    if (ret != GST_FLOW_OK)
-      goto done;
-
-    /* then the buffer with new timestamp */
-    off += len;
-    len = size - off;
-
-    GST_LOG_OBJECT (dvdlpcmdec, "Creating next sub-buffer off %d, len %d", off,
-        len);
-
-    if (len > 0) {
-      GstMemory *header, *tmp;
-      subbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, off, len);
-      tmp = gst_buffer_peek_memory (buf, 0);
-      header = gst_memory_copy (tmp, 2, 3);
-      gst_buffer_prepend_memory (subbuf, header);
-      GST_BUFFER_TIMESTAMP (subbuf) = GST_BUFFER_TIMESTAMP (buf);
-
-      ret = dvdlpcmdec->base_chain (pad, parent, subbuf);
-    }
-  } else {
-    GST_LOG_OBJECT (dvdlpcmdec,
-        "Creating single sub-buffer off %d, len %" G_GSIZE_FORMAT, off,
-        size - off);
-    subbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, off, size - off);
-    GST_BUFFER_TIMESTAMP (subbuf) = GST_BUFFER_TIMESTAMP (buf);
-    ret = dvdlpcmdec->base_chain (pad, parent, subbuf);
-  }
-
-done:
-  gst_buffer_unref (buf);
-
-  return ret;
-
-  /* ERRORS */
-too_small:
-  {
-    /* Buffer is too small */
-    GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
-        ("Invalid data found parsing LPCM packet"),
-        ("LPCM packet was too small. Dropping"));
-    ret = GST_FLOW_OK;
-    goto done;
-  }
-invalid_data:
-  {
-    GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
-        ("Invalid data found parsing LPCM packet"),
-        ("LPCM packet contained invalid first access. Dropping"));
-    ret = GST_FLOW_OK;
-    goto done;
-  }
-bad_first_access:
-  {
-    GST_WARNING_OBJECT (pad, "Bad first_access parameter in buffer");
-    GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, DECODE,
-        (NULL),
-        ("first_access parameter out of range: bad buffer from demuxer"));
-    ret = GST_FLOW_ERROR;
-    goto done;
-  }
-}
-
-static GstFlowReturn
-gst_dvdlpcmdec_parse_dvd (GstDvdLpcmDec * dvdlpcmdec, GstAdapter * adapter,
-    gint * offset, gint * len)
-{
-  guint32 header;
-  const guint8 *data;
-
-  data = (const guint8 *) gst_adapter_map (adapter, 3);
-  if (!data)
-    goto too_small;
-
-  /* Don't keep the 'frame number' low 5 bits of the first byte */
-  header = ((data[0] & 0xC0) << 16) | (data[1] << 8) | data[2];
-
-  gst_adapter_unmap (adapter);
-
-  /* see if we have a new header */
-  if (header != dvdlpcmdec->header) {
-    parse_header (dvdlpcmdec, header);
-
-    if (!gst_dvdlpcmdec_set_output_format (dvdlpcmdec))
-      goto negotiation_failed;
-
-    dvdlpcmdec->header = header;
-  }
-
-  *offset = 3;
-  *len = gst_adapter_available (adapter) - 3;
-
-  return GST_FLOW_OK;
-
-  /* ERRORS */
-too_small:
-  {
-    /* Buffer is too small */
-    GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
-        ("Invalid data found parsing LPCM packet"),
-        ("LPCM packet was too small. Dropping"));
-    *offset = gst_adapter_available (adapter);
-    return GST_FLOW_EOS;
-  }
-negotiation_failed:
-  {
-    GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, FORMAT, (NULL),
-        ("Failed to configure output format"));
-    return GST_FLOW_NOT_NEGOTIATED;
-  }
-}
-
-static GstFlowReturn
-gst_dvdlpcmdec_parse_bluray (GstDvdLpcmDec * dvdlpcmdec, GstAdapter * adapter,
-    gint * offset, gint * len)
-{
-  guint32 header;
-  const guint8 *data;
-  guint8 channel_indicator;
-
-  data = (const guint8 *) gst_adapter_map (adapter, 4);
-  if (!data)
-    goto too_small;
-
-  header = GST_READ_UINT32_BE (data);
-
-  gst_adapter_unmap (adapter);
-
-  /* see if we have a new header */
-  if (header != dvdlpcmdec->header) {
-    GstAudioFormat format;
-    gint rate, channels;
-
-    switch ((header >> 6) & 0x3) {
-      case 0x1:
-        format = GST_AUDIO_FORMAT_S16BE;
-        dvdlpcmdec->width = 16;
-        break;
-      case 0x2:
-        format = GST_AUDIO_FORMAT_S24BE;
-        dvdlpcmdec->width = 20;
-        break;
-      case 0x3:
-        format = GST_AUDIO_FORMAT_S24BE;
-        dvdlpcmdec->width = 24;
-        break;
-      default:
-        format = GST_AUDIO_FORMAT_UNKNOWN;
-        dvdlpcmdec->width = 0;
-        GST_WARNING ("Invalid sample depth!");
-        break;
-    }
-
-    switch ((header >> 8) & 0xf) {
-      case 0x1:
-        rate = 48000;
-        break;
-      case 0x4:
-        rate = 96000;
-        break;
-      case 0x5:
-        rate = 192000;
-        break;
-      default:
-        rate = 0;
-        GST_WARNING ("Invalid audio sampling frequency!");
-        break;
-    }
-    channel_indicator = (header >> 12) & 0xf;
-    switch (channel_indicator) {
-      case 0x1:
-        channels = 1;
-        break;
-      case 0x3:
-        channels = 2;
-        break;
-      case 0x4:
-      case 0x5:
-        channels = 3;
-        break;
-      case 0x6:
-      case 0x7:
-        channels = 4;
-        break;
-      case 0x8:
-        channels = 5;
-        break;
-      case 0x9:
-        channels = 6;
-        break;
-      case 0xa:
-        channels = 7;
-        break;
-      case 0xb:
-        channels = 8;
-        break;
-      default:
-        channels = 0;
-        GST_WARNING ("Invalid number of audio channels!");
-        goto negotiation_failed;
-    }
-    GST_DEBUG_OBJECT (dvdlpcmdec, "got channels %d rate %d format %s",
-        channels, rate, gst_audio_format_to_string (format));
-
-    gst_dvdlpcmdec_update_audio_formats (dvdlpcmdec, channels, rate, format,
-        channel_indicator, bluray_channel_positions);
-
-    if (!gst_dvdlpcmdec_set_output_format (dvdlpcmdec))
-      goto negotiation_failed;
-
-    dvdlpcmdec->header = header;
-  }
-
-  *offset = 4;
-  *len = gst_adapter_available (adapter) - 4;
-
-  return GST_FLOW_OK;
-
-  /* ERRORS */
-too_small:
-  {
-    /* Buffer is too small */
-    GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
-        ("Invalid data found parsing LPCM packet"),
-        ("LPCM packet was too small. Dropping"));
-    *offset = gst_adapter_available (adapter);
-    return GST_FLOW_EOS;
-  }
-negotiation_failed:
-  {
-    GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, FORMAT, (NULL),
-        ("Failed to configure output format"));
-    return GST_FLOW_NOT_NEGOTIATED;
-  }
-
-}
-
-static GstFlowReturn
-gst_dvdlpcmdec_parse_1394 (GstDvdLpcmDec * dvdlpcmdec, GstAdapter * adapter,
-    gint * offset, gint * len)
-{
-  guint32 header;
-  const guint8 *data;
-
-  data = (const guint8 *) gst_adapter_map (adapter, 4);
-  if (!data)
-    goto too_small;
-
-  header = GST_READ_UINT32_BE (data);
-
-  gst_adapter_unmap (adapter);
-
-  /* see if we have a new header */
-  if (header != dvdlpcmdec->header) {
-    GstAudioFormat format;
-    gint rate, channels;
-
-    if (header >> 24 != 0xa0)
-      goto invalid_data;
-
-    switch ((header >> 6) & 0x3) {
-      case 0x0:
-        format = GST_AUDIO_FORMAT_S16BE;
-        dvdlpcmdec->width = 16;
-        break;
-      default:
-        format = GST_AUDIO_FORMAT_UNKNOWN;
-        dvdlpcmdec->width = 0;
-        GST_WARNING ("Invalid quantization word length!");
-        break;
-    }
-
-    switch ((header >> 3) & 0x7) {
-      case 0x1:
-        rate = 44100;
-        break;
-      case 0x2:
-        rate = 48000;
-        break;
-      default:
-        rate = 0;
-        GST_WARNING ("Invalid audio sampling frequency!");
-        break;
-    }
-    switch (header & 0x7) {
-      case 0x0:                /* 2 channels dual-mono */
-      case 0x1:                /* 2 channels stereo */
-        channels = 2;
-        break;
-      default:
-        channels = 0;
-        GST_WARNING ("Invalid number of audio channels!");
-        goto negotiation_failed;
-    }
-
-    gst_dvdlpcmdec_update_audio_formats (dvdlpcmdec, channels, rate, format,
-        channels - 1, channel_positions);
-
-    if (!gst_dvdlpcmdec_set_output_format (dvdlpcmdec))
-      goto negotiation_failed;
-
-    dvdlpcmdec->header = header;
-  }
-
-  *offset = 4;
-  *len = gst_adapter_available (adapter) - 4;
-
-  return GST_FLOW_OK;
-
-  /* ERRORS */
-too_small:
-  {
-    /* Buffer is too small */
-    GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
-        ("Invalid data found parsing LPCM packet"),
-        ("LPCM packet was too small. Dropping"));
-    *offset = gst_adapter_available (adapter);
-    return GST_FLOW_EOS;
-  }
-invalid_data:
-  {
-    GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
-        ("Invalid data found parsing LPCM packet"),
-        ("LPCM packet contains invalid sub_stream_id."));
-    return GST_FLOW_ERROR;
-  }
-negotiation_failed:
-  {
-    GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, FORMAT, (NULL),
-        ("Failed to configure output format"));
-    return GST_FLOW_NOT_NEGOTIATED;
-  }
-}
-
-static GstFlowReturn
-gst_dvdlpcmdec_parse (GstAudioDecoder * bdec, GstAdapter * adapter,
-    gint * offset, gint * len)
-{
-  GstDvdLpcmDec *dvdlpcmdec = GST_DVDLPCMDEC (bdec);
-
-  switch (dvdlpcmdec->mode) {
-    case GST_LPCM_UNKNOWN:
-      return GST_FLOW_NOT_NEGOTIATED;
-
-    case GST_LPCM_RAW:
-      *offset = 0;
-      *len = gst_adapter_available (adapter);
-      return GST_FLOW_OK;
-
-    case GST_LPCM_DVD:
-      return gst_dvdlpcmdec_parse_dvd (dvdlpcmdec, adapter, offset, len);
-
-    case GST_LPCM_1394:
-      return gst_dvdlpcmdec_parse_1394 (dvdlpcmdec, adapter, offset, len);
-
-    case GST_LPCM_BLURAY:
-      return gst_dvdlpcmdec_parse_bluray (dvdlpcmdec, adapter, offset, len);
-  }
-  return GST_FLOW_ERROR;
-}
-
-static GstFlowReturn
-gst_dvdlpcmdec_handle_frame (GstAudioDecoder * bdec, GstBuffer * buf)
-{
-  GstDvdLpcmDec *dvdlpcmdec = GST_DVDLPCMDEC (bdec);
-  gsize size;
-  GstFlowReturn ret;
-  guint samples = 0;
-  gint rate, channels;
-
-  /* no fancy draining */
-  if (G_UNLIKELY (!buf))
-    return GST_FLOW_OK;
-
-  size = gst_buffer_get_size (buf);
-
-  GST_LOG_OBJECT (dvdlpcmdec,
-      "got buffer %p of size %" G_GSIZE_FORMAT " with ts %" GST_TIME_FORMAT,
-      buf, size, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
-
-  rate = GST_AUDIO_INFO_RATE (&dvdlpcmdec->info);
-  channels = GST_AUDIO_INFO_CHANNELS (&dvdlpcmdec->info);
-
-  if (rate == 0)
-    goto not_negotiated;
-
-  /* We don't currently do anything at all regarding emphasis, mute or
-   * dynamic_range - I'm not sure what they're for */
-  switch (dvdlpcmdec->width) {
-    case 16:
-    {
-      /* We can just pass 16-bits straight through intact, once we set
-       * appropriate things on the buffer */
-      samples = size / channels / 2;
-      if (samples < 1)
-        goto drop;
-
-      gst_buffer_ref (buf);
-      break;
-    }
-    case 20:
-    {
-      /* Allocate a new buffer and copy 20-bit width to 24-bit */
-      gint64 samples = size * 8 / 20;
-      gint64 count = size / 10;
-      gint64 i;
-      GstMapInfo srcmap, destmap;
-      guint8 *src;
-      guint8 *dest;
-      GstBuffer *outbuf;
-
-      if (samples < 1)
-        goto drop;
-
-      outbuf = gst_buffer_new_allocate (NULL, samples * 3, NULL);
-      gst_buffer_copy_into (outbuf, buf, GST_BUFFER_COPY_TIMESTAMPS, 0, -1);
-
-      /* adjust samples so we can calc the new timestamp */
-      samples = samples / channels;
-
-      gst_buffer_map (buf, &srcmap, GST_MAP_READ);
-      gst_buffer_map (outbuf, &destmap, GST_MAP_WRITE);
-      src = srcmap.data;
-      dest = destmap.data;
-
-      /* Copy 20-bit LPCM format to 24-bit buffers, with 0x00 in the lowest
-       * nibble. Note that the first 2 bytes are already correct */
-      for (i = 0; i < count; i++) {
-        dest[0] = src[0];
-        dest[1] = src[1];
-        dest[2] = src[8] & 0xf0;
-        dest[3] = src[2];
-        dest[4] = src[3];
-        dest[5] = (src[8] & 0x0f) << 4;
-        dest[6] = src[4];
-        dest[7] = src[5];
-        dest[8] = src[9] & 0x0f;
-        dest[9] = src[6];
-        dest[10] = src[7];
-        dest[11] = (src[9] & 0x0f) << 4;
-
-        src += 10;
-        dest += 12;
-      }
-      gst_buffer_unmap (outbuf, &destmap);
-      gst_buffer_unmap (buf, &srcmap);
-      buf = outbuf;
-      break;
-    }
-    case 24:
-    {
-      /* Rearrange 24-bit LPCM format in-place. Note that the first 2
-       * and last byte are already correct */
-      guint count = size / 12;
-      gint i;
-      GstMapInfo srcmap, destmap;
-      guint8 *src, *dest;
-      GstBuffer *outbuf;
-
-      samples = size / channels / 3;
-
-      if (samples < 1)
-        goto drop;
-
-      outbuf = gst_buffer_new_allocate (NULL, size, NULL);
-      gst_buffer_copy_into (outbuf, buf, GST_BUFFER_COPY_TIMESTAMPS, 0, -1);
-
-      gst_buffer_map (buf, &srcmap, GST_MAP_READ);
-      gst_buffer_map (outbuf, &destmap, GST_MAP_READWRITE);
-      src = srcmap.data;
-      dest = destmap.data;
-
-      for (i = 0; i < count; i++) {
-        dest[0] = src[0];
-        dest[1] = src[1];
-        dest[11] = src[11];
-        dest[10] = src[7];
-        dest[7] = src[5];
-        dest[5] = src[9];
-        dest[9] = src[6];
-        dest[6] = src[4];
-        dest[4] = src[3];
-        dest[3] = src[2];
-        dest[2] = src[8];
-        dest[8] = src[10];
-
-        src += 12;
-        dest += 12;
-      }
-      gst_buffer_unmap (outbuf, &destmap);
-      gst_buffer_unmap (buf, &srcmap);
-      buf = outbuf;
-      break;
-    }
-    default:
-      goto invalid_width;
-  }
-
-  if (dvdlpcmdec->lpcm_layout) {
-    buf = gst_buffer_make_writable (buf);
-    gst_audio_buffer_reorder_channels (buf, dvdlpcmdec->info.finfo->format,
-        dvdlpcmdec->info.channels, dvdlpcmdec->lpcm_layout,
-        dvdlpcmdec->info.position);
-  }
-
-  ret = gst_audio_decoder_finish_frame (bdec, buf, 1);
-
-done:
-  return ret;
-
-  /* ERRORS */
-drop:
-  {
-    GST_DEBUG_OBJECT (dvdlpcmdec,
-        "Buffer of size %" G_GSIZE_FORMAT " is too small. Dropping", size);
-    ret = GST_FLOW_OK;
-    goto done;
-  }
-not_negotiated:
-  {
-    GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, FORMAT, (NULL),
-        ("Buffer pushed before negotiation"));
-    ret = GST_FLOW_NOT_NEGOTIATED;
-    goto done;
-  }
-invalid_width:
-  {
-    GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, WRONG_TYPE, (NULL),
-        ("Invalid sample width configured"));
-    ret = GST_FLOW_NOT_NEGOTIATED;
-    goto done;
-  }
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  return GST_ELEMENT_REGISTER (dvdlpcmdec, plugin);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    dvdlpcmdec,
-    "Decode DVD LPCM frames into standard PCM",
-    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
diff --git a/gst/dvdlpcmdec/gstdvdlpcmdec.h b/gst/dvdlpcmdec/gstdvdlpcmdec.h
deleted file mode 100644 (file)
index 76d4d1e..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) <2005> Jan Schmidt <jan@noraisin.net>
- *
- * 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_DVDLPCMDEC_H__
-#define __GST_DVDLPCMDEC_H__
-
-#include <gst/gst.h>
-#include <gst/audio/audio.h>
-#include <gst/audio/gstaudiodecoder.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_DVDLPCMDEC \
-  (gst_dvdlpcmdec_get_type())
-#define GST_DVDLPCMDEC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DVDLPCMDEC,GstDvdLpcmDec))
-#define GST_DVDLPCMDEC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DVDLPCMDEC,GstDvdLpcmDecClass))
-#define GST_IS_DVDLPCMDEC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DVDLPCMDEC))
-#define GST_IS_DVDLPCMDEC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DVDLPCMDEC))
-
-typedef struct _GstDvdLpcmDec GstDvdLpcmDec;
-typedef struct _GstDvdLpcmDecClass GstDvdLpcmDecClass;
-
-typedef enum {
-  GST_LPCM_UNKNOWN,
-  GST_LPCM_RAW,
-  GST_LPCM_DVD,
-  GST_LPCM_1394,
-  GST_LPCM_BLURAY
-} GstDvdLpcmMode;
-
-struct _GstDvdLpcmDec {
-  GstAudioDecoder element;
-
-  GstPadChainFunction base_chain;
-
-  GstDvdLpcmMode mode;
-  guint32 header;
-
-  GstAudioInfo info;
-  const GstAudioChannelPosition *lpcm_layout;
-  gint width;
-  gint dynamic_range;
-  gint emphasis;
-  gint mute;
-
-  GstClockTime timestamp;
-};
-
-struct _GstDvdLpcmDecClass {
-  GstAudioDecoderClass parent_class;
-};
-
-GType gst_dvdlpcmdec_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (dvdlpcmdec);
-
-G_END_DECLS
-
-#endif /* __GST_DVDLPCMDEC_H__ */
diff --git a/gst/dvdlpcmdec/meson.build b/gst/dvdlpcmdec/meson.build
deleted file mode 100644 (file)
index b5a77ef..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-dvdpl_sources = [
-  'gstdvdlpcmdec.c'
-]
-
-gstdvdlpcmdec = library('gstdvdlpcmdec',
-  dvdpl_sources,
-  c_args : ugly_args,
-  include_directories : [configinc],
-  dependencies : [gstbase_dep, gstaudio_dep],
-  install : true,
-  install_dir : plugins_install_dir,
-)
-pkgconfig.generate(gstdvdlpcmdec, install_dir : plugins_pkgconfig_install_dir)
-plugins += [gstdvdlpcmdec]
diff --git a/gst/dvdsub/gstdvdsubdec.c b/gst/dvdsub/gstdvdsubdec.c
deleted file mode 100644 (file)
index 1884880..0000000
+++ /dev/null
@@ -1,1164 +0,0 @@
-/* GStreamer
- * Copyright (C) <2005> Jan Schmidt <jan@fluendo.com>
- * Copyright (C) <2002> Wim Taymans <wim@fluendo.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 "gstdvdsubdec.h"
-#include "gstdvdsubparse.h"
-#include <string.h>
-
-GST_DEBUG_CATEGORY_STATIC (gst_dvd_sub_dec_debug);
-#define GST_CAT_DEFAULT (gst_dvd_sub_dec_debug)
-
-#define gst_dvd_sub_dec_parent_class parent_class
-G_DEFINE_TYPE (GstDvdSubDec, gst_dvd_sub_dec, GST_TYPE_ELEMENT);
-GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (dvdsubdec, "dvdsubdec", GST_RANK_NONE,
-    GST_TYPE_DVD_SUB_DEC, GST_DEBUG_CATEGORY_INIT (gst_dvd_sub_dec_debug,
-        "dvdsubdec", 0, "DVD subtitle decoder"));
-
-static gboolean gst_dvd_sub_dec_src_event (GstPad * srcpad, GstObject * parent,
-    GstEvent * event);
-static GstFlowReturn gst_dvd_sub_dec_chain (GstPad * pad, GstObject * parent,
-    GstBuffer * buf);
-
-static gboolean gst_dvd_sub_dec_handle_dvd_event (GstDvdSubDec * dec,
-    GstEvent * event);
-static void gst_dvd_sub_dec_finalize (GObject * gobject);
-static void gst_setup_palette (GstDvdSubDec * dec);
-static void gst_dvd_sub_dec_merge_title (GstDvdSubDec * dec,
-    GstVideoFrame * frame);
-static GstClockTime gst_dvd_sub_dec_get_event_delay (GstDvdSubDec * dec);
-static gboolean gst_dvd_sub_dec_sink_event (GstPad * pad, GstObject * parent,
-    GstEvent * event);
-static gboolean gst_dvd_sub_dec_sink_setcaps (GstPad * pad, GstCaps * caps);
-
-static GstFlowReturn gst_send_subtitle_frame (GstDvdSubDec * dec,
-    GstClockTime end_ts);
-
-static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/x-raw, format = (string) { AYUV, ARGB },"
-        "width = (int) 720, height = (int) 576, framerate = (fraction) 0/1")
-    );
-
-static GstStaticPadTemplate subtitle_template = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("subpicture/x-dvd")
-    );
-
-
-enum
-{
-  SPU_FORCE_DISPLAY = 0x00,
-  SPU_SHOW = 0x01,
-  SPU_HIDE = 0x02,
-  SPU_SET_PALETTE = 0x03,
-  SPU_SET_ALPHA = 0x04,
-  SPU_SET_SIZE = 0x05,
-  SPU_SET_OFFSETS = 0x06,
-  SPU_WIPE = 0x07,
-  SPU_END = 0xff
-};
-
-static const guint32 default_clut[16] = {
-  0xb48080, 0x248080, 0x628080, 0xd78080,
-  0x808080, 0x808080, 0x808080, 0x808080,
-  0x808080, 0x808080, 0x808080, 0x808080,
-  0x808080, 0x808080, 0x808080, 0x808080
-};
-
-typedef struct RLE_state
-{
-  gint id;
-  gint aligned;
-  gint offset[2];
-  gint hl_left;
-  gint hl_right;
-
-  guchar *target;
-
-  guchar next;
-}
-RLE_state;
-
-static void
-gst_dvd_sub_dec_class_init (GstDvdSubDecClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-
-  gobject_class->finalize = gst_dvd_sub_dec_finalize;
-
-  gst_element_class_add_static_pad_template (gstelement_class, &src_template);
-  gst_element_class_add_static_pad_template (gstelement_class,
-      &subtitle_template);
-
-  gst_element_class_set_static_metadata (gstelement_class,
-      "DVD subtitle decoder", "Codec/Decoder/Video",
-      "Decodes DVD subtitles into AYUV video frames",
-      "Wim Taymans <wim.taymans@gmail.com>, "
-      "Jan Schmidt <thaytan@mad.scientist.com>");
-}
-
-static void
-gst_dvd_sub_dec_init (GstDvdSubDec * dec)
-{
-  GstPadTemplate *tmpl;
-
-  dec->sinkpad = gst_pad_new_from_static_template (&subtitle_template, "sink");
-  gst_pad_set_chain_function (dec->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_dvd_sub_dec_chain));
-  gst_pad_set_event_function (dec->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_dvd_sub_dec_sink_event));
-  gst_element_add_pad (GST_ELEMENT (dec), dec->sinkpad);
-
-  tmpl = gst_static_pad_template_get (&src_template);
-  dec->srcpad = gst_pad_new_from_template (tmpl, "src");
-  gst_pad_set_event_function (dec->srcpad,
-      GST_DEBUG_FUNCPTR (gst_dvd_sub_dec_src_event));
-  gst_pad_use_fixed_caps (dec->srcpad);
-  gst_object_unref (tmpl);
-  gst_element_add_pad (GST_ELEMENT (dec), dec->srcpad);
-
-  /* FIXME: aren't there more possible sizes? (tpm) */
-  dec->in_width = 720;
-  dec->in_height = 576;
-
-  dec->partialbuf = NULL;
-  dec->have_title = FALSE;
-  dec->parse_pos = NULL;
-  dec->forced_display = FALSE;
-  dec->visible = FALSE;
-
-  memcpy (dec->current_clut, default_clut, sizeof (guint32) * 16);
-
-  gst_setup_palette (dec);
-
-  dec->next_ts = 0;
-  dec->next_event_ts = GST_CLOCK_TIME_NONE;
-
-  dec->buf_dirty = TRUE;
-  dec->use_ARGB = FALSE;
-}
-
-static void
-gst_dvd_sub_dec_finalize (GObject * gobject)
-{
-  GstDvdSubDec *dec = GST_DVD_SUB_DEC (gobject);
-
-  if (dec->partialbuf) {
-    gst_buffer_unmap (dec->partialbuf, &dec->partialmap);
-    gst_buffer_unref (dec->partialbuf);
-    dec->partialbuf = NULL;
-  }
-
-  G_OBJECT_CLASS (parent_class)->finalize (gobject);
-}
-
-static gboolean
-gst_dvd_sub_dec_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
-  gboolean res = FALSE;
-
-  switch (GST_EVENT_TYPE (event)) {
-    default:
-      res = gst_pad_event_default (pad, parent, event);
-      break;
-  }
-
-  return res;
-}
-
-static GstClockTime
-gst_dvd_sub_dec_get_event_delay (GstDvdSubDec * dec)
-{
-  guchar *buf;
-  guint16 ticks;
-  GstClockTime event_delay;
-
-  /* If starting a new buffer, follow the first DCSQ ptr */
-  if (dec->parse_pos == dec->partialmap.data) {
-    buf = dec->parse_pos + dec->data_size;
-  } else {
-    buf = dec->parse_pos;
-  }
-
-  ticks = GST_READ_UINT16_BE (buf);
-  event_delay = gst_util_uint64_scale (ticks, 1024 * GST_SECOND, 90000);
-
-  GST_DEBUG_OBJECT (dec, "returning delay %" GST_TIME_FORMAT " from offset %u",
-      GST_TIME_ARGS (event_delay), (guint) (buf - dec->parse_pos));
-
-  return event_delay;
-}
-
-/*
- * Parse the next event time in the current subpicture buffer, stopping
- * when time advances to the next state. 
- */
-static void
-gst_dvd_sub_dec_parse_subpic (GstDvdSubDec * dec)
-{
-#define PARSE_BYTES_NEEDED(x) if ((buf+(x)) >= end) \
-  { GST_WARNING("Subtitle stream broken parsing %c", *buf); \
-    broken = TRUE; break; }
-
-  guchar *start = dec->partialmap.data;
-  guchar *buf;
-  guchar *end;
-  gboolean broken = FALSE;
-  gboolean last_seq = FALSE;
-  guchar *next_seq = NULL;
-  GstClockTime event_time;
-
-  /* nothing to do if we finished this buffer already */
-  if (dec->parse_pos == NULL)
-    return;
-
-  g_return_if_fail (dec->packet_size >= 4);
-
-  end = start + dec->packet_size;
-  if (dec->parse_pos == start) {
-    buf = dec->parse_pos + dec->data_size;
-  } else {
-    buf = dec->parse_pos;
-  }
-
-  g_assert (buf >= start && buf < end);
-
-  /* If the next control sequence is at the current offset, this is 
-   * the last one */
-  next_seq = start + GST_READ_UINT16_BE (buf + 2);
-  last_seq = (next_seq == buf);
-  buf += 4;
-
-  while ((buf < end) && (!broken)) {
-    switch (*buf) {
-      case SPU_FORCE_DISPLAY:  /* Forced display menu subtitle */
-        dec->forced_display = TRUE;
-        dec->buf_dirty = TRUE;
-        GST_DEBUG_OBJECT (dec, "SPU FORCE_DISPLAY");
-        buf++;
-        break;
-      case SPU_SHOW:           /* Show the subtitle in this packet */
-        dec->visible = TRUE;
-        dec->buf_dirty = TRUE;
-        GST_DEBUG_OBJECT (dec, "SPU SHOW at %" GST_TIME_FORMAT,
-            GST_TIME_ARGS (dec->next_event_ts));
-        buf++;
-        break;
-      case SPU_HIDE:
-        /* 02 ff (ff) is the end of the packet, hide the subpicture */
-        dec->visible = FALSE;
-        dec->buf_dirty = TRUE;
-
-        GST_DEBUG_OBJECT (dec, "SPU HIDE at %" GST_TIME_FORMAT,
-            GST_TIME_ARGS (dec->next_event_ts));
-        buf++;
-        break;
-      case SPU_SET_PALETTE:    /* palette */
-        PARSE_BYTES_NEEDED (3);
-
-        GST_DEBUG_OBJECT (dec, "SPU SET_PALETTE");
-
-        dec->subtitle_index[3] = buf[1] >> 4;
-        dec->subtitle_index[2] = buf[1] & 0xf;
-        dec->subtitle_index[1] = buf[2] >> 4;
-        dec->subtitle_index[0] = buf[2] & 0xf;
-        gst_setup_palette (dec);
-
-        dec->buf_dirty = TRUE;
-        buf += 3;
-        break;
-      case SPU_SET_ALPHA:      /* transparency palette */
-        PARSE_BYTES_NEEDED (3);
-
-        GST_DEBUG_OBJECT (dec, "SPU SET_ALPHA");
-
-        dec->subtitle_alpha[3] = buf[1] >> 4;
-        dec->subtitle_alpha[2] = buf[1] & 0xf;
-        dec->subtitle_alpha[1] = buf[2] >> 4;
-        dec->subtitle_alpha[0] = buf[2] & 0xf;
-        gst_setup_palette (dec);
-
-        dec->buf_dirty = TRUE;
-        buf += 3;
-        break;
-      case SPU_SET_SIZE:       /* image coordinates */
-        PARSE_BYTES_NEEDED (7);
-
-        dec->top = ((buf[4] & 0x3f) << 4) | ((buf[5] & 0xe0) >> 4);
-        dec->left = ((buf[1] & 0x3f) << 4) | ((buf[2] & 0xf0) >> 4);
-        dec->right = ((buf[2] & 0x03) << 8) | buf[3];
-        dec->bottom = ((buf[5] & 0x03) << 8) | buf[6];
-
-        GST_DEBUG_OBJECT (dec, "SPU SET_SIZE left %d, top %d, right %d, "
-            "bottom %d", dec->left, dec->top, dec->right, dec->bottom);
-
-        dec->buf_dirty = TRUE;
-        buf += 7;
-        break;
-      case SPU_SET_OFFSETS:    /* image 1 / image 2 offsets */
-        PARSE_BYTES_NEEDED (5);
-
-        dec->offset[0] = (((guint) buf[1]) << 8) | buf[2];
-        dec->offset[1] = (((guint) buf[3]) << 8) | buf[4];
-        GST_DEBUG_OBJECT (dec, "Offset1 %d, Offset2 %d",
-            dec->offset[0], dec->offset[1]);
-
-        dec->buf_dirty = TRUE;
-        buf += 5;
-        break;
-      case SPU_WIPE:
-      {
-        guint length;
-
-        PARSE_BYTES_NEEDED (3);
-
-        GST_WARNING_OBJECT (dec, "SPU_WIPE not yet implemented");
-
-        length = (buf[1] << 8) | (buf[2]);
-        buf += 1 + length;
-
-        dec->buf_dirty = TRUE;
-        break;
-      }
-      case SPU_END:
-        buf = (last_seq) ? end : next_seq;
-
-        /* Start a new control sequence */
-        if (buf + 4 < end) {
-          guint16 ticks = GST_READ_UINT16_BE (buf);
-
-          event_time = gst_util_uint64_scale (ticks, 1024 * GST_SECOND, 90000);
-
-          GST_DEBUG_OBJECT (dec,
-              "Next DCSQ at offset %u, delay %g secs (%d ticks)",
-              (guint) (buf - start),
-              gst_util_guint64_to_gdouble (event_time / GST_SECOND), ticks);
-
-          dec->parse_pos = buf;
-          if (event_time > 0) {
-            dec->next_event_ts += event_time;
-
-            GST_LOG_OBJECT (dec, "Exiting parse loop with time %g",
-                gst_guint64_to_gdouble (dec->next_event_ts) /
-                gst_guint64_to_gdouble (GST_SECOND));
-            return;
-          }
-          break;
-        } else {
-          dec->parse_pos = NULL;
-          dec->next_event_ts = GST_CLOCK_TIME_NONE;
-          GST_LOG_OBJECT (dec, "Finished all cmds. Exiting parse loop");
-          return;
-        }
-      default:
-        GST_ERROR
-            ("Invalid sequence in subtitle packet header (%.2x). Skipping",
-            *buf);
-        broken = TRUE;
-        dec->parse_pos = NULL;
-        break;
-    }
-  }
-}
-
-static inline int
-gst_get_nibble (guchar * buffer, RLE_state * state)
-{
-  if (state->aligned) {
-    state->next = buffer[state->offset[state->id]++];
-    state->aligned = 0;
-    return state->next >> 4;
-  } else {
-    state->aligned = 1;
-    return state->next & 0xf;
-  }
-}
-
-/* Premultiply the current lookup table into the "target" cache */
-static void
-gst_setup_palette (GstDvdSubDec * dec)
-{
-  gint i;
-  guint32 col;
-  Color_val *target_yuv = dec->palette_cache_yuv;
-  Color_val *target2_yuv = dec->hl_palette_cache_yuv;
-  Color_val *target_rgb = dec->palette_cache_rgb;
-  Color_val *target2_rgb = dec->hl_palette_cache_rgb;
-
-  for (i = 0; i < 4; i++, target2_yuv++, target_yuv++) {
-    col = dec->current_clut[dec->subtitle_index[i]];
-    target_yuv->Y_R = (col >> 16) & 0xff;
-    target_yuv->V_B = (col >> 8) & 0xff;
-    target_yuv->U_G = col & 0xff;
-    target_yuv->A = dec->subtitle_alpha[i] * 0xff / 0xf;
-
-    col = dec->current_clut[dec->menu_index[i]];
-    target2_yuv->Y_R = (col >> 16) & 0xff;
-    target2_yuv->V_B = (col >> 8) & 0xff;
-    target2_yuv->U_G = col & 0xff;
-    target2_yuv->A = dec->menu_alpha[i] * 0xff / 0xf;
-
-    /* If ARGB flag set, then convert YUV palette to RGB */
-    /* Using integer arithmetic */
-    if (dec->use_ARGB) {
-      guchar C = target_yuv->Y_R - 16;
-      guchar D = target_yuv->U_G - 128;
-      guchar E = target_yuv->V_B - 128;
-
-      target_rgb->Y_R = CLAMP (((298 * C + 409 * E + 128) >> 8), 0, 255);
-      target_rgb->U_G =
-          CLAMP (((298 * C - 100 * D - 128 * E + 128) >> 8), 0, 255);
-      target_rgb->V_B = CLAMP (((298 * C + 516 * D + 128) >> 8), 0, 255);
-      target_rgb->A = target_yuv->A;
-
-      C = target2_yuv->Y_R - 16;
-      D = target2_yuv->U_G - 128;
-      E = target2_yuv->V_B - 128;
-
-      target2_rgb->Y_R = CLAMP (((298 * C + 409 * E + 128) >> 8), 0, 255);
-      target2_rgb->U_G =
-          CLAMP (((298 * C - 100 * D - 128 * E + 128) >> 8), 0, 255);
-      target2_rgb->V_B = CLAMP (((298 * C + 516 * D + 128) >> 8), 0, 255);
-      target2_rgb->A = target2_yuv->A;
-    }
-    target_rgb++;
-    target2_rgb++;
-  }
-}
-
-static inline guint
-gst_get_rle_code (guchar * buffer, RLE_state * state)
-{
-  gint code;
-
-  code = gst_get_nibble (buffer, state);
-  if (code < 0x4) {             /* 4 .. f */
-    code = (code << 4) | gst_get_nibble (buffer, state);
-    if (code < 0x10) {          /* 1x .. 3x */
-      code = (code << 4) | gst_get_nibble (buffer, state);
-      if (code < 0x40) {        /* 04x .. 0fx */
-        code = (code << 4) | gst_get_nibble (buffer, state);
-      }
-    }
-  }
-  return code;
-}
-
-#define DRAW_RUN(target,len,c)                  \
-G_STMT_START {                                  \
-  gint i = 0;                                   \
-  if ((c)->A) {                                 \
-    for (i = 0; i < (len); i++) {               \
-      *(target)++ = (c)->A;                     \
-      *(target)++ = (c)->Y_R;                   \
-      *(target)++ = (c)->U_G;                   \
-      *(target)++ = (c)->V_B;                   \
-    }                                           \
-  } else {                                      \
-    (target) += 4 * (len);                      \
-  }                                             \
-} G_STMT_END
-
-/* 
- * This function steps over each run-length segment, drawing 
- * into the YUVA/ARGB buffers as it goes. UV are composited and then output
- * at half width/height
- */
-static void
-gst_draw_rle_line (GstDvdSubDec * dec, guchar * buffer, RLE_state * state)
-{
-  gint length, colourid;
-  guint code;
-  gint x, right;
-  guchar *target;
-
-  target = state->target;
-
-  x = dec->left;
-  right = dec->right + 1;
-
-  while (x < right) {
-    gboolean in_hl;
-    const Color_val *colour_entry;
-
-    code = gst_get_rle_code (buffer, state);
-    length = code >> 2;
-    colourid = code & 3;
-    if (dec->use_ARGB)
-      colour_entry = dec->palette_cache_rgb + colourid;
-    else
-      colour_entry = dec->palette_cache_yuv + colourid;
-
-    /* Length = 0 implies fill to the end of the line */
-    /* Restrict the colour run to the end of the line */
-    if (length == 0 || x + length > right)
-      length = right - x;
-
-    /* Check if this run of colour touches the highlight region */
-    in_hl = ((x <= state->hl_right) && (x + length) >= state->hl_left);
-    if (in_hl) {
-      gint run;
-
-      /* Draw to the left of the highlight */
-      if (x <= state->hl_left) {
-        run = MIN (length, state->hl_left - x + 1);
-
-        DRAW_RUN (target, run, colour_entry);
-        length -= run;
-        x += run;
-      }
-
-      /* Draw across the highlight region */
-      if (x <= state->hl_right) {
-        const Color_val *hl_colour;
-        if (dec->use_ARGB)
-          hl_colour = dec->hl_palette_cache_rgb + colourid;
-        else
-          hl_colour = dec->hl_palette_cache_yuv + colourid;
-
-        run = MIN (length, state->hl_right - x + 1);
-
-        DRAW_RUN (target, run, hl_colour);
-        length -= run;
-        x += run;
-      }
-    }
-
-    /* Draw the rest of the run */
-    if (length > 0) {
-      DRAW_RUN (target, length, colour_entry);
-      x += length;
-    }
-  }
-}
-
-/*
- * Decode the RLE subtitle image and blend with the current
- * frame buffer.
- */
-static void
-gst_dvd_sub_dec_merge_title (GstDvdSubDec * dec, GstVideoFrame * frame)
-{
-  gint y;
-  gint Y_stride;
-  guchar *buffer = dec->partialmap.data;
-  gint hl_top, hl_bottom;
-  gint last_y;
-  RLE_state state;
-  guint8 *Y_data;
-
-  GST_DEBUG_OBJECT (dec, "Merging subtitle on frame");
-
-  Y_data = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
-  Y_stride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
-
-  state.id = 0;
-  state.aligned = 1;
-  state.next = 0;
-  state.offset[0] = dec->offset[0];
-  state.offset[1] = dec->offset[1];
-
-  /* center the image when display rectangle exceeds the video width */
-  if (dec->in_width <= dec->right) {
-    gint left, disp_width;
-
-    disp_width = dec->right - dec->left + 1;
-    left = (dec->in_width - disp_width) / 2;
-    dec->left = left;
-    dec->right = left + disp_width - 1;
-
-    /* if it clips to the right, shift it left, but only till zero */
-    if (dec->right >= dec->in_width) {
-      gint shift = dec->right - dec->in_width - 1;
-      if (shift > dec->left)
-        shift = dec->left;
-      dec->left -= shift;
-      dec->right -= shift;
-    }
-
-    GST_DEBUG_OBJECT (dec, "clipping width to %d,%d",
-        dec->left, dec->in_width - 1);
-  }
-
-  /* for the height, bring it up till it fits as well as it can. We
-   * assume the picture is in the lower part. We should better check where it
-   * is and do something more clever. */
-  if (dec->in_height <= dec->bottom) {
-
-    /* shift it up, but only till zero */
-    gint shift = dec->bottom - dec->in_height - 1;
-    if (shift > dec->top)
-      shift = dec->top;
-    dec->top -= shift;
-    dec->bottom -= shift;
-
-    /* start on even line */
-    if (dec->top & 1) {
-      dec->top--;
-      dec->bottom--;
-    }
-
-    GST_DEBUG_OBJECT (dec, "clipping height to %d,%d",
-        dec->top, dec->in_height - 1);
-  }
-
-  if (dec->current_button) {
-    hl_top = dec->hl_top;
-    hl_bottom = dec->hl_bottom;
-  } else {
-    hl_top = -1;
-    hl_bottom = -1;
-  }
-  last_y = MIN (dec->bottom, dec->in_height);
-
-  y = dec->top;
-  state.target = Y_data + 4 * dec->left + (y * Y_stride);
-
-  /* Now draw scanlines until we hit last_y or end of RLE data */
-  for (; ((state.offset[1] < dec->data_size + 2) && (y <= last_y)); y++) {
-    /* Set up to draw the highlight if we're in the right scanlines */
-    if (y > hl_bottom || y < hl_top) {
-      state.hl_left = -1;
-      state.hl_right = -1;
-    } else {
-      state.hl_left = dec->hl_left;
-      state.hl_right = dec->hl_right;
-    }
-    gst_draw_rle_line (dec, buffer, &state);
-
-    state.target += Y_stride;
-
-    /* Realign the RLE state for the next line */
-    if (!state.aligned)
-      gst_get_nibble (buffer, &state);
-    state.id = !state.id;
-  }
-}
-
-static void
-gst_send_empty_fill (GstDvdSubDec * dec, GstClockTime ts)
-{
-  if (dec->next_ts < ts) {
-    GST_LOG_OBJECT (dec, "Sending GAP event update to advance time to %"
-        GST_TIME_FORMAT, GST_TIME_ARGS (ts));
-
-    gst_pad_push_event (dec->srcpad,
-        gst_event_new_gap (dec->next_ts, ts - dec->next_ts));
-  }
-  dec->next_ts = ts;
-}
-
-static GstFlowReturn
-gst_send_subtitle_frame (GstDvdSubDec * dec, GstClockTime end_ts)
-{
-  GstFlowReturn flow;
-  GstBuffer *out_buf;
-  GstVideoFrame frame;
-  guint8 *data;
-  gint x, y;
-  static GstAllocationParams params = { 0, 3, 0, 0, };
-
-  g_assert (dec->have_title);
-  g_assert (dec->next_ts <= end_ts);
-
-  /* Check if we need to redraw the output buffer */
-  if (!dec->buf_dirty) {
-    flow = GST_FLOW_OK;
-    goto out;
-  }
-
-  out_buf =
-      gst_buffer_new_allocate (NULL, GST_VIDEO_INFO_SIZE (&dec->info), &params);
-  gst_video_frame_map (&frame, &dec->info, out_buf, GST_MAP_READWRITE);
-
-  data = GST_VIDEO_FRAME_PLANE_DATA (&frame, 0);
-
-  /* Clear the buffer */
-  /* FIXME - move this into the buffer rendering code */
-  for (y = 0; y < dec->in_height; y++) {
-    guchar *line = data + 4 * dec->in_width * y;
-
-    for (x = 0; x < dec->in_width; x++) {
-      line[0] = 0;              /* A */
-      if (!dec->use_ARGB) {
-        line[1] = 16;           /* Y */
-        line[2] = 128;          /* U */
-        line[3] = 128;          /* V */
-      } else {
-        line[1] = 0;            /* R */
-        line[2] = 0;            /* G */
-        line[3] = 0;            /* B */
-      }
-
-      line += 4;
-    }
-  }
-
-  /* FIXME: do we really want to honour the forced_display flag
-   * for subtitles streans? */
-  if (dec->visible || dec->forced_display) {
-    gst_dvd_sub_dec_merge_title (dec, &frame);
-  }
-
-  gst_video_frame_unmap (&frame);
-
-  dec->buf_dirty = FALSE;
-
-  GST_BUFFER_TIMESTAMP (out_buf) = dec->next_ts;
-  if (GST_CLOCK_TIME_IS_VALID (dec->next_event_ts)) {
-    GST_BUFFER_DURATION (out_buf) = GST_CLOCK_DIFF (dec->next_ts,
-        dec->next_event_ts);
-  } else {
-    GST_BUFFER_DURATION (out_buf) = GST_CLOCK_TIME_NONE;
-  }
-
-  GST_DEBUG_OBJECT (dec, "Sending subtitle buffer with ts %"
-      GST_TIME_FORMAT ", dur %" G_GINT64_FORMAT,
-      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (out_buf)),
-      GST_BUFFER_DURATION (out_buf));
-
-  flow = gst_pad_push (dec->srcpad, out_buf);
-
-out:
-  dec->next_ts = end_ts;
-  return flow;
-}
-
-/* Walk time forward, processing any subtitle events as needed. */
-static GstFlowReturn
-gst_dvd_sub_dec_advance_time (GstDvdSubDec * dec, GstClockTime new_ts)
-{
-  GstFlowReturn ret = GST_FLOW_OK;
-
-  GST_LOG_OBJECT (dec, "Advancing time to %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (new_ts));
-
-  if (!dec->have_title) {
-    gst_send_empty_fill (dec, new_ts);
-    return ret;
-  }
-
-  while (dec->next_ts < new_ts) {
-    GstClockTime next_ts = new_ts;
-
-    if (GST_CLOCK_TIME_IS_VALID (dec->next_event_ts) &&
-        dec->next_event_ts < next_ts) {
-      /* We might need to process the subtitle cmd queue */
-      next_ts = dec->next_event_ts;
-    }
-
-    /* 
-     * Now, either output a filler or a frame spanning
-     * dec->next_ts to next_ts
-     */
-    if (dec->visible || dec->forced_display) {
-      ret = gst_send_subtitle_frame (dec, next_ts);
-    } else {
-      gst_send_empty_fill (dec, next_ts);
-    }
-
-    /*
-     * and then process some subtitle cmds if we need
-     */
-    if (next_ts == dec->next_event_ts)
-      gst_dvd_sub_dec_parse_subpic (dec);
-  }
-
-  return ret;
-}
-
-static GstFlowReturn
-gst_dvd_sub_dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
-{
-  GstFlowReturn ret = GST_FLOW_OK;
-  GstDvdSubDec *dec;
-  guint8 *data;
-  glong size = 0;
-
-  dec = GST_DVD_SUB_DEC (parent);
-
-  GST_DEBUG_OBJECT (dec, "Have buffer of size %" G_GSIZE_FORMAT ", ts %"
-      GST_TIME_FORMAT ", dur %" G_GINT64_FORMAT, gst_buffer_get_size (buf),
-      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), GST_BUFFER_DURATION (buf));
-
-  if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
-    if (!GST_CLOCK_TIME_IS_VALID (dec->next_ts)) {
-      dec->next_ts = GST_BUFFER_TIMESTAMP (buf);
-    }
-
-    /* Move time forward to the start of the new buffer */
-    ret = gst_dvd_sub_dec_advance_time (dec, GST_BUFFER_TIMESTAMP (buf));
-  }
-
-  if (dec->have_title) {
-    gst_buffer_unmap (dec->partialbuf, &dec->partialmap);
-    gst_buffer_unref (dec->partialbuf);
-    dec->partialbuf = NULL;
-    dec->have_title = FALSE;
-  }
-
-  GST_DEBUG_OBJECT (dec, "Got subtitle buffer, pts %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
-
-  /* deal with partial frame from previous buffer */
-  if (dec->partialbuf) {
-    gst_buffer_unmap (dec->partialbuf, &dec->partialmap);
-    dec->partialbuf = gst_buffer_append (dec->partialbuf, buf);
-  } else {
-    dec->partialbuf = buf;
-  }
-
-  gst_buffer_map (dec->partialbuf, &dec->partialmap, GST_MAP_READ);
-
-  data = dec->partialmap.data;
-  size = dec->partialmap.size;
-
-  if (size > 4) {
-    dec->packet_size = GST_READ_UINT16_BE (data);
-
-    if (dec->packet_size == size) {
-      GST_LOG_OBJECT (dec, "Subtitle packet size %d, current size %ld",
-          dec->packet_size, size);
-
-      dec->data_size = GST_READ_UINT16_BE (data + 2);
-
-      /* Reset parameters for a new subtitle buffer */
-      dec->parse_pos = data;
-      dec->forced_display = FALSE;
-      dec->visible = FALSE;
-
-      dec->have_title = TRUE;
-      dec->next_event_ts = GST_BUFFER_TIMESTAMP (dec->partialbuf);
-
-      if (!GST_CLOCK_TIME_IS_VALID (dec->next_event_ts))
-        dec->next_event_ts = dec->next_ts;
-
-      dec->next_event_ts += gst_dvd_sub_dec_get_event_delay (dec);
-    }
-  }
-
-  return ret;
-}
-
-static gboolean
-gst_dvd_sub_dec_sink_setcaps (GstPad * pad, GstCaps * caps)
-{
-  GstDvdSubDec *dec = GST_DVD_SUB_DEC (gst_pad_get_parent (pad));
-  gboolean ret = FALSE;
-  GstCaps *out_caps = NULL, *peer_caps = NULL;
-
-  GST_DEBUG_OBJECT (dec, "setcaps called with %" GST_PTR_FORMAT, caps);
-
-  out_caps = gst_caps_new_simple ("video/x-raw",
-      "format", G_TYPE_STRING, "AYUV",
-      "width", G_TYPE_INT, dec->in_width,
-      "height", G_TYPE_INT, dec->in_height,
-      "framerate", GST_TYPE_FRACTION, 0, 1, NULL);
-
-  peer_caps = gst_pad_get_allowed_caps (dec->srcpad);
-  if (G_LIKELY (peer_caps)) {
-    guint i = 0, n = 0;
-
-    n = gst_caps_get_size (peer_caps);
-    GST_DEBUG_OBJECT (dec, "peer allowed caps (%u structure(s)) are %"
-        GST_PTR_FORMAT, n, peer_caps);
-
-    for (i = 0; i < n; i++) {
-      GstStructure *s = gst_caps_get_structure (peer_caps, i);
-      /* Check if the peer pad support ARGB format, if yes change caps */
-      if (gst_structure_has_name (s, "video/x-raw")) {
-        GstCaps *downstream_caps;
-        gst_caps_unref (out_caps);
-        GST_DEBUG_OBJECT (dec, "trying with ARGB");
-
-        out_caps = gst_caps_new_simple ("video/x-raw",
-            "format", G_TYPE_STRING, "ARGB",
-            "width", G_TYPE_INT, dec->in_width,
-            "height", G_TYPE_INT, dec->in_height,
-            "framerate", GST_TYPE_FRACTION, 0, 1, NULL);
-
-        downstream_caps = gst_pad_peer_query_caps (dec->srcpad, NULL);
-        if (gst_caps_can_intersect (downstream_caps, out_caps)) {
-          gst_caps_unref (downstream_caps);
-          GST_DEBUG_OBJECT (dec, "peer accepted ARGB");
-          /* If ARGB format then set the flag */
-          dec->use_ARGB = TRUE;
-          break;
-        }
-        gst_caps_unref (downstream_caps);
-      }
-    }
-    gst_caps_unref (peer_caps);
-  }
-  GST_DEBUG_OBJECT (dec, "setting caps downstream to %" GST_PTR_FORMAT,
-      out_caps);
-  if (gst_pad_set_caps (dec->srcpad, out_caps)) {
-    gst_video_info_from_caps (&dec->info, out_caps);
-  } else {
-    GST_WARNING_OBJECT (dec, "failed setting downstream caps");
-    gst_caps_unref (out_caps);
-    goto beach;
-  }
-
-  gst_caps_unref (out_caps);
-  ret = TRUE;
-
-beach:
-  gst_object_unref (dec);
-  return ret;
-}
-
-static gboolean
-gst_dvd_sub_dec_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
-  GstDvdSubDec *dec = GST_DVD_SUB_DEC (parent);
-  gboolean ret = FALSE;
-
-  GST_LOG_OBJECT (dec, "%s event", GST_EVENT_TYPE_NAME (event));
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_CAPS:
-    {
-      GstCaps *caps;
-
-      gst_event_parse_caps (event, &caps);
-      ret = gst_dvd_sub_dec_sink_setcaps (pad, caps);
-      gst_event_unref (event);
-      break;
-    }
-    case GST_EVENT_CUSTOM_DOWNSTREAM:{
-
-      if (gst_event_has_name (event, "application/x-gst-dvd")) {
-        const GstStructure *s = gst_event_get_structure (event);
-        GstClockTime ts = GST_CLOCK_TIME_NONE;
-
-        if (gst_structure_get_clock_time (s, "ts", &ts)
-            && GST_CLOCK_TIME_IS_VALID (ts))
-          gst_dvd_sub_dec_advance_time (dec, ts);
-
-        if (gst_dvd_sub_dec_handle_dvd_event (dec, event)) {
-          /* gst_dvd_sub_dec_advance_time (dec, dec->next_ts + GST_SECOND / 30.0); */
-          gst_event_unref (event);
-          ret = TRUE;
-          break;
-        }
-      }
-
-      ret = gst_pad_event_default (pad, parent, event);
-      break;
-    }
-    case GST_EVENT_GAP:
-    {
-      GstClockTime start, duration;
-
-      gst_event_parse_gap (event, &start, &duration);
-      if (GST_CLOCK_TIME_IS_VALID (start)) {
-        if (GST_CLOCK_TIME_IS_VALID (duration))
-          start += duration;
-        /* we do not expect another buffer until after gap,
-         * so that is our position now */
-        GST_DEBUG_OBJECT (dec, "Got GAP event, advancing time from %"
-            GST_TIME_FORMAT " to %" GST_TIME_FORMAT,
-            GST_TIME_ARGS (dec->next_ts), GST_TIME_ARGS (start));
-
-        gst_dvd_sub_dec_advance_time (dec, start);
-      } else {
-        GST_WARNING_OBJECT (dec, "Got GAP event with invalid position");
-      }
-
-      gst_event_unref (event);
-      ret = TRUE;
-      break;
-    }
-    case GST_EVENT_SEGMENT:
-    {
-      GstSegment seg;
-
-      gst_event_copy_segment (event, &seg);
-
-      {
-#if 0
-        /* Turn off forced highlight display */
-        dec->forced_display = 0;
-        dec->current_button = 0;
-#endif
-        if (dec->partialbuf) {
-          gst_buffer_unmap (dec->partialbuf, &dec->partialmap);
-          gst_buffer_unref (dec->partialbuf);
-          dec->partialbuf = NULL;
-          dec->have_title = FALSE;
-        }
-
-        if (GST_CLOCK_TIME_IS_VALID (seg.time))
-          dec->next_ts = seg.time;
-        else
-          dec->next_ts = GST_CLOCK_TIME_NONE;
-
-        GST_DEBUG_OBJECT (dec, "Got newsegment, new time = %"
-            GST_TIME_FORMAT, GST_TIME_ARGS (dec->next_ts));
-
-        ret = gst_pad_event_default (pad, parent, event);
-      }
-      break;
-    }
-    case GST_EVENT_FLUSH_STOP:{
-      /* Turn off forced highlight display */
-      dec->forced_display = 0;
-      dec->current_button = 0;
-
-      if (dec->partialbuf) {
-        gst_buffer_unmap (dec->partialbuf, &dec->partialmap);
-        gst_buffer_unref (dec->partialbuf);
-        dec->partialbuf = NULL;
-        dec->have_title = FALSE;
-      }
-
-      ret = gst_pad_event_default (pad, parent, event);
-      break;
-    }
-    default:{
-      ret = gst_pad_event_default (pad, parent, event);
-      break;
-    }
-  }
-  return ret;
-}
-
-static gboolean
-gst_dvd_sub_dec_handle_dvd_event (GstDvdSubDec * dec, GstEvent * event)
-{
-  GstStructure *structure;
-  const gchar *event_name;
-
-  structure = (GstStructure *) gst_event_get_structure (event);
-
-  if (structure == NULL)
-    goto not_handled;
-
-  event_name = gst_structure_get_string (structure, "event");
-
-  GST_LOG_OBJECT (dec,
-      "DVD event %s with timestamp %" G_GINT64_FORMAT " on sub pad",
-      GST_STR_NULL (event_name), GST_EVENT_TIMESTAMP (event));
-
-  if (event_name == NULL)
-    goto not_handled;
-
-  if (strcmp (event_name, "dvd-spu-highlight") == 0) {
-    gint button;
-    gint palette, sx, sy, ex, ey;
-    gint i;
-
-    /* Details for the highlight region to display */
-    if (!gst_structure_get_int (structure, "button", &button) ||
-        !gst_structure_get_int (structure, "palette", &palette) ||
-        !gst_structure_get_int (structure, "sx", &sx) ||
-        !gst_structure_get_int (structure, "sy", &sy) ||
-        !gst_structure_get_int (structure, "ex", &ex) ||
-        !gst_structure_get_int (structure, "ey", &ey)) {
-      GST_ERROR_OBJECT (dec, "Invalid dvd-spu-highlight event received");
-      return TRUE;
-    }
-    dec->current_button = button;
-    dec->hl_left = sx;
-    dec->hl_top = sy;
-    dec->hl_right = ex;
-    dec->hl_bottom = ey;
-    for (i = 0; i < 4; i++) {
-      dec->menu_alpha[i] = ((guint32) (palette) >> (i * 4)) & 0x0f;
-      dec->menu_index[i] = ((guint32) (palette) >> (16 + (i * 4))) & 0x0f;
-    }
-
-    GST_DEBUG_OBJECT (dec, "New button activated highlight=(%d,%d) to (%d,%d) "
-        "palette 0x%x", sx, sy, ex, ey, palette);
-    gst_setup_palette (dec);
-
-    dec->buf_dirty = TRUE;
-  } else if (strcmp (event_name, "dvd-spu-clut-change") == 0) {
-    /* Take a copy of the colour table */
-    gchar name[16];
-    int i;
-    gint value;
-
-    GST_LOG_OBJECT (dec, "New colour table received");
-    for (i = 0; i < 16; i++) {
-      g_snprintf (name, sizeof (name), "clut%02d", i);
-      if (!gst_structure_get_int (structure, name, &value)) {
-        GST_ERROR_OBJECT (dec, "dvd-spu-clut-change event did not "
-            "contain %s field", name);
-        break;
-      }
-      dec->current_clut[i] = (guint32) (value);
-    }
-
-    gst_setup_palette (dec);
-
-    dec->buf_dirty = TRUE;
-  } else if (strcmp (event_name, "dvd-spu-stream-change") == 0
-      || strcmp (event_name, "dvd-spu-reset-highlight") == 0) {
-    /* Turn off forced highlight display */
-    dec->current_button = 0;
-
-    GST_LOG_OBJECT (dec, "Clearing button state");
-    dec->buf_dirty = TRUE;
-  } else if (strcmp (event_name, "dvd-spu-still-frame") == 0) {
-    /* Handle a still frame */
-    GST_LOG_OBJECT (dec, "Received still frame notification");
-  } else {
-    goto not_handled;
-  }
-
-  return TRUE;
-
-not_handled:
-  {
-    /* Ignore all other unknown events */
-    GST_LOG_OBJECT (dec, "Ignoring other custom event %" GST_PTR_FORMAT,
-        structure);
-    return FALSE;
-  }
-}
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  gboolean ret = FALSE;
-
-  ret |= GST_ELEMENT_REGISTER (dvdsubdec, plugin);
-  ret |= GST_ELEMENT_REGISTER (dvdsubparse, plugin);
-
-  return ret;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    dvdsub,
-    "DVD subtitle parser and decoder", plugin_init,
-    VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
diff --git a/gst/dvdsub/gstdvdsubdec.h b/gst/dvdsub/gstdvdsubdec.h
deleted file mode 100644 (file)
index 0c69677..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-/* GStreamer
- * Copyright (C) <2005> Jan Schmidt <jan@fluendo.com>
- * Copyright (C) <2002> Wim Taymans <wim@fluendo.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_DVDSUBDEC_H__
-#define __GST_DVDSUBDEC_H__
-
-#include <gst/gst.h>
-#include <gst/video/video.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_DVD_SUB_DEC             (gst_dvd_sub_dec_get_type())
-#define GST_DVD_SUB_DEC(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DVD_SUB_DEC,GstDvdSubDec))
-#define GST_DVD_SUB_DEC_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DVD_SUB_DEC,GstDvdSubDecClass))
-#define GST_IS_DVD_SUB_DEC(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DVD_SUB_DEC))
-#define GST_IS_DVD_SUB_DEC_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DVD_SUB_DEC))
-
-typedef struct _GstDvdSubDec GstDvdSubDec;
-typedef struct _GstDvdSubDecClass GstDvdSubDecClass;
-
-/* Hold premultimplied colour values */
-typedef struct Color_val
-{
-  guchar Y_R;
-  guchar U_G;
-  guchar V_B;
-  guchar A;
-
-} Color_val;
-
-struct _GstDvdSubDec
-{
-  GstElement element;
-
-  GstPad *sinkpad;
-  GstPad *srcpad;
-
-  gint in_width, in_height;
-
-  /* Collect together subtitle buffers until we have a full control sequence */
-  GstBuffer *partialbuf;
-  GstMapInfo partialmap;
-  gboolean have_title;
-
-  guchar subtitle_index[4];
-  guchar menu_index[4];
-  guchar subtitle_alpha[4];
-  guchar menu_alpha[4];
-
-  guint32 current_clut[16];
-  Color_val palette_cache_yuv[4];
-  Color_val hl_palette_cache_yuv[4];
-
-  Color_val palette_cache_rgb[4];
-  Color_val hl_palette_cache_rgb[4];
-
-  GstVideoInfo info;
-  gboolean use_ARGB;
-  GstClockTime next_ts;
-
-  /*
-   * State info for the current subpicture
-   * buffer
-   */
-  guchar *parse_pos;
-
-  guint16 packet_size;
-  guint16 data_size;
-
-  gint offset[2];
-
-  gboolean forced_display;
-  gboolean visible;
-
-  gint left, top, right, bottom;
-  gint hl_left, hl_top, hl_right, hl_bottom;
-
-  gint current_button;
-
-  GstClockTime next_event_ts;
-
-  gboolean buf_dirty;
-};
-
-struct _GstDvdSubDecClass
-{
-  GstElementClass parent_class;
-};
-
-GType gst_dvd_sub_dec_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (dvdsubdec);
-
-G_END_DECLS
-
-#endif /* __GST_DVDSUBDEC_H__ */
diff --git a/gst/dvdsub/gstdvdsubparse.c b/gst/dvdsub/gstdvdsubparse.c
deleted file mode 100644 (file)
index 9d0e1d0..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-/* GStreamer DVD subtitle parser
- * Copyright (C) 2007 Mark Nauwelaerts <mnauw@users.sourceforge.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include <gst/gst.h>
-#include "gstdvdsubparse.h"
-
-GST_DEBUG_CATEGORY_STATIC (dvdsubparse_debug);
-#define GST_CAT_DEFAULT   dvdsubparse_debug
-
-static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("subpicture/x-dvd, parsed=(boolean)true")
-    );
-
-static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("subpicture/x-dvd")
-    );
-
-static void gst_dvd_sub_parse_finalize (GObject * object);
-
-static void gst_dvd_sub_parse_reset (GstDvdSubParse * parse);
-
-static gboolean gst_dvd_sub_parse_event (GstPad * pad, GstObject * parent,
-    GstEvent * event);
-static GstFlowReturn gst_dvd_sub_parse_chain (GstPad * pad, GstObject * parent,
-    GstBuffer * buf);
-
-static GstStateChangeReturn gst_dvd_sub_parse_change_state (GstElement *
-    element, GstStateChange transition);
-
-#define gst_dvd_sub_parse_parent_class parent_class
-G_DEFINE_TYPE (GstDvdSubParse, gst_dvd_sub_parse, GST_TYPE_ELEMENT);
-GST_ELEMENT_REGISTER_DEFINE (dvdsubparse, "dvdsubparse", GST_RANK_NONE,
-    GST_TYPE_DVD_SUB_PARSE);
-
-static void
-gst_dvd_sub_parse_class_init (GstDvdSubParseClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-
-  gobject_class->finalize = gst_dvd_sub_parse_finalize;
-
-  GST_DEBUG_CATEGORY_INIT (dvdsubparse_debug, "dvdsubparse", 0,
-      "DVD subtitle parser");
-
-  gstelement_class->change_state =
-      GST_DEBUG_FUNCPTR (gst_dvd_sub_parse_change_state);
-
-  gst_element_class_add_static_pad_template (gstelement_class, &src_template);
-  gst_element_class_add_static_pad_template (gstelement_class, &sink_template);
-
-  gst_element_class_set_static_metadata (gstelement_class,
-      "DVD subtitle parser", "Codec/Parser/Subtitle",
-      "Parses and packetizes DVD subtitle streams",
-      "Mark Nauwelaerts <mnauw@users.sourceforge.net>");
-}
-
-static void
-gst_dvd_sub_parse_finalize (GObject * object)
-{
-  GstDvdSubParse *parse = GST_DVD_SUB_PARSE (object);
-
-  g_object_unref (parse->adapter);
-  parse->adapter = NULL;
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-gst_dvd_sub_parse_init (GstDvdSubParse * parse)
-{
-  parse->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink");
-  gst_pad_set_chain_function (parse->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_dvd_sub_parse_chain));
-  gst_pad_set_event_function (parse->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_dvd_sub_parse_event));
-  gst_element_add_pad (GST_ELEMENT (parse), parse->sinkpad);
-
-  parse->srcpad = gst_pad_new_from_static_template (&src_template, "src");
-  gst_pad_use_fixed_caps (parse->srcpad);
-  gst_pad_set_caps (parse->srcpad,
-      gst_static_pad_template_get_caps (&src_template));
-  gst_element_add_pad (GST_ELEMENT (parse), parse->srcpad);
-
-  /* remainder */
-  parse->adapter = gst_adapter_new ();
-  gst_dvd_sub_parse_reset (parse);
-}
-
-static void
-gst_dvd_sub_parse_reset (GstDvdSubParse * parse)
-{
-  parse->needed = 0;
-  parse->stamp = GST_CLOCK_TIME_NONE;
-  gst_adapter_clear (parse->adapter);
-}
-
-static gboolean
-gst_dvd_sub_parse_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
-  GstDvdSubParse *parse;
-  gboolean ret;
-
-  parse = GST_DVD_SUB_PARSE (parent);
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_CAPS:
-    {
-      GstCaps *caps;
-
-      gst_event_unref (event);
-      caps = gst_static_pad_template_get_caps (&src_template);
-      gst_pad_push_event (parse->srcpad, gst_event_new_caps (caps));
-      gst_caps_unref (caps);
-      ret = TRUE;
-      break;
-    }
-    case GST_EVENT_FLUSH_STOP:
-      gst_dvd_sub_parse_reset (parse);
-      /* fall-through */
-    default:
-      ret = gst_pad_event_default (pad, parent, event);
-      break;
-  }
-
-  return ret;
-}
-
-
-static GstFlowReturn
-gst_dvd_sub_parse_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
-{
-  GstDvdSubParse *parse = GST_DVD_SUB_PARSE (parent);
-  GstAdapter *adapter;
-  GstBuffer *outbuf = NULL;
-  GstFlowReturn ret = GST_FLOW_OK;
-
-  adapter = parse->adapter;
-
-  GST_LOG_OBJECT (parse, "%" G_GSIZE_FORMAT " bytes, ts: %" GST_TIME_FORMAT,
-      gst_buffer_get_size (buf), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
-
-  gst_adapter_push (adapter, buf);
-
-  if (!parse->needed) {
-    guint8 data[2];
-
-    gst_adapter_copy (adapter, data, 0, 2);
-    parse->needed = GST_READ_UINT16_BE (data);
-  }
-
-  if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
-    if (GST_CLOCK_TIME_IS_VALID (parse->stamp))
-      /* normally, we expect only the first fragment to carry a timestamp */
-      GST_WARNING_OBJECT (parse, "Received more timestamps than expected.");
-    else
-      parse->stamp = GST_BUFFER_TIMESTAMP (buf);
-  }
-
-  if (parse->needed) {
-    guint av;
-
-    av = gst_adapter_available (adapter);
-    if (av >= parse->needed) {
-      if (av > parse->needed) {
-        /* normally, we expect several fragment, boundary aligned */
-        GST_WARNING_OBJECT (parse, "Unexpected: needed %d, "
-            "but more (%d) is available.", parse->needed, av);
-      }
-      outbuf = gst_adapter_take_buffer (adapter, parse->needed);
-      /* decorate buffer */
-      GST_BUFFER_TIMESTAMP (outbuf) = parse->stamp;
-      /* reset state */
-      parse->stamp = GST_CLOCK_TIME_NONE;
-      parse->needed = 0;
-      /* and send along */
-      ret = gst_pad_push (parse->srcpad, outbuf);
-    }
-  }
-
-  return ret;
-}
-
-static GstStateChangeReturn
-gst_dvd_sub_parse_change_state (GstElement * element, GstStateChange transition)
-{
-  GstDvdSubParse *parse = GST_DVD_SUB_PARSE (element);
-  GstStateChangeReturn ret;
-
-  switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:
-    case GST_STATE_CHANGE_READY_TO_PAUSED:
-      break;
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      break;
-    default:
-      break;
-  }
-
-  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-  if (ret != GST_STATE_CHANGE_SUCCESS)
-    return ret;
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      gst_dvd_sub_parse_reset (parse);
-      break;
-    default:
-      break;
-  }
-
-  return GST_STATE_CHANGE_SUCCESS;
-}
diff --git a/gst/dvdsub/gstdvdsubparse.h b/gst/dvdsub/gstdvdsubparse.h
deleted file mode 100644 (file)
index 0df1ad0..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/* GStreamer DVD subtitle parser
- * Copyright (C) 2007 Mark Nauwelaerts <mnauw@users.sourceforge.net>
- *
- * 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_DVDSUBPARSE_H__
-#define __GST_DVDSUBPARSE_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstadapter.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_DVD_SUB_PARSE \
-  (gst_dvd_sub_parse_get_type())
-#define GST_DVD_SUB_PARSE(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_DVD_SUB_PARSE, GstDvdSubParse))
-#define GST_DVD_SUB_PARSE_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_DVD_SUB_PARSE, GstDvdSubParseClass))
-#define GST_DVD_SUB_PARSE_GET_CLASS(obj) \
-  (G_TYPE_INSTANCE_GET_CLASS((obj), GST_TYPE_DVD_SUB_PARSE, GstDvdSubParseClass))
-#define GST_IS_DVD_SUB_PARSE(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_DVD_SUB_PARSE))
-#define GST_IS_DVD_SUB_PARSE_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_DVD_SUB_PARSE))
-
-typedef struct _GstDvdSubParse GstDvdSubParse;
-typedef struct _GstDvdSubParseClass GstDvdSubParseClass;
-
-struct _GstDvdSubParse {
-  GstElement element;
-
-  /*< private >*/
-  GstPad       *srcpad;
-  GstPad       *sinkpad;
-
-  GstAdapter   *adapter;   /* buffer incoming data                   */
-  GstClockTime  stamp;     /* timestamp of current packet            */
-  guint         needed;    /* size of current packet to be assembled */
-};
-
-struct _GstDvdSubParseClass {
-  GstElementClass parent_class;
-};
-
-GType gst_dvd_sub_parse_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (dvdsubparse);
-
-G_END_DECLS
-
-#endif /* __GST_DVDSUBPARSE_H__ */
-
diff --git a/gst/dvdsub/meson.build b/gst/dvdsub/meson.build
deleted file mode 100644 (file)
index 827fb4e..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-dvdsub_sources = [
-  'gstdvdsubdec.c',
-  'gstdvdsubparse.c',
-]
-
-gstdvdsub = library('gstdvdsub',
-  dvdsub_sources,
-  c_args : ugly_args,
-  include_directories : [configinc],
-  dependencies : [gstbase_dep, gstvideo_dep],
-  install : true,
-  install_dir : plugins_install_dir,
-)
-pkgconfig.generate(gstdvdsub, install_dir : plugins_pkgconfig_install_dir)
-plugins += [gstdvdsub]
diff --git a/gst/meson.build b/gst/meson.build
deleted file mode 100644 (file)
index 19e7d2a..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-foreach plugin : ['asfdemux', 'dvdlpcmdec', 'dvdsub', 'realmedia', 'xingmux']
-  if not get_option(plugin).disabled()
-    subdir(plugin)
-  endif
-endforeach
diff --git a/gst/realmedia/asmrules.c b/gst/realmedia/asmrules.c
deleted file mode 100644 (file)
index af2f8a0..0000000
+++ /dev/null
@@ -1,712 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <string.h>
-#include <stdlib.h>
-
-#include "asmrules.h"
-
-#define MAX_RULE_LENGTH        2048
-
-/* define to enable some more debug */
-#undef DEBUG
-
-static GstASMNode *
-gst_asm_node_new (void)
-{
-  GstASMNode *node;
-
-  node = g_new0 (GstASMNode, 1);
-  node->type = GST_ASM_NODE_UNKNOWN;
-
-  return node;
-}
-
-static void
-gst_asm_node_free (GstASMNode * node)
-{
-  if (node->left)
-    gst_asm_node_free (node->left);
-  if (node->right)
-    gst_asm_node_free (node->right);
-  if (node->type == GST_ASM_NODE_VARIABLE && node->data.varname)
-    g_free (node->data.varname);
-  g_free (node);
-}
-
-static gfloat
-gst_asm_operator_eval (GstASMOp optype, gfloat left, gfloat right)
-{
-  gfloat result = 0.0;
-
-  switch (optype) {
-    case GST_ASM_OP_GREATER:
-      result = (gfloat) (left > right);
-      break;
-    case GST_ASM_OP_LESS:
-      result = (gfloat) (left < right);
-      break;
-    case GST_ASM_OP_GREATEREQUAL:
-      result = (gfloat) (left >= right);
-      break;
-    case GST_ASM_OP_LESSEQUAL:
-      result = (gfloat) (left <= right);
-      break;
-    case GST_ASM_OP_EQUAL:
-      result = (gfloat) (left == right);
-      break;
-    case GST_ASM_OP_NOTEQUAL:
-      result = (gfloat) (left != right);
-      break;
-    case GST_ASM_OP_AND:
-      result = (gfloat) (left && right);
-      break;
-    case GST_ASM_OP_OR:
-      result = (gfloat) (left || right);
-      break;
-    default:
-      break;
-  }
-  return result;
-}
-
-static gfloat
-gst_asm_node_evaluate (GstASMNode * node, GHashTable * vars)
-{
-  gfloat result = 0.0;
-
-  if (node == NULL)
-    return 0.0;
-
-  switch (node->type) {
-    case GST_ASM_NODE_VARIABLE:
-    {
-      gchar *val;
-
-      val = g_hash_table_lookup (vars, node->data.varname);
-      if (val)
-        result = (gfloat) atof (val);
-      break;
-    }
-    case GST_ASM_NODE_INTEGER:
-      result = (gfloat) node->data.intval;
-      break;
-    case GST_ASM_NODE_FLOAT:
-      result = node->data.floatval;
-      break;
-    case GST_ASM_NODE_OPERATOR:
-    {
-      gfloat left, right;
-
-      left = gst_asm_node_evaluate (node->left, vars);
-      right = gst_asm_node_evaluate (node->right, vars);
-
-      result = gst_asm_operator_eval (node->data.optype, left, right);
-      break;
-    }
-    default:
-      break;
-  }
-  return result;
-}
-
-#define IS_SPACE(p) (((p) == ' ') || ((p) == '\n') || \
-                     ((p) == '\r') || ((p) == '\t'))
-#define IS_RULE_DELIM(p) (((p) == ',') || ((p) == ';') || ((p) == ')'))
-#define IS_OPERATOR(p) (((p) == '>') || ((p) == '<') || \
-                        ((p) == '=') || ((p) == '!') || \
-                        ((p) == '&') || ((p) == '|'))
-#define IS_NUMBER(p) ((((p) >= '0') && ((p) <= '9')) || ((p) == '.'))
-#define IS_CHAR(p) (!IS_OPERATOR(ch) && !IS_RULE_DELIM(ch) && (ch != '\0'))
-
-#define IS_OP_TOKEN(t) (((t) == GST_ASM_TOKEN_AND) || ((t) == GST_ASM_TOKEN_OR))
-#define IS_COND_TOKEN(t) (((t) == GST_ASM_TOKEN_LESS) || ((t) == GST_ASM_TOKEN_LESSEQUAL) || \
-               ((t) == GST_ASM_TOKEN_GREATER) || ((t) == GST_ASM_TOKEN_GREATEREQUAL) || \
-               ((t) == GST_ASM_TOKEN_EQUAL) || ((t) == GST_ASM_TOKEN_NOTEQUAL))
-
-typedef struct
-{
-  const gchar *buffer;
-  gint pos;
-  gchar ch;
-
-  GstASMToken token;
-  gchar val[MAX_RULE_LENGTH];
-} GstASMScan;
-
-#define NEXT_CHAR(scan) ((scan)->ch = (scan)->buffer[(scan)->pos++])
-#define THIS_CHAR(scan) ((scan)->ch)
-
-static GstASMScan *
-gst_asm_scan_new (const gchar * buffer)
-{
-  GstASMScan *scan;
-
-  scan = g_new0 (GstASMScan, 1);
-  scan->buffer = buffer;
-  NEXT_CHAR (scan);
-
-  return scan;
-}
-
-static void
-gst_asm_scan_free (GstASMScan * scan)
-{
-  g_free (scan);
-}
-
-static void
-gst_asm_scan_string (GstASMScan * scan, gchar delim)
-{
-  gchar ch;
-  gint i = 0;
-
-  ch = THIS_CHAR (scan);
-  while ((ch != delim) && (ch != '\0')) {
-    if (i < MAX_RULE_LENGTH - 1)
-      scan->val[i++] = ch;
-    ch = NEXT_CHAR (scan);
-    if (ch == '\\')
-      ch = NEXT_CHAR (scan);
-  }
-  scan->val[i] = '\0';
-
-  if (ch == delim)
-    NEXT_CHAR (scan);
-
-  scan->token = GST_ASM_TOKEN_STRING;
-}
-
-static void
-gst_asm_scan_number (GstASMScan * scan)
-{
-  gchar ch;
-  gint i = 0;
-  gboolean have_float = FALSE;
-
-  ch = THIS_CHAR (scan);
-  /* real strips all spaces that are not inside quotes for numbers */
-  while ((IS_NUMBER (ch) || IS_SPACE (ch))) {
-    if (i < (MAX_RULE_LENGTH - 1) && !IS_SPACE (ch))
-      scan->val[i++] = ch;
-    if (ch == '.')
-      have_float = TRUE;
-    ch = NEXT_CHAR (scan);
-  }
-  scan->val[i] = '\0';
-
-  if (have_float)
-    scan->token = GST_ASM_TOKEN_FLOAT;
-  else
-    scan->token = GST_ASM_TOKEN_INT;
-}
-
-static void
-gst_asm_scan_identifier (GstASMScan * scan)
-{
-  gchar ch;
-  gint i = 0;
-
-  ch = THIS_CHAR (scan);
-  /* real strips all spaces that are not inside quotes for identifiers */
-  while ((IS_CHAR (ch) || IS_SPACE (ch))) {
-    if (i < (MAX_RULE_LENGTH - 1) && !IS_SPACE (ch))
-      scan->val[i++] = ch;
-    ch = NEXT_CHAR (scan);
-  }
-  scan->val[i] = '\0';
-
-  scan->token = GST_ASM_TOKEN_IDENTIFIER;
-}
-
-static void
-gst_asm_scan_print_token (GstASMScan * scan)
-{
-#ifdef DEBUG
-  switch (scan->token) {
-    case GST_ASM_TOKEN_NONE:
-      g_print ("none\n");
-      break;
-    case GST_ASM_TOKEN_EOF:
-      g_print ("EOF\n");
-      break;
-
-    case GST_ASM_TOKEN_INT:
-      g_print ("INT %d\n", atoi (scan->val));
-      break;
-    case GST_ASM_TOKEN_FLOAT:
-      g_print ("FLOAT %f\n", atof (scan->val));
-      break;
-    case GST_ASM_TOKEN_IDENTIFIER:
-      g_print ("ID %s\n", scan->val);
-      break;
-    case GST_ASM_TOKEN_STRING:
-      g_print ("STRING %s\n", scan->val);
-      break;
-
-    case GST_ASM_TOKEN_HASH:
-      g_print ("HASH\n");
-      break;
-    case GST_ASM_TOKEN_SEMICOLON:
-      g_print ("SEMICOLON\n");
-      break;
-    case GST_ASM_TOKEN_COMMA:
-      g_print ("COMMA\n");
-      break;
-    case GST_ASM_TOKEN_EQUAL:
-      g_print ("==\n");
-      break;
-    case GST_ASM_TOKEN_NOTEQUAL:
-      g_print ("!=\n");
-      break;
-    case GST_ASM_TOKEN_AND:
-      g_print ("&&\n");
-      break;
-    case GST_ASM_TOKEN_OR:
-      g_print ("||\n");
-      break;
-    case GST_ASM_TOKEN_LESS:
-      g_print ("<\n");
-      break;
-    case GST_ASM_TOKEN_LESSEQUAL:
-      g_print ("<=\n");
-      break;
-    case GST_ASM_TOKEN_GREATER:
-      g_print (">\n");
-      break;
-    case GST_ASM_TOKEN_GREATEREQUAL:
-      g_print (">=\n");
-      break;
-    case GST_ASM_TOKEN_DOLLAR:
-      g_print ("$\n");
-      break;
-    case GST_ASM_TOKEN_LPAREN:
-      g_print ("(\n");
-      break;
-    case GST_ASM_TOKEN_RPAREN:
-      g_print (")\n");
-      break;
-    default:
-      break;
-  }
-#endif
-}
-
-static GstASMToken
-gst_asm_scan_next_token (GstASMScan * scan)
-{
-  gchar ch;
-
-  ch = THIS_CHAR (scan);
-
-  /* skip spaces */
-  while (IS_SPACE (ch))
-    ch = NEXT_CHAR (scan);
-
-  /* remove \ which is common in front of " */
-  while (ch == '\\')
-    ch = NEXT_CHAR (scan);
-
-  switch (ch) {
-    case '#':
-      scan->token = GST_ASM_TOKEN_HASH;
-      NEXT_CHAR (scan);
-      break;
-    case ';':
-      scan->token = GST_ASM_TOKEN_SEMICOLON;
-      NEXT_CHAR (scan);
-      break;
-    case ',':
-      scan->token = GST_ASM_TOKEN_COMMA;
-      NEXT_CHAR (scan);
-      break;
-    case '=':
-      scan->token = GST_ASM_TOKEN_EQUAL;
-      if (NEXT_CHAR (scan) == '=')
-        NEXT_CHAR (scan);
-      break;
-    case '!':
-      if (NEXT_CHAR (scan) == '=') {
-        scan->token = GST_ASM_TOKEN_NOTEQUAL;
-        NEXT_CHAR (scan);
-      }
-      break;
-    case '&':
-      scan->token = GST_ASM_TOKEN_AND;
-      if (NEXT_CHAR (scan) == '&')
-        NEXT_CHAR (scan);
-      break;
-    case '|':
-      scan->token = GST_ASM_TOKEN_OR;
-      if (NEXT_CHAR (scan) == '|')
-        NEXT_CHAR (scan);
-      break;
-    case '<':
-      scan->token = GST_ASM_TOKEN_LESS;
-      if (NEXT_CHAR (scan) == '=') {
-        scan->token = GST_ASM_TOKEN_LESSEQUAL;
-        NEXT_CHAR (scan);
-      }
-      break;
-    case '>':
-      scan->token = GST_ASM_TOKEN_GREATER;
-      if (NEXT_CHAR (scan) == '=') {
-        scan->token = GST_ASM_TOKEN_GREATEREQUAL;
-        NEXT_CHAR (scan);
-      }
-      break;
-    case '$':
-      scan->token = GST_ASM_TOKEN_DOLLAR;
-      NEXT_CHAR (scan);
-      break;
-    case '(':
-      scan->token = GST_ASM_TOKEN_LPAREN;
-      NEXT_CHAR (scan);
-      break;
-    case ')':
-      scan->token = GST_ASM_TOKEN_RPAREN;
-      NEXT_CHAR (scan);
-      break;
-    case '"':
-      NEXT_CHAR (scan);
-      gst_asm_scan_string (scan, '"');
-      break;
-    case '\'':
-      NEXT_CHAR (scan);
-      gst_asm_scan_string (scan, '\'');
-      break;
-    case '0':
-    case '1':
-    case '2':
-    case '3':
-    case '4':
-    case '5':
-    case '6':
-    case '7':
-    case '8':
-    case '9':
-      gst_asm_scan_number (scan);
-      break;
-    case '\0':
-      scan->token = GST_ASM_TOKEN_EOF;
-      break;
-    default:
-      gst_asm_scan_identifier (scan);
-      break;
-  }
-  gst_asm_scan_print_token (scan);
-  return scan->token;
-}
-
-static GstASMRule *
-gst_asm_rule_new (void)
-{
-  GstASMRule *rule;
-
-  rule = g_new (GstASMRule, 1);
-  rule->root = NULL;
-  rule->props = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
-
-  return rule;
-}
-
-static void
-gst_asm_rule_free (GstASMRule * rule)
-{
-  g_hash_table_destroy (rule->props);
-  if (rule->root)
-    gst_asm_node_free (rule->root);
-  g_free (rule);
-}
-
-static void
-gst_asm_rule_add_property (GstASMRule * rule, gchar * key, gchar * val)
-{
-  g_hash_table_insert (rule->props, key, val);
-}
-
-static GstASMNode *gst_asm_scan_parse_condition (GstASMScan * scan);
-
-static GstASMNode *
-gst_asm_scan_parse_operand (GstASMScan * scan)
-{
-  GstASMNode *node;
-
-  switch (scan->token) {
-    case GST_ASM_TOKEN_DOLLAR:
-      gst_asm_scan_next_token (scan);
-
-      if (scan->token != GST_ASM_TOKEN_IDENTIFIER)
-        g_warning ("identifier expected");
-
-      node = gst_asm_node_new ();
-      node->type = GST_ASM_NODE_VARIABLE;
-      node->data.varname = g_strdup (scan->val);
-      break;
-    case GST_ASM_TOKEN_INT:
-      node = gst_asm_node_new ();
-      node->type = GST_ASM_NODE_INTEGER;
-      node->data.intval = (gfloat) atof (scan->val);
-      break;
-    case GST_ASM_TOKEN_FLOAT:
-      node = gst_asm_node_new ();
-      node->type = GST_ASM_NODE_FLOAT;
-      node->data.floatval = atoi (scan->val);
-      break;
-    case GST_ASM_TOKEN_LPAREN:
-      gst_asm_scan_next_token (scan);
-      node = gst_asm_scan_parse_condition (scan);
-      if (scan->token != GST_ASM_TOKEN_RPAREN)
-        g_warning (") expected");
-      break;
-    default:
-      g_warning ("$ <number> or ) expected");
-      node = NULL;
-      break;
-  }
-  gst_asm_scan_next_token (scan);
-
-  return node;
-}
-
-static GstASMNode *
-gst_asm_scan_parse_expression (GstASMScan * scan)
-{
-  GstASMNode *node, *left;
-
-  node = gst_asm_scan_parse_operand (scan);
-
-  while (IS_COND_TOKEN (scan->token)) {
-    left = node;
-
-    node = gst_asm_node_new ();
-    node->type = GST_ASM_NODE_OPERATOR;
-    node->data.optype = (GstASMOp) scan->token;
-
-    gst_asm_scan_next_token (scan);
-
-    node->right = gst_asm_scan_parse_operand (scan);
-    node->left = left;
-  }
-  return node;
-}
-
-static GstASMNode *
-gst_asm_scan_parse_condition (GstASMScan * scan)
-{
-  GstASMNode *node, *left;
-
-  node = gst_asm_scan_parse_expression (scan);
-
-  while (IS_OP_TOKEN (scan->token)) {
-    left = node;
-
-    node = gst_asm_node_new ();
-    node->type = GST_ASM_NODE_OPERATOR;
-    node->data.optype = (GstASMOp) scan->token;
-
-    gst_asm_scan_next_token (scan);
-
-    node->right = gst_asm_scan_parse_expression (scan);
-    node->left = left;
-  }
-  return node;
-}
-
-static void
-gst_asm_scan_parse_property (GstASMRule * rule, GstASMScan * scan)
-{
-  gchar *key, *val;
-
-  if (scan->token != GST_ASM_TOKEN_IDENTIFIER) {
-    g_warning ("identifier expected");
-    return;
-  }
-  key = g_strdup (scan->val);
-
-  gst_asm_scan_next_token (scan);
-  if (scan->token != GST_ASM_TOKEN_EQUAL) {
-    g_warning ("= expected");
-    g_free (key);
-    return;
-  }
-  gst_asm_scan_next_token (scan);
-  val = g_strdup (scan->val);
-
-  gst_asm_rule_add_property (rule, key, val);
-  gst_asm_scan_next_token (scan);
-}
-
-static GstASMRule *
-gst_asm_scan_parse_rule (GstASMScan * scan)
-{
-  GstASMRule *rule;
-
-  rule = gst_asm_rule_new ();
-
-  if (scan->token == GST_ASM_TOKEN_HASH) {
-    gst_asm_scan_next_token (scan);
-    rule->root = gst_asm_scan_parse_condition (scan);
-    if (scan->token == GST_ASM_TOKEN_COMMA)
-      gst_asm_scan_next_token (scan);
-  }
-
-  if (scan->token != GST_ASM_TOKEN_SEMICOLON) {
-    gst_asm_scan_parse_property (rule, scan);
-    while (scan->token == GST_ASM_TOKEN_COMMA) {
-      gst_asm_scan_next_token (scan);
-      gst_asm_scan_parse_property (rule, scan);
-    }
-    gst_asm_scan_next_token (scan);
-  }
-  return rule;
-}
-
-static gboolean
-gst_asm_rule_evaluate (GstASMRule * rule, GHashTable * vars)
-{
-  gboolean res;
-
-  if (rule->root) {
-    res = (gboolean) gst_asm_node_evaluate (rule->root, vars);
-  } else
-    res = TRUE;
-
-  return res;
-}
-
-GstASMRuleBook *
-gst_asm_rule_book_new (const gchar * rulebook)
-{
-  GstASMRuleBook *book;
-  GstASMRule *rule = NULL;
-  GstASMScan *scan;
-  GstASMToken token;
-
-  book = g_new0 (GstASMRuleBook, 1);
-  book->rulebook = rulebook;
-
-  scan = gst_asm_scan_new (book->rulebook);
-  gst_asm_scan_next_token (scan);
-
-  do {
-    rule = gst_asm_scan_parse_rule (scan);
-    if (rule) {
-      book->rules = g_list_append (book->rules, rule);
-      book->n_rules++;
-    }
-    token = scan->token;
-  } while (token != GST_ASM_TOKEN_EOF);
-
-  gst_asm_scan_free (scan);
-
-  return book;
-}
-
-void
-gst_asm_rule_book_free (GstASMRuleBook * book)
-{
-  GList *walk;
-
-  for (walk = book->rules; walk; walk = g_list_next (walk)) {
-    GstASMRule *rule = (GstASMRule *) walk->data;
-
-    gst_asm_rule_free (rule);
-  }
-  g_list_free (book->rules);
-  g_free (book);
-}
-
-gint
-gst_asm_rule_book_match (GstASMRuleBook * book, GHashTable * vars,
-    gint * rulematches)
-{
-  GList *walk;
-  gint i, n = 0;
-
-  for (walk = book->rules, i = 0; walk; walk = g_list_next (walk), i++) {
-    GstASMRule *rule = (GstASMRule *) walk->data;
-
-    if (gst_asm_rule_evaluate (rule, vars)) {
-      rulematches[n++] = i;
-    }
-  }
-  return n;
-}
-
-#ifdef TEST
-gint
-main (gint argc, gchar * argv[])
-{
-  GstASMRuleBook *book;
-  gint rulematch[MAX_RULEMATCHES];
-  GHashTable *vars;
-  gint i, n;
-
-  static const gchar rules1[] =
-      "#($Bandwidth < 67959),TimestampDelivery=T,DropByN=T,"
-      "priority=9;#($Bandwidth >= 67959) && ($Bandwidth < 167959),"
-      "AverageBandwidth=67959,Priority=9;#($Bandwidth >= 67959) && ($Bandwidth"
-      " < 167959),AverageBandwidth=0,Priority=5,OnDepend=\\\"1\\\";#($Bandwidth >= 167959)"
-      " && ($Bandwidth < 267959),AverageBandwidth=167959,Priority=9;#($Bandwidth >= 167959)"
-      " && ($Bandwidth < 267959),AverageBandwidth=0,Priority=5,OnDepend=\\\"3\\\";"
-      "#($Bandwidth >= 267959),AverageBandwidth=267959,Priority=9;#($Bandwidth >= 267959)"
-      ",AverageBandwidth=0,Priority=5,OnDepend=\\\"5\\\";";
-  static const gchar rules2[] =
-      "AverageBandwidth=32041,Priority=5;AverageBandwidth=0,"
-      "Priority=5,OnDepend=\\\"0\\\", OffDepend=\\\"0\\\";";
-  static const gchar rules3[] =
-      "#(($Bandwidth >= 27500) && ($OldPNMPlayer)),AverageBandwidth=27500,priority=9,PNMKeyframeRule=T;#(($Bandwidth >= 27500) && ($OldPNMPlayer)),AverageBandwidth=0,priority=5,PNMNonKeyframeRule=T;#(($Bandwidth < 27500) && ($OldPNMPlayer)),TimestampDelivery=T,DropByN=T,priority=9,PNMThinningRule=T;#($Bandwidth < 13899),TimestampDelivery=T,DropByN=T,priority=9;#($Bandwidth >= 13899) && ($Bandwidth < 19000),AverageBandwidth=13899,Priority=9;#($Bandwidth >= 13899) && ($Bandwidth < 19000),AverageBandwidth=0,Priority=5,OnDepend=\\\"4\\\";#($Bandwidth >= 19000) && ($Bandwidth < 27500),AverageBandwidth=19000,Priority=9;#($Bandwidth >= 19000) && ($Bandwidth < 27500),AverageBandwidth=0,Priority=5,OnDepend=\\\"6\\\";#($Bandwidth >= 27500) && ($Bandwidth < 132958),AverageBandwidth=27500,Priority=9;#($Bandwidth >= 27500) && ($Bandwidth < 132958),AverageBandwidth=0,Priority=5,OnDepend=\\\"8\\\";#($Bandwidth >= 132958) && ($Bandwidth < 187958),AverageBandwidth=132958,Priority=9;#($Bandwidth >= 132958) && ($Bandwidth < 187958),AverageBandwidth=0,Priority=5,OnDepend=\\\"10\\\";#($Bandwidth >= 187958),AverageBandwidth=187958,Priority=9;#($Bandwidth >= 187958),AverageBandwidth=0,Priority=5,OnDepend=\\\"12\\\";";
-
-  vars = g_hash_table_new (g_str_hash, g_str_equal);
-  g_hash_table_insert (vars, (gchar *) "Bandwidth", (gchar *) "300000");
-
-  book = gst_asm_rule_book_new (rules1);
-  n = gst_asm_rule_book_match (book, vars, rulematch);
-  gst_asm_rule_book_free (book);
-
-  g_print ("%d rules matched\n", n);
-  for (i = 0; i < n; i++) {
-    g_print ("rule %d matched\n", rulematch[i]);
-  }
-
-  book = gst_asm_rule_book_new (rules2);
-  n = gst_asm_rule_book_match (book, vars, rulematch);
-  gst_asm_rule_book_free (book);
-
-  g_print ("%d rules matched\n", n);
-  for (i = 0; i < n; i++) {
-    g_print ("rule %d matched\n", rulematch[i]);
-  }
-
-  book = gst_asm_rule_book_new (rules3);
-  n = gst_asm_rule_book_match (book, vars, rulematch);
-  gst_asm_rule_book_free (book);
-
-
-  g_print ("%d rules matched\n", n);
-  for (i = 0; i < n; i++) {
-    g_print ("rule %d matched\n", rulematch[i]);
-  }
-
-  g_hash_table_destroy (vars);
-
-  return 0;
-}
-#endif
diff --git a/gst/realmedia/asmrules.h b/gst/realmedia/asmrules.h
deleted file mode 100644 (file)
index 1f84f68..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.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_ASM_RULES_H__
-#define __GST_ASM_RULES_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define MAX_RULEMATCHES 16
-
-typedef struct _GstASMNode GstASMNode;
-typedef struct _GstASMRule GstASMRule;
-typedef struct _GstASMRuleBook GstASMRuleBook;
-
-typedef enum {
-  GST_ASM_TOKEN_NONE,
-  GST_ASM_TOKEN_EOF,
-
-  GST_ASM_TOKEN_INT,
-  GST_ASM_TOKEN_FLOAT,
-  GST_ASM_TOKEN_IDENTIFIER,
-  GST_ASM_TOKEN_STRING,
-  
-  GST_ASM_TOKEN_HASH,
-  GST_ASM_TOKEN_SEMICOLON,
-  GST_ASM_TOKEN_COMMA,
-  GST_ASM_TOKEN_DOLLAR,
-
-  GST_ASM_TOKEN_LPAREN,
-  GST_ASM_TOKEN_RPAREN,
-
-  GST_ASM_TOKEN_GREATER,
-  GST_ASM_TOKEN_LESS,
-  GST_ASM_TOKEN_GREATEREQUAL,
-  GST_ASM_TOKEN_LESSEQUAL,
-  GST_ASM_TOKEN_EQUAL,
-  GST_ASM_TOKEN_NOTEQUAL,
-
-  GST_ASM_TOKEN_AND,
-  GST_ASM_TOKEN_OR
-} GstASMToken;
-
-typedef enum {
-  GST_ASM_NODE_UNKNOWN,
-  GST_ASM_NODE_VARIABLE,
-  GST_ASM_NODE_INTEGER,
-  GST_ASM_NODE_FLOAT,
-  GST_ASM_NODE_OPERATOR
-} GstASMNodeType;
-
-typedef enum {
-  GST_ASM_OP_GREATER      = GST_ASM_TOKEN_GREATER,
-  GST_ASM_OP_LESS         = GST_ASM_TOKEN_LESS,
-  GST_ASM_OP_GREATEREQUAL = GST_ASM_TOKEN_GREATEREQUAL,
-  GST_ASM_OP_LESSEQUAL    = GST_ASM_TOKEN_LESSEQUAL,
-  GST_ASM_OP_EQUAL        = GST_ASM_TOKEN_EQUAL,
-  GST_ASM_OP_NOTEQUAL     = GST_ASM_TOKEN_NOTEQUAL,
-
-  GST_ASM_OP_AND          = GST_ASM_TOKEN_AND,
-  GST_ASM_OP_OR           = GST_ASM_TOKEN_OR
-} GstASMOp;
-
-struct _GstASMNode {
-  GstASMNodeType  type;
-
-  union {
-    gchar   *varname;
-    gint     intval;
-    gfloat   floatval;
-    GstASMOp optype;
-  } data;
-
-  GstASMNode     *left;
-  GstASMNode     *right;
-};
-
-struct _GstASMRule {
-  GstASMNode *root;
-  GHashTable *props;
-};
-
-struct _GstASMRuleBook {
-  const gchar *rulebook;
-
-  guint        n_rules;
-  GList       *rules;
-};
-
-G_END_DECLS
-
-GstASMRuleBook*   gst_asm_rule_book_new     (const gchar *rulebook);
-void              gst_asm_rule_book_free    (GstASMRuleBook *book);
-
-gint              gst_asm_rule_book_match   (GstASMRuleBook *book, GHashTable *vars, 
-                                            gint *rulematches);
-
-#endif /* __GST_ASM_RULES_H__ */
diff --git a/gst/realmedia/gstrdtbuffer.c b/gst/realmedia/gstrdtbuffer.c
deleted file mode 100644 (file)
index 50bc7f4..0000000
+++ /dev/null
@@ -1,477 +0,0 @@
-/* GStreamer
- * Copyright (C) <2008> Wim Taymans <wim.taymans@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-#include <string.h>
-
-#include "gstrdtbuffer.h"
-
-gboolean
-gst_rdt_buffer_validate_data (guint8 * data, guint len)
-{
-  return TRUE;
-}
-
-gboolean
-gst_rdt_buffer_validate (GstBuffer * buffer)
-{
-  return TRUE;
-}
-
-guint
-gst_rdt_buffer_get_packet_count (GstBuffer * buffer)
-{
-  GstRDTPacket packet;
-  guint count;
-
-  g_return_val_if_fail (GST_IS_BUFFER (buffer), 0);
-
-  count = 0;
-  if (gst_rdt_buffer_get_first_packet (buffer, &packet)) {
-    do {
-      count++;
-    } while (gst_rdt_packet_move_to_next (&packet));
-  }
-  return count;
-}
-
-static gboolean
-read_packet_header (GstRDTPacket * packet)
-{
-  GstMapInfo map;
-  guint8 *data;
-  gsize size;
-  guint offset;
-  guint length;
-  guint length_offset;
-
-  g_return_val_if_fail (packet != NULL, FALSE);
-  g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
-
-  gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
-  data = map.data;
-  size = map.size;
-
-  offset = packet->offset;
-
-  /* check if we are at the end of the buffer, we add 3 because we also want to
-   * ensure we can read the type, which is always at offset 1 and 2 bytes long. */
-  if (offset + 3 > size)
-    goto packet_end;
-
-  /* read type */
-  packet->type = GST_READ_UINT16_BE (&data[offset + 1]);
-
-  length = -1;
-  length_offset = -1;
-
-  /* figure out the length of the packet, this depends on the type */
-  if (GST_RDT_IS_DATA_TYPE (packet->type)) {
-    if (data[offset] & 0x80)
-      /* length is present */
-      length_offset = 3;
-  } else {
-    switch (packet->type) {
-      case GST_RDT_TYPE_ASMACTION:
-        if (data[offset] & 0x80)
-          length_offset = 5;
-        break;
-      case GST_RDT_TYPE_BWREPORT:
-        if (data[offset] & 0x80)
-          length_offset = 3;
-        break;
-      case GST_RDT_TYPE_ACK:
-        if (data[offset] & 0x80)
-          length_offset = 3;
-        break;
-      case GST_RDT_TYPE_RTTREQ:
-        length = 3;
-        break;
-      case GST_RDT_TYPE_RTTRESP:
-        length = 11;
-        break;
-      case GST_RDT_TYPE_CONGESTION:
-        length = 11;
-        break;
-      case GST_RDT_TYPE_STREAMEND:
-        length = 9;
-        /* total_reliable */
-        if (data[offset] & 0x80)
-          length += 2;
-        /* stream_id_expansion */
-        if ((data[offset] & 0x7c) == 0x7c)
-          length += 2;
-        /* ext_flag, FIXME, get string length */
-        if ((data[offset] & 0x1) == 0x1)
-          length += 7;
-        break;
-      case GST_RDT_TYPE_REPORT:
-        if (data[offset] & 0x80)
-          length_offset = 3;
-        break;
-      case GST_RDT_TYPE_LATENCY:
-        if (data[offset] & 0x80)
-          length_offset = 3;
-        break;
-      case GST_RDT_TYPE_INFOREQ:
-        length = 3;
-        /* request_time_ms */
-        if (data[offset] & 0x2)
-          length += 2;
-        break;
-      case GST_RDT_TYPE_INFORESP:
-        length = 3;
-        /* has_rtt_info */
-        if (data[offset] & 0x4) {
-          length += 4;
-          /* is_delayed */
-          if (data[offset] & 0x2) {
-            length += 4;
-          }
-        }
-        if (data[offset] & 0x1) {
-          /* buffer_info_count, FIXME read and skip */
-          length += 2;
-        }
-        break;
-      case GST_RDT_TYPE_AUTOBW:
-        if (data[offset] & 0x80)
-          length_offset = 3;
-        break;
-      case GST_RDT_TYPE_INVALID:
-      default:
-        goto unknown_packet;
-    }
-  }
-
-  if (length != -1) {
-    /* we have a fixed length */
-    packet->length = length;
-  } else if (length_offset != -1) {
-    /* we can read the length from an offset */
-    packet->length = GST_READ_UINT16_BE (&data[length_offset]);
-  } else {
-    /* length is remainder of packet */
-    packet->length = size - offset;
-  }
-  gst_buffer_unmap (packet->buffer, &map);
-
-  /* the length should be smaller than the remaining size */
-  if (packet->length + offset > size)
-    goto invalid_length;
-
-  return TRUE;
-
-  /* ERRORS */
-packet_end:
-  {
-    gst_buffer_unmap (packet->buffer, &map);
-    return FALSE;
-  }
-unknown_packet:
-  {
-    packet->type = GST_RDT_TYPE_INVALID;
-    gst_buffer_unmap (packet->buffer, &map);
-    return FALSE;
-  }
-invalid_length:
-  {
-    packet->type = GST_RDT_TYPE_INVALID;
-    packet->length = 0;
-    return FALSE;
-  }
-}
-
-gboolean
-gst_rdt_buffer_get_first_packet (GstBuffer * buffer, GstRDTPacket * packet)
-{
-  g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE);
-  g_return_val_if_fail (packet != NULL, FALSE);
-
-  /* init to 0 */
-  packet->buffer = buffer;
-  packet->offset = 0;
-  packet->type = GST_RDT_TYPE_INVALID;
-  memset (&packet->map, 0, sizeof (GstMapInfo));
-
-  if (!read_packet_header (packet))
-    return FALSE;
-
-  return TRUE;
-}
-
-gboolean
-gst_rdt_packet_move_to_next (GstRDTPacket * packet)
-{
-  g_return_val_if_fail (packet != NULL, FALSE);
-  g_return_val_if_fail (packet->type != GST_RDT_TYPE_INVALID, FALSE);
-  g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
-
-  /* if we have an invalid packet, it must be the last, 
-   * return FALSE */
-  if (packet->type == GST_RDT_TYPE_INVALID)
-    goto end;
-
-  /* move to next packet */
-  packet->offset += packet->length;
-
-  /* try to read new header */
-  if (!read_packet_header (packet))
-    goto end;
-
-  return TRUE;
-
-  /* ERRORS */
-end:
-  {
-    packet->type = GST_RDT_TYPE_INVALID;
-    return FALSE;
-  }
-}
-
-GstRDTType
-gst_rdt_packet_get_type (GstRDTPacket * packet)
-{
-  g_return_val_if_fail (packet != NULL, GST_RDT_TYPE_INVALID);
-  g_return_val_if_fail (packet->type != GST_RDT_TYPE_INVALID,
-      GST_RDT_TYPE_INVALID);
-
-  return packet->type;
-}
-
-guint16
-gst_rdt_packet_get_length (GstRDTPacket * packet)
-{
-  g_return_val_if_fail (packet != NULL, 0);
-  g_return_val_if_fail (packet->type != GST_RDT_TYPE_INVALID, 0);
-
-  return packet->length;
-}
-
-GstBuffer *
-gst_rdt_packet_to_buffer (GstRDTPacket * packet)
-{
-  GstBuffer *result;
-
-  g_return_val_if_fail (packet != NULL, NULL);
-  g_return_val_if_fail (packet->type != GST_RDT_TYPE_INVALID, NULL);
-
-  result =
-      gst_buffer_copy_region (packet->buffer, GST_BUFFER_COPY_ALL,
-      packet->offset, packet->length);
-  /* timestamp applies to all packets in this buffer */
-  GST_BUFFER_TIMESTAMP (result) = GST_BUFFER_TIMESTAMP (packet->buffer);
-
-  return result;
-}
-
-gint
-gst_rdt_buffer_compare_seqnum (guint16 seqnum1, guint16 seqnum2)
-{
-  return (gint16) (seqnum2 - seqnum1);
-}
-
-guint16
-gst_rdt_packet_data_get_seq (GstRDTPacket * packet)
-{
-  GstMapInfo map;
-  guint header;
-  guint16 result;
-
-  g_return_val_if_fail (packet != NULL, FALSE);
-  g_return_val_if_fail (GST_RDT_IS_DATA_TYPE (packet->type), FALSE);
-
-  gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
-
-  /* skip header bits */
-  header = packet->offset + 1;
-
-  /* read seq_no */
-  result = GST_READ_UINT16_BE (&map.data[header]);
-
-  gst_buffer_unmap (packet->buffer, &map);
-
-  return result;
-}
-
-guint8 *
-gst_rdt_packet_data_map (GstRDTPacket * packet, guint * size)
-{
-  GstMapInfo map;
-  guint header;
-  gboolean length_included_flag;
-  gboolean need_reliable_flag;
-  guint8 stream_id;
-  guint8 asm_rule_number;
-
-  g_return_val_if_fail (packet != NULL, NULL);
-  g_return_val_if_fail (packet->map.data == NULL, NULL);
-  g_return_val_if_fail (GST_RDT_IS_DATA_TYPE (packet->type), NULL);
-
-  gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
-
-  header = packet->offset;
-
-  length_included_flag = (map.data[header] & 0x80) == 0x80;
-  need_reliable_flag = (map.data[header] & 0x40) == 0x40;
-  stream_id = (map.data[header] & 0x3e) >> 1;
-
-  /* skip seq_no and header bits */
-  header += 3;
-
-  if (length_included_flag) {
-    /* skip length */
-    header += 2;
-  }
-  asm_rule_number = (map.data[header] & 0x3f);
-
-  /* skip timestamp and asm_rule_number */
-  header += 5;
-
-  if (stream_id == 0x1f) {
-    /* skip stream_id_expansion */
-    header += 2;
-  }
-  if (need_reliable_flag) {
-    /* skip total_reliable */
-    header += 2;
-  }
-  if (asm_rule_number == 63) {
-    /* skip asm_rule_number_expansion */
-    header += 2;
-  }
-
-  if (size)
-    *size = packet->length - (header - packet->offset);
-
-  packet->map = map;
-
-  return &map.data[header];
-}
-
-gboolean
-gst_rdt_packet_data_unmap (GstRDTPacket * packet)
-{
-  g_return_val_if_fail (packet != NULL, FALSE);
-  g_return_val_if_fail (packet->map.data != NULL, FALSE);
-
-  gst_buffer_unmap (packet->buffer, &packet->map);
-  packet->map.data = NULL;
-
-  return TRUE;
-}
-
-guint16
-gst_rdt_packet_data_get_stream_id (GstRDTPacket * packet)
-{
-  GstMapInfo map;
-  guint16 result;
-  guint header;
-  gboolean length_included_flag;
-
-  g_return_val_if_fail (packet != NULL, 0);
-  g_return_val_if_fail (GST_RDT_IS_DATA_TYPE (packet->type), 0);
-
-  gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
-
-  header = packet->offset;
-
-  length_included_flag = (map.data[header] & 0x80) == 0x80;
-  result = (map.data[header] & 0x3e) >> 1;
-  if (result == 31) {
-    /* skip seq_no and header bits */
-    header += 3;
-
-    if (length_included_flag) {
-      /* skip length */
-      header += 2;
-    }
-    /* skip asm_rule_number and timestamp */
-    header += 5;
-
-    /* stream_id_expansion */
-    result = GST_READ_UINT16_BE (&map.data[header]);
-  }
-  gst_buffer_unmap (packet->buffer, &map);
-
-  return result;
-}
-
-guint32
-gst_rdt_packet_data_get_timestamp (GstRDTPacket * packet)
-{
-  GstMapInfo map;
-  guint header;
-  gboolean length_included_flag;
-  guint32 result;
-
-  g_return_val_if_fail (packet != NULL, 0);
-  g_return_val_if_fail (GST_RDT_IS_DATA_TYPE (packet->type), 0);
-
-  gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
-
-  header = packet->offset;
-
-  length_included_flag = (map.data[header] & 0x80) == 0x80;
-
-  /* skip seq_no and header bits */
-  header += 3;
-
-  if (length_included_flag) {
-    /* skip length */
-    header += 2;
-  }
-  /* skip asm_rule_number */
-  header += 1;
-
-  /* get timestamp */
-  result = GST_READ_UINT32_BE (&map.data[header]);
-  gst_buffer_unmap (packet->buffer, &map);
-
-  return result;
-}
-
-guint8
-gst_rdt_packet_data_get_flags (GstRDTPacket * packet)
-{
-  GstMapInfo map;
-  guint8 result;
-  guint header;
-  gboolean length_included_flag;
-
-  g_return_val_if_fail (packet != NULL, 0);
-  g_return_val_if_fail (GST_RDT_IS_DATA_TYPE (packet->type), 0);
-
-  gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
-
-  header = packet->offset;
-
-  length_included_flag = (map.data[header] & 0x80) == 0x80;
-
-  /* skip seq_no and header bits */
-  header += 3;
-
-  if (length_included_flag) {
-    /* skip length */
-    header += 2;
-  }
-  /* get flags */
-  result = map.data[header];
-  gst_buffer_unmap (packet->buffer, &map);
-
-  return result;
-}
diff --git a/gst/realmedia/gstrdtbuffer.h b/gst/realmedia/gstrdtbuffer.h
deleted file mode 100644 (file)
index fd1e067..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/* GStreamer
- * Copyright (C) <2008> Wim Taymans <wim.taymans@gmail.com>
- *
- * gstrdtbuffer.h: various helper functions to manipulate buffers
- *     with RDT payload.
- *
- * 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_RDTBUFFER_H__
-#define __GST_RDTBUFFER_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-/**
- * GstRDTType:
- * @GST_RDT_TYPE_INVALID:
- * @GST_RDT_TYPE_ASMACTION:
- * @GST_RDT_TYPE_ACK:
- * @GST_RDT_TYPE_RTTREQ:
- * @GST_RDT_TYPE_RTTRESP:
- * @GST_RDT_TYPE_CONGESTION:
- * @GST_RDT_TYPE_STREAMEND:
- * @GST_RDT_TYPE_LATENCY:
- * @GST_RDT_TYPE_INFOREQ:
- * @GST_RDT_TYPE_INFORESP:
- * @GST_RDT_TYPE_AUTOBW:
- *
- * Different RDT packet types.
- */
-typedef enum
-{
-  GST_RDT_TYPE_INVALID     = 0xffff,
-  GST_RDT_TYPE_ASMACTION   = 0xff00,
-  GST_RDT_TYPE_BWREPORT    = 0xff01,
-  GST_RDT_TYPE_ACK         = 0xff02,
-  GST_RDT_TYPE_RTTREQ      = 0xff03,
-  GST_RDT_TYPE_RTTRESP     = 0xff04,
-  GST_RDT_TYPE_CONGESTION  = 0xff05,
-  GST_RDT_TYPE_STREAMEND   = 0xff06,
-  GST_RDT_TYPE_REPORT      = 0xff07,
-  GST_RDT_TYPE_LATENCY     = 0xff08,
-  GST_RDT_TYPE_INFOREQ     = 0xff09,
-  GST_RDT_TYPE_INFORESP    = 0xff0a,
-  GST_RDT_TYPE_AUTOBW      = 0xff0b
-} GstRDTType;
-
-/**
- * GST_RDT_IS_DATA_TYPE:
- * @t: the #GstRDTType to check
- *
- * Check if @t is a data packet type.
- */
-#define GST_RDT_IS_DATA_TYPE(t) ((t) < 0xff00)
-
-typedef struct _GstRDTPacket GstRDTPacket;
-
-/**
- * GstRDTPacket:
- * @buffer: pointer to RDT buffer
- * @offset: offset of packet in buffer data
- *
- * Data structure that points to a packet at @offset in @buffer.
- * The size of the structure is made public to allow stack allocations.
- */
-struct _GstRDTPacket
-{
-  GstBuffer   *buffer;
-  guint        offset;
-
-  /*< private >*/
-  GstRDTType   type;         /* type of current packet */
-  guint16      length;       /* length of current packet in bytes */
-  GstMapInfo   map;          /* last mapped data */
-};
-
-/* validate buffers */
-gboolean        gst_rdt_buffer_validate_data      (guint8 *data, guint len);
-gboolean        gst_rdt_buffer_validate           (GstBuffer *buffer);
-
-/* retrieving packets */
-guint           gst_rdt_buffer_get_packet_count   (GstBuffer *buffer);
-gboolean        gst_rdt_buffer_get_first_packet   (GstBuffer *buffer, GstRDTPacket *packet);
-gboolean        gst_rdt_packet_move_to_next       (GstRDTPacket *packet);
-
-/* working with packets */
-GstRDTType      gst_rdt_packet_get_type           (GstRDTPacket *packet);
-guint16         gst_rdt_packet_get_length         (GstRDTPacket *packet);
-GstBuffer*      gst_rdt_packet_to_buffer          (GstRDTPacket *packet);
-
-
-/* data packets */
-guint16         gst_rdt_packet_data_get_seq       (GstRDTPacket *packet);
-guint8 *        gst_rdt_packet_data_map           (GstRDTPacket *packet, guint *size);
-gboolean        gst_rdt_packet_data_unmap         (GstRDTPacket *packet);
-guint16         gst_rdt_packet_data_get_stream_id (GstRDTPacket *packet);
-guint32         gst_rdt_packet_data_get_timestamp (GstRDTPacket *packet);
-
-guint8          gst_rdt_packet_data_get_flags     (GstRDTPacket * packet);
-
-/* utils */
-gint            gst_rdt_buffer_compare_seqnum     (guint16 seqnum1, guint16 seqnum2);
-
-G_END_DECLS
-
-#endif /* __GST_RDTBUFFER_H__ */
-
diff --git a/gst/realmedia/meson.build b/gst/realmedia/meson.build
deleted file mode 100644 (file)
index 0ef65d3..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-real_sources = [
-  'rademux.c',
-  'rmdemux.c',
-  'rmutils.c',
-  'rdtdepay.c',
-  'rdtmanager.c',
-  'rtspreal.c',
-  'realhash.c',
-  'asmrules.c',
-  'rdtjitterbuffer.c',
-  'gstrdtbuffer.c',
-  'pnmsrc.c',
-  'realmedia.c'
-]
-
-gstrmdemux = library('gstrealmedia',
-  real_sources,
-  c_args : ugly_args,
-  include_directories : [configinc, libsinc],
-  dependencies : [gstbase_dep, gstrtsp_dep, gstsdp_dep, gstpbutils_dep],
-  install : true,
-  install_dir : plugins_install_dir,
-)
-pkgconfig.generate(gstrmdemux, install_dir : plugins_pkgconfig_install_dir)
-plugins += [gstrmdemux]
diff --git a/gst/realmedia/pnmsrc.c b/gst/realmedia/pnmsrc.c
deleted file mode 100644 (file)
index 07b25f4..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-/* GStreamer
- * Copyright (C) <2009> Wim Taymans <wim.taymans@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#endif
-
-#include <string.h>
-
-#include "pnmsrc.h"
-
-GST_DEBUG_CATEGORY_STATIC (pnmsrc_debug);
-#define GST_CAT_DEFAULT pnmsrc_debug
-
-/* PNMSrc signals and args */
-enum
-{
-  /* FILL ME */
-  LAST_SIGNAL
-};
-
-#define DEFAULT_LOCATION       NULL
-
-enum
-{
-  PROP_0,
-  PROP_LOCATION
-};
-
-static GstStaticPadTemplate gst_pnm_src_template =
-GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("application/vnd.rn-realmedia")
-    );
-
-static GstFlowReturn gst_pnm_src_create (GstPushSrc * psrc, GstBuffer ** buf);
-
-static void gst_pnm_src_uri_handler_init (gpointer g_iface,
-    gpointer iface_data);
-
-#define gst_pnm_src_parent_class parent_class
-G_DEFINE_TYPE_WITH_CODE (GstPNMSrc, gst_pnm_src, GST_TYPE_PUSH_SRC,
-    G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER, gst_pnm_src_uri_handler_init));
-GST_ELEMENT_REGISTER_DEFINE (pnmsrc, "pnmsrc",
-    GST_RANK_MARGINAL, GST_TYPE_PNM_SRC);
-
-static void gst_pnm_src_finalize (GObject * object);
-
-static void gst_pnm_src_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec);
-static void gst_pnm_src_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec);
-
-static void
-gst_pnm_src_class_init (GstPNMSrcClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-  GstPushSrcClass *gstpushsrc_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-  gstpushsrc_class = (GstPushSrcClass *) klass;
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  gobject_class->set_property = gst_pnm_src_set_property;
-  gobject_class->get_property = gst_pnm_src_get_property;
-
-  gobject_class->finalize = gst_pnm_src_finalize;
-
-  g_object_class_install_property (gobject_class, PROP_LOCATION,
-      g_param_spec_string ("location", "PNM Location",
-          "Location of the PNM url to read",
-          DEFAULT_LOCATION, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-
-  gst_element_class_add_static_pad_template (gstelement_class,
-      &gst_pnm_src_template);
-
-  gst_element_class_set_static_metadata (gstelement_class,
-      "PNM packet receiver", "Source/Network",
-      "Receive data over the network via PNM",
-      "Wim Taymans <wim.taymans@gmail.com>");
-
-  gstpushsrc_class->create = gst_pnm_src_create;
-
-  GST_DEBUG_CATEGORY_INIT (pnmsrc_debug, "pnmsrc",
-      0, "Source for the pnm:// uri");
-}
-
-static void
-gst_pnm_src_init (GstPNMSrc * pnmsrc)
-{
-  pnmsrc->location = g_strdup (DEFAULT_LOCATION);
-}
-
-static void
-gst_pnm_src_finalize (GObject * object)
-{
-  GstPNMSrc *pnmsrc;
-
-  pnmsrc = GST_PNM_SRC (object);
-
-  g_free (pnmsrc->location);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-gst_pnm_src_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstPNMSrc *src;
-
-  src = GST_PNM_SRC (object);
-
-  switch (prop_id) {
-    case PROP_LOCATION:
-      g_free (src->location);
-      src->location = g_value_dup_string (value);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_pnm_src_get_property (GObject * object, guint prop_id,
-    GValue * value, GParamSpec * pspec)
-{
-  GstPNMSrc *src;
-
-  src = GST_PNM_SRC (object);
-
-  switch (prop_id) {
-    case PROP_LOCATION:
-      g_value_set_string (value, src->location);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static GstFlowReturn
-gst_pnm_src_create (GstPushSrc * psrc, GstBuffer ** buf)
-{
-  GstPNMSrc *src;
-  GstMessage *m;
-  gchar *url;
-
-  src = GST_PNM_SRC (psrc);
-
-  if (src->location == NULL)
-    return GST_FLOW_ERROR;
-  url = g_strdup_printf ("rtsp%s", &src->location[3]);
-
-  /* the only thing we do is redirect to an RTSP url */
-  m = gst_message_new_element (GST_OBJECT_CAST (src),
-      gst_structure_new ("redirect", "new-location", G_TYPE_STRING, url, NULL));
-  g_free (url);
-
-  gst_element_post_message (GST_ELEMENT_CAST (src), m);
-
-
-  return GST_FLOW_EOS;
-}
-
-/*** GSTURIHANDLER INTERFACE *************************************************/
-
-static GstURIType
-gst_pnm_src_uri_get_type (GType type)
-{
-  return GST_URI_SRC;
-}
-
-static const gchar *const *
-gst_pnm_src_uri_get_protocols (GType type)
-{
-  static const gchar *protocols[] = { "pnm", NULL };
-
-  return protocols;
-}
-
-static gchar *
-gst_pnm_src_uri_get_uri (GstURIHandler * handler)
-{
-  GstPNMSrc *src = GST_PNM_SRC (handler);
-
-  /* FIXME: make thread-safe */
-  return g_strdup (src->location);
-}
-
-static gboolean
-gst_pnm_src_uri_set_uri (GstURIHandler * handler, const gchar * uri,
-    GError ** error)
-{
-  GstPNMSrc *src = GST_PNM_SRC (handler);
-
-  g_free (src->location);
-  src->location = g_strdup (uri);
-
-  return TRUE;
-}
-
-static void
-gst_pnm_src_uri_handler_init (gpointer g_iface, gpointer iface_data)
-{
-  GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface;
-
-  iface->get_type = gst_pnm_src_uri_get_type;
-  iface->get_protocols = gst_pnm_src_uri_get_protocols;
-  iface->get_uri = gst_pnm_src_uri_get_uri;
-  iface->set_uri = gst_pnm_src_uri_set_uri;
-}
diff --git a/gst/realmedia/pnmsrc.h b/gst/realmedia/pnmsrc.h
deleted file mode 100644 (file)
index 3077226..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/* GStreamer
- * Copyright (C) <2009> Wim Taymans <wim.taymans@gmail.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_PNM_SRC_H__
-#define __GST_PNM_SRC_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstpushsrc.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_PNM_SRC \
-  (gst_pnm_src_get_type())
-#define GST_PNM_SRC(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_PNM_SRC,GstPNMSrc))
-#define GST_PNM_SRC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_PNM_SRC,GstPNMSrcClass))
-#define GST_IS_PNM_SRC(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PNM_SRC))
-#define GST_IS_PNM_SRC_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PNM_SRC))
-
-typedef struct _GstPNMSrc GstPNMSrc;
-typedef struct _GstPNMSrcClass GstPNMSrcClass;
-
-struct _GstPNMSrc
-{
-  GstPushSrc parent;
-
-  gchar *location;
-};
-
-struct _GstPNMSrcClass
-{
-  GstPushSrcClass parent_class;
-};
-
-GType gst_pnm_src_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (pnmsrc);
-
-G_END_DECLS
-
-#endif /* __GST_PNM_SRC_H__ */
diff --git a/gst/realmedia/rademux.c b/gst/realmedia/rademux.c
deleted file mode 100644 (file)
index aface50..0000000
+++ /dev/null
@@ -1,1000 +0,0 @@
-/* GStreamer RealAudio demuxer
- * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/**
- * SECTION:element-rademux
- * @title: rademux
- *
- * Demuxes/parses a RealAudio (.ra) file or stream into compressed audio.
- *
- * ## Example launch line
- * |[
- * gst-launch-1.0 filesrc location=interview.ra ! rademux ! avdec_real_288 ! audioconvert ! audioresample ! autoaudiosink
- * ]| Read a RealAudio file and decode it and output it to the soundcard using
- * the ALSA element. The .ra file is assumed to contain RealAudio version 2.
- * |[
- * gst-launch-1.0 souphttpsrc location=http://www.example.org/interview.ra ! rademux ! ac3parse ! a52dec ! audioconvert ! audioresample ! autoaudiosink
- * ]| Stream RealAudio data containing AC3 (dnet) compressed audio and decode it
- * and output it to the soundcard.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "rademux.h"
-#include "rmdemux.h"
-#include "rmutils.h"
-
-#include <string.h>
-
-static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("application/x-pn-realaudio")
-    );
-
-static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_SOMETIMES,
-    GST_STATIC_CAPS_ANY);
-
-GST_DEBUG_CATEGORY_STATIC (real_audio_demux_debug);
-#define GST_CAT_DEFAULT real_audio_demux_debug
-
-#define gst_real_audio_demux_parent_class parent_class
-G_DEFINE_TYPE (GstRealAudioDemux, gst_real_audio_demux, GST_TYPE_ELEMENT);
-GST_ELEMENT_REGISTER_DEFINE (rademux, "rademux",
-    GST_RANK_SECONDARY, GST_TYPE_REAL_AUDIO_DEMUX);
-
-static GstStateChangeReturn gst_real_audio_demux_change_state (GstElement * e,
-    GstStateChange transition);
-static GstFlowReturn gst_real_audio_demux_chain (GstPad * pad,
-    GstObject * parent, GstBuffer * buf);
-static gboolean gst_real_audio_demux_sink_event (GstPad * pad,
-    GstObject * parent, GstEvent * ev);
-static gboolean gst_real_audio_demux_src_event (GstPad * pad,
-    GstObject * parent, GstEvent * ev);
-static gboolean gst_real_audio_demux_src_query (GstPad * pad,
-    GstObject * parent, GstQuery * query);
-static void gst_real_audio_demux_loop (GstRealAudioDemux * demux);
-static gboolean gst_real_audio_demux_sink_activate (GstPad * sinkpad,
-    GstObject * parent);
-static gboolean gst_real_audio_demux_sink_activate_mode (GstPad * sinkpad,
-    GstObject * parent, GstPadMode mode, gboolean active);
-
-static void
-gst_real_audio_demux_finalize (GObject * obj)
-{
-  GstRealAudioDemux *demux = GST_REAL_AUDIO_DEMUX (obj);
-
-  g_object_unref (demux->adapter);
-
-  G_OBJECT_CLASS (parent_class)->finalize (obj);
-}
-
-static void
-gst_real_audio_demux_class_init (GstRealAudioDemuxClass * klass)
-{
-  GObjectClass *gobject_class = (GObjectClass *) klass;
-  GstElementClass *gstelement_class = (GstElementClass *) klass;
-
-  gobject_class->finalize = gst_real_audio_demux_finalize;
-
-  gst_element_class_add_static_pad_template (gstelement_class, &sink_template);
-  gst_element_class_add_static_pad_template (gstelement_class, &src_template);
-
-  gst_element_class_set_static_metadata (gstelement_class, "RealAudio Demuxer",
-      "Codec/Demuxer",
-      "Demultiplex a RealAudio file",
-      "Tim-Philipp Müller <tim centricular net>");
-
-  gstelement_class->change_state =
-      GST_DEBUG_FUNCPTR (gst_real_audio_demux_change_state);
-
-  GST_DEBUG_CATEGORY_INIT (real_audio_demux_debug, "rademux",
-      0, "Demuxer for RealAudio streams");
-}
-
-static void
-gst_real_audio_demux_reset (GstRealAudioDemux * demux)
-{
-  gst_adapter_clear (demux->adapter);
-
-  if (demux->srcpad) {
-    GST_DEBUG_OBJECT (demux, "Removing source pad");
-    gst_element_remove_pad (GST_ELEMENT (demux), demux->srcpad);
-    demux->srcpad = NULL;
-  }
-
-  if (demux->pending_tags) {
-    gst_tag_list_unref (demux->pending_tags);
-    demux->pending_tags = NULL;
-  }
-
-  demux->state = REAL_AUDIO_DEMUX_STATE_MARKER;
-  demux->ra_version = 0;
-  demux->data_offset = 0;
-  demux->packet_size = 0;
-
-  demux->sample_rate = 0;
-  demux->sample_width = 0;
-  demux->channels = 0;
-  demux->fourcc = 0;
-
-  demux->need_newsegment = TRUE;
-
-  demux->segment_running = FALSE;
-
-  demux->byterate_num = 0;
-  demux->byterate_denom = 0;
-
-  demux->duration = 0;
-  demux->upstream_size = 0;
-
-  demux->offset = 0;
-
-  demux->have_group_id = FALSE;
-  demux->group_id = G_MAXUINT;
-
-  gst_adapter_clear (demux->adapter);
-}
-
-static void
-gst_real_audio_demux_init (GstRealAudioDemux * demux)
-{
-  demux->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink");
-
-  gst_pad_set_chain_function (demux->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_real_audio_demux_chain));
-  gst_pad_set_event_function (demux->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_real_audio_demux_sink_event));
-  gst_pad_set_activate_function (demux->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_real_audio_demux_sink_activate));
-  gst_pad_set_activatemode_function (demux->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_real_audio_demux_sink_activate_mode));
-
-  gst_element_add_pad (GST_ELEMENT (demux), demux->sinkpad);
-
-  demux->adapter = gst_adapter_new ();
-  gst_real_audio_demux_reset (demux);
-}
-
-static gboolean
-gst_real_audio_demux_sink_activate (GstPad * sinkpad, GstObject * parent)
-{
-  GstQuery *query;
-  gboolean pull_mode;
-
-  query = gst_query_new_scheduling ();
-
-  if (!gst_pad_peer_query (sinkpad, query)) {
-    gst_query_unref (query);
-    goto activate_push;
-  }
-
-  pull_mode = gst_query_has_scheduling_mode_with_flags (query,
-      GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE);
-  gst_query_unref (query);
-
-  if (!pull_mode)
-    goto activate_push;
-
-  GST_DEBUG_OBJECT (sinkpad, "activating pull");
-  return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PULL, TRUE);
-
-activate_push:
-  {
-    GST_DEBUG_OBJECT (sinkpad, "activating push");
-    return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PUSH, TRUE);
-  }
-}
-
-static gboolean
-gst_real_audio_demux_sink_activate_mode (GstPad * sinkpad, GstObject * parent,
-    GstPadMode mode, gboolean active)
-{
-  gboolean res;
-  GstRealAudioDemux *demux;
-
-  demux = GST_REAL_AUDIO_DEMUX (parent);
-
-  switch (mode) {
-    case GST_PAD_MODE_PUSH:
-      demux->seekable = FALSE;
-      res = TRUE;
-      break;
-    case GST_PAD_MODE_PULL:
-      if (active) {
-        demux->seekable = TRUE;
-
-        res = gst_pad_start_task (sinkpad,
-            (GstTaskFunction) gst_real_audio_demux_loop, demux, NULL);
-      } else {
-        demux->seekable = FALSE;
-        res = gst_pad_stop_task (sinkpad);
-      }
-      break;
-    default:
-      res = FALSE;
-      break;
-  }
-  return res;
-}
-
-static GstFlowReturn
-gst_real_audio_demux_parse_marker (GstRealAudioDemux * demux)
-{
-  guint8 data[6];
-
-  if (gst_adapter_available (demux->adapter) < 6) {
-    GST_LOG_OBJECT (demux, "need at least 6 bytes, waiting for more data");
-    return GST_FLOW_OK;
-  }
-
-  gst_adapter_copy (demux->adapter, data, 0, 6);
-  if (memcmp (data, ".ra\375", 4) != 0)
-    goto wrong_format;
-
-  demux->ra_version = GST_READ_UINT16_BE (data + 4);
-  GST_DEBUG_OBJECT (demux, "ra_version   = %u", demux->ra_version);
-  if (demux->ra_version != 4 && demux->ra_version != 3)
-    goto unsupported_ra_version;
-
-  gst_adapter_flush (demux->adapter, 6);
-  demux->state = REAL_AUDIO_DEMUX_STATE_HEADER;
-  return GST_FLOW_OK;
-
-/* ERRORS */
-wrong_format:
-  {
-    GST_ELEMENT_ERROR (GST_ELEMENT (demux), STREAM, WRONG_TYPE, (NULL), (NULL));
-    return GST_FLOW_ERROR;
-  }
-
-unsupported_ra_version:
-  {
-    GST_ELEMENT_ERROR (GST_ELEMENT (demux), STREAM, DECODE,
-        ("Cannot decode this RealAudio file, please file a bug"),
-        ("ra_version = %u", demux->ra_version));
-    return GST_FLOW_ERROR;
-  }
-}
-
-static GstClockTime
-gst_real_demux_get_timestamp_from_offset (GstRealAudioDemux * demux,
-    guint64 offset)
-{
-  if (offset >= demux->data_offset && demux->byterate_num > 0 &&
-      demux->byterate_denom > 0) {
-    return gst_util_uint64_scale (offset - demux->data_offset,
-        demux->byterate_denom * GST_SECOND, demux->byterate_num);
-  } else if (offset == demux->data_offset) {
-    return (GstClockTime) 0;
-  } else {
-    return GST_CLOCK_TIME_NONE;
-  }
-}
-
-static gboolean
-gst_real_audio_demux_get_data_offset_from_header (GstRealAudioDemux * demux)
-{
-  guint8 data[16];
-
-  gst_adapter_copy (demux->adapter, data, 0, 16);
-
-  switch (demux->ra_version) {
-    case 3:
-      demux->data_offset = GST_READ_UINT16_BE (data) + 8;
-      break;
-    case 4:
-      demux->data_offset = GST_READ_UINT32_BE (data + 12) + 16;
-      break;
-    default:
-      demux->data_offset = 0;
-      g_return_val_if_reached (FALSE);
-  }
-
-  return TRUE;
-}
-
-static GstFlowReturn
-gst_real_audio_demux_parse_header (GstRealAudioDemux * demux)
-{
-  const guint8 *data;
-  gchar *codec_name = NULL;
-  GstCaps *caps = NULL;
-  GstEvent *event;
-  gchar *stream_id;
-  guint avail;
-
-  g_assert (demux->ra_version == 4 || demux->ra_version == 3);
-
-  avail = gst_adapter_available (demux->adapter);
-  if (avail < 16)
-    return GST_FLOW_OK;
-
-  if (!gst_real_audio_demux_get_data_offset_from_header (demux))
-    return GST_FLOW_ERROR;      /* shouldn't happen */
-
-  GST_DEBUG_OBJECT (demux, "data_offset  = %u", demux->data_offset);
-
-  if (avail + 6 < demux->data_offset) {
-    GST_DEBUG_OBJECT (demux, "Need %u bytes, but only %u available now",
-        demux->data_offset - 6, avail);
-    return GST_FLOW_OK;
-  }
-
-  data = gst_adapter_map (demux->adapter, demux->data_offset - 6);
-  g_assert (data);
-
-  switch (demux->ra_version) {
-    case 3:
-      demux->fourcc = GST_RM_AUD_14_4;
-      demux->packet_size = 20;
-      demux->sample_rate = 8000;
-      demux->channels = 1;
-      demux->sample_width = 16;
-      demux->flavour = 1;
-      demux->leaf_size = 0;
-      demux->height = 0;
-      break;
-    case 4:
-      demux->flavour = GST_READ_UINT16_BE (data + 16);
-      /* demux->frame_size = GST_READ_UINT32_BE (data + 36); */
-      demux->leaf_size = GST_READ_UINT16_BE (data + 38);
-      demux->height = GST_READ_UINT16_BE (data + 34);
-      demux->packet_size = GST_READ_UINT32_BE (data + 18);
-      demux->sample_rate = GST_READ_UINT16_BE (data + 42);
-      demux->sample_width = GST_READ_UINT16_BE (data + 46);
-      demux->channels = GST_READ_UINT16_BE (data + 48);
-      demux->fourcc = GST_READ_UINT32_LE (data + 56);
-      demux->pending_tags = gst_rm_utils_read_tags (data + 63,
-          demux->data_offset - 63, gst_rm_utils_read_string8);
-      if (demux->pending_tags)
-        gst_tag_list_set_scope (demux->pending_tags, GST_TAG_SCOPE_GLOBAL);
-      break;
-    default:
-      g_assert_not_reached ();
-#if 0
-    case 5:
-      demux->flavour = GST_READ_UINT16_BE (data + 16);
-      /* demux->frame_size = GST_READ_UINT32_BE (data + 36); */
-      demux->leaf_size = GST_READ_UINT16_BE (data + 38);
-      demux->height = GST_READ_UINT16_BE (data + 34);
-
-      demux->sample_rate = GST_READ_UINT16_BE (data + 48);
-      demux->sample_width = GST_READ_UINT16_BE (data + 52);
-      demux->n_channels = GST_READ_UINT16_BE (data + 54);
-      demux->fourcc = RMDEMUX_FOURCC_GET (data + 60);
-      break;
-#endif
-  }
-
-  GST_INFO_OBJECT (demux, "packet_size  = %u", demux->packet_size);
-  GST_INFO_OBJECT (demux, "sample_rate  = %u", demux->sample_rate);
-  GST_INFO_OBJECT (demux, "sample_width = %u", demux->sample_width);
-  GST_INFO_OBJECT (demux, "channels     = %u", demux->channels);
-  GST_INFO_OBJECT (demux, "fourcc       = '%" GST_FOURCC_FORMAT "' (%08X)",
-      GST_FOURCC_ARGS (demux->fourcc), demux->fourcc);
-
-  switch (demux->fourcc) {
-    case GST_RM_AUD_14_4:
-      caps = gst_caps_new_simple ("audio/x-pn-realaudio", "raversion",
-          G_TYPE_INT, 1, NULL);
-      demux->byterate_num = 1000;
-      demux->byterate_denom = 1;
-      break;
-
-    case GST_RM_AUD_28_8:
-      /* FIXME: needs descrambling */
-      caps = gst_caps_new_simple ("audio/x-pn-realaudio", "raversion",
-          G_TYPE_INT, 2, NULL);
-      break;
-
-    case GST_RM_AUD_DNET:
-      caps = gst_caps_new_simple ("audio/x-ac3", "rate", G_TYPE_INT,
-          demux->sample_rate, NULL);
-      if (demux->packet_size == 0 || demux->sample_rate == 0)
-        goto broken_file;
-      demux->byterate_num = demux->packet_size * demux->sample_rate;
-      demux->byterate_denom = 1536;
-      break;
-
-      /* Sipro/ACELP.NET Voice Codec (MIME unknown) */
-    case GST_RM_AUD_SIPR:
-      caps = gst_caps_new_empty_simple ("audio/x-sipro");
-      break;
-
-    default:
-      GST_WARNING_OBJECT (demux, "unknown fourcc %08X", demux->fourcc);
-      break;
-  }
-
-  if (caps == NULL)
-    goto unknown_fourcc;
-
-  gst_caps_set_simple (caps,
-      "flavor", G_TYPE_INT, demux->flavour,
-      "rate", G_TYPE_INT, demux->sample_rate,
-      "channels", G_TYPE_INT, demux->channels,
-      "width", G_TYPE_INT, demux->sample_width,
-      "leaf_size", G_TYPE_INT, demux->leaf_size,
-      "packet_size", G_TYPE_INT, demux->packet_size,
-      "height", G_TYPE_INT, demux->height, NULL);
-
-  GST_INFO_OBJECT (demux, "Adding source pad, caps %" GST_PTR_FORMAT, caps);
-  demux->srcpad = gst_pad_new_from_static_template (&src_template, "src");
-  gst_pad_set_event_function (demux->srcpad,
-      GST_DEBUG_FUNCPTR (gst_real_audio_demux_src_event));
-  gst_pad_set_query_function (demux->srcpad,
-      GST_DEBUG_FUNCPTR (gst_real_audio_demux_src_query));
-  gst_pad_set_active (demux->srcpad, TRUE);
-  gst_pad_use_fixed_caps (demux->srcpad);
-
-  stream_id =
-      gst_pad_create_stream_id (demux->srcpad, GST_ELEMENT_CAST (demux), NULL);
-
-  event = gst_pad_get_sticky_event (demux->sinkpad, GST_EVENT_STREAM_START, 0);
-  if (event) {
-    if (gst_event_parse_group_id (event, &demux->group_id))
-      demux->have_group_id = TRUE;
-    else
-      demux->have_group_id = FALSE;
-    gst_event_unref (event);
-  } else if (!demux->have_group_id) {
-    demux->have_group_id = TRUE;
-    demux->group_id = gst_util_group_id_next ();
-  }
-
-  event = gst_event_new_stream_start (stream_id);
-  if (demux->have_group_id)
-    gst_event_set_group_id (event, demux->group_id);
-
-  gst_pad_push_event (demux->srcpad, event);
-  g_free (stream_id);
-
-  gst_pad_set_caps (demux->srcpad, caps);
-  codec_name = gst_pb_utils_get_codec_description (caps);
-  gst_caps_unref (caps);
-
-  gst_element_add_pad (GST_ELEMENT (demux), demux->srcpad);
-
-  if (demux->byterate_num > 0 && demux->byterate_denom > 0) {
-    GstFormat bformat = GST_FORMAT_BYTES;
-    gint64 size_bytes = 0;
-
-    GST_INFO_OBJECT (demux, "byte rate = %u/%u = %u bytes/sec",
-        demux->byterate_num, demux->byterate_denom,
-        demux->byterate_num / demux->byterate_denom);
-
-    if (gst_pad_peer_query_duration (demux->sinkpad, bformat, &size_bytes)) {
-      demux->duration =
-          gst_real_demux_get_timestamp_from_offset (demux, size_bytes);
-      demux->upstream_size = size_bytes;
-      GST_INFO_OBJECT (demux, "upstream_size = %" G_GUINT64_FORMAT,
-          demux->upstream_size);
-      GST_INFO_OBJECT (demux, "duration      = %" GST_TIME_FORMAT,
-          GST_TIME_ARGS (demux->duration));
-    }
-  }
-
-  demux->need_newsegment = TRUE;
-
-  if (codec_name) {
-    if (demux->pending_tags == NULL) {
-      demux->pending_tags = gst_tag_list_new_empty ();
-      gst_tag_list_set_scope (demux->pending_tags, GST_TAG_SCOPE_GLOBAL);
-    }
-
-    gst_tag_list_add (demux->pending_tags, GST_TAG_MERGE_REPLACE,
-        GST_TAG_AUDIO_CODEC, codec_name, NULL);
-    g_free (codec_name);
-  }
-
-  gst_adapter_unmap (demux->adapter);
-  gst_adapter_flush (demux->adapter, demux->data_offset - 6);
-
-  demux->state = REAL_AUDIO_DEMUX_STATE_DATA;
-  demux->need_newsegment = TRUE;
-
-  return GST_FLOW_OK;
-
-/* ERRORS */
-unknown_fourcc:
-  {
-    GST_ELEMENT_ERROR (GST_ELEMENT (demux), STREAM, DECODE, (NULL),
-        ("Unknown fourcc '0x%" G_GINT32_MODIFIER "x'", demux->fourcc));
-    return GST_FLOW_ERROR;
-  }
-broken_file:
-  {
-    GST_ELEMENT_ERROR (GST_ELEMENT (demux), STREAM, DECODE, (NULL),
-        ("Broken file - invalid sample_rate or other header value"));
-    return GST_FLOW_ERROR;
-  }
-
-}
-
-static GstFlowReturn
-gst_real_audio_demux_parse_data (GstRealAudioDemux * demux)
-{
-  GstFlowReturn ret = GST_FLOW_OK;
-  guint avail, unit_size;
-
-  avail = gst_adapter_available (demux->adapter);
-
-  if (demux->packet_size > 0)
-    unit_size = demux->packet_size;
-  else
-    unit_size = avail & 0xfffffff0;     /* round down to next multiple of 16 */
-
-  GST_LOG_OBJECT (demux, "available = %u, unit_size = %u", avail, unit_size);
-
-  while (ret == GST_FLOW_OK && unit_size > 0 && avail >= unit_size) {
-    GstClockTime ts;
-    GstBuffer *buf;
-
-    buf = gst_adapter_take_buffer (demux->adapter, unit_size);
-    avail -= unit_size;
-
-    if (demux->need_newsegment) {
-      gst_pad_push_event (demux->srcpad,
-          gst_event_new_segment (&demux->segment));
-      demux->need_newsegment = FALSE;
-    }
-
-    if (demux->pending_tags) {
-      gst_pad_push_event (demux->srcpad,
-          gst_event_new_tag (demux->pending_tags));
-      demux->pending_tags = NULL;
-    }
-
-    if (demux->fourcc == GST_RM_AUD_DNET) {
-      buf = gst_rm_utils_descramble_dnet_buffer (buf);
-    }
-
-    ts = gst_real_demux_get_timestamp_from_offset (demux, demux->offset);
-    GST_BUFFER_TIMESTAMP (buf) = ts;
-
-    demux->segment.position = ts;
-
-    ret = gst_pad_push (demux->srcpad, buf);
-  }
-
-  return ret;
-}
-
-static GstFlowReturn
-gst_real_audio_demux_handle_buffer (GstRealAudioDemux * demux, GstBuffer * buf)
-{
-  GstFlowReturn ret;
-
-  gst_adapter_push (demux->adapter, buf);
-  buf = NULL;
-
-  switch (demux->state) {
-    case REAL_AUDIO_DEMUX_STATE_MARKER:{
-      ret = gst_real_audio_demux_parse_marker (demux);
-      if (ret != GST_FLOW_OK || demux->state != REAL_AUDIO_DEMUX_STATE_HEADER)
-        break;
-      /* otherwise fall through */
-    }
-    case REAL_AUDIO_DEMUX_STATE_HEADER:{
-      ret = gst_real_audio_demux_parse_header (demux);
-      if (ret != GST_FLOW_OK || demux->state != REAL_AUDIO_DEMUX_STATE_DATA)
-        break;
-      /* otherwise fall through */
-    }
-    case REAL_AUDIO_DEMUX_STATE_DATA:{
-      ret = gst_real_audio_demux_parse_data (demux);
-      break;
-    }
-    default:
-      g_return_val_if_reached (GST_FLOW_ERROR);
-  }
-
-  return ret;
-}
-
-static GstFlowReturn
-gst_real_audio_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
-{
-  GstRealAudioDemux *demux;
-
-  demux = GST_REAL_AUDIO_DEMUX (parent);
-
-  return gst_real_audio_demux_handle_buffer (demux, buf);
-}
-
-static void
-gst_real_audio_demux_loop (GstRealAudioDemux * demux)
-{
-  GstFlowReturn ret;
-  GstBuffer *buf;
-  guint bytes_needed;
-
-  /* check how much data we need */
-  switch (demux->state) {
-    case REAL_AUDIO_DEMUX_STATE_MARKER:
-      bytes_needed = 6 + 16;    /* 16 are beginning of header */
-      break;
-    case REAL_AUDIO_DEMUX_STATE_HEADER:
-      if (!gst_real_audio_demux_get_data_offset_from_header (demux))
-        goto parse_header_error;
-      bytes_needed = demux->data_offset - (6 + 16);
-      break;
-    case REAL_AUDIO_DEMUX_STATE_DATA:
-      if (demux->packet_size > 0) {
-        /* TODO: should probably take into account width/height as well? */
-        bytes_needed = demux->packet_size;
-      } else {
-        bytes_needed = 1024;
-      }
-      break;
-    default:
-      g_return_if_reached ();
-  }
-
-  /* now get the data */
-  GST_LOG_OBJECT (demux, "getting data: %5u bytes @ %8" G_GINT64_MODIFIER "u",
-      bytes_needed, demux->offset);
-
-  if (demux->upstream_size > 0 && demux->offset >= demux->upstream_size)
-    goto eos;
-
-  buf = NULL;
-  ret = gst_pad_pull_range (demux->sinkpad, demux->offset, bytes_needed, &buf);
-
-  if (ret != GST_FLOW_OK)
-    goto pull_range_error;
-
-  if (gst_buffer_get_size (buf) != bytes_needed)
-    goto pull_range_short_read;
-
-  ret = gst_real_audio_demux_handle_buffer (demux, buf);
-  if (ret != GST_FLOW_OK)
-    goto handle_flow_error;
-
-  /* TODO: increase this in chain function too (for timestamps)? */
-  demux->offset += bytes_needed;
-
-  /* check for the end of the segment */
-  if (demux->segment.stop != -1 && demux->segment.position != -1 &&
-      demux->segment.position > demux->segment.stop) {
-    GST_DEBUG_OBJECT (demux, "reached end of segment");
-    goto eos;
-  }
-
-  return;
-
-/* ERRORS */
-parse_header_error:
-  {
-    GST_ELEMENT_ERROR (demux, STREAM, DECODE, (NULL), (NULL));
-    goto pause_task;
-  }
-handle_flow_error:
-  {
-    GST_WARNING_OBJECT (demux, "handle_buf flow: %s", gst_flow_get_name (ret));
-    goto pause_task;
-  }
-pull_range_error:
-  {
-    GST_WARNING_OBJECT (demux, "pull range flow: %s", gst_flow_get_name (ret));
-    goto pause_task;
-  }
-pull_range_short_read:
-  {
-    GST_WARNING_OBJECT (demux, "pull range short read: wanted %u bytes, but "
-        "got only %" G_GSIZE_FORMAT " bytes", bytes_needed,
-        gst_buffer_get_size (buf));
-    gst_buffer_unref (buf);
-    goto eos;
-  }
-eos:
-  {
-    if (demux->state != REAL_AUDIO_DEMUX_STATE_DATA) {
-      GST_WARNING_OBJECT (demux, "reached EOS before finished parsing header");
-      goto parse_header_error;
-    }
-    GST_INFO_OBJECT (demux, "EOS");
-    if ((demux->segment.flags & GST_SEEK_FLAG_SEGMENT) != 0) {
-      gint64 stop;
-
-      /* for segment playback we need to post when (in stream time)
-       * we stopped, this is either stop (when set) or the duration. */
-      if ((stop = demux->segment.stop) == -1)
-        stop = demux->segment.duration;
-
-      GST_DEBUG_OBJECT (demux, "sending segment done, at end of segment");
-      gst_element_post_message (GST_ELEMENT (demux),
-          gst_message_new_segment_done (GST_OBJECT (demux), GST_FORMAT_TIME,
-              stop));
-      gst_pad_push_event (demux->srcpad,
-          gst_event_new_segment_done (GST_FORMAT_TIME, stop));
-    } else {
-      /* normal playback, send EOS event downstream */
-      GST_DEBUG_OBJECT (demux, "sending EOS event, at end of stream");
-      gst_pad_push_event (demux->srcpad, gst_event_new_eos ());
-    }
-    goto pause_task;
-  }
-pause_task:
-  {
-    demux->segment_running = FALSE;
-    gst_pad_pause_task (demux->sinkpad);
-    GST_DEBUG_OBJECT (demux, "pausing task");
-    return;
-  }
-}
-
-static gboolean
-gst_real_audio_demux_sink_event (GstPad * pad, GstObject * parent,
-    GstEvent * event)
-{
-  GstRealAudioDemux *demux;
-  gboolean ret;
-
-  demux = GST_REAL_AUDIO_DEMUX (parent);
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_SEGMENT:{
-      /* FIXME */
-      gst_event_unref (event);
-      demux->need_newsegment = TRUE;
-      ret = TRUE;
-      break;
-    }
-    default:
-      ret = gst_pad_event_default (pad, parent, event);
-      break;
-  }
-  return ret;
-}
-
-static gboolean
-gst_real_audio_demux_handle_seek (GstRealAudioDemux * demux, GstEvent * event)
-{
-  GstFormat format;
-  GstSeekFlags flags;
-  GstSeekType cur_type, stop_type;
-  gboolean flush, update;
-  gdouble rate;
-  guint64 seek_pos;
-  gint64 cur, stop;
-
-  if (!demux->seekable)
-    goto not_seekable;
-
-  if (demux->byterate_num == 0 || demux->byterate_denom == 0)
-    goto no_bitrate;
-
-  gst_event_parse_seek (event, &rate, &format, &flags,
-      &cur_type, &cur, &stop_type, &stop);
-
-  if (format != GST_FORMAT_TIME)
-    goto only_time_format_supported;
-
-  if (rate <= 0.0)
-    goto cannot_do_backwards_playback;
-
-  flush = ((flags & GST_SEEK_FLAG_FLUSH) != 0);
-
-  GST_DEBUG_OBJECT (demux, "flush=%d, rate=%g", flush, rate);
-
-  /* unlock streaming thread and make streaming stop */
-  if (flush) {
-    gst_pad_push_event (demux->sinkpad, gst_event_new_flush_start ());
-    gst_pad_push_event (demux->srcpad, gst_event_new_flush_start ());
-  } else {
-    gst_pad_pause_task (demux->sinkpad);
-  }
-
-  GST_PAD_STREAM_LOCK (demux->sinkpad);
-
-  gst_segment_do_seek (&demux->segment, rate, format, flags,
-      cur_type, cur, stop_type, stop, &update);
-
-  GST_DEBUG_OBJECT (demux, "segment: %" GST_SEGMENT_FORMAT, &demux->segment);
-
-  seek_pos = gst_util_uint64_scale (demux->segment.start,
-      demux->byterate_num, demux->byterate_denom * GST_SECOND);
-  if (demux->packet_size > 0) {
-    seek_pos -= seek_pos % demux->packet_size;
-  }
-  seek_pos += demux->data_offset;
-
-  GST_DEBUG_OBJECT (demux, "seek_pos = %" G_GUINT64_FORMAT, seek_pos);
-
-  /* stop flushing */
-  gst_pad_push_event (demux->sinkpad, gst_event_new_flush_stop (TRUE));
-  gst_pad_push_event (demux->srcpad, gst_event_new_flush_stop (TRUE));
-
-  demux->offset = seek_pos;
-  demux->need_newsegment = TRUE;
-
-  /* notify start of new segment */
-  if (demux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
-    gst_element_post_message (GST_ELEMENT (demux),
-        gst_message_new_segment_start (GST_OBJECT (demux),
-            GST_FORMAT_TIME, demux->segment.position));
-  }
-
-  demux->segment_running = TRUE;
-  /* restart our task since it might have been stopped when we did the flush */
-  gst_pad_start_task (demux->sinkpad,
-      (GstTaskFunction) gst_real_audio_demux_loop, demux, NULL);
-
-  /* streaming can continue now */
-  GST_PAD_STREAM_UNLOCK (demux->sinkpad);
-
-  return TRUE;
-
-/* ERRORS */
-not_seekable:
-  {
-    GST_DEBUG_OBJECT (demux, "seek failed: cannot seek in streaming mode");
-    return FALSE;
-  }
-no_bitrate:
-  {
-    GST_DEBUG_OBJECT (demux, "seek failed: bitrate unknown");
-    return FALSE;
-  }
-only_time_format_supported:
-  {
-    GST_DEBUG_OBJECT (demux, "can only seek in TIME format");
-    return FALSE;
-  }
-cannot_do_backwards_playback:
-  {
-    GST_DEBUG_OBJECT (demux, "can only seek with positive rate, not %lf", rate);
-    return FALSE;
-  }
-}
-
-static gboolean
-gst_real_audio_demux_src_event (GstPad * pad, GstObject * parent,
-    GstEvent * event)
-{
-  GstRealAudioDemux *demux;
-  gboolean ret = FALSE;
-
-  demux = GST_REAL_AUDIO_DEMUX (parent);
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_QOS:
-      gst_event_unref (event);
-      break;
-    case GST_EVENT_SEEK:
-      ret = gst_real_audio_demux_handle_seek (demux, event);
-      gst_event_unref (event);
-      break;
-    default:
-      ret = gst_pad_event_default (pad, parent, event);
-      break;
-  }
-
-  return ret;
-}
-
-static gboolean
-gst_real_audio_demux_src_query (GstPad * pad, GstObject * parent,
-    GstQuery * query)
-{
-  GstRealAudioDemux *demux;
-  gboolean ret = FALSE;
-
-  demux = GST_REAL_AUDIO_DEMUX (parent);
-
-  switch (GST_QUERY_TYPE (query)) {
-    case GST_QUERY_DURATION:{
-      GstFormat format;
-
-      gst_query_parse_duration (query, &format, NULL);
-      if (format == GST_FORMAT_TIME && demux->duration > 0) {
-        gst_query_set_duration (query, GST_FORMAT_TIME, demux->duration);
-        ret = TRUE;
-      } else if (format == GST_FORMAT_BYTES && demux->upstream_size > 0) {
-        gst_query_set_duration (query, GST_FORMAT_BYTES,
-            demux->upstream_size - demux->data_offset);
-        ret = TRUE;
-      }
-      break;
-    }
-    case GST_QUERY_SEEKING:{
-      GstFormat format;
-      gboolean seekable;
-
-      gst_query_parse_seeking (query, &format, NULL, NULL, NULL);
-      seekable = (format == GST_FORMAT_TIME && demux->seekable);
-      gst_query_set_seeking (query, format, seekable, 0,
-          (format == GST_FORMAT_TIME) ? demux->duration : -1);
-      ret = TRUE;
-      break;
-    }
-    case GST_QUERY_SEGMENT:
-    {
-      GstFormat format;
-      gint64 start, stop;
-
-      format = demux->segment.format;
-
-      start =
-          gst_segment_to_stream_time (&demux->segment, format,
-          demux->segment.start);
-      if ((stop = demux->segment.stop) == -1)
-        stop = demux->segment.duration;
-      else
-        stop = gst_segment_to_stream_time (&demux->segment, format, stop);
-
-      gst_query_set_segment (query, demux->segment.rate, format, start, stop);
-      ret = TRUE;
-      break;
-    }
-    default:
-      ret = gst_pad_query_default (pad, parent, query);
-      break;
-  }
-
-  return ret;
-}
-
-static GstStateChangeReturn
-gst_real_audio_demux_change_state (GstElement * element,
-    GstStateChange transition)
-{
-  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
-  GstRealAudioDemux *demux = GST_REAL_AUDIO_DEMUX (element);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:
-      break;
-    case GST_STATE_CHANGE_READY_TO_PAUSED:
-      demux->state = REAL_AUDIO_DEMUX_STATE_MARKER;
-      demux->segment_running = FALSE;
-      gst_segment_init (&demux->segment, GST_FORMAT_TIME);
-      gst_adapter_clear (demux->adapter);
-      break;
-    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
-      break;
-    default:
-      break;
-  }
-
-  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
-      break;
-    case GST_STATE_CHANGE_PAUSED_TO_READY:{
-      gst_real_audio_demux_reset (demux);
-      gst_segment_init (&demux->segment, GST_FORMAT_UNDEFINED);
-      break;
-    }
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      break;
-    default:
-      break;
-  }
-
-  return ret;
-}
diff --git a/gst/realmedia/rademux.h b/gst/realmedia/rademux.h
deleted file mode 100644 (file)
index 666a1e6..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/* GStreamer RealAudio demuxer
- * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
- *
- * 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_REAL_AUDIO_DEMUX_H__
-#define __GST_REAL_AUDIO_DEMUX_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstadapter.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_REAL_AUDIO_DEMUX \
-  (gst_real_audio_demux_get_type())
-#define GST_REAL_AUDIO_DEMUX(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_REAL_AUDIO_DEMUX,GstRealAudioDemux))
-#define GST_REAL_AUDIO_DEMUX_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_REAL_AUDIO_DEMUX,GstRealAudioDemuxClass))
-#define GST_IS_REAL_AUDIO_DEMUX(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_REAL_AUDIO_DEMUX))
-#define GST_IS_REAL_AUDIO_DEMUX_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_REAL_AUDIO_DEMUX))
-
-typedef enum
-{
-  REAL_AUDIO_DEMUX_STATE_MARKER,
-  REAL_AUDIO_DEMUX_STATE_HEADER,
-  REAL_AUDIO_DEMUX_STATE_DATA
-} GstRealAudioDemuxState;
-
-typedef struct _GstRealAudioDemux GstRealAudioDemux;
-typedef struct _GstRealAudioDemuxClass GstRealAudioDemuxClass;
-
-struct _GstRealAudioDemux {
-  GstElement               element;
-
-  GstPad                  *sinkpad;
-  GstPad                  *srcpad;
-  
-  gboolean                 have_group_id;
-  guint                    group_id;
-
-  GstAdapter              *adapter;
-  GstRealAudioDemuxState   state;
-
-  guint                    ra_version;
-  guint                    data_offset;
-
-  guint                    packet_size;
-  guint                    leaf_size;
-  guint                    height;
-  guint                    flavour;
-
-  guint                    sample_rate;
-  guint                    sample_width;
-  guint                    channels;
-  guint32                  fourcc;
-
-  gboolean                 segment_running;
-
-  gboolean                 need_newsegment;
-  GstTagList              *pending_tags;
-
-  guint                    byterate_num;    /* bytes per second */
-  guint                    byterate_denom;
-
-  gint64                   duration;
-  gint64                   upstream_size;
-
-  guint64                  offset;          /* current read byte offset for
-                                             * pull_range-based mode */
-
-  /* playback start/stop positions */
-  GstSegment               segment;
-
-  gboolean                 seekable;
-};
-
-struct _GstRealAudioDemuxClass {
-  GstElementClass  element_class;
-};
-
-GType  gst_real_audio_demux_get_type (void);
-
-GST_ELEMENT_REGISTER_DECLARE (rademux);
-
-G_END_DECLS
-
-#endif /* __GST_REAL_AUDIO_DEMUX_H__ */
diff --git a/gst/realmedia/rdtdepay.c b/gst/realmedia/rdtdepay.c
deleted file mode 100644 (file)
index f0612e7..0000000
+++ /dev/null
@@ -1,496 +0,0 @@
-/* GStreamer
- * Copyright (C) <2006> Lutz Mueller <lutz at topfrose dot de>
- *               <2006> Wim Taymans <wim@fluendo.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#endif
-
-#include <string.h>
-
-#include "gstrdtbuffer.h"
-#include "rdtdepay.h"
-
-GST_DEBUG_CATEGORY_STATIC (rdtdepay_debug);
-#define GST_CAT_DEFAULT rdtdepay_debug
-
-/* RDTDepay signals and args */
-enum
-{
-  /* FILL ME */
-  LAST_SIGNAL
-};
-
-enum
-{
-  PROP_0,
-};
-
-static GstStaticPadTemplate gst_rdt_depay_src_template =
-GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("application/vnd.rn-realmedia")
-    );
-
-static GstStaticPadTemplate gst_rdt_depay_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("application/x-rdt, "
-        "media = (string) \"application\", "
-        "clock-rate = (int) [1, MAX ], "
-        "encoding-name = (string) \"X-REAL-RDT\""
-        /* All optional parameters
-         *
-         * "config=" 
-         */
-    )
-    );
-
-#define gst_rdt_depay_parent_class parent_class
-G_DEFINE_TYPE (GstRDTDepay, gst_rdt_depay, GST_TYPE_ELEMENT);
-GST_ELEMENT_REGISTER_DEFINE (rdtdepay, "rdtdepay",
-    GST_RANK_MARGINAL, GST_TYPE_RDT_DEPAY);
-
-static void gst_rdt_depay_finalize (GObject * object);
-
-static GstStateChangeReturn gst_rdt_depay_change_state (GstElement *
-    element, GstStateChange transition);
-
-static gboolean gst_rdt_depay_sink_event (GstPad * pad, GstObject * parent,
-    GstEvent * event);
-static GstFlowReturn gst_rdt_depay_chain (GstPad * pad, GstObject * parent,
-    GstBuffer * buf);
-
-static void
-gst_rdt_depay_class_init (GstRDTDepayClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  gobject_class->finalize = gst_rdt_depay_finalize;
-
-  gstelement_class->change_state = gst_rdt_depay_change_state;
-
-  gst_element_class_add_static_pad_template (gstelement_class,
-      &gst_rdt_depay_src_template);
-  gst_element_class_add_static_pad_template (gstelement_class,
-      &gst_rdt_depay_sink_template);
-
-  gst_element_class_set_static_metadata (gstelement_class, "RDT packet parser",
-      "Codec/Depayloader/Network",
-      "Extracts RealMedia from RDT packets",
-      "Lutz Mueller <lutz at topfrose dot de>, "
-      "Wim Taymans <wim@fluendo.com>");
-
-  GST_DEBUG_CATEGORY_INIT (rdtdepay_debug, "rdtdepay",
-      0, "Depayloader for RDT RealMedia packets");
-}
-
-static void
-gst_rdt_depay_init (GstRDTDepay * rdtdepay)
-{
-  rdtdepay->sinkpad =
-      gst_pad_new_from_static_template (&gst_rdt_depay_sink_template, "sink");
-  gst_pad_set_chain_function (rdtdepay->sinkpad, gst_rdt_depay_chain);
-  gst_pad_set_event_function (rdtdepay->sinkpad, gst_rdt_depay_sink_event);
-  gst_element_add_pad (GST_ELEMENT_CAST (rdtdepay), rdtdepay->sinkpad);
-
-  rdtdepay->srcpad =
-      gst_pad_new_from_static_template (&gst_rdt_depay_src_template, "src");
-  gst_element_add_pad (GST_ELEMENT_CAST (rdtdepay), rdtdepay->srcpad);
-}
-
-static void
-gst_rdt_depay_finalize (GObject * object)
-{
-  GstRDTDepay *rdtdepay;
-
-  rdtdepay = GST_RDT_DEPAY (object);
-
-  if (rdtdepay->header)
-    gst_buffer_unref (rdtdepay->header);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static gboolean
-gst_rdt_depay_setcaps (GstPad * pad, GstCaps * caps)
-{
-  GstStructure *structure;
-  GstRDTDepay *rdtdepay;
-  GstCaps *srccaps;
-  gint clock_rate = 1000;       /* default */
-  const GValue *value;
-  GstBuffer *header;
-
-  rdtdepay = GST_RDT_DEPAY (GST_PAD_PARENT (pad));
-
-  structure = gst_caps_get_structure (caps, 0);
-
-  if (gst_structure_has_field (structure, "clock-rate"))
-    gst_structure_get_int (structure, "clock-rate", &clock_rate);
-
-  /* config contains the RealMedia header as a buffer. */
-  value = gst_structure_get_value (structure, "config");
-  if (!value)
-    goto no_header;
-
-  header = gst_value_get_buffer (value);
-  if (!header)
-    goto no_header;
-
-  /* get other values for newsegment */
-  value = gst_structure_get_value (structure, "npt-start");
-  if (value && G_VALUE_HOLDS_UINT64 (value))
-    rdtdepay->npt_start = g_value_get_uint64 (value);
-  else
-    rdtdepay->npt_start = 0;
-  GST_DEBUG_OBJECT (rdtdepay, "NPT start %" G_GUINT64_FORMAT,
-      rdtdepay->npt_start);
-
-  value = gst_structure_get_value (structure, "npt-stop");
-  if (value && G_VALUE_HOLDS_UINT64 (value))
-    rdtdepay->npt_stop = g_value_get_uint64 (value);
-  else
-    rdtdepay->npt_stop = -1;
-
-  GST_DEBUG_OBJECT (rdtdepay, "NPT stop %" G_GUINT64_FORMAT,
-      rdtdepay->npt_stop);
-
-  value = gst_structure_get_value (structure, "play-speed");
-  if (value && G_VALUE_HOLDS_DOUBLE (value))
-    rdtdepay->play_speed = g_value_get_double (value);
-  else
-    rdtdepay->play_speed = 1.0;
-
-  value = gst_structure_get_value (structure, "play-scale");
-  if (value && G_VALUE_HOLDS_DOUBLE (value))
-    rdtdepay->play_scale = g_value_get_double (value);
-  else
-    rdtdepay->play_scale = 1.0;
-
-  /* caps seem good, configure element */
-  rdtdepay->clock_rate = clock_rate;
-
-  /* set caps on pad and on header */
-  srccaps = gst_caps_new_empty_simple ("application/vnd.rn-realmedia");
-  gst_pad_set_caps (rdtdepay->srcpad, srccaps);
-  gst_caps_unref (srccaps);
-
-  if (rdtdepay->header)
-    gst_buffer_unref (rdtdepay->header);
-  rdtdepay->header = gst_buffer_ref (header);
-
-  return TRUE;
-
-  /* ERRORS */
-no_header:
-  {
-    GST_ERROR_OBJECT (rdtdepay, "no header found in caps, no 'config' field");
-    return FALSE;
-  }
-}
-
-static gboolean
-gst_rdt_depay_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
-  GstRDTDepay *depay;
-  gboolean res = TRUE;
-
-  depay = GST_RDT_DEPAY (parent);
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_CAPS:
-    {
-      GstCaps *caps;
-
-      gst_event_parse_caps (event, &caps);
-      res = gst_rdt_depay_setcaps (pad, caps);
-      gst_event_unref (event);
-      break;
-    }
-    case GST_EVENT_FLUSH_STOP:
-      res = gst_pad_push_event (depay->srcpad, event);
-
-      gst_segment_init (&depay->segment, GST_FORMAT_UNDEFINED);
-      depay->need_newsegment = TRUE;
-      depay->next_seqnum = -1;
-      break;
-    case GST_EVENT_SEGMENT:
-    {
-      gst_event_copy_segment (event, &depay->segment);
-      /* don't pass the event downstream, we generate our own segment
-       * including the NTP time and other things we receive in caps */
-      gst_event_unref (event);
-      break;
-    }
-    default:
-      /* pass other events forward */
-      res = gst_pad_push_event (depay->srcpad, event);
-      break;
-  }
-  return res;
-}
-
-static GstEvent *
-create_segment_event (GstRDTDepay * depay, gboolean update,
-    GstClockTime position)
-{
-  GstSegment segment;
-
-  gst_segment_init (&segment, GST_FORMAT_TIME);
-  segment.rate = depay->play_speed;
-  segment.applied_rate = depay->play_scale;
-  segment.start = position;
-
-  if (depay->npt_stop != -1)
-    segment.stop = depay->npt_stop - depay->npt_start;
-  else
-    segment.stop = -1;
-
-  segment.time = position + depay->npt_start;
-
-  return gst_event_new_segment (&segment);
-}
-
-static GstFlowReturn
-gst_rdt_depay_push (GstRDTDepay * rdtdepay, GstBuffer * buffer)
-{
-  GstFlowReturn ret;
-
-  if (rdtdepay->need_newsegment) {
-    GstEvent *event;
-
-    event = create_segment_event (rdtdepay, FALSE, 0);
-    gst_pad_push_event (rdtdepay->srcpad, event);
-
-    rdtdepay->need_newsegment = FALSE;
-  }
-
-  if (rdtdepay->discont) {
-    GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
-    rdtdepay->discont = FALSE;
-  }
-  ret = gst_pad_push (rdtdepay->srcpad, buffer);
-
-  return ret;
-}
-
-static GstFlowReturn
-gst_rdt_depay_handle_data (GstRDTDepay * rdtdepay, GstClockTime outtime,
-    GstRDTPacket * packet)
-{
-  GstFlowReturn ret;
-  GstBuffer *outbuf;
-  GstMapInfo outmap;
-  guint8 *data, *outdata;
-  guint size;
-  guint16 stream_id;
-  guint32 timestamp;
-  gint gap;
-  guint16 seqnum;
-  guint8 flags;
-  guint16 outflags;
-
-  /* get pointers to the packet data */
-  data = gst_rdt_packet_data_map (packet, &size);
-
-  outbuf = gst_buffer_new_and_alloc (12 + size);
-  GST_BUFFER_TIMESTAMP (outbuf) = outtime;
-
-  GST_DEBUG_OBJECT (rdtdepay, "have size %u", size);
-
-  /* copy over some things */
-  stream_id = gst_rdt_packet_data_get_stream_id (packet);
-  timestamp = gst_rdt_packet_data_get_timestamp (packet);
-  flags = gst_rdt_packet_data_get_flags (packet);
-
-  seqnum = gst_rdt_packet_data_get_seq (packet);
-
-  GST_DEBUG_OBJECT (rdtdepay, "stream_id %u, timestamp %u, seqnum %d, flags %d",
-      stream_id, timestamp, seqnum, flags);
-
-  if (rdtdepay->next_seqnum != -1) {
-    gap = gst_rdt_buffer_compare_seqnum (seqnum, rdtdepay->next_seqnum);
-
-    /* if we have no gap, all is fine */
-    if (G_UNLIKELY (gap != 0)) {
-      GST_LOG_OBJECT (rdtdepay, "got packet %u, expected %u, gap %d", seqnum,
-          rdtdepay->next_seqnum, gap);
-      if (gap < 0) {
-        /* seqnum > next_seqnum, we are missing some packets, this is always a
-         * DISCONT. */
-        GST_LOG_OBJECT (rdtdepay, "%d missing packets", gap);
-        rdtdepay->discont = TRUE;
-      } else {
-        /* seqnum < next_seqnum, we have seen this packet before or the sender
-         * could be restarted. If the packet is not too old, we throw it away as
-         * a duplicate, otherwise we mark discont and continue. 100 misordered
-         * packets is a good threshold. See also RFC 4737. */
-        if (gap < 100)
-          goto dropping;
-
-        GST_LOG_OBJECT (rdtdepay,
-            "%d > 100, packet too old, sender likely restarted", gap);
-        rdtdepay->discont = TRUE;
-      }
-    }
-  }
-  rdtdepay->next_seqnum = (seqnum + 1);
-  if (rdtdepay->next_seqnum == 0xff00)
-    rdtdepay->next_seqnum = 0;
-
-  if ((flags & 1) == 0)
-    outflags = 2;
-  else
-    outflags = 0;
-
-  gst_buffer_map (outbuf, &outmap, GST_MAP_WRITE);
-  outdata = outmap.data;
-  GST_WRITE_UINT16_BE (outdata + 0, 0); /* version   */
-  GST_WRITE_UINT16_BE (outdata + 2, size + 12); /* length    */
-  GST_WRITE_UINT16_BE (outdata + 4, stream_id); /* stream    */
-  GST_WRITE_UINT32_BE (outdata + 6, timestamp); /* timestamp */
-  GST_WRITE_UINT16_BE (outdata + 10, outflags); /* flags     */
-  memcpy (outdata + 12, data, size);
-  gst_buffer_unmap (outbuf, &outmap);
-  gst_buffer_resize (outbuf, 0, 12 + size);
-
-  gst_rdt_packet_data_unmap (packet);
-
-  GST_DEBUG_OBJECT (rdtdepay, "Pushing packet, outtime %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (outtime));
-
-  ret = gst_rdt_depay_push (rdtdepay, outbuf);
-
-  return ret;
-
-  /* ERRORS */
-dropping:
-  {
-    GST_WARNING_OBJECT (rdtdepay, "%d <= 100, dropping old packet", gap);
-    return GST_FLOW_OK;
-  }
-}
-
-static GstFlowReturn
-gst_rdt_depay_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
-{
-  GstRDTDepay *rdtdepay;
-  GstFlowReturn ret;
-  GstClockTime timestamp;
-  gboolean more;
-  GstRDTPacket packet;
-
-  rdtdepay = GST_RDT_DEPAY (parent);
-
-  if (GST_BUFFER_IS_DISCONT (buf)) {
-    GST_LOG_OBJECT (rdtdepay, "received discont");
-    rdtdepay->discont = TRUE;
-  }
-
-  if (rdtdepay->header) {
-    GstBuffer *out;
-
-    out = rdtdepay->header;
-    rdtdepay->header = NULL;
-
-    /* push header data first */
-    gst_rdt_depay_push (rdtdepay, out);
-  }
-
-  /* save timestamp */
-  timestamp = GST_BUFFER_TIMESTAMP (buf);
-
-  ret = GST_FLOW_OK;
-
-  GST_LOG_OBJECT (rdtdepay, "received buffer timestamp %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (timestamp));
-
-  /* data is in RDT format. */
-  more = gst_rdt_buffer_get_first_packet (buf, &packet);
-  while (more) {
-    GstRDTType type;
-
-    type = gst_rdt_packet_get_type (&packet);
-    GST_DEBUG_OBJECT (rdtdepay, "Have packet of type %04x", type);
-
-    if (GST_RDT_IS_DATA_TYPE (type)) {
-      GST_DEBUG_OBJECT (rdtdepay, "We have a data packet");
-      ret = gst_rdt_depay_handle_data (rdtdepay, timestamp, &packet);
-    } else {
-      switch (type) {
-        default:
-          GST_DEBUG_OBJECT (rdtdepay, "Ignoring packet");
-          break;
-      }
-    }
-    if (ret != GST_FLOW_OK)
-      break;
-
-    more = gst_rdt_packet_move_to_next (&packet);
-  }
-
-  gst_buffer_unref (buf);
-
-  return ret;
-}
-
-static GstStateChangeReturn
-gst_rdt_depay_change_state (GstElement * element, GstStateChange transition)
-{
-  GstRDTDepay *rdtdepay;
-  GstStateChangeReturn ret;
-
-  rdtdepay = GST_RDT_DEPAY (element);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:
-      break;
-    case GST_STATE_CHANGE_READY_TO_PAUSED:
-      gst_segment_init (&rdtdepay->segment, GST_FORMAT_UNDEFINED);
-      rdtdepay->next_seqnum = -1;
-      rdtdepay->need_newsegment = TRUE;
-      break;
-    default:
-      break;
-  }
-
-  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      if (rdtdepay->header)
-        gst_buffer_unref (rdtdepay->header);
-      rdtdepay->header = NULL;
-      break;
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      break;
-    default:
-      break;
-  }
-  return ret;
-}
diff --git a/gst/realmedia/rdtdepay.h b/gst/realmedia/rdtdepay.h
deleted file mode 100644 (file)
index 8b208fc..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/* GStreamer
- * Copyright (C) <2006> Lutz Mueller <lutz at topfrose dot de>
- *               <2006> Wim Taymans <wim@fluendo.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_RDT_DEPAY_H__
-#define __GST_RDT_DEPAY_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_RDT_DEPAY \
-  (gst_rdt_depay_get_type())
-#define GST_RDT_DEPAY(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RDT_DEPAY,GstRDTDepay))
-#define GST_RDT_DEPAY_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RDT_DEPAY,GstRDTDepayClass))
-#define GST_IS_RDT_DEPAY(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RDT_DEPAY))
-#define GST_IS_RDT_DEPAY_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RDT_DEPAY))
-
-typedef struct _GstRDTDepay GstRDTDepay;
-typedef struct _GstRDTDepayClass GstRDTDepayClass;
-
-struct _GstRDTDepay
-{
-  GstElement parent;
-
-  GstPad *sinkpad;
-  GstPad *srcpad;
-
-  guint clock_rate;
-  GstClockTime npt_start;
-  GstClockTime npt_stop;
-  gdouble play_speed;
-  gdouble play_scale;
-
-  guint32 next_seqnum;
-
-  gboolean discont;
-  gboolean need_newsegment;
-  GstSegment segment;
-  GstBuffer *header;
-};
-
-struct _GstRDTDepayClass
-{
-  GstElementClass parent_class;
-};
-
-GType gst_rdt_depay_get_type (void);
-
-GST_ELEMENT_REGISTER_DECLARE (rdtdepay);
-
-G_END_DECLS
-
-#endif /* __GST_RDT_DEPAY_H__ */
diff --git a/gst/realmedia/rdtjitterbuffer.c b/gst/realmedia/rdtjitterbuffer.c
deleted file mode 100644 (file)
index d0b8de0..0000000
+++ /dev/null
@@ -1,531 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-#include <string.h>
-#include <stdlib.h>
-
-#include "rdtjitterbuffer.h"
-#include "gstrdtbuffer.h"
-
-GST_DEBUG_CATEGORY_STATIC (rdt_jitter_buffer_debug);
-#define GST_CAT_DEFAULT rdt_jitter_buffer_debug
-
-#define MAX_WINDOW     RDT_JITTER_BUFFER_MAX_WINDOW
-#define MAX_TIME       (2 * GST_SECOND)
-
-/* signals and args */
-enum
-{
-  LAST_SIGNAL
-};
-
-enum
-{
-  PROP_0
-};
-
-/* GObject vmethods */
-static void rdt_jitter_buffer_finalize (GObject * object);
-
-/* static guint rdt_jitter_buffer_signals[LAST_SIGNAL] = { 0 }; */
-
-G_DEFINE_TYPE (RDTJitterBuffer, rdt_jitter_buffer, G_TYPE_OBJECT);
-
-static void
-rdt_jitter_buffer_class_init (RDTJitterBufferClass * klass)
-{
-  GObjectClass *gobject_class;
-
-  gobject_class = (GObjectClass *) klass;
-
-  gobject_class->finalize = rdt_jitter_buffer_finalize;
-
-  GST_DEBUG_CATEGORY_INIT (rdt_jitter_buffer_debug, "rdtjitterbuffer", 0,
-      "RDT Jitter Buffer");
-}
-
-static void
-rdt_jitter_buffer_init (RDTJitterBuffer * jbuf)
-{
-  jbuf->packets = g_queue_new ();
-
-  rdt_jitter_buffer_reset_skew (jbuf);
-}
-
-static void
-rdt_jitter_buffer_finalize (GObject * object)
-{
-  RDTJitterBuffer *jbuf;
-
-  jbuf = RDT_JITTER_BUFFER_CAST (object);
-
-  rdt_jitter_buffer_flush (jbuf);
-  g_queue_free (jbuf->packets);
-
-  G_OBJECT_CLASS (rdt_jitter_buffer_parent_class)->finalize (object);
-}
-
-/**
- * rdt_jitter_buffer_new:
- *
- * Create an #RDTJitterBuffer.
- *
- * Returns: a new #RDTJitterBuffer. Use g_object_unref() after usage.
- */
-RDTJitterBuffer *
-rdt_jitter_buffer_new (void)
-{
-  RDTJitterBuffer *jbuf;
-
-  jbuf = g_object_new (RDT_TYPE_JITTER_BUFFER, NULL);
-
-  return jbuf;
-}
-
-void
-rdt_jitter_buffer_reset_skew (RDTJitterBuffer * jbuf)
-{
-  jbuf->base_time = -1;
-  jbuf->base_rtptime = -1;
-  jbuf->ext_rtptime = -1;
-  jbuf->window_pos = 0;
-  jbuf->window_filling = TRUE;
-  jbuf->window_min = 0;
-  jbuf->skew = 0;
-  jbuf->prev_send_diff = -1;
-}
-
-/* For the clock skew we use a windowed low point averaging algorithm as can be
- * found in http://www.grame.fr/pub/TR-050601.pdf. The idea is that the jitter is
- * composed of:
- *
- *  J = N + n
- *
- *   N   : a constant network delay.
- *   n   : random added noise. The noise is concentrated around 0
- *
- * In the receiver we can track the elapsed time at the sender with:
- *
- *  send_diff(i) = (Tsi - Ts0);
- *
- *   Tsi : The time at the sender at packet i
- *   Ts0 : The time at the sender at the first packet
- *
- * This is the difference between the RDT timestamp in the first received packet
- * and the current packet.
- *
- * At the receiver we have to deal with the jitter introduced by the network.
- *
- *  recv_diff(i) = (Tri - Tr0)
- *
- *   Tri : The time at the receiver at packet i
- *   Tr0 : The time at the receiver at the first packet
- *
- * Both of these values contain a jitter Ji, a jitter for packet i, so we can
- * write:
- *
- *  recv_diff(i) = (Cri + D + ni) - (Cr0 + D + n0))
- *
- *    Cri    : The time of the clock at the receiver for packet i
- *    D + ni : The jitter when receiving packet i
- *
- * We see that the network delay is irrelevant here as we can eliminate D:
- *
- *  recv_diff(i) = (Cri + ni) - (Cr0 + n0))
- *
- * The drift is now expressed as:
- *
- *  Drift(i) = recv_diff(i) - send_diff(i);
- *
- * We now keep the W latest values of Drift and find the minimum (this is the
- * one with the lowest network jitter and thus the one which is least affected
- * by it). We average this lowest value to smooth out the resulting network skew.
- *
- * Both the window and the weighting used for averaging influence the accuracy
- * of the drift estimation. Finding the correct parameters turns out to be a
- * compromise between accuracy and inertia. 
- *
- * We use a 2 second window or up to 512 data points, which is statistically big
- * enough to catch spikes (FIXME, detect spikes).
- * We also use a rather large weighting factor (125) to smoothly adapt. During
- * startup, when filling the window, we use a parabolic weighting factor, the
- * more the window is filled, the faster we move to the detected possible skew.
- *
- * Returns: @time adjusted with the clock skew.
- */
-static GstClockTime
-calculate_skew (RDTJitterBuffer * jbuf, guint32 rtptime, GstClockTime time,
-    guint32 clock_rate)
-{
-  guint64 ext_rtptime;
-  guint64 send_diff, recv_diff;
-  gint64 delta;
-  gint64 old;
-  gint pos, i;
-  GstClockTime gstrtptime, out_time;
-
-  //ext_rtptime = gst_rtp_buffer_ext_timestamp (&jbuf->ext_rtptime, rtptime);
-  ext_rtptime = rtptime;
-
-  gstrtptime = gst_util_uint64_scale_int (ext_rtptime, GST_SECOND, clock_rate);
-
-again:
-  /* first time, lock on to time and gstrtptime */
-  if (jbuf->base_time == -1)
-    jbuf->base_time = time;
-  if (jbuf->base_rtptime == -1)
-    jbuf->base_rtptime = gstrtptime;
-
-  if (gstrtptime >= jbuf->base_rtptime)
-    send_diff = gstrtptime - jbuf->base_rtptime;
-  else {
-    /* elapsed time at sender, timestamps can go backwards and thus be smaller
-     * than our base time, take a new base time in that case. */
-    GST_DEBUG ("backward timestamps at server, taking new base time");
-    jbuf->base_rtptime = gstrtptime;
-    jbuf->base_time = time;
-    send_diff = 0;
-  }
-
-  GST_DEBUG ("extrtp %" G_GUINT64_FORMAT ", gstrtp %" GST_TIME_FORMAT ", base %"
-      GST_TIME_FORMAT ", send_diff %" GST_TIME_FORMAT, ext_rtptime,
-      GST_TIME_ARGS (gstrtptime), GST_TIME_ARGS (jbuf->base_rtptime),
-      GST_TIME_ARGS (send_diff));
-
-  if (jbuf->prev_send_diff != -1 && time != -1) {
-    gint64 delta_diff;
-
-    if (send_diff > jbuf->prev_send_diff)
-      delta_diff = send_diff - jbuf->prev_send_diff;
-    else
-      delta_diff = jbuf->prev_send_diff - send_diff;
-
-    /* server changed rtp timestamps too quickly, reset skew detection and start
-     * again. This value is sortof arbitrary and can be a bad measurement up if
-     * there are many packets missing because then we get a big gap that is
-     * unrelated to a timestamp switch. */
-    if (delta_diff > GST_SECOND) {
-      GST_DEBUG ("delta changed too quickly %" GST_TIME_FORMAT " reset skew",
-          GST_TIME_ARGS (delta_diff));
-      rdt_jitter_buffer_reset_skew (jbuf);
-      goto again;
-    }
-  }
-  jbuf->prev_send_diff = send_diff;
-
-  /* we don't have an arrival timestamp so we can't do skew detection. we
-   * should still apply a timestamp based on RDT timestamp and base_time */
-  if (time == -1)
-    goto no_skew;
-
-  /* elapsed time at receiver, includes the jitter */
-  recv_diff = time - jbuf->base_time;
-
-  GST_DEBUG ("time %" GST_TIME_FORMAT ", base %" GST_TIME_FORMAT ", recv_diff %"
-      GST_TIME_FORMAT, GST_TIME_ARGS (time), GST_TIME_ARGS (jbuf->base_time),
-      GST_TIME_ARGS (recv_diff));
-
-  /* measure the diff */
-  delta = ((gint64) recv_diff) - ((gint64) send_diff);
-
-  pos = jbuf->window_pos;
-
-  if (jbuf->window_filling) {
-    /* we are filling the window */
-    GST_DEBUG ("filling %d, delta %" G_GINT64_FORMAT, pos, delta);
-    jbuf->window[pos++] = delta;
-    /* calc the min delta we observed */
-    if (pos == 1 || delta < jbuf->window_min)
-      jbuf->window_min = delta;
-
-    if (send_diff >= MAX_TIME || pos >= MAX_WINDOW) {
-      jbuf->window_size = pos;
-
-      /* window filled */
-      GST_DEBUG ("min %" G_GINT64_FORMAT, jbuf->window_min);
-
-      /* the skew is now the min */
-      jbuf->skew = jbuf->window_min;
-      jbuf->window_filling = FALSE;
-    } else {
-      gint perc_time, perc_window, perc;
-
-      /* figure out how much we filled the window, this depends on the amount of
-       * time we have or the max number of points we keep. */
-      perc_time = send_diff * 100 / MAX_TIME;
-      perc_window = pos * 100 / MAX_WINDOW;
-      perc = MAX (perc_time, perc_window);
-
-      /* make a parabolic function, the closer we get to the MAX, the more value
-       * we give to the scaling factor of the new value */
-      perc = perc * perc;
-
-      /* quickly go to the min value when we are filling up, slowly when we are
-       * just starting because we're not sure it's a good value yet. */
-      jbuf->skew =
-          (perc * jbuf->window_min + ((10000 - perc) * jbuf->skew)) / 10000;
-      jbuf->window_size = pos + 1;
-    }
-  } else {
-    /* pick old value and store new value. We keep the previous value in order
-     * to quickly check if the min of the window changed */
-    old = jbuf->window[pos];
-    jbuf->window[pos++] = delta;
-
-    if (delta <= jbuf->window_min) {
-      /* if the new value we inserted is smaller or equal to the current min,
-       * it becomes the new min */
-      jbuf->window_min = delta;
-    } else if (old == jbuf->window_min) {
-      gint64 min = G_MAXINT64;
-
-      /* if we removed the old min, we have to find a new min */
-      for (i = 0; i < jbuf->window_size; i++) {
-        /* we found another value equal to the old min, we can stop searching now */
-        if (jbuf->window[i] == old) {
-          min = old;
-          break;
-        }
-        if (jbuf->window[i] < min)
-          min = jbuf->window[i];
-      }
-      jbuf->window_min = min;
-    }
-    /* average the min values */
-    jbuf->skew = (jbuf->window_min + (124 * jbuf->skew)) / 125;
-    GST_DEBUG ("delta %" G_GINT64_FORMAT ", new min: %" G_GINT64_FORMAT,
-        delta, jbuf->window_min);
-  }
-  /* wrap around in the window */
-  if (pos >= jbuf->window_size)
-    pos = 0;
-  jbuf->window_pos = pos;
-
-no_skew:
-  /* the output time is defined as the base timestamp plus the RDT time
-   * adjusted for the clock skew .*/
-  out_time = jbuf->base_time + send_diff + jbuf->skew;
-
-  GST_DEBUG ("skew %" G_GINT64_FORMAT ", out %" GST_TIME_FORMAT,
-      jbuf->skew, GST_TIME_ARGS (out_time));
-
-  return out_time;
-}
-
-/**
- * rdt_jitter_buffer_insert:
- * @jbuf: an #RDTJitterBuffer
- * @buf: a buffer
- * @time: a running_time when this buffer was received in nanoseconds
- * @clock_rate: the clock-rate of the payload of @buf
- * @tail: TRUE when the tail element changed.
- *
- * Inserts @buf into the packet queue of @jbuf. The sequence number of the
- * packet will be used to sort the packets. This function takes ownerhip of
- * @buf when the function returns %TRUE.
- * @buf should have writable metadata when calling this function.
- *
- * Returns: %FALSE if a packet with the same number already existed.
- */
-gboolean
-rdt_jitter_buffer_insert (RDTJitterBuffer * jbuf, GstBuffer * buf,
-    GstClockTime time, guint32 clock_rate, gboolean * tail)
-{
-  GList *list;
-  guint32 rtptime;
-  guint16 seqnum;
-  GstRDTPacket packet;
-  gboolean more;
-
-  g_return_val_if_fail (jbuf != NULL, FALSE);
-  g_return_val_if_fail (buf != NULL, FALSE);
-
-  more = gst_rdt_buffer_get_first_packet (buf, &packet);
-  /* programmer error */
-  g_return_val_if_fail (more == TRUE, FALSE);
-
-  seqnum = gst_rdt_packet_data_get_seq (&packet);
-  /* do skew calculation by measuring the difference between rtptime and the
-   * receive time, this function will retimestamp @buf with the skew corrected
-   * running time. */
-  rtptime = gst_rdt_packet_data_get_timestamp (&packet);
-
-  /* loop the list to skip strictly smaller seqnum buffers */
-  for (list = jbuf->packets->head; list; list = g_list_next (list)) {
-    guint16 qseq;
-    gint gap;
-
-    more =
-        gst_rdt_buffer_get_first_packet (GST_BUFFER_CAST (list->data), &packet);
-    /* programmer error */
-    g_return_val_if_fail (more == TRUE, FALSE);
-
-    qseq = gst_rdt_packet_data_get_seq (&packet);
-
-    /* compare the new seqnum to the one in the buffer */
-    gap = gst_rdt_buffer_compare_seqnum (seqnum, qseq);
-
-    /* we hit a packet with the same seqnum, notify a duplicate */
-    if (G_UNLIKELY (gap == 0))
-      goto duplicate;
-
-    /* seqnum > qseq, we can stop looking */
-    if (G_LIKELY (gap < 0))
-      break;
-  }
-
-
-  if (clock_rate) {
-    time = calculate_skew (jbuf, rtptime, time, clock_rate);
-    GST_BUFFER_TIMESTAMP (buf) = time;
-  }
-
-  if (list)
-    g_queue_insert_before (jbuf->packets, list, buf);
-  else
-    g_queue_push_tail (jbuf->packets, buf);
-
-  /* tail was changed when we did not find a previous packet, we set the return
-   * flag when requested. */
-  if (tail)
-    *tail = (list == NULL);
-
-  return TRUE;
-
-  /* ERRORS */
-duplicate:
-  {
-    GST_WARNING ("duplicate packet %d found", (gint) seqnum);
-    return FALSE;
-  }
-}
-
-/**
- * rdt_jitter_buffer_pop:
- * @jbuf: an #RDTJitterBuffer
- *
- * Pops the oldest buffer from the packet queue of @jbuf. The popped buffer will
- * have its timestamp adjusted with the incoming running_time and the detected
- * clock skew.
- *
- * Returns: a #GstBuffer or %NULL when there was no packet in the queue.
- */
-GstBuffer *
-rdt_jitter_buffer_pop (RDTJitterBuffer * jbuf)
-{
-  GstBuffer *buf;
-
-  g_return_val_if_fail (jbuf != NULL, FALSE);
-
-  buf = g_queue_pop_tail (jbuf->packets);
-
-  return buf;
-}
-
-/**
- * rdt_jitter_buffer_peek:
- * @jbuf: an #RDTJitterBuffer
- *
- * Peek the oldest buffer from the packet queue of @jbuf. Register a callback
- * with rdt_jitter_buffer_set_tail_changed() to be notified when an older packet
- * was inserted in the queue.
- *
- * Returns: a #GstBuffer or %NULL when there was no packet in the queue.
- */
-GstBuffer *
-rdt_jitter_buffer_peek (RDTJitterBuffer * jbuf)
-{
-  GstBuffer *buf;
-
-  g_return_val_if_fail (jbuf != NULL, FALSE);
-
-  buf = g_queue_peek_tail (jbuf->packets);
-
-  return buf;
-}
-
-/**
- * rdt_jitter_buffer_flush:
- * @jbuf: an #RDTJitterBuffer
- *
- * Flush all packets from the jitterbuffer.
- */
-void
-rdt_jitter_buffer_flush (RDTJitterBuffer * jbuf)
-{
-  GstBuffer *buffer;
-
-  g_return_if_fail (jbuf != NULL);
-
-  while ((buffer = g_queue_pop_head (jbuf->packets)))
-    gst_buffer_unref (buffer);
-}
-
-/**
- * rdt_jitter_buffer_num_packets:
- * @jbuf: an #RDTJitterBuffer
- *
- * Get the number of packets currently in "jbuf.
- *
- * Returns: The number of packets in @jbuf.
- */
-guint
-rdt_jitter_buffer_num_packets (RDTJitterBuffer * jbuf)
-{
-  g_return_val_if_fail (jbuf != NULL, 0);
-
-  return jbuf->packets->length;
-}
-
-/**
- * rdt_jitter_buffer_get_ts_diff:
- * @jbuf: an #RDTJitterBuffer
- *
- * Get the difference between the timestamps of first and last packet in the
- * jitterbuffer.
- *
- * Returns: The difference expressed in the timestamp units of the packets.
- */
-guint32
-rdt_jitter_buffer_get_ts_diff (RDTJitterBuffer * jbuf)
-{
-  guint64 high_ts, low_ts;
-  GstBuffer *high_buf, *low_buf;
-  guint32 result;
-
-  g_return_val_if_fail (jbuf != NULL, 0);
-
-  high_buf = g_queue_peek_head (jbuf->packets);
-  low_buf = g_queue_peek_tail (jbuf->packets);
-
-  if (!high_buf || !low_buf || high_buf == low_buf)
-    return 0;
-
-  //high_ts = gst_rtp_buffer_get_timestamp (high_buf);
-  //low_ts = gst_rtp_buffer_get_timestamp (low_buf);
-  high_ts = 0;
-  low_ts = 0;
-
-  /* it needs to work if ts wraps */
-  if (high_ts >= low_ts) {
-    result = (guint32) (high_ts - low_ts);
-  } else {
-    result = (guint32) (high_ts + G_MAXUINT32 + 1 - low_ts);
-  }
-  return result;
-}
diff --git a/gst/realmedia/rdtjitterbuffer.h b/gst/realmedia/rdtjitterbuffer.h
deleted file mode 100644 (file)
index 7eea5e6..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/* GStreamer
- * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.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 __RDT_JITTER_BUFFER_H__
-#define __RDT_JITTER_BUFFER_H__
-
-#include <gst/gst.h>
-
-typedef struct _RDTJitterBuffer RDTJitterBuffer;
-typedef struct _RDTJitterBufferClass RDTJitterBufferClass;
-
-#define RDT_TYPE_JITTER_BUFFER             (rdt_jitter_buffer_get_type())
-#define RDT_JITTER_BUFFER(src)             (G_TYPE_CHECK_INSTANCE_CAST((src),RDT_TYPE_JITTER_BUFFER,RDTJitterBuffer))
-#define RDT_JITTER_BUFFER_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),RDT_TYPE_JITTER_BUFFER,RDTJitterBufferClass))
-#define RDT_IS_JITTER_BUFFER(src)          (G_TYPE_CHECK_INSTANCE_TYPE((src),RDT_TYPE_JITTER_BUFFER))
-#define RDT_IS_JITTER_BUFFER_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),RDT_TYPE_JITTER_BUFFER))
-#define RDT_JITTER_BUFFER_CAST(src)        ((RDTJitterBuffer *)(src))
-
-/**
- * RTPTailChanged:
- * @jbuf: an #RDTJitterBuffer
- * @user_data: user data specified when registering
- *
- * This callback will be called when the tail buffer of @jbuf changed.
- */
-typedef void (*RTPTailChanged) (RDTJitterBuffer *jbuf, gpointer user_data);
-
-#define RDT_JITTER_BUFFER_MAX_WINDOW 512
-/**
- * RDTJitterBuffer:
- *
- * A JitterBuffer in the #RTPSession
- */
-struct _RDTJitterBuffer {
-  GObject        object;
-
-  GQueue        *packets;
-
-  /* for calculating skew */
-  GstClockTime   base_time;
-  GstClockTime   base_rtptime;
-  guint64        ext_rtptime;
-  gint64         window[RDT_JITTER_BUFFER_MAX_WINDOW];
-  guint          window_pos;
-  guint          window_size;
-  gboolean       window_filling;
-  gint64         window_min;
-  gint64         skew;
-  gint64         prev_send_diff;
-};
-
-struct _RDTJitterBufferClass {
-  GObjectClass   parent_class;
-};
-
-GType rdt_jitter_buffer_get_type (void);
-
-/* managing lifetime */
-RDTJitterBuffer*      rdt_jitter_buffer_new              (void);
-
-void                  rdt_jitter_buffer_reset_skew       (RDTJitterBuffer *jbuf);
-
-gboolean              rdt_jitter_buffer_insert           (RDTJitterBuffer *jbuf, GstBuffer *buf,
-                                                         GstClockTime time,
-                                                         guint32 clock_rate,
-                                                         gboolean *tail);
-GstBuffer *           rdt_jitter_buffer_peek             (RDTJitterBuffer *jbuf);
-GstBuffer *           rdt_jitter_buffer_pop              (RDTJitterBuffer *jbuf);
-
-void                  rdt_jitter_buffer_flush            (RDTJitterBuffer *jbuf);
-
-guint                 rdt_jitter_buffer_num_packets      (RDTJitterBuffer *jbuf);
-guint32               rdt_jitter_buffer_get_ts_diff      (RDTJitterBuffer *jbuf);
-
-#endif /* __RDT_JITTER_BUFFER_H__ */
diff --git a/gst/realmedia/rdtmanager.c b/gst/realmedia/rdtmanager.c
deleted file mode 100644 (file)
index 978bc9e..0000000
+++ /dev/null
@@ -1,1371 +0,0 @@
-/* GStreamer
- * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
- *               <2013> Wim Taymans <wim.taymans@gmail.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.
- */
-/*
- * Unless otherwise indicated, Source Code is licensed under MIT license.
- * See further explanation attached in License Statement (distributed in the file
- * LICENSE).
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is furnished to do
- * so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-/* Element-Checklist-Version: 5 */
-
-/**
- * SECTION:element-rdtmanager
- * @title: rdtmanager
- * @see_also: GstRtspSrc
- *
- * A simple RTP session manager used internally by rtspsrc.
- */
-
-/* #define HAVE_RTCP */
-
-#include "gstrdtbuffer.h"
-#include "rdtmanager.h"
-#include "rdtjitterbuffer.h"
-
-#include <gst/glib-compat-private.h>
-
-#include <stdio.h>
-
-GST_DEBUG_CATEGORY_STATIC (rdtmanager_debug);
-#define GST_CAT_DEFAULT (rdtmanager_debug)
-
-/* GstRDTManager signals and args */
-enum
-{
-  SIGNAL_REQUEST_PT_MAP,
-  SIGNAL_CLEAR_PT_MAP,
-
-  SIGNAL_ON_NEW_SSRC,
-  SIGNAL_ON_SSRC_COLLISION,
-  SIGNAL_ON_SSRC_VALIDATED,
-  SIGNAL_ON_SSRC_ACTIVE,
-  SIGNAL_ON_SSRC_SDES,
-  SIGNAL_ON_BYE_SSRC,
-  SIGNAL_ON_BYE_TIMEOUT,
-  SIGNAL_ON_TIMEOUT,
-  SIGNAL_ON_NPT_STOP,
-  LAST_SIGNAL
-};
-
-#define DEFAULT_LATENCY_MS      200
-
-enum
-{
-  PROP_0,
-  PROP_LATENCY
-};
-
-static GstStaticPadTemplate gst_rdt_manager_recv_rtp_sink_template =
-GST_STATIC_PAD_TEMPLATE ("recv_rtp_sink_%u",
-    GST_PAD_SINK,
-    GST_PAD_REQUEST,
-    GST_STATIC_CAPS ("application/x-rdt")
-    );
-
-static GstStaticPadTemplate gst_rdt_manager_recv_rtcp_sink_template =
-GST_STATIC_PAD_TEMPLATE ("recv_rtcp_sink_%u",
-    GST_PAD_SINK,
-    GST_PAD_REQUEST,
-    GST_STATIC_CAPS ("application/x-rtcp")
-    );
-
-static GstStaticPadTemplate gst_rdt_manager_recv_rtp_src_template =
-GST_STATIC_PAD_TEMPLATE ("recv_rtp_src_%u_%u_%u",
-    GST_PAD_SRC,
-    GST_PAD_SOMETIMES,
-    GST_STATIC_CAPS ("application/x-rdt")
-    );
-
-static GstStaticPadTemplate gst_rdt_manager_rtcp_src_template =
-GST_STATIC_PAD_TEMPLATE ("rtcp_src_%u",
-    GST_PAD_SRC,
-    GST_PAD_REQUEST,
-    GST_STATIC_CAPS ("application/x-rtcp")
-    );
-
-static void gst_rdt_manager_finalize (GObject * object);
-static void gst_rdt_manager_set_property (GObject * object,
-    guint prop_id, const GValue * value, GParamSpec * pspec);
-static void gst_rdt_manager_get_property (GObject * object,
-    guint prop_id, GValue * value, GParamSpec * pspec);
-
-static gboolean gst_rdt_manager_query_src (GstPad * pad, GstObject * parent,
-    GstQuery * query);
-static gboolean gst_rdt_manager_src_activate_mode (GstPad * pad,
-    GstObject * parent, GstPadMode mode, gboolean active);
-
-static GstClock *gst_rdt_manager_provide_clock (GstElement * element);
-static GstStateChangeReturn gst_rdt_manager_change_state (GstElement * element,
-    GstStateChange transition);
-static GstPad *gst_rdt_manager_request_new_pad (GstElement * element,
-    GstPadTemplate * templ, const gchar * name, const GstCaps * caps);
-static void gst_rdt_manager_release_pad (GstElement * element, GstPad * pad);
-
-static gboolean gst_rdt_manager_parse_caps (GstRDTManager * rdtmanager,
-    GstRDTManagerSession * session, GstCaps * caps);
-static gboolean gst_rdt_manager_event_rdt (GstPad * pad, GstObject * parent,
-    GstEvent * event);
-
-static GstFlowReturn gst_rdt_manager_chain_rdt (GstPad * pad,
-    GstObject * parent, GstBuffer * buffer);
-static GstFlowReturn gst_rdt_manager_chain_rtcp (GstPad * pad,
-    GstObject * parent, GstBuffer * buffer);
-static void gst_rdt_manager_loop (GstPad * pad);
-
-static guint gst_rdt_manager_signals[LAST_SIGNAL] = { 0 };
-
-#define JBUF_LOCK(sess)   (g_mutex_lock (&(sess)->jbuf_lock))
-
-#define JBUF_LOCK_CHECK(sess,label) G_STMT_START {    \
-  JBUF_LOCK (sess);                                   \
-  if (sess->srcresult != GST_FLOW_OK)                 \
-    goto label;                                       \
-} G_STMT_END
-
-#define JBUF_UNLOCK(sess) (g_mutex_unlock (&(sess)->jbuf_lock))
-#define JBUF_WAIT(sess)   (g_cond_wait (&(sess)->jbuf_cond, &(sess)->jbuf_lock))
-
-#define JBUF_WAIT_CHECK(sess,label) G_STMT_START {    \
-  JBUF_WAIT(sess);                                    \
-  if (sess->srcresult != GST_FLOW_OK)                 \
-    goto label;                                       \
-} G_STMT_END
-
-#define JBUF_SIGNAL(sess) (g_cond_signal (&(sess)->jbuf_cond))
-
-/* Manages the receiving end of the packets.
- *
- * There is one such structure for each RTP session (audio/video/...).
- * We get the RTP/RTCP packets and stuff them into the session manager. 
- */
-struct _GstRDTManagerSession
-{
-  /* session id */
-  gint id;
-  /* the parent bin */
-  GstRDTManager *dec;
-
-  gboolean active;
-  /* we only support one ssrc and one pt */
-  guint32 ssrc;
-  guint8 pt;
-  gint clock_rate;
-  GstCaps *caps;
-  gint64 clock_base;
-
-  GstSegment segment;
-
-  /* the last seqnum we pushed out */
-  guint32 last_popped_seqnum;
-  /* the next expected seqnum */
-  guint32 next_seqnum;
-  /* last output time */
-  GstClockTime last_out_time;
-
-  /* the pads of the session */
-  GstPad *recv_rtp_sink;
-  GstPad *recv_rtp_src;
-  GstPad *recv_rtcp_sink;
-  GstPad *rtcp_src;
-
-  GstFlowReturn srcresult;
-  gboolean blocked;
-  gboolean eos;
-  gboolean waiting;
-  gboolean discont;
-  GstClockID clock_id;
-
-  /* jitterbuffer, lock and cond */
-  RDTJitterBuffer *jbuf;
-  GMutex jbuf_lock;
-  GCond jbuf_cond;
-
-  /* some accounting */
-  guint64 num_late;
-  guint64 num_duplicates;
-};
-
-/* find a session with the given id */
-static GstRDTManagerSession *
-find_session_by_id (GstRDTManager * rdtmanager, gint id)
-{
-  GSList *walk;
-
-  for (walk = rdtmanager->sessions; walk; walk = g_slist_next (walk)) {
-    GstRDTManagerSession *sess = (GstRDTManagerSession *) walk->data;
-
-    if (sess->id == id)
-      return sess;
-  }
-  return NULL;
-}
-
-/* create a session with the given id */
-static GstRDTManagerSession *
-create_session (GstRDTManager * rdtmanager, gint id)
-{
-  GstRDTManagerSession *sess;
-
-  sess = g_new0 (GstRDTManagerSession, 1);
-  sess->id = id;
-  sess->dec = rdtmanager;
-  sess->jbuf = rdt_jitter_buffer_new ();
-  g_mutex_init (&sess->jbuf_lock);
-  g_cond_init (&sess->jbuf_cond);
-  rdtmanager->sessions = g_slist_prepend (rdtmanager->sessions, sess);
-
-  return sess;
-}
-
-static gboolean
-forward_sticky_events (GstPad * pad, GstEvent ** event, gpointer user_data)
-{
-  GstPad *srcpad = GST_PAD_CAST (user_data);
-
-  gst_pad_push_event (srcpad, gst_event_ref (*event));
-
-  return TRUE;
-}
-
-static gboolean
-activate_session (GstRDTManager * rdtmanager, GstRDTManagerSession * session,
-    guint32 ssrc, guint8 pt)
-{
-  GstPadTemplate *templ;
-  GstElementClass *klass;
-  gchar *name;
-  GstCaps *caps;
-  GValue ret = { 0 };
-  GValue args[3] = { {0}
-  , {0}
-  , {0}
-  };
-
-  GST_DEBUG_OBJECT (rdtmanager, "creating stream");
-
-  session->ssrc = ssrc;
-  session->pt = pt;
-
-  /* get pt map */
-  g_value_init (&args[0], GST_TYPE_ELEMENT);
-  g_value_set_object (&args[0], rdtmanager);
-  g_value_init (&args[1], G_TYPE_UINT);
-  g_value_set_uint (&args[1], session->id);
-  g_value_init (&args[2], G_TYPE_UINT);
-  g_value_set_uint (&args[2], pt);
-
-  g_value_init (&ret, GST_TYPE_CAPS);
-  g_value_set_boxed (&ret, NULL);
-
-  g_signal_emitv (args, gst_rdt_manager_signals[SIGNAL_REQUEST_PT_MAP], 0,
-      &ret);
-
-  g_value_unset (&args[0]);
-  g_value_unset (&args[1]);
-  g_value_unset (&args[2]);
-  caps = (GstCaps *) g_value_dup_boxed (&ret);
-  g_value_unset (&ret);
-
-  if (caps)
-    gst_rdt_manager_parse_caps (rdtmanager, session, caps);
-
-  name = g_strdup_printf ("recv_rtp_src_%u_%u_%u", session->id, ssrc, pt);
-  klass = GST_ELEMENT_GET_CLASS (rdtmanager);
-  templ = gst_element_class_get_pad_template (klass, "recv_rtp_src_%u_%u_%u");
-  session->recv_rtp_src = gst_pad_new_from_template (templ, name);
-  g_free (name);
-
-  gst_pad_set_element_private (session->recv_rtp_src, session);
-  gst_pad_set_query_function (session->recv_rtp_src, gst_rdt_manager_query_src);
-  gst_pad_set_activatemode_function (session->recv_rtp_src,
-      gst_rdt_manager_src_activate_mode);
-
-  gst_pad_set_active (session->recv_rtp_src, TRUE);
-
-  gst_pad_sticky_events_foreach (session->recv_rtp_sink, forward_sticky_events,
-      session->recv_rtp_src);
-  gst_pad_set_caps (session->recv_rtp_src, caps);
-  gst_caps_unref (caps);
-
-  gst_element_add_pad (GST_ELEMENT_CAST (rdtmanager), session->recv_rtp_src);
-
-  return TRUE;
-}
-
-static void
-free_session (GstRDTManagerSession * session)
-{
-  g_object_unref (session->jbuf);
-  g_cond_clear (&session->jbuf_cond);
-  g_mutex_clear (&session->jbuf_lock);
-  g_free (session);
-}
-
-#define gst_rdt_manager_parent_class parent_class
-G_DEFINE_TYPE (GstRDTManager, gst_rdt_manager, GST_TYPE_ELEMENT);
-GST_ELEMENT_REGISTER_DEFINE (rdtmanager, "rdtmanager",
-    GST_RANK_NONE, GST_TYPE_RDT_MANAGER);
-
-/* BOXED:UINT,UINT */
-#define g_marshal_value_peek_uint(v)     g_value_get_uint (v)
-
-static void
-gst_rdt_manager_marshal_BOXED__UINT_UINT (GClosure * closure,
-    GValue * return_value,
-    guint n_param_values,
-    const GValue * param_values,
-    gpointer invocation_hint, gpointer marshal_data)
-{
-  typedef gpointer (*GMarshalFunc_BOXED__UINT_UINT) (gpointer data1,
-      guint arg_1, guint arg_2, gpointer data2);
-  register GMarshalFunc_BOXED__UINT_UINT callback;
-  register GCClosure *cc = (GCClosure *) closure;
-  register gpointer data1, data2;
-  gpointer v_return;
-
-  g_return_if_fail (return_value != NULL);
-  g_return_if_fail (n_param_values == 3);
-
-  if (G_CCLOSURE_SWAP_DATA (closure)) {
-    data1 = closure->data;
-    data2 = g_value_peek_pointer (param_values + 0);
-  } else {
-    data1 = g_value_peek_pointer (param_values + 0);
-    data2 = closure->data;
-  }
-  callback =
-      (GMarshalFunc_BOXED__UINT_UINT) (marshal_data ? marshal_data :
-      cc->callback);
-
-  v_return = callback (data1,
-      g_marshal_value_peek_uint (param_values + 1),
-      g_marshal_value_peek_uint (param_values + 2), data2);
-
-  g_value_take_boxed (return_value, v_return);
-}
-
-static void
-gst_rdt_manager_marshal_VOID__UINT_UINT (GClosure * closure,
-    GValue * return_value,
-    guint n_param_values,
-    const GValue * param_values,
-    gpointer invocation_hint, gpointer marshal_data)
-{
-  typedef void (*GMarshalFunc_VOID__UINT_UINT) (gpointer data1,
-      guint arg_1, guint arg_2, gpointer data2);
-  register GMarshalFunc_VOID__UINT_UINT callback;
-  register GCClosure *cc = (GCClosure *) closure;
-  register gpointer data1, data2;
-
-  g_return_if_fail (n_param_values == 3);
-
-  if (G_CCLOSURE_SWAP_DATA (closure)) {
-    data1 = closure->data;
-    data2 = g_value_peek_pointer (param_values + 0);
-  } else {
-    data1 = g_value_peek_pointer (param_values + 0);
-    data2 = closure->data;
-  }
-  callback =
-      (GMarshalFunc_VOID__UINT_UINT) (marshal_data ? marshal_data :
-      cc->callback);
-
-  callback (data1,
-      g_marshal_value_peek_uint (param_values + 1),
-      g_marshal_value_peek_uint (param_values + 2), data2);
-}
-
-static void
-gst_rdt_manager_class_init (GstRDTManagerClass * g_class)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-  GstRDTManagerClass *klass;
-
-  klass = (GstRDTManagerClass *) g_class;
-  gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-
-  gobject_class->finalize = gst_rdt_manager_finalize;
-  gobject_class->set_property = gst_rdt_manager_set_property;
-  gobject_class->get_property = gst_rdt_manager_get_property;
-
-  g_object_class_install_property (gobject_class, PROP_LATENCY,
-      g_param_spec_uint ("latency", "Buffer latency in ms",
-          "Amount of ms to buffer", 0, G_MAXUINT, DEFAULT_LATENCY_MS,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-  /**
-   * GstRDTManager::request-pt-map:
-   * @rdtmanager: the object which received the signal
-   * @session: the session
-   * @pt: the pt
-   *
-   * Request the payload type as #GstCaps for @pt in @session.
-   */
-  gst_rdt_manager_signals[SIGNAL_REQUEST_PT_MAP] =
-      g_signal_new ("request-pt-map", G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, request_pt_map),
-      NULL, NULL, gst_rdt_manager_marshal_BOXED__UINT_UINT, GST_TYPE_CAPS, 2,
-      G_TYPE_UINT, G_TYPE_UINT);
-
-  /**
-   * GstRDTManager::clear-pt-map:
-   * @rtpbin: the object which received the signal
-   *
-   * Clear all previously cached pt-mapping obtained with
-   * GstRDTManager::request-pt-map.
-   */
-  gst_rdt_manager_signals[SIGNAL_CLEAR_PT_MAP] =
-      g_signal_new ("clear-pt-map", G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, clear_pt_map),
-      NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE);
-
-  /**
-   * GstRDTManager::on-bye-ssrc:
-   * @rtpbin: the object which received the signal
-   * @session: the session
-   * @ssrc: the SSRC
-   *
-   * Notify of an SSRC that became inactive because of a BYE packet.
-   */
-  gst_rdt_manager_signals[SIGNAL_ON_BYE_SSRC] =
-      g_signal_new ("on-bye-ssrc", G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, on_bye_ssrc),
-      NULL, NULL, gst_rdt_manager_marshal_VOID__UINT_UINT, G_TYPE_NONE, 2,
-      G_TYPE_UINT, G_TYPE_UINT);
-  /**
-   * GstRDTManager::on-bye-timeout:
-   * @rtpbin: the object which received the signal
-   * @session: the session
-   * @ssrc: the SSRC
-   *
-   * Notify of an SSRC that has timed out because of BYE
-   */
-  gst_rdt_manager_signals[SIGNAL_ON_BYE_TIMEOUT] =
-      g_signal_new ("on-bye-timeout", G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, on_bye_timeout),
-      NULL, NULL, gst_rdt_manager_marshal_VOID__UINT_UINT, G_TYPE_NONE, 2,
-      G_TYPE_UINT, G_TYPE_UINT);
-  /**
-   * GstRDTManager::on-timeout:
-   * @rtpbin: the object which received the signal
-   * @session: the session
-   * @ssrc: the SSRC
-   *
-   * Notify of an SSRC that has timed out
-   */
-  gst_rdt_manager_signals[SIGNAL_ON_TIMEOUT] =
-      g_signal_new ("on-timeout", G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, on_timeout),
-      NULL, NULL, gst_rdt_manager_marshal_VOID__UINT_UINT, G_TYPE_NONE, 2,
-      G_TYPE_UINT, G_TYPE_UINT);
-
-  /**
-   * GstRDTManager::on-npt-stop:
-   * @rtpbin: the object which received the signal
-   * @session: the session
-   * @ssrc: the SSRC
-   *
-   * Notify that SSRC sender has sent data up to the configured NPT stop time.
-   */
-  gst_rdt_manager_signals[SIGNAL_ON_NPT_STOP] =
-      g_signal_new ("on-npt-stop", G_TYPE_FROM_CLASS (klass),
-      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, on_npt_stop),
-      NULL, NULL, gst_rdt_manager_marshal_VOID__UINT_UINT, G_TYPE_NONE, 2,
-      G_TYPE_UINT, G_TYPE_UINT);
-
-
-  gstelement_class->provide_clock =
-      GST_DEBUG_FUNCPTR (gst_rdt_manager_provide_clock);
-  gstelement_class->change_state =
-      GST_DEBUG_FUNCPTR (gst_rdt_manager_change_state);
-  gstelement_class->request_new_pad =
-      GST_DEBUG_FUNCPTR (gst_rdt_manager_request_new_pad);
-  gstelement_class->release_pad =
-      GST_DEBUG_FUNCPTR (gst_rdt_manager_release_pad);
-
-  /* sink pads */
-  gst_element_class_add_static_pad_template (gstelement_class,
-      &gst_rdt_manager_recv_rtp_sink_template);
-  gst_element_class_add_static_pad_template (gstelement_class,
-      &gst_rdt_manager_recv_rtcp_sink_template);
-  /* src pads */
-  gst_element_class_add_static_pad_template (gstelement_class,
-      &gst_rdt_manager_recv_rtp_src_template);
-  gst_element_class_add_static_pad_template (gstelement_class,
-      &gst_rdt_manager_rtcp_src_template);
-
-  gst_element_class_set_static_metadata (gstelement_class, "RTP Decoder",
-      "Codec/Parser/Network",
-      "Accepts raw RTP and RTCP packets and sends them forward",
-      "Wim Taymans <wim.taymans@gmail.com>");
-
-  GST_DEBUG_CATEGORY_INIT (rdtmanager_debug, "rdtmanager", 0, "RTP decoder");
-}
-
-static void
-gst_rdt_manager_init (GstRDTManager * rdtmanager)
-{
-  rdtmanager->provided_clock = gst_system_clock_obtain ();
-  rdtmanager->latency = DEFAULT_LATENCY_MS;
-  GST_OBJECT_FLAG_SET (rdtmanager, GST_ELEMENT_FLAG_PROVIDE_CLOCK);
-}
-
-static void
-gst_rdt_manager_finalize (GObject * object)
-{
-  GstRDTManager *rdtmanager;
-
-  rdtmanager = GST_RDT_MANAGER (object);
-
-  g_slist_foreach (rdtmanager->sessions, (GFunc) free_session, NULL);
-  g_slist_free (rdtmanager->sessions);
-  g_clear_object (&rdtmanager->provided_clock);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static gboolean
-gst_rdt_manager_query_src (GstPad * pad, GstObject * parent, GstQuery * query)
-{
-  GstRDTManager *rdtmanager;
-  gboolean res;
-
-  rdtmanager = GST_RDT_MANAGER (parent);
-
-  switch (GST_QUERY_TYPE (query)) {
-    case GST_QUERY_LATENCY:
-    {
-      GstClockTime latency;
-
-      latency = rdtmanager->latency * GST_MSECOND;
-
-      /* we pretend to be live with a 3 second latency */
-      gst_query_set_latency (query, TRUE, latency, -1);
-
-      GST_DEBUG_OBJECT (rdtmanager, "reporting %" GST_TIME_FORMAT " of latency",
-          GST_TIME_ARGS (latency));
-      res = TRUE;
-      break;
-    }
-    default:
-      res = gst_pad_query_default (pad, parent, query);
-      break;
-  }
-  return res;
-}
-
-static gboolean
-gst_rdt_manager_src_activate_mode (GstPad * pad, GstObject * parent,
-    GstPadMode mode, gboolean active)
-{
-  gboolean result;
-  GstRDTManager *rdtmanager;
-  GstRDTManagerSession *session;
-
-  session = gst_pad_get_element_private (pad);
-  rdtmanager = session->dec;
-
-  switch (mode) {
-    case GST_PAD_MODE_PUSH:
-      if (active) {
-        /* allow data processing */
-        JBUF_LOCK (session);
-        GST_DEBUG_OBJECT (rdtmanager, "Enabling pop on queue");
-        /* Mark as non flushing */
-        session->srcresult = GST_FLOW_OK;
-        gst_segment_init (&session->segment, GST_FORMAT_TIME);
-        session->last_popped_seqnum = -1;
-        session->last_out_time = -1;
-        session->next_seqnum = -1;
-        session->eos = FALSE;
-        JBUF_UNLOCK (session);
-
-        /* start pushing out buffers */
-        GST_DEBUG_OBJECT (rdtmanager, "Starting task on srcpad");
-        result =
-            gst_pad_start_task (pad, (GstTaskFunction) gst_rdt_manager_loop,
-            pad, NULL);
-      } else {
-        /* make sure all data processing stops ASAP */
-        JBUF_LOCK (session);
-        /* mark ourselves as flushing */
-        session->srcresult = GST_FLOW_FLUSHING;
-        GST_DEBUG_OBJECT (rdtmanager, "Disabling pop on queue");
-        /* this unblocks any waiting pops on the src pad task */
-        JBUF_SIGNAL (session);
-        /* unlock clock, we just unschedule, the entry will be released by
-         * the locking streaming thread. */
-        if (session->clock_id)
-          gst_clock_id_unschedule (session->clock_id);
-        JBUF_UNLOCK (session);
-
-        /* NOTE this will hardlock if the state change is called from the src pad
-         * task thread because we will _join() the thread. */
-        GST_DEBUG_OBJECT (rdtmanager, "Stopping task on srcpad");
-        result = gst_pad_stop_task (pad);
-      }
-      break;
-    default:
-      result = FALSE;
-      break;
-  }
-  return result;
-}
-
-static GstFlowReturn
-gst_rdt_manager_handle_data_packet (GstRDTManagerSession * session,
-    GstClockTime timestamp, GstRDTPacket * packet)
-{
-  GstRDTManager *rdtmanager;
-  guint16 seqnum;
-  gboolean tail;
-  GstFlowReturn res;
-  GstBuffer *buffer;
-
-  rdtmanager = session->dec;
-
-  res = GST_FLOW_OK;
-
-  seqnum = 0;
-  GST_DEBUG_OBJECT (rdtmanager,
-      "Received packet #%d at time %" GST_TIME_FORMAT, seqnum,
-      GST_TIME_ARGS (timestamp));
-
-  buffer = gst_rdt_packet_to_buffer (packet);
-
-  JBUF_LOCK_CHECK (session, out_flushing);
-
-  /* insert the packet into the queue now, FIXME, use seqnum */
-  if (!rdt_jitter_buffer_insert (session->jbuf, buffer, timestamp,
-          session->clock_rate, &tail))
-    goto duplicate;
-
-  /* signal addition of new buffer when the _loop is waiting. */
-  if (session->waiting)
-    JBUF_SIGNAL (session);
-
-finished:
-  JBUF_UNLOCK (session);
-
-  return res;
-
-  /* ERRORS */
-out_flushing:
-  {
-    res = session->srcresult;
-    GST_DEBUG_OBJECT (rdtmanager, "flushing %s", gst_flow_get_name (res));
-    gst_buffer_unref (buffer);
-    goto finished;
-  }
-duplicate:
-  {
-    GST_WARNING_OBJECT (rdtmanager, "Duplicate packet #%d detected, dropping",
-        seqnum);
-    session->num_duplicates++;
-    gst_buffer_unref (buffer);
-    goto finished;
-  }
-}
-
-static gboolean
-gst_rdt_manager_parse_caps (GstRDTManager * rdtmanager,
-    GstRDTManagerSession * session, GstCaps * caps)
-{
-  GstStructure *caps_struct;
-  guint val;
-
-  /* first parse the caps */
-  caps_struct = gst_caps_get_structure (caps, 0);
-
-  GST_DEBUG_OBJECT (rdtmanager, "got caps");
-
-  /* we need a clock-rate to convert the rtp timestamps to GStreamer time and to
-   * measure the amount of data in the buffer */
-  if (!gst_structure_get_int (caps_struct, "clock-rate", &session->clock_rate))
-    session->clock_rate = 1000;
-
-  if (session->clock_rate <= 0)
-    goto wrong_rate;
-
-  GST_DEBUG_OBJECT (rdtmanager, "got clock-rate %d", session->clock_rate);
-
-  /* gah, clock-base is uint. If we don't have a base, we will use the first
-   * buffer timestamp as the base time. This will screw up sync but it's better
-   * than nothing. */
-  if (gst_structure_get_uint (caps_struct, "clock-base", &val))
-    session->clock_base = val;
-  else
-    session->clock_base = -1;
-
-  GST_DEBUG_OBJECT (rdtmanager, "got clock-base %" G_GINT64_FORMAT,
-      session->clock_base);
-
-  /* first expected seqnum */
-  if (gst_structure_get_uint (caps_struct, "seqnum-base", &val))
-    session->next_seqnum = val;
-  else
-    session->next_seqnum = -1;
-
-  GST_DEBUG_OBJECT (rdtmanager, "got seqnum-base %d", session->next_seqnum);
-
-  return TRUE;
-
-  /* ERRORS */
-wrong_rate:
-  {
-    GST_DEBUG_OBJECT (rdtmanager, "Invalid clock-rate %d", session->clock_rate);
-    return FALSE;
-  }
-}
-
-static gboolean
-gst_rdt_manager_event_rdt (GstPad * pad, GstObject * parent, GstEvent * event)
-{
-  GstRDTManager *rdtmanager;
-  GstRDTManagerSession *session;
-  gboolean res;
-
-  rdtmanager = GST_RDT_MANAGER (parent);
-  /* find session */
-  session = gst_pad_get_element_private (pad);
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_CAPS:
-    {
-      GstCaps *caps;
-
-      gst_event_parse_caps (event, &caps);
-      res = gst_rdt_manager_parse_caps (rdtmanager, session, caps);
-      gst_event_unref (event);
-      break;
-    }
-    default:
-      res = gst_pad_event_default (pad, parent, event);
-      break;
-  }
-  return res;
-}
-
-static GstFlowReturn
-gst_rdt_manager_chain_rdt (GstPad * pad, GstObject * parent, GstBuffer * buffer)
-{
-  GstFlowReturn res;
-  GstRDTManager *rdtmanager;
-  GstRDTManagerSession *session;
-  GstClockTime timestamp;
-  GstRDTPacket packet;
-  guint32 ssrc;
-  guint8 pt;
-  gboolean more;
-
-  rdtmanager = GST_RDT_MANAGER (parent);
-
-  GST_DEBUG_OBJECT (rdtmanager, "got RDT packet");
-
-  ssrc = 0;
-  pt = 0;
-
-  GST_DEBUG_OBJECT (rdtmanager, "SSRC %08x, PT %d", ssrc, pt);
-
-  /* find session */
-  session = gst_pad_get_element_private (pad);
-
-  /* see if we have the pad */
-  if (!session->active) {
-    activate_session (rdtmanager, session, ssrc, pt);
-    session->active = TRUE;
-  }
-
-  if (GST_BUFFER_IS_DISCONT (buffer)) {
-    GST_DEBUG_OBJECT (rdtmanager, "received discont");
-    session->discont = TRUE;
-  }
-
-  res = GST_FLOW_OK;
-
-  /* take the timestamp of the buffer. This is the time when the packet was
-   * received and is used to calculate jitter and clock skew. We will adjust
-   * this timestamp with the smoothed value after processing it in the
-   * jitterbuffer. */
-  timestamp = GST_BUFFER_TIMESTAMP (buffer);
-  /* bring to running time */
-  timestamp = gst_segment_to_running_time (&session->segment, GST_FORMAT_TIME,
-      timestamp);
-
-  more = gst_rdt_buffer_get_first_packet (buffer, &packet);
-  while (more) {
-    GstRDTType type;
-
-    type = gst_rdt_packet_get_type (&packet);
-    GST_DEBUG_OBJECT (rdtmanager, "Have packet of type %04x", type);
-
-    if (GST_RDT_IS_DATA_TYPE (type)) {
-      GST_DEBUG_OBJECT (rdtmanager, "We have a data packet");
-      res = gst_rdt_manager_handle_data_packet (session, timestamp, &packet);
-    } else {
-      switch (type) {
-        default:
-          GST_DEBUG_OBJECT (rdtmanager, "Ignoring packet");
-          break;
-      }
-    }
-    if (res != GST_FLOW_OK)
-      break;
-
-    more = gst_rdt_packet_move_to_next (&packet);
-  }
-
-  gst_buffer_unref (buffer);
-
-  return res;
-}
-
-/* push packets from the queue to the downstream demuxer */
-static void
-gst_rdt_manager_loop (GstPad * pad)
-{
-  GstRDTManager *rdtmanager;
-  GstRDTManagerSession *session;
-  GstBuffer *buffer;
-  GstFlowReturn result;
-
-  rdtmanager = GST_RDT_MANAGER (GST_PAD_PARENT (pad));
-
-  session = gst_pad_get_element_private (pad);
-
-  JBUF_LOCK_CHECK (session, flushing);
-  GST_DEBUG_OBJECT (rdtmanager, "Peeking item");
-  while (TRUE) {
-    /* always wait if we are blocked */
-    if (!session->blocked) {
-      /* if we have a packet, we can exit the loop and grab it */
-      if (rdt_jitter_buffer_num_packets (session->jbuf) > 0)
-        break;
-      /* no packets but we are EOS, do eos logic */
-      if (session->eos)
-        goto do_eos;
-    }
-    /* underrun, wait for packets or flushing now */
-    session->waiting = TRUE;
-    JBUF_WAIT_CHECK (session, flushing);
-    session->waiting = FALSE;
-  }
-
-  buffer = rdt_jitter_buffer_pop (session->jbuf);
-
-  GST_DEBUG_OBJECT (rdtmanager, "Got item %p", buffer);
-
-  if (session->discont) {
-    GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
-    session->discont = FALSE;
-  }
-
-  JBUF_UNLOCK (session);
-
-  result = gst_pad_push (session->recv_rtp_src, buffer);
-  if (result != GST_FLOW_OK)
-    goto pause;
-
-  return;
-
-  /* ERRORS */
-flushing:
-  {
-    GST_DEBUG_OBJECT (rdtmanager, "we are flushing");
-    gst_pad_pause_task (session->recv_rtp_src);
-    JBUF_UNLOCK (session);
-    return;
-  }
-do_eos:
-  {
-    /* store result, we are flushing now */
-    GST_DEBUG_OBJECT (rdtmanager, "We are EOS, pushing EOS downstream");
-    session->srcresult = GST_FLOW_EOS;
-    gst_pad_pause_task (session->recv_rtp_src);
-    gst_pad_push_event (session->recv_rtp_src, gst_event_new_eos ());
-    JBUF_UNLOCK (session);
-    return;
-  }
-pause:
-  {
-    GST_DEBUG_OBJECT (rdtmanager, "pausing task, reason %s",
-        gst_flow_get_name (result));
-
-    JBUF_LOCK (session);
-    /* store result */
-    session->srcresult = result;
-    /* we don't post errors or anything because upstream will do that for us
-     * when we pass the return value upstream. */
-    gst_pad_pause_task (session->recv_rtp_src);
-    JBUF_UNLOCK (session);
-    return;
-  }
-}
-
-static GstFlowReturn
-gst_rdt_manager_chain_rtcp (GstPad * pad, GstObject * parent,
-    GstBuffer * buffer)
-{
-  GstRDTManager *src;
-
-#ifdef HAVE_RTCP
-  gboolean valid;
-  GstRTCPPacket packet;
-  gboolean more;
-#endif
-
-  src = GST_RDT_MANAGER (parent);
-
-  GST_DEBUG_OBJECT (src, "got rtcp packet");
-
-#ifdef HAVE_RTCP
-  valid = gst_rtcp_buffer_validate (buffer);
-  if (!valid)
-    goto bad_packet;
-
-  /* position on first packet */
-  more = gst_rtcp_buffer_get_first_packet (buffer, &packet);
-  while (more) {
-    switch (gst_rtcp_packet_get_type (&packet)) {
-      case GST_RTCP_TYPE_SR:
-      {
-        guint32 ssrc, rtptime, packet_count, octet_count;
-        guint64 ntptime;
-        guint count, i;
-
-        gst_rtcp_packet_sr_get_sender_info (&packet, &ssrc, &ntptime, &rtptime,
-            &packet_count, &octet_count);
-
-        GST_DEBUG_OBJECT (src,
-            "got SR packet: SSRC %08x, NTP %" G_GUINT64_FORMAT
-            ", RTP %u, PC %u, OC %u", ssrc, ntptime, rtptime, packet_count,
-            octet_count);
-
-        count = gst_rtcp_packet_get_rb_count (&packet);
-        for (i = 0; i < count; i++) {
-          guint32 ssrc, exthighestseq, jitter, lsr, dlsr;
-          guint8 fractionlost;
-          gint32 packetslost;
-
-          gst_rtcp_packet_get_rb (&packet, i, &ssrc, &fractionlost,
-              &packetslost, &exthighestseq, &jitter, &lsr, &dlsr);
-
-          GST_DEBUG_OBJECT (src, "got RB packet %d: SSRC %08x, FL %u"
-              ", PL %u, HS %u, JITTER %u, LSR %u, DLSR %u", ssrc, fractionlost,
-              packetslost, exthighestseq, jitter, lsr, dlsr);
-        }
-        break;
-      }
-      case GST_RTCP_TYPE_RR:
-      {
-        guint32 ssrc;
-        guint count, i;
-
-        ssrc = gst_rtcp_packet_rr_get_ssrc (&packet);
-
-        GST_DEBUG_OBJECT (src, "got RR packet: SSRC %08x", ssrc);
-
-        count = gst_rtcp_packet_get_rb_count (&packet);
-        for (i = 0; i < count; i++) {
-          guint32 ssrc, exthighestseq, jitter, lsr, dlsr;
-          guint8 fractionlost;
-          gint32 packetslost;
-
-          gst_rtcp_packet_get_rb (&packet, i, &ssrc, &fractionlost,
-              &packetslost, &exthighestseq, &jitter, &lsr, &dlsr);
-
-          GST_DEBUG_OBJECT (src, "got RB packet %d: SSRC %08x, FL %u"
-              ", PL %u, HS %u, JITTER %u, LSR %u, DLSR %u", ssrc, fractionlost,
-              packetslost, exthighestseq, jitter, lsr, dlsr);
-        }
-        break;
-      }
-      case GST_RTCP_TYPE_SDES:
-      {
-        guint chunks, i, j;
-        gboolean more_chunks, more_items;
-
-        chunks = gst_rtcp_packet_sdes_get_chunk_count (&packet);
-        GST_DEBUG_OBJECT (src, "got SDES packet with %d chunks", chunks);
-
-        more_chunks = gst_rtcp_packet_sdes_first_chunk (&packet);
-        i = 0;
-        while (more_chunks) {
-          guint32 ssrc;
-
-          ssrc = gst_rtcp_packet_sdes_get_ssrc (&packet);
-
-          GST_DEBUG_OBJECT (src, "chunk %d, SSRC %08x", i, ssrc);
-
-          more_items = gst_rtcp_packet_sdes_first_item (&packet);
-          j = 0;
-          while (more_items) {
-            GstRTCPSDESType type;
-            guint8 len;
-            gchar *data;
-
-            gst_rtcp_packet_sdes_get_item (&packet, &type, &len, &data);
-
-            GST_DEBUG_OBJECT (src, "item %d, type %d, len %d, data %s", j,
-                type, len, data);
-
-            more_items = gst_rtcp_packet_sdes_next_item (&packet);
-            j++;
-          }
-          more_chunks = gst_rtcp_packet_sdes_next_chunk (&packet);
-          i++;
-        }
-        break;
-      }
-      case GST_RTCP_TYPE_BYE:
-      {
-        guint count, i;
-        gchar *reason;
-
-        reason = gst_rtcp_packet_bye_get_reason (&packet);
-        GST_DEBUG_OBJECT (src, "got BYE packet (reason: %s)",
-            GST_STR_NULL (reason));
-        g_free (reason);
-
-        count = gst_rtcp_packet_bye_get_ssrc_count (&packet);
-        for (i = 0; i < count; i++) {
-          guint32 ssrc;
-
-
-          ssrc = gst_rtcp_packet_bye_get_nth_ssrc (&packet, i);
-
-          GST_DEBUG_OBJECT (src, "SSRC: %08x", ssrc);
-        }
-        break;
-      }
-      case GST_RTCP_TYPE_APP:
-        GST_DEBUG_OBJECT (src, "got APP packet");
-        break;
-      default:
-        GST_WARNING_OBJECT (src, "got unknown RTCP packet");
-        break;
-    }
-    more = gst_rtcp_packet_move_to_next (&packet);
-  }
-  gst_buffer_unref (buffer);
-  return GST_FLOW_OK;
-
-bad_packet:
-  {
-    GST_WARNING_OBJECT (src, "got invalid RTCP packet");
-    return GST_FLOW_OK;
-  }
-#else
-  return GST_FLOW_OK;
-#endif
-}
-
-static void
-gst_rdt_manager_set_property (GObject * object, guint prop_id,
-    const GValue * value, GParamSpec * pspec)
-{
-  GstRDTManager *src;
-
-  src = GST_RDT_MANAGER (object);
-
-  switch (prop_id) {
-    case PROP_LATENCY:
-      src->latency = g_value_get_uint (value);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static void
-gst_rdt_manager_get_property (GObject * object, guint prop_id, GValue * value,
-    GParamSpec * pspec)
-{
-  GstRDTManager *src;
-
-  src = GST_RDT_MANAGER (object);
-
-  switch (prop_id) {
-    case PROP_LATENCY:
-      g_value_set_uint (value, src->latency);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-  }
-}
-
-static GstClock *
-gst_rdt_manager_provide_clock (GstElement * element)
-{
-  GstRDTManager *rdtmanager;
-
-  rdtmanager = GST_RDT_MANAGER (element);
-
-  return GST_CLOCK_CAST (gst_object_ref (rdtmanager->provided_clock));
-}
-
-static GstStateChangeReturn
-gst_rdt_manager_change_state (GstElement * element, GstStateChange transition)
-{
-  GstStateChangeReturn ret;
-
-  switch (transition) {
-    default:
-      break;
-  }
-
-  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_READY_TO_PAUSED:
-    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
-      /* we're NO_PREROLL when going to PAUSED */
-      ret = GST_STATE_CHANGE_NO_PREROLL;
-      break;
-    default:
-      break;
-  }
-
-  return ret;
-}
-
-/* Create a pad for receiving RTP for the session in @name
- */
-static GstPad *
-create_recv_rtp (GstRDTManager * rdtmanager, GstPadTemplate * templ,
-    const gchar * name)
-{
-  guint sessid;
-  GstRDTManagerSession *session;
-
-  /* first get the session number */
-  if (name == NULL || sscanf (name, "recv_rtp_sink_%u", &sessid) != 1)
-    goto no_name;
-
-  GST_DEBUG_OBJECT (rdtmanager, "finding session %d", sessid);
-
-  /* get or create session */
-  session = find_session_by_id (rdtmanager, sessid);
-  if (!session) {
-    GST_DEBUG_OBJECT (rdtmanager, "creating session %d", sessid);
-    /* create session now */
-    session = create_session (rdtmanager, sessid);
-    if (session == NULL)
-      goto create_error;
-  }
-  /* check if pad was requested */
-  if (session->recv_rtp_sink != NULL)
-    goto existed;
-
-  GST_DEBUG_OBJECT (rdtmanager, "getting RTP sink pad");
-
-  session->recv_rtp_sink = gst_pad_new_from_template (templ, name);
-  gst_pad_set_element_private (session->recv_rtp_sink, session);
-  gst_pad_set_event_function (session->recv_rtp_sink,
-      gst_rdt_manager_event_rdt);
-  gst_pad_set_chain_function (session->recv_rtp_sink,
-      gst_rdt_manager_chain_rdt);
-  gst_pad_set_active (session->recv_rtp_sink, TRUE);
-  gst_element_add_pad (GST_ELEMENT_CAST (rdtmanager), session->recv_rtp_sink);
-
-  return session->recv_rtp_sink;
-
-  /* ERRORS */
-no_name:
-  {
-    g_warning ("rdtmanager: invalid name given");
-    return NULL;
-  }
-create_error:
-  {
-    /* create_session already warned */
-    return NULL;
-  }
-existed:
-  {
-    g_warning ("rdtmanager: recv_rtp pad already requested for session %d",
-        sessid);
-    return NULL;
-  }
-}
-
-/* Create a pad for receiving RTCP for the session in @name
- */
-static GstPad *
-create_recv_rtcp (GstRDTManager * rdtmanager, GstPadTemplate * templ,
-    const gchar * name)
-{
-  guint sessid;
-  GstRDTManagerSession *session;
-
-  /* first get the session number */
-  if (name == NULL || sscanf (name, "recv_rtcp_sink_%u", &sessid) != 1)
-    goto no_name;
-
-  GST_DEBUG_OBJECT (rdtmanager, "finding session %d", sessid);
-
-  /* get the session, it must exist or we error */
-  session = find_session_by_id (rdtmanager, sessid);
-  if (!session)
-    goto no_session;
-
-  /* check if pad was requested */
-  if (session->recv_rtcp_sink != NULL)
-    goto existed;
-
-  GST_DEBUG_OBJECT (rdtmanager, "getting RTCP sink pad");
-
-  session->recv_rtcp_sink = gst_pad_new_from_template (templ, name);
-  gst_pad_set_element_private (session->recv_rtp_sink, session);
-  gst_pad_set_chain_function (session->recv_rtcp_sink,
-      gst_rdt_manager_chain_rtcp);
-  gst_pad_set_active (session->recv_rtcp_sink, TRUE);
-  gst_element_add_pad (GST_ELEMENT_CAST (rdtmanager), session->recv_rtcp_sink);
-
-  return session->recv_rtcp_sink;
-
-  /* ERRORS */
-no_name:
-  {
-    g_warning ("rdtmanager: invalid name given");
-    return NULL;
-  }
-no_session:
-  {
-    g_warning ("rdtmanager: no session with id %d", sessid);
-    return NULL;
-  }
-existed:
-  {
-    g_warning ("rdtmanager: recv_rtcp pad already requested for session %d",
-        sessid);
-    return NULL;
-  }
-}
-
-/* Create a pad for sending RTCP for the session in @name
- */
-static GstPad *
-create_rtcp (GstRDTManager * rdtmanager, GstPadTemplate * templ,
-    const gchar * name)
-{
-  guint sessid;
-  GstRDTManagerSession *session;
-
-  /* first get the session number */
-  if (name == NULL || sscanf (name, "rtcp_src_%u", &sessid) != 1)
-    goto no_name;
-
-  /* get or create session */
-  session = find_session_by_id (rdtmanager, sessid);
-  if (!session)
-    goto no_session;
-
-  /* check if pad was requested */
-  if (session->rtcp_src != NULL)
-    goto existed;
-
-  session->rtcp_src = gst_pad_new_from_template (templ, name);
-  gst_pad_set_active (session->rtcp_src, TRUE);
-  gst_element_add_pad (GST_ELEMENT_CAST (rdtmanager), session->rtcp_src);
-
-  return session->rtcp_src;
-
-  /* ERRORS */
-no_name:
-  {
-    g_warning ("rdtmanager: invalid name given");
-    return NULL;
-  }
-no_session:
-  {
-    g_warning ("rdtmanager: session with id %d does not exist", sessid);
-    return NULL;
-  }
-existed:
-  {
-    g_warning ("rdtmanager: rtcp_src pad already requested for session %d",
-        sessid);
-    return NULL;
-  }
-}
-
-/* 
- */
-static GstPad *
-gst_rdt_manager_request_new_pad (GstElement * element,
-    GstPadTemplate * templ, const gchar * name, const GstCaps * caps)
-{
-  GstRDTManager *rdtmanager;
-  GstElementClass *klass;
-  GstPad *result;
-
-  g_return_val_if_fail (templ != NULL, NULL);
-  g_return_val_if_fail (GST_IS_RDT_MANAGER (element), NULL);
-
-  rdtmanager = GST_RDT_MANAGER (element);
-  klass = GST_ELEMENT_GET_CLASS (element);
-
-  /* figure out the template */
-  if (templ == gst_element_class_get_pad_template (klass, "recv_rtp_sink_%u")) {
-    result = create_recv_rtp (rdtmanager, templ, name);
-  } else if (templ == gst_element_class_get_pad_template (klass,
-          "recv_rtcp_sink_%u")) {
-    result = create_recv_rtcp (rdtmanager, templ, name);
-  } else if (templ == gst_element_class_get_pad_template (klass, "rtcp_src_%u")) {
-    result = create_rtcp (rdtmanager, templ, name);
-  } else
-    goto wrong_template;
-
-  return result;
-
-  /* ERRORS */
-wrong_template:
-  {
-    g_warning ("rdtmanager: this is not our template");
-    return NULL;
-  }
-}
-
-static void
-gst_rdt_manager_release_pad (GstElement * element, GstPad * pad)
-{
-}
diff --git a/gst/realmedia/rdtmanager.h b/gst/realmedia/rdtmanager.h
deleted file mode 100644 (file)
index d7a60fd..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/* GStreamer
- * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.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.
- */
-/*
- * Unless otherwise indicated, Source Code is licensed under MIT license.
- * See further explanation attached in License Statement (distributed in the file
- * LICENSE).
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is furnished to do
- * so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-#ifndef __GST_RDT_MANAGER_H__
-#define __GST_RDT_MANAGER_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_RDT_MANAGER           (gst_rdt_manager_get_type())
-#define GST_IS_RDT_MANAGER(obj)        (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RDT_MANAGER))
-#define GST_IS_RDT_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RDT_MANAGER))
-#define GST_RDT_MANAGER(obj)           (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RDT_MANAGER, GstRDTManager))
-#define GST_RDT_MANAGER_CLASS(klass)   (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RDT_MANAGER, GstRDTManagerClass))
-
-typedef struct _GstRDTManager GstRDTManager;
-typedef struct _GstRDTManagerClass GstRDTManagerClass;
-typedef struct _GstRDTManagerSession GstRDTManagerSession;
-
-struct _GstRDTManager {
-  GstElement  element;
-
-  guint       latency;
-  GSList     *sessions;
-  GstClock   *provided_clock;
-};
-
-struct _GstRDTManagerClass {
-  GstElementClass parent_class;
-
-  /* get the caps for pt */
-  GstCaps* (*request_pt_map)    (GstRDTManager *rtpdec, guint session, guint pt);
-
-  void     (*clear_pt_map)      (GstRDTManager *rtpdec);
-
-  void     (*on_new_ssrc)       (GstRDTManager *rtpdec, guint session, guint32 ssrc);
-  void     (*on_ssrc_collision) (GstRDTManager *rtpdec, guint session, guint32 ssrc);
-  void     (*on_ssrc_validated) (GstRDTManager *rtpdec, guint session, guint32 ssrc);
-  void     (*on_ssrc_active)    (GstRDTManager *rtpdec, guint session, guint32 ssrc);
-  void     (*on_ssrc_sdes)      (GstRDTManager *rtpdec, guint session, guint32 ssrc);
-  void     (*on_bye_ssrc)       (GstRDTManager *rtpdec, guint session, guint32 ssrc);
-  void     (*on_bye_timeout)    (GstRDTManager *rtpdec, guint session, guint32 ssrc);
-  void     (*on_timeout)        (GstRDTManager *rtpdec, guint session, guint32 ssrc);
-  void     (*on_npt_stop)       (GstRDTManager *rtpdec, guint session, guint32 ssrc);
-};
-
-GType gst_rdt_manager_get_type(void);
-
-GST_ELEMENT_REGISTER_DECLARE (rdtmanager);
-
-G_END_DECLS
-
-#endif /* __GST_RDT_MANAGER_H__ */
diff --git a/gst/realmedia/realhash.c b/gst/realmedia/realhash.c
deleted file mode 100644 (file)
index 4a18189..0000000
+++ /dev/null
@@ -1,324 +0,0 @@
-/* GStreamer
- * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.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.
- */
-/* Element-Checklist-Version: 5 */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-#include <string.h>
-
-#include <gst/gst.h>
-
-#include "realhash.h"
-
-void rtsp_ext_real_calc_response_and_checksum (char *response,
-    char *chksum, char *challenge);
-
-/*
- * The following code has been copied from
- * xine-lib-1.1.1/src/input/libreal/real.c.
- */
-
-static const unsigned char xor_table[] = {
-  0x05, 0x18, 0x74, 0xd0, 0x0d, 0x09, 0x02, 0x53,
-  0xc0, 0x01, 0x05, 0x05, 0x67, 0x03, 0x19, 0x70,
-  0x08, 0x27, 0x66, 0x10, 0x10, 0x72, 0x08, 0x09,
-  0x63, 0x11, 0x03, 0x71, 0x08, 0x08, 0x70, 0x02,
-  0x10, 0x57, 0x05, 0x18, 0x54, 0x00, 0x00, 0x00
-};
-
-#define LE_32(x) GST_READ_UINT32_LE(x)
-#define BE_32C(x,y) GST_WRITE_UINT32_BE(x,y)
-#define LE_32C(x,y) GST_WRITE_UINT32_LE(x,y)
-
-static void
-hash (char *field, char *param)
-{
-  uint32_t a, b, c, d;
-
-  /* fill variables */
-  a = LE_32 (field);
-  b = LE_32 (field + 4);
-  c = LE_32 (field + 8);
-  d = LE_32 (field + 12);
-
-  a = ((b & c) | (~b & d)) + LE_32 ((param + 0x00)) + a - 0x28955B88;
-  a = ((a << 0x07) | (a >> 0x19)) + b;
-  d = ((a & b) | (~a & c)) + LE_32 ((param + 0x04)) + d - 0x173848AA;
-  d = ((d << 0x0c) | (d >> 0x14)) + a;
-  c = ((d & a) | (~d & b)) + LE_32 ((param + 0x08)) + c + 0x242070DB;
-  c = ((c << 0x11) | (c >> 0x0f)) + d;
-  b = ((c & d) | (~c & a)) + LE_32 ((param + 0x0c)) + b - 0x3E423112;
-  b = ((b << 0x16) | (b >> 0x0a)) + c;
-  a = ((b & c) | (~b & d)) + LE_32 ((param + 0x10)) + a - 0x0A83F051;
-  a = ((a << 0x07) | (a >> 0x19)) + b;
-  d = ((a & b) | (~a & c)) + LE_32 ((param + 0x14)) + d + 0x4787C62A;
-  d = ((d << 0x0c) | (d >> 0x14)) + a;
-  c = ((d & a) | (~d & b)) + LE_32 ((param + 0x18)) + c - 0x57CFB9ED;
-  c = ((c << 0x11) | (c >> 0x0f)) + d;
-  b = ((c & d) | (~c & a)) + LE_32 ((param + 0x1c)) + b - 0x02B96AFF;
-  b = ((b << 0x16) | (b >> 0x0a)) + c;
-  a = ((b & c) | (~b & d)) + LE_32 ((param + 0x20)) + a + 0x698098D8;
-  a = ((a << 0x07) | (a >> 0x19)) + b;
-  d = ((a & b) | (~a & c)) + LE_32 ((param + 0x24)) + d - 0x74BB0851;
-  d = ((d << 0x0c) | (d >> 0x14)) + a;
-  c = ((d & a) | (~d & b)) + LE_32 ((param + 0x28)) + c - 0x0000A44F;
-  c = ((c << 0x11) | (c >> 0x0f)) + d;
-  b = ((c & d) | (~c & a)) + LE_32 ((param + 0x2C)) + b - 0x76A32842;
-  b = ((b << 0x16) | (b >> 0x0a)) + c;
-  a = ((b & c) | (~b & d)) + LE_32 ((param + 0x30)) + a + 0x6B901122;
-  a = ((a << 0x07) | (a >> 0x19)) + b;
-  d = ((a & b) | (~a & c)) + LE_32 ((param + 0x34)) + d - 0x02678E6D;
-  d = ((d << 0x0c) | (d >> 0x14)) + a;
-  c = ((d & a) | (~d & b)) + LE_32 ((param + 0x38)) + c - 0x5986BC72;
-  c = ((c << 0x11) | (c >> 0x0f)) + d;
-  b = ((c & d) | (~c & a)) + LE_32 ((param + 0x3c)) + b + 0x49B40821;
-  b = ((b << 0x16) | (b >> 0x0a)) + c;
-
-  a = ((b & d) | (~d & c)) + LE_32 ((param + 0x04)) + a - 0x09E1DA9E;
-  a = ((a << 0x05) | (a >> 0x1b)) + b;
-  d = ((a & c) | (~c & b)) + LE_32 ((param + 0x18)) + d - 0x3FBF4CC0;
-  d = ((d << 0x09) | (d >> 0x17)) + a;
-  c = ((d & b) | (~b & a)) + LE_32 ((param + 0x2c)) + c + 0x265E5A51;
-  c = ((c << 0x0e) | (c >> 0x12)) + d;
-  b = ((c & a) | (~a & d)) + LE_32 ((param + 0x00)) + b - 0x16493856;
-  b = ((b << 0x14) | (b >> 0x0c)) + c;
-  a = ((b & d) | (~d & c)) + LE_32 ((param + 0x14)) + a - 0x29D0EFA3;
-  a = ((a << 0x05) | (a >> 0x1b)) + b;
-  d = ((a & c) | (~c & b)) + LE_32 ((param + 0x28)) + d + 0x02441453;
-  d = ((d << 0x09) | (d >> 0x17)) + a;
-  c = ((d & b) | (~b & a)) + LE_32 ((param + 0x3c)) + c - 0x275E197F;
-  c = ((c << 0x0e) | (c >> 0x12)) + d;
-  b = ((c & a) | (~a & d)) + LE_32 ((param + 0x10)) + b - 0x182C0438;
-  b = ((b << 0x14) | (b >> 0x0c)) + c;
-  a = ((b & d) | (~d & c)) + LE_32 ((param + 0x24)) + a + 0x21E1CDE6;
-  a = ((a << 0x05) | (a >> 0x1b)) + b;
-  d = ((a & c) | (~c & b)) + LE_32 ((param + 0x38)) + d - 0x3CC8F82A;
-  d = ((d << 0x09) | (d >> 0x17)) + a;
-  c = ((d & b) | (~b & a)) + LE_32 ((param + 0x0c)) + c - 0x0B2AF279;
-  c = ((c << 0x0e) | (c >> 0x12)) + d;
-  b = ((c & a) | (~a & d)) + LE_32 ((param + 0x20)) + b + 0x455A14ED;
-  b = ((b << 0x14) | (b >> 0x0c)) + c;
-  a = ((b & d) | (~d & c)) + LE_32 ((param + 0x34)) + a - 0x561C16FB;
-  a = ((a << 0x05) | (a >> 0x1b)) + b;
-  d = ((a & c) | (~c & b)) + LE_32 ((param + 0x08)) + d - 0x03105C08;
-  d = ((d << 0x09) | (d >> 0x17)) + a;
-  c = ((d & b) | (~b & a)) + LE_32 ((param + 0x1c)) + c + 0x676F02D9;
-  c = ((c << 0x0e) | (c >> 0x12)) + d;
-  b = ((c & a) | (~a & d)) + LE_32 ((param + 0x30)) + b - 0x72D5B376;
-  b = ((b << 0x14) | (b >> 0x0c)) + c;
-
-  a = (b ^ c ^ d) + LE_32 ((param + 0x14)) + a - 0x0005C6BE;
-  a = ((a << 0x04) | (a >> 0x1c)) + b;
-  d = (a ^ b ^ c) + LE_32 ((param + 0x20)) + d - 0x788E097F;
-  d = ((d << 0x0b) | (d >> 0x15)) + a;
-  c = (d ^ a ^ b) + LE_32 ((param + 0x2c)) + c + 0x6D9D6122;
-  c = ((c << 0x10) | (c >> 0x10)) + d;
-  b = (c ^ d ^ a) + LE_32 ((param + 0x38)) + b - 0x021AC7F4;
-  b = ((b << 0x17) | (b >> 0x09)) + c;
-  a = (b ^ c ^ d) + LE_32 ((param + 0x04)) + a - 0x5B4115BC;
-  a = ((a << 0x04) | (a >> 0x1c)) + b;
-  d = (a ^ b ^ c) + LE_32 ((param + 0x10)) + d + 0x4BDECFA9;
-  d = ((d << 0x0b) | (d >> 0x15)) + a;
-  c = (d ^ a ^ b) + LE_32 ((param + 0x1c)) + c - 0x0944B4A0;
-  c = ((c << 0x10) | (c >> 0x10)) + d;
-  b = (c ^ d ^ a) + LE_32 ((param + 0x28)) + b - 0x41404390;
-  b = ((b << 0x17) | (b >> 0x09)) + c;
-  a = (b ^ c ^ d) + LE_32 ((param + 0x34)) + a + 0x289B7EC6;
-  a = ((a << 0x04) | (a >> 0x1c)) + b;
-  d = (a ^ b ^ c) + LE_32 ((param + 0x00)) + d - 0x155ED806;
-  d = ((d << 0x0b) | (d >> 0x15)) + a;
-  c = (d ^ a ^ b) + LE_32 ((param + 0x0c)) + c - 0x2B10CF7B;
-  c = ((c << 0x10) | (c >> 0x10)) + d;
-  b = (c ^ d ^ a) + LE_32 ((param + 0x18)) + b + 0x04881D05;
-  b = ((b << 0x17) | (b >> 0x09)) + c;
-  a = (b ^ c ^ d) + LE_32 ((param + 0x24)) + a - 0x262B2FC7;
-  a = ((a << 0x04) | (a >> 0x1c)) + b;
-  d = (a ^ b ^ c) + LE_32 ((param + 0x30)) + d - 0x1924661B;
-  d = ((d << 0x0b) | (d >> 0x15)) + a;
-  c = (d ^ a ^ b) + LE_32 ((param + 0x3c)) + c + 0x1fa27cf8;
-  c = ((c << 0x10) | (c >> 0x10)) + d;
-  b = (c ^ d ^ a) + LE_32 ((param + 0x08)) + b - 0x3B53A99B;
-  b = ((b << 0x17) | (b >> 0x09)) + c;
-
-  a = ((~d | b) ^ c) + LE_32 ((param + 0x00)) + a - 0x0BD6DDBC;
-  a = ((a << 0x06) | (a >> 0x1a)) + b;
-  d = ((~c | a) ^ b) + LE_32 ((param + 0x1c)) + d + 0x432AFF97;
-  d = ((d << 0x0a) | (d >> 0x16)) + a;
-  c = ((~b | d) ^ a) + LE_32 ((param + 0x38)) + c - 0x546BDC59;
-  c = ((c << 0x0f) | (c >> 0x11)) + d;
-  b = ((~a | c) ^ d) + LE_32 ((param + 0x14)) + b - 0x036C5FC7;
-  b = ((b << 0x15) | (b >> 0x0b)) + c;
-  a = ((~d | b) ^ c) + LE_32 ((param + 0x30)) + a + 0x655B59C3;
-  a = ((a << 0x06) | (a >> 0x1a)) + b;
-  d = ((~c | a) ^ b) + LE_32 ((param + 0x0C)) + d - 0x70F3336E;
-  d = ((d << 0x0a) | (d >> 0x16)) + a;
-  c = ((~b | d) ^ a) + LE_32 ((param + 0x28)) + c - 0x00100B83;
-  c = ((c << 0x0f) | (c >> 0x11)) + d;
-  b = ((~a | c) ^ d) + LE_32 ((param + 0x04)) + b - 0x7A7BA22F;
-  b = ((b << 0x15) | (b >> 0x0b)) + c;
-  a = ((~d | b) ^ c) + LE_32 ((param + 0x20)) + a + 0x6FA87E4F;
-  a = ((a << 0x06) | (a >> 0x1a)) + b;
-  d = ((~c | a) ^ b) + LE_32 ((param + 0x3c)) + d - 0x01D31920;
-  d = ((d << 0x0a) | (d >> 0x16)) + a;
-  c = ((~b | d) ^ a) + LE_32 ((param + 0x18)) + c - 0x5CFEBCEC;
-  c = ((c << 0x0f) | (c >> 0x11)) + d;
-  b = ((~a | c) ^ d) + LE_32 ((param + 0x34)) + b + 0x4E0811A1;
-  b = ((b << 0x15) | (b >> 0x0b)) + c;
-  a = ((~d | b) ^ c) + LE_32 ((param + 0x10)) + a - 0x08AC817E;
-  a = ((a << 0x06) | (a >> 0x1a)) + b;
-  d = ((~c | a) ^ b) + LE_32 ((param + 0x2c)) + d - 0x42C50DCB;
-  d = ((d << 0x0a) | (d >> 0x16)) + a;
-  c = ((~b | d) ^ a) + LE_32 ((param + 0x08)) + c + 0x2AD7D2BB;
-  c = ((c << 0x0f) | (c >> 0x11)) + d;
-  b = ((~a | c) ^ d) + LE_32 ((param + 0x24)) + b - 0x14792C6F;
-  b = ((b << 0x15) | (b >> 0x0b)) + c;
-
-  a += LE_32 (field);
-  b += LE_32 (field + 4);
-  c += LE_32 (field + 8);
-  d += LE_32 (field + 12);
-
-  LE_32C (field, a);
-  LE_32C (field + 4, b);
-  LE_32C (field + 8, c);
-  LE_32C (field + 12, d);
-}
-
-static void
-call_hash (char *key, char *challenge, int len)
-{
-  uint8_t *ptr1, *ptr2;
-  uint32_t a, b, c, d, tmp;
-
-  ptr1 = (uint8_t *) (key + 16);
-  ptr2 = (uint8_t *) (key + 20);
-
-  a = LE_32 (ptr1);
-  b = (a >> 3) & 0x3f;
-  a += len * 8;
-  LE_32C (ptr1, a);
-
-  if (a < (len << 3))
-    ptr2 += 4;
-
-  tmp = LE_32 (ptr2) + (len >> 0x1d);
-  LE_32C (ptr2, tmp);
-  a = 64 - b;
-  c = 0;
-  if (a <= len) {
-
-    memcpy (key + b + 24, challenge, a);
-    hash (key, key + 24);
-    c = a;
-    d = c + 0x3f;
-
-    while (d < len) {
-      hash (key, challenge + d - 0x3f);
-      d += 64;
-      c += 64;
-    }
-    b = 0;
-  }
-
-  memcpy (key + b + 24, challenge + c, len - c);
-}
-
-void
-gst_rtsp_ext_real_calc_response_and_checksum (char *response, char *chksum,
-    char *challenge)
-{
-  int ch_len, table_len, resp_len;
-  int i;
-  char *ptr;
-  char buf[128];
-  char field[128];
-  char zres[20];
-  char buf1[128];
-  char buf2[128];
-
-  /* initialize return values */
-  memset (response, 0, 64);
-  memset (chksum, 0, 34);
-
-  /* initialize buffer */
-  memset (buf, 0, 128);
-  ptr = buf;
-  BE_32C (ptr, 0xa1e9149d);
-  ptr += 4;
-  BE_32C (ptr, 0x0e6b3b59);
-  ptr += 4;
-
-  if ((ch_len = MIN (strlen (challenge), 56)) == 40) {
-    challenge[32] = 0;
-    ch_len = 32;
-  }
-  memcpy (ptr, challenge, ch_len);
-
-  /* xor challenge bytewise with xor_table */
-  table_len = MIN (strlen ((char *) xor_table), 56);
-  for (i = 0; i < table_len; i++)
-    ptr[i] = ptr[i] ^ xor_table[i];
-
-  /* initialize our field */
-  BE_32C (field, 0x01234567);
-  BE_32C (field + 4, 0x89ABCDEF);
-  BE_32C (field + 8, 0xFEDCBA98);
-  BE_32C (field + 12, 0x76543210);
-  BE_32C (field + 16, 0x00000000);
-  BE_32C (field + 20, 0x00000000);
-
-  /* calculate response */
-  call_hash (field, buf, 64);
-  memset (buf1, 0, 64);
-  *buf1 = (char) 128;
-  memcpy (buf2, field + 16, 8);
-  i = (LE_32 ((buf2)) >> 3) & 0x3f;
-  if (i < 56)
-    i = 56 - i;
-  else
-    i = 120 - i;
-  call_hash (field, buf1, i);
-  call_hash (field, buf2, 8);
-  memcpy (zres, field, 16);
-
-  /* convert zres to ascii string */
-  for (i = 0; i < 16; i++) {
-    char a, b;
-
-    a = (zres[i] >> 4) & 15;
-    b = zres[i] & 15;
-
-    response[i * 2] = ((a < 10) ? (a + 48) : (a + 87)) & 255;
-    response[i * 2 + 1] = ((b < 10) ? (b + 48) : (b + 87)) & 255;
-  }
-
-  /* add tail */
-  resp_len = strlen (response);
-  strcpy (&response[resp_len], "01d0a8e3");
-
-  /* calculate checksum */
-  for (i = 0; i < resp_len / 4; i++)
-    chksum[i] = response[i * 4];
-}
diff --git a/gst/realmedia/realhash.h b/gst/realmedia/realhash.h
deleted file mode 100644 (file)
index 40b6500..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/* GStreamer
- * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.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_RTSP_HASH_H__
-#define __GST_RTSP_HASH_H__
-
-G_BEGIN_DECLS
-
-void
-gst_rtsp_ext_real_calc_response_and_checksum (char *response, char *chksum,
-    char *challenge);
-
-G_END_DECLS
-
-#endif /* __GST_RTSP_HASH_H__ */
diff --git a/gst/realmedia/realmedia.c b/gst/realmedia/realmedia.c
deleted file mode 100644 (file)
index 71749f6..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/* GStreamer
- * Copyright (C) <2009> Wim Taymans <wim.taymans@gmail.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 "rmdemux.h"
-#include "rademux.h"
-#include "rdtdepay.h"
-#include "rdtmanager.h"
-#include "rtspreal.h"
-#include "pnmsrc.h"
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  gboolean ret = FALSE;
-
-  ret |= GST_ELEMENT_REGISTER (rmdemux, plugin);
-  ret |= GST_ELEMENT_REGISTER (rademux, plugin);
-  ret |= GST_ELEMENT_REGISTER (rdtdepay, plugin);
-  ret |= GST_ELEMENT_REGISTER (rdtmanager, plugin);
-  ret |= GST_ELEMENT_REGISTER (rtspreal, plugin);
-  ret |= GST_ELEMENT_REGISTER (pnmsrc, plugin);
-
-  return ret;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    realmedia,
-    "RealMedia support plugins",
-    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
diff --git a/gst/realmedia/rmdemux.c b/gst/realmedia/rmdemux.c
deleted file mode 100644 (file)
index 1873cc1..0000000
+++ /dev/null
@@ -1,2672 +0,0 @@
-/* GStreamer RealMedia demuxer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) <2003> David A. Schleef <ds@schleef.org>
- * Copyright (C) <2004> Stephane Loeuillet <gstreamer@leroutier.net>
- * Copyright (C) <2005> Owen Fraser-Green <owen@discobabe.net>
- * Copyright (C) <2005> Michael Smith <fluendo.com>
- * Copyright (C) <2006> Wim Taymans <wim@fluendo.com>
- * Copyright (C) <2006> Tim-Philipp Müller <tim centricular net>
- * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.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 "rmdemux.h"
-#include "rmutils.h"
-
-#include <string.h>
-#include <ctype.h>
-
-#define RMDEMUX_GUINT32_GET(a)  GST_READ_UINT32_BE(a)
-#define RMDEMUX_GUINT16_GET(a)  GST_READ_UINT16_BE(a)
-#define RMDEMUX_FOURCC_GET(a)   GST_READ_UINT32_LE(a)
-#define HEADER_SIZE 10
-#define DATA_SIZE 8
-
-#define MAX_FRAGS 256
-
-static const guint8 sipr_subpk_size[4] = { 29, 19, 37, 20 };
-
-typedef struct _GstRMDemuxIndex GstRMDemuxIndex;
-
-struct _GstRMDemuxStream
-{
-  guint32 subtype;
-  guint32 fourcc;
-  guint32 subformat;
-  guint32 format;
-
-  int id;
-  GstPad *pad;
-  gboolean discont;
-  int timescale;
-
-  int sample_index;
-  GstRMDemuxIndex *index;
-  int index_length;
-  gint framerate_numerator;
-  gint framerate_denominator;
-  guint32 seek_offset;
-
-  guint16 width;
-  guint16 height;
-  guint16 flavor;
-  guint16 rate;                 /* samplerate         */
-  guint16 n_channels;           /* channels           */
-  guint16 sample_width;         /* bits_per_sample    */
-  guint16 leaf_size;            /* subpacket_size     */
-  guint32 packet_size;          /* coded_frame_size   */
-  guint16 version;
-  guint32 extra_data_size;      /* codec_data_length  */
-  guint8 *extra_data;           /* extras             */
-  guint32 bitrate;
-
-  gboolean needs_descrambling;
-  guint subpackets_needed;      /* subpackets needed for descrambling    */
-  GPtrArray *subpackets;        /* array containing subpacket GstBuffers */
-
-  /* Variables needed for fixing timestamps. */
-  GstClockTime next_ts, last_ts;
-  guint16 next_seq, last_seq;
-
-  gint frag_seqnum;
-  gint frag_subseq;
-  guint frag_length;
-  guint frag_current;
-  guint frag_count;
-  guint frag_offset[MAX_FRAGS];
-  GstAdapter *adapter;
-
-  GstTagList *pending_tags;
-};
-
-struct _GstRMDemuxIndex
-{
-  guint32 offset;
-  GstClockTime timestamp;
-};
-
-static GstStaticPadTemplate gst_rmdemux_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("application/vnd.rn-realmedia")
-    );
-
-static GstStaticPadTemplate gst_rmdemux_videosrc_template =
-GST_STATIC_PAD_TEMPLATE ("video_%u",
-    GST_PAD_SRC,
-    GST_PAD_SOMETIMES,
-    GST_STATIC_CAPS_ANY);
-
-static GstStaticPadTemplate gst_rmdemux_audiosrc_template =
-GST_STATIC_PAD_TEMPLATE ("audio_%u",
-    GST_PAD_SRC,
-    GST_PAD_SOMETIMES,
-    GST_STATIC_CAPS_ANY);
-
-GST_DEBUG_CATEGORY_STATIC (rmdemux_debug);
-#define GST_CAT_DEFAULT rmdemux_debug
-
-static GstElementClass *parent_class = NULL;
-
-static void gst_rmdemux_class_init (GstRMDemuxClass * klass);
-static void gst_rmdemux_base_init (GstRMDemuxClass * klass);
-static void gst_rmdemux_init (GstRMDemux * rmdemux);
-static void gst_rmdemux_finalize (GObject * object);
-static GstStateChangeReturn gst_rmdemux_change_state (GstElement * element,
-    GstStateChange transition);
-static GstFlowReturn gst_rmdemux_chain (GstPad * pad, GstObject * parent,
-    GstBuffer * buffer);
-static void gst_rmdemux_loop (GstPad * pad);
-static gboolean gst_rmdemux_sink_activate (GstPad * sinkpad,
-    GstObject * parent);
-static gboolean gst_rmdemux_sink_activate_mode (GstPad * sinkpad,
-    GstObject * parent, GstPadMode mode, gboolean active);
-static gboolean gst_rmdemux_sink_event (GstPad * pad, GstObject * parent,
-    GstEvent * event);
-static gboolean gst_rmdemux_src_event (GstPad * pad, GstObject * parent,
-    GstEvent * event);
-static void gst_rmdemux_send_event (GstRMDemux * rmdemux, GstEvent * event);
-static gboolean gst_rmdemux_src_query (GstPad * pad, GstObject * parent,
-    GstQuery * query);
-static gboolean gst_rmdemux_perform_seek (GstRMDemux * rmdemux,
-    GstEvent * event);
-
-static void gst_rmdemux_parse__rmf (GstRMDemux * rmdemux, const guint8 * data,
-    int length);
-static void gst_rmdemux_parse_prop (GstRMDemux * rmdemux, const guint8 * data,
-    int length);
-static void gst_rmdemux_parse_mdpr (GstRMDemux * rmdemux,
-    const guint8 * data, int length);
-static guint gst_rmdemux_parse_indx (GstRMDemux * rmdemux, const guint8 * data,
-    int length);
-static void gst_rmdemux_parse_data (GstRMDemux * rmdemux, const guint8 * data,
-    int length);
-static void gst_rmdemux_parse_cont (GstRMDemux * rmdemux, const guint8 * data,
-    int length);
-static GstFlowReturn gst_rmdemux_parse_packet (GstRMDemux * rmdemux,
-    GstBuffer * in, guint16 version);
-static void gst_rmdemux_parse_indx_data (GstRMDemux * rmdemux,
-    const guint8 * data, int length);
-static void gst_rmdemux_stream_clear_cached_subpackets (GstRMDemux * rmdemux,
-    GstRMDemuxStream * stream);
-static GstRMDemuxStream *gst_rmdemux_get_stream_by_id (GstRMDemux * rmdemux,
-    int id);
-
-static GType
-gst_rmdemux_get_type (void)
-{
-  static GType rmdemux_type = 0;
-
-  if (!rmdemux_type) {
-    static const GTypeInfo rmdemux_info = {
-      sizeof (GstRMDemuxClass),
-      (GBaseInitFunc) gst_rmdemux_base_init, NULL,
-      (GClassInitFunc) gst_rmdemux_class_init,
-      NULL, NULL, sizeof (GstRMDemux), 0,
-      (GInstanceInitFunc) gst_rmdemux_init,
-    };
-
-    rmdemux_type =
-        g_type_register_static (GST_TYPE_ELEMENT, "GstRMDemux", &rmdemux_info,
-        0);
-  }
-  return rmdemux_type;
-}
-
-GST_ELEMENT_REGISTER_DEFINE (rmdemux, "rmdemux",
-    GST_RANK_PRIMARY, GST_TYPE_RMDEMUX);
-
-static void
-gst_rmdemux_base_init (GstRMDemuxClass * klass)
-{
-  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
-  gst_element_class_add_static_pad_template (element_class,
-      &gst_rmdemux_sink_template);
-  gst_element_class_add_static_pad_template (element_class,
-      &gst_rmdemux_videosrc_template);
-  gst_element_class_add_static_pad_template (element_class,
-      &gst_rmdemux_audiosrc_template);
-  gst_element_class_set_static_metadata (element_class, "RealMedia Demuxer",
-      "Codec/Demuxer",
-      "Demultiplex a RealMedia file into audio and video streams",
-      "David Schleef <ds@schleef.org>");
-}
-
-static void
-gst_rmdemux_class_init (GstRMDemuxClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_rmdemux_change_state);
-
-  GST_DEBUG_CATEGORY_INIT (rmdemux_debug, "rmdemux",
-      0, "Demuxer for Realmedia streams");
-
-  gobject_class->finalize = gst_rmdemux_finalize;
-}
-
-static void
-gst_rmdemux_finalize (GObject * object)
-{
-  GstRMDemux *rmdemux = GST_RMDEMUX (object);
-
-  if (rmdemux->adapter) {
-    g_object_unref (rmdemux->adapter);
-    rmdemux->adapter = NULL;
-  }
-  if (rmdemux->flowcombiner) {
-    gst_flow_combiner_free (rmdemux->flowcombiner);
-    rmdemux->flowcombiner = NULL;
-  }
-
-  GST_CALL_PARENT (G_OBJECT_CLASS, finalize, (object));
-}
-
-static void
-gst_rmdemux_init (GstRMDemux * rmdemux)
-{
-  rmdemux->sinkpad =
-      gst_pad_new_from_static_template (&gst_rmdemux_sink_template, "sink");
-  gst_pad_set_event_function (rmdemux->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_rmdemux_sink_event));
-  gst_pad_set_chain_function (rmdemux->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_rmdemux_chain));
-  gst_pad_set_activate_function (rmdemux->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_rmdemux_sink_activate));
-  gst_pad_set_activatemode_function (rmdemux->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_rmdemux_sink_activate_mode));
-
-  gst_element_add_pad (GST_ELEMENT (rmdemux), rmdemux->sinkpad);
-
-  rmdemux->adapter = gst_adapter_new ();
-  rmdemux->first_ts = GST_CLOCK_TIME_NONE;
-  rmdemux->base_ts = GST_CLOCK_TIME_NONE;
-  rmdemux->need_newsegment = TRUE;
-  rmdemux->have_group_id = FALSE;
-  rmdemux->group_id = G_MAXUINT;
-  rmdemux->flowcombiner = gst_flow_combiner_new ();
-  rmdemux->seek_seqnum = GST_SEQNUM_INVALID;
-
-  gst_rm_utils_run_tests ();
-}
-
-static gboolean
-gst_rmdemux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
-  gboolean ret;
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_SEGMENT:
-      gst_event_unref (event);
-      ret = TRUE;
-      break;
-    default:
-      ret = gst_pad_event_default (pad, parent, event);
-      break;
-  }
-  return ret;
-}
-
-static gboolean
-gst_rmdemux_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
-  gboolean ret = TRUE;
-
-  GstRMDemux *rmdemux = GST_RMDEMUX (parent);
-
-  GST_LOG_OBJECT (rmdemux, "handling src event");
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_SEEK:
-    {
-      gboolean running;
-      guint32 seqnum;
-
-      GST_LOG_OBJECT (rmdemux, "Event on src: SEEK");
-
-      seqnum = gst_event_get_seqnum (event);
-      if (seqnum == rmdemux->seek_seqnum) {
-        GST_LOG_OBJECT (pad,
-            "Drop duplicated SEEK event seqnum %" G_GUINT32_FORMAT, seqnum);
-        gst_event_unref (event);
-        break;
-      }
-
-      /* can't seek if we are not seekable, FIXME could pass the
-       * seek query upstream after converting it to bytes using
-       * the average bitrate of the stream. */
-      if (!rmdemux->seekable) {
-        ret = FALSE;
-        GST_DEBUG ("seek on non seekable stream");
-        goto done_unref;
-      }
-
-      GST_OBJECT_LOCK (rmdemux);
-      /* check if we can do the seek now */
-      running = rmdemux->running;
-      GST_OBJECT_UNLOCK (rmdemux);
-
-      /* now do the seek */
-      if (running) {
-        ret = gst_rmdemux_perform_seek (rmdemux, event);
-      } else
-        ret = TRUE;
-
-      gst_event_unref (event);
-      break;
-    }
-    default:
-      GST_LOG_OBJECT (rmdemux, "Event on src: type=%d", GST_EVENT_TYPE (event));
-      ret = gst_pad_event_default (pad, parent, event);
-      break;
-  }
-
-  return ret;
-
-done_unref:
-  GST_DEBUG ("error handling event");
-  gst_event_unref (event);
-  return ret;
-}
-
-/* Validate that this looks like a reasonable point to seek to */
-static gboolean
-gst_rmdemux_validate_offset (GstRMDemux * rmdemux)
-{
-  GstBuffer *buffer;
-  GstFlowReturn flowret;
-  guint16 version, length;
-  gboolean ret = TRUE;
-  GstMapInfo map;
-
-  buffer = NULL;
-  flowret = gst_pad_pull_range (rmdemux->sinkpad, rmdemux->offset, 4, &buffer);
-
-  if (flowret != GST_FLOW_OK) {
-    GST_DEBUG_OBJECT (rmdemux, "Failed to pull data at offset %d",
-        rmdemux->offset);
-    return FALSE;
-  }
-  /* TODO: Can we also be seeking to a 'DATA' chunk header? Check this.
-   * Also, for the case we currently handle, can we check any more? It's pretty
-   * sucky to not be validating a little more heavily than this... */
-  /* This should now be the start of a data packet header. That begins with
-   * a 2-byte 'version' field, which has to be 0 or 1, then a length. I'm not
-   * certain what values are valid for length, but it must always be at least
-   * 4 bytes, and we can check that it won't take us past our known total size
-   */
-
-  gst_buffer_map (buffer, &map, GST_MAP_READ);
-  version = RMDEMUX_GUINT16_GET (map.data);
-  if (version != 0 && version != 1) {
-    GST_DEBUG_OBJECT (rmdemux, "Expected version 0 or 1, got %d",
-        (int) version);
-    ret = FALSE;
-  }
-
-  length = RMDEMUX_GUINT16_GET (map.data + 2);
-  /* TODO: Also check against total stream length */
-  if (length < 4) {
-    GST_DEBUG_OBJECT (rmdemux, "Expected length >= 4, got %d", (int) length);
-    ret = FALSE;
-  }
-  gst_buffer_unmap (buffer, &map);
-
-  if (ret) {
-    rmdemux->offset += 4;
-    gst_adapter_clear (rmdemux->adapter);
-    gst_adapter_push (rmdemux->adapter, buffer);
-  } else {
-    GST_WARNING_OBJECT (rmdemux, "Failed to validate seek offset at %d",
-        rmdemux->offset);
-    gst_buffer_unref (buffer);
-  }
-
-  return ret;
-}
-
-static gboolean
-find_seek_offset_bytes (GstRMDemux * rmdemux, guint target)
-{
-  int i;
-  GSList *cur;
-  gboolean ret = FALSE;
-
-  for (cur = rmdemux->streams; cur; cur = cur->next) {
-    GstRMDemuxStream *stream = cur->data;
-
-    /* Search backwards through this stream's index until we find the first
-     * timestamp before our target time */
-    for (i = stream->index_length - 1; i >= 0; i--) {
-      if (stream->index[i].offset <= target) {
-        /* Set the seek_offset for the stream so we don't bother parsing it
-         * until we've passed that point */
-        stream->seek_offset = stream->index[i].offset;
-        rmdemux->offset = stream->index[i].offset;
-        ret = TRUE;
-        break;
-      }
-    }
-  }
-  return ret;
-}
-
-static gboolean
-find_seek_offset_time (GstRMDemux * rmdemux, GstClockTime time)
-{
-  int i, n_stream;
-  gboolean ret = FALSE;
-  GSList *cur;
-  GstClockTime earliest = GST_CLOCK_TIME_NONE;
-
-  n_stream = 0;
-  for (cur = rmdemux->streams; cur; cur = cur->next, n_stream++) {
-    GstRMDemuxStream *stream = cur->data;
-
-    /* Search backwards through this stream's index until we find the first
-     * timestamp before our target time */
-    for (i = stream->index_length - 1; i >= 0; i--) {
-      if (stream->index[i].timestamp <= time) {
-        /* Set the seek_offset for the stream so we don't bother parsing it
-         * until we've passed that point */
-        stream->seek_offset = stream->index[i].offset;
-
-        /* If it's also the earliest timestamp we've seen of all streams, then
-         * that's our target!
-         */
-        if (earliest == GST_CLOCK_TIME_NONE ||
-            stream->index[i].timestamp < earliest) {
-          earliest = stream->index[i].timestamp;
-          rmdemux->offset = stream->index[i].offset;
-          GST_DEBUG_OBJECT (rmdemux,
-              "We're looking for %" GST_TIME_FORMAT
-              " and we found that stream %d has the latest index at %"
-              GST_TIME_FORMAT, GST_TIME_ARGS (rmdemux->segment.start), n_stream,
-              GST_TIME_ARGS (earliest));
-        }
-
-        ret = TRUE;
-
-        break;
-      }
-    }
-    stream->discont = TRUE;
-  }
-  return ret;
-}
-
-static gboolean
-gst_rmdemux_perform_seek (GstRMDemux * rmdemux, GstEvent * event)
-{
-  gboolean validated;
-  gboolean ret = TRUE;
-  gboolean flush;
-  GstFormat format;
-  gdouble rate;
-  GstSeekFlags flags;
-  GstSeekType cur_type, stop_type;
-  gint64 cur, stop;
-  gboolean update;
-  guint32 seqnum = GST_SEQNUM_INVALID;
-  GstEvent *fl_event;
-
-  if (event) {
-    GST_DEBUG_OBJECT (rmdemux, "seek with event");
-
-    seqnum = gst_event_get_seqnum (event);
-    gst_event_parse_seek (event, &rate, &format, &flags,
-        &cur_type, &cur, &stop_type, &stop);
-
-    /* we can only seek on time */
-    if (format != GST_FORMAT_TIME) {
-      GST_DEBUG_OBJECT (rmdemux, "can only seek on TIME");
-      goto error;
-    }
-    /* cannot yet do backwards playback */
-    if (rate <= 0.0) {
-      GST_DEBUG_OBJECT (rmdemux, "can only seek with positive rate, not %lf",
-          rate);
-      goto error;
-    }
-  } else {
-    GST_DEBUG_OBJECT (rmdemux, "seek without event");
-
-    flags = 0;
-    rate = 1.0;
-  }
-
-  GST_DEBUG_OBJECT (rmdemux, "seek, rate %g", rate);
-
-  flush = flags & GST_SEEK_FLAG_FLUSH;
-
-  /* first step is to unlock the streaming thread if it is
-   * blocked in a chain call, we do this by starting the flush. */
-  if (flush) {
-    fl_event = gst_event_new_flush_start ();
-    if (seqnum != GST_SEQNUM_INVALID)
-      gst_event_set_seqnum (fl_event, seqnum);
-    gst_pad_push_event (rmdemux->sinkpad, fl_event);
-
-    fl_event = gst_event_new_flush_start ();
-    if (seqnum != GST_SEQNUM_INVALID)
-      gst_event_set_seqnum (fl_event, seqnum);
-    gst_rmdemux_send_event (rmdemux, fl_event);
-  } else {
-    gst_pad_pause_task (rmdemux->sinkpad);
-  }
-
-  GST_LOG_OBJECT (rmdemux, "Done starting flushes");
-
-  /* now grab the stream lock so that streaming cannot continue, for
-   * non flushing seeks when the element is in PAUSED this could block
-   * forever. */
-  GST_PAD_STREAM_LOCK (rmdemux->sinkpad);
-
-  GST_LOG_OBJECT (rmdemux, "Took streamlock");
-
-  if (event) {
-    if (!gst_segment_do_seek (&rmdemux->segment, rate, format, flags,
-            cur_type, cur, stop_type, stop, &update)) {
-      ret = FALSE;
-      goto done;
-    }
-
-    rmdemux->seek_seqnum = seqnum;
-  }
-
-  GST_DEBUG_OBJECT (rmdemux, "segment positions set to %" GST_TIME_FORMAT "-%"
-      GST_TIME_FORMAT, GST_TIME_ARGS (rmdemux->segment.start),
-      GST_TIME_ARGS (rmdemux->segment.stop));
-
-  /* we need to stop flushing on the sinkpad as we're going to use it
-   * next. We can do this as we have the STREAM lock now. */
-  fl_event = gst_event_new_flush_stop (TRUE);
-  if (seqnum != GST_SEQNUM_INVALID)
-    gst_event_set_seqnum (fl_event, seqnum);
-  gst_pad_push_event (rmdemux->sinkpad, fl_event);
-
-  GST_LOG_OBJECT (rmdemux, "Pushed FLUSH_STOP event");
-
-  /* For each stream, find the first index offset equal to or before our seek 
-   * target. Of these, find the smallest offset. That's where we seek to.
-   *
-   * Then we pull 4 bytes from that offset, and validate that we've seeked to a
-   * what looks like a plausible packet.
-   * If that fails, restart, with the seek target set to one less than the
-   * offset we just tried. If we run out of places to try, treat that as a fatal
-   * error.
-   */
-  if (!find_seek_offset_time (rmdemux, rmdemux->segment.position)) {
-    GST_LOG_OBJECT (rmdemux, "Failed to find seek offset by time");
-    ret = FALSE;
-    goto done;
-  }
-
-  GST_LOG_OBJECT (rmdemux, "Validating offset %u", rmdemux->offset);
-  validated = gst_rmdemux_validate_offset (rmdemux);
-  while (!validated) {
-    GST_INFO_OBJECT (rmdemux, "Failed to validate offset at %u",
-        rmdemux->offset);
-    if (!find_seek_offset_bytes (rmdemux, rmdemux->offset - 1)) {
-      ret = FALSE;
-      goto done;
-    }
-    validated = gst_rmdemux_validate_offset (rmdemux);
-  }
-
-  GST_LOG_OBJECT (rmdemux, "Found final offset. Excellent!");
-
-  /* now we have a new position, prepare for streaming again */
-  {
-    /* Reset the demuxer state */
-    rmdemux->state = RMDEMUX_STATE_DATA_PACKET;
-
-    if (flush) {
-      fl_event = gst_event_new_flush_stop (TRUE);
-      if (seqnum != GST_SEQNUM_INVALID)
-        gst_event_set_seqnum (fl_event, seqnum);
-      gst_rmdemux_send_event (rmdemux, fl_event);
-    }
-
-    /* must send newsegment event from streaming thread, so just set flag */
-    rmdemux->need_newsegment = TRUE;
-
-    /* notify start of new segment */
-    if (rmdemux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
-      GstMessage *msg =
-          gst_message_new_segment_start (GST_OBJECT_CAST (rmdemux),
-          GST_FORMAT_TIME, rmdemux->segment.position);
-      if (seqnum != GST_SEQNUM_INVALID)
-        gst_message_set_seqnum (msg, seqnum);
-      gst_element_post_message (GST_ELEMENT_CAST (rmdemux), msg);
-    }
-
-    /* restart our task since it might have been stopped when we did the 
-     * flush. */
-    gst_pad_start_task (rmdemux->sinkpad, (GstTaskFunction) gst_rmdemux_loop,
-        rmdemux->sinkpad, NULL);
-  }
-
-done:
-  /* streaming can continue now */
-  GST_PAD_STREAM_UNLOCK (rmdemux->sinkpad);
-
-  return ret;
-
-error:
-  {
-    GST_DEBUG_OBJECT (rmdemux, "seek failed");
-    return FALSE;
-  }
-}
-
-
-static gboolean
-gst_rmdemux_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
-{
-  gboolean res = FALSE;
-  GstRMDemux *rmdemux;
-
-  rmdemux = GST_RMDEMUX (parent);
-
-  switch (GST_QUERY_TYPE (query)) {
-    case GST_QUERY_POSITION:
-      GST_DEBUG_OBJECT (rmdemux, "Position query: no idea from demuxer!");
-      break;
-    case GST_QUERY_DURATION:{
-      GstFormat fmt;
-
-      gst_query_parse_duration (query, &fmt, NULL);
-      if (fmt == GST_FORMAT_TIME) {
-        GST_OBJECT_LOCK (rmdemux);
-        if (G_LIKELY (rmdemux->running)) {
-          gst_query_set_duration (query, GST_FORMAT_TIME, rmdemux->duration);
-          GST_DEBUG_OBJECT (rmdemux, "duration set to %" GST_TIME_FORMAT,
-              GST_TIME_ARGS (rmdemux->duration));
-          res = TRUE;
-        }
-        GST_OBJECT_UNLOCK (rmdemux);
-      }
-      break;
-    }
-    case GST_QUERY_SEEKING:{
-      GstFormat fmt;
-
-      gst_query_parse_seeking (query, &fmt, NULL, NULL, NULL);
-      if (fmt == GST_FORMAT_TIME) {
-        GST_OBJECT_LOCK (rmdemux);
-        if (G_LIKELY (rmdemux->running)) {
-          gst_query_set_seeking (query, GST_FORMAT_TIME, rmdemux->seekable,
-              0, rmdemux->duration);
-          res = TRUE;
-        }
-        GST_OBJECT_UNLOCK (rmdemux);
-      }
-      break;
-    }
-    case GST_QUERY_SEGMENT:
-    {
-      GstFormat format;
-      gint64 start, stop;
-
-      format = rmdemux->segment.format;
-
-      start =
-          gst_segment_to_stream_time (&rmdemux->segment, format,
-          rmdemux->segment.start);
-      if ((stop = rmdemux->segment.stop) == -1)
-        stop = rmdemux->segment.duration;
-      else
-        stop = gst_segment_to_stream_time (&rmdemux->segment, format, stop);
-
-      gst_query_set_segment (query, rmdemux->segment.rate, format, start, stop);
-      res = TRUE;
-      break;
-    }
-    default:
-      res = gst_pad_query_default (pad, parent, query);
-      break;
-  }
-
-  return res;
-}
-
-static void
-gst_rmdemux_free_stream (GstRMDemux * rmdemux, GstRMDemuxStream * stream)
-{
-  g_object_unref (stream->adapter);
-  gst_rmdemux_stream_clear_cached_subpackets (rmdemux, stream);
-  if (stream->pending_tags)
-    gst_tag_list_unref (stream->pending_tags);
-  if (stream->subpackets)
-    g_ptr_array_free (stream->subpackets, TRUE);
-  g_free (stream->index);
-  g_free (stream);
-}
-
-static void
-gst_rmdemux_reset (GstRMDemux * rmdemux)
-{
-  GSList *cur;
-
-  GST_OBJECT_LOCK (rmdemux);
-  rmdemux->running = FALSE;
-  GST_OBJECT_UNLOCK (rmdemux);
-
-  for (cur = rmdemux->streams; cur; cur = cur->next) {
-    GstRMDemuxStream *stream = cur->data;
-
-    gst_flow_combiner_remove_pad (rmdemux->flowcombiner, stream->pad);
-    gst_element_remove_pad (GST_ELEMENT (rmdemux), stream->pad);
-    gst_rmdemux_free_stream (rmdemux, stream);
-  }
-  g_slist_free (rmdemux->streams);
-  rmdemux->streams = NULL;
-  rmdemux->n_audio_streams = 0;
-  rmdemux->n_video_streams = 0;
-
-  if (rmdemux->pending_tags != NULL) {
-    gst_tag_list_unref (rmdemux->pending_tags);
-    rmdemux->pending_tags = NULL;
-  }
-
-  gst_adapter_clear (rmdemux->adapter);
-  rmdemux->state = RMDEMUX_STATE_HEADER;
-  rmdemux->have_pads = FALSE;
-
-  gst_segment_init (&rmdemux->segment, GST_FORMAT_UNDEFINED);
-  rmdemux->first_ts = GST_CLOCK_TIME_NONE;
-  rmdemux->base_ts = GST_CLOCK_TIME_NONE;
-  rmdemux->need_newsegment = TRUE;
-
-  rmdemux->have_group_id = FALSE;
-  rmdemux->group_id = G_MAXUINT;
-
-  rmdemux->seek_seqnum = GST_SEQNUM_INVALID;
-}
-
-static GstStateChangeReturn
-gst_rmdemux_change_state (GstElement * element, GstStateChange transition)
-{
-  GstRMDemux *rmdemux = GST_RMDEMUX (element);
-  GstStateChangeReturn res;
-
-  switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:
-      break;
-    case GST_STATE_CHANGE_READY_TO_PAUSED:
-      rmdemux->state = RMDEMUX_STATE_HEADER;
-      rmdemux->have_pads = FALSE;
-      gst_segment_init (&rmdemux->segment, GST_FORMAT_TIME);
-      rmdemux->running = FALSE;
-      break;
-    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
-      break;
-    default:
-      break;
-  }
-
-  res = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
-      break;
-    case GST_STATE_CHANGE_PAUSED_TO_READY:{
-      gst_rmdemux_reset (rmdemux);
-      break;
-    }
-    case GST_STATE_CHANGE_READY_TO_NULL:
-      break;
-    default:
-      break;
-  }
-
-  return res;
-}
-
-/* this function is called when the pad is activated and should start
- * processing data.
- *
- * We check if we can do random access to decide if we work push or
- * pull based.
- */
-static gboolean
-gst_rmdemux_sink_activate (GstPad * sinkpad, GstObject * parent)
-{
-  GstQuery *query;
-  gboolean pull_mode;
-
-  query = gst_query_new_scheduling ();
-
-  if (!gst_pad_peer_query (sinkpad, query)) {
-    gst_query_unref (query);
-    goto activate_push;
-  }
-
-  pull_mode = gst_query_has_scheduling_mode_with_flags (query,
-      GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE);
-  gst_query_unref (query);
-
-  if (!pull_mode)
-    goto activate_push;
-
-  GST_DEBUG_OBJECT (sinkpad, "activating pull");
-  return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PULL, TRUE);
-
-activate_push:
-  {
-    GST_DEBUG_OBJECT (sinkpad, "activating push");
-    return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PUSH, TRUE);
-  }
-}
-
-static gboolean
-gst_rmdemux_sink_activate_mode (GstPad * sinkpad, GstObject * parent,
-    GstPadMode mode, gboolean active)
-{
-  gboolean res;
-  GstRMDemux *demux;
-
-  demux = GST_RMDEMUX (parent);
-
-  switch (mode) {
-    case GST_PAD_MODE_PUSH:
-      demux->seekable = FALSE;
-      demux->running = active;
-      res = TRUE;
-      break;
-    case GST_PAD_MODE_PULL:
-      if (active) {
-        demux->seekable = TRUE;
-        demux->offset = 0;
-        demux->loop_state = RMDEMUX_LOOP_STATE_HEADER;
-        demux->data_offset = G_MAXUINT;
-        res =
-            gst_pad_start_task (sinkpad, (GstTaskFunction) gst_rmdemux_loop,
-            sinkpad, NULL);
-      } else {
-        res = gst_pad_stop_task (sinkpad);
-      }
-      break;
-    default:
-      res = FALSE;
-      break;
-  }
-  return res;
-}
-
-
-/* random access mode - just pass over to our chain function */
-static void
-gst_rmdemux_loop (GstPad * pad)
-{
-  GstRMDemux *rmdemux;
-  GstBuffer *buffer;
-  GstFlowReturn ret = GST_FLOW_OK;
-  guint size;
-
-  rmdemux = GST_RMDEMUX (GST_PAD_PARENT (pad));
-
-  GST_LOG_OBJECT (rmdemux, "loop with state=%d and offset=0x%x",
-      rmdemux->loop_state, rmdemux->offset);
-
-  switch (rmdemux->state) {
-    case RMDEMUX_STATE_HEADER:
-      size = HEADER_SIZE;
-      break;
-    case RMDEMUX_STATE_HEADER_DATA:
-      size = DATA_SIZE;
-      break;
-    case RMDEMUX_STATE_DATA_PACKET:
-      size = rmdemux->avg_packet_size;
-      break;
-    case RMDEMUX_STATE_EOS:
-      GST_LOG_OBJECT (rmdemux, "At EOS, pausing task");
-      ret = GST_FLOW_EOS;
-      goto need_pause;
-    default:
-      GST_LOG_OBJECT (rmdemux, "Default: requires %d bytes (state is %d)",
-          (int) rmdemux->size, rmdemux->state);
-      size = rmdemux->size;
-  }
-
-  buffer = NULL;
-  ret = gst_pad_pull_range (pad, rmdemux->offset, size, &buffer);
-  if (ret != GST_FLOW_OK) {
-    if (rmdemux->offset == rmdemux->index_offset) {
-      /* The index isn't available so forget about it */
-      rmdemux->loop_state = RMDEMUX_LOOP_STATE_DATA;
-      rmdemux->offset = rmdemux->data_offset;
-      GST_OBJECT_LOCK (rmdemux);
-      rmdemux->running = TRUE;
-      rmdemux->seekable = FALSE;
-      GST_OBJECT_UNLOCK (rmdemux);
-      return;
-    } else {
-      GST_DEBUG_OBJECT (rmdemux, "Unable to pull %d bytes at offset 0x%08x "
-          "(pull_range returned flow %s, state is %d)", (gint) size,
-          rmdemux->offset, gst_flow_get_name (ret), GST_STATE (rmdemux));
-      goto need_pause;
-    }
-  }
-
-  size = gst_buffer_get_size (buffer);
-
-  /* Defer to the chain function */
-  ret = gst_rmdemux_chain (pad, GST_OBJECT_CAST (rmdemux), buffer);
-  if (ret != GST_FLOW_OK) {
-    GST_DEBUG_OBJECT (rmdemux, "Chain flow failed at offset 0x%08x",
-        rmdemux->offset);
-    goto need_pause;
-  }
-
-  rmdemux->offset += size;
-
-  switch (rmdemux->loop_state) {
-    case RMDEMUX_LOOP_STATE_HEADER:
-      if (rmdemux->offset >= rmdemux->data_offset) {
-        /* It's the end of the header */
-        rmdemux->loop_state = RMDEMUX_LOOP_STATE_INDEX;
-        rmdemux->offset = rmdemux->index_offset;
-      }
-      break;
-    case RMDEMUX_LOOP_STATE_INDEX:
-      if (rmdemux->state == RMDEMUX_STATE_HEADER) {
-        if (rmdemux->index_offset == 0) {
-          /* We've read the last index */
-          rmdemux->loop_state = RMDEMUX_LOOP_STATE_DATA;
-          rmdemux->offset = rmdemux->data_offset;
-          GST_OBJECT_LOCK (rmdemux);
-          rmdemux->running = TRUE;
-          GST_OBJECT_UNLOCK (rmdemux);
-        } else {
-          /* Get the next index */
-          rmdemux->offset = rmdemux->index_offset;
-        }
-      }
-      break;
-    case RMDEMUX_LOOP_STATE_DATA:
-      break;
-  }
-
-  return;
-
-  /* ERRORS */
-need_pause:
-  {
-    const gchar *reason = gst_flow_get_name (ret);
-
-    GST_LOG_OBJECT (rmdemux, "pausing task, reason %s", reason);
-    rmdemux->segment_running = FALSE;
-    gst_pad_pause_task (rmdemux->sinkpad);
-
-    if (ret == GST_FLOW_EOS) {
-      /* perform EOS logic */
-      if (rmdemux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
-        gint64 stop;
-
-        /* for segment playback we need to post when (in stream time)
-         * we stopped, this is either stop (when set) or the duration. */
-        if ((stop = rmdemux->segment.stop) == -1)
-          stop = rmdemux->segment.duration;
-
-        GST_LOG_OBJECT (rmdemux, "Sending segment done, at end of segment");
-        gst_element_post_message (GST_ELEMENT (rmdemux),
-            gst_message_new_segment_done (GST_OBJECT (rmdemux),
-                GST_FORMAT_TIME, stop));
-        gst_rmdemux_send_event (rmdemux,
-            gst_event_new_segment_done (GST_FORMAT_TIME, stop));
-      } else {
-        /* normal playback, send EOS to all linked pads */
-        GST_LOG_OBJECT (rmdemux, "Sending EOS, at end of stream");
-        gst_rmdemux_send_event (rmdemux, gst_event_new_eos ());
-      }
-    } else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
-      GST_ELEMENT_FLOW_ERROR (rmdemux, ret);
-      gst_rmdemux_send_event (rmdemux, gst_event_new_eos ());
-    }
-    return;
-  }
-}
-
-static gboolean
-gst_rmdemux_fourcc_isplausible (guint32 fourcc)
-{
-  int i;
-
-  for (i = 0; i < 4; i++) {
-    if (!isprint ((int) ((unsigned char *) (&fourcc))[i])) {
-      return FALSE;
-    }
-  }
-  return TRUE;
-}
-
-static GstFlowReturn
-gst_rmdemux_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
-{
-  GstFlowReturn ret = GST_FLOW_OK;
-  const guint8 *data;
-  guint16 version;
-  guint avail;
-
-  GstRMDemux *rmdemux = GST_RMDEMUX (parent);
-
-  if (rmdemux->base_ts == -1) {
-    if (GST_BUFFER_DTS_IS_VALID (buffer))
-      rmdemux->base_ts = GST_BUFFER_DTS (buffer);
-    else
-      rmdemux->base_ts = GST_BUFFER_PTS (buffer);
-
-    GST_LOG_OBJECT (rmdemux, "base_ts %" GST_TIME_FORMAT,
-        GST_TIME_ARGS (rmdemux->base_ts));
-  }
-
-  gst_adapter_push (rmdemux->adapter, buffer);
-
-  GST_LOG_OBJECT (rmdemux, "Chaining buffer of size %" G_GSIZE_FORMAT,
-      gst_buffer_get_size (buffer));
-
-  while (TRUE) {
-    avail = gst_adapter_available (rmdemux->adapter);
-
-    GST_LOG_OBJECT (rmdemux, "looping in chain, avail %u", avail);
-    switch (rmdemux->state) {
-      case RMDEMUX_STATE_HEADER:
-      {
-        if (gst_adapter_available (rmdemux->adapter) < HEADER_SIZE)
-          goto unlock;
-
-        data = gst_adapter_map (rmdemux->adapter, HEADER_SIZE);
-
-        rmdemux->object_id = RMDEMUX_FOURCC_GET (data + 0);
-        rmdemux->size = RMDEMUX_GUINT32_GET (data + 4) - HEADER_SIZE;
-        rmdemux->object_version = RMDEMUX_GUINT16_GET (data + 8);
-
-        /* Sanity-check. We assume that the FOURCC is printable ASCII */
-        if (!gst_rmdemux_fourcc_isplausible (rmdemux->object_id)) {
-          /* Failed. Remain in HEADER state, try again... We flush only 
-           * the actual FOURCC, not the entire header, because we could 
-           * need to resync anywhere at all... really, this should never 
-           * happen. */
-          GST_WARNING_OBJECT (rmdemux, "Bogus looking header, unprintable "
-              "FOURCC");
-          gst_adapter_unmap (rmdemux->adapter);
-          gst_adapter_flush (rmdemux->adapter, 4);
-
-          break;
-        }
-
-        GST_LOG_OBJECT (rmdemux, "header found with object_id=%"
-            GST_FOURCC_FORMAT
-            " size=%08x object_version=%d",
-            GST_FOURCC_ARGS (rmdemux->object_id), rmdemux->size,
-            rmdemux->object_version);
-
-        gst_adapter_unmap (rmdemux->adapter);
-        gst_adapter_flush (rmdemux->adapter, HEADER_SIZE);
-
-        switch (rmdemux->object_id) {
-          case GST_MAKE_FOURCC ('.', 'R', 'M', 'F'):
-            rmdemux->state = RMDEMUX_STATE_HEADER_RMF;
-            break;
-          case GST_MAKE_FOURCC ('P', 'R', 'O', 'P'):
-            rmdemux->state = RMDEMUX_STATE_HEADER_PROP;
-            break;
-          case GST_MAKE_FOURCC ('M', 'D', 'P', 'R'):
-            rmdemux->state = RMDEMUX_STATE_HEADER_MDPR;
-            break;
-          case GST_MAKE_FOURCC ('I', 'N', 'D', 'X'):
-            rmdemux->state = RMDEMUX_STATE_HEADER_INDX;
-            break;
-          case GST_MAKE_FOURCC ('D', 'A', 'T', 'A'):
-            rmdemux->state = RMDEMUX_STATE_HEADER_DATA;
-            break;
-          case GST_MAKE_FOURCC ('C', 'O', 'N', 'T'):
-            rmdemux->state = RMDEMUX_STATE_HEADER_CONT;
-            break;
-          default:
-            rmdemux->state = RMDEMUX_STATE_HEADER_UNKNOWN;
-            break;
-        }
-        break;
-      }
-      case RMDEMUX_STATE_HEADER_UNKNOWN:
-      {
-        if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
-          goto unlock;
-
-        GST_WARNING_OBJECT (rmdemux, "Unknown object_id %" GST_FOURCC_FORMAT,
-            GST_FOURCC_ARGS (rmdemux->object_id));
-
-        gst_adapter_flush (rmdemux->adapter, rmdemux->size);
-        rmdemux->state = RMDEMUX_STATE_HEADER;
-        break;
-      }
-      case RMDEMUX_STATE_HEADER_RMF:
-      {
-        if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
-          goto unlock;
-
-        if ((rmdemux->object_version == 0) || (rmdemux->object_version == 1)) {
-          data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
-          gst_rmdemux_parse__rmf (rmdemux, data, rmdemux->size);
-          gst_adapter_unmap (rmdemux->adapter);
-          gst_adapter_flush (rmdemux->adapter, rmdemux->size);
-        } else {
-          gst_adapter_flush (rmdemux->adapter, rmdemux->size);
-        }
-        rmdemux->state = RMDEMUX_STATE_HEADER;
-        break;
-      }
-      case RMDEMUX_STATE_HEADER_PROP:
-      {
-        if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
-          goto unlock;
-
-        data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
-        gst_rmdemux_parse_prop (rmdemux, data, rmdemux->size);
-        gst_adapter_unmap (rmdemux->adapter);
-        gst_adapter_flush (rmdemux->adapter, rmdemux->size);
-
-        rmdemux->state = RMDEMUX_STATE_HEADER;
-        break;
-      }
-      case RMDEMUX_STATE_HEADER_MDPR:
-      {
-        if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
-          goto unlock;
-
-        data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
-        gst_rmdemux_parse_mdpr (rmdemux, data, rmdemux->size);
-        gst_adapter_unmap (rmdemux->adapter);
-        gst_adapter_flush (rmdemux->adapter, rmdemux->size);
-
-        rmdemux->state = RMDEMUX_STATE_HEADER;
-        break;
-      }
-      case RMDEMUX_STATE_HEADER_CONT:
-      {
-        if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
-          goto unlock;
-
-        data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
-        gst_rmdemux_parse_cont (rmdemux, data, rmdemux->size);
-        gst_adapter_unmap (rmdemux->adapter);
-        gst_adapter_flush (rmdemux->adapter, rmdemux->size);
-
-        rmdemux->state = RMDEMUX_STATE_HEADER;
-        break;
-      }
-      case RMDEMUX_STATE_HEADER_DATA:
-      {
-        /* If we haven't already done so then signal there are no more pads */
-        if (!rmdemux->have_pads) {
-          GST_LOG_OBJECT (rmdemux, "no more pads");
-          gst_element_no_more_pads (GST_ELEMENT (rmdemux));
-          rmdemux->have_pads = TRUE;
-        }
-
-        /* The actual header is only 8 bytes */
-        rmdemux->size = DATA_SIZE;
-        GST_LOG_OBJECT (rmdemux, "data available %" G_GSIZE_FORMAT,
-            gst_adapter_available (rmdemux->adapter));
-        if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
-          goto unlock;
-
-        data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
-        gst_rmdemux_parse_data (rmdemux, data, rmdemux->size);
-        gst_adapter_unmap (rmdemux->adapter);
-        gst_adapter_flush (rmdemux->adapter, rmdemux->size);
-
-        rmdemux->state = RMDEMUX_STATE_DATA_PACKET;
-        break;
-      }
-      case RMDEMUX_STATE_HEADER_INDX:
-      {
-        if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
-          goto unlock;
-
-        data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
-        rmdemux->size = gst_rmdemux_parse_indx (rmdemux, data, rmdemux->size);
-        /* Only flush the header */
-        gst_adapter_unmap (rmdemux->adapter);
-        gst_adapter_flush (rmdemux->adapter, HEADER_SIZE);
-
-        rmdemux->state = RMDEMUX_STATE_INDX_DATA;
-        break;
-      }
-      case RMDEMUX_STATE_INDX_DATA:
-      {
-        /* There's not always an data to get... */
-        if (rmdemux->size > 0) {
-          if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
-            goto unlock;
-
-          data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
-          gst_rmdemux_parse_indx_data (rmdemux, data, rmdemux->size);
-          gst_adapter_unmap (rmdemux->adapter);
-          gst_adapter_flush (rmdemux->adapter, rmdemux->size);
-        }
-
-        rmdemux->state = RMDEMUX_STATE_HEADER;
-        break;
-      }
-      case RMDEMUX_STATE_DATA_PACKET:
-      {
-        guint8 header[4];
-
-        if (gst_adapter_available (rmdemux->adapter) < 2)
-          goto unlock;
-
-        gst_adapter_copy (rmdemux->adapter, header, 0, 2);
-        version = RMDEMUX_GUINT16_GET (header);
-        GST_LOG_OBJECT (rmdemux, "Data packet with version=%d", version);
-
-        if (version == 0 || version == 1) {
-          guint16 length;
-
-          if (gst_adapter_available (rmdemux->adapter) < 4)
-            goto unlock;
-
-          gst_adapter_copy (rmdemux->adapter, header, 0, 4);
-
-          length = RMDEMUX_GUINT16_GET (header + 2);
-          GST_LOG_OBJECT (rmdemux, "Got length %d", length);
-
-          if (length < 4) {
-            GST_LOG_OBJECT (rmdemux, "length too small, dropping");
-            /* Invalid, just drop it */
-            gst_adapter_flush (rmdemux->adapter, 4);
-          } else {
-            GstBuffer *buffer;
-
-            avail = gst_adapter_available (rmdemux->adapter);
-            if (avail < length)
-              goto unlock;
-
-            GST_LOG_OBJECT (rmdemux, "we have %u available and we needed %d",
-                avail, length);
-
-            /* flush version and length */
-            gst_adapter_flush (rmdemux->adapter, 4);
-            length -= 4;
-
-            buffer = gst_adapter_take_buffer (rmdemux->adapter, length);
-
-            ret = gst_rmdemux_parse_packet (rmdemux, buffer, version);
-            rmdemux->chunk_index++;
-          }
-
-          if (rmdemux->chunk_index == rmdemux->n_chunks || length == 0)
-            rmdemux->state = RMDEMUX_STATE_HEADER;
-        } else {
-          /* Stream done */
-          gst_adapter_flush (rmdemux->adapter, 2);
-
-          if (rmdemux->data_offset == 0) {
-            GST_LOG_OBJECT (rmdemux,
-                "No further data, internal demux state EOS");
-            rmdemux->state = RMDEMUX_STATE_EOS;
-          } else
-            rmdemux->state = RMDEMUX_STATE_HEADER;
-        }
-        break;
-      }
-      case RMDEMUX_STATE_EOS:
-        gst_rmdemux_send_event (rmdemux, gst_event_new_eos ());
-        goto unlock;
-      default:
-        GST_WARNING_OBJECT (rmdemux, "Unhandled state %d", rmdemux->state);
-        goto unlock;
-    }
-  }
-
-unlock:
-  return ret;
-}
-
-static GstRMDemuxStream *
-gst_rmdemux_get_stream_by_id (GstRMDemux * rmdemux, int id)
-{
-  GSList *cur;
-
-  for (cur = rmdemux->streams; cur; cur = cur->next) {
-    GstRMDemuxStream *stream = cur->data;
-
-    if (stream->id == id) {
-      return stream;
-    }
-  }
-
-  return NULL;
-}
-
-static void
-gst_rmdemux_send_event (GstRMDemux * rmdemux, GstEvent * event)
-{
-  GSList *cur;
-
-  for (cur = rmdemux->streams; cur; cur = cur->next) {
-    GstRMDemuxStream *stream = cur->data;
-
-    GST_DEBUG_OBJECT (rmdemux, "Pushing %s event on pad %s",
-        GST_EVENT_TYPE_NAME (event), GST_PAD_NAME (stream->pad));
-
-    switch (GST_EVENT_TYPE (event)) {
-      case GST_EVENT_FLUSH_STOP:
-        stream->last_ts = -1;
-        stream->next_ts = -1;
-        stream->last_seq = -1;
-        stream->next_seq = -1;
-        break;
-      default:
-        break;
-    }
-    gst_event_ref (event);
-    gst_pad_push_event (stream->pad, event);
-  }
-  gst_event_unref (event);
-}
-
-static void
-gst_rmdemux_add_stream (GstRMDemux * rmdemux, GstRMDemuxStream * stream)
-{
-  GstCaps *stream_caps = NULL;
-  const gchar *codec_tag = NULL;
-  gchar *codec_name = NULL;
-  gchar *stream_id;
-  int version = 0;
-
-  if (stream->subtype == GST_RMDEMUX_STREAM_VIDEO) {
-    char *name = g_strdup_printf ("video_%u", rmdemux->n_video_streams);
-
-    stream->pad =
-        gst_pad_new_from_static_template (&gst_rmdemux_videosrc_template, name);
-    g_free (name);
-
-    codec_tag = GST_TAG_VIDEO_CODEC;
-
-    switch (stream->fourcc) {
-      case GST_RM_VDO_RV10:
-        version = 1;
-        break;
-      case GST_RM_VDO_RV20:
-        version = 2;
-        break;
-      case GST_RM_VDO_RV30:
-        version = 3;
-        break;
-      case GST_RM_VDO_RV40:
-        version = 4;
-        break;
-      default:
-        stream_caps = gst_caps_new_simple ("video/x-unknown-fourcc",
-            "fourcc", G_TYPE_UINT, stream->fourcc, NULL);
-        GST_WARNING_OBJECT (rmdemux,
-            "Unknown video FOURCC code \"%" GST_FOURCC_FORMAT "\" (%08x)",
-            GST_FOURCC_ARGS (stream->fourcc), stream->fourcc);
-    }
-
-    if (version) {
-      stream_caps =
-          gst_caps_new_simple ("video/x-pn-realvideo", "rmversion", G_TYPE_INT,
-          (int) version,
-          "format", G_TYPE_INT,
-          (int) stream->format,
-          "subformat", G_TYPE_INT, (int) stream->subformat, NULL);
-    }
-
-    if (stream_caps) {
-      gst_caps_set_simple (stream_caps,
-          "width", G_TYPE_INT, stream->width,
-          "height", G_TYPE_INT, stream->height,
-          "framerate", GST_TYPE_FRACTION, stream->framerate_numerator,
-          stream->framerate_denominator, NULL);
-    }
-    rmdemux->n_video_streams++;
-
-  } else if (stream->subtype == GST_RMDEMUX_STREAM_AUDIO) {
-    char *name = g_strdup_printf ("audio_%u", rmdemux->n_audio_streams);
-
-    stream->pad =
-        gst_pad_new_from_static_template (&gst_rmdemux_audiosrc_template, name);
-    GST_LOG_OBJECT (rmdemux, "Created audio pad \"%s\"", name);
-    g_free (name);
-
-    codec_tag = GST_TAG_AUDIO_CODEC;
-
-    switch (stream->fourcc) {
-        /* Older RealAudio Codecs */
-      case GST_RM_AUD_14_4:
-        version = 1;
-        break;
-
-      case GST_RM_AUD_28_8:
-        version = 2;
-        break;
-
-        /* DolbyNet (Dolby AC3, low bitrate) */
-      case GST_RM_AUD_DNET:
-        stream_caps =
-            gst_caps_new_simple ("audio/x-ac3", "rate", G_TYPE_INT,
-            (int) stream->rate, NULL);
-        stream->needs_descrambling = TRUE;
-        stream->subpackets_needed = 1;
-        stream->subpackets = NULL;
-        break;
-
-        /* MPEG-4 based */
-      case GST_RM_AUD_RAAC:
-      case GST_RM_AUD_RACP:
-        stream_caps =
-            gst_caps_new_simple ("audio/mpeg", "mpegversion", G_TYPE_INT,
-            (int) 4, "framed", G_TYPE_BOOLEAN, TRUE, NULL);
-        if (stream->extra_data_size > 0) {
-          /* strip off an unknown byte in the extra data */
-          stream->extra_data_size--;
-          stream->extra_data++;
-        }
-        stream->needs_descrambling = TRUE;
-        stream->subpackets_needed = 1;
-        stream->subpackets = NULL;
-        break;
-
-        /* Sony ATRAC3 */
-      case GST_RM_AUD_ATRC:
-        stream_caps = gst_caps_new_empty_simple ("audio/x-vnd.sony.atrac3");
-        stream->needs_descrambling = TRUE;
-        stream->subpackets_needed = stream->height;
-        stream->subpackets = NULL;
-        break;
-
-        /* RealAudio G2 audio */
-      case GST_RM_AUD_COOK:
-        version = 8;
-        stream->needs_descrambling = TRUE;
-        stream->subpackets_needed = stream->height;
-        stream->subpackets = NULL;
-        break;
-
-        /* RALF is lossless */
-      case GST_RM_AUD_RALF:
-        GST_DEBUG_OBJECT (rmdemux, "RALF");
-        stream_caps = gst_caps_new_empty_simple ("audio/x-ralf-mpeg4-generic");
-        break;
-
-      case GST_RM_AUD_SIPR:
-
-        if (stream->flavor > 3) {
-          GST_WARNING_OBJECT (rmdemux, "bad SIPR flavor %d, freeing it",
-              stream->flavor);
-          g_object_unref (stream->pad);
-          gst_rmdemux_free_stream (rmdemux, stream);
-          goto beach;
-        }
-
-        GST_DEBUG_OBJECT (rmdemux, "SIPR");
-        stream_caps = gst_caps_new_empty_simple ("audio/x-sipro");
-        stream->needs_descrambling = TRUE;
-        stream->subpackets_needed = stream->height;
-        stream->subpackets = NULL;
-        stream->leaf_size = sipr_subpk_size[stream->flavor];
-
-        break;
-
-      default:
-        stream_caps = gst_caps_new_simple ("video/x-unknown-fourcc",
-            "fourcc", G_TYPE_UINT, stream->fourcc, NULL);
-        GST_WARNING_OBJECT (rmdemux,
-            "Unknown audio FOURCC code \"%" GST_FOURCC_FORMAT "\" (%08x)",
-            GST_FOURCC_ARGS (stream->fourcc), stream->fourcc);
-        break;
-    }
-
-    if (version) {
-      stream_caps =
-          gst_caps_new_simple ("audio/x-pn-realaudio", "raversion", G_TYPE_INT,
-          (int) version, NULL);
-    }
-
-    if (stream_caps) {
-      gst_caps_set_simple (stream_caps,
-          "flavor", G_TYPE_INT, (int) stream->flavor,
-          "rate", G_TYPE_INT, (int) stream->rate,
-          "channels", G_TYPE_INT, (int) stream->n_channels,
-          "width", G_TYPE_INT, (int) stream->sample_width,
-          "leaf_size", G_TYPE_INT, (int) stream->leaf_size,
-          "packet_size", G_TYPE_INT, (int) stream->packet_size,
-          "bitrate", G_TYPE_INT, (int) stream->bitrate,
-          "height", G_TYPE_INT, (int) stream->height, NULL);
-    }
-    rmdemux->n_audio_streams++;
-  } else {
-    GST_WARNING_OBJECT (rmdemux, "not adding stream of type %d, freeing it",
-        stream->subtype);
-    gst_rmdemux_free_stream (rmdemux, stream);
-    goto beach;
-  }
-
-  GST_PAD_ELEMENT_PRIVATE (stream->pad) = stream;
-  rmdemux->streams = g_slist_append (rmdemux->streams, stream);
-  GST_LOG_OBJECT (rmdemux, "n_streams is now %d",
-      g_slist_length (rmdemux->streams));
-
-  GST_LOG ("stream->pad = %p, stream_caps = %" GST_PTR_FORMAT, stream->pad,
-      stream_caps);
-
-  if (stream->pad && stream_caps) {
-    GstEvent *event;
-
-    GST_LOG_OBJECT (rmdemux, "%d bytes of extra data for stream %s",
-        stream->extra_data_size, GST_PAD_NAME (stream->pad));
-
-    /* add codec_data if there is any */
-    if (stream->extra_data_size > 0) {
-      GstBuffer *buffer;
-
-      buffer = gst_buffer_new_and_alloc (stream->extra_data_size);
-      gst_buffer_fill (buffer, 0, stream->extra_data, stream->extra_data_size);
-
-      gst_caps_set_simple (stream_caps, "codec_data", GST_TYPE_BUFFER,
-          buffer, NULL);
-
-      gst_buffer_unref (buffer);
-    }
-
-    gst_pad_use_fixed_caps (stream->pad);
-
-    gst_pad_set_event_function (stream->pad,
-        GST_DEBUG_FUNCPTR (gst_rmdemux_src_event));
-    gst_pad_set_query_function (stream->pad,
-        GST_DEBUG_FUNCPTR (gst_rmdemux_src_query));
-
-    GST_DEBUG_OBJECT (rmdemux, "adding pad %s with caps %" GST_PTR_FORMAT
-        ", stream_id=%d", GST_PAD_NAME (stream->pad), stream_caps, stream->id);
-    gst_pad_set_active (stream->pad, TRUE);
-
-    stream_id =
-        gst_pad_create_stream_id_printf (stream->pad,
-        GST_ELEMENT_CAST (rmdemux), "%03u", stream->id);
-
-    event =
-        gst_pad_get_sticky_event (rmdemux->sinkpad, GST_EVENT_STREAM_START, 0);
-    if (event) {
-      if (gst_event_parse_group_id (event, &rmdemux->group_id))
-        rmdemux->have_group_id = TRUE;
-      else
-        rmdemux->have_group_id = FALSE;
-      gst_event_unref (event);
-    } else if (!rmdemux->have_group_id) {
-      rmdemux->have_group_id = TRUE;
-      rmdemux->group_id = gst_util_group_id_next ();
-    }
-
-    event = gst_event_new_stream_start (stream_id);
-    if (rmdemux->have_group_id)
-      gst_event_set_group_id (event, rmdemux->group_id);
-
-    gst_pad_push_event (stream->pad, event);
-    g_free (stream_id);
-
-    gst_pad_set_caps (stream->pad, stream_caps);
-
-    codec_name = gst_pb_utils_get_codec_description (stream_caps);
-
-    /* save for later, we must send the tags after the newsegment event */
-    if (codec_tag != NULL && codec_name != NULL) {
-      if (stream->pending_tags == NULL)
-        stream->pending_tags = gst_tag_list_new_empty ();
-      gst_tag_list_add (stream->pending_tags, GST_TAG_MERGE_KEEP,
-          codec_tag, codec_name, NULL);
-      g_free (codec_name);
-    }
-    gst_element_add_pad (GST_ELEMENT_CAST (rmdemux), stream->pad);
-    gst_flow_combiner_add_pad (rmdemux->flowcombiner, stream->pad);
-  }
-
-beach:
-
-  if (stream_caps)
-    gst_caps_unref (stream_caps);
-}
-
-static int
-re_skip_pascal_string (const guint8 * ptr)
-{
-  int length;
-
-  length = ptr[0];
-
-  return length + 1;
-}
-
-static void
-gst_rmdemux_parse__rmf (GstRMDemux * rmdemux, const guint8 * data, int length)
-{
-  GST_LOG_OBJECT (rmdemux, "file_version: %d", RMDEMUX_GUINT32_GET (data));
-  GST_LOG_OBJECT (rmdemux, "num_headers: %d", RMDEMUX_GUINT32_GET (data + 4));
-}
-
-static void
-gst_rmdemux_parse_prop (GstRMDemux * rmdemux, const guint8 * data, int length)
-{
-  GST_LOG_OBJECT (rmdemux, "max bitrate: %d", RMDEMUX_GUINT32_GET (data));
-  GST_LOG_OBJECT (rmdemux, "avg bitrate: %d", RMDEMUX_GUINT32_GET (data + 4));
-  GST_LOG_OBJECT (rmdemux, "max packet size: %d",
-      RMDEMUX_GUINT32_GET (data + 8));
-  rmdemux->avg_packet_size = RMDEMUX_GUINT32_GET (data + 12);
-  GST_LOG_OBJECT (rmdemux, "avg packet size: %d", rmdemux->avg_packet_size);
-  rmdemux->num_packets = RMDEMUX_GUINT32_GET (data + 16);
-  GST_LOG_OBJECT (rmdemux, "number of packets: %d", rmdemux->num_packets);
-
-  GST_LOG_OBJECT (rmdemux, "duration: %d", RMDEMUX_GUINT32_GET (data + 20));
-  rmdemux->duration = RMDEMUX_GUINT32_GET (data + 20) * GST_MSECOND;
-
-  GST_LOG_OBJECT (rmdemux, "preroll: %d", RMDEMUX_GUINT32_GET (data + 24));
-  rmdemux->index_offset = RMDEMUX_GUINT32_GET (data + 28);
-  GST_LOG_OBJECT (rmdemux, "offset of INDX section: 0x%08x",
-      rmdemux->index_offset);
-  rmdemux->data_offset = RMDEMUX_GUINT32_GET (data + 32);
-  GST_LOG_OBJECT (rmdemux, "offset of DATA section: 0x%08x",
-      rmdemux->data_offset);
-  GST_LOG_OBJECT (rmdemux, "n streams: %d", RMDEMUX_GUINT16_GET (data + 36));
-  GST_LOG_OBJECT (rmdemux, "flags: 0x%04x", RMDEMUX_GUINT16_GET (data + 38));
-}
-
-static void
-gst_rmdemux_parse_mdpr (GstRMDemux * rmdemux, const guint8 * data, int length)
-{
-  GstRMDemuxStream *stream;
-  char *stream1_type_string;
-  char *stream2_type_string;
-  guint str_len = 0;
-  int stream_type;
-  int offset;
-  guint32 max_bitrate;
-  guint32 avg_bitrate;
-
-  stream = g_new0 (GstRMDemuxStream, 1);
-
-  stream->id = RMDEMUX_GUINT16_GET (data);
-  stream->index = NULL;
-  stream->seek_offset = 0;
-  stream->last_ts = -1;
-  stream->next_ts = -1;
-  stream->discont = TRUE;
-  stream->adapter = gst_adapter_new ();
-  GST_LOG_OBJECT (rmdemux, "stream_number=%d", stream->id);
-
-  /* parse the bitrates */
-  max_bitrate = RMDEMUX_GUINT32_GET (data + 2);
-  avg_bitrate = RMDEMUX_GUINT32_GET (data + 6);
-  stream->bitrate = avg_bitrate;
-  GST_LOG_OBJECT (rmdemux, "Stream max bitrate=%u", max_bitrate);
-  GST_LOG_OBJECT (rmdemux, "Stream avg bitrate=%u", avg_bitrate);
-  if (max_bitrate != 0) {
-    if (stream->pending_tags == NULL)
-      stream->pending_tags = gst_tag_list_new_empty ();
-    gst_tag_list_add (stream->pending_tags, GST_TAG_MERGE_REPLACE,
-        GST_TAG_MAXIMUM_BITRATE, max_bitrate, NULL);
-  }
-  if (avg_bitrate != 0) {
-    if (stream->pending_tags == NULL)
-      stream->pending_tags = gst_tag_list_new_empty ();
-    gst_tag_list_add (stream->pending_tags, GST_TAG_MERGE_REPLACE,
-        GST_TAG_BITRATE, avg_bitrate, NULL);
-  }
-
-  offset = 30;
-  stream1_type_string = gst_rm_utils_read_string8 (data + offset,
-      length - offset, &str_len);
-  offset += str_len;
-  stream2_type_string = gst_rm_utils_read_string8 (data + offset,
-      length - offset, &str_len);
-  offset += str_len;
-
-  /* stream1_type_string for audio and video stream is a "put_whatever_you_want" field :
-   * observed values :
-   * - "[The ]Video/Audio Stream" (File produced by an official Real encoder)
-   * - "RealVideoPremierePlugIn-VIDEO/AUDIO" (File produced by Abobe Premiere)
-   *
-   * so, we should not rely on it to know which stream type it is
-   */
-
-  GST_LOG_OBJECT (rmdemux, "stream type: %s", stream1_type_string);
-  GST_LOG_OBJECT (rmdemux, "MIME type=%s", stream2_type_string);
-
-  if (strcmp (stream2_type_string, "video/x-pn-realvideo") == 0) {
-    stream_type = GST_RMDEMUX_STREAM_VIDEO;
-  } else if (strcmp (stream2_type_string,
-          "video/x-pn-multirate-realvideo") == 0) {
-    stream_type = GST_RMDEMUX_STREAM_VIDEO;
-  } else if (strcmp (stream2_type_string, "audio/x-pn-realaudio") == 0) {
-    stream_type = GST_RMDEMUX_STREAM_AUDIO;
-  } else if (strcmp (stream2_type_string,
-          "audio/x-pn-multirate-realaudio") == 0) {
-    stream_type = GST_RMDEMUX_STREAM_AUDIO;
-  } else if (strcmp (stream2_type_string,
-          "audio/x-pn-multirate-realaudio-live") == 0) {
-    stream_type = GST_RMDEMUX_STREAM_AUDIO;
-  } else if (strcmp (stream2_type_string, "audio/x-ralf-mpeg4-generic") == 0) {
-    /* Another audio type found in the real testsuite */
-    stream_type = GST_RMDEMUX_STREAM_AUDIO;
-  } else if (strcmp (stream1_type_string, "") == 0 &&
-      strcmp (stream2_type_string, "logical-fileinfo") == 0) {
-    stream_type = GST_RMDEMUX_STREAM_FILEINFO;
-  } else {
-    stream_type = GST_RMDEMUX_STREAM_UNKNOWN;
-    GST_WARNING_OBJECT (rmdemux, "unknown stream type \"%s\",\"%s\"",
-        stream1_type_string, stream2_type_string);
-  }
-  g_free (stream1_type_string);
-  g_free (stream2_type_string);
-
-  offset += 4;
-
-  stream->subtype = stream_type;
-  switch (stream_type) {
-
-    case GST_RMDEMUX_STREAM_VIDEO:
-      /* RV10/RV20/RV30/RV40 => video/x-pn-realvideo, version=1,2,3,4 */
-      stream->fourcc = RMDEMUX_FOURCC_GET (data + offset + 8);
-      stream->width = RMDEMUX_GUINT16_GET (data + offset + 12);
-      stream->height = RMDEMUX_GUINT16_GET (data + offset + 14);
-      stream->rate = RMDEMUX_GUINT16_GET (data + offset + 16);
-      stream->subformat = RMDEMUX_GUINT32_GET (data + offset + 26);
-      stream->format = RMDEMUX_GUINT32_GET (data + offset + 30);
-      stream->extra_data_size = length - (offset + 26);
-      stream->extra_data = (guint8 *) data + offset + 26;
-      /* Natural way to represent framerates here requires unsigned 32 bit
-       * numerator, which we don't have. For the nasty case, approximate...
-       */
-      {
-        guint32 numerator = RMDEMUX_GUINT16_GET (data + offset + 22) * 65536 +
-            RMDEMUX_GUINT16_GET (data + offset + 24);
-        if (numerator > G_MAXINT) {
-          stream->framerate_numerator = (gint) (numerator >> 1);
-          stream->framerate_denominator = 32768;
-        } else {
-          stream->framerate_numerator = (gint) numerator;
-          stream->framerate_denominator = 65536;
-        }
-      }
-
-      GST_DEBUG_OBJECT (rmdemux,
-          "Video stream with fourcc=%" GST_FOURCC_FORMAT
-          " width=%d height=%d rate=%d framerate=%d/%d subformat=%x format=%x extra_data_size=%d",
-          GST_FOURCC_ARGS (stream->fourcc), stream->width, stream->height,
-          stream->rate, stream->framerate_numerator,
-          stream->framerate_denominator, stream->subformat, stream->format,
-          stream->extra_data_size);
-      break;
-    case GST_RMDEMUX_STREAM_AUDIO:{
-      stream->version = RMDEMUX_GUINT16_GET (data + offset + 4);
-      GST_INFO ("stream version = %u", stream->version);
-      switch (stream->version) {
-        case 3:
-          stream->fourcc = GST_RM_AUD_14_4;
-          stream->packet_size = 20;
-          stream->rate = 8000;
-          stream->n_channels = 1;
-          stream->sample_width = 16;
-          stream->flavor = 1;
-          stream->leaf_size = 0;
-          stream->height = 0;
-          break;
-        case 4:
-          stream->flavor = RMDEMUX_GUINT16_GET (data + offset + 22);
-          stream->packet_size = RMDEMUX_GUINT32_GET (data + offset + 24);
-          /* stream->frame_size = RMDEMUX_GUINT32_GET (data + offset + 42); */
-          stream->leaf_size = RMDEMUX_GUINT16_GET (data + offset + 44);
-          stream->height = RMDEMUX_GUINT16_GET (data + offset + 40);
-          stream->rate = RMDEMUX_GUINT16_GET (data + offset + 48);
-          stream->sample_width = RMDEMUX_GUINT16_GET (data + offset + 52);
-          stream->n_channels = RMDEMUX_GUINT16_GET (data + offset + 54);
-          stream->fourcc = RMDEMUX_FOURCC_GET (data + offset + 62);
-          stream->extra_data_size = RMDEMUX_GUINT32_GET (data + offset + 69);
-          GST_DEBUG_OBJECT (rmdemux, "%u bytes of extra codec data",
-              stream->extra_data_size);
-          if (length - (offset + 73) >= stream->extra_data_size) {
-            stream->extra_data = (guint8 *) data + offset + 73;
-          } else {
-            GST_WARNING_OBJECT (rmdemux, "codec data runs beyond MDPR chunk");
-            stream->extra_data_size = 0;
-          }
-          break;
-        case 5:
-          stream->flavor = RMDEMUX_GUINT16_GET (data + offset + 22);
-          stream->packet_size = RMDEMUX_GUINT32_GET (data + offset + 24);
-          /* stream->frame_size = RMDEMUX_GUINT32_GET (data + offset + 42); */
-          stream->leaf_size = RMDEMUX_GUINT16_GET (data + offset + 44);
-          stream->height = RMDEMUX_GUINT16_GET (data + offset + 40);
-          stream->rate = RMDEMUX_GUINT16_GET (data + offset + 54);
-          stream->sample_width = RMDEMUX_GUINT16_GET (data + offset + 58);
-          stream->n_channels = RMDEMUX_GUINT16_GET (data + offset + 60);
-          stream->fourcc = RMDEMUX_FOURCC_GET (data + offset + 66);
-          stream->extra_data_size = RMDEMUX_GUINT32_GET (data + offset + 74);
-          GST_DEBUG_OBJECT (rmdemux, "%u bytes of extra codec data",
-              stream->extra_data_size);
-          if (length - (offset + 78) >= stream->extra_data_size) {
-            stream->extra_data = (guint8 *) data + offset + 78;
-          } else {
-            GST_WARNING_OBJECT (rmdemux, "codec data runs beyond MDPR chunk");
-            stream->extra_data_size = 0;
-          }
-          break;
-        default:{
-          GST_WARNING_OBJECT (rmdemux, "Unhandled audio stream version %d",
-              stream->version);
-          break;
-        }
-      }
-      /*  14_4, 28_8, cook, dnet, sipr, raac, racp, ralf, atrc */
-      GST_DEBUG_OBJECT (rmdemux,
-          "Audio stream with rate=%d sample_width=%d n_channels=%d",
-          stream->rate, stream->sample_width, stream->n_channels);
-
-      break;
-    }
-    case GST_RMDEMUX_STREAM_FILEINFO:
-    {
-      int element_nb;
-
-      /* Length of this section */
-      GST_DEBUG_OBJECT (rmdemux, "length2: 0x%08x",
-          RMDEMUX_GUINT32_GET (data + offset));
-      offset += 4;
-
-      /* Unknown : 00 00 00 00 */
-      offset += 4;
-
-      /* Number of variables that would follow (loop iterations) */
-      element_nb = RMDEMUX_GUINT32_GET (data + offset);
-      offset += 4;
-
-      while (element_nb) {
-        /* Category Id : 00 00 00 XX 00 00 */
-        offset += 6;
-
-        /* Variable Name */
-        offset += re_skip_pascal_string (data + offset);
-
-        /* Variable Value Type */
-        /*   00 00 00 00 00 => integer/boolean, preceded by length */
-        /*   00 00 00 02 00 => pascal string, preceded by length, no trailing \0 */
-        offset += 5;
-
-        /* Variable Value */
-        offset += re_skip_pascal_string (data + offset);
-
-        element_nb--;
-      }
-    }
-      break;
-    case GST_RMDEMUX_STREAM_UNKNOWN:
-    default:
-      break;
-  }
-
-  gst_rmdemux_add_stream (rmdemux, stream);
-}
-
-static guint
-gst_rmdemux_parse_indx (GstRMDemux * rmdemux, const guint8 * data, int length)
-{
-  int n;
-  int id;
-
-  n = RMDEMUX_GUINT32_GET (data);
-  id = RMDEMUX_GUINT16_GET (data + 4);
-  rmdemux->index_offset = RMDEMUX_GUINT32_GET (data + 6);
-
-  GST_DEBUG_OBJECT (rmdemux, "Number of indices=%d Stream ID=%d length=%d", n,
-      id, length);
-
-  /* Point to the next index_stream */
-  rmdemux->index_stream = gst_rmdemux_get_stream_by_id (rmdemux, id);
-
-  /* Return the length of the index */
-  return 14 * n;
-}
-
-static void
-gst_rmdemux_parse_indx_data (GstRMDemux * rmdemux, const guint8 * data,
-    int length)
-{
-  int i;
-  int n;
-  GstRMDemuxIndex *index;
-
-  /* The number of index records */
-  n = length / 14;
-
-  if (rmdemux->index_stream == NULL)
-    return;
-
-  /* don't parse the index a second time when operating pull-based and
-   * reaching the end of the file */
-  if (rmdemux->index_stream->index_length > 0) {
-    GST_DEBUG_OBJECT (rmdemux, "Already have an index for this stream");
-    return;
-  }
-
-  index = g_malloc (sizeof (GstRMDemuxIndex) * n);
-  rmdemux->index_stream->index = index;
-  rmdemux->index_stream->index_length = n;
-
-  for (i = 0; i < n; i++) {
-    index[i].timestamp = RMDEMUX_GUINT32_GET (data + 2) * GST_MSECOND;
-    index[i].offset = RMDEMUX_GUINT32_GET (data + 6);
-
-    GST_DEBUG_OBJECT (rmdemux, "Index found for timestamp=%f (at offset=%x)",
-        gst_guint64_to_gdouble (index[i].timestamp) / GST_SECOND,
-        index[i].offset);
-    data += 14;
-  }
-}
-
-static void
-gst_rmdemux_parse_data (GstRMDemux * rmdemux, const guint8 * data, int length)
-{
-  rmdemux->n_chunks = RMDEMUX_GUINT32_GET (data);
-  rmdemux->data_offset = RMDEMUX_GUINT32_GET (data + 4);
-  rmdemux->chunk_index = 0;
-  GST_DEBUG_OBJECT (rmdemux, "Data chunk found with %d packets "
-      "(next data at 0x%08x)", rmdemux->n_chunks, rmdemux->data_offset);
-}
-
-static void
-gst_rmdemux_parse_cont (GstRMDemux * rmdemux, const guint8 * data, int length)
-{
-  GstTagList *tags;
-
-  tags = gst_rm_utils_read_tags (data, length, gst_rm_utils_read_string16);
-
-  if (tags) {
-    GstTagList *old_tags = rmdemux->pending_tags;
-
-    GST_LOG_OBJECT (rmdemux, "tags: %" GST_PTR_FORMAT, tags);
-
-    rmdemux->pending_tags =
-        gst_tag_list_merge (old_tags, tags, GST_TAG_MERGE_APPEND);
-
-    gst_tag_list_unref (tags);
-    if (old_tags)
-      gst_tag_list_unref (old_tags);
-
-    gst_tag_list_set_scope (rmdemux->pending_tags, GST_TAG_SCOPE_GLOBAL);
-  }
-}
-
-static void
-gst_rmdemux_stream_clear_cached_subpackets (GstRMDemux * rmdemux,
-    GstRMDemuxStream * stream)
-{
-  if (stream->subpackets == NULL || stream->subpackets->len == 0)
-    return;
-
-  GST_DEBUG_OBJECT (rmdemux, "discarding %u previously collected subpackets",
-      stream->subpackets->len);
-  g_ptr_array_foreach (stream->subpackets, (GFunc) gst_mini_object_unref, NULL);
-  g_ptr_array_set_size (stream->subpackets, 0);
-}
-
-static GstFlowReturn
-gst_rmdemux_descramble_audio (GstRMDemux * rmdemux, GstRMDemuxStream * stream)
-{
-  GstFlowReturn ret = GST_FLOW_ERROR;
-  GstBuffer *outbuf;
-  GstMapInfo outmap;
-  guint packet_size = stream->packet_size;
-  guint height = stream->subpackets->len;
-  guint leaf_size = stream->leaf_size;
-  guint p, x;
-
-  g_assert (stream->height == height);
-
-  GST_LOG ("packet_size = %u, leaf_size = %u, height= %u", packet_size,
-      leaf_size, height);
-
-  outbuf = gst_buffer_new_and_alloc (height * packet_size);
-  gst_buffer_map (outbuf, &outmap, GST_MAP_WRITE);
-
-  for (p = 0; p < height; ++p) {
-    GstBuffer *b = g_ptr_array_index (stream->subpackets, p);
-    GstMapInfo map;
-
-    gst_buffer_map (b, &map, GST_MAP_READ);
-
-    if (p == 0) {
-      GST_BUFFER_PTS (outbuf) = GST_BUFFER_PTS (b);
-      GST_BUFFER_DTS (outbuf) = GST_BUFFER_DTS (b);
-    }
-
-    for (x = 0; x < packet_size / leaf_size; ++x) {
-      guint idx;
-
-      idx = height * x + ((height + 1) / 2) * (p % 2) + (p / 2);
-
-      /* GST_LOG ("%3u => %3u", (height * p) + x, idx); */
-      memcpy (outmap.data + leaf_size * idx, map.data + leaf_size * x,
-          leaf_size);
-    }
-    gst_buffer_unmap (b, &map);
-  }
-  gst_buffer_unmap (outbuf, &outmap);
-
-  /* some decoders, such as realaudiodec, need to be fed in packet units */
-  for (p = 0; p < height; ++p) {
-    GstBuffer *subbuf;
-
-    subbuf =
-        gst_buffer_copy_region (outbuf, GST_BUFFER_COPY_ALL, p * packet_size,
-        packet_size);
-
-    GST_LOG_OBJECT (rmdemux, "pushing buffer dts %" GST_TIME_FORMAT ", pts %"
-        GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_DTS (subbuf)),
-        GST_TIME_ARGS (GST_BUFFER_PTS (subbuf)));
-
-    if (stream->discont) {
-      GST_BUFFER_FLAG_SET (subbuf, GST_BUFFER_FLAG_DISCONT);
-      stream->discont = FALSE;
-    }
-
-    ret = gst_pad_push (stream->pad, subbuf);
-    if (ret != GST_FLOW_OK)
-      break;
-  }
-
-  gst_buffer_unref (outbuf);
-
-  gst_rmdemux_stream_clear_cached_subpackets (rmdemux, stream);
-
-  return ret;
-}
-
-static GstFlowReturn
-gst_rmdemux_descramble_dnet_audio (GstRMDemux * rmdemux,
-    GstRMDemuxStream * stream)
-{
-  GstBuffer *buf;
-
-  buf = g_ptr_array_index (stream->subpackets, 0);
-  g_ptr_array_index (stream->subpackets, 0) = NULL;
-  g_ptr_array_set_size (stream->subpackets, 0);
-
-  buf = gst_rm_utils_descramble_dnet_buffer (buf);
-
-  if (stream->discont) {
-    GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
-    stream->discont = FALSE;
-  }
-  return gst_pad_push (stream->pad, buf);
-}
-
-static GstFlowReturn
-gst_rmdemux_descramble_mp4a_audio (GstRMDemux * rmdemux,
-    GstRMDemuxStream * stream)
-{
-  GstFlowReturn res;
-  GstBuffer *buf, *outbuf;
-  guint frames, index, i;
-  GstMapInfo map;
-  GstClockTime timestamp;
-
-  res = GST_FLOW_OK;
-
-  buf = g_ptr_array_index (stream->subpackets, 0);
-  g_ptr_array_index (stream->subpackets, 0) = NULL;
-  g_ptr_array_set_size (stream->subpackets, 0);
-
-  gst_buffer_map (buf, &map, GST_MAP_READ);
-  timestamp = GST_BUFFER_PTS (buf);
-
-  frames = (map.data[1] & 0xf0) >> 4;
-  index = 2 * frames + 2;
-
-  for (i = 0; i < frames; i++) {
-    guint len = (map.data[i * 2 + 2] << 8) | map.data[i * 2 + 3];
-
-    outbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, index, len);
-    if (i == 0) {
-      GST_BUFFER_PTS (outbuf) = timestamp;
-      GST_BUFFER_DTS (outbuf) = timestamp;
-    }
-
-    index += len;
-
-    if (stream->discont) {
-      GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
-      stream->discont = FALSE;
-    }
-    res = gst_pad_push (stream->pad, outbuf);
-    if (res != GST_FLOW_OK)
-      break;
-  }
-  gst_buffer_unmap (buf, &map);
-  gst_buffer_unref (buf);
-  return res;
-}
-
-static GstFlowReturn
-gst_rmdemux_descramble_sipr_audio (GstRMDemux * rmdemux,
-    GstRMDemuxStream * stream)
-{
-  GstFlowReturn ret;
-  GstBuffer *outbuf;
-  GstMapInfo outmap;
-  guint packet_size = stream->packet_size;
-  guint height = stream->subpackets->len;
-  guint p;
-
-  g_assert (stream->height == height);
-
-  GST_LOG ("packet_size = %u, leaf_size = %u, height= %u", packet_size,
-      stream->leaf_size, height);
-
-  outbuf = gst_buffer_new_and_alloc (height * packet_size);
-  gst_buffer_map (outbuf, &outmap, GST_MAP_WRITE);
-
-  for (p = 0; p < height; ++p) {
-    GstBuffer *b = g_ptr_array_index (stream->subpackets, p);
-
-    if (p == 0) {
-      GST_BUFFER_DTS (outbuf) = GST_BUFFER_DTS (b);
-      GST_BUFFER_PTS (outbuf) = GST_BUFFER_PTS (b);
-    }
-
-    gst_buffer_extract (b, 0, outmap.data + packet_size * p, packet_size);
-  }
-  gst_buffer_unmap (outbuf, &outmap);
-
-  GST_LOG_OBJECT (rmdemux, "pushing buffer dts %" GST_TIME_FORMAT ", pts %"
-      GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_DTS (outbuf)),
-      GST_TIME_ARGS (GST_BUFFER_PTS (outbuf)));
-
-  if (stream->discont) {
-    GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
-    stream->discont = FALSE;
-  }
-
-  outbuf = gst_rm_utils_descramble_sipr_buffer (outbuf);
-
-  ret = gst_pad_push (stream->pad, outbuf);
-
-  gst_rmdemux_stream_clear_cached_subpackets (rmdemux, stream);
-
-  return ret;
-}
-
-static GstFlowReturn
-gst_rmdemux_handle_scrambled_packet (GstRMDemux * rmdemux,
-    GstRMDemuxStream * stream, GstBuffer * buf, gboolean keyframe)
-{
-  GstFlowReturn ret;
-
-  if (stream->subpackets == NULL)
-    stream->subpackets = g_ptr_array_sized_new (stream->subpackets_needed);
-
-  GST_LOG ("Got subpacket %u/%u, len=%" G_GSIZE_FORMAT ", key=%d",
-      stream->subpackets->len + 1, stream->subpackets_needed,
-      gst_buffer_get_size (buf), keyframe);
-
-  if (keyframe && stream->subpackets->len > 0) {
-    gst_rmdemux_stream_clear_cached_subpackets (rmdemux, stream);
-  }
-
-  g_ptr_array_add (stream->subpackets, buf);
-
-  if (stream->subpackets->len < stream->subpackets_needed)
-    return GST_FLOW_OK;
-
-  g_assert (stream->subpackets->len >= 1);
-
-  switch (stream->fourcc) {
-    case GST_RM_AUD_DNET:
-      ret = gst_rmdemux_descramble_dnet_audio (rmdemux, stream);
-      break;
-    case GST_RM_AUD_COOK:
-    case GST_RM_AUD_ATRC:
-      ret = gst_rmdemux_descramble_audio (rmdemux, stream);
-      break;
-    case GST_RM_AUD_RAAC:
-    case GST_RM_AUD_RACP:
-      ret = gst_rmdemux_descramble_mp4a_audio (rmdemux, stream);
-      break;
-    case GST_RM_AUD_SIPR:
-      ret = gst_rmdemux_descramble_sipr_audio (rmdemux, stream);
-      break;
-    default:
-      ret = GST_FLOW_ERROR;
-      g_assert_not_reached ();
-  }
-
-  return ret;
-}
-
-#define PARSE_NUMBER(data, size, number, label) \
-G_STMT_START {                                  \
-  if (size < 2)                                 \
-    goto label;                                 \
-  number = GST_READ_UINT16_BE (data);           \
-  if (!(number & 0xc000)) {                     \
-    if (size < 4)                               \
-      goto label;                               \
-    number = GST_READ_UINT32_BE (data);         \
-    data += 4;                                  \
-    size -= 4;                                  \
-  } else {                                      \
-    number &= 0x3fff;                           \
-    data += 2;                                  \
-    size -= 2;                                  \
-  }                                             \
-} G_STMT_END
-
-static GstFlowReturn
-gst_rmdemux_parse_video_packet (GstRMDemux * rmdemux, GstRMDemuxStream * stream,
-    GstBuffer * in, guint offset, guint16 version,
-    GstClockTime timestamp, gboolean key)
-{
-  GstFlowReturn ret;
-  GstMapInfo map;
-  const guint8 *data;
-  gsize size;
-
-  gst_buffer_map (in, &map, GST_MAP_READ);
-
-  if (map.size < offset)
-    goto not_enough_data;
-
-  data = map.data + offset;
-  size = map.size - offset;
-
-  /* if size <= 2, we want this method to return the same GstFlowReturn as it
-   * was previously for that given stream. */
-  ret = GST_PAD_LAST_FLOW_RETURN (stream->pad);
-
-  while (size > 2) {
-    guint8 pkg_header;
-    guint pkg_offset;
-    guint pkg_length;
-    guint pkg_subseq = 0, pkg_seqnum = G_MAXUINT;
-    guint fragment_size;
-    GstBuffer *fragment;
-
-    pkg_header = *data++;
-    size--;
-
-    /* packet header
-     * bit 7: 1=last block in block chain
-     * bit 6: 1=short header (only one block?)
-     */
-    if ((pkg_header & 0xc0) == 0x40) {
-      /* skip unknown byte */
-      data++;
-      size--;
-      pkg_offset = 0;
-      pkg_length = size;
-    } else {
-      if ((pkg_header & 0x40) == 0) {
-        pkg_subseq = (*data++) & 0x7f;
-        size--;
-      } else {
-        pkg_subseq = 0;
-      }
-
-      /* length */
-      PARSE_NUMBER (data, size, pkg_length, not_enough_data);
-
-      /* offset */
-      PARSE_NUMBER (data, size, pkg_offset, not_enough_data);
-
-      /* seqnum */
-      if (size < 1)
-        goto not_enough_data;
-
-      pkg_seqnum = *data++;
-      size--;
-    }
-
-    GST_DEBUG_OBJECT (rmdemux,
-        "seq %d, subseq %d, offset %d, length %d, size %" G_GSIZE_FORMAT
-        ", header %02x", pkg_seqnum, pkg_subseq, pkg_offset, pkg_length, size,
-        pkg_header);
-
-    /* calc size of fragment */
-    if ((pkg_header & 0xc0) == 0x80) {
-      fragment_size = pkg_offset;
-    } else {
-      if ((pkg_header & 0xc0) == 0)
-        fragment_size = size;
-      else
-        fragment_size = pkg_length;
-    }
-    GST_DEBUG_OBJECT (rmdemux, "fragment size %d", fragment_size);
-
-    if (map.size < (data - map.data) + fragment_size)
-      goto not_enough_data;
-
-    /* get the fragment */
-    fragment =
-        gst_buffer_copy_region (in, GST_BUFFER_COPY_ALL, data - map.data,
-        fragment_size);
-
-    if (pkg_subseq == 1) {
-      GST_DEBUG_OBJECT (rmdemux, "start new fragment");
-      gst_adapter_clear (stream->adapter);
-      stream->frag_current = 0;
-      stream->frag_count = 0;
-      stream->frag_length = pkg_length;
-    } else if (pkg_subseq == 0) {
-      GST_DEBUG_OBJECT (rmdemux, "non fragmented packet");
-      stream->frag_current = 0;
-      stream->frag_count = 0;
-      stream->frag_length = fragment_size;
-    }
-
-    /* put fragment in adapter */
-    gst_adapter_push (stream->adapter, fragment);
-    stream->frag_offset[stream->frag_count] = stream->frag_current;
-    stream->frag_current += fragment_size;
-    stream->frag_count++;
-
-    if (stream->frag_count > MAX_FRAGS)
-      goto too_many_fragments;
-
-    GST_DEBUG_OBJECT (rmdemux, "stored fragment in adapter %d/%d",
-        stream->frag_current, stream->frag_length);
-
-    /* flush fragment when complete */
-    if (stream->frag_current >= stream->frag_length) {
-      GstBuffer *out;
-      GstMapInfo outmap;
-      guint8 *outdata;
-      guint header_size;
-      gint i, avail;
-
-      /* calculate header size, which is:
-       * 1 byte for the number of fragments - 1
-       * for each fragment:
-       *   4 bytes 0x00000001 little endian
-       *   4 bytes fragment offset
-       *
-       * This is also the matroska header for realvideo, the decoder needs the
-       * fragment offsets, both in ffmpeg and real .so, so we just give it that
-       * in front of the data.
-       */
-      header_size = 1 + (8 * (stream->frag_count));
-
-      GST_DEBUG_OBJECT (rmdemux,
-          "fragmented completed. count %d, header_size %u", stream->frag_count,
-          header_size);
-
-      avail = gst_adapter_available (stream->adapter);
-
-      out = gst_buffer_new_and_alloc (header_size + avail);
-      gst_buffer_map (out, &outmap, GST_MAP_WRITE);
-      outdata = outmap.data;
-
-      /* create header */
-      *outdata++ = stream->frag_count - 1;
-      for (i = 0; i < stream->frag_count; i++) {
-        GST_WRITE_UINT32_LE (outdata, 0x00000001);
-        outdata += 4;
-        GST_WRITE_UINT32_LE (outdata, stream->frag_offset[i]);
-        outdata += 4;
-      }
-
-      /* copy packet data after the header now */
-      gst_adapter_copy (stream->adapter, outdata, 0, avail);
-      gst_adapter_flush (stream->adapter, avail);
-
-      stream->frag_current = 0;
-      stream->frag_count = 0;
-      stream->frag_length = 0;
-
-      if (timestamp != -1) {
-        if (rmdemux->first_ts != -1 && timestamp > rmdemux->first_ts)
-          timestamp -= rmdemux->first_ts;
-        else
-          timestamp = 0;
-
-        if (rmdemux->base_ts != -1)
-          timestamp += rmdemux->base_ts;
-      }
-      gst_buffer_unmap (out, &outmap);
-
-      /* video has DTS */
-      GST_BUFFER_DTS (out) = timestamp;
-      GST_BUFFER_PTS (out) = GST_CLOCK_TIME_NONE;
-
-      GST_LOG_OBJECT (rmdemux, "pushing timestamp %" GST_TIME_FORMAT,
-          GST_TIME_ARGS (timestamp));
-
-      if (stream->discont) {
-        GST_BUFFER_FLAG_SET (out, GST_BUFFER_FLAG_DISCONT);
-        stream->discont = FALSE;
-      }
-
-      if (!key) {
-        GST_BUFFER_FLAG_SET (out, GST_BUFFER_FLAG_DELTA_UNIT);
-      }
-
-      ret = gst_pad_push (stream->pad, out);
-      ret = gst_flow_combiner_update_flow (rmdemux->flowcombiner, ret);
-      if (ret != GST_FLOW_OK)
-        break;
-
-      timestamp = GST_CLOCK_TIME_NONE;
-    }
-    data += fragment_size;
-    size -= fragment_size;
-  }
-  GST_DEBUG_OBJECT (rmdemux, "%" G_GSIZE_FORMAT " bytes left", size);
-
-done:
-  gst_buffer_unmap (in, &map);
-  gst_buffer_unref (in);
-
-  return ret;
-
-  /* ERRORS */
-not_enough_data:
-  {
-    GST_ELEMENT_WARNING (rmdemux, STREAM, DECODE, ("Skipping bad packet."),
-        (NULL));
-    ret = GST_FLOW_OK;
-    goto done;
-  }
-too_many_fragments:
-  {
-    GST_ELEMENT_ERROR (rmdemux, STREAM, DECODE,
-        ("Got more fragments (%u) than can be handled (%u)",
-            stream->frag_count, MAX_FRAGS), (NULL));
-    ret = GST_FLOW_ERROR;
-    goto done;
-  }
-}
-
-static GstFlowReturn
-gst_rmdemux_parse_audio_packet (GstRMDemux * rmdemux, GstRMDemuxStream * stream,
-    GstBuffer * in, guint offset, guint16 version,
-    GstClockTime timestamp, gboolean key)
-{
-  GstFlowReturn ret;
-  GstBuffer *buffer;
-
-  if (gst_buffer_get_size (in) < offset)
-    goto not_enough_data;
-
-  buffer = gst_buffer_copy_region (in, GST_BUFFER_COPY_MEMORY, offset, -1);
-
-  if (rmdemux->first_ts != -1 && timestamp > rmdemux->first_ts)
-    timestamp -= rmdemux->first_ts;
-  else
-    timestamp = 0;
-
-  if (rmdemux->base_ts != -1)
-    timestamp += rmdemux->base_ts;
-
-  GST_BUFFER_PTS (buffer) = timestamp;
-  GST_BUFFER_DTS (buffer) = timestamp;
-
-  if (stream->needs_descrambling) {
-    GST_LOG_OBJECT (rmdemux, "descramble timestamp %" GST_TIME_FORMAT,
-        GST_TIME_ARGS (timestamp));
-    ret = gst_rmdemux_handle_scrambled_packet (rmdemux, stream, buffer, key);
-  } else {
-    GST_LOG_OBJECT (rmdemux,
-        "Pushing buffer of size %" G_GSIZE_FORMAT ", timestamp %"
-        GST_TIME_FORMAT "to pad %s", gst_buffer_get_size (buffer),
-        GST_TIME_ARGS (timestamp), GST_PAD_NAME (stream->pad));
-
-    if (stream->discont) {
-      GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
-      stream->discont = FALSE;
-    }
-    ret = gst_pad_push (stream->pad, buffer);
-  }
-
-done:
-  gst_buffer_unref (in);
-
-  return ret;
-
-  /* ERRORS */
-not_enough_data:
-  {
-    GST_ELEMENT_WARNING (rmdemux, STREAM, DECODE, ("Skipping bad packet."),
-        (NULL));
-    ret = GST_FLOW_OK;
-    goto done;
-  }
-}
-
-static GstFlowReturn
-gst_rmdemux_parse_packet (GstRMDemux * rmdemux, GstBuffer * in, guint16 version)
-{
-  guint16 id;
-  GstRMDemuxStream *stream;
-  gsize size, offset;
-  GstFlowReturn cret, ret;
-  GstClockTime timestamp;
-  gboolean key;
-  GstMapInfo map;
-  guint8 *data;
-  guint8 flags;
-  guint32 ts;
-
-  gst_buffer_map (in, &map, GST_MAP_READ);
-  data = map.data;
-  size = map.size;
-
-  if (size < 4 + 6 + 1 + 2)
-    goto not_enough_data;
-
-  /* stream number */
-  id = RMDEMUX_GUINT16_GET (data);
-
-  stream = gst_rmdemux_get_stream_by_id (rmdemux, id);
-  if (!stream || !stream->pad)
-    goto unknown_stream;
-
-  /* timestamp in Msec */
-  ts = RMDEMUX_GUINT32_GET (data + 2);
-  timestamp = ts * GST_MSECOND;
-
-  rmdemux->segment.position = timestamp;
-
-  GST_LOG_OBJECT (rmdemux, "Parsing a packet for stream=%d, timestamp=%"
-      GST_TIME_FORMAT ", size %" G_GSIZE_FORMAT ", version=%d, ts=%u", id,
-      GST_TIME_ARGS (timestamp), size, version, ts);
-
-  if (rmdemux->first_ts == GST_CLOCK_TIME_NONE) {
-    GST_DEBUG_OBJECT (rmdemux, "First timestamp: %" GST_TIME_FORMAT,
-        GST_TIME_ARGS (timestamp));
-    rmdemux->first_ts = timestamp;
-  }
-
-  /* skip stream_id and timestamp */
-  data += (2 + 4);
-  size -= (2 + 4);
-
-  /* get flags */
-  flags = GST_READ_UINT8 (data + 1);
-
-  data += 2;
-  size -= 2;
-
-  /* version 1 has an extra byte */
-  if (version == 1) {
-    if (size < 1)
-      goto not_enough_data;
-
-    data += 1;
-    size -= 1;
-  }
-  offset = data - map.data;
-  gst_buffer_unmap (in, &map);
-
-  key = (flags & 0x02) != 0;
-  GST_DEBUG_OBJECT (rmdemux, "flags %d, Keyframe %d", flags, key);
-
-  if (rmdemux->need_newsegment) {
-    GstEvent *event;
-
-    event = gst_event_new_segment (&rmdemux->segment);
-
-    GST_DEBUG_OBJECT (rmdemux, "sending NEWSEGMENT event, segment.start= %"
-        GST_TIME_FORMAT, GST_TIME_ARGS (rmdemux->segment.start));
-
-    gst_rmdemux_send_event (rmdemux, event);
-    rmdemux->need_newsegment = FALSE;
-
-    if (rmdemux->pending_tags != NULL) {
-      gst_rmdemux_send_event (rmdemux,
-          gst_event_new_tag (rmdemux->pending_tags));
-      rmdemux->pending_tags = NULL;
-    }
-  }
-
-  if (stream->pending_tags != NULL) {
-    GST_LOG_OBJECT (stream->pad, "tags %" GST_PTR_FORMAT, stream->pending_tags);
-    gst_pad_push_event (stream->pad, gst_event_new_tag (stream->pending_tags));
-    stream->pending_tags = NULL;
-  }
-
-  if ((rmdemux->offset + size) <= stream->seek_offset) {
-    GST_DEBUG_OBJECT (rmdemux,
-        "Stream %d is skipping: seek_offset=%d, offset=%d, size=%"
-        G_GSIZE_FORMAT, stream->id, stream->seek_offset, rmdemux->offset, size);
-    cret = GST_FLOW_OK;
-    gst_buffer_unref (in);
-    goto beach;
-  }
-
-  /* do special headers */
-  if (stream->subtype == GST_RMDEMUX_STREAM_VIDEO) {
-    ret =
-        gst_rmdemux_parse_video_packet (rmdemux, stream, in, offset,
-        version, timestamp, key);
-  } else if (stream->subtype == GST_RMDEMUX_STREAM_AUDIO) {
-    ret =
-        gst_rmdemux_parse_audio_packet (rmdemux, stream, in, offset,
-        version, timestamp, key);
-  } else {
-    gst_buffer_unref (in);
-    ret = GST_FLOW_OK;
-  }
-
-  cret = gst_flow_combiner_update_pad_flow (rmdemux->flowcombiner, stream->pad,
-      ret);
-
-beach:
-  return cret;
-
-  /* ERRORS */
-unknown_stream:
-  {
-    GST_WARNING_OBJECT (rmdemux, "No stream for stream id %d in parsing "
-        "data packet", id);
-    gst_buffer_unmap (in, &map);
-    gst_buffer_unref (in);
-    return GST_FLOW_OK;
-  }
-
-  /* ERRORS */
-not_enough_data:
-  {
-    GST_ELEMENT_WARNING (rmdemux, STREAM, DECODE, ("Skipping bad packet."),
-        (NULL));
-    gst_buffer_unmap (in, &map);
-    gst_buffer_unref (in);
-    return GST_FLOW_OK;
-  }
-}
diff --git a/gst/realmedia/rmdemux.h b/gst/realmedia/rmdemux.h
deleted file mode 100644 (file)
index 40e1a0b..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-/* GStreamer RealMedia demuxer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- *
- * 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_RMDEMUX_H__
-#define __GST_RMDEMUX_H__
-
-#include <gst/gst.h>
-#include <gst/base/gstadapter.h>
-#include <gst/base/gstflowcombiner.h>
-#include <gst/pbutils/descriptions.h>
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_RMDEMUX \
-  (gst_rmdemux_get_type())
-#define GST_RMDEMUX(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RMDEMUX,GstRMDemux))
-#define GST_RMDEMUX_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RMDEMUX,GstRMDemuxClass))
-#define GST_IS_RMDEMUX(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RMDEMUX))
-#define GST_IS_RMDEMUX_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RMDEMUX))
-
-typedef enum
-{
-  RMDEMUX_STATE_NULL,
-  RMDEMUX_STATE_HEADER,
-  RMDEMUX_STATE_HEADER_UNKNOWN,
-  RMDEMUX_STATE_HEADER_RMF,
-  RMDEMUX_STATE_HEADER_PROP,
-  RMDEMUX_STATE_HEADER_MDPR,
-  RMDEMUX_STATE_HEADER_INDX,
-  RMDEMUX_STATE_HEADER_DATA,
-  RMDEMUX_STATE_HEADER_CONT,
-  RMDEMUX_STATE_HEADER_SEEKING,
-  RMDEMUX_STATE_SEEKING,
-  RMDEMUX_STATE_DATA_PACKET,
-  RMDEMUX_STATE_SEEKING_EOS,
-  RMDEMUX_STATE_EOS,
-  RMDEMUX_STATE_INDX_DATA
-} GstRMDemuxState;
-
-typedef enum
-{
-  RMDEMUX_LOOP_STATE_HEADER,
-  RMDEMUX_LOOP_STATE_INDEX,
-  RMDEMUX_LOOP_STATE_DATA
-} GstRMDemuxLoopState;
-
-typedef enum
-{
-  GST_RMDEMUX_STREAM_UNKNOWN,
-  GST_RMDEMUX_STREAM_VIDEO,
-  GST_RMDEMUX_STREAM_AUDIO,
-  GST_RMDEMUX_STREAM_FILEINFO
-} GstRMDemuxStreamType;
-
-typedef struct _GstRMDemux GstRMDemux;
-typedef struct _GstRMDemuxClass GstRMDemuxClass;
-typedef struct _GstRMDemuxStream GstRMDemuxStream;
-
-struct _GstRMDemux {
-  GstElement element;
-
-  /* pads */
-  GstPad *sinkpad;
-
-  gboolean have_group_id;
-  guint group_id;
-
-  GSList *streams;
-  guint n_video_streams;
-  guint n_audio_streams;
-  GstAdapter *adapter;
-  gboolean have_pads;
-
-  GstFlowCombiner *flowcombiner;
-
-  guint32 timescale;
-  guint64 duration;
-  guint32 avg_packet_size;
-  guint32 index_offset;
-  guint32 data_offset;
-  guint32 num_packets;
-
-  guint offset;
-  gboolean seekable;
-  guint32 seek_seqnum;
-
-  GstRMDemuxState state;
-  GstRMDemuxLoopState loop_state;
-  GstRMDemuxStream *index_stream;
-
-  /* playback start/stop positions */
-  GstSegment segment;
-  gboolean segment_running;
-  gboolean running;
-
-  /* Whether we need to send a newsegment event */
-  gboolean need_newsegment;
-
-  /* Current timestamp */
-  GstClockTime cur_timestamp;
-
-  /* First timestamp */
-  GstClockTime base_ts;
-  GstClockTime first_ts;
-
-  int n_chunks;
-  int chunk_index;
-
-  guint32 object_id;
-  guint32 size;
-  guint16 object_version;
-
-  /* container tags for all streams */
-  GstTagList *pending_tags;
-};
-
-struct _GstRMDemuxClass {
-  GstElementClass parent_class;
-};
-
-/* RealMedia VideoCodec FOURCC codes */
-#define GST_RM_VDO_RV10 GST_MAKE_FOURCC('R','V','1','0') // RealVideo 1
-#define GST_RM_VDO_RV20 GST_MAKE_FOURCC('R','V','2','0') // RealVideo G2
-#define GST_RM_VDO_RV30 GST_MAKE_FOURCC('R','V','3','0') // RealVideo 8
-#define GST_RM_VDO_RV40 GST_MAKE_FOURCC('R','V','4','0') // RealVideo 9+10
-
-/* RealMedia AudioCodec FOURCC codes */
-#define GST_RM_AUD_14_4 GST_MAKE_FOURCC('1','4','_','4') // 14.4 Audio Codec
-#define GST_RM_AUD_28_8 GST_MAKE_FOURCC('2','8','_','8') // 28.8 Audio Codec
-#define GST_RM_AUD_COOK GST_MAKE_FOURCC('c','o','o','k') // Cooker G2 Audio Codec
-#define GST_RM_AUD_DNET GST_MAKE_FOURCC('d','n','e','t') // DolbyNet Audio Codec (low bitrate Dolby AC3)
-#define GST_RM_AUD_SIPR GST_MAKE_FOURCC('s','i','p','r') // Sipro/ACELP.NET Voice Codec
-#define GST_RM_AUD_RAAC GST_MAKE_FOURCC('r','a','a','c') // LE-AAC Audio Codec
-#define GST_RM_AUD_RACP GST_MAKE_FOURCC('r','a','c','p') // HE-AAC Audio Codec
-#define GST_RM_AUD_RALF GST_MAKE_FOURCC('r','a','l','f') // RealAudio Lossless
-#define GST_RM_AUD_ATRC GST_MAKE_FOURCC('a','t','r','c') // Sony ATRAC3 Audio Codec
-
-#define GST_RM_AUD_xRA4 GST_MAKE_FOURCC('.','r','a','4') // Not a real audio codec
-#define GST_RM_AUD_xRA5 GST_MAKE_FOURCC('.','r','a','5') // Not a real audio codec
-
-GST_ELEMENT_REGISTER_DECLARE (rmdemux);
-
-G_END_DECLS
-
-#endif /* __GST_RMDEMUX_H__ */
diff --git a/gst/realmedia/rmutils.c b/gst/realmedia/rmutils.c
deleted file mode 100644 (file)
index c9bc098..0000000
+++ /dev/null
@@ -1,294 +0,0 @@
-/* GStreamer RealMedia utility functions
- * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include "rmutils.h"
-
-gchar *
-gst_rm_utils_read_string8 (const guint8 * data, guint datalen,
-    guint * p_total_len)
-{
-  gint length;
-
-  if (p_total_len)
-    *p_total_len = 0;
-
-  if (datalen < 1)
-    return NULL;
-
-  length = GST_READ_UINT8 (data);
-  if (datalen < (1 + length))
-    return NULL;
-
-  if (p_total_len)
-    *p_total_len = 1 + length;
-
-  return g_strndup ((gchar *) data + 1, length);
-}
-
-gchar *
-gst_rm_utils_read_string16 (const guint8 * data, guint datalen,
-    guint * p_total_len)
-{
-  gint length;
-
-  if (p_total_len)
-    *p_total_len = 0;
-
-  if (datalen < 2)
-    return NULL;
-
-  length = GST_READ_UINT16_BE (data);
-  if (datalen < (2 + length))
-    return NULL;
-
-  if (p_total_len)
-    *p_total_len = 2 + length;
-
-  return g_strndup ((gchar *) data + 2, length);
-}
-
-GstTagList *
-gst_rm_utils_read_tags (const guint8 * data, guint datalen,
-    GstRmUtilsStringReadFunc read_string_func)
-{
-  const gchar *gst_tags[] = { GST_TAG_TITLE, GST_TAG_ARTIST,
-    GST_TAG_COPYRIGHT, GST_TAG_COMMENT
-  };
-  GstTagList *tags;
-  guint i;
-
-  g_assert (read_string_func != NULL);
-
-  GST_DEBUG ("File Content : (CONT) len = %d", datalen);
-
-  tags = gst_tag_list_new_empty ();
-
-  for (i = 0; i < G_N_ELEMENTS (gst_tags); ++i) {
-    gchar *str = NULL;
-    guint total_length = 0;
-
-    str = read_string_func (data, datalen, &total_length);
-    data += total_length;
-    datalen -= total_length;
-
-    if (str != NULL && !g_utf8_validate (str, -1, NULL)) {
-      const gchar *encoding;
-      gchar *tmp;
-
-      encoding = g_getenv ("GST_TAG_ENCODING");
-      if (encoding == NULL || *encoding == '\0') {
-        if (g_get_charset (&encoding))
-          encoding = "ISO-8859-15";
-      }
-      GST_DEBUG ("converting tag from %s to UTF-8", encoding);
-      tmp = g_convert_with_fallback (str, -1, "UTF-8", encoding, (gchar *) "*",
-          NULL, NULL, NULL);
-      g_free (str);
-      str = tmp;
-    }
-
-    GST_DEBUG ("%s = %s", gst_tags[i], GST_STR_NULL (str));
-    if (str != NULL && *str != '\0') {
-      gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, gst_tags[i], str, NULL);
-    }
-    g_free (str);
-  }
-
-  if (gst_tag_list_n_tags (tags) > 0)
-    return tags;
-
-  gst_tag_list_unref (tags);
-  return NULL;
-}
-
-GstBuffer *
-gst_rm_utils_descramble_dnet_buffer (GstBuffer * buf)
-{
-  GstMapInfo map;
-  guint8 *data, *end, tmp;
-
-  buf = gst_buffer_make_writable (buf);
-
-  /* dnet = byte-order swapped AC3 */
-  gst_buffer_map (buf, &map, GST_MAP_READWRITE);
-  data = map.data;
-  end = data + map.size;
-  while ((data + 1) < end) {
-    /* byte-swap */
-    tmp = data[0];
-    data[0] = data[1];
-    data[1] = tmp;
-    data += sizeof (guint16);
-  }
-  gst_buffer_unmap (buf, &map);
-  return buf;
-}
-
-static void
-gst_rm_utils_swap_nibbles (guint8 * data, gint idx1, gint idx2, gint len)
-{
-  guint8 *d1, *d2, tmp1 = 0, tmp2, tmp1n, tmp2n;
-
-  if ((idx2 & 1) && !(idx1 & 1)) {
-    /* align destination to a byte by swapping the indexes */
-    tmp1 = idx1;
-    idx1 = idx2;
-    idx2 = tmp1;
-  }
-  d1 = data + (idx1 >> 1);
-  d2 = data + (idx2 >> 1);
-
-  /* check if we have aligned offsets and we can copy bytes */
-  if ((idx1 & 1) == (idx2 & 1)) {
-    if (idx1 & 1) {
-      /* swap first nibble */
-      tmp1 = *d1;
-      tmp2 = *d2;
-      *d1++ = (tmp2 & 0xf0) | (tmp1 & 0x0f);
-      *d2++ = (tmp1 & 0xf0) | (tmp2 & 0x0f);
-      len--;
-    }
-    for (; len > 1; len -= 2) {
-      /* swap 2 nibbles */
-      tmp1 = *d1;
-      *d1++ = *d2;
-      *d2++ = tmp1;
-    }
-    if (len) {
-      /* swap leftover nibble */
-      tmp1 = *d1;
-      tmp2 = *d2;
-      *d1 = (tmp2 & 0x0f) | (tmp1 & 0xf0);
-      *d2 = (tmp1 & 0x0f) | (tmp2 & 0xf0);
-    }
-  } else {
-    /* preload nibbles from source */
-    tmp2n = *d1;
-    tmp2 = *d2;
-
-    for (; len > 1; len -= 2) {
-      /* assemble nibbles */
-      *d1++ = (tmp2n & 0x0f) | (tmp2 << 4);
-      tmp1n = *d1;
-      *d2++ = (tmp1n << 4) | (tmp1 >> 4);
-
-      tmp1 = tmp1n;
-      tmp2n = (tmp2 >> 4);
-      tmp2 = *d2;
-    }
-    if (len) {
-      /* last leftover */
-      *d1 = (tmp2 << 4) | (tmp2n & 0x0f);
-      *d2 = (tmp1 >> 4) | (tmp2 & 0xf0);
-    } else {
-      *d1 = (tmp1 & 0xf0) | (tmp2n);
-    }
-  }
-}
-
-static const gint sipr_swap_index[38][2] = {
-  {0, 63}, {1, 22}, {2, 44}, {3, 90},
-  {5, 81}, {7, 31}, {8, 86}, {9, 58},
-  {10, 36}, {12, 68}, {13, 39}, {14, 73},
-  {15, 53}, {16, 69}, {17, 57}, {19, 88},
-  {20, 34}, {21, 71}, {24, 46}, {25, 94},
-  {26, 54}, {28, 75}, {29, 50}, {32, 70},
-  {33, 92}, {35, 74}, {38, 85}, {40, 56},
-  {42, 87}, {43, 65}, {45, 59}, {48, 79},
-  {49, 93}, {51, 89}, {55, 95}, {61, 76},
-  {67, 83}, {77, 80}
-};
-
-GstBuffer *
-gst_rm_utils_descramble_sipr_buffer (GstBuffer * buf)
-{
-  GstMapInfo map;
-  gint n, bs;
-  gsize size;
-
-  size = gst_buffer_get_size (buf);
-
-  /* split the packet in 96 blocks of nibbles */
-  bs = size * 2 / 96;
-  if (bs == 0)
-    return buf;
-
-  buf = gst_buffer_make_writable (buf);
-
-  gst_buffer_map (buf, &map, GST_MAP_WRITE);
-
-  /* we need to perform 38 swaps on the blocks */
-  for (n = 0; n < 38; n++) {
-    gint idx1, idx2;
-
-    /* get the indexes of the blocks of nibbles that need swapping */
-    idx1 = bs * sipr_swap_index[n][0];
-    idx2 = bs * sipr_swap_index[n][1];
-
-    /* swap the blocks */
-    gst_rm_utils_swap_nibbles (map.data, idx1, idx2, bs);
-  }
-  gst_buffer_unmap (buf, &map);
-
-  return buf;
-}
-
-void
-gst_rm_utils_run_tests (void)
-{
-#if 0
-  guint8 tab1[] = { 0x10, 0x32, 0x54, 0x76, 0x98, 0xba, 0xdc, 0xfe };
-  guint8 tab2[8];
-
-  memcpy (tab2, tab1, 8);
-  gst_util_dump_mem (tab2, 8);
-
-  gst_rm_utils_swap_nibbles (tab2, 0, 8, 4);
-  gst_util_dump_mem (tab2, 8);
-  memcpy (tab2, tab1, 8);
-  gst_rm_utils_swap_nibbles (tab2, 0, 8, 5);
-  gst_util_dump_mem (tab2, 8);
-
-  memcpy (tab2, tab1, 8);
-  gst_rm_utils_swap_nibbles (tab2, 1, 8, 4);
-  gst_util_dump_mem (tab2, 8);
-  memcpy (tab2, tab1, 8);
-  gst_rm_utils_swap_nibbles (tab2, 1, 8, 5);
-  gst_util_dump_mem (tab2, 8);
-
-  memcpy (tab2, tab1, 8);
-  gst_rm_utils_swap_nibbles (tab2, 0, 9, 4);
-  gst_util_dump_mem (tab2, 8);
-  memcpy (tab2, tab1, 8);
-  gst_rm_utils_swap_nibbles (tab2, 0, 9, 5);
-  gst_util_dump_mem (tab2, 8);
-
-  memcpy (tab2, tab1, 8);
-  gst_rm_utils_swap_nibbles (tab2, 1, 9, 4);
-  gst_util_dump_mem (tab2, 8);
-  memcpy (tab2, tab1, 8);
-  gst_rm_utils_swap_nibbles (tab2, 1, 9, 5);
-  gst_util_dump_mem (tab2, 8);
-#endif
-}
diff --git a/gst/realmedia/rmutils.h b/gst/realmedia/rmutils.h
deleted file mode 100644 (file)
index cf8bbb5..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/* GStreamer RealMedia utility functions
- * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
- *
- * 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_RM_UTILS_H__
-#define __GST_RM_UTILS_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-typedef gchar * (*GstRmUtilsStringReadFunc) (const guint8 * data, guint datalen, guint * p_strlen);
-
-gchar         *gst_rm_utils_read_string8  (const guint8 * data,
-                                           guint          datalen,
-                                           guint        * p_totallen);
-
-gchar         *gst_rm_utils_read_string16 (const guint8 * data,
-                                           guint          datalen,
-                                           guint        * p_totallen);
-
-GstTagList    *gst_rm_utils_read_tags     (const guint8            * data,
-                                           guint                     datalen,
-                                           GstRmUtilsStringReadFunc  func);
-
-GstBuffer     *gst_rm_utils_descramble_dnet_buffer (GstBuffer * buf);
-GstBuffer     *gst_rm_utils_descramble_sipr_buffer (GstBuffer * buf);
-
-void gst_rm_utils_run_tests (void);
-
-
-G_END_DECLS
-
-#endif /* __GST_RM_UTILS_H__ */
-
diff --git a/gst/realmedia/rtspreal.c b/gst/realmedia/rtspreal.c
deleted file mode 100644 (file)
index 5804747..0000000
+++ /dev/null
@@ -1,735 +0,0 @@
-/* GStreamer
- * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.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.
- */
-/* Element-Checklist-Version: 5 */
-
-/**
- * SECTION:element-rtspreal
- * @title: rtspreal
- *
- * A RealMedia RTSP extension
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <gst/rtsp/gstrtspextension.h>
-
-#include "realhash.h"
-#include "rtspreal.h"
-#include "asmrules.h"
-
-GST_DEBUG_CATEGORY_STATIC (rtspreal_debug);
-#define GST_CAT_DEFAULT (rtspreal_debug)
-
-#define SERVER_PREFIX "RealServer"
-#define DEFAULT_BANDWIDTH      "10485800"
-
-static GstRTSPResult
-rtsp_ext_real_get_transports (GstRTSPExtension * ext,
-    GstRTSPLowerTrans protocols, gchar ** transport)
-{
-  GstRTSPReal *ctx = (GstRTSPReal *) ext;
-  GString *str;
-
-  if (!ctx->isreal)
-    return GST_RTSP_OK;
-
-  GST_DEBUG_OBJECT (ext, "generating transports for %d", protocols);
-
-  str = g_string_new ("");
-
-  /*
-     if (protocols & GST_RTSP_LOWER_TRANS_UDP_MCAST) {
-     g_string_append (str, "x-real-rdt/mcast;client_port=%%u1;mode=play,");
-     }
-     if (protocols & GST_RTSP_LOWER_TRANS_UDP) {
-     g_string_append (str, "x-real-rdt/udp;client_port=%%u1;mode=play,");
-     g_string_append (str, "x-pn-tng/udp;client_port=%%u1;mode=play,");
-     }
-   */
-  if (protocols & GST_RTSP_LOWER_TRANS_TCP) {
-    g_string_append (str, "x-real-rdt/tcp;mode=play,");
-    g_string_append (str, "x-pn-tng/tcp;mode=play,");
-  }
-
-  /* if we added something, remove trailing ',' */
-  if (str->len > 0)
-    g_string_truncate (str, str->len - 1);
-
-  *transport = g_string_free (str, FALSE);
-
-  return GST_RTSP_OK;
-}
-
-static GstRTSPResult
-rtsp_ext_real_before_send (GstRTSPExtension * ext, GstRTSPMessage * request)
-{
-  GstRTSPReal *ctx = (GstRTSPReal *) ext;
-
-  switch (request->type_data.request.method) {
-    case GST_RTSP_OPTIONS:
-    {
-      gst_rtsp_message_add_header (request, GST_RTSP_HDR_USER_AGENT,
-          //"RealMedia Player (" GST_PACKAGE_NAME ")");
-          "RealMedia Player Version 6.0.9.1235 (linux-2.0-libc6-i386-gcc2.95)");
-      gst_rtsp_message_add_header (request, GST_RTSP_HDR_CLIENT_CHALLENGE,
-          "9e26d33f2984236010ef6253fb1887f7");
-      gst_rtsp_message_add_header (request, GST_RTSP_HDR_COMPANY_ID,
-          "KnKV4M4I/B2FjJ1TToLycw==");
-      gst_rtsp_message_add_header (request, GST_RTSP_HDR_GUID,
-          "00000000-0000-0000-0000-000000000000");
-      gst_rtsp_message_add_header (request, GST_RTSP_HDR_REGION_DATA, "0");
-      gst_rtsp_message_add_header (request, GST_RTSP_HDR_PLAYER_START_TIME,
-          "[28/03/2003:22:50:23 00:00]");
-      gst_rtsp_message_add_header (request, GST_RTSP_HDR_CLIENT_ID,
-          "Linux_2.4_6.0.9.1235_play32_RN01_EN_586");
-      ctx->isreal = FALSE;
-      break;
-    }
-    case GST_RTSP_DESCRIBE:
-    {
-      if (ctx->isreal) {
-        gst_rtsp_message_add_header (request, GST_RTSP_HDR_BANDWIDTH,
-            DEFAULT_BANDWIDTH);
-        gst_rtsp_message_add_header (request, GST_RTSP_HDR_GUID,
-            "00000000-0000-0000-0000-000000000000");
-        gst_rtsp_message_add_header (request, GST_RTSP_HDR_REGION_DATA, "0");
-        gst_rtsp_message_add_header (request, GST_RTSP_HDR_CLIENT_ID,
-            "Linux_2.4_6.0.9.1235_play32_RN01_EN_586");
-        gst_rtsp_message_add_header (request, GST_RTSP_HDR_MAX_ASM_WIDTH, "1");
-        gst_rtsp_message_add_header (request, GST_RTSP_HDR_LANGUAGE, "en-US");
-        gst_rtsp_message_add_header (request, GST_RTSP_HDR_REQUIRE,
-            "com.real.retain-entity-for-setup");
-      }
-      break;
-    }
-    case GST_RTSP_SETUP:
-    {
-      if (ctx->isreal) {
-        gchar *value =
-            g_strdup_printf ("%s, sd=%s", ctx->challenge2, ctx->checksum);
-        gst_rtsp_message_add_header (request, GST_RTSP_HDR_REAL_CHALLENGE2,
-            value);
-        gst_rtsp_message_add_header (request, GST_RTSP_HDR_IF_MATCH, ctx->etag);
-        g_free (value);
-      }
-      break;
-    }
-    default:
-      break;
-  }
-  return GST_RTSP_OK;
-}
-
-static GstRTSPResult
-rtsp_ext_real_after_send (GstRTSPExtension * ext, GstRTSPMessage * req,
-    GstRTSPMessage * resp)
-{
-  GstRTSPReal *ctx = (GstRTSPReal *) ext;
-
-  switch (req->type_data.request.method) {
-    case GST_RTSP_OPTIONS:
-    {
-      gchar *challenge1 = NULL;
-      gchar *server = NULL;
-
-      gst_rtsp_message_get_header (resp, GST_RTSP_HDR_SERVER, &server, 0);
-
-      gst_rtsp_message_get_header (resp, GST_RTSP_HDR_REAL_CHALLENGE1,
-          &challenge1, 0);
-      if (!challenge1)
-        goto no_challenge1;
-
-      gst_rtsp_ext_real_calc_response_and_checksum (ctx->challenge2,
-          ctx->checksum, challenge1);
-
-      GST_DEBUG_OBJECT (ctx, "Found Real challenge tag");
-      ctx->isreal = TRUE;
-      break;
-    }
-    case GST_RTSP_DESCRIBE:
-    {
-      gchar *etag = NULL;
-      guint len;
-
-      gst_rtsp_message_get_header (resp, GST_RTSP_HDR_ETAG, &etag, 0);
-      if (etag) {
-        len = sizeof (ctx->etag);
-        strncpy (ctx->etag, etag, len);
-        ctx->etag[len - 1] = '\0';
-      }
-      break;
-    }
-    default:
-      break;
-  }
-  return GST_RTSP_OK;
-
-  /* ERRORS */
-no_challenge1:
-  {
-    GST_DEBUG_OBJECT (ctx, "Could not find challenge tag.");
-    ctx->isreal = FALSE;
-    return GST_RTSP_OK;
-  }
-}
-
-#define ENSURE_SIZE(size)              \
-G_STMT_START {                        \
-  while (data_len < size) {            \
-    data_len += 1024;                  \
-    data = g_realloc (data, data_len); \
-  }                                    \
-} G_STMT_END
-
-#define READ_BUFFER_GEN(src, func, name, dest, dest_len)    \
-G_STMT_START {                                             \
-  dest = (gchar *)func (src, name);                         \
-  dest_len = 0;                                                    \
-  if (!dest) {                                              \
-    dest = (char *) "";                                     \
-  }                                                         \
-  else if (!strncmp (dest, "buffer;\"", 8)) {               \
-    dest += 8;                                              \
-    dest_len = strlen (dest) - 1;                           \
-    dest[dest_len] = '\0';                                  \
-    g_base64_decode_inplace (dest, &dest_len);            \
-  }                                                         \
-} G_STMT_END
-
-#define READ_BUFFER(sdp, name, dest, dest_len)        \
- READ_BUFFER_GEN(sdp, gst_sdp_message_get_attribute_val, name, dest, dest_len)
-#define READ_BUFFER_M(media, name, dest, dest_len)    \
- READ_BUFFER_GEN(media, gst_sdp_media_get_attribute_val, name, dest, dest_len)
-
-#define READ_INT_GEN(src, func, name, dest)               \
-G_STMT_START {                                           \
-  const gchar *val = func (src, name);                          \
-  if (val && !strncmp (val, "integer;", 8))               \
-      dest = atoi (val + 8);                              \
-    else                                                  \
-      dest = 0;                                           \
-} G_STMT_END
-
-#define READ_INT(sdp, name, dest)                             \
- READ_INT_GEN(sdp, gst_sdp_message_get_attribute_val, name, dest)
-#define READ_INT_M(media, name, dest)                         \
- READ_INT_GEN(media, gst_sdp_media_get_attribute_val, name, dest)
-
-#define READ_STRING(media, name, dest, dest_len)              \
-G_STMT_START {                                               \
-  const gchar *val = gst_sdp_media_get_attribute_val (media, name); \
-  if (val && !strncmp (val, "string;\"", 8)) {                \
-    dest = (gchar *) val + 8;                                 \
-    dest_len = strlen (dest) - 1;                             \
-    dest[dest_len] = '\0';                                    \
-  } else {                                                    \
-    dest = (char *) "";                                       \
-    dest_len = 0;                                             \
-  }                                                           \
-} G_STMT_END
-
-#define WRITE_STRING1(datap, str, str_len)            \
-G_STMT_START {                                       \
-  *datap = str_len;                                   \
-  memcpy ((datap) + 1, str, str_len);                 \
-  datap += str_len + 1;                               \
-} G_STMT_END
-
-#define WRITE_STRING2(datap, str, str_len)            \
-G_STMT_START {                                       \
-  GST_WRITE_UINT16_BE (datap, str_len);               \
-  memcpy (datap + 2, str, str_len);                   \
-  datap += str_len + 2;                               \
-} G_STMT_END
-
-static GstRTSPResult
-rtsp_ext_real_parse_sdp (GstRTSPExtension * ext, GstSDPMessage * sdp,
-    GstStructure * props)
-{
-  GstRTSPReal *ctx = (GstRTSPReal *) ext;
-  guint size;
-  gint i;
-  gchar *title, *author, *copyright, *comment;
-  gsize title_len, author_len, copyright_len, comment_len;
-  guint8 *data = NULL, *datap;
-  guint data_len = 0, offset;
-  GstBuffer *buf;
-  gchar *opaque_data;
-  gsize opaque_data_len, asm_rule_book_len;
-  GHashTable *vars;
-  GString *rules;
-
-  /* don't bother for non-real formats */
-  READ_INT (sdp, "IsRealDataType", ctx->isreal);
-  if (!ctx->isreal)
-    return TRUE;
-
-  /* Force PAUSE | PLAY */
-  //src->methods |= GST_RTSP_PLAY | GST_RTSP_PAUSE;
-
-  ctx->n_streams = gst_sdp_message_medias_len (sdp);
-
-  ctx->max_bit_rate = 0;
-  ctx->avg_bit_rate = 0;
-  ctx->max_packet_size = 0;
-  ctx->avg_packet_size = 0;
-  ctx->duration = 0;
-
-  for (i = 0; i < ctx->n_streams; i++) {
-    const GstSDPMedia *media;
-    gint intval;
-
-    media = gst_sdp_message_get_media (sdp, i);
-
-    READ_INT_M (media, "MaxBitRate", intval);
-    ctx->max_bit_rate += intval;
-    READ_INT_M (media, "AvgBitRate", intval);
-    ctx->avg_bit_rate += intval;
-    READ_INT_M (media, "MaxPacketSize", intval);
-    ctx->max_packet_size = MAX (ctx->max_packet_size, intval);
-    READ_INT_M (media, "AvgPacketSize", intval);
-    ctx->avg_packet_size = (ctx->avg_packet_size * i + intval) / (i + 1);
-    READ_INT_M (media, "Duration", intval);
-    ctx->duration = MAX (ctx->duration, intval);
-  }
-
-  /* FIXME: use GstByteWriter to write the header */
-  /* PROP */
-  offset = 0;
-  size = 50;
-  ENSURE_SIZE (size);
-  datap = data + offset;
-
-  memcpy (datap + 0, "PROP", 4);
-  GST_WRITE_UINT32_BE (datap + 4, size);
-  GST_WRITE_UINT16_BE (datap + 8, 0);
-  GST_WRITE_UINT32_BE (datap + 10, ctx->max_bit_rate);
-  GST_WRITE_UINT32_BE (datap + 14, ctx->avg_bit_rate);
-  GST_WRITE_UINT32_BE (datap + 18, ctx->max_packet_size);
-  GST_WRITE_UINT32_BE (datap + 22, ctx->avg_packet_size);
-  GST_WRITE_UINT32_BE (datap + 26, 0);
-  GST_WRITE_UINT32_BE (datap + 30, ctx->duration);
-  GST_WRITE_UINT32_BE (datap + 34, 0);
-  GST_WRITE_UINT32_BE (datap + 38, 0);
-  GST_WRITE_UINT32_BE (datap + 42, 0);
-  GST_WRITE_UINT16_BE (datap + 46, ctx->n_streams);
-  GST_WRITE_UINT16_BE (datap + 48, 0);
-  offset += size;
-
-  /* CONT */
-  READ_BUFFER (sdp, "Title", title, title_len);
-  READ_BUFFER (sdp, "Author", author, author_len);
-  READ_BUFFER (sdp, "Comment", comment, comment_len);
-  READ_BUFFER (sdp, "Copyright", copyright, copyright_len);
-
-  size = 18 + title_len + author_len + comment_len + copyright_len;
-  ENSURE_SIZE (offset + size);
-  datap = data + offset;
-
-  memcpy (datap, "CONT", 4);
-  GST_WRITE_UINT32_BE (datap + 4, size);
-  GST_WRITE_UINT16_BE (datap + 8, 0);   /* Version */
-  datap += 10;
-  WRITE_STRING2 (datap, title, title_len);
-  WRITE_STRING2 (datap, author, author_len);
-  WRITE_STRING2 (datap, copyright, copyright_len);
-  WRITE_STRING2 (datap, comment, comment_len);
-  offset += size;
-
-  /* fix the hashtale for the rule parser */
-  rules = g_string_new ("");
-  vars = g_hash_table_new (g_str_hash, g_str_equal);
-  g_hash_table_insert (vars, (gchar *) "Bandwidth",
-      (gchar *) DEFAULT_BANDWIDTH);
-
-  /* MDPR */
-  for (i = 0; i < ctx->n_streams; i++) {
-    const GstSDPMedia *media;
-    guint32 len;
-    GstRTSPRealStream *stream;
-    gchar *str;
-    gint rulematches[MAX_RULEMATCHES];
-    gint sel, j, n;
-
-    media = gst_sdp_message_get_media (sdp, i);
-
-    if (media->media && !strcmp (media->media, "data"))
-      continue;
-
-    stream = g_new0 (GstRTSPRealStream, 1);
-    ctx->streams = g_list_append (ctx->streams, stream);
-
-    READ_INT_M (media, "MaxBitRate", stream->max_bit_rate);
-    READ_INT_M (media, "AvgBitRate", stream->avg_bit_rate);
-    READ_INT_M (media, "MaxPacketSize", stream->max_packet_size);
-    READ_INT_M (media, "AvgPacketSize", stream->avg_packet_size);
-    READ_INT_M (media, "StartTime", stream->start_time);
-    READ_INT_M (media, "Preroll", stream->preroll);
-    READ_INT_M (media, "Duration", stream->duration);
-    READ_STRING (media, "StreamName", str, stream->stream_name_len);
-    stream->stream_name = g_strndup (str, stream->stream_name_len);
-    READ_STRING (media, "mimetype", str, stream->mime_type_len);
-    stream->mime_type = g_strndup (str, stream->mime_type_len);
-
-    /* FIXME: Depending on the current bandwidth, we need to select one
-     * bandwidth out of a list offered by the server. Someone needs to write
-     * a parser for strings like
-     *
-     * #($Bandwidth < 67959),TimestampDelivery=T,DropByN=T,priority=9;
-     * #($Bandwidth >= 67959) && ($Bandwidth < 167959),AverageBandwidth=67959,
-     * Priority=9;#($Bandwidth >= 67959) && ($Bandwidth < 167959),
-     * AverageBandwidth=0,Priority=5,OnDepend=\"1\";
-     * #($Bandwidth >= 167959) && ($Bandwidth < 267959),
-     * AverageBandwidth=167959,Priority=9;
-     * #($Bandwidth >= 167959) && ($Bandwidth < 267959),AverageBandwidth=0,
-     * Priority=5,OnDepend=\"3\";#($Bandwidth >= 267959),
-     * AverageBandwidth=267959,Priority=9;#($Bandwidth >= 267959),
-     * AverageBandwidth=0,Priority=5,OnDepend=\"5\";
-     *
-     * As I don't know how to do that, I just use the first entry (sel = 0).
-     * But to give you a starting point, I offer you above string
-     * in the variable 'asm_rule_book'.
-     */
-    READ_STRING (media, "ASMRuleBook", str, asm_rule_book_len);
-    stream->rulebook = gst_asm_rule_book_new (str);
-
-    n = gst_asm_rule_book_match (stream->rulebook, vars, rulematches);
-    for (j = 0; j < n; j++) {
-      g_string_append_printf (rules, "stream=%u;rule=%u,", i, rulematches[j]);
-    }
-
-    /* get the MLTI for the first matched rules */
-    sel = rulematches[0];
-
-    READ_BUFFER_M (media, "OpaqueData", opaque_data, opaque_data_len);
-
-    if (opaque_data_len < 4) {
-      GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 4",
-          opaque_data_len);
-      goto strange_opaque_data;
-    }
-    if (strncmp (opaque_data, "MLTI", 4)) {
-      GST_DEBUG_OBJECT (ctx, "no MLTI found, appending all");
-      stream->type_specific_data_len = opaque_data_len;
-      stream->type_specific_data = g_memdup2 (opaque_data, opaque_data_len);
-      goto no_type_specific;
-    }
-    opaque_data += 4;
-    opaque_data_len -= 4;
-
-    if (opaque_data_len < 2) {
-      GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 2",
-          opaque_data_len);
-      goto strange_opaque_data;
-    }
-    stream->num_rules = GST_READ_UINT16_BE (opaque_data);
-    opaque_data += 2;
-    opaque_data_len -= 2;
-
-    if (sel >= stream->num_rules) {
-      GST_DEBUG_OBJECT (ctx, "sel %d >= num_rules %d", sel, stream->num_rules);
-      goto strange_opaque_data;
-    }
-
-    if (opaque_data_len < 2 * sel) {
-      GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT
-          " < 2 * sel (%d)", opaque_data_len, 2 * sel);
-      goto strange_opaque_data;
-    }
-    opaque_data += 2 * sel;
-    opaque_data_len -= 2 * sel;
-
-    if (opaque_data_len < 2) {
-      GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 2",
-          opaque_data_len);
-      goto strange_opaque_data;
-    }
-    stream->codec = GST_READ_UINT16_BE (opaque_data);
-    opaque_data += 2;
-    opaque_data_len -= 2;
-
-    if (opaque_data_len < 2 * (stream->num_rules - sel - 1)) {
-      GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT
-          " < %d", opaque_data_len, 2 * (stream->num_rules - sel - 1));
-      goto strange_opaque_data;
-    }
-    opaque_data += 2 * (stream->num_rules - sel - 1);
-    opaque_data_len -= 2 * (stream->num_rules - sel - 1);
-
-    if (opaque_data_len < 2) {
-      GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 2",
-          opaque_data_len);
-      goto strange_opaque_data;
-    }
-    stream->num_rules = GST_READ_UINT16_BE (opaque_data);
-    opaque_data += 2;
-    opaque_data_len -= 2;
-
-    if (stream->codec > stream->num_rules) {
-      GST_DEBUG_OBJECT (ctx, "codec %d > num_rules %d", stream->codec,
-          stream->num_rules);
-      goto strange_opaque_data;
-    }
-
-    for (j = 0; j < stream->codec; j++) {
-      if (opaque_data_len < 4) {
-        GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 4",
-            opaque_data_len);
-        goto strange_opaque_data;
-      }
-      len = GST_READ_UINT32_BE (opaque_data);
-      opaque_data += 4;
-      opaque_data_len -= 4;
-
-      if (opaque_data_len < len) {
-        GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < len %d",
-            opaque_data_len, len);
-        goto strange_opaque_data;
-      }
-      opaque_data += len;
-      opaque_data_len -= len;
-    }
-
-    if (opaque_data_len < 4) {
-      GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 4",
-          opaque_data_len);
-      goto strange_opaque_data;
-    }
-    stream->type_specific_data_len = GST_READ_UINT32_BE (opaque_data);
-    opaque_data += 4;
-    opaque_data_len -= 4;
-
-    if (opaque_data_len < stream->type_specific_data_len) {
-      GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < %d",
-          opaque_data_len, stream->type_specific_data_len);
-      goto strange_opaque_data;
-    }
-    stream->type_specific_data =
-        g_memdup2 (opaque_data, stream->type_specific_data_len);
-
-  no_type_specific:
-    size =
-        46 + stream->stream_name_len + stream->mime_type_len +
-        stream->type_specific_data_len;
-    ENSURE_SIZE (offset + size);
-    datap = data + offset;
-
-    memcpy (datap, "MDPR", 4);
-    GST_WRITE_UINT32_BE (datap + 4, size);
-    GST_WRITE_UINT16_BE (datap + 8, 0);
-    GST_WRITE_UINT16_BE (datap + 10, i);
-    GST_WRITE_UINT32_BE (datap + 12, stream->max_bit_rate);
-    GST_WRITE_UINT32_BE (datap + 16, stream->avg_bit_rate);
-    GST_WRITE_UINT32_BE (datap + 20, stream->max_packet_size);
-    GST_WRITE_UINT32_BE (datap + 24, stream->avg_packet_size);
-    GST_WRITE_UINT32_BE (datap + 28, stream->start_time);
-    GST_WRITE_UINT32_BE (datap + 32, stream->preroll);
-    GST_WRITE_UINT32_BE (datap + 36, stream->duration);
-    datap += 40;
-    WRITE_STRING1 (datap, stream->stream_name, stream->stream_name_len);
-    WRITE_STRING1 (datap, stream->mime_type, stream->mime_type_len);
-    GST_WRITE_UINT32_BE (datap, stream->type_specific_data_len);
-    if (stream->type_specific_data_len)
-      memcpy (datap + 4, stream->type_specific_data,
-          stream->type_specific_data_len);
-    offset += size;
-  }
-
-  /* destroy the rulebook hashtable now */
-  g_hash_table_destroy (vars);
-
-  /* strip final , if we added some stream rules */
-  if (rules->len > 0) {
-    rules = g_string_truncate (rules, rules->len - 1);
-  }
-
-  /* and store rules in the context */
-  ctx->rules = g_string_free (rules, FALSE);
-
-  /* DATA */
-  size = 18;
-  ENSURE_SIZE (offset + size);
-  datap = data + offset;
-
-  memcpy (datap, "DATA", 4);
-  GST_WRITE_UINT32_BE (datap + 4, size);
-  GST_WRITE_UINT16_BE (datap + 8, 0);
-  GST_WRITE_UINT32_BE (datap + 10, 0);  /* number of packets */
-  GST_WRITE_UINT32_BE (datap + 14, 0);  /* next data header */
-  offset += size;
-
-  buf = gst_buffer_new_wrapped (data, offset);
-
-  /* Set on caps */
-  GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_HEADER);
-  gst_structure_set (props, "config", GST_TYPE_BUFFER, buf, NULL);
-  gst_buffer_unref (buf);
-
-  /* Overwrite encoding and media fields */
-  gst_structure_set (props, "encoding-name", G_TYPE_STRING, "X-REAL-RDT", NULL);
-  gst_structure_set (props, "media", G_TYPE_STRING, "application", NULL);
-
-  return TRUE;
-
-  /* ERRORS */
-strange_opaque_data:
-  {
-    g_string_free (rules, TRUE);
-    g_hash_table_destroy (vars);
-    g_free (data);
-
-    GST_ELEMENT_ERROR (ctx, RESOURCE, WRITE, ("Strange opaque data."), (NULL));
-    return FALSE;
-  }
-}
-
-static GstRTSPResult
-rtsp_ext_real_stream_select (GstRTSPExtension * ext, GstRTSPUrl * url)
-{
-  GstRTSPReal *ctx = (GstRTSPReal *) ext;
-  GstRTSPResult res;
-  GstRTSPMessage request = { 0 };
-  GstRTSPMessage response = { 0 };
-  gchar *req_url;
-
-  if (!ctx->isreal)
-    return GST_RTSP_OK;
-
-  if (!ctx->rules)
-    return GST_RTSP_OK;
-
-  req_url = gst_rtsp_url_get_request_uri (url);
-
-  /* create SET_PARAMETER */
-  if ((res = gst_rtsp_message_init_request (&request, GST_RTSP_SET_PARAMETER,
-              req_url)) < 0)
-    goto create_request_failed;
-
-  g_free (req_url);
-
-  gst_rtsp_message_add_header (&request, GST_RTSP_HDR_SUBSCRIBE, ctx->rules);
-
-  /* send SET_PARAMETER */
-  if ((res = gst_rtsp_extension_send (ext, &request, &response)) < 0)
-    goto send_error;
-
-  gst_rtsp_message_unset (&request);
-  gst_rtsp_message_unset (&response);
-
-  return GST_RTSP_OK;
-
-  /* ERRORS */
-create_request_failed:
-  {
-    GST_ELEMENT_ERROR (ctx, LIBRARY, INIT,
-        ("Could not create request."), (NULL));
-    g_free (req_url);
-    goto reset;
-  }
-send_error:
-  {
-    GST_ELEMENT_ERROR (ctx, RESOURCE, WRITE,
-        ("Could not send message."), (NULL));
-    goto reset;
-  }
-reset:
-  {
-    gst_rtsp_message_unset (&request);
-    gst_rtsp_message_unset (&response);
-    return res;
-  }
-}
-
-static void gst_rtsp_real_extension_init (gpointer g_iface,
-    gpointer iface_data);
-static void gst_rtsp_real_finalize (GObject * obj);
-
-#define gst_rtsp_real_parent_class parent_class
-G_DEFINE_TYPE_WITH_CODE (GstRTSPReal, gst_rtsp_real, GST_TYPE_ELEMENT,
-    G_IMPLEMENT_INTERFACE (GST_TYPE_RTSP_EXTENSION,
-        gst_rtsp_real_extension_init));
-GST_ELEMENT_REGISTER_DEFINE (rtspreal, "rtspreal",
-    GST_RANK_MARGINAL, GST_TYPE_RTSP_REAL);
-
-static void
-gst_rtsp_real_class_init (GstRTSPRealClass * g_class)
-{
-  GObjectClass *gobject_class = (GObjectClass *) g_class;
-  GstElementClass *gstelement_class = (GstElementClass *) g_class;
-
-  gobject_class->finalize = gst_rtsp_real_finalize;
-
-  gst_element_class_set_static_metadata (gstelement_class,
-      "RealMedia RTSP Extension", "Network/Extension/Protocol",
-      "Extends RTSP so that it can handle RealMedia setup",
-      "Wim Taymans <wim.taymans@gmail.com>");
-
-  GST_DEBUG_CATEGORY_INIT (rtspreal_debug, "rtspreal", 0,
-      "RealMedia RTSP extension");
-}
-
-static void
-gst_rtsp_real_init (GstRTSPReal * rtspreal)
-{
-  rtspreal->isreal = FALSE;
-}
-
-static void
-gst_rtsp_stream_free (GstRTSPRealStream * stream)
-{
-  g_free (stream->stream_name);
-  g_free (stream->mime_type);
-  gst_asm_rule_book_free (stream->rulebook);
-  g_free (stream->type_specific_data);
-
-  g_free (stream);
-}
-
-static void
-gst_rtsp_real_finalize (GObject * obj)
-{
-  GstRTSPReal *r = (GstRTSPReal *) obj;
-
-  g_list_foreach (r->streams, (GFunc) gst_rtsp_stream_free, NULL);
-  g_list_free (r->streams);
-  g_free (r->rules);
-
-  G_OBJECT_CLASS (parent_class)->finalize (obj);
-}
-
-static void
-gst_rtsp_real_extension_init (gpointer g_iface, gpointer iface_data)
-{
-  GstRTSPExtensionInterface *iface = (GstRTSPExtensionInterface *) g_iface;
-
-  iface->before_send = rtsp_ext_real_before_send;
-  iface->after_send = rtsp_ext_real_after_send;
-  iface->parse_sdp = rtsp_ext_real_parse_sdp;
-  iface->stream_select = rtsp_ext_real_stream_select;
-  iface->get_transports = rtsp_ext_real_get_transports;
-}
diff --git a/gst/realmedia/rtspreal.h b/gst/realmedia/rtspreal.h
deleted file mode 100644 (file)
index f5cea96..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/* GStreamer
- * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.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_RTSP_REAL_H__
-#define __GST_RTSP_REAL_H__
-
-#include <gst/gst.h>
-
-#include "asmrules.h"
-
-G_BEGIN_DECLS
-
-#define GST_TYPE_RTSP_REAL             (gst_rtsp_real_get_type())
-#define GST_IS_RTSP_REAL(obj)                  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTSP_REAL))
-#define GST_IS_RTSP_REAL_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTSP_REAL))
-#define GST_RTSP_REAL(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTSP_REAL, GstRTSPReal))
-#define GST_RTSP_REAL_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTSP_REAL, GstRTSPRealClass))
-
-typedef struct _GstRTSPReal GstRTSPReal;
-typedef struct _GstRTSPRealClass GstRTSPRealClass;
-
-typedef struct _GstRTSPRealStream GstRTSPRealStream;
-
-struct _GstRTSPRealStream {
-  guint  id;
-  guint  max_bit_rate;
-  guint  avg_bit_rate;
-  guint  max_packet_size;
-  guint  avg_packet_size;
-  guint  start_time;
-  guint  preroll;
-  guint  duration;
-  gchar *stream_name;
-  guint  stream_name_len;
-  gchar *mime_type;
-  guint  mime_type_len;
-
-  GstASMRuleBook *rulebook;
-
-  gchar *type_specific_data;
-  guint  type_specific_data_len;
-
-  guint16 num_rules, j, sel, codec;
-};
-
-struct _GstRTSPReal {
-  GstElement  element;
-
-  gchar checksum[34];
-  gchar challenge2[64];
-  gchar etag[64];
-  gboolean isreal;
-
-  guint   n_streams;
-  GList  *streams;
-
-  guint  max_bit_rate;
-  guint  avg_bit_rate;
-  guint  max_packet_size;
-  guint  avg_packet_size;
-  guint  duration;
-
-  gchar *rules;
-};
-
-struct _GstRTSPRealClass {
-  GstElementClass parent_class;
-};
-
-GType gst_rtsp_real_get_type(void);
-
-GST_ELEMENT_REGISTER_DECLARE (rtspreal);
-
-
-G_END_DECLS
-
-#endif /* __GST_RTSP_REAL_H__ */
diff --git a/gst/xingmux/gstxingmux.c b/gst/xingmux/gstxingmux.c
deleted file mode 100644 (file)
index 33087cc..0000000
+++ /dev/null
@@ -1,683 +0,0 @@
-/*
- * Copyright (c) 2006 Christophe Fergeau  <teuf@gnome.org>
- * Copyright (c) 2008 Sebastian Dröge  <slomo@circular-chaos.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/* Xing SDK: http://www.mp3-tech.org/programmer/sources/vbrheadersdk.zip */
-
-
-/**
- * SECTION:element-xingmux
- * @title: xingmux
- *
- * xingmux adds a Xing header to MP3 files. This contains information about the duration and size
- * of the file and a seek table and is very useful for getting an almost correct duration and better
- * seeking on VBR MP3 files.
- *
- * This element will remove any existing Xing, LAME or VBRI headers from the beginning of the file.
- *
- * ## Example launch line
- * |[
- * gst-launch-1.0 audiotestsrc num-buffers=1000 ! audioconvert ! lamemp3enc ! xingmux ! filesink location=test.mp3
- * gst-launch-1.0 filesrc location=test.mp3 ! xingmux ! filesink location=test2.mp3
- * gst-launch-1.0 filesrc location=test.mp3 ! mp3parse ! xingmux ! filesink location=test2.mp3
- * ]|
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include "gstxingmux.h"
-
-GST_DEBUG_CATEGORY_STATIC (xing_mux_debug);
-#define GST_CAT_DEFAULT xing_mux_debug
-
-#define gst_xing_mux_parent_class parent_class
-G_DEFINE_TYPE (GstXingMux, gst_xing_mux, GST_TYPE_ELEMENT);
-GST_ELEMENT_REGISTER_DEFINE (xingmux, "xingmux", GST_RANK_MARGINAL,
-    GST_TYPE_XING_MUX);
-
-/* Xing Header stuff */
-#define GST_XING_FRAME_FIELD   (1 << 0)
-#define GST_XING_BYTES_FIELD   (1 << 1)
-#define GST_XING_TOC_FIELD     (1 << 2)
-#define GST_XING_QUALITY_FIELD (1 << 3)
-
-typedef struct _GstXingSeekEntry
-{
-  gint64 timestamp;
-  gint byte;
-} GstXingSeekEntry;
-
-static inline GstXingSeekEntry *
-gst_xing_seek_entry_new (void)
-{
-  return g_slice_new (GstXingSeekEntry);
-}
-
-static inline void
-gst_xing_seek_entry_free (GstXingSeekEntry * entry)
-{
-  g_slice_free (GstXingSeekEntry, entry);
-}
-
-static void gst_xing_mux_finalize (GObject * obj);
-static GstStateChangeReturn
-gst_xing_mux_change_state (GstElement * element, GstStateChange transition);
-static GstFlowReturn gst_xing_mux_chain (GstPad * pad, GstObject * parent,
-    GstBuffer * buffer);
-static gboolean gst_xing_mux_sink_event (GstPad * pad, GstObject * parent,
-    GstEvent * event);
-
-static GstStaticPadTemplate gst_xing_mux_sink_template =
-GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/mpeg, "
-        "mpegversion = (int) 1, " "layer = (int) [ 1, 3 ]"));
-
-
-static GstStaticPadTemplate gst_xing_mux_src_template =
-GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/mpeg, "
-        "mpegversion = (int) 1, " "layer = (int) [ 1, 3 ]"));
-static const guint mp3types_bitrates[2][3][16] = {
-  {
-        {0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448,},
-        {0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384,},
-        {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320,}
-      },
-  {
-        {0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256,},
-        {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160,},
-        {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160,}
-      },
-};
-
-static const guint mp3types_freqs[3][3] = { {44100, 48000, 32000},
-{22050, 24000, 16000},
-{11025, 12000, 8000}
-};
-
-static gboolean
-parse_header (guint32 header, guint * ret_size, guint * ret_spf,
-    gulong * ret_rate)
-{
-  guint length, spf;
-  gulong samplerate, bitrate, layer, padding;
-  gint lsf, mpg25;
-
-  if ((header & 0xffe00000) != 0xffe00000) {
-    g_warning ("invalid sync");
-    return FALSE;
-  }
-
-  if (((header >> 19) & 3) == 0x01) {
-    g_warning ("invalid MPEG version");
-    return FALSE;
-  }
-
-  if (((header >> 17) & 3) == 0x00) {
-    g_warning ("invalid MPEG layer");
-    return FALSE;
-  }
-
-  if (((header >> 12) & 0xf) == 0xf || ((header >> 12) & 0xf) == 0x0) {
-    g_warning ("invalid bitrate");
-    return FALSE;
-  }
-
-  if (((header >> 10) & 0x3) == 0x3) {
-    g_warning ("invalid sampling rate");
-    return FALSE;
-  }
-
-  if (header & 0x00000002) {
-    g_warning ("invalid emphasis");
-    return FALSE;
-  }
-
-  if (header & (1 << 20)) {
-    lsf = (header & (1 << 19)) ? 0 : 1;
-    mpg25 = 0;
-  } else {
-    lsf = 1;
-    mpg25 = 1;
-  }
-
-  layer = 4 - ((header >> 17) & 0x3);
-
-  bitrate = (header >> 12) & 0xF;
-  bitrate = mp3types_bitrates[lsf][layer - 1][bitrate] * 1000;
-  if (bitrate == 0)
-    return FALSE;
-
-  samplerate = (header >> 10) & 0x3;
-  samplerate = mp3types_freqs[lsf + mpg25][samplerate];
-
-  padding = (header >> 9) & 0x1;
-
-  switch (layer) {
-    case 1:
-      length = 4 * ((bitrate * 12) / samplerate + padding);
-      break;
-    case 2:
-      length = (bitrate * 144) / samplerate + padding;
-      break;
-    default:
-    case 3:
-      length = (bitrate * 144) / (samplerate << lsf) + padding;
-      break;
-  }
-
-  if (layer == 1)
-    spf = 384;
-  else if (layer == 2 || lsf == 0)
-    spf = 1152;
-  else
-    spf = 576;
-
-  if (ret_size)
-    *ret_size = length;
-  if (ret_spf)
-    *ret_spf = spf;
-  if (ret_rate)
-    *ret_rate = samplerate;
-
-  return TRUE;
-}
-
-static guint
-get_xing_offset (guint32 header)
-{
-  guint mpeg_version = (header >> 19) & 0x3;
-  guint channel_mode = (header >> 6) & 0x3;
-
-  if (mpeg_version == 0x3) {
-    if (channel_mode == 0x3) {
-      return 0x11;
-    } else {
-      return 0x20;
-    }
-  } else {
-    if (channel_mode == 0x3) {
-      return 0x09;
-    } else {
-      return 0x11;
-    }
-  }
-}
-
-static gboolean
-has_xing_header (guint32 header, GstBuffer * buffer, gsize size)
-{
-  gboolean ret;
-  GstMapInfo map;
-  guint8 *data;
-
-  gst_buffer_map (buffer, &map, GST_MAP_READ);
-  data = map.data;
-  data += 4;
-  data += get_xing_offset (header);
-
-  if (memcmp (data, "Xing", 4) == 0 ||
-      memcmp (data, "Info", 4) == 0 || memcmp (data, "VBRI", 4) == 0)
-    ret = TRUE;
-  else
-    ret = FALSE;
-
-  gst_buffer_unmap (buffer, &map);
-  return ret;
-}
-
-static GstBuffer *
-generate_xing_header (GstXingMux * xing)
-{
-  guint8 *xing_flags;
-  guint32 xing_flags_tmp = 0;
-  GstBuffer *xing_header;
-  GstMapInfo map;
-  guchar *data;
-
-  guint32 header;
-  guint32 header_be;
-  guint size, spf, xing_offset;
-  gulong rate;
-  guint bitrate = 0x00;
-
-  gint64 duration;
-  gint64 byte_count;
-
-  header = xing->first_header;
-
-  /* Set bitrate and choose lowest possible size */
-  do {
-    bitrate++;
-
-    header &= 0xffff0fff;
-    header |= bitrate << 12;
-
-    if (!parse_header (header, &size, &spf, &rate)) {
-      GST_ERROR ("Failed to parse header!");
-      return NULL;
-    }
-    xing_offset = get_xing_offset (header);
-  } while (size < (4 + xing_offset + 4 + 4 + 4 + 4 + 100) && bitrate < 0xe);
-
-  if (bitrate == 0xe) {
-    GST_ERROR ("No usable bitrate found!");
-    return NULL;
-  }
-
-  xing_header = gst_buffer_new_and_alloc (size);
-
-  gst_buffer_map (xing_header, &map, GST_MAP_WRITE);
-  data = map.data;
-  memset (data, 0, size);
-  header_be = GUINT32_TO_BE (header);
-  memcpy (data, &header_be, 4);
-
-  data += 4;
-  data += xing_offset;
-
-  memcpy (data, "Xing", 4);
-  data += 4;
-
-  xing_flags = data;
-  data += 4;
-
-  if (xing->duration != GST_CLOCK_TIME_NONE) {
-    duration = xing->duration;
-  } else {
-    GstFormat fmt = GST_FORMAT_TIME;
-
-    if (!gst_pad_peer_query_duration (xing->sinkpad, fmt, &duration))
-      duration = GST_CLOCK_TIME_NONE;
-  }
-
-  if (duration != GST_CLOCK_TIME_NONE) {
-    guint32 number_of_frames;
-
-    /* The Xing Header contains a NumberOfFrames field, which verifies to:
-     * Duration = NumberOfFrames *SamplesPerFrame/SamplingRate
-     * SamplesPerFrame and SamplingRate are values for the current frame. 
-     */
-    number_of_frames = gst_util_uint64_scale (duration, rate, GST_SECOND) / spf;
-    number_of_frames += 1;      /* Xing Header Frame */
-    GST_DEBUG ("Setting number of frames to %u", number_of_frames);
-    number_of_frames = GUINT32_TO_BE (number_of_frames);
-    memcpy (data, &number_of_frames, 4);
-    xing_flags_tmp |= GST_XING_FRAME_FIELD;
-    data += 4;
-  }
-
-  if (xing->byte_count != 0) {
-    byte_count = xing->byte_count;
-  } else {
-    GstFormat fmt = GST_FORMAT_BYTES;
-
-    if (!gst_pad_peer_query_duration (xing->sinkpad, fmt, &byte_count))
-      byte_count = 0;
-    if (byte_count == -1)
-      byte_count = 0;
-  }
-
-  if (byte_count != 0) {
-    guint32 nbytes;
-
-    if (byte_count > G_MAXUINT32) {
-      GST_DEBUG ("Too large stream: %" G_GINT64_FORMAT " > %u bytes",
-          byte_count, G_MAXUINT32);
-    } else {
-      nbytes = byte_count;
-      GST_DEBUG ("Setting number of bytes to %u", nbytes);
-      nbytes = GUINT32_TO_BE (nbytes);
-      memcpy (data, &nbytes, 4);
-      xing_flags_tmp |= GST_XING_BYTES_FIELD;
-      data += 4;
-    }
-  }
-
-  if (xing->seek_table != NULL && byte_count != 0
-      && duration != GST_CLOCK_TIME_NONE) {
-    GList *it;
-    gint percent = 0;
-
-    xing_flags_tmp |= GST_XING_TOC_FIELD;
-
-    GST_DEBUG ("Writing seek table");
-    for (it = xing->seek_table; it != NULL && percent < 100; it = it->next) {
-      GstXingSeekEntry *entry = (GstXingSeekEntry *) it->data;
-      gint64 pos;
-      guchar byte;
-
-      while ((entry->timestamp * 100) / duration >= percent) {
-        pos = (entry->byte * 256) / byte_count;
-        GST_DEBUG ("  %d %% -- %" G_GINT64_FORMAT " 1/256", percent, pos);
-        byte = (guchar) pos;
-        memcpy (data, &byte, 1);
-        data++;
-        percent++;
-      }
-    }
-
-    if (percent < 100) {
-      guchar b;
-      gint i;
-
-      memcpy (&b, data - 1, 1);
-
-      for (i = percent; i < 100; i++) {
-        GST_DEBUG ("  %d %% -- %d 1/256", i, b);
-        memcpy (data, &b, 1);
-        data++;
-      }
-    }
-  }
-
-  GST_DEBUG ("Setting Xing flags to 0x%x\n", xing_flags_tmp);
-  xing_flags_tmp = GUINT32_TO_BE (xing_flags_tmp);
-  memcpy (xing_flags, &xing_flags_tmp, 4);
-  gst_buffer_unmap (xing_header, &map);
-  return xing_header;
-}
-
-static void
-gst_xing_mux_class_init (GstXingMuxClass * klass)
-{
-  GObjectClass *gobject_class;
-  GstElementClass *gstelement_class;
-
-  gobject_class = (GObjectClass *) klass;
-  gstelement_class = (GstElementClass *) klass;
-
-  gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_xing_mux_finalize);
-  gstelement_class->change_state =
-      GST_DEBUG_FUNCPTR (gst_xing_mux_change_state);
-
-  gst_element_class_add_static_pad_template (gstelement_class,
-      &gst_xing_mux_src_template);
-  gst_element_class_add_static_pad_template (gstelement_class,
-      &gst_xing_mux_sink_template);
-
-  GST_DEBUG_CATEGORY_INIT (xing_mux_debug, "xingmux", 0, "Xing Header Muxer");
-
-  gst_element_class_set_static_metadata (gstelement_class, "MP3 Xing muxer",
-      "Formatter/Muxer/Metadata",
-      "Adds a Xing header to the beginning of a VBR MP3 file",
-      "Christophe Fergeau <teuf@gnome.org>");
-}
-
-static void
-gst_xing_mux_finalize (GObject * obj)
-{
-  GstXingMux *xing = GST_XING_MUX (obj);
-
-  if (xing->adapter) {
-    g_object_unref (xing->adapter);
-    xing->adapter = NULL;
-  }
-
-  if (xing->seek_table) {
-    g_list_foreach (xing->seek_table, (GFunc) gst_xing_seek_entry_free, NULL);
-    g_list_free (xing->seek_table);
-    xing->seek_table = NULL;
-  }
-
-  G_OBJECT_CLASS (parent_class)->finalize (obj);
-}
-
-static void
-xing_reset (GstXingMux * xing)
-{
-  xing->duration = GST_CLOCK_TIME_NONE;
-  xing->byte_count = 0;
-
-  gst_adapter_clear (xing->adapter);
-
-  if (xing->seek_table) {
-    g_list_foreach (xing->seek_table, (GFunc) gst_xing_seek_entry_free, NULL);
-    g_list_free (xing->seek_table);
-    xing->seek_table = NULL;
-  }
-
-  xing->sent_xing = FALSE;
-}
-
-
-static void
-gst_xing_mux_init (GstXingMux * xing)
-{
-  /* pad through which data comes in to the element */
-  xing->sinkpad =
-      gst_pad_new_from_static_template (&gst_xing_mux_sink_template, "sink");
-  gst_pad_set_chain_function (xing->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_xing_mux_chain));
-  gst_pad_set_event_function (xing->sinkpad,
-      GST_DEBUG_FUNCPTR (gst_xing_mux_sink_event));
-  GST_PAD_SET_PROXY_CAPS (xing->sinkpad);
-  gst_element_add_pad (GST_ELEMENT (xing), xing->sinkpad);
-
-  /* pad through which data goes out of the element */
-  xing->srcpad =
-      gst_pad_new_from_static_template (&gst_xing_mux_src_template, "src");
-  gst_element_add_pad (GST_ELEMENT (xing), xing->srcpad);
-
-  xing->adapter = gst_adapter_new ();
-
-  xing_reset (xing);
-}
-
-static GstFlowReturn
-gst_xing_mux_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
-{
-  GstXingMux *xing = GST_XING_MUX (parent);
-  GstFlowReturn ret = GST_FLOW_OK;
-
-  gst_adapter_push (xing->adapter, buffer);
-
-  while (gst_adapter_available (xing->adapter) >= 4) {
-    const guchar *data;
-    guint32 header;
-    GstBuffer *outbuf;
-    GstClockTime duration;
-    guint size, spf;
-    gulong rate;
-    GstXingSeekEntry *seek_entry;
-
-    data = gst_adapter_map (xing->adapter, 4);
-    header = GST_READ_UINT32_BE (data);
-    gst_adapter_unmap (xing->adapter);
-
-    if (!parse_header (header, &size, &spf, &rate)) {
-      GST_DEBUG ("Lost sync, resyncing");
-      gst_adapter_flush (xing->adapter, 1);
-      continue;
-    }
-
-    if (gst_adapter_available (xing->adapter) < size)
-      break;
-
-    outbuf = gst_adapter_take_buffer (xing->adapter, size);
-
-    if (!xing->sent_xing) {
-      if (has_xing_header (header, outbuf, size)) {
-        GST_LOG_OBJECT (xing, "Dropping old Xing header");
-        gst_buffer_unref (outbuf);
-        continue;
-      } else {
-        GstBuffer *xing_header;
-        guint64 xing_header_size;
-
-        xing->first_header = header;
-
-        xing_header = generate_xing_header (xing);
-
-        if (xing_header == NULL) {
-          GST_ERROR ("Can't generate Xing header");
-          gst_buffer_unref (outbuf);
-          return GST_FLOW_ERROR;
-        }
-
-        xing_header_size = gst_buffer_get_size (xing_header);
-
-        if ((ret = gst_pad_push (xing->srcpad, xing_header)) != GST_FLOW_OK) {
-          GST_ERROR_OBJECT (xing, "Failed to push Xing header: %s",
-              gst_flow_get_name (ret));
-          gst_buffer_unref (xing_header);
-          gst_buffer_unref (outbuf);
-          return ret;
-        }
-
-        xing->byte_count += xing_header_size;
-        xing->sent_xing = TRUE;
-      }
-    }
-
-    seek_entry = gst_xing_seek_entry_new ();
-    seek_entry->timestamp =
-        (xing->duration == GST_CLOCK_TIME_NONE) ? 0 : xing->duration;
-    /* Workaround for parsers checking that the first seek table entry is 0 */
-    seek_entry->byte = (seek_entry->timestamp == 0) ? 0 : xing->byte_count;
-    xing->seek_table = g_list_append (xing->seek_table, seek_entry);
-
-    duration = gst_util_uint64_scale_ceil (spf, GST_SECOND, rate);
-
-    GST_BUFFER_TIMESTAMP (outbuf) =
-        (xing->duration == GST_CLOCK_TIME_NONE) ? 0 : xing->duration;
-    GST_BUFFER_DURATION (outbuf) = duration;
-    GST_BUFFER_OFFSET (outbuf) = xing->byte_count;
-    xing->byte_count += gst_buffer_get_size (outbuf);
-    GST_BUFFER_OFFSET_END (outbuf) = xing->byte_count;
-
-    if (xing->duration == GST_CLOCK_TIME_NONE)
-      xing->duration = duration;
-    else
-      xing->duration += duration;
-
-    if ((ret = gst_pad_push (xing->srcpad, outbuf)) != GST_FLOW_OK) {
-      GST_ERROR_OBJECT (xing, "Failed to push MP3 frame: %s",
-          gst_flow_get_name (ret));
-      return ret;
-    }
-  }
-
-  return ret;
-}
-
-static gboolean
-gst_xing_mux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
-  GstXingMux *xing;
-  gboolean result;
-
-  xing = GST_XING_MUX (parent);
-
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_SEGMENT:
-      if (xing->sent_xing) {
-        GST_ERROR ("Already sent Xing header, dropping NEWSEGMENT event!");
-        gst_event_unref (event);
-        result = FALSE;
-      } else {
-        GstSegment segment;
-
-        gst_event_copy_segment (event, &segment);
-
-        if (segment.format == GST_FORMAT_BYTES) {
-          result = gst_pad_push_event (xing->srcpad, event);
-        } else {
-
-          gst_event_unref (event);
-          gst_segment_init (&segment, GST_FORMAT_BYTES);
-          event = gst_event_new_segment (&segment);
-
-          result = gst_pad_push_event (xing->srcpad, event);
-        }
-      }
-      break;
-
-    case GST_EVENT_EOS:{
-      GstEvent *n_event;
-
-      GST_DEBUG_OBJECT (xing, "handling EOS event");
-
-      if (xing->sent_xing) {
-        GstSegment segment;
-
-        gst_segment_init (&segment, GST_FORMAT_BYTES);
-        n_event = gst_event_new_segment (&segment);
-
-        if (G_UNLIKELY (!gst_pad_push_event (xing->srcpad, n_event))) {
-          GST_WARNING
-              ("Failed to seek to position 0 for pushing the Xing header");
-        } else {
-          GstBuffer *header;
-          GstFlowReturn ret;
-
-          header = generate_xing_header (xing);
-
-          if (header == NULL) {
-            GST_ERROR ("Can't generate Xing header");
-          } else {
-
-            GST_INFO ("Writing real Xing header to beginning of stream");
-
-            if ((ret = gst_pad_push (xing->srcpad, header)) != GST_FLOW_OK)
-              GST_WARNING ("Failed to push updated Xing header: %s\n",
-                  gst_flow_get_name (ret));
-          }
-        }
-      }
-      result = gst_pad_push_event (xing->srcpad, event);
-      break;
-    }
-    default:
-      result = gst_pad_event_default (pad, parent, event);
-      break;
-  }
-
-  return result;
-}
-
-
-static GstStateChangeReturn
-gst_xing_mux_change_state (GstElement * element, GstStateChange transition)
-{
-  GstXingMux *xing;
-  GstStateChangeReturn result;
-
-  xing = GST_XING_MUX (element);
-
-  result = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
-  switch (transition) {
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
-      xing_reset (xing);
-      break;
-    default:
-      break;
-  }
-
-  return result;
-}
diff --git a/gst/xingmux/gstxingmux.h b/gst/xingmux/gstxingmux.h
deleted file mode 100644 (file)
index 0d8e82c..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2006 Christophe Fergeau  <teuf@gnome.org>
- * Copyright (c) 2008 Sebastian Dröge  <slomo@circular-chaos.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <gst/gst.h>
-#include <gst/base/gstadapter.h>
-
-#ifndef __GST_XINGMUX_H__
-#define __GST_XINGMUX_H__
-
-G_BEGIN_DECLS
-
-/* Standard macros for defining types for this element.  */
-#define GST_TYPE_XING_MUX \
-  (gst_xing_mux_get_type())
-#define GST_XING_MUX(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_XING_MUX,GstXingMux))
-#define GST_XING_MUX_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_XING_MUX,GstXingMuxClass))
-#define GST_IS_XING_MUX(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_XING_MUX))
-#define GST_IS_XING_MUX_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_XING_MUX))
-
-typedef struct _GstXingMux GstXingMux;
-typedef struct _GstXingMuxClass GstXingMuxClass;
-
-/* Definition of structure storing data for this element. */
-
-/**
- * GstXingMux:
- *
- * Opaque data structure.
- */
-struct _GstXingMux {
-  GstElement element;
-
-  GstPad *sinkpad, *srcpad;
-
-  /* < private > */
-
-  GstAdapter *adapter;
-  GstClockTime duration;
-  guint64 byte_count;
-  guint64 frame_count;
-  GList *seek_table;
-  gboolean sent_xing;
-
-  /* Copy of the first frame header */
-  guint32 first_header;
-};
-
-/* Standard definition defining a class for this element. */
-
-/**
- * GstXingMuxClass:
- *
- * Opaque data structure.
- */
-struct _GstXingMuxClass {
-  GstElementClass parent_class;
-};
-
-/* Standard function returning type information. */
-GType gst_xing_mux_get_type (void);
-GST_ELEMENT_REGISTER_DECLARE (xingmux);
-
-G_END_DECLS
-
-#endif /* __GST_XINGMUX_H__ */
diff --git a/gst/xingmux/meson.build b/gst/xingmux/meson.build
deleted file mode 100644 (file)
index d5b9f64..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-xing_sources = [
-  'plugin.c',
-  'gstxingmux.c',
-]
-
-gstxingmux = library('gstxingmux',
-  xing_sources,
-  c_args : ugly_args,
-  include_directories : [configinc],
-  dependencies : [gstbase_dep],
-  install : true,
-  install_dir : plugins_install_dir,
-)
-pkgconfig.generate(gstxingmux, install_dir : plugins_pkgconfig_install_dir)
-plugins += [gstxingmux]
diff --git a/gst/xingmux/plugin.c b/gst/xingmux/plugin.c
deleted file mode 100644 (file)
index 21dabbb..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/* GStreamer
- * Copyright (C) <2008> Jan Schmidt <jan.schmidt@sun.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 <gst/gst.h>
-#include "gstxingmux.h"
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  return GST_ELEMENT_REGISTER (xingmux, plugin);
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    xingmux,
-    "Add XING tags to mpeg audio files",
-    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
diff --git a/hooks/pre-commit.hook b/hooks/pre-commit.hook
deleted file mode 100755 (executable)
index 6f17740..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/bin/sh
-#
-# Check that the code follows a consistent code style
-#
-
-# Check for existence of indent, and error out if not present.
-# On some *bsd systems the binary seems to be called gnunindent,
-# so check for that first.
-
-version=`gnuindent --version 2>/dev/null`
-if test "x$version" = "x"; then
-  version=`gindent --version 2>/dev/null`
-  if test "x$version" = "x"; then
-    version=`indent --version 2>/dev/null`
-    if test "x$version" = "x"; then
-      echo "GStreamer git pre-commit hook:"
-      echo "Did not find GNU indent, please install it before continuing."
-      exit 1
-    else
-      INDENT=indent
-    fi
-  else
-    INDENT=gindent
-  fi
-else
-  INDENT=gnuindent
-fi
-
-case `$INDENT --version` in
-  GNU*)
-      ;;
-  default)
-      echo "GStreamer git pre-commit hook:"
-      echo "Did not find GNU indent, please install it before continuing."
-      echo "(Found $INDENT, but it doesn't seem to be GNU indent)"
-      exit 1
-      ;;
-esac
-
-INDENT_PARAMETERS="--braces-on-if-line \
-       --case-brace-indentation0 \
-       --case-indentation2 \
-       --braces-after-struct-decl-line \
-       --line-length80 \
-       --no-tabs \
-       --cuddle-else \
-       --dont-line-up-parentheses \
-       --continuation-indentation4 \
-       --honour-newlines \
-       --tab-size8 \
-       --indent-level2 \
-       --leave-preprocessor-space"
-
-echo "--Checking style--"
-for file in `git diff-index --cached --name-only HEAD --diff-filter=ACMR| grep "\.c$"` ; do
-    # nf is the temporary checkout. This makes sure we check against the
-    # revision in the index (and not the checked out version).
-    nf=`git checkout-index --temp ${file} | cut -f 1`
-    newfile=`mktemp /tmp/${nf}.XXXXXX` || exit 1
-    $INDENT ${INDENT_PARAMETERS} \
-       $nf -o $newfile 2>> /dev/null
-    # FIXME: Call indent twice as it tends to do line-breaks
-    # different for every second call.
-    $INDENT ${INDENT_PARAMETERS} \
-        $newfile 2>> /dev/null
-    diff -u -p "${nf}" "${newfile}"
-    r=$?
-    rm "${newfile}"
-    rm "${nf}"
-    if [ $r != 0 ] ; then
-echo "================================================================================================="
-echo " Code style error in: $file                                                                      "
-echo "                                                                                                 "
-echo " Please fix before committing. Don't forget to run git add before trying to commit again.        "
-echo " If the whole file is to be committed, this should work (run from the top-level directory):      "
-echo "                                                                                                 "
-echo "   gst-indent $file; git add $file; git commit"
-echo "                                                                                                 "
-echo "================================================================================================="
-        exit 1
-    fi
-done
-echo "--Checking style pass--"
diff --git a/meson.build b/meson.build
deleted file mode 100644 (file)
index c5c78fc..0000000
+++ /dev/null
@@ -1,318 +0,0 @@
-project('gst-plugins-ugly', 'c',
-  version : '1.19.2',
-  meson_version : '>= 0.54',
-  default_options : [ 'warning_level=1',
-                      'buildtype=debugoptimized' ])
-
-gst_version = meson.project_version()
-version_arr = gst_version.split('.')
-gst_version_major = version_arr[0].to_int()
-gst_version_minor = version_arr[1].to_int()
-gst_version_micro = version_arr[2].to_int()
- if version_arr.length() == 4
-  gst_version_nano = version_arr[3].to_int()
-else
-  gst_version_nano = 0
-endif
-gst_version_is_dev = gst_version_minor % 2 == 1 and gst_version_micro < 90
-
-have_cxx = add_languages('cpp', native: false, required: false)
-
-glib_req = '>= 2.56.0'
-gst_req = '>= @0@.@1@.0'.format(gst_version_major, gst_version_minor)
-
-api_version = '1.0'
-
-plugins_install_dir = join_paths(get_option('libdir'), 'gstreamer-1.0')
-plugins = []
-
-cc = meson.get_compiler('c')
-if have_cxx
-  cxx = meson.get_compiler('cpp')
-endif
-
-if cc.get_id() == 'msvc'
-  msvc_args = [
-      # Ignore several spurious warnings for things gstreamer does very commonly
-      # If a warning is completely useless and spammy, use '/wdXXXX' to suppress it
-      # If a warning is harmless but hard to fix, use '/woXXXX' so it's shown once
-      # NOTE: Only add warnings here if you are sure they're spurious
-      '/wd4018', # implicit signed/unsigned conversion
-      '/wd4146', # unary minus on unsigned (beware INT_MIN)
-      '/wd4244', # lossy type conversion (e.g. double -> int)
-      '/wd4305', # truncating type conversion (e.g. double -> float)
-      cc.get_supported_arguments(['/utf-8']), # set the input encoding to utf-8
-
-      # Enable some warnings on MSVC to match GCC/Clang behaviour
-      '/w14062', # enumerator 'identifier' in switch of enum 'enumeration' is not handled
-      '/w14101', # 'identifier' : unreferenced local variable
-      '/w14189', # 'identifier' : local variable is initialized but not referenced
-  ]
-  if have_cxx
-    add_project_arguments(msvc_args, language: ['c', 'cpp'])
-  else
-    add_project_arguments(msvc_args, language: 'c')
-  endif
-  # Disable SAFESEH with MSVC for plugins and libs that use external deps that
-  # are built with MinGW
-  noseh_link_args = ['/SAFESEH:NO']
-else
-  noseh_link_args = []
-endif
-
-if cc.has_link_argument('-Wl,-Bsymbolic-functions')
-  add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
-endif
-if have_cxx and cxx.has_link_argument('-Wl,-Bsymbolic-functions')
-  add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'cpp')
-endif
-
-cdata = configuration_data()
-check_headers = [
-  ['HAVE_DLFCN_H', 'dlfcn.h'],
-  ['HAVE_INTTYPES_H', 'inttypes.h'],
-  ['HAVE_MALLOC_H', 'malloc.h'],
-  ['HAVE_MEMORY_H', 'memory.h'],
-  ['HAVE_STDINT_H', 'stdint.h'],
-  ['HAVE_STDLIB_H', 'stdlib.h'],
-  ['HAVE_STRINGS_H', 'strings.h'],
-  ['HAVE_STRING_H', 'string.h'],
-  ['HAVE_SYS_STAT_H', 'sys/stat.h'],
-  ['HAVE_SYS_TYPES_H', 'sys/types.h'],
-  ['HAVE_UNISTD_H', 'unistd.h'],
-  ['HAVE_WINSOCK2_H', 'winsock2.h'],
-]
-
-foreach h : check_headers
-  if cc.has_header(h.get(1))
-    cdata.set(h.get(0), 1)
-  endif
-endforeach
-
-check_functions = [
-  ['HAVE_DCGETTEXT', 'dcgettext'], # FIXME: this looks unused
-]
-
-foreach f : check_functions
-  if cc.has_function(f.get(1))
-    cdata.set(f.get(0), 1)
-  endif
-endforeach
-
-cdata.set('SIZEOF_CHAR', cc.sizeof('char'))
-cdata.set('SIZEOF_INT', cc.sizeof('int'))
-cdata.set('SIZEOF_LONG', cc.sizeof('long'))
-cdata.set('SIZEOF_SHORT', cc.sizeof('short'))
-cdata.set('SIZEOF_VOIDP', cc.sizeof('void*'))
-
-cdata.set_quoted('VERSION', gst_version)
-cdata.set_quoted('PACKAGE', 'gst-plugins-ugly')
-cdata.set_quoted('GST_LICENSE', 'LGPL')
-cdata.set_quoted('GETTEXT_PACKAGE', 'gst-plugins-ugly-1.0')
-cdata.set_quoted('LOCALEDIR', join_paths(get_option('prefix'), get_option('localedir')))
-
-# GStreamer package name and origin url
-gst_package_name = get_option('package-name')
-if gst_package_name == ''
-  if gst_version_nano == 0
-    gst_package_name = 'GStreamer Ugly Plug-ins source release'
-  elif gst_version_nano == 1
-    gst_package_name = 'GStreamer Ugly Plug-ins git'
-  else
-    gst_package_name = 'GStreamer Ugly Plug-ins prerelease'
-  endif
-endif
-cdata.set_quoted('GST_PACKAGE_NAME', gst_package_name)
-cdata.set_quoted('GST_PACKAGE_ORIGIN', get_option('package-origin'))
-
-# Mandatory GST deps
-gst_dep = dependency('gstreamer-1.0', version : gst_req,
-    fallback : ['gstreamer', 'gst_dep'])
-gstapp_dep = dependency('gstreamer-app-1.0', version : gst_req,
-    fallback : ['gst-plugins-base', 'app_dep'])
-gstvideo_dep = dependency('gstreamer-video-1.0', version : gst_req,
-    fallback : ['gst-plugins-base', 'video_dep'])
-gstpbutils_dep = dependency('gstreamer-pbutils-1.0', version : gst_req,
-    fallback : ['gst-plugins-base', 'pbutils_dep'])
-gsttag_dep = dependency('gstreamer-tag-1.0', version : gst_req,
-    fallback : ['gst-plugins-base', 'tag_dep'])
-gstfft_dep = dependency('gstreamer-fft-1.0', version : gst_req,
-    fallback : ['gst-plugins-base', 'fft_dep'])
-gstaudio_dep = dependency('gstreamer-audio-1.0', version : gst_req,
-    fallback : ['gst-plugins-base', 'audio_dep'])
-gstbase_dep = dependency('gstreamer-base-1.0', version : gst_req,
-  fallback : ['gstreamer', 'gst_base_dep'])
-gstriff_dep = dependency('gstreamer-riff-1.0', version : gst_req,
-    fallback : ['gst-plugins-base', 'riff_dep'])
-gstrtp_dep = dependency('gstreamer-rtp-1.0', version : gst_req,
-    fallback : ['gst-plugins-base', 'rtp_dep'])
-gstnet_dep = dependency('gstreamer-net-1.0', version : gst_req,
-  fallback : ['gstreamer', 'gst_net_dep'])
-gstsdp_dep = dependency('gstreamer-sdp-1.0', version : gst_req,
-    fallback : ['gst-plugins-base', 'sdp_dep'])
-gstrtsp_dep = dependency('gstreamer-rtsp-1.0', version : gst_req,
-    fallback : ['gst-plugins-base', 'rtsp_dep'])
-gstcheck_dep = dependency('gstreamer-check-1.0', version : gst_req,
-    required : get_option('tests'),
-    fallback : ['gstreamer', 'gst_check_dep'])
-gstcontroller_dep = dependency('gstreamer-controller-1.0', version : gst_req,
-  fallback : ['gstreamer', 'gst_controller_dep'])
-
-orc_dep = dependency('orc-0.4', version : '>= 0.4.16', required : get_option('orc'),
-    fallback : ['orc', 'orc_dep'])
-if orc_dep.found()
-  cdata.set('HAVE_ORC', 1) # used by a52dec for cpu detection
-else
-  cdata.set('DISABLE_ORC', 1)
-endif
-
-gmodule_dep = dependency('gmodule-2.0', fallback : ['glib', 'libgmodule_dep'])
-
-if gmodule_dep.version().version_compare('< 2.67.4')
-  cdata.set('g_memdup2(ptr,sz)', '(G_LIKELY(((guint64)(sz)) < G_MAXUINT)) ? g_memdup(ptr,sz) : (g_abort(),NULL)')
-endif
-
-ugly_args = ['-DHAVE_CONFIG_H']
-configinc = include_directories('.')
-libsinc = include_directories('gst-libs')
-
-# Disable compiler warnings for unused variables and args if gst debug system is disabled
-if gst_dep.type_name() == 'internal'
-  gst_debug_disabled = not subproject('gstreamer').get_variable('gst_debug')
-else
-  # We can't check that in the case of subprojects as we won't
-  # be able to build against an internal dependency (which is not built yet)
-  gst_debug_disabled = cc.has_header_symbol('gst/gstconfig.h', 'GST_DISABLE_GST_DEBUG', dependencies: gst_dep)
-endif
-
-if gst_debug_disabled
-  message('GStreamer debug system is disabled')
-  if cc.has_argument('-Wno-unused')
-    add_project_arguments('-Wno-unused', language: 'c')
-  endif
-  if have_cxx and cxx.has_argument ('-Wno-unused')
-    add_project_arguments('-Wno-unused', language: 'cpp')
-  endif
-else
-  message('GStreamer debug system is enabled')
-endif
-
-warning_flags = [
-  '-Wmissing-declarations',
-  '-Wredundant-decls',
-  '-Wwrite-strings',
-  '-Wformat',
-  '-Wformat-nonliteral',
-  '-Wformat-security',
-  '-Winit-self',
-  '-Wmissing-include-dirs',
-  '-Waddress',
-  '-Wno-multichar',
-  '-Wvla',
-  '-Wpointer-arith',
-  '-Waggregate-return',
-  '-fno-strict-aliasing',
-  # Symbol visibility
-  '-fvisibility=hidden',
-]
-
-warning_c_flags = [
-  '-Wmissing-prototypes',
-  '-Wold-style-definition',
-  '-Wdeclaration-after-statement',
-  '-Wnested-externs'
-]
-
-foreach extra_arg : warning_flags
-  if cc.has_argument (extra_arg)
-    add_project_arguments([extra_arg], language: 'c')
-  endif
-  if have_cxx and cxx.has_argument (extra_arg)
-    add_project_arguments([extra_arg], language: 'cpp')
-  endif
-endforeach
-
-foreach extra_arg : warning_c_flags
-  if cc.has_argument (extra_arg)
-    add_project_arguments([extra_arg], language: 'c')
-  endif
-endforeach
-
-# Define G_DISABLE_DEPRECATED for development versions
-if gst_version_is_dev
-  message('Disabling deprecated GLib API')
-  add_project_arguments('-DG_DISABLE_DEPRECATED', language: 'c')
-endif
-
-cast_checks = get_option('gobject-cast-checks')
-if cast_checks.disabled() or (cast_checks.auto() and not gst_version_is_dev)
-  message('Disabling GLib cast checks')
-  add_project_arguments('-DG_DISABLE_CAST_CHECKS', language: 'c')
-endif
-
-glib_asserts = get_option('glib-asserts')
-if glib_asserts.disabled() or (glib_asserts.auto() and not gst_version_is_dev)
-  message('Disabling GLib asserts')
-  add_project_arguments('-DG_DISABLE_ASSERT', language: 'c')
-endif
-
-glib_checks = get_option('glib-checks')
-if glib_checks.disabled() or (glib_checks.auto() and not gst_version_is_dev)
-  message('Disabling GLib checks')
-  add_project_arguments('-DG_DISABLE_CHECKS', language: 'c')
-endif
-
-presetdir = join_paths(get_option('datadir'), 'gstreamer-' + api_version, 'presets')
-
-pkgconfig = import('pkgconfig')
-plugins_pkgconfig_install_dir = join_paths(plugins_install_dir, 'pkgconfig')
-if get_option('default_library') == 'shared'
-  # If we don't build static plugins there is no need to generate pc files
-  plugins_pkgconfig_install_dir = disabler()
-endif
-
-python3 = import('python').find_installation()
-subdir('gst')
-subdir('ext')
-subdir('tests')
-
-# xgettext is optional (on Windows for instance)
-if find_program('xgettext', required : get_option('nls')).found()
-  cdata.set('ENABLE_NLS', 1)
-  subdir('po')
-endif
-subdir('docs')
-subdir('scripts')
-
-# Set release date
-if gst_version_nano == 0
-  extract_release_date = find_program('scripts/extract-release-date-from-doap-file.py')
-  run_result = run_command(extract_release_date, gst_version, files('gst-plugins-ugly.doap'))
-  if run_result.returncode() == 0
-    release_date = run_result.stdout().strip()
-    cdata.set_quoted('GST_PACKAGE_RELEASE_DATETIME', release_date)
-    message('Package release date: ' + release_date)
-  else
-    # Error out if our release can't be found in the .doap file
-    error(run_result.stderr())
-  endif
-endif
-
-configure_file(output : 'config.h', configuration : cdata)
-
-run_command(python3, '-c', 'import shutil; shutil.copy("hooks/pre-commit.hook", ".git/hooks/pre-commit")')
-
-if meson.version().version_compare('>= 0.54')
-  plugin_names = []
-  foreach plugin: plugins
-    # FIXME: Use str.subtring() when we can depend on Meson 0.56
-    split = plugin.name().split('gst')
-    if split.length() == 2
-      plugin_names += [split[1]]
-    else
-      warning('Need substring API in meson >= 0.56 to properly parse plugin name: ' + plugin.name())
-      plugin_names += [plugin.name()]
-    endif
-  endforeach
-  summary({'Plugins':plugin_names}, list_sep: ', ')
-endif
diff --git a/meson_options.txt b/meson_options.txt
deleted file mode 100644 (file)
index 0b59d01..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-option('x264_libraries', type : 'string', value : '',
-       description : 'Colon separated list of additional x264 library paths, e.g. for 10-bit version')
-
-# Feature options for plugins without external deps
-option('asfdemux', type : 'feature', value : 'auto')
-option('dvdlpcmdec', type : 'feature', value : 'auto')
-option('dvdsub', type : 'feature', value : 'auto')
-option('realmedia', type : 'feature', value : 'auto')
-option('xingmux', type : 'feature', value : 'auto')
-
-# Feature options for plugins that need external deps
-option('a52dec', type : 'feature', value : 'auto', description : 'Dolby Digital (AC-3) audio decoder plugin')
-option('amrnb', type : 'feature', value : 'auto', description : 'Adaptive Multi-Rate Narrow-Band audio codec plugin')
-option('amrwbdec', type : 'feature', value : 'auto', description : 'Adaptive Multi-Rate Wide-Band audio decoder plugin')
-option('cdio', type : 'feature', value : 'auto', description : 'CD audio source plugin')
-option('dvdread', type : 'feature', value : 'auto', description : 'DVD video source plugin')
-option('mpeg2dec', type : 'feature', value : 'auto', description : 'MPEG 2 video decoder plugin')
-option('sidplay', type : 'feature', value : 'auto', description : 'Commodore 64 audio decoder plugin')
-option('x264', type : 'feature', value : 'auto', description : 'H.264 video encoder plugin')
-
-# Common feature options
-option('nls', type : 'feature', value : 'auto', yield: true,
-       description : 'Enable native language support (translations)')
-option('orc', type : 'feature', value : 'auto', yield : true)
-option('tests', type : 'feature', value : 'auto', yield : true)
-option('gobject-cast-checks', type : 'feature', value : 'auto', yield : true,
-       description: 'Enable run-time GObject cast checks (auto = enabled for development, disabled for stable releases)')
-option('glib-asserts', type : 'feature', value : 'enabled', yield : true,
-       description: 'Enable GLib assertion (auto = enabled for development, disabled for stable releases)')
-option('glib-checks', type : 'feature', value : 'enabled', yield : true,
-       description: 'Enable GLib checks such as API guards (auto = enabled for development, disabled for stable releases)')
-
-# Common options
-option('package-name', type : 'string', yield : true,
-       description : 'package name to use in plugins')
-option('package-origin', type : 'string', value : 'Unknown package origin', yield: true,
-       description : 'package origin URL to use in plugins')
-option('doc', type : 'feature', value : 'auto', yield: true,
-       description: 'Enable documentation.')
\ No newline at end of file
diff --git a/po/LINGUAS b/po/LINGUAS
deleted file mode 100644 (file)
index 99428b1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-af ast az bg ca cs da de el en_GB eo es eu fi fr fur gl hr hu id it ja lt lv ms mt nb nl or pl pt_BR ro ru sk sl sq sr sv ta tr uk vi zh_CN
diff --git a/po/POTFILES b/po/POTFILES
deleted file mode 100644 (file)
index 5520fe1..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-ext/cdio/gstcdiocddasrc.c
-ext/dvdread/dvdreadsrc.c
-gst/asfdemux/gstasfdemux.c
diff --git a/po/af.po b/po/af.po
deleted file mode 100644 (file)
index 27b75ef..0000000
--- a/po/af.po
+++ /dev/null
@@ -1,234 +0,0 @@
-# Translation of gstreamer plugin messages to Afrikaans. 
-# Copyright (C) 2004 Free Software Foundation, Inc.
-# This file is put in the public domain.
-# Petri Jooste <rkwjpj@puk.ac.za>, 2004.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins 0.7.6\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2004-03-18 14:16+0200\n"
-"Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n"
-"Language-Team: Afrikaans <i18n@af.org.za>\n"
-"Language: af\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=iso-8859-1\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#, fuzzy
-msgid "Could not read from CD."
-msgstr "Kon nie skryf na lêer \"%s\" nie."
-
-msgid "Could not open CD device for reading."
-msgstr "Kon nie CD-toestel oopmaak om te lees nie."
-
-#, fuzzy
-msgid "Disc is not an Audio CD."
-msgstr "Toestel is nie oop nie."
-
-msgid "Could not open DVD"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "Could not open DVD title %d"
-msgstr "Kon nie vfs-lêer \"%s\" toemaak nie."
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr ""
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-
-#, fuzzy
-msgid "Could not read DVD."
-msgstr "Kon nie skryf na lêer \"%s\" nie."
-
-msgid "This stream contains no data."
-msgstr ""
-
-#, fuzzy
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Kon nie skryf na lêer \"%s\" nie."
-
-#, fuzzy
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Kon nie vfs-lêer \"%s\" toemaak nie."
-
-#~ msgid "Could not open file \"%s\" for writing."
-#~ msgstr "Kon nie lêer \"%s\" oopmaak om in te skryf nie."
-
-#~ msgid "Error closing file \"%s\"."
-#~ msgstr "Fout tydens toemaak van lêer \"%s\"."
-
-#~ msgid "Could not open file \"%s\" for reading."
-#~ msgstr "Kon nie lêer \"%s\" oopmaak om te lees nie."
-
-#~ msgid "No filename specified."
-#~ msgstr "Geen lêernaam gespesifiseer."
-
-#~ msgid "No or invalid input audio, AVI stream will be corrupt."
-#~ msgstr "Geen of ongeldige klanktoevoer, AVI-stroom sal korrup wees."
-
-#~ msgid "Could not open audio device \"%s\" for writing."
-#~ msgstr "Kon nie oudio-toestel \"%s\" oopmaak vir skryf nie."
-
-#~ msgid "Could not open control device \"%s\" for writing."
-#~ msgstr "Kon nie beheertoestel \"%s\" oopmaak vir skryf nie."
-
-#~ msgid "Could not configure audio device \"%s\"."
-#~ msgstr "Kon nie oudio-toestel \"%s\" konfigureer nie."
-
-#~ msgid "Could not set audio device \"%s\" to %d Hz."
-#~ msgstr "Kon nie klanktoestel \"%s\" verstel na %d Hz nie."
-
-#~ msgid "Could not close audio device \"%s\"."
-#~ msgstr "Kon nie oudio-toestel \"%s\" toemaak nie."
-
-#~ msgid "Could not close control device \"%s\"."
-#~ msgstr "Kon nie beheertoestel \"%s\" toemaak nie."
-
-#~ msgid "Could not open video device \"%s\" for writing."
-#~ msgstr "Kon nie video-toestel \"%s\" oopmaak vir skryf nie."
-
-#~ msgid "Could not close video device \"%s\"."
-#~ msgstr "Kon nie video-toestel \"%s\" toemaak nie."
-
-#~ msgid "Could not write to device \"%s\"."
-#~ msgstr "Kon nie skryf na toestel \"%s\" nie."
-
-#~ msgid "OSS device \"%s\" is already in use by another program."
-#~ msgstr "OSS-toestel \"%s\" is reeds in gebruik deur 'n ander program."
-
-#~ msgid "Could not access device \"%s\", check its permissions."
-#~ msgstr "Kon nie toegang kry tot toestel \"%s\" nie, kyk na toegangsregte."
-
-#~ msgid "Device \"%s\" does not exist."
-#~ msgstr "Toestel \"%s\" bestaan nie."
-
-#~ msgid "Could not open device \"%s\" for writing."
-#~ msgstr "Kon nie toestel \"%s\" oopmaak vir skryf nie."
-
-#~ msgid "Could not open device \"%s\" for reading."
-#~ msgstr "Kon nie toestel \"%s\" oopmaak vir lees nie."
-
-#~ msgid "Volume"
-#~ msgstr "Volume"
-
-#~ msgid "Bass"
-#~ msgstr "Bas"
-
-#~ msgid "Treble"
-#~ msgstr "Treble"
-
-#~ msgid "Synth"
-#~ msgstr "Sintetiseerder"
-
-#~ msgid "PCM"
-#~ msgstr "PCM"
-
-#~ msgid "Speaker"
-#~ msgstr "Luidspreker"
-
-#~ msgid "Line-in"
-#~ msgstr "Lyn-in"
-
-#~ msgid "Microphone"
-#~ msgstr "Mikrofoon"
-
-#~ msgid "CD"
-#~ msgstr "CD"
-
-#~ msgid "Mixer"
-#~ msgstr "Menger"
-
-#~ msgid "PCM-2"
-#~ msgstr "PCM-2"
-
-#~ msgid "Record"
-#~ msgstr "Neem op"
-
-#~ msgid "In-gain"
-#~ msgstr "In-versterking"
-
-#~ msgid "Out-gain"
-#~ msgstr "Uit-versterking"
-
-#~ msgid "Line-1"
-#~ msgstr "Lyn-1"
-
-#~ msgid "Line-2"
-#~ msgstr "Lyn-2"
-
-#~ msgid "Line-3"
-#~ msgstr "Lyn-3"
-
-#~ msgid "Digital-1"
-#~ msgstr "Digitaal-1"
-
-#~ msgid "Digital-2"
-#~ msgstr "Digitaal-2"
-
-#~ msgid "Digital-3"
-#~ msgstr "Digitaal-3"
-
-#~ msgid "Phone-in"
-#~ msgstr "Telefoon-in"
-
-#~ msgid "Phone-out"
-#~ msgstr "Telefoon-uit"
-
-#~ msgid "Video"
-#~ msgstr "Video"
-
-#~ msgid "Radio"
-#~ msgstr "Radio"
-
-#~ msgid "Monitor"
-#~ msgstr "Monitor"
-
-#, fuzzy
-#~ msgid "PC Speaker"
-#~ msgstr "Luidspreker"
-
-#~ msgid "Could not open vfs file \"%s\" for reading."
-#~ msgstr "Kon nie vfs-lêer \"%s\" oopmaak vir lees nie."
-
-#, fuzzy
-#~ msgid "No filename given."
-#~ msgstr "Geen lêernaam gespesifiseer."
-
-#, fuzzy
-#~ msgid "Could not open vfs file \"%s\" for writing: %s."
-#~ msgstr "Kon nie vfs-lêer \"%s\" oopmaak vir skryf nie."
-
-#, fuzzy
-#~ msgid "No filename given"
-#~ msgstr "Geen lêernaam gespesifiseer."
-
-#~ msgid "No device specified."
-#~ msgstr "Geen toestel gespesifiseer"
-
-#~ msgid "Could not open device \"%s\" for reading and writing."
-#~ msgstr "Kon nie toestel \"%s\" oopmaak vir lees en skryf nie."
-
-#~ msgid "Device is open."
-#~ msgstr "Toestel is oop."
-
-#~ msgid "Device \"%s\" is not a capture device."
-#~ msgstr "Toestel \"%s\" is nie 'n vasleggingtoestel nie."
-
-#~ msgid "Could not get buffers from device \"%s\"."
-#~ msgstr "Kon nie buffers vanaf toestel \"%s\" verkry nie."
-
-#~ msgid "Could not get enough buffers from device \"%s\"."
-#~ msgstr "Kon nie genoeg buffers vanaf toestel \"%s\" kry nie."
diff --git a/po/ast.po b/po/ast.po
deleted file mode 100644 (file)
index 9f7ecec..0000000
--- a/po/ast.po
+++ /dev/null
@@ -1,76 +0,0 @@
-# Asturian translation for gst-plugins-ugly
-# This file is put in the public domain.
-#
-# enolp <enolp@softastur.org>, 2018.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.10.0\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-11-01 17:53+0200\n"
-"PO-Revision-Date: 2018-07-14 12:03+0100\n"
-"Last-Translator: enolp <enolp@softastur.org>\n"
-"Language-Team: Asturian <ubuntu-l10n-ast@lists.ubuntu.com>\n"
-"Language: ast\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Lokalize 2.0\n"
-
-#: ext/cdio/gstcdiocddasrc.c:199
-msgid "Could not read from CD."
-msgstr "Nun pudo lleese dende'l CD."
-
-#: ext/cdio/gstcdiocddasrc.c:406
-msgid "Could not open CD device for reading."
-msgstr "Nun pudo abrise'l preséu de CDs pa la llectura."
-
-#: ext/cdio/gstcdiocddasrc.c:413
-msgid "Disc is not an Audio CD."
-msgstr "El discu nun ye un CD d'audiu."
-
-#: ext/dvdread/dvdreadsrc.c:231 ext/dvdread/dvdreadsrc.c:238
-msgid "Could not open DVD"
-msgstr "Nun pudo abrise'l DVD"
-
-#: ext/dvdread/dvdreadsrc.c:245 ext/dvdread/dvdreadsrc.c:621
-#: ext/dvdread/dvdreadsrc.c:628
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Nun pudo abrise'l titulu del DVD %d"
-
-#: ext/dvdread/dvdreadsrc.c:251
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Fallu al dir al capítulu %d del títulu del DVD %d"
-
-#: ext/dvdread/dvdreadsrc.c:635
-#, c-format
-msgid "Could not open DVD title %d. Interactive titles are not supported by this element"
-msgstr "Nun pudo abrise'l títulu del DVD %d. Esti elementu nun sofita los elementos interactivos."
-
-#: ext/dvdread/dvdreadsrc.c:990
-msgid "Could not read DVD. This may be because the DVD is encrypted and a DVD decryption library is not installed."
-msgstr "Nun pudo lleese'l DVD. Esto podría ser porque'l DVD ta cifráu y nun s'instaló una biblioteca de descifráu de DVDs."
-
-#: ext/dvdread/dvdreadsrc.c:993
-msgid "Could not read DVD."
-msgstr "Nun pudo lleese'l DVD."
-
-#: ext/lame/gstlamemp3enc.c:395
-msgid "Failed to configure LAME mp3 audio encoder. Check your encoding parameters."
-msgstr "Fallu al configurar el codificador d'audiu MP3 de LAME. Comprueba los parámetros de codificación."
-
-#: ext/lame/gstlamemp3enc.c:427 ext/twolame/gsttwolamemp2enc.c:488
-#, c-format
-msgid "The requested bitrate %d kbit/s for property '%s' is not allowed. The bitrate was changed to %d kbit/s."
-msgstr "La tasa de bits %d kbit/s solicitada pa la propieda «%s» nun ta permitida. Camudóse la tasa de bits a %d kbit/s."
-
-#: ext/twolame/gsttwolamemp2enc.c:411
-msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-msgstr "Fallu al configurar el codificador TwoLAME. Comprueba los parámetros de codificación."
-
-#: gst/asfdemux/gstasfdemux.c:446
-msgid "This stream contains no data."
-msgstr "Esti fluxu nun contién datos."
diff --git a/po/az.po b/po/az.po
deleted file mode 100644 (file)
index d3c3870..0000000
--- a/po/az.po
+++ /dev/null
@@ -1,235 +0,0 @@
-# Translation of 'gst-plugins' messages to Azerbaijani.
-# Copyright (C) 2004 Free Software Foundation, Inc.
-# This file is put in the public domain.
-# Mətin Əmirov <metin@karegen.com>, 2004.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-0.8.0\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2004-03-19 18:29+0200\n"
-"Last-Translator: Metin Amiroff <metin@karegen.com>\n"
-"Language-Team: Azerbaijani <translation-team-az@lists.sourceforge.net>\n"
-"Language: az\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.0.2\n"
-
-#, fuzzy
-msgid "Could not read from CD."
-msgstr "\"%s\" faylına yazıla bilmədi."
-
-msgid "Could not open CD device for reading."
-msgstr "CD avadanlığı oxuma üçün açıla bilmədi."
-
-#, fuzzy
-msgid "Disc is not an Audio CD."
-msgstr "Avadanlıq açıq deyil."
-
-msgid "Could not open DVD"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "Could not open DVD title %d"
-msgstr "\"%s\" vfs faylı bağlana bilmədi."
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr ""
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-
-#, fuzzy
-msgid "Could not read DVD."
-msgstr "\"%s\" faylına yazıla bilmədi."
-
-msgid "This stream contains no data."
-msgstr ""
-
-#, fuzzy
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "\"%s\" faylına yazıla bilmədi."
-
-#, fuzzy
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "\"%s\" vfs faylı bağlana bilmədi."
-
-#~ msgid "Could not open file \"%s\" for writing."
-#~ msgstr "\"%s\" faylı yazma üçün açıla bilmədi."
-
-#~ msgid "Error closing file \"%s\"."
-#~ msgstr "\"%s\" faylı bağlana bilmədi."
-
-#~ msgid "Could not open file \"%s\" for reading."
-#~ msgstr "\"%s\" faylı oxuma üçün açıla bilmədi."
-
-#~ msgid "No filename specified."
-#~ msgstr "Fayl adı verilməyib."
-
-#~ msgid "No or invalid input audio, AVI stream will be corrupt."
-#~ msgstr "Səhv ya da olmayan audio girişi, AVI yayımı pozulacaqdır."
-
-#~ msgid "Could not open audio device \"%s\" for writing."
-#~ msgstr "\"%s\" audio avadanlığı yazma üçün açıla bilmədi."
-
-#~ msgid "Could not open control device \"%s\" for writing."
-#~ msgstr "\"%s\" idarə avadanlığı yazma üçün açıla bilmədi."
-
-#~ msgid "Could not configure audio device \"%s\"."
-#~ msgstr "\"%s\" audio avadanlığı quraşdırıla bilmədi."
-
-#~ msgid "Could not set audio device \"%s\" to %d Hz."
-#~ msgstr "\"%s\" audio avadanlığı %d Hz-ə keçirilə bilmədi."
-
-#~ msgid "Could not close audio device \"%s\"."
-#~ msgstr "\"%s\" audio avadanlığı bağlana bilmədi."
-
-#~ msgid "Could not close control device \"%s\"."
-#~ msgstr "\"%s\" idarə avadanlığı bağlana bilmədi."
-
-#~ msgid "Could not open video device \"%s\" for writing."
-#~ msgstr "\"%s\" video avadanlığı yazma üçün açıla bilmədi."
-
-#~ msgid "Could not close video device \"%s\"."
-#~ msgstr "\"%s\" video avadanlığı bağlana bilmədi."
-
-#~ msgid "Could not write to device \"%s\"."
-#~ msgstr "\"%s\" avadanlığına yazıla bilmədi."
-
-#~ msgid "OSS device \"%s\" is already in use by another program."
-#~ msgstr "\"%s\" OSS avadanlığı başqa bir proqram tərəfindən istifadədədir."
-
-#~ msgid "Could not access device \"%s\", check its permissions."
-#~ msgstr "\"%s\" avadanlığına yetişə bilmədi, səlahiyyətlərini yoxlayın."
-
-#~ msgid "Device \"%s\" does not exist."
-#~ msgstr "\"%s\" avadanlığı mövcud deyil."
-
-#~ msgid "Could not open device \"%s\" for writing."
-#~ msgstr "\"%s\" avadanlığı yazma üçün açıla bilmədi."
-
-#~ msgid "Could not open device \"%s\" for reading."
-#~ msgstr "\"%s\" avadanlığı oxuma üçün açıla bilmədi."
-
-#~ msgid "Volume"
-#~ msgstr "Səs"
-
-#~ msgid "Bass"
-#~ msgstr "Bas"
-
-#~ msgid "Treble"
-#~ msgstr "İncə"
-
-#~ msgid "Synth"
-#~ msgstr "Sint"
-
-#~ msgid "PCM"
-#~ msgstr "PCM"
-
-#~ msgid "Speaker"
-#~ msgstr "Spiker"
-
-#~ msgid "Line-in"
-#~ msgstr "Xətd-giriş"
-
-#~ msgid "Microphone"
-#~ msgstr "Mikrofon"
-
-#~ msgid "CD"
-#~ msgstr "CD"
-
-#~ msgid "Mixer"
-#~ msgstr "Mikser"
-
-#~ msgid "PCM-2"
-#~ msgstr "PCM-2"
-
-#~ msgid "Record"
-#~ msgstr "Qeyd"
-
-#~ msgid "In-gain"
-#~ msgstr "Giriş-gain"
-
-#~ msgid "Out-gain"
-#~ msgstr "Çıxış-gain"
-
-#~ msgid "Line-1"
-#~ msgstr "Xətd-1"
-
-#~ msgid "Line-2"
-#~ msgstr "Xətd-2"
-
-#~ msgid "Line-3"
-#~ msgstr "Xətd-3"
-
-#~ msgid "Digital-1"
-#~ msgstr "Dijital-1"
-
-#~ msgid "Digital-2"
-#~ msgstr "Dijital-2"
-
-#~ msgid "Digital-3"
-#~ msgstr "Dijital-3"
-
-#~ msgid "Phone-in"
-#~ msgstr "Telefon-girişi"
-
-#~ msgid "Phone-out"
-#~ msgstr "Telefon-çıxışı"
-
-#~ msgid "Video"
-#~ msgstr "Video"
-
-#~ msgid "Radio"
-#~ msgstr "Radio"
-
-#~ msgid "Monitor"
-#~ msgstr "Monitor"
-
-#, fuzzy
-#~ msgid "PC Speaker"
-#~ msgstr "Spiker"
-
-#~ msgid "Could not open vfs file \"%s\" for reading."
-#~ msgstr "\"%s\" vfs faylı oxuma üçün açıla bilmədi."
-
-#, fuzzy
-#~ msgid "No filename given."
-#~ msgstr "Fayl adı verilməyib."
-
-#, fuzzy
-#~ msgid "Could not open vfs file \"%s\" for writing: %s."
-#~ msgstr "\"%s\" vfs faylı yazma üçün açıla bilmədi."
-
-#, fuzzy
-#~ msgid "No filename given"
-#~ msgstr "Fayl adı verilməyib."
-
-#~ msgid "No device specified."
-#~ msgstr "Avadanlıq bildirilməyib."
-
-#~ msgid "Could not open device \"%s\" for reading and writing."
-#~ msgstr "\"%s\" avadanlığı oxuma və yazma üçün açıla bilmədi."
-
-#~ msgid "Device is open."
-#~ msgstr "Avadanlıq açıqdır."
-
-#~ msgid "Device \"%s\" is not a capture device."
-#~ msgstr "\"%s\" avadanlığı capture avadanlığı deyil."
-
-#~ msgid "Could not get buffers from device \"%s\"."
-#~ msgstr "\"%s\" avadanlığından bufferlər alına bilmədi."
-
-#~ msgid "Could not get enough buffers from device \"%s\"."
-#~ msgstr "\"%s\" avadanlığından kifayət qədər bufferlər alına bilmədi."
diff --git a/po/bg.po b/po/bg.po
deleted file mode 100644 (file)
index 5491240..0000000
--- a/po/bg.po
+++ /dev/null
@@ -1,82 +0,0 @@
-# Bulgarian translation of gst-plugins-ugly.
-# Copyright (C) 2007, 2008, 2009, 2010, 2011, 2016 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Alexander Shopov <ash@kambanaria.org>, 2007, 2008, 2009, 2010, 2011, 2016.
-#
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.7.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2016-02-21 21:03+0200\n"
-"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
-"Language-Team: Bulgarian <dict@ludost.net>\n"
-"Language: bg\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-
-msgid "Could not read from CD."
-msgstr "CD-то не може да бъде прочетено."
-
-msgid "Could not open CD device for reading."
-msgstr "Не може да се чете от устройството за CD-та."
-
-msgid "Disc is not an Audio CD."
-msgstr "Дискът не е аудио CD."
-
-msgid "Could not open DVD"
-msgstr "DVD-то не може да бъде отворено"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Заглавната част %d от DVD-то не може да бъде отворена"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Не може да се премине към раздел %d от заглавната част %d на DVD-то"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Заглавната част %d от DVD-то не може да бъде отворена. Интерактивни части не "
-"се поддържат от този елемент"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"DVD-то не може да бъде прочетено. Причината може да е, че DVD-то е шифрирано "
-"и не е инсталирана библиотека за дешифриране."
-
-msgid "Could not read DVD."
-msgstr "DVD-то не може да бъде прочетено."
-
-msgid "This stream contains no data."
-msgstr "Потокът не съдържа данни."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Кодерът за mp3 — LAME не може да бъде настроен. Проверете настройките за "
-#~ "кодиране."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Поисканата честота в битове %d kbit/s за свойството „%s“ не е позволена. "
-#~ "Тя бе променена на %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Кодерът TwoLAME не може да бъде настроен. Проверете настройките за "
-#~ "кодиране."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Вътрешна грешка в потока от данни."
diff --git a/po/ca.po b/po/ca.po
deleted file mode 100644 (file)
index 1d5b437..0000000
--- a/po/ca.po
+++ /dev/null
@@ -1,84 +0,0 @@
-# Catalan translation for gstreamer.
-# Copyright © 2004, 2005, 2010 Free Software Foundation, Inc.
-# This file is put in the public domain.
-# Jordi Mallach <jordi@sindominio.net>, 2004, 2005, 2010.
-# Jordi Estrada <jordi.estrada@yamaha-motor.es>, 2011.
-# Gil Forcada <gforcada@gnome.org>, 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 0.10.17.2\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-01-01 14:19+0100\n"
-"Last-Translator: Gil Forcada <gforcada@gnome.org>\n"
-"Language-Team: Catalan <ca@dodds.net>\n"
-"Language: ca\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-
-msgid "Could not read from CD."
-msgstr "No s'ha pogut llegir des del CD."
-
-msgid "Could not open CD device for reading."
-msgstr "No s'ha pogut obrir el dispositiu de CD per a lectura."
-
-msgid "Disc is not an Audio CD."
-msgstr "El disc no és un CD d'àudio."
-
-msgid "Could not open DVD"
-msgstr "No s'ha pogut obrir el DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "No s'ha pogut obrir el títol %d del DVD"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "No s'ha pogut anar al capítol %d del títol %d del DVD."
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"No s'ha pogut obrir el títol %d del DVD. Els títols interactius no són "
-"compatibles amb aquest element"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"No s'ha pogut llegir el DVD. Possiblement el DVD està encriptat i la "
-"biblioteca de desencriptació de DVD no està instal·lada."
-
-msgid "Could not read DVD."
-msgstr "No s'ha pogut llegir el DVD."
-
-msgid "This stream contains no data."
-msgstr "Aquest flux no conté dades."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "No s'ha pogut configurar el codificador LAME. Comproveu els paràmetres de "
-#~ "codificació."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "La taxa de bits %d kbit/s per a la propietat «%s» no és permesa. S'ha "
-#~ "canviat la taxa de bits a %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "No s'ha pogut configurar el codificador TwoLAME. Comproveu els paràmetres "
-#~ "de codificació."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "S'ha produït un error intern de flux de dades."
diff --git a/po/cs.po b/po/cs.po
deleted file mode 100644 (file)
index eecac79..0000000
--- a/po/cs.po
+++ /dev/null
@@ -1,84 +0,0 @@
-# Czech translations of gst-plugins-ugly.
-# Copyright (C) 2007, 2008, 2009 the author(s) of gst-plugins-ugly.
-# Copyright (C) 2004 Miloslav Trmac <mitr@volny.cz>.
-# This file is put in the public domain.
-#
-# Miloslav Trmac <mitr@volny.cz>, 2004.
-# Petr Kovar <pknbe@volny.cz>, 2007, 2008, 2009.
-# Marek Černocký <marek@manet.cz>, 2013.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2013-09-07 07:06+0200\n"
-"Last-Translator: Marek Černocký <marek@manet.cz>\n"
-"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
-"Language: cs\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Gtranslator 2.91.6\n"
-
-msgid "Could not read from CD."
-msgstr "Nezdařilo se čtení z CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Nezdařilo se otevřít zařízení CD pro čtení."
-
-msgid "Disc is not an Audio CD."
-msgstr "Disk není zvukovým CD."
-
-msgid "Could not open DVD"
-msgstr "Nezdařilo se otevřít DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Nezdařilo se otevřít titul DVD %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Nezdařil se přechod na kapitolu %d titulu DVD %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Nezdařilo se otevřít titul DVD %d. Interaktivní tituly nejsou tímto prvkem "
-"podporovány"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Nezdařilo se čtení DVD. To může být způsobeno tím, že je DVD šifrováno a "
-"knihovna pro dešifrování DVD není nainstalována."
-
-msgid "Could not read DVD."
-msgstr "Nezdařilo se čtení DVD."
-
-msgid "This stream contains no data."
-msgstr "Tento proud neobsahuje žádná data."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Selhalo nastavení zvukového kodéru LAME mp3. Zkontrolujte parametry "
-#~ "kódování."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Požadovaný datový tok %d kb/s za sekundu není u vlastnosti „%s“ povolen. "
-#~ "Datový tok byl změněn na %d kb/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr "Selhalo nastavení kodéru TwoLAME. Zkontrolujte parametry kódování."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Interní chyba datového proudu."
diff --git a/po/da.po b/po/da.po
deleted file mode 100644 (file)
index 40172a3..0000000
--- a/po/da.po
+++ /dev/null
@@ -1,97 +0,0 @@
-# Danish translation of gst-plugins-ugly.
-# Copyright (C) 2011 gst.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-#
-# Mogens Jaeger <mogens@jaeger.tf>, 2007.
-# Joe Hansen <joedalton2@yahoo.dk>, 2008, 2009, 2011, 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly-1.0.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-12-09 03:56+0100\n"
-"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
-"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
-"Language: da\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-msgid "Could not read from CD."
-msgstr "Kunne ikke åbne cd."
-
-msgid "Could not open CD device for reading."
-msgstr "Kunne ikke åbne cd-enhed."
-
-msgid "Disc is not an Audio CD."
-msgstr "Disk er ikke en lyd-cd."
-
-msgid "Could not open DVD"
-msgstr "Kunne ikke åbne dvd"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Kunne ikke åbne dvd-titel %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Kunne ikke gå til kapitel %d i dvd-titel %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Kunne ikke åbne dvd-titel %d. Interaktive titler er ikke understøttet i "
-"dette element"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Kunne ikke læse dvd. Dette kan være fordi dvd'en er krypteret og et dvd-"
-"dekrypteringsbibliotek ikke er installeret."
-
-msgid "Could not read DVD."
-msgstr "Kunne ikke læse dvd."
-
-msgid "This stream contains no data."
-msgstr "Denne strøm indeholder ingen data."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Kunne ikke konfigurere LAME mp3-lydindkoderen. Kontroller dine "
-#~ "indkoderparametre."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Den krævede bithastighed %d kbit/s for egenskab %s er ikke tilladt. "
-#~ "Bithastigheden blev ændret til %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Kunne ikke konfigurere TwoLAME-indkoderen. Kontroller dine "
-#~ "indkoderparametre."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Intern datastrømfejl."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Ugyldig titelinformation på dvd."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Kunne ikke læse titelinformation på dvd."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Kunne ikke åbne dvd-enhed %s."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Mislykkedes i at indstille PGC-baseret søgning."
-
-#~ msgid "This file is encrypted and cannot be played."
-#~ msgstr "Filen er krypteret og kan ikke afspilles."
diff --git a/po/de.po b/po/de.po
deleted file mode 100644 (file)
index 4fc0d21..0000000
--- a/po/de.po
+++ /dev/null
@@ -1,101 +0,0 @@
-# German translations for gst-plugins-ugly 1.3.2
-# Copyright (C) 2009 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-#
-# PCM = PCM
-# Line-in = Eingang
-# Line-out = Ausgang
-# Pipeline = Weiterleitung
-# Stream = Strom
-# Christian Kirbach <christian.kirbach@gmail.com>, 2009, 2011, 2012, 2013.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.3.2\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2014-05-22 18:29+0100\n"
-"Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
-"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
-"Language: de\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 1.5.4\n"
-
-msgid "Could not read from CD."
-msgstr "Von der CD konnte nicht gelesen werden."
-
-msgid "Could not open CD device for reading."
-msgstr "Das CD-Laufwerk konnte nicht zum Lesen geöffnet werden."
-
-msgid "Disc is not an Audio CD."
-msgstr "Das Medium ist keine Audio-CD."
-
-msgid "Could not open DVD"
-msgstr "Die DVD konnte nicht geöffnet werden."
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Der Titel »%d« der DVD konnte nicht geöffnet werden."
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Springen zu Kapitel %d des DVD-Titels »%d« schlug fehl"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Der DVD-Titel »%d« konnte nicht geöffnet werden. Interaktive Titel werden "
-"von diesem Element nicht unterstützt"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"DVD konnten nicht gelesen werden. Dies könnte daran liegen, dass die DVD "
-"verschlüsselt ist und eine Bibliothek zur DVD-Entschlüsselung nicht "
-"installiert ist."
-
-msgid "Could not read DVD."
-msgstr "DVD konnten nicht gelesen werden."
-
-msgid "This stream contains no data."
-msgstr "Dieser Strom enthält keine Daten."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Konfigurieren des MP3 Audio-Enkodierers »LAME« schlug fehl. Überprüfen "
-#~ "Sie die Parameter zum Enkodieren."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Die angeforderte Bitrate von %d kBit/s ist für die Eigenschaft »%s« nicht "
-#~ "erlaubt. Die Bitrate wurde auf %d kBit/s abgeändert."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Konfigurieren des Enkodierers »TwoLAME« schlug fehl. Überprüfen Sie die "
-#~ "Parameter zum Enkodieren. "
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Interner Datenstromfehler."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Ungültige Titelinformation auf der DVD."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Die Titelinformationen der DVD konnten nicht gelesen werden."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Öffnen des DVD-Geräts »%s« schlug fehl."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "PGC-basiertes Suchen schlug fehl."
diff --git a/po/el.po b/po/el.po
deleted file mode 100644 (file)
index 7bbc820..0000000
--- a/po/el.po
+++ /dev/null
@@ -1,82 +0,0 @@
-# Greek translation for gst-plugins-ugly package of GStreamer project.
-# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 GStreamer core team
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Simos Xenitellis <simos.lists@googlemail.com>, 2009.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 0.10.17.2\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-03-18 01:04+0100\n"
-"Last-Translator: Savvas Radevic <vicedar@gmail.com>\n"
-"Language-Team: Greek <team@lists.gnome.gr>\n"
-"Language: el\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-msgid "Could not read from CD."
-msgstr "Δέν μπόρεσε να γινει ανάγνωση το CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Δέν ήταν δυνατό το άνοιγμα της συσκευής CD για την ανάγνωση. "
-
-msgid "Disc is not an Audio CD."
-msgstr "Ο δίσκος δεν είναι ένα ακουστικό CD."
-
-msgid "Could not open DVD"
-msgstr "Δεν ήταν δυνατό το άνοιγμα του DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Δεν ήταν δυνατό το άνοιγμα του τίτλου DVD %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Αποτυχία μετάβασης στο κεφάλαιο %d του τίτλου του DVD %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Δεν ήταν δυνατό το άνοιγμα του τίτλου DVD %d. Οι διαδραστικοί τίτλοι δεν "
-"υποστηρίζονται από αυτό το στοιχείο"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Δεν είναι δυνατή η ανάγνωση του DVD. Αυτό μπορεί να οφείλεται στο ότι το DVD "
-"είναι κρυπτογραφημένο και μια βιβλιοθήκη αποκρυπτογράφησης DVD δεν έχει "
-"εγκατασταθεί."
-
-msgid "Could not read DVD."
-msgstr "Δεν είναι δυνατή η ανάγνωση του DVD."
-
-msgid "This stream contains no data."
-msgstr "Η ροή αυτή δεν περιέχει καθόλου δεδομένα."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Αδυναμία ρύθμισης του κωδικοποιητή LAME. Ελέγξτε τις παραμέτρους "
-#~ "κωδικοποίησης."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Ο αιτούμενος ρυθμός μετάδοσης %d kbit/s για την ιδιοκτησία '%s' δεν είναι "
-#~ "επιτρεπτός.Ορυθμός μετάδοσης άλλαξε σε %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Αδυναμία ρύθμισης του κωδικοποιητή TwoLAME. Ελέγξτε τις παραμέτρους "
-#~ "κωδικοποίησης."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Εσωτερικό σφάλμα ροής δεδομένων."
diff --git a/po/en_GB.po b/po/en_GB.po
deleted file mode 100644 (file)
index 527b2b0..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-# English (British) translation.
-# Copyright (C) 2004 Free Software Foundation, Inc.
-# Gareth Owen <gowen72@yahoo.com>, 2004.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins 0.8.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2004-04-26 10:41-0400\n"
-"Last-Translator: Gareth Owen <gowen72@yahoo.com>\n"
-"Language-Team: English (British) <en_gb@li.org>\n"
-"Language: en_GB\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#, fuzzy
-msgid "Could not read from CD."
-msgstr "Could not write to file \"%s\"."
-
-msgid "Could not open CD device for reading."
-msgstr "Could not open CD device for reading."
-
-#, fuzzy
-msgid "Disc is not an Audio CD."
-msgstr "Device is not open."
-
-msgid "Could not open DVD"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "Could not open DVD title %d"
-msgstr "Could not close vfs file \"%s\"."
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr ""
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-
-#, fuzzy
-msgid "Could not read DVD."
-msgstr "Could not write to file \"%s\"."
-
-msgid "This stream contains no data."
-msgstr ""
-
-#, fuzzy
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Could not write to file \"%s\"."
-
-#, fuzzy
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Could not close vfs file \"%s\"."
-
-#~ msgid "Could not open file \"%s\" for writing."
-#~ msgstr "Could not open file \"%s\" for writing."
-
-#~ msgid "Error closing file \"%s\"."
-#~ msgstr "Error closing file \"%s\"."
-
-#~ msgid "Could not open file \"%s\" for reading."
-#~ msgstr "Could not open file \"%s\" for reading."
-
-#~ msgid "No filename specified."
-#~ msgstr "No filename specified."
-
-#~ msgid "No or invalid input audio, AVI stream will be corrupt."
-#~ msgstr "No or invalid input audio, AVI stream will be corrupt."
-
-#~ msgid "Could not open audio device \"%s\" for writing."
-#~ msgstr "Could not open audio device \"%s\" for writing."
-
-#~ msgid "Could not open control device \"%s\" for writing."
-#~ msgstr "Could not open control device \"%s\" for writing."
-
-#~ msgid "Could not configure audio device \"%s\"."
-#~ msgstr "Could not configure audio device \"%s\"."
-
-#~ msgid "Could not set audio device \"%s\" to %d Hz."
-#~ msgstr "Could not set audio device \"%s\" to %d Hz."
-
-#~ msgid "Could not close audio device \"%s\"."
-#~ msgstr "Could not close audio device \"%s\"."
-
-#~ msgid "Could not close control device \"%s\"."
-#~ msgstr "Could not close control device \"%s\"."
-
-#~ msgid "Could not open video device \"%s\" for writing."
-#~ msgstr "Could not open video device \"%s\" for writing."
-
-#~ msgid "Could not close video device \"%s\"."
-#~ msgstr "Could not close video device \"%s\"."
-
-#~ msgid "Could not write to device \"%s\"."
-#~ msgstr "Could not write to device \"%s\"."
-
-#~ msgid "OSS device \"%s\" is already in use by another program."
-#~ msgstr "OSS device \"%s\" is already in use by another program."
-
-#~ msgid "Could not access device \"%s\", check its permissions."
-#~ msgstr "Could not access device \"%s\", check its permissions."
-
-#~ msgid "Device \"%s\" does not exist."
-#~ msgstr "Device \"%s\" does not exist."
-
-#~ msgid "Could not open device \"%s\" for writing."
-#~ msgstr "Could not open device \"%s\" for writing."
-
-#~ msgid "Could not open device \"%s\" for reading."
-#~ msgstr "Could not open device \"%s\" for reading."
-
-#, fuzzy
-#~ msgid "Your OSS device could not be probed correctly"
-#~ msgstr "Your oss device could not be probed correctly"
-
-#~ msgid "Volume"
-#~ msgstr "Volume"
-
-#~ msgid "Bass"
-#~ msgstr "Bass"
-
-#~ msgid "Treble"
-#~ msgstr "Treble"
-
-#~ msgid "Synth"
-#~ msgstr "Synth"
-
-#~ msgid "PCM"
-#~ msgstr "PCM"
-
-#~ msgid "Speaker"
-#~ msgstr "Speaker"
-
-#~ msgid "Line-in"
-#~ msgstr "Line-in"
-
-#~ msgid "Microphone"
-#~ msgstr "Microphone"
-
-#~ msgid "CD"
-#~ msgstr "CD"
-
-#~ msgid "Mixer"
-#~ msgstr "Mixer"
-
-#~ msgid "PCM-2"
-#~ msgstr "PCM-2"
-
-#~ msgid "Record"
-#~ msgstr "Record"
-
-#~ msgid "In-gain"
-#~ msgstr "In-gain"
-
-#~ msgid "Out-gain"
-#~ msgstr "Out-gain"
-
-#~ msgid "Line-1"
-#~ msgstr "Line-1"
-
-#~ msgid "Line-2"
-#~ msgstr "Line-2"
-
-#~ msgid "Line-3"
-#~ msgstr "Line-3"
-
-#~ msgid "Digital-1"
-#~ msgstr "Digital-1"
-
-#~ msgid "Digital-2"
-#~ msgstr "Digital-2"
-
-#~ msgid "Digital-3"
-#~ msgstr "Digital-3"
-
-#~ msgid "Phone-in"
-#~ msgstr "Phone-in"
-
-#~ msgid "Phone-out"
-#~ msgstr "Phone-out"
-
-#~ msgid "Video"
-#~ msgstr "Video"
-
-#~ msgid "Radio"
-#~ msgstr "Radio"
-
-#~ msgid "Monitor"
-#~ msgstr "Monitor"
-
-#, fuzzy
-#~ msgid "PC Speaker"
-#~ msgstr "Speaker"
-
-#~ msgid "Could not open vfs file \"%s\" for reading."
-#~ msgstr "Could not open vfs file \"%s\" for reading."
-
-#, fuzzy
-#~ msgid "No filename given."
-#~ msgstr "No filename given"
-
-#, fuzzy
-#~ msgid "Could not open vfs file \"%s\" for writing: %s."
-#~ msgstr "Could not open vfs file \"%s\" for writing."
-
-#~ msgid "No filename given"
-#~ msgstr "No filename given"
-
-#, fuzzy
-#~ msgid "Your OSS device doesn't support mono or stereo."
-#~ msgstr "Your oss device could not be probed correctly"
-
-#~ msgid "No device specified."
-#~ msgstr "No device specified."
-
-#~ msgid "Could not open device \"%s\" for reading and writing."
-#~ msgstr "Could not open device \"%s\" for reading and writing."
-
-#~ msgid "Device is open."
-#~ msgstr "Device is open."
-
-#~ msgid "Device \"%s\" is not a capture device."
-#~ msgstr "Device \"%s\" is not a capture device."
-
-#~ msgid "Could not get buffers from device \"%s\"."
-#~ msgstr "Could not get buffers from device \"%s\"."
-
-#~ msgid "Could not get enough buffers from device \"%s\"."
-#~ msgstr "Could not get enough buffers from device \"%s\"."
diff --git a/po/eo.po b/po/eo.po
deleted file mode 100644 (file)
index 03a7a5a..0000000
--- a/po/eo.po
+++ /dev/null
@@ -1,80 +0,0 @@
-# Esperanto translations for gst-plugins-ugly.
-# Copyright (C) 2014 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-#
-# Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>, 2011.
-# Benno Schulenberg <benno@vertaalt.nl>, 2014.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.4.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2014-09-21 21:03+0200\n"
-"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
-"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
-"Language: eo\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-"X-Generator: Lokalize 1.0\n"
-
-msgid "Could not read from CD."
-msgstr "Ne eblis legi de la KD."
-
-msgid "Could not open CD device for reading."
-msgstr "Ne eblis malfermi la KD-aparaton por legi."
-
-msgid "Disc is not an Audio CD."
-msgstr "La disko ne estas son-KD."
-
-msgid "Could not open DVD"
-msgstr "Ne eblis malfermi la DVD-n"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Ne eblis malfermi titolon \"%d\" de la DVD"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Fiaskis iri al ĉapitro %d de la DVD-titolo %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Ne eblis malfermi DVD-titolon \"%d\"; ĉi tiu elemento ne subtenas interagajn "
-"titolojn"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Ne eblis legi la DVD-n. Eble la DVD estas ĉifrita sed biblioteko por DVD-"
-"malĉifrado ne estas instalita."
-
-msgid "Could not read DVD."
-msgstr "Ne eblis legi la DVD-n."
-
-msgid "This stream contains no data."
-msgstr "Tiu fluo enhavas neniun datumon."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr "Fiaskis agordi la LAME-kodilon. Kontrolu viajn kodad-parametrojn."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "La petita bitrapido je %d kbit/s ne estas permesata por la atributo \"%s"
-#~ "\". La bitrapido estas ŝanĝite al %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Fiaskis agordi la TwoLAME-kodilon. Kontrolu viajn kodad-parametrojn."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Interna datum-flu-eraro."
diff --git a/po/es.po b/po/es.po
deleted file mode 100644 (file)
index e8cdc4d..0000000
--- a/po/es.po
+++ /dev/null
@@ -1,98 +0,0 @@
-# translation of gst-plugins-ugly-0.10.17.2.po to Español
-# spanish translation for gst-plugins-ugly
-# This file is put in the public domain.
-# Jorge González <jorgegonz@svn.gnome.org>, 2007, 2009, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 0.10.17.2\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2011-10-02 15:45+0200\n"
-"Last-Translator: Jorge González González <aloriel@gmail.com>\n"
-"Language-Team: Spanish <es@li.org>\n"
-"Language: es\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n"
-
-msgid "Could not read from CD."
-msgstr "No se pudo leer del CD."
-
-msgid "Could not open CD device for reading."
-msgstr "No se pudo abrir el dispositivo de CD para su lectura."
-
-msgid "Disc is not an Audio CD."
-msgstr "El disco no es un CD de sonido."
-
-msgid "Could not open DVD"
-msgstr "No se pudo abrir el DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "No se pudo abrir el título %d del DVD"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Falló al ir al capítulo %d del título %d del DVD"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"No se pudo abrir el título %d del DVD. Los títulos interactivos no están "
-"soportados por este elemento."
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"No se pudo leer el DVD. Puede ser debido a que el DVD está cifrado y la "
-"biblioteca de descifrado del DVD no está instalada."
-
-msgid "Could not read DVD."
-msgstr "No se pudo leer el DVD."
-
-msgid "This stream contains no data."
-msgstr "Este medio no contiene datos."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Falló al configurar el codificador LAME. Compruebe sus parámetros de "
-#~ "codificación."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "La tasa de bits %d kbps solicitada para la propiedad «%s» no está "
-#~ "permitida. La tasa de bits se cambió a %d kbps."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Falló al configurar el codificador TwoLAME. Compruebe sus parámetros de "
-#~ "codificación."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Error del flujo de datos interno."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Información del título del DVD no válida."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "No se pudo leer la información del título para el DVD."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Falló abrir el dispositivo DVD «%s»."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Falló al establecer la búsqueda basada en PGC."
-
-#~ msgid "This file is encrypted and cannot be played."
-#~ msgstr "Este archivo está cifrado y no se puede reproducir."
diff --git a/po/eu.po b/po/eu.po
deleted file mode 100644 (file)
index 7a133fc..0000000
--- a/po/eu.po
+++ /dev/null
@@ -1,99 +0,0 @@
-# translation of gst-plugins-ugly.master.po to Basque
-# Copyright (C) 2004, 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-#
-# Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>, 2009.
-# Mikel Olasagasti Uranga <hey_neken@mundurat.net>, 2009, 2010.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly-0.10.13.2\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2010-03-07 13:12+0200\n"
-"Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n"
-"Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
-"Language: eu\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-msgid "Could not read from CD."
-msgstr "Ezin izan da CDtik irakurri."
-
-msgid "Could not open CD device for reading."
-msgstr "Ezin izan da CD gailua ireki irakurtzeko."
-
-msgid "Disc is not an Audio CD."
-msgstr "Ez da Audio CD disko bat."
-
-msgid "Could not open DVD"
-msgstr "Ezin izan da DVDa ireki"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Ezin izan da DVDko %d. titulua ireki"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Huts egin du DVDko %2$d. tituluaren %1$d. kapitulura joatean"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Ezin izan da DVDko %d. titulua ireki. Elementu honek ez ditu onartzen titulu "
-"interaktiboak"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-
-#, fuzzy
-msgid "Could not read DVD."
-msgstr "Ezin izan da DVDa ireki"
-
-msgid "This stream contains no data."
-msgstr "Korronte honek ez du daturik."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Huts egin du TwoLAME kodetzailea konfiguratzean. Begiratu kodetze-"
-#~ "parametroak ondo dauden."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Ez da onartzen '%2$s' propietatearentzat eskatutako %1$d kbit/s-ko bit-"
-#~ "emaria. Bit-emaria aldatu egin da, eta orain %3$d kbit/s-koa da."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Huts egin du TwoLAME kodetzailea konfiguratzean. Begiratu kodetze-"
-#~ "parametroak ondo dauden."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Datu-korrontearen barne-errorea."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Huts egin du LAME kodetzailea konfiguratzean. Begiratu kodetze-"
-#~ "parametroak ondo dauden."
-
-#, fuzzy
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Ezin izan da CDtik irakurri."
-
-#, fuzzy
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Ezin izan da DVDko %d. titulua ireki"
diff --git a/po/fi.po b/po/fi.po
deleted file mode 100644 (file)
index 5426e0d..0000000
--- a/po/fi.po
+++ /dev/null
@@ -1,102 +0,0 @@
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Finnish messages for gst-plugins-ugly.
-# Copyright (C) 2007 Ilkka Tuohela.
-# Copyright (C) 2008-2009 Tommi Vainikainen.
-# Suomennos: http://gnome.fi/
-#
-# Ilkka Tuohela <hile@iki.fi>, 2007.
-# Tommi Vainikainen <thv@iki.fi>, 2008-2009.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 0.10.10.2\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2009-03-10 20:41+0200\n"
-"Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
-"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
-"Language: fi\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: KBabel 1.11.2\n"
-
-msgid "Could not read from CD."
-msgstr "Lukeminen CD:ltä ei onnistunut."
-
-msgid "Could not open CD device for reading."
-msgstr "CD-laitetta ei voitu avata luettavaksi."
-
-msgid "Disc is not an Audio CD."
-msgstr "Levy ei ole ääni-CD."
-
-msgid "Could not open DVD"
-msgstr "DVD:tä ei voitu avata"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "DVD:n ohjelmaa %d ei voitu avata"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Ei voitu siirtyä kappaleeseen %d DVD:n ohjelmassa %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"DVD:n ohjelmaa %d ei voitu avata. Tämä elementti ei tue interaktiivisia "
-"ohjelmia"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-
-#, fuzzy
-msgid "Could not read DVD."
-msgstr "DVD:tä ei voitu avata"
-
-msgid "This stream contains no data."
-msgstr "Virta ei sisällä tietoa."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr "TwoLAME-kodekkia ei voitu määritellä. Tarkista kodekkiasetuksesi."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Pyydetty bittinopeus %d kb/s ominaisuudelle \"%s\" ei ole sallittu. "
-#~ "Bittinopeus asetettiin arvoon %d kb/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr "TwoLAME-kodekkia ei voitu määritellä. Tarkista kodekkiasetuksesi."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Sisäinen tietovirtavirhe."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
-#~ msgstr "LAME-kodekkia ei voitu määritellä. Tarkista kodekkiasetuksesi."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "DVD:llä on virheellisiä ohjelmatietoja."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Ohjelmatietoja ei voitu lukea DVD:ltä."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "DVD-laitetta \"%s\" ei voitu avata."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "PGC-pohjaista siirtymistä ei voitu asettaa."
-
-#~ msgid "This file is encrypted and cannot be played."
-#~ msgstr "Tiedosto on salattu eikä sitä voi toistaa."
diff --git a/po/fr.po b/po/fr.po
deleted file mode 100644 (file)
index 18dee2b..0000000
--- a/po/fr.po
+++ /dev/null
@@ -1,82 +0,0 @@
-# Translation of gst-plugins-ugly to French
-# Copyright (C) 2003-2011 GStreamer core team
-# This file is distributed under the same license as the gst-plugins-ugly package.
-#
-# Claude Paroz <claude@2xlibre.net>, 2008-2011.
-# Stéphane Aulery <lkppo@free.fr>, 2015.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.7.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2015-12-27 01:51+0100\n"
-"Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
-"Language-Team: French <traduc@traduc.org>\n"
-"Language: fr\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-msgid "Could not read from CD."
-msgstr "Impossible de lire le CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Impossible d’ouvrir le lecteur de CD."
-
-msgid "Disc is not an Audio CD."
-msgstr "Le disque n’est pas un CD audio."
-
-msgid "Could not open DVD"
-msgstr "Impossible d’ouvrir le DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Impossible d’ouvrir le DVD intitulé %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Impossible d’aller au chapitre %d du DVD intitulé %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Impossible d’ouvrir le DVD intitulé %d. Les titres interactifs ne sont pas "
-"pris en charge par cet élément"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Impossible de lire le DVD. Il se peut que le DVD soit chiffré et qu’aucune "
-"bibliothèque de déchiffrement de DVD de ne soit installée."
-
-msgid "Could not read DVD."
-msgstr "Impossible de lire le DVD."
-
-msgid "This stream contains no data."
-msgstr "Ce flux ne contient aucune données."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "La configuration de l’encodeur audio mp3 LAME a échoué. Vérifiez vos "
-#~ "paramètres d’encodage."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Le débit de transfert demandé de %d kbit/s pour la propriété « %s » n’est "
-#~ "pas autorisé. Le débit de transfert a été défini à %d kbits/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "La configuration de l’encodeur TwoLAME a échoué. Vérifiez vos paramètres "
-#~ "d’encodage."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Erreur du flux de données interne."
diff --git a/po/fur.po b/po/fur.po
deleted file mode 100644 (file)
index 8409950..0000000
--- a/po/fur.po
+++ /dev/null
@@ -1,79 +0,0 @@
-# Friulian messages for gst-plugins-ugly-1.10.0.
-# This file is put in the public domain.
-# Fabio Tomat <f.t.public@gmail.com>, 2016.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.10.0\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2016-11-30 16:23+0100\n"
-"Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n"
-"Language-Team: Friulian <f.t.public@gmail.com>\n"
-"Language: fur\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
-"X-Generator: Poedit 1.8.11\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-msgid "Could not read from CD."
-msgstr "Impussibil lei dal CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Impussibil vierzi il dispositîf CD par lei."
-
-msgid "Disc is not an Audio CD."
-msgstr "Il disc nol è un CD Audio."
-
-msgid "Could not open DVD"
-msgstr "Impussibil vierzi il DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Impussibil vierzi il titul DVD %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "No si è rivâts a lâ al cjapitul %d dal titul DVD %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Impussibil vierzi il titul DVD %d. I titui interatîfs no son supuartâts di "
-"chest element"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Impussibil lei il DVD. Al podarès jessi par vie che il DVD al è cifrât e une "
-"librarie di decifradure no je instalade."
-
-msgid "Could not read DVD."
-msgstr "Impussibil lei il DVD."
-
-msgid "This stream contains no data."
-msgstr "Il flus nol conten dâts."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "No si è rivâts a configurâ il codificadôr audio mp3 LAME. Controle i "
-#~ "parametris di codifiche."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Il bitrate domandât (%d kbit/s) pe proprietât '%s' nol è permetût. Il "
-#~ "bitrate al è stât cambiât a %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "No si è rivâts a configurâ il codificadôr TwoLAME. Controle i parametris "
-#~ "di codifiche."
diff --git a/po/gl.po b/po/gl.po
deleted file mode 100644 (file)
index a70d68d..0000000
--- a/po/gl.po
+++ /dev/null
@@ -1,84 +0,0 @@
-# Galician translation of gst-plugins-ugly.
-# Copyright (C) 2009 gst-plugins-ugly's COPYRIGHT HOLDER
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Fran Diéguez <frandieguez@ubuntu.com>, 2009, 2010.
-# Fran Dieguez <frandieguez@gnome.org>, 2012.
-# Francisco Diéguez <frandieguez@ubuntu.com>, 2012.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-12-15 03:47+0200\n"
-"Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n"
-"Language-Team: Galician <proxecto@trasno.net>\n"
-"Language: gl\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Virtaal 0.7.1\n"
-"X-Project-Style: gnome\n"
-
-msgid "Could not read from CD."
-msgstr "Non foi posíbel ler desde o CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Non foi posíbel abrir o dispositivo de CD para a súa lectura."
-
-msgid "Disc is not an Audio CD."
-msgstr "O disco non é un CD de son."
-
-msgid "Could not open DVD"
-msgstr "Non foi posíbel abrir o DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Non foi posíbel abrir o título %d do DVD"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Produciuse un erro ao ir ao capítulo %d do título %d do DVD"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Non foi posíbel abrir o título %d de DVD. Este elemento non é compatíbel cos "
-"títulos interactivos"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Non foi posíbel ler o DVD. Isto pode ser porque o DVD está cifrado e non ten "
-"instalada unha biblioteca de descifrado de DVD."
-
-msgid "Could not read DVD."
-msgstr "Non foi posíbel ler o DVD"
-
-msgid "This stream contains no data."
-msgstr "Este fluxo non contén datos."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Produciuse un erro ao configurar o codificador LAME mp3. Comprobe os seus "
-#~ "parámetros de codificación."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Non se permite o bitrate solicitado %d kbit/s para a propiedade '%s'. O "
-#~ "bitrate cambiouse a %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Produciuse un fallo ao configurar o codificador TwoLAME. Comprobe os seus "
-#~ "parámetros de codificación."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Erro de fluxo de datos interno."
diff --git a/po/hr.po b/po/hr.po
deleted file mode 100644 (file)
index 3ca1300..0000000
--- a/po/hr.po
+++ /dev/null
@@ -1,86 +0,0 @@
-# Translation of gst-plugins-ugly messages to Croatian.
-# This file is put in the public domain.
-# Copyright (C) 2004-2010, 2019 GStreamer core team.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-#
-# Tomislav Krznar <tomislav.krznar@gmail.com>, 2012.
-# Božidar Putanec <bozidarp@yahoo.com>, 2016, 2018, 2019.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly-1.15.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2019-02-03 13:14-0800\n"
-"Last-Translator: Božidar Putanec <bozidarp@yahoo.com>\n"
-"Language-Team: Croatian <lokalizacija@linux.hr>\n"
-"Language: hr\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Poedit 2.2.1\n"
-
-msgid "Could not read from CD."
-msgstr "Nije moguće čitati CD."
-
-msgid "Could not open CD device for reading."
-msgstr "CD uređaj nije moguće otvoriti za čitanje."
-
-msgid "Disc is not an Audio CD."
-msgstr "Disk nije Audio CD."
-
-msgid "Could not open DVD"
-msgstr "DVD nije moguće otvoriti"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Nije moguće otvoriti DVD naslov %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Nije uspjelo otvoriti poglavlje %d DVD naslova %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Nije moguće otvoriti DVD naslov %d. Ovaj element ne podržava interaktivne "
-"naslove"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"DVD nije moguće čitati. DVD je možda je šifriran a biblioteka za "
-"dešifriranje\n"
-"nije instalirana."
-
-msgid "Could not read DVD."
-msgstr "DVD nije moguće čitati."
-
-msgid "This stream contains no data."
-msgstr "Ovaj protok ne sadrži podatke."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Konfiguracija LAME mp3 audiokodera nije uspjela. Provjerite parametre "
-#~ "kodiranja."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Tražena brzina (bitrate) %d kbit/s za svojstvo „%s“ nije dopuštena. "
-#~ "Brzina (bitrate) je promijenjena u %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Konfiguracija TwoLAME kodera nije uspjela. Provjerite parametre kodiranja."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Interna greška toka (stream) podataka."
diff --git a/po/hu.po b/po/hu.po
deleted file mode 100644 (file)
index ed48784..0000000
--- a/po/hu.po
+++ /dev/null
@@ -1,94 +0,0 @@
-# Hungarian translation of gst-plugins-ugly
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
-#
-# Gabor Kelemen <kelemeng@gnome.hu>, 2007, 2008, 2009, 2012.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-11-30 15:02+0100\n"
-"Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
-"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
-"Language: hu\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.4\n"
-"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
-
-msgid "Could not read from CD."
-msgstr "A CD nem olvasható."
-
-msgid "Could not open CD device for reading."
-msgstr "Nem nyitható meg a CD eszköz olvasásra."
-
-msgid "Disc is not an Audio CD."
-msgstr "A lemez nem hang CD."
-
-msgid "Could not open DVD"
-msgstr "A DVD nem nyitható meg"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Nem nyitható meg a(z) %d. DVD cím"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "A(z) $%2d. DVD cím $%1d. fejezetére ugrás meghiúsult"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Nem nyitható meg a(z) %d. DVD cím. Ez az elem nem támogatja az interaktív "
-"címeket."
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Nem olvasható a DVD. Ezt az okozhatja, hogy a DVD titkosított, és a DVD-"
-"visszafejtő programkönyvtár nincs telepítve."
-
-msgid "Could not read DVD."
-msgstr "Nem olvasható a DVD."
-
-msgid "This stream contains no data."
-msgstr "Ez az adatfolyam nem tartalmaz adatokat."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "A LAME MP3 hangkódoló beállítása meghiúsult. Ellenőrizze a kódolás "
-#~ "beállításait."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "A kért %d kbit/s bitsebesség nem engedélyezett a(z) „%s” tulajdonsághoz. "
-#~ "A bitsebesség módosítva %d kbit/s-re."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "A TwoLAME kódoló beállítása meghiúsult. Ellenőrizze a kódolás "
-#~ "beállításait."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Belső adatfolyam-hiba."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "A DVD címinformációi érvénytelenek."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "A DVD címinformációi nem olvashatók."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Nem nyitható meg a DVD eszköz („%s”)."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "A PGC alapú keresés beállítása meghiúsult."
diff --git a/po/id.po b/po/id.po
deleted file mode 100644 (file)
index 79e3f50..0000000
--- a/po/id.po
+++ /dev/null
@@ -1,90 +0,0 @@
-# Indonesian translations for gst-plugins-ugly package.
-# This file is put in the public domain.
-# Andhika Padmawan <andhika.padmawan@gmail.com>, 2009-2014.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.2.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2013-11-09 15:57+0100\n"
-"PO-Revision-Date: 2014-01-27 20:04+0700\n"
-"Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n"
-"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
-"Language: id\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ext/cdio/gstcdiocddasrc.c:199
-msgid "Could not read from CD."
-msgstr "Tak dapat membaca dari CD."
-
-#: ext/cdio/gstcdiocddasrc.c:406
-msgid "Could not open CD device for reading."
-msgstr "Tak dapat membuka divais CD untuk dibaca."
-
-#: ext/cdio/gstcdiocddasrc.c:413
-msgid "Disc is not an Audio CD."
-msgstr "Cakram bukan CD Audio."
-
-#: ext/dvdread/dvdreadsrc.c:228 ext/dvdread/dvdreadsrc.c:235
-msgid "Could not open DVD"
-msgstr "Tak dapat membuka DVD"
-
-#: ext/dvdread/dvdreadsrc.c:242 ext/dvdread/dvdreadsrc.c:618
-#: ext/dvdread/dvdreadsrc.c:625
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Tak dapat membuka judul DVD %d"
-
-#: ext/dvdread/dvdreadsrc.c:248
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Gagal pergi ke bab %d dari judul DVD %d"
-
-#: ext/dvdread/dvdreadsrc.c:632
-#, c-format
-msgid "Could not open DVD title %d. Interactive titles are not supported by this element"
-msgstr "Tak dapat membuka judul DVD %d. Judul interaktif tidak didukung oleh elemen ini"
-
-#: ext/dvdread/dvdreadsrc.c:985
-msgid "Could not read DVD. This may be because the DVD is encrypted and a DVD decryption library is not installed."
-msgstr "Tak dapat membaca DVD. Hal ini karena DVD terenkripsi dan pustaka dekripsi DVD tidak diinstal."
-
-#: ext/dvdread/dvdreadsrc.c:988
-msgid "Could not read DVD."
-msgstr "Tak dapat membaca DVD."
-
-#: ext/lame/gstlamemp3enc.c:394
-msgid "Failed to configure LAME mp3 audio encoder. Check your encoding parameters."
-msgstr "Gagal mengatur penyandi audio mp3 LAME. Cek parameter penyandian anda."
-
-#: ext/lame/gstlamemp3enc.c:426 ext/twolame/gsttwolamemp2enc.c:486
-#, c-format
-msgid "The requested bitrate %d kbit/s for property '%s' is not allowed. The bitrate was changed to %d kbit/s."
-msgstr "Bitrasi %d kbit/s yang diminta untuk properti '%s' tidak diizinkan. Bitrasi diubah ke %d kbit/s."
-
-#: ext/twolame/gsttwolamemp2enc.c:411
-msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-msgstr "Gagal mengatur penyandi TwoLAME. Cek parameter penyandian anda."
-
-#: gst/asfdemux/gstasfdemux.c:412
-msgid "This stream contains no data."
-msgstr "Arus ini tidak berisi data."
-
-#: gst/asfdemux/gstasfdemux.c:419 gst/asfdemux/gstasfdemux.c:1971
-msgid "Internal data stream error."
-msgstr "Galat arus data internal."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Informasi judul tidak sah pada DVD."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Tak dapat membaca informasi judul untuk DVD."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Gagal membuka divais DVD '%s'."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Gagal mengatur pencarian berbasis PGC."
diff --git a/po/it.po b/po/it.po
deleted file mode 100644 (file)
index 2298788..0000000
--- a/po/it.po
+++ /dev/null
@@ -1,98 +0,0 @@
-# Italian translation for gst-plugins-ugly package of GStreamer project.
-# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 GStreamer core team
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Luca Ferretti <elle.uca@infinito.it>, 2007, 2008, 2009.Luca Ferretti <elle.uca@infinito.it>, 2009.
-# Sebastiano Pistore <sebastianopistore.info@protonmail.ch>", 2017.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.10.0\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2017-09-15 09:56+0200\n"
-"Last-Translator: Sebastiano Pistore <sebastianopistore.info@protonmail.ch>\n"
-"Language-Team: Italian <tp@lists.linux.it>\n"
-"Language: it\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
-"X-Generator: Poedit 2.0.3\n"
-
-msgid "Could not read from CD."
-msgstr "Impossibile leggere dal CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Impossibile aprire il dispositivo CD in lettura."
-
-msgid "Disc is not an Audio CD."
-msgstr "Il disco non è un CD audio."
-
-msgid "Could not open DVD"
-msgstr "Impossibile aprire il DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Impossibile aprire il titolo %d del DVD"
-
-# go --> open (più comune in italiano)
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Apertura del capitolo %d del titolo %d del DVD non riuscita"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Impossibile aprire il titolo %d del DVD. I titoli interattivi non sono "
-"supportati da questo elemento"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Impossibile leggere il DVD. Questo potrebbe essere dovuto al fatto che il "
-"DVD è crittografato ed all'assenza nel sistema di una libreria di decodifica "
-"DVD."
-
-msgid "Could not read DVD."
-msgstr "Impossibile leggere il DVD."
-
-# NEW
-msgid "This stream contains no data."
-msgstr "Questo flusso non contiene dati."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Configurazione dell'encoder LAME mp3 non riuscita. Verificare i parametri "
-#~ "di codifica."
-
-# NEW
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Il bitrate richiesto di %d kbit/s per la proprietà «%s» non è consentito. "
-#~ "Il bitrate è stato cambiato a %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Configurazione dell'encoder TwoLAME non riuscita. Verificare i parametri "
-#~ "di codifica."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Informazioni del titolo non valide sul DVD."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Impossibile leggere le informazioni del titolo per il DVD."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Apertura del device DVD «%s» non riuscita."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Impostazione del posizionamento basato su PGC non riuscita."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Errore interno dello stream di dati."
diff --git a/po/ja.po b/po/ja.po
deleted file mode 100644 (file)
index 7c6d48a..0000000
--- a/po/ja.po
+++ /dev/null
@@ -1,94 +0,0 @@
-# Japanese translation of gst-plugins-ugly
-# Copyright (C) 2007, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Makoto Kato <makoto.kt@gmail.com>, 2009-2011
-# Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>, 2012
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-12-22 19:42+0900\n"
-"Last-Translator: Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>\n"
-"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
-"Language: ja\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.5.4\n"
-
-msgid "Could not read from CD."
-msgstr "CDを読むことができません。"
-
-msgid "Could not open CD device for reading."
-msgstr "読み込み用にCDデバイスを開くことができません。"
-
-msgid "Disc is not an Audio CD."
-msgstr "ディスクは音声CDではありません。"
-
-msgid "Could not open DVD"
-msgstr "DVDを開くことができません"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "DVDタイトル %d を開くことができません"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "DVDタイトル %2$d のチャプター %1$d へ移動できません"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"DVDタイトル %d を開くことができません。この要素はインタラクティブタイトルをサ"
-"ポートしていません。"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"DVDを読み込むことができませんでした。DVDが暗号化されているかDVDを解読するライ"
-"ブラリがインストールされていないからかもしれません。"
-
-msgid "Could not read DVD."
-msgstr "DVDを読み込むことができません。"
-
-msgid "This stream contains no data."
-msgstr "このストリームはデータを含んでいません。"
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "LAME MP3 音声エンコーダーの構成に失敗しました。エンコーディングパラメータ"
-#~ "をチェックしてください。"
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "要求されたビットレート %d kbit/s はプロパティ '%s' では許可されません。そ"
-#~ "のためビットレートは %d kbit/s へ変更されました。"
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "TwoLAMEエンコーダーの構成に失敗しました。エンコード用のパラメータをチェッ"
-#~ "クしてください。"
-
-#~ msgid "Internal data stream error."
-#~ msgstr "内部データストリームエラー。"
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "DVD上のタイトル情報が不正です。"
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "DVDからタイトル情報を読み込むことができません。"
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "DVDデバイス '%s' を開くことができません。"
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "プログラム・チェーン (PGC) のシークに失敗しました。"
diff --git a/po/lt.po b/po/lt.po
deleted file mode 100644 (file)
index 59263df..0000000
--- a/po/lt.po
+++ /dev/null
@@ -1,103 +0,0 @@
-# translation of gst-plugins-ugly-0.10.7.2 to Lithuanian
-# This file is put in the public domain.
-#
-# Gintautas Miliauskas <gintas@akl.lt>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly-0.10.7.2\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2008-05-14 02:52+0300\n"
-"Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n"
-"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
-"Language: lt\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms:  nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n"
-"%100<10 || n%100>=20) ? 1 : 2);\n"
-
-#, fuzzy
-msgid "Could not read from CD."
-msgstr "Nepavyko perskaityti DVD įrašo informacijos."
-
-#, fuzzy
-msgid "Could not open CD device for reading."
-msgstr "Nepavyko atverti %d DVD įrašo"
-
-msgid "Disc is not an Audio CD."
-msgstr ""
-
-msgid "Could not open DVD"
-msgstr "Nepavyko atverti DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Nepavyko atverti %d DVD įrašo"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Nepavyko peršokti į %2$d DVD įrašo %1$d dalį"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Nepavyko atverti %d DVD įrašo. Šis elementas nepalaiko interaktyvių įrašų"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-
-#, fuzzy
-msgid "Could not read DVD."
-msgstr "Nepavyko atverti DVD"
-
-msgid "This stream contains no data."
-msgstr "Šiame sraute nėra duomenų."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Nepavyko sukonfigūruoti LAME kodavimo programos. Patikrinkite kodavimo "
-#~ "parametrus."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Pageidautas bitų dažnis %d kbit/s savybei „%s“ neleidžiamas. Bitų dažnis "
-#~ "pakeistas į %d kbit/s."
-
-#, fuzzy
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Nepavyko sukonfigūruoti LAME kodavimo programos. Patikrinkite kodavimo "
-#~ "parametrus."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Nepavyko sukonfigūruoti LAME kodavimo programos. Patikrinkite kodavimo "
-#~ "parametrus."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Netaisyklinga DVD įrašo informacija."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Nepavyko perskaityti DVD įrašo informacijos."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Nepavyko atverti DVD įrenginio „%s“."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Nepavyko nustatyti PGC paieškos."
-
-#~ msgid "This file is encrypted and cannot be played."
-#~ msgstr "Šis failas užšifruotas ir negali būti parodytas."
diff --git a/po/lv.po b/po/lv.po
deleted file mode 100644 (file)
index b0bee10..0000000
--- a/po/lv.po
+++ /dev/null
@@ -1,95 +0,0 @@
-# Latvain translation of gst-plugins
-# This file is put in the public domain.
-# Arvis Lācis <arvis.lacis@inbox.lv>, 2009.
-# Rihards Prieditis <rprieditis@gmail.com>, 2011.
-# Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>, 2014.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.2.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2014-04-20 16:24+0300\n"
-"Last-Translator: Rihards Prieditis <rprieditis@gmail.com>\n"
-"Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n"
-"Language: lv\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
-"2);\n"
-"X-Generator: Lokalize 1.5\n"
-
-msgid "Could not read from CD."
-msgstr "Nevarēja nolasīt no CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Nevarēja atvērt CD ierīci lasīšanai."
-
-msgid "Disc is not an Audio CD."
-msgstr "Disks nav Audio CD."
-
-msgid "Could not open DVD"
-msgstr "Nevarēja atvērt DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Nevarēja atvērt DVD nosaukumu %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Neizdevās pāriet uz %d nodaļu DVD nosaukumā %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Nevarēja atvērt DVD nosaukumu %d. Šis elements nenodrošina interaktīvos "
-"nosaukumus."
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Nevarēja nolasīt DVD. Iespējams, ka DVD ir šifrēts un DVD atšifrēšanas "
-"bibliotēka nav instalēta."
-
-msgid "Could not read DVD."
-msgstr "Nevarēja nolasīt DVD."
-
-msgid "This stream contains no data."
-msgstr "Šī straume nesatur datus."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Neizdevās konfigurēt LAME mp3 audio kodētāju. Pārbaudiet savus kodēšanas "
-#~ "parametrus."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Pieprasītais straumēšanas ātrums %d kbiti/s nepieciešamajai īpašībai “%s” "
-#~ "nav atļauts. Straumēšanas ātrums tika mainīts uz %d kbitiem/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Neizdevās konfigurēt TwoLAME kodētāju. Pārbaudiet savus kodēšanas "
-#~ "parametrus."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Iekšēja datu plūsmas kļūda."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Nederīga DVD virsraksta informācija."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Nevarēja nolasīt virsrakstu informāciju no DVD."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Neizdevās atvērt DVD ierīci \"%s\"."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Neizdevās uzstādīt PCG balstīto meklēšanu."
diff --git a/po/meson.build b/po/meson.build
deleted file mode 100644 (file)
index 2657c01..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-i18n = import('i18n')
-
-i18n.gettext('gst-plugins-ugly-1.0', preset: 'glib')
diff --git a/po/ms.po b/po/ms.po
deleted file mode 100644 (file)
index df644d8..0000000
--- a/po/ms.po
+++ /dev/null
@@ -1,94 +0,0 @@
-# translation of gst-plugins-ugly-0.10.11.2.po to Malay
-# This file is put in the public domain.
-#
-# Muhammad Najmi bin Ahmad Zabidi <najmi.zabidi@gmail.com>, 2009.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly-0.10.11.2\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2009-07-16 15:07+0800\n"
-"Last-Translator: Muhammad Najmi bin Ahmad Zabidi <najmi.zabidi@gmail.com>\n"
-"Language-Team: Malay <translation-team-ms@lists.sourceforge.net>\n"
-"Language: ms\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-
-msgid "Could not read from CD."
-msgstr "Tidak dapat baca dari CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Tidak dapat buka peranti CD untuk baca."
-
-msgid "Disc is not an Audio CD."
-msgstr "Cakera bukan CD Audio"
-
-msgid "Could not open DVD"
-msgstr "Tidak dapat buka DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Tidak dapat buka tajuk %d DVD"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Gagal untuk ke bab %d pata tajuk DVD %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Gagal buka tajuk %d DVD. Tajuk interaktrif tidak disokong oleh elemen ini"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-
-#, fuzzy
-msgid "Could not read DVD."
-msgstr "Tidak dapat buka DVD"
-
-msgid "This stream contains no data."
-msgstr "Aliran ini tiada data."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Gagal mengkonfigur pengenkod TwoLAME. Periksa parameter pengenkod anda."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Kadarbit %d yang diminta untuk properti '%s' tidak dibenarkan. Kadarbit "
-#~ "telah ditukar ke %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Gagal mengkonfigur pengenkod TwoLAME. Periksa parameter pengenkod anda."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Ralat aliran data dalaman."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
-#~ msgstr "Gagal mengkonfigur pengekod LAME. Periksa parameter pengenkod anda."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Maklumat tajuk pada DVD tidak sah."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Tidak dapat baca maklumat tajuk pada DVD."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Gagal membuka peranti DVD %s'."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Gagal untuk menetapkan carian berasaskan PGC."
diff --git a/po/mt.po b/po/mt.po
deleted file mode 100644 (file)
index e782f13..0000000
--- a/po/mt.po
+++ /dev/null
@@ -1,99 +0,0 @@
-# Maltese translation for gst-plugins-ugly.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# NAME OF AUTHOR <michelbugeja@rabatmalta.com>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly-0.10.9.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2008-11-13 18:18+0100\n"
-"Last-Translator: Michel Bugeja <michelbugeja@rabatmalta.com>\n"
-"Language-Team: Maltese <translation-team-mt@lists.sourceforge.net>\n"
-"Language: mt\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Maltese\n"
-"X-Poedit-Country: Malta\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-msgid "Could not read from CD."
-msgstr "Ma nistax naqra mis-CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Ma nistax niftaħ is-CD biex naqra."
-
-msgid "Disc is not an Audio CD."
-msgstr "Id-diska mijhiex CD tal-awdjo."
-
-msgid "Could not open DVD"
-msgstr "Ma nistax niftaħ DVD."
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Ma nistax niftaħ titlu %d tad-DVD"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Problema biex immur kapitlu %d mit-titlu %d tad-DVD"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Ma nistax niftaħ titlu %d tad-DVD. Titli nterattivi mhux issapportjati minn "
-"dan l-element"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-
-#, fuzzy
-msgid "Could not read DVD."
-msgstr "Ma nistax niftaħ DVD."
-
-msgid "This stream contains no data."
-msgstr "L-istream ma fiha l-ebda data."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Problema biex nissetja LAME encoder. Iċċekkja l-parametri tal-encoding."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Mhux permess il-bitrate %d kbit/s rikjesta għal '%s'. Għalhekk il-bitrate "
-#~ "ġiet mibdula għal %d kbit/s."
-
-#, fuzzy
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Problema biex nissetja LAME encoder. Iċċekkja l-parametri tal-encoding."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Problema interna fid-data stream."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Problema biex nissetja LAME encoder. Iċċekkja l-parametri tal-encoding."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "L-informazzjoni tat-titlu tad-DVD mhux validu."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Ma nistax naqra l-informazzjoni tat-titlu tad-DVD."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Problema biex niftaħ l-apparat tad-DVD '%s'."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Problema biex nissettja tfittxija bbażata fuq PGC."
diff --git a/po/nb.po b/po/nb.po
deleted file mode 100644 (file)
index 8f41f95..0000000
--- a/po/nb.po
+++ /dev/null
@@ -1,91 +0,0 @@
-# Norwegian bokmaal translation of gst-plugins-ugly.
-# This file is put in the public domain.
-#
-# Kjartan Maraas <kmaraas@gnome.org>, 2004-2007.
-# Johnny A. Solbu <johnny@solbu.net>, 2012
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-12-21 21:38+0100\n"
-"Last-Translator: Johnny A. Solbu <johnny@solbu.net>\n"
-"Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
-"Language: nb_NO\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.5.4\n"
-
-msgid "Could not read from CD."
-msgstr "Kunne ikke lese fra CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Kunne ikke åpne CD-enheten for lesing."
-
-msgid "Disc is not an Audio CD."
-msgstr "Disken er ikke en lyd-CD."
-
-msgid "Could not open DVD"
-msgstr "Kunne ikke åpne DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Kunne ikke åpne DVD-tittel %d."
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Klarte ikke å gå til kapittel %d på DVD tittel %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Kunne ikke åpne DVD-tittel %d. Interaktive titler er ikke støttet av dette "
-"elementet"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Kunne ikke lese DVD-en. Dette kan være fordi DVD-en er kryptert DVD-"
-"dekrypteringsbiblioteket ikke er installert."
-
-msgid "Could not read DVD."
-msgstr "Kunne ikke lese DVD"
-
-msgid "This stream contains no data."
-msgstr "Denne strømmen inneholde ikke data."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr "Kunne ikke konfigurere LAME-koder. Sjekk parametere for kodingen."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Forespurt bitrate %d kbit/s for egenskap «%s» er ikke tillatt. Bitraten "
-#~ "ble endret til %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Kunne ikke konfigurere TwoLAME-enkoder. Sjekk parameterene for kodingen."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Intern feil i datastrøm."
-
-#~ msgid "This file is encrypted and cannot be played."
-#~ msgstr "Denne filen er kryptert og kan ikke spilles av."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Ugyldig tittelinformasjon på DVD."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Kunne ikke åpne DVD-enhet «%s»."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Kunne ikke sette PGC-basert søking."
diff --git a/po/nl.po b/po/nl.po
deleted file mode 100644 (file)
index 7a69672..0000000
--- a/po/nl.po
+++ /dev/null
@@ -1,95 +0,0 @@
-# translation of gst-plugins-ugly-1.10.0.nl.po to Dutch
-# Copyright (C) 2004, 2007, 2008, 2009 Free Software Foundation, Inc.
-#
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Freek de Kruijf <f.de.kruijf@gmail.com>, 2007, 2008, 2009, 2011, 2012, 2014, 2017.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.10.0\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2017-10-24 23:30+0100\n"
-"Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
-"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
-"Language: nl\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
-"X-Generator: Lokalize 2.0\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-
-msgid "Could not read from CD."
-msgstr "Kan niet van de cd lezen."
-
-msgid "Could not open CD device for reading."
-msgstr "Kan het CD-apparaat niet openen voor lezen."
-
-msgid "Disc is not an Audio CD."
-msgstr "De schrijf is geen audio-CD"
-
-msgid "Could not open DVD"
-msgstr "Kan DVD niet openen"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Kan DVD-titel %d niet openen"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Kan niet naar hoofdstuk %d van DVD-titel %d gaan"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Kan de DVD-titel %d niet openen. Interactieve titels worden door dit element "
-"niet ondersteund"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Kon dvd niet lezen. Dit kan veroorzaakt zijn omdat de dvd versleuteld is en "
-"een bibliotheek voor ontcijferen van een dvd niet is geïnstalleerd."
-
-msgid "Could not read DVD."
-msgstr "Kon dvd niet lezen"
-
-msgid "This stream contains no data."
-msgstr "Deze stroom bevat geen gegevens."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Instellen van de LAME mp3-encoder is mislukt. Controleer uw parameters "
-#~ "voor codering."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "De gevraagde bitsnelheid %d kbits/s voor eigenschap '%s' is niet "
-#~ "toegestaan. De bitsnelheid is gewijzigd in %d kbits/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Kan de TwoLAME-encoder niet configureren. Controleer uw "
-#~ "encodingparameters."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Fout met interne gegevensstroom."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Ongeldige titelinformatie op de DVD."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Kan de titelinformatie van de DVD niet lezen."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Kan het DVD-apparaat '%s' niet openen."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Kan op PGC gebaseerd zoeken niet instellen."
diff --git a/po/or.po b/po/or.po
deleted file mode 100644 (file)
index ec93527..0000000
--- a/po/or.po
+++ /dev/null
@@ -1,255 +0,0 @@
-# Oriya translation of gst-plugins-0.8.3.pot.
-# Copyright (C) 2004, Free Software Foundation, Inc.
-# This file is distributed under the same license as the gst-plugins-0.8.3 package.
-# Gora Mohanty <gora_mohanty@yahoo.co.in>, 2004.
-# $Id$
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-0.8.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2004-09-27 13:32+0530\n"
-"Last-Translator: Gora Mohanty <gora_mohanty@yahoo.co.in>\n"
-"Language-Team: Oriya <gora_mohanty@yahoo.co.in>\n"
-"Language: or\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#, fuzzy
-msgid "Could not read from CD."
-msgstr "\"%s\" ଫାଇଲ ଲେଖିହେଲା ନାହିଁ."
-
-msgid "Could not open CD device for reading."
-msgstr "ସି.ଡି. ଯନ୍ତ୍ର ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
-
-#, fuzzy
-msgid "Disc is not an Audio CD."
-msgstr "ଯନ୍ତ୍ର ଖୋଲାଯାଇ ନାହିଁ."
-
-msgid "Could not open DVD"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "Could not open DVD title %d"
-msgstr "ଭି.ଏଫ.ଏସ. ଫାଇଲ \"%s\" ବନ୍ଦ କରିହେଲା ନାହିଁ."
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr ""
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-
-#, fuzzy
-msgid "Could not read DVD."
-msgstr "\"%s\" ଫାଇଲ ଲେଖିହେଲା ନାହିଁ."
-
-msgid "This stream contains no data."
-msgstr ""
-
-#, fuzzy
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "\"%s\" ଫାଇଲ ଲେଖିହେଲା ନାହିଁ."
-
-#, fuzzy
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "ଭି.ଏଫ.ଏସ. ଫାଇଲ \"%s\" ବନ୍ଦ କରିହେଲା ନାହିଁ."
-
-#~ msgid "Could not open file \"%s\" for writing."
-#~ msgstr "\"%s\" ଫାଇଲ ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
-
-#~ msgid "Error closing file \"%s\"."
-#~ msgstr "\"%s\" ଫାଇଲ ବନ୍ଦ କରିବାରେ ତ୍ରୁଟି."
-
-#~ msgid "Could not open file \"%s\" for reading."
-#~ msgstr "\"%s\" ଫାଇଲ ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
-
-#~ msgid "No filename specified."
-#~ msgstr "କୌଣସି ଫାଇଲନାମ ଉଲ୍ଲେଖିତ ହୋଇ ନାହିଁ."
-
-#~ msgid "No or invalid input audio, AVI stream will be corrupt."
-#~ msgstr "ନିବେଶ ଧ୍ବନି ନାହିଁ ବା ଅବୈଧ ଅଛି. ଏ.ଭି.ଆଇ. ଧାରା ଭ୍ରଷ୍ଟ ହୋଇଯିବ."
-
-#~ msgid "Could not open audio device \"%s\" for writing."
-#~ msgstr "\"%s\" ଧ୍ବନି ଯନ୍ତ୍ର ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
-
-#~ msgid "Could not open control device \"%s\" for writing."
-#~ msgstr "\"%s\" ନିୟନ୍ତ୍ରଣ ଯନ୍ତ୍ର ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
-
-#~ msgid "Could not configure audio device \"%s\"."
-#~ msgstr "\"%s\" ଧ୍ବନି ଯନ୍ତ୍ର ବିନ୍ଯାସ କରିହେଲା ନାହିଁ."
-
-#~ msgid "Could not set audio device \"%s\" to %d Hz."
-#~ msgstr "\"%s\" ଧ୍ବନି ଯନ୍ତ୍ରକୁ %d ହର୍ଜରେ ବିନ୍ଯାସ କରିହେଲା ନାହିଁ."
-
-#~ msgid "Could not close audio device \"%s\"."
-#~ msgstr "\"%s\" ଧ୍ବନି ଯନ୍ତ୍ର ବନ୍ଦ କରିହେଲା ନାହିଁ."
-
-#~ msgid "Could not close control device \"%s\"."
-#~ msgstr "\"%s\" ନିୟନ୍ତ୍ରଣ ଯନ୍ତ୍ର ବନ୍ଦ କରିହେଲା ନାହିଁ."
-
-#~ msgid "Could not open video device \"%s\" for writing."
-#~ msgstr "\"%s\" ଭିଡିଓ ଯନ୍ତ୍ର ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
-
-#~ msgid "Could not close video device \"%s\"."
-#~ msgstr "\"%s\" ଭିଡିଓ ଯନ୍ତ୍ର ବନ୍ଦ କରିହେଲା ନାହିଁ."
-
-#~ msgid "Could not write to device \"%s\"."
-#~ msgstr "\"%s\" ଯନ୍ତ୍ରରେ ଲେଖିହେଲା ନାହିଁ."
-
-#~ msgid "OSS device \"%s\" is already in use by another program."
-#~ msgstr "\"%s\" ଓ.ଏସ.ଏସ. ଯନ୍ତ୍ର ପୂର୍ବରୁ ଅନ୍ଯ କାରିକା ଦ୍ବାରା ବ୍ଯବହାର କରାଯାଉଛି."
-
-#~ msgid "Could not access device \"%s\", check its permissions."
-#~ msgstr "\"%s\" ଯନ୍ତ୍ର ବ୍ଯବହାର କରିହେଲା ନାହିଁ, ତାହାର ଅନୁମତି ଦେଖନ୍ତୁ."
-
-#~ msgid "Device \"%s\" does not exist."
-#~ msgstr "\"%s\" ଯନ୍ତ୍ର ଅବସ୍ଥିତ ନାହିଁ."
-
-#~ msgid "Could not open device \"%s\" for writing."
-#~ msgstr "\"%s\" ଯନ୍ତ୍ର ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
-
-#~ msgid "Could not open device \"%s\" for reading."
-#~ msgstr "\"%s\" ଯନ୍ତ୍ର ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
-
-#~ msgid "Your OSS device could not be probed correctly"
-#~ msgstr "ଆପଣଙ୍କର ଓ.ଏସ.ଏସ. ଯନ୍ତ୍ରର ଠିକ ଭାବରେ ଅନୁସନ୍ଧାନ କରିହେଲା ନାହିଁ."
-
-#~ msgid "Volume"
-#~ msgstr "ପ୍ରବଳତା"
-
-#~ msgid "Bass"
-#~ msgstr "ଅନୁଚ୍ଚ ସ୍ବର"
-
-#~ msgid "Treble"
-#~ msgstr "ଉଚ୍ଚ ସ୍ବର"
-
-#~ msgid "Synth"
-#~ msgstr "ସିନ୍ଥେସାଇଜର"
-
-#~ msgid "PCM"
-#~ msgstr "ପି.ସି.ଏମ."
-
-#~ msgid "Speaker"
-#~ msgstr "ସ୍ବରବର୍ଦ୍ଧକ ୟନ୍ତ୍ର"
-
-#~ msgid "Line-in"
-#~ msgstr "ଲାଇନ-ଇନ"
-
-#~ msgid "Microphone"
-#~ msgstr "ମାଇକ୍ରୋଫୋନ୍"
-
-#~ msgid "CD"
-#~ msgstr "ସି.ଡି."
-
-#~ msgid "Mixer"
-#~ msgstr "ମିଶ୍ରଣ ଯନ୍ତ୍ର"
-
-#~ msgid "PCM-2"
-#~ msgstr "ପି.ସି.ଏମ.-୨"
-
-#~ msgid "Record"
-#~ msgstr "ଅନୁଲିପିକରଣ"
-
-#~ msgid "In-gain"
-#~ msgstr "ନିବେଶ-ବୃଦ୍ଧି"
-
-#~ msgid "Out-gain"
-#~ msgstr "ନିର୍ଗମ-ବୃଦ୍ଧି"
-
-#~ msgid "Line-1"
-#~ msgstr "ଲାଇନ-୧"
-
-#~ msgid "Line-2"
-#~ msgstr "ଲାଇନ-୨"
-
-#~ msgid "Line-3"
-#~ msgstr "ଲାଇନ-୩"
-
-#~ msgid "Digital-1"
-#~ msgstr "ସାଂଖ୍ଯିକ-୧"
-
-#~ msgid "Digital-2"
-#~ msgstr "ସାଂଖ୍ଯିକ-୨"
-
-#~ msgid "Digital-3"
-#~ msgstr "ସାଂଖ୍ଯିକ-୩"
-
-#~ msgid "Phone-in"
-#~ msgstr "ଫୋନ-ନିବେଶ"
-
-#~ msgid "Phone-out"
-#~ msgstr "ଫୋନ-ନିର୍ଗମ"
-
-#~ msgid "Video"
-#~ msgstr "ଭିଡିଓ"
-
-#~ msgid "Radio"
-#~ msgstr "ରେଡିଓ"
-
-#~ msgid "Monitor"
-#~ msgstr "ପ୍ରଦର୍ଶିକା"
-
-#, fuzzy
-#~ msgid "PC Speaker"
-#~ msgstr "ସ୍ବରବର୍ଦ୍ଧକ ୟନ୍ତ୍ର"
-
-#~ msgid "Could not open vfs file \"%s\" for reading."
-#~ msgstr "ଭି.ଏଫ.ଏସ. ଫାଇଲ \"%s\" ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
-
-#, fuzzy
-#~ msgid "No filename given."
-#~ msgstr "କୌଣସି ଫାଇଲନାମ ଦିଆଯାଇ ନାହିଁ"
-
-#~ msgid "Could not open vfs file \"%s\" for writing: %s."
-#~ msgstr "ଭି.ଏଫ.ଏସ. ଫାଇଲ \"%s\" ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ: %s."
-
-#~ msgid "No filename given"
-#~ msgstr "କୌଣସି ଫାଇଲନାମ ଦିଆଯାଇ ନାହିଁ"
-
-#, fuzzy
-#~ msgid "Your OSS device doesn't support mono or stereo."
-#~ msgstr "ଆପଣଙ୍କର ଓ.ଏସ.ଏସ. ଯନ୍ତ୍ରର ଠିକ ଭାବରେ ଅନୁସନ୍ଧାନ କରିହେଲା ନାହିଁ."
-
-#~ msgid "No device specified."
-#~ msgstr "କୌଣସି ଯନ୍ତ୍ର ଉଲ୍ଲେଖିତ କରାଯାଇ ନାହିଁ."
-
-#~ msgid "Could not open device \"%s\" for reading and writing."
-#~ msgstr "\"%s\" ଯନ୍ତ୍ର ପଢ଼ିବା ଓ ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
-
-#~ msgid "Device is open."
-#~ msgstr "ଯନ୍ତ୍ର ଖୋଲାଯାଇଚ୍ଛି."
-
-#~ msgid "Device \"%s\" is not a capture device."
-#~ msgstr "\"%s\" ଯନ୍ତ୍ର ଗୋଟିଏ ଅନୁଲିପିକାର ନୁହେଁ."
-
-#~ msgid "Could not get buffers from device \"%s\"."
-#~ msgstr "\"%s\" ଯନ୍ତ୍ରରୁ ଅସ୍ଥାୟୀ ସଞ୍ଚୟ ସ୍ଥାନ ଆଣିହେଲା ନାହିଁ."
-
-#~ msgid "Could not get enough buffers from device \"%s\"."
-#~ msgstr "\"%s\" ଯନ୍ତ୍ରରୁ ପର୍ଯ୍ଯାପ୍ତ ଅସ୍ଥାୟୀ ସଞ୍ଚୟ ସ୍ଥାନ ଆଣିହେଲା ନାହିଁ."
-
-#~ msgid ""
-#~ "The %s element could not be found. This element is essential for "
-#~ "playback. Please install the right plug-in and verify that it works by "
-#~ "running 'gst-inspect %s'"
-#~ msgstr ""
-#~ "%s ଉପାଦାନ ମିଳିଲା ନାହିଁ. ପୁନଃପ୍ରଦର୍ଶନ ପାଇଁ ଏହି ଉପାଦାନଟି ଆବଶ୍ଯକ. ଦୟା କରି ସଠିକ ପ୍ଲଗ୍ଇନ୍ "
-#~ "ସ୍ଥାପିତ କରନ୍ତୁ, ଓ 'gst-inspect %s' ଚଳାଇ ଯାଞ୍ଚ କରନ୍ତୁ କି ଏହା କାର୍ଯ୍ଯକାରୀ ଅଛି"
-
-#~ msgid ""
-#~ "No usable colorspace element could be found.\n"
-#~ "Please install one and restart."
-#~ msgstr ""
-#~ "କୌଣସି ବ୍ଯବହାରଯୋଗ୍ଯ ରଙ୍ଗକ୍ଷେତ୍ର ଉପାଦାନ ମିଳିଲା ନାହିଁ.\n"
-#~ "ଦୟା କରି ଗୋଟିଏ ଉପାଦାନ ସ୍ଥାପିତ କରି ପୁନଃପ୍ରାରମ୍ଭ କରନ୍ତୁ."
diff --git a/po/pl.po b/po/pl.po
deleted file mode 100644 (file)
index 5748aa5..0000000
--- a/po/pl.po
+++ /dev/null
@@ -1,79 +0,0 @@
-# Polish translation for gst-plugins-ugly.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Jakub Bogusz <qboosh@pld-linux.org>, 2007-2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-11-28 19:34+0100\n"
-"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
-"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
-"Language: pl\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-msgid "Could not read from CD."
-msgstr "Odczyt z CD nie powiódł się."
-
-msgid "Could not open CD device for reading."
-msgstr "Nie udało się otworzyć urządzenia CD do odczytu."
-
-msgid "Disc is not an Audio CD."
-msgstr "Płyta nie jest płytą CD Audio."
-
-msgid "Could not open DVD"
-msgstr "Nie udało się otworzyć DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Nie udało się otworzyć tytułu DVD %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Nie udało się przemieścić do rozdziału %d tytułu DVD %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Nie udało się otworzyć tytułu DVD %d. Interaktywne tytułu nie są obsługiwane "
-"przez ten element"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Nie udało się odczytać DVD. Powodem może być to, że płyta jest zaszyfrowana, "
-"a biblioteka odszyfrowująca nie została zainstalowana."
-
-msgid "Could not read DVD."
-msgstr "Nie udało się odczytać DVD."
-
-msgid "This stream contains no data."
-msgstr "Ten strumień nie zawiera danych."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Nie udało się skonfigurować kodera dźwięku mp3 LAME. Proszę sprawdzić "
-#~ "parametry kodowania."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Żądana prędkość bitowa %d kbit/s dla właściwości '%s' nie jest dozwolona. "
-#~ "Prędkość bitowa zmieniona na %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Nie udało się skonfigurować kodera TwoLAME. Proszę sprawdzić parametry "
-#~ "kodowania."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Błąd wewnętrzny strumienia danych."
diff --git a/po/pt_BR.po b/po/pt_BR.po
deleted file mode 100644 (file)
index 586f642..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-# Brazilian Portuguese translation of gst-plugins-ugly.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Copyright (C) 2007-2013 Free Software Foundation, Inc.
-# Raphael Higino <In memoriam>, 2007.
-# Fabrício Godoy <skarllot@gmail.com>, 2008-2015.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly-1.7.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2015-12-28 19:54-0200\n"
-"Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
-"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
-"net>\n"
-"Language: pt_BR\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-msgid "Could not read from CD."
-msgstr "Não foi possível ler as informações do CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Não foi possível abrir o dispositivo de CD para leitura."
-
-msgid "Disc is not an Audio CD."
-msgstr "O disco não é um CD de áudio."
-
-msgid "Could not open DVD"
-msgstr "Não foi possível abrir o DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Não foi possível abrir o título %d do DVD"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Falha ao avançar para o capítulo %d do título %d do DVD"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Não foi possível abrir o título %d do DVD. Não há suporte a títulos "
-"interativos por este elemento"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Não foi possível ler o DVD. O motivo pode ser que o DVD está criptografado e "
-"uma biblioteca de descriptografia de DVD não está instalada."
-
-msgid "Could not read DVD."
-msgstr "Não foi possível ler o DVD."
-
-msgid "This stream contains no data."
-msgstr "Este fluxo não contém dados."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Falha ao configurar o codificador de áudio MP3 LAME. Verifique seus "
-#~ "parâmetros de codificação."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "A taxa de bits, %d kbits/s, requisitada pela propriedade \"%s\" não é "
-#~ "permitida. A taxa de bits foi alterada para %d kbits/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Falha ao configurar o codificador TwoLAME. Verifique seus parâmetros de "
-#~ "codificação."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Erro interno no fluxo de dados."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "As informações de título no DVD são inválidas."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Não foi possível ler as informações de título do DVD."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Falha ao abrir o dispositivo de DVD \"%s\"."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Falha ao definir busca baseada em PGC."
-
-#~ msgid "This file is encrypted and cannot be played."
-#~ msgstr "Este arquivo está criptografado e não pôde ser reproduzido."
diff --git a/po/ro.po b/po/ro.po
deleted file mode 100644 (file)
index 34b9ec0..0000000
--- a/po/ro.po
+++ /dev/null
@@ -1,85 +0,0 @@
-# Romanian translation for gst-plugins-ugly
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Lucian Adrian Grijincu <lucian.grijincu@gmail.com>, 2010.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 0.10.14.2\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2010-08-16 03:32+0300\n"
-"Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
-"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
-"Language: ro\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
-"20)) ? 1 : 2);;\n"
-"X-Generator: Virtaal 0.6.1\n"
-
-msgid "Could not read from CD."
-msgstr "Nu s-a putut citi de pe CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Nu s-a putut deschide dispozitivul CD pentru citire."
-
-msgid "Disc is not an Audio CD."
-msgstr "Discul nu este un CD audio."
-
-msgid "Could not open DVD"
-msgstr "Nu s-a putut deschide DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Nu s-a putut deschide titlul DVD %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Nu s-a putut sări la capitolul %d al titlului DVD %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Nu s-a putut deschide titlul DVD %d. Titlurile interactive nu sunt suportate "
-"de acest element"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-
-#, fuzzy
-msgid "Could not read DVD."
-msgstr "Nu s-a putut deschide DVD"
-
-msgid "This stream contains no data."
-msgstr "Fluxul acesta nu conține date."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Nu s-a putut configura codorul TwoLAME. Verificați parametrii de codare."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Rata de biți solicitată de %d kbiți/s pentru proprietatea „%s” nu este "
-#~ "permisă. Rata de biți a fost modificată la %d kbiți/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Nu s-a putut configura codorul TwoLAME. Verificați parametrii de codare."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Eroare internă a fluxului de date."
-
-#, fuzzy
-#~ msgid ""
-#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Nu s-a putut configura codorul LAME. Verificați parametrii de codare."
diff --git a/po/ru.po b/po/ru.po
deleted file mode 100644 (file)
index 3655689..0000000
--- a/po/ru.po
+++ /dev/null
@@ -1,98 +0,0 @@
-# Translation for gst-plugins-ugly messages to Russian
-# This file is put in the public domain.
-#
-# Артём Попов <artfwo@gmail.com>, 2009.
-# Pavel Maryanov <acid_jack@ukr.net>, 2009.
-# Yuri Kozlov <yuray@komyakino.ru>, 2011, 2012.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-12-01 13:38+0400\n"
-"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
-"Language-Team: Russian <gnu@mx.ru>\n"
-"Language: ru\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.4\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-
-msgid "Could not read from CD."
-msgstr "Не удалось прочесть CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Не удалось открыть CD-устройство для чтения."
-
-msgid "Disc is not an Audio CD."
-msgstr "Диск не в формате аудио-CD."
-
-msgid "Could not open DVD"
-msgstr "Не удалось открыть DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Не удалось открыть DVD-раздел %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Ошибка перехода к эпизоду %d DVD-раздела %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Не удалось открыть DVD-раздел %d. Интерактивные разделы не поддерживаются "
-"этим элементом"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Не удалось прочесть DVD. Это могло произойти из-за того, что DVD закодирован "
-"и не установлена библиотека декодирования DVD."
-
-msgid "Could not read DVD."
-msgstr "Не удалось прочесть DVD."
-
-msgid "This stream contains no data."
-msgstr "Поток не содержит данных."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Не удалось настроить аудио-кодировщик mp3 LAME. Проверьте параметры "
-#~ "кодирования."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Запрошенный битрейт в %d кбит/с для свойства «%s» недопустим. Битрейт был "
-#~ "изменён на %d кбит/с."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Не удалось настроить кодировщик TwoLAME. Проверьте параметры кодирования."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Внутренняя ошибка потока данных."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Неверные сведения о разделах на DVD."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Не удалось прочесть сведения о разделах для DVD."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Ошибка при открытии DVD-устройства «%s»."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Не удалось включить PGC-позиционирование."
-
-#~ msgid "This file is encrypted and cannot be played."
-#~ msgstr "Файл зашифрован и не может быть воспроизведён."
diff --git a/po/sk.po b/po/sk.po
deleted file mode 100644 (file)
index 77a1699..0000000
--- a/po/sk.po
+++ /dev/null
@@ -1,289 +0,0 @@
-# Czech translations of gst-plugins.
-# Copyright (C) 2004 gst-plugins' COPYRIGHT HOLDER
-# This file is put in the public domain.
-# Peter Tuhársky <tuharsky@misbb.sk>, 2007, 2009, 2010, 2014.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.2.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2014-01-30 10:28+0100\n"
-"Last-Translator: Peter Tuharsky <tuharsky@misbb.sk>\n"
-"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
-"Language: sk\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Poedit-Language: Slovak\n"
-"X-Poedit-Country: SLOVAKIA\n"
-
-msgid "Could not read from CD."
-msgstr "Nepodarilo sa čítať z CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Nepodarilo sa otvoriť zariadenie CD na čítanie."
-
-msgid "Disc is not an Audio CD."
-msgstr "Tento disk nie je zvukové CD."
-
-msgid "Could not open DVD"
-msgstr "Nepodarilo sa otvoriť DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Nepodarilo sa otvoriť DVD titul %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Nepodarilo sa preskočiť na kapitolu %d pre DVD titul %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Nepodarilo sa otvoriť DVD titul %d. Interaktívne tituly nie sú podporované "
-"týmto prvkom"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Nepodarilo sa čítať DVD. Možno je DVD šifrované a nie je nainštalovaná "
-"dešifrovacia knižnica."
-
-msgid "Could not read DVD."
-msgstr "Nepodarilo sa čítať DVD."
-
-msgid "This stream contains no data."
-msgstr "Tento prúd neobsahuje žiadne údaje."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Nepodarilo sa nastaviť LAME mp3 enkodér. Skontrolujte svoje kódovacie "
-#~ "nastavenia, prosím."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Požadovaná bitová rýchlosť %d kbit/s pre vlastnosť '%s' nie je dovolená. "
-#~ "Bitová rýchlosť bola nastavená na %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Nepodarilo sa nastaviť TwoLAME enkodér. Skontrolujte svoje kódovacie "
-#~ "nastavenia, prosím."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Vnútorná chyba prúdu údajov."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "Chybný titul na DVD."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "Nepodarilo sa načítať informáciu o titule DVD."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "Nepodarilo sa otvoriť DVD zariadenie '%s'."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "Nepodarilo sa nastaviť preskočenie na báze PGC. "
-
-#~ msgid "This file is encrypted and cannot be played."
-#~ msgstr "Tento súbor je šifrovaný a nedá sa prehrať."
-
-#~ msgid "Could not open file \"%s\" for writing."
-#~ msgstr "Nemohu otevřít soubor \"%s\" pro zápis."
-
-#~ msgid "Error closing file \"%s\"."
-#~ msgstr "Chyba při zavírání souboru \"%s\"."
-
-#~ msgid "Could not open file \"%s\" for reading."
-#~ msgstr "Nemohu otevřít soubor \"%s\" pro čtení."
-
-#~ msgid "No filename specified."
-#~ msgstr "Nezadán název souboru."
-
-#~ msgid "No or invalid input audio, AVI stream will be corrupt."
-#~ msgstr "Žádný nebo neplatný vstup zvuku, proud AVI bude poškozen."
-
-#~ msgid "Could not open audio device \"%s\" for writing."
-#~ msgstr "Nemohu otevřít zařízení zvuku \"%s\" pro zápis."
-
-#~ msgid "Could not open control device \"%s\" for writing."
-#~ msgstr "Nemohu otevřít řídicí zařízení \"%s\" pro zápis."
-
-#~ msgid "Could not configure audio device \"%s\"."
-#~ msgstr "Nemohu nastavit zařízení zvuku \"%s\"."
-
-#~ msgid "Could not set audio device \"%s\" to %d Hz."
-#~ msgstr "Nemohu nastavit zařízení zvuku \"%s\" na %d Hz."
-
-#~ msgid "Could not close audio device \"%s\"."
-#~ msgstr "Nemohu zavřít zařízení zvuku \"%s\"."
-
-#~ msgid "Could not close control device \"%s\"."
-#~ msgstr "Nemohu zavřít řídicí zařízení \"%s\"."
-
-#~ msgid "Could not open video device \"%s\" for writing."
-#~ msgstr "Nemohu otevřít zařízení videa \"%s\" pro zápis."
-
-#~ msgid "Could not close video device \"%s\"."
-#~ msgstr "Nemohu zavřít zařízení videa \"%s\"."
-
-#~ msgid "Could not write to device \"%s\"."
-#~ msgstr "Nemohu zapisovat do zařízení \"%s\"."
-
-#~ msgid "OSS device \"%s\" is already in use by another program."
-#~ msgstr "Zařízení OSS \"%s\" již používá jiný program."
-
-#~ msgid "Could not access device \"%s\", check its permissions."
-#~ msgstr "Nemohu přistupovat k zařízení \"%s\", zkontrolujte jeho oprávnění."
-
-#~ msgid "Device \"%s\" does not exist."
-#~ msgstr "Zařízení \"%s\" neexistuje."
-
-#~ msgid "Could not open device \"%s\" for writing."
-#~ msgstr "Nemohu otevřít zažízení \"%s\" pro zápis."
-
-#~ msgid "Could not open device \"%s\" for reading."
-#~ msgstr "Nemohu otevřít zažízení \"%s\" pro čtení."
-
-#~ msgid "Your OSS device could not be probed correctly"
-#~ msgstr "Vaše zařízení OSS nebylo možné správně najít"
-
-#~ msgid "Volume"
-#~ msgstr "Hlasitost"
-
-#~ msgid "Bass"
-#~ msgstr "Basy"
-
-#~ msgid "Treble"
-#~ msgstr "Výšky"
-
-#~ msgid "Synth"
-#~ msgstr "Synth"
-
-#~ msgid "PCM"
-#~ msgstr "PCM"
-
-#~ msgid "Speaker"
-#~ msgstr "Reproduktor"
-
-#~ msgid "Line-in"
-#~ msgstr "Line-in"
-
-#~ msgid "Microphone"
-#~ msgstr "Mikrofon"
-
-#~ msgid "CD"
-#~ msgstr "CD"
-
-#~ msgid "Mixer"
-#~ msgstr "Mixér"
-
-#~ msgid "PCM-2"
-#~ msgstr "PCM-2"
-
-#~ msgid "Record"
-#~ msgstr "Nahrávání"
-
-#~ msgid "In-gain"
-#~ msgstr "Vstupní-zisk"
-
-#~ msgid "Out-gain"
-#~ msgstr "Výstupní-zisk"
-
-#~ msgid "Line-1"
-#~ msgstr "Line-1"
-
-#~ msgid "Line-2"
-#~ msgstr "Line-2"
-
-#~ msgid "Line-3"
-#~ msgstr "Line-3"
-
-#~ msgid "Digital-1"
-#~ msgstr "Digitální-1"
-
-#~ msgid "Digital-2"
-#~ msgstr "Digitální-2"
-
-#~ msgid "Digital-3"
-#~ msgstr "Digitální-3"
-
-#~ msgid "Phone-in"
-#~ msgstr "Telefon-in"
-
-#~ msgid "Phone-out"
-#~ msgstr "Telefon-out"
-
-#~ msgid "Video"
-#~ msgstr "Video"
-
-#~ msgid "Radio"
-#~ msgstr "Rádio"
-
-#~ msgid "Monitor"
-#~ msgstr "Monitor"
-
-#, fuzzy
-#~ msgid "PC Speaker"
-#~ msgstr "Reproduktor"
-
-#~ msgid "Could not open vfs file \"%s\" for reading."
-#~ msgstr "Nemohu otevřít soubor vfs \"%s\" pro čtení."
-
-#, fuzzy
-#~ msgid "No filename given."
-#~ msgstr "Nezadán název souboru"
-
-#~ msgid "Could not open vfs file \"%s\" for writing: %s."
-#~ msgstr "Nemohu otevřít soubor vfs \"%s\" pro zápis: %s."
-
-#~ msgid "No filename given"
-#~ msgstr "Nezadán název souboru"
-
-#, fuzzy
-#~ msgid "Your OSS device doesn't support mono or stereo."
-#~ msgstr "Vaše zařízení OSS nebylo možné správně najít"
-
-#~ msgid "No device specified."
-#~ msgstr "Nezadáno zařízení."
-
-#~ msgid "Could not open device \"%s\" for reading and writing."
-#~ msgstr "Nemohu otevřít zařízení \"%s\" pro čtení a zápis."
-
-#~ msgid "Device is open."
-#~ msgstr "Zařízení je otevřeno."
-
-#~ msgid "Device \"%s\" is not a capture device."
-#~ msgstr "Zařízení \"%s\" není zachytávací zařízení."
-
-#~ msgid "Could not get buffers from device \"%s\"."
-#~ msgstr "Nemohu od zařízení \"%s\" získat vyrovnávací paměti."
-
-#~ msgid "Could not get enough buffers from device \"%s\"."
-#~ msgstr "Nemohu od zařízení \"%s\" získat dost vyrovnávacích pamětí."
-
-#~ msgid ""
-#~ "The %s element could not be found. This element is essential for "
-#~ "playback. Please install the right plug-in and verify that it works by "
-#~ "running 'gst-inspect %s'"
-#~ msgstr ""
-#~ "Element %s nelze najít. Tento element je pro přehrávání nutný. "
-#~ "Nainstalujte prosím potřebný modul a ověřte, že funguje, spuštěním 'gst-"
-#~ "inspect %s'"
-
-#~ msgid ""
-#~ "No usable colorspace element could be found.\n"
-#~ "Please install one and restart."
-#~ msgstr ""
-#~ "Nenalezen použitelný element colorspace.\n"
-#~ "Nainstalujte prosím nějaký a restartujte."
diff --git a/po/sl.po b/po/sl.po
deleted file mode 100644 (file)
index 32f4366..0000000
--- a/po/sl.po
+++ /dev/null
@@ -1,84 +0,0 @@
-# Slovenian translation for gst-plugins-ugly.
-# Copyright (C) 2009 - 2012 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Matej Urbančič <matej.urban@gmail.com>, 2009.
-# Klemen Košir <klemen.kosir@gmx.com>, 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 0.10.17.2\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-03-26 22:48+0100\n"
-"Last-Translator: Klemen Košir <klemen.kosir@gmx.com>\n"
-"Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
-"Language: sl\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
-"%100==4 ? 3 : 0);\n"
-
-msgid "Could not read from CD."
-msgstr "S CD-ja ni mogoče brati."
-
-msgid "Could not open CD device for reading."
-msgstr "Naprave CD ni mogoče odpreti za branje."
-
-msgid "Disc is not an Audio CD."
-msgstr "Disk ni zvočni CD."
-
-msgid "Could not open DVD"
-msgstr "DVD-ja ni mogoče odpreti"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "DVD naslova %d ni mogoče odpreti."
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Napaka med odpiranjem poglavja %d DVD naslova %d."
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr "DVD naslova %d ni mogoče odpreti. Interaktivni naslovi niso podprti."
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"DVD-ja ni mogoče prebrati. Verjetno je DVD šifriran, knjižnica za "
-"dešifriranje pa ni nameščena."
-
-msgid "Could not read DVD."
-msgstr "DVD-ja ni mogoče prebrati."
-
-msgid "This stream contains no data."
-msgstr "Pretok ne vsebuje podatkov."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Napaka med nastavljanjem zvočnega kodirnika mp3 LAME. Preverite parametre "
-#~ "kodiranja."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Zahtevana bitna hitrost %d kbit/s za lastnost \"%s\" ni dovoljena. Bitna "
-#~ "hitrost je bila spremenjena na %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Napaka med nastavljanjem kodirnika TwoLAME. Preverite parametre kodiranja."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Notranja napaka pretoka podatkov."
-
-#~ msgid "Failed to configure LAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Napaka med nastavljanjem kodirnika LAME. Preverite parametre kodiranja."
diff --git a/po/sq.po b/po/sq.po
deleted file mode 100644 (file)
index 2cecc8b..0000000
--- a/po/sq.po
+++ /dev/null
@@ -1,256 +0,0 @@
-# Përkthimi i mesazheve të gst-plugins në shqip.
-# Copyright (C) 2004 Free Software Foundation, Inc.
-# Laurent Dhima <laurenti@alblinux.net>, 2004.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins 0.8.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2004-08-07 20:29+0200\n"
-"Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
-"Language-Team: Albanian <begraj@hotmail.com>\n"
-"Language: sq\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#, fuzzy
-msgid "Could not read from CD."
-msgstr "I pamundur shkrimi tek file \"%s\"."
-
-msgid "Could not open CD device for reading."
-msgstr "I pamundur hapja e dispozitivit CD për lexim."
-
-#, fuzzy
-msgid "Disc is not an Audio CD."
-msgstr "Dispozitivi nuk është hapur."
-
-msgid "Could not open DVD"
-msgstr ""
-
-#, fuzzy, c-format
-msgid "Could not open DVD title %d"
-msgstr "E pamundur mbyllja e file vfs \"%s\"."
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr ""
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-
-#, fuzzy
-msgid "Could not read DVD."
-msgstr "I pamundur shkrimi tek file \"%s\"."
-
-msgid "This stream contains no data."
-msgstr ""
-
-#, fuzzy
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "I pamundur shkrimi tek file \"%s\"."
-
-#, fuzzy
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "E pamundur mbyllja e file vfs \"%s\"."
-
-#~ msgid "Could not open file \"%s\" for writing."
-#~ msgstr "E pamundur hapja e file \"%s\" në shkrim."
-
-#~ msgid "Error closing file \"%s\"."
-#~ msgstr "Gabim gjatë mbylljes së file \"%s\"."
-
-#~ msgid "Could not open file \"%s\" for reading."
-#~ msgstr "E pamundur hapja e file \"%s\" për lexim."
-
-#~ msgid "No filename specified."
-#~ msgstr "Nuk është përcaktuar emri i file."
-
-#~ msgid "No or invalid input audio, AVI stream will be corrupt."
-#~ msgstr "Input audio i gabuar ose mungon, stream AVI mund të jetë i dëmtuar."
-
-#~ msgid "Could not open audio device \"%s\" for writing."
-#~ msgstr "E pamundur hapja e dispozitivit të zërit \"%s\" për shkrim."
-
-#~ msgid "Could not open control device \"%s\" for writing."
-#~ msgstr "E pamundur hapja e dispozitivit të kontrollit \"%s\" për shkrim."
-
-#~ msgid "Could not configure audio device \"%s\"."
-#~ msgstr "I pamundur konfigurimi i dispozitivit të zërit \"%s\"."
-
-#~ msgid "Could not set audio device \"%s\" to %d Hz."
-#~ msgstr "I pamundur rregullimi i dispozitivit audio \"%s\" në %d Hz."
-
-#~ msgid "Could not close audio device \"%s\"."
-#~ msgstr "E pamundur mbyllja e dispozitivit audio \"%s\"."
-
-#~ msgid "Could not close control device \"%s\"."
-#~ msgstr "E pamundur mbyllja e dispozitivit të kontrollit \"%s\"."
-
-#~ msgid "Could not open video device \"%s\" for writing."
-#~ msgstr "E pamundur hapja e dispozitivit video \"%s\" për shkrim."
-
-#~ msgid "Could not close video device \"%s\"."
-#~ msgstr "E pamundur mbyllja e dispozitivit video \"%s\"."
-
-#~ msgid "Could not write to device \"%s\"."
-#~ msgstr "I pamundur shkrimi në dispozitivin \"%s\"."
-
-#~ msgid "OSS device \"%s\" is already in use by another program."
-#~ msgstr ""
-#~ "Dispozitivi OSS \"%s\" është duke u përdorur nga një tjetër program."
-
-#~ msgid "Could not access device \"%s\", check its permissions."
-#~ msgstr ""
-#~ "E pamundur futja në dispozitivin \"%s\", kontrollo të drejtat e tij."
-
-#~ msgid "Device \"%s\" does not exist."
-#~ msgstr "Dispozitivi \"%s\" nuk ekziston."
-
-#~ msgid "Could not open device \"%s\" for writing."
-#~ msgstr "E pamundur hapja e dispozitivit \"%s\" për shkrim."
-
-#~ msgid "Could not open device \"%s\" for reading."
-#~ msgstr "E pamundur hapja e dispozitivit \"%s\" për lexim."
-
-#~ msgid "Your OSS device could not be probed correctly"
-#~ msgstr "Dispozitivi juaj OSS mund të mos provohet korrektësisht"
-
-#~ msgid "Volume"
-#~ msgstr "Volumi"
-
-#~ msgid "Bass"
-#~ msgstr "Bas"
-
-#~ msgid "Treble"
-#~ msgstr "Treble"
-
-#~ msgid "Synth"
-#~ msgstr "Sintetizuesi"
-
-#~ msgid "PCM"
-#~ msgstr "PCM"
-
-#~ msgid "Speaker"
-#~ msgstr "Zë folës"
-
-#~ msgid "Line-in"
-#~ msgstr "Linja-hyrje"
-
-#~ msgid "Microphone"
-#~ msgstr "Mikrofoni"
-
-#~ msgid "CD"
-#~ msgstr "CD"
-
-#~ msgid "Mixer"
-#~ msgstr "Kontrolli i volumit"
-
-#~ msgid "PCM-2"
-#~ msgstr "PCM-2"
-
-#~ msgid "Record"
-#~ msgstr "Regjistrimi"
-
-#~ msgid "In-gain"
-#~ msgstr "In-gain"
-
-#~ msgid "Out-gain"
-#~ msgstr "Out-gain"
-
-#~ msgid "Line-1"
-#~ msgstr "Linja-1"
-
-#~ msgid "Line-2"
-#~ msgstr "Linja-2"
-
-#~ msgid "Line-3"
-#~ msgstr "Linja-3"
-
-#~ msgid "Digital-1"
-#~ msgstr "Dixhitale-1"
-
-#~ msgid "Digital-2"
-#~ msgstr "Dixhitale-2"
-
-#~ msgid "Digital-3"
-#~ msgstr "Dixhitale-3"
-
-#~ msgid "Phone-in"
-#~ msgstr "Phone-hyrja"
-
-#~ msgid "Phone-out"
-#~ msgstr "Phone-dalja"
-
-#~ msgid "Video"
-#~ msgstr "Video"
-
-#~ msgid "Radio"
-#~ msgstr "Radio"
-
-#~ msgid "Monitor"
-#~ msgstr "Ekrani"
-
-#, fuzzy
-#~ msgid "PC Speaker"
-#~ msgstr "Zë folës"
-
-#~ msgid "Could not open vfs file \"%s\" for reading."
-#~ msgstr "E pamundur hapja e file vfs \"%s\" për lexim."
-
-#, fuzzy
-#~ msgid "No filename given."
-#~ msgstr "Nuk është dhënë asnjë emër file"
-
-#~ msgid "Could not open vfs file \"%s\" for writing: %s."
-#~ msgstr "E pamundur hapja e file vfs \"%s\" për shkrim: %s."
-
-#~ msgid "No filename given"
-#~ msgstr "Nuk është dhënë asnjë emër file"
-
-#, fuzzy
-#~ msgid "Your OSS device doesn't support mono or stereo."
-#~ msgstr "Dispozitivi juaj OSS mund të mos provohet korrektësisht"
-
-#~ msgid "No device specified."
-#~ msgstr "Nuk është përcaktuar asnjë dispozitiv."
-
-#~ msgid "Could not open device \"%s\" for reading and writing."
-#~ msgstr "E pamundur hapja e dispozitivit \"%s\" për lexim dhe shkrim."
-
-#~ msgid "Device is open."
-#~ msgstr "Dispozitivi është i hapur."
-
-#~ msgid "Device \"%s\" is not a capture device."
-#~ msgstr "Dispozitivi \"%s\" nuk është një dispozitiv marrje."
-
-#~ msgid "Could not get buffers from device \"%s\"."
-#~ msgstr "E pamundur marrja e buffers nga dispozitivi \"%s\"."
-
-#~ msgid "Could not get enough buffers from device \"%s\"."
-#~ msgstr "E pamundur marrja e buffers të mjaftueshëm nga dispozitivi \"%s\"."
-
-#~ msgid ""
-#~ "The %s element could not be found. This element is essential for "
-#~ "playback. Please install the right plug-in and verify that it works by "
-#~ "running 'gst-inspect %s'"
-#~ msgstr ""
-#~ "E pamundur gjetja e elementit %s. Ky element është thelbësor për "
-#~ "playback. Ju lutem instaloni plug-in e duhur dhe kontrollo funksionimin "
-#~ "duke ekzekutuar 'gst-inspect %s'"
-
-#~ msgid ""
-#~ "No usable colorspace element could be found.\n"
-#~ "Please install one and restart."
-#~ msgstr ""
-#~ "Nuk arrin të gjehet asnjë element ngjyra e hapësirës.\n"
-#~ "Ju lutem instaloni një dhe rinisni."
diff --git a/po/sr.po b/po/sr.po
deleted file mode 100644 (file)
index 4eb1483..0000000
--- a/po/sr.po
+++ /dev/null
@@ -1,80 +0,0 @@
-# Serbian translation of gst-plugins
-# This file is put in the public domain.
-# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011, 2013.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly-1.1.4\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2013-10-03 22:30+0200\n"
-"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
-"Language-Team: Serbian <(nothing)>\n"
-"Language: sr\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Project-Style: gnome\n"
-
-msgid "Could not read from CD."
-msgstr "Не могу да читам ЦД."
-
-msgid "Could not open CD device for reading."
-msgstr "Не могу да отворим ЦД уређај ради читања."
-
-msgid "Disc is not an Audio CD."
-msgstr "Диск није Звучни ЦД."
-
-msgid "Could not open DVD"
-msgstr "Не могу да отворим ДВД"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Не могу да отворим ДВД наслов „%d“"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Нисам успео да стигнем до поглавља „%d“ ДВД наслова „%d“"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Не могу да отворим ДВД наслов „%d“. Овај елемент не подржава међудејствене "
-"наслове"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Не могу да читам ДВД. Можда зато што је ДВД шифрован а библиотека за "
-"дешифровање ДВД-а није инсталирана."
-
-msgid "Could not read DVD."
-msgstr "Не могу да читам ДВД."
-
-msgid "This stream contains no data."
-msgstr "Овај ток не садржи податке."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Нисам успео да подесим енкодер звука ЛАМЕ мп3. Проверите ваше параметре "
-#~ "кодирања."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Тражени проток података од %d kbit/s за „%s“ није допуштен. Проток "
-#~ "података је постављен на %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Нисам успео да подесим ДваЛАМЕ енкодер. Проверите ваше параметре кодирања."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Унутрашња грешка тока података."
diff --git a/po/sv.po b/po/sv.po
deleted file mode 100644 (file)
index e843c4a..0000000
--- a/po/sv.po
+++ /dev/null
@@ -1,76 +0,0 @@
-# Swedish translation for gst-plugins-ugly.
-# Copyright (C) 2007, 2008, 2009, 2014, 2015, 2019 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Daniel Nylander <po@danielnylander.se>, 2007, 2008, 2009.
-# Sebastian Rasmussen <sebras@gmail.com>, 2014, 2015.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.15.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-01-17 02:02+0000\n"
-"PO-Revision-Date: 2019-01-17 02:02+0000\n"
-"Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n"
-"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
-"Language: sv\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
-"X-Generator: Poedit 1.8.6\n"
-
-#: ext/cdio/gstcdiocddasrc.c:199
-msgid "Could not read from CD."
-msgstr "Kunde inte läsa från cd."
-
-#: ext/cdio/gstcdiocddasrc.c:406
-msgid "Could not open CD device for reading."
-msgstr "Kunde inte öppna cd-enheten för läsning."
-
-#: ext/cdio/gstcdiocddasrc.c:413
-msgid "Disc is not an Audio CD."
-msgstr "Skivan är inte en ljud-cd."
-
-#: ext/dvdread/dvdreadsrc.c:231 ext/dvdread/dvdreadsrc.c:238
-msgid "Could not open DVD"
-msgstr "Kunde inte öppna dvd"
-
-#: ext/dvdread/dvdreadsrc.c:245 ext/dvdread/dvdreadsrc.c:622
-#: ext/dvdread/dvdreadsrc.c:629
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Kunde inte öppna dvd-titel %d"
-
-#: ext/dvdread/dvdreadsrc.c:251
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Misslyckades med att gå till kapitel %d för dvd-titel %d"
-
-#: ext/dvdread/dvdreadsrc.c:636
-#, c-format
-msgid "Could not open DVD title %d. Interactive titles are not supported by this element"
-msgstr "Kunde inte öppna dvd-titel %d. Interaktiva titlar stöds inte av det här elementet"
-
-#: ext/dvdread/dvdreadsrc.c:991
-msgid "Could not read DVD. This may be because the DVD is encrypted and a DVD decryption library is not installed."
-msgstr "Kunde ej läsa dvd. Detta kan vara för att dvd:n är krypterad och ett dvd-avkrypteringsbibliotek inte är installerat."
-
-#: ext/dvdread/dvdreadsrc.c:994
-msgid "Could not read DVD."
-msgstr "Kunde inte läsa dvd."
-
-#: gst/asfdemux/gstasfdemux.c:446 gst/asfdemux/gstasfdemux.c:454
-msgid "This stream contains no data."
-msgstr "Den här strömmen innehåller inget data."
-
-#~ msgid "Failed to configure LAME mp3 audio encoder. Check your encoding parameters."
-#~ msgstr "Misslyckades med att konfigurera LAME mp3 ljudkodare. Kontrollera dina kodningsparametrar."
-
-#~ msgid "The requested bitrate %d kbit/s for property '%s' is not allowed. The bitrate was changed to %d kbit/s."
-#~ msgstr "Den begärda bitfrekvensen %d kbit/s för egenskapen \"%s\" tillåts inte. Bitfrekvensen ändrades till %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr "Misslyckades med att konfigurera TwoLAME-kodaren. Kontrollera dina kodningsparametrar."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Fel i intern dataström."
diff --git a/po/ta.po b/po/ta.po
deleted file mode 100644 (file)
index cd8db03..0000000
--- a/po/ta.po
+++ /dev/null
@@ -1,64 +0,0 @@
-# Tamil messages for gst-plugins-ugly.
-# This file is put in the public domain.
-# List of contributors follow:
-# Poorajith <gokulkannanst@gmail.com>, 2019.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.15.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-01-17 02:02+0000\n"
-"PO-Revision-Date: 2019-02-06 01:10+0530\n"
-"Last-Translator: Arun Isaac <arunisaac@systemreboot.net>\n"
-"Language-Team: Tamil <tamil@systemreboot.net>\n"
-"Language: ta\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ext/cdio/gstcdiocddasrc.c:199
-msgid "Could not read from CD."
-msgstr "குறுவட்டைப் படிக்க இயலவில்லை."
-
-#: ext/cdio/gstcdiocddasrc.c:406
-msgid "Could not open CD device for reading."
-msgstr "குறுவட்டுக் கருவியைப் படிப்பதற்காகத் திறக்க இயலவில்லை."
-
-#: ext/cdio/gstcdiocddasrc.c:413
-msgid "Disc is not an Audio CD."
-msgstr "இவ்வட்டு ஒலி குறுவட்டல்ல."
-
-#: ext/dvdread/dvdreadsrc.c:231 ext/dvdread/dvdreadsrc.c:238
-msgid "Could not open DVD"
-msgstr "இறுவட்டைத் திறக்க இயல்வில்லை"
-
-#: ext/dvdread/dvdreadsrc.c:245 ext/dvdread/dvdreadsrc.c:622
-#: ext/dvdread/dvdreadsrc.c:629
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "%d என்ற இறுவட்டுத் தலைப்பைத் திறக்க இயலவில்லை"
-
-#: ext/dvdread/dvdreadsrc.c:251
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "இறுவட்டுத் தலைப்பு %2$d யில் %1$d என்ற அத்தியாயத்திற்குச் செல்ல இயலவில்லை"
-
-#: ext/dvdread/dvdreadsrc.c:636
-#, c-format
-msgid "Could not open DVD title %d. Interactive titles are not supported by this element"
-msgstr "%d என்ற இறுவட்டுத் தலைப்பைத் திறக்க இயலவில்லை. ஊடாட்ட தலைப்புகளுக்கு இவ்வுறுப்பில் ஆதரவில்லை"
-
-#: ext/dvdread/dvdreadsrc.c:991
-msgid "Could not read DVD. This may be because the DVD is encrypted and a DVD decryption library is not installed."
-msgstr ""
-"இறுவட்டைப் படிக்க இயலவில்லை. இது இறுவட்டு மறையாக்கப்பட்டிருந்து அதனை மறைவிலக்க\n"
-"தேவையான நிரலகம் நிறுவப்படாததால் இருக்கலாம்."
-
-#: ext/dvdread/dvdreadsrc.c:994
-msgid "Could not read DVD."
-msgstr "இறுவட்டைப் படிக்க இயலவில்லை."
-
-#: gst/asfdemux/gstasfdemux.c:446 gst/asfdemux/gstasfdemux.c:454
-msgid "This stream contains no data."
-msgstr "இத்தரவுத்தொடரில் எத்தரவுமில்லை."
diff --git a/po/tr.po b/po/tr.po
deleted file mode 100644 (file)
index 679622c..0000000
--- a/po/tr.po
+++ /dev/null
@@ -1,92 +0,0 @@
-# translation of gst-plugins-ugly-1.0.3.po to Turkish
-# This file is put in the public domain.
-# Server Acim <sacim@kde.org.tr>, 2009.
-# Server Acim <sacim@kde.org.tr>, 2013.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly-1.0.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-12-01 01:19+0200\n"
-"Last-Translator: Server Acim <serveracim@gmail.com>\n"
-"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
-"Language: tr\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-
-msgid "Could not read from CD."
-msgstr "CD okuyamıyor."
-
-msgid "Could not open CD device for reading."
-msgstr "Okumak için CD aygıtını açamıyor."
-
-msgid "Disc is not an Audio CD."
-msgstr "Bu disk bir Ses CD'si değil."
-
-msgid "Could not open DVD"
-msgstr "DVD açılamıyor"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "DVD başlığı açılamıyor %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Bu dosyalara okunamadı:bölüm %d ve DVD başlığı %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"DVD başlığı açılamadı %d. Bu öğede etkileşimli Interactive başlıklar "
-"desteklenmiyor"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"DVD okunamıyor. Bunun sebebi, DVD'nin şifrelenmiş olması veya DVD şifre "
-"çzöme kitaplığının kurulu olmaması olabilir."
-
-msgid "Could not read DVD."
-msgstr "DVD okunamıyor."
-
-msgid "This stream contains no data."
-msgstr "Akış veri içermiyor."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "LAME mp3 kodlayıcı yapılandırılamadı. Kodlama parametrelerinizi "
-#~ "denetleyiniz."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "İstenen bit oranı %d kbit/s bu özellik için '%s' onaylanmadı. Bu yüzden "
-#~ "bit oranı şuna dönüştürüldü %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "TwoLAME kodlayıcı yapılandırılamadı. Kodlama parametrelerinizi "
-#~ "denetleyiniz."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "İç veri akış hatası."
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "DVD'de geçersiz başlık bilgisi."
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "DVD'deki başlık bilgisi okunamıyor."
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "DVD aygıtı açılamadı '%s'."
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "PGC tabanlı arama ayarlanamadı."
diff --git a/po/uk.po b/po/uk.po
deleted file mode 100644 (file)
index 881905a..0000000
--- a/po/uk.po
+++ /dev/null
@@ -1,87 +0,0 @@
-# Ukrainian translation to gst-plugins-ugly.
-# Copyright (C) 2004 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-#
-# Maxim V. Dziumanenko <dziumanenko@gmail.com>, 2007.
-# Yuri Chornoivan <yurchor@ukr.net>, 2011, 2012.
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2012-11-28 20:25+0200\n"
-"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
-"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
-"Language: uk\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Lokalize 1.5\n"
-
-msgid "Could not read from CD."
-msgstr "Не вдалося прочитати дані з компакт-диска."
-
-msgid "Could not open CD device for reading."
-msgstr "Не вдалося відкрити носій для читання."
-
-msgid "Disc is not an Audio CD."
-msgstr "Диск не записано у форматі Audio CD."
-
-msgid "Could not open DVD"
-msgstr "Не вдалося відкрити DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Не вдалося відкрити частину DVD %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Не вдалося перейти до розділу %d частини DVD %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Не вдалося відкрити заголовок DVD %d. Інтерактивні заголовки не "
-"підтримуються цим елементом"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Не вдалося прочитати DVD. Причиною може бути те, що DVD зашифровано, а "
-"бібліотеку розшифрування DVD не встановлено."
-
-msgid "Could not read DVD."
-msgstr "Не вдалося прочитати DVD."
-
-msgid "This stream contains no data."
-msgstr "Потік не містить даних."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Помилка при налаштовуванні кодера LAME для звукових даних у форматі MP3. "
-#~ "Перевірте параметри кодування."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Запитана бітова швидкість %d кбіт/с для властивості «%s» є неприпустимою. "
-#~ "Бітову швидкість змінено на %d кбіт/с."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Помилка при налаштовуванні кодувальника TwoLAME. Перевірте параметри "
-#~ "кодування."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Помилка внутрішнього потоку даних."
-
-#~ msgid "This file is encrypted and cannot be played."
-#~ msgstr "Файл зашифрований та не може бути відтворений."
diff --git a/po/vi.po b/po/vi.po
deleted file mode 100644 (file)
index 57fd8c4..0000000
--- a/po/vi.po
+++ /dev/null
@@ -1,84 +0,0 @@
-# Vietnamese translation for GST Plugins Ugly.
-# Copyright © 2014 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Clytie Siddall <clytie@riverland.net.au>, 2007-2010.
-# Trần Ngọc Quân <vnwildman@gmail.com>, 2012-2014.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.3.90\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2014-06-30 09:20+0700\n"
-"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
-"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
-"Language: vi\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Language-Team-Website: <http://translationproject.org/team/vi.html>\n"
-"X-Generator: LocFactoryEditor 1.8\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-
-msgid "Could not read from CD."
-msgstr "Không thể đọc từ đĩa CD."
-
-msgid "Could not open CD device for reading."
-msgstr "Không thể mở thiết bị đĩa CD để đọc."
-
-msgid "Disc is not an Audio CD."
-msgstr "Đây không phải là một đĩa CD âm nhạc."
-
-msgid "Could not open DVD"
-msgstr "Không thể mở đĩa DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "Không thể mở đĩa DVD tên %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "Gặp lỗi khi nhảy đến chương %d của đĩa DVD tên %d"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr ""
-"Không thể mở đĩa DVD tên %d. Phần tử này không hỗ trợ tiêu đề tương tác."
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr ""
-"Không thể đọc đĩa DVD. Nguyên nhân có thể là DVD đã bị mã hóa và thư viện "
-"giải mã DVD chưa được cài đặt."
-
-msgid "Could not read DVD."
-msgstr "Không thể đọc đĩa DVD."
-
-msgid "This stream contains no data."
-msgstr "Luồng này không chứa dữ liệu."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr ""
-#~ "Gặp lỗi khi cấu hình bộ giải mã âm thanh mp3 của LAME. Hãy kiểm tra các "
-#~ "tham số giải mã."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr ""
-#~ "Không cho phép tỷ lệ đã yêu cầu %d kbit/giây cho thuộc tính “%s” nên tỷ "
-#~ "lệ bit bị thay đổi thành %d kbit/g."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr ""
-#~ "Gặp lỗi khi cấu hình bộ biên mã TwoLAME. Hãy kiểm tra lại các tham số "
-#~ "giải mã."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Lỗi luồng dữ liệu nội bộ."
diff --git a/po/zh_CN.po b/po/zh_CN.po
deleted file mode 100644 (file)
index be611e4..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-# Chinese (simplified) translation for gst-plugins-ugly.
-# Copyright (C) 2007 Free Software Foundation, Inc.
-# This file is distributed under the same license as the gst-plugins-ugly package.
-# Wenzheng Hu <db_lobster@163.com>, 2007.
-# LI Daobing <lidaobing@gmail.com>, 2008, 2009.
-# Wylmer Wang <wantinghard@gmail.com>, 2011.
-# Mingye Wang <arthur200126@gmail.com>, 2015.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: gst-plugins-ugly 1.5.1\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:48+0000\n"
-"PO-Revision-Date: 2015-08-28 15:36+0800\n"
-"Last-Translator: Mingye Wang <arthur200126@gmail.com>\n"
-"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
-"Language: zh_CN\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.8.4\n"
-
-msgid "Could not read from CD."
-msgstr "无法读取 CD。"
-
-msgid "Could not open CD device for reading."
-msgstr "无法打开以读方式打开 CD 设备。"
-
-msgid "Disc is not an Audio CD."
-msgstr "盘类型不是音频 CD。"
-
-msgid "Could not open DVD"
-msgstr "无法打开 DVD"
-
-#, c-format
-msgid "Could not open DVD title %d"
-msgstr "无法打开 DVD 标题 %d"
-
-#, c-format
-msgid "Failed to go to chapter %d of DVD title %d"
-msgstr "跳转到章节 %d, DVD 标题 %d 失败"
-
-#, c-format
-msgid ""
-"Could not open DVD title %d. Interactive titles are not supported by this "
-"element"
-msgstr "无法打开 DVD 标题 %d. 这个元素不支持互动标题"
-
-msgid ""
-"Could not read DVD. This may be because the DVD is encrypted and a DVD "
-"decryption library is not installed."
-msgstr "无法读取 DVD。可能 DVD 光盘已加密,但 DVD 解密库没有安装。"
-
-msgid "Could not read DVD."
-msgstr "无法读取 DVD。"
-
-msgid "This stream contains no data."
-msgstr "这个串流中没有包含数据."
-
-#~ msgid ""
-#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
-#~ "parameters."
-#~ msgstr "配置 LAME mp3 编码器失败. 请检查你的编码参数."
-
-#~ msgid ""
-#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-#~ "bitrate was changed to %d kbit/s."
-#~ msgstr "不允许的比特率 %d kbit/s 于 '%s'. 比特率已改变成 %d kbit/s."
-
-#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-#~ msgstr "设置 TwoLAME 编码器失败. 请检查你的编码参数."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "内部数据流错误。"
-
-#~ msgid "Invalid title information on DVD."
-#~ msgstr "无效的 DVD 标题信息。"
-
-#~ msgid "Could not read title information for DVD."
-#~ msgstr "无法读取为 DVD 读取标题信息。"
-
-#~ msgid "Failed to open DVD device '%s'."
-#~ msgstr "无法打开 DVD 设备 '%s'。"
-
-#~ msgid "Failed to set PGC based seeking."
-#~ msgstr "设置基于 PGC 的定位失败。"
diff --git a/scripts/dist-translations.py b/scripts/dist-translations.py
deleted file mode 100755 (executable)
index 65148d6..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env python3
-#
-# Copyright (C) 2020 Tim-Philipp Müller <tim centricular net>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Library General Public
-# License as published by the Free Software Foundation; either
-# version 2 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library General Public
-# License along with this library; if not, write to the
-# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
-# Boston, MA 02110-1301, USA.
-
-import os
-import subprocess
-import shutil
-import tempfile
-
-if __name__ == "__main__":
-    dist_root = os.environ['MESON_DIST_ROOT']
-    build_root = os.environ['MESON_BUILD_ROOT']
-    source_root = os.environ['MESON_SOURCE_ROOT']
-    pwd = os.environ['PWD']
-    tmpdir = tempfile.gettempdir()
-
-    module = os.path.basename(os.path.normpath(source_root))
-
-    # Generate pot file
-    print('Generating pot file ...')
-    subprocess.run(['ninja', '-C', build_root, module + '-1.0-pot'], check=True)
-
-    # Dist pot file in tarball
-    print('Copying pot file into dist staging directory ...')
-    pot_src = os.path.join(source_root, 'po', module + '-1.0.pot')
-    dist_po_dir = os.path.join(dist_root, 'po')
-    shutil.copy2(pot_src, dist_po_dir)
diff --git a/scripts/extract-release-date-from-doap-file.py b/scripts/extract-release-date-from-doap-file.py
deleted file mode 100755 (executable)
index f09b60e..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env python3
-#
-# extract-release-date-from-doap-file.py VERSION DOAP-FILE
-#
-# Extract release date for the given release version from a DOAP file
-#
-# Copyright (C) 2020 Tim-Philipp Müller <tim centricular com>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Library General Public
-# License as published by the Free Software Foundation; either
-# version 2 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library General Public
-# License along with this library; if not, write to the
-# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
-# Boston, MA 02110-1301, USA.
-
-import sys
-import xml.etree.ElementTree as ET
-
-if len(sys.argv) != 3:
-  sys.exit('Usage: {} VERSION DOAP-FILE'.format(sys.argv[0]))
-
-release_version = sys.argv[1]
-doap_fn = sys.argv[2]
-
-tree = ET.parse(doap_fn)
-root = tree.getroot()
-
-namespaces = {'doap': 'http://usefulinc.com/ns/doap#'}
-
-for v in root.findall('doap:release/doap:Version', namespaces=namespaces):
-  if v.findtext('doap:revision', namespaces=namespaces) == release_version:
-    release_date = v.findtext('doap:created', namespaces=namespaces)
-    if release_date:
-      print(release_date)
-      sys.exit(0)
-
-sys.exit('Could not find a release with version {} in {}'.format(release_version, doap_fn))
diff --git a/scripts/meson.build b/scripts/meson.build
deleted file mode 100644 (file)
index f5d9106..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# dist scripts
-if not meson.is_subproject()
-  meson.add_dist_script('dist-translations.py')
-endif
diff --git a/subprojects/gst-plugins-ugly/.gitignore b/subprojects/gst-plugins-ugly/.gitignore
new file mode 100644 (file)
index 0000000..9cf107a
--- /dev/null
@@ -0,0 +1,15 @@
+*~
+*.bak
+
+Build
+*.user
+*.suo
+*.ipch
+*.sdf
+*.opensdf
+*.DS_Store
+
+# Meson
+/build
+/_build
+/subprojects
diff --git a/subprojects/gst-plugins-ugly/.gitlab-ci.yml b/subprojects/gst-plugins-ugly/.gitlab-ci.yml
new file mode 100644 (file)
index 0000000..c61aa7a
--- /dev/null
@@ -0,0 +1 @@
+include: "https://gitlab.freedesktop.org/gstreamer/gst-ci/raw/master/gitlab/ci_template.yml"
diff --git a/subprojects/gst-plugins-ugly/AUTHORS b/subprojects/gst-plugins-ugly/AUTHORS
new file mode 100644 (file)
index 0000000..5cef5a3
--- /dev/null
@@ -0,0 +1,21 @@
+Erik Walthinsen <omega@temple-baptist.com>
+Matt Howell <mhowell@users.sourceforge.net>
+Brent Bradburn <bbradburn@users.sourceforge.net>
+Wim Taymans <wim.taymans@chello.be>
+Richard Boulton <richard@tartarus.org>
+Zaheer Abbas Merali <zaheerabbas at merali dot org>
+David I. Lehn <dlehn@users.sourceforge.net>
+Chris Emerson <chris@tartarus.org>
+Jens Thiele <karme@unforgettable.com>
+Thomas Nyberg <thomas@codefactory.se>
+Bastien Nocera <hadess@hadess.net>
+Christian Fredrik Kalager Schaller <Uraeus@linuxrising.org>
+Thomas Vander Stichele <thomas@apestaart.org>
+Andy Wingo <wingo@pobox.com>
+Cameron Hutchison <camh@xdna.net>
+David Schleef <ds@schleef.org>
+Benjamin Otte <in7y118@public.uni-hamburg.de>
+Ronald Bultje <rbultje@ronald.bitfreak.net>
+Julien MOUTTE <julien@moutte.net>
+Jan Schmidt <thaytan@mad.scientist.com>
+Arwed v. Merkatz <v.merkatz@gmx.net>
diff --git a/subprojects/gst-plugins-ugly/COPYING b/subprojects/gst-plugins-ugly/COPYING
new file mode 100644 (file)
index 0000000..8add30a
--- /dev/null
@@ -0,0 +1,504 @@
+                 GNU LESSER GENERAL PUBLIC LICENSE
+                      Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+\f
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+\f
+                 GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+\f
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+\f
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                           NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/subprojects/gst-plugins-ugly/ChangeLog b/subprojects/gst-plugins-ugly/ChangeLog
new file mode 100644 (file)
index 0000000..b747f21
--- /dev/null
@@ -0,0 +1,25034 @@
+=== release 1.19.2 ===
+
+2021-09-23 01:34:00 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * gst-plugins-ugly.doap:
+       * meson.build:
+         Release 1.19.2
+
+2021-09-21 15:05:58 +0200  Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Strip trailing whitespace from x264's log messages
+         x264 has linebreaks at the end of its log messages that we should
+         ignore.
+         Add G_GNUC_PRINTF to the callback to make sure GCC lets us forward the
+         format string to another function marked as printf (g_strdup_vprintf)
+         without triggering -Wformat-nonliteral.
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/85>
+
+2021-09-21 14:57:29 +0200  Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Add the func/line info to the log callback
+         It looks awkward when it's missing. At least point us at the callback
+         function.
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/85>
+
+2021-09-21 14:56:23 +0200  Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Reduce log spam about bit depth support
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/85>
+
+2021-07-28 11:49:16 +0200  Stéphane Cerveau <scerveau@collabora.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: drop B-frame on open gop
+         Enhance open gop detection to drop B-frame which are invalid
+         before the first reference frame.
+         In stream such
+         gst-integration-testsuites/medias/defaults/mxf/op2b-mpeg2-wave_hd.mxf,
+         the two first frames must be dropped as we detect an open GOP situation
+         but in another media, such as http://col.la/1920X1080IXDCAMEX5MIN, the
+         first frames should not be dropped as we are in a closed GOP situation.
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/84>
+
+2021-05-22 01:53:43 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/x264/gstencoderbitrateprofilemanager.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/realmedia/rtspreal.c:
+       * meson.build:
+         Use g_memdup2() where available and add fallback for older GLib versions
+         - x264 encoder bitrate profile manager: alloc size is based
+         on existing allocation
+         - asfdemux: change length var to 64-bit and check for G_MAXUINT
+         - realmedia: opaque_data_len is read from 32 bits and then
+         only subtracted upon.
+         g_memdup() is deprecated since GLib 2.68 and we want to avoid
+         deprecation warnings with recent versions of GLib.
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/83>
+
+2021-06-01 15:28:40 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+         Back to development
+
+=== release 1.19.1 ===
+
+2021-06-01 00:12:09 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * README:
+       * RELEASE:
+       * gst-plugins-ugly.doap:
+       * meson.build:
+         Release 1.19.1
+
+2018-02-26 17:28:25 +0100  David Fernandez <d.fernandezlop@gmail.com>
+
+       * docs/gst_plugins_cache.json:
+       * ext/x264/gstx264enc.c:
+         x264enc: Change accepted caps width and height from [16, MAX] to [1, MAX]
+         There are cases where the video size might be less than 16x16.
+         This change allows the x264 encoder to accept this cases.
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/44>
+
+2021-04-20 18:48:38 -0400  Doug Nazar <nazard@nazar.ca>
+
+       * gst/realmedia/rmdemux.c:
+       * gst/realmedia/rmdemux.h:
+         realmedia: Drop duplicate seek events.
+         Also use seek seqnum for flush & segment events/messages.
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/81>
+
+2021-04-20 18:47:31 -0400  Doug Nazar <nazard@nazar.ca>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Drop duplicate seek events.
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/81>
+
+2021-03-29 13:41:07 +0200  Stéphane Cerveau <scerveau@collabora.com>
+
+       * gst/xingmux/gstxingmux.c:
+       * gst/xingmux/gstxingmux.h:
+       * gst/xingmux/plugin.c:
+         xingmux: allow per feature registration
+         Split plugin into features including
+         dynamic types which can be indiviually
+         registered during a static build.
+         More details here:
+         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 13:39:20 +0200  Stéphane Cerveau <scerveau@collabora.com>
+
+       * gst/realmedia/pnmsrc.c:
+       * gst/realmedia/pnmsrc.h:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rademux.h:
+       * gst/realmedia/rdtdepay.c:
+       * gst/realmedia/rdtdepay.h:
+       * gst/realmedia/rdtmanager.c:
+       * gst/realmedia/rdtmanager.h:
+       * gst/realmedia/realmedia.c:
+       * gst/realmedia/rmdemux.c:
+       * gst/realmedia/rmdemux.h:
+       * gst/realmedia/rtspreal.c:
+       * gst/realmedia/rtspreal.h:
+         realmedia: allow per feature registration
+         Split plugin into features including
+         dynamic types which can be indiviually
+         registered during a static build.
+         More details here:
+         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 13:23:51 +0200  Stéphane Cerveau <scerveau@collabora.com>
+
+       * gst/dvdsub/gstdvdsubdec.c:
+       * gst/dvdsub/gstdvdsubdec.h:
+       * gst/dvdsub/gstdvdsubparse.c:
+       * gst/dvdsub/gstdvdsubparse.h:
+         dvdsub: allow per feature registration
+         Split plugin into features including
+         dynamic types which can be indiviually
+         registered during a static build.
+         More details here:
+         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 13:15:32 +0200  Stéphane Cerveau <scerveau@collabora.com>
+
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+         dvdlpcmdec: allow per feature registration
+         Split plugin into features including
+         dynamic types which can be indiviually
+         registered during a static build.
+         More details here:
+         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 13:11:23 +0200  Stéphane Cerveau <scerveau@collabora.com>
+
+       * gst/asfdemux/gstasf.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+       * gst/asfdemux/gstasfelement.c:
+       * gst/asfdemux/gstasfelements.h:
+       * gst/asfdemux/gstrtpasfdepay.c:
+       * gst/asfdemux/gstrtspwms.c:
+       * gst/asfdemux/meson.build:
+         asfdemux: allow per feature registration
+         Split plugin into features including
+         dynamic types which can be indiviually
+         registered during a static build.
+         More details here:
+         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 12:39:36 +0200  Stéphane Cerveau <scerveau@collabora.com>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264: allow per feature registration
+         Split plugin into features including
+         dynamic types which can be indiviually
+         registered during a static build.
+         More details here:
+         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 12:33:00 +0200  Stéphane Cerveau <scerveau@collabora.com>
+
+       * ext/sidplay/gstsiddec.cc:
+       * ext/sidplay/gstsiddec.h:
+         sidplay: allow per feature registration
+         Split plugin into features including
+         dynamic types which can be indiviually
+         registered during a static build.
+         More details here:
+         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 12:31:26 +0200  Stéphane Cerveau <scerveau@collabora.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/mpeg2dec/gstmpeg2dec.h:
+         mpeg2dec: allow per feature registration
+         Split plugin into features including
+         dynamic types which can be indiviually
+         registered during a static build.
+         More details here:
+         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 12:28:28 +0200  Stéphane Cerveau <scerveau@collabora.com>
+
+       * ext/dvdread/dvdreadsrc.c:
+       * ext/dvdread/dvdreadsrc.h:
+         dvdread: allow per feature registration
+         Split plugin into features including
+         dynamic types which can be indiviually
+         registered during a static build.
+         More details here:
+         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 12:28:04 +0200  Stéphane Cerveau <scerveau@collabora.com>
+
+       * ext/cdio/gstcdio.c:
+       * ext/cdio/gstcdio.h:
+       * ext/cdio/gstcdiocddasrc.c:
+       * ext/cdio/gstcdiocddasrc.h:
+         cdio: allow per feature registration
+         Split plugin into features including
+         dynamic types which can be indiviually
+         registered during a static build.
+         More details here:
+         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 10:39:46 +0200  Stéphane Cerveau <scerveau@collabora.com>
+
+       * ext/amrwbdec/amrwb.c:
+       * ext/amrwbdec/amrwbdec.c:
+       * ext/amrwbdec/amrwbdec.h:
+         amrwbdec: allow per feature registration
+         Split plugin into features including
+         dynamic types which can be indiviually
+         registered during a static build.
+         More details here:
+         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 10:38:07 +0200  Stéphane Cerveau <scerveau@collabora.com>
+
+       * ext/amrnb/amrnb.c:
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbdec.h:
+       * ext/amrnb/amrnbenc.c:
+       * ext/amrnb/amrnbenc.h:
+         amrnb: allow per feature registration
+         Split plugin into features including
+         dynamic types which can be indiviually
+         registered during a static build.
+         More details here:
+         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-29 10:37:26 +0200  Stéphane Cerveau <scerveau@collabora.com>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/a52dec/gsta52dec.h:
+         a52dec: allow per feature registration
+         Split plugin into features including
+         dynamic types which can be indiviually
+         registered during a static build.
+         More details here:
+         https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
+         https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/79>
+
+2021-03-19 15:16:06 +1100  Matthew Waters <matthew@centricular.com>
+
+       * ext/x264/gstencoderbitrateprofilemanager.c:
+         gst: don't use volatile to mean atomic
+         volatile is not sufficient to provide atomic guarantees and real atomics
+         should be used instead.  GCC 11 has started warning about using volatile
+         with atomic operations.
+         https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719
+         Discovered in https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/868
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/78>
+
+2021-03-03 11:05:14 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: Make sure we have enough data available when parsing audio/video packets
+         Otherwise there will be out-of-bounds reads and potential crashes.
+         Thanks to Natalie Silvanovich for reporting.
+         Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/issues/37
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/74>
+
+2020-11-04 18:44:07 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+       * meson.build:
+         meson: Enable some MSVC warnings for parity with GCC/Clang
+         This makes it easier to do development with MSVC by making it warn
+         on common issues that GCC/Clang error out for in our CI configuration.
+         Continuation from https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/223
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/71>
+
+2020-10-31 04:52:14 +0900  Seungha Yang <seungha@centricular.com>
+
+       * tests/check/elements/mpeg2dec.c:
+         tests: mpeg2dec: Don't expect BT601 color space
+         If it's required, mpeg2dec should set it explicitly.
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/70>
+
+2020-09-08 17:30:39 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * .gitlab-ci.yml:
+         ci: include template from gst-ci master branch again
+
+2020-09-08 16:58:40 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+         Back to development
+
+=== release 1.18.0 ===
+
+2020-09-08 00:05:39 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * .gitlab-ci.yml:
+       * ChangeLog:
+       * NEWS:
+       * README:
+       * RELEASE:
+       * gst-plugins-ugly.doap:
+       * meson.build:
+         Release 1.18.0
+
+2020-09-07 22:40:46 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+       * scripts/dist-translations.py:
+       * scripts/meson.build:
+         meson: dist pot file in tarball
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/69>
+
+2020-09-07 12:14:13 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * ext/x264/gstx264enc.c:
+         x264: Update for gst_video_transfer_function_*() function renaming
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/68>
+
+2020-08-21 10:35:11 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * docs/gst_plugins_cache.json:
+       * ext/x264/gstx264enc.c:
+         x264enc: Allow maximum quantizer value of 63 instead of 51
+         QP_MAX_SPEC in x264 is set to 63 nowadays and in theory it allows even
+         up to 81 (QP_MAX) but that seems to be outside the spec.
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/67>
+
+=== release 1.17.90 ===
+
+2020-08-20 16:12:23 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * gst-plugins-ugly.doap:
+       * meson.build:
+         Release 1.17.90
+
+2020-07-15 10:49:03 +0300  Jordan Petridis <jordan@centricular.com>
+
+       * tests/check/elements/amrnbenc.c:
+         amrnbenc: remove global variables
+         gstcheck is declaring its own buffers glist which ends up
+         overwritten, loks like the code meant to use that already
+         gcc 10 is also complaining about this, but only on static
+         builds for some reason
+         ```
+         FAILED: subprojects/gst-plugins-ugly/tests/check/elements_amrnbenc
+         /usr/bin/ld: subprojects/gstreamer/libs/gst/check/libgstcheck-1.0.a(gstcheck.c.o):(.bss+0x38): multiple definition of `buffers'; subprojects/gst-plugins-ugly/tests/check/708af1f@@elements_amrnbenc@exe/elements_amrnbenc.c.o:(.bss+0x18): first defined here
+         collect2: error: ld returned 1 exit status
+         ```
+         also remove unused var `current_buf`
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/62>
+
+2020-04-02 03:27:26 +1100  Jan Schmidt <jan@centricular.com>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: Don't ignore the return value of gst_segment_do_seek()
+         If gst_segment_do_seek() fails, fail the seek.
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/45>
+
+2020-04-01 19:34:30 +1100  Jan Schmidt <jan@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Don't ignore the return result of gst_segment_do_seek()
+         gst_segment_do_seek() can fail, and our seek should fail
+         accordingly.
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/45>
+
+2020-04-17 11:34:16 -0500  Derek Lesho <dlesho@codeweavers.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Only forward SEEK event when in push mode.
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/48>
+
+2020-07-25 21:19:20 +0100  Stéphane Cerveau <scerveau@collabora.com>
+
+       * meson.build:
+         meson: add a plugin summary
+         This summary displays a list of plugins which
+         have been enabled.
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/65>
+
+2018-10-03 13:32:11 +0200  Thibault Saunier <tsaunier@igalia.com>
+
+       * ext/x264/GstX264Enc.prs:
+         x264enc: Add a 'Zero Latency' profile
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/42>
+
+2020-07-22 17:31:37 +0200  Mathieu Duponchelle <mathieu@centricular.com>
+
+       * tests/check/elements/x264enc.c:
+         tests/x264enc: Don't declare variables inside the for loop header
+         This is a C99 feature
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/64>
+
+2020-07-21 15:40:26 +0200  Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
+
+       * tests/check/elements/x264enc.c:
+         tests: x264enc: Test formats are compatible with profile
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/59>
+
+2020-07-01 16:11:09 +0200  Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Separate high-10 video formats from 8-bit formats
+         If downstream is constrained to an 8-bit profile, caps queries would
+         still allow I420_10LE as input. If upstream actually sends such a caps
+         event, downstream would fail to accept the high-10 profile.
+         The following pipeline now fails earlier, during the negotiation phase
+         instead of the stream start:
+         gst-launch-1.0 videotestsrc ! video/x-raw,format=I420_10LE \
+         ! x264enc ! video/x-h264,profile=constrained-baseline \
+         ! fakesink
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/59>
+
+2020-07-21 15:39:31 +0200  Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
+
+       * tests/check/elements/x264enc.c:
+         tests: x264enc: Test 10-bit formats
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/59>
+
+2020-07-21 15:33:57 +0200  Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
+
+       * tests/check/elements/x264enc.c:
+         tests: x264enc: Test all (8-bit) video formats
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/59>
+
+2020-07-06 22:13:55 -0400  Thibault Saunier <tsaunier@igalia.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Forward downstream colorimetry and chroma-site upstream
+         So that the value can be used by upstream converters when necessary.
+         This whole logic has been copied from `__gst_video_element_proxy_caps`
+         but those 2 fields were missing.
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/60>
+
+2020-07-08 17:07:35 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+       * scripts/extract-release-date-from-doap-file.py:
+         meson: set release date from .doap file for releases
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/61>
+
+2020-07-03 02:03:37 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+         Back to development
+
+=== release 1.17.2 ===
+
+2020-07-03 00:29:25 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * gst-plugins-ugly.doap:
+       * meson.build:
+         Release 1.17.2
+
+2020-06-23 00:03:04 +0200  Mathieu Duponchelle <mathieu@centricular.com>
+
+       * docs/meson.build:
+         meson: mark plugins cache target as always stale
+
+2020-06-19 22:55:28 -0400  Thibault Saunier <tsaunier@igalia.com>
+
+       * docs/gst_plugins_cache.json:
+         doc: Stop documenting properties from parents
+
+2020-06-20 00:28:13 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+         Back to development
+
+=== release 1.17.1 ===
+
+2020-06-19 19:20:41 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * docs/gst_plugins_cache.json:
+       * gst-plugins-ugly.doap:
+       * meson.build:
+         Release 1.17.1
+
+2020-06-09 15:13:47 -0400  Thibault Saunier <tsaunier@igalia.com>
+
+       * docs/gst_plugins_cache.json:
+         docs: Update plugins cache
+
+2020-06-08 09:37:10 -0400  Thibault Saunier <tsaunier@igalia.com>
+
+       * docs/gst_plugins_cache.json:
+         docs: Update plugins cache
+
+2020-06-06 10:15:25 +0100  Philippe Normand <philn@igalia.com>
+
+       * ext/sidplay/gstsiddec.cc:
+         siddec: update gst_type_mark_as_plugin_api() calls
+         This was left behind in commit bc1ab5e8e00a7ed6ac5e192af9310bd2146e446a.
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/55>
+
+2020-06-06 00:41:38 +0200  Mathieu Duponchelle <mathieu@centricular.com>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbenc.c:
+       * ext/x264/gstx264enc.c:
+         plugins: uddate gst_type_mark_as_plugin_api() calls
+
+2020-06-03 18:38:28 -0400  Thibault Saunier <tsaunier@igalia.com>
+
+       * docs/meson.build:
+         doc: Require hotdoc >= 0.11.0
+
+2020-05-27 16:02:02 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * docs/gst_plugins_cache.json:
+         docs: Update gst_plugins_cache.json
+
+2020-05-30 23:16:50 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbenc.c:
+       * ext/sidplay/gstsiddec.cc:
+       * ext/x264/gstx264enc.c:
+         plugins: Use gst_type_mark_as_plugin_api() for all non-element plugin types
+
+2020-06-02 00:41:23 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: extract WM/PartOfSet disc number and count metadata
+         Fixes #30
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/54>
+
+2020-06-02 00:40:48 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: sprinkle some INDENT-OFF
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/54>
+
+2020-05-27 14:42:20 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * tests/check/meson.build:
+         tests: fix meson test env setup to make sure we use the right gst-plugin-scanner
+         If core is built as a subproject (e.g. as in gst-build), make sure to use
+         the gst-plugin-scanner from the built subproject. Without this, gstreamer
+         might accidentally use the gst-plugin-scanner from the install prefix if
+         that exists, which in turn might drag in gst library versions we didn't
+         mean to drag in. Those gst library versions might then be older than
+         what our current build needs, and might cause our newly-built plugins
+         to get blacklisted in the test registry because they rely on a symbol
+         that the wrongly-pulled in gst lib doesn't have.
+         This should fix running of unit tests in gst-build when invoking
+         meson test or ninja test from outside the devenv for the case where
+         there is an older or different-version gst-plugin-scanner installed
+         in the install prefix.
+         In case no gst-plugin-scanner is installed in the install prefix, this
+         will fix "GStreamer-WARNING: External plugin loader failed. This most
+         likely means that the plugin loader helper binary was not found or
+         could not be run. You might need to set the GST_PLUGIN_SCANNER
+         environment variable if your setup is unusual." warnings when running
+         the unit tests.
+         In the case where we find GStreamer core via pkg-config we use
+         a newly-added pkg-config var "pluginscannerdir" to get the right
+         directory. This has the benefit of working transparently for both
+         installed and uninstalled pkg-config files/setups.
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/53>
+
+2020-05-27 09:13:17 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.com>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdreadsrc: fix uninitialized warning
+         Variable is always set in actual code paths but let's keep gcc happy.
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/51>
+
+2020-05-12 05:07:47 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+       * ext/sidplay/meson.build:
+       * meson.build:
+         meson: Pass native: false to add_languages()
+         This is needed for cross-compiling without a build machine compiler
+         available. The option was added in 0.54, but we only need this in
+         Cerbero and it doesn't affect older versions so it should be ok.
+         Will just cause a spurious warning.
+         Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/50>
+
+2020-04-03 14:24:46 -0500  Derek Lesho <dlesho@codeweavers.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Always re-initialize metadata and global_metadata
+         When transitioning from the PAUSED state, to the READY state, and back,
+         metadata and global_metadata are left uninitialized, unlike when the
+         demxuer transitions from NULL to READY, then to PAUSED.  I have found
+         this to cause a segmentation fault when fields in these structures are
+         set.
+
+2020-04-02 16:18:00 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Fix 'ref' property range and default
+         The --ref option indicate the size of the DPB, hence should be in the range of
+         0 to 16. This patch also fix the default to match x264enc default 3. This
+         change isn't a behaviour change since we don't enforce the reported default.
+
+2020-03-19 18:05:43 -0300  Thibault Saunier <tsaunier@igalia.com>
+
+       * ext/a52dec/gsta52dec.c:
+         a52dec: Mark as converter
+         It is able to do channel downminxing, so technically it is also a
+         converter
+         This is also important so validate knows about that when doing its
+         checks
+
+2019-10-17 14:55:51 +0200  Thibault Saunier <tsaunier@igalia.com>
+
+       * ext/x264/gstencoderbitrateprofilemanager.c:
+       * ext/x264/gstencoderbitrateprofilemanager.h:
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+       * ext/x264/meson.build:
+         x264enc: Respect Youtube bitrate recommandation
+         Properly follow google recommendations[0] concerning bitrate when the
+         user wants to use the youtube profile.
+         [0]: https://support.google.com/youtube/answer/1722171?hl=en
+
+2019-12-18 16:09:42 +0100  Stéphane Cerveau <scerveau@collabora.com>
+
+       * ext/dvdread/dvdreadsrc.c:
+         ugly: use of g_value_dup_string
+         Use helper method to get string from GValue.
+
+2019-12-14 18:49:54 +0700  Dmitry Shusharin <pmdvsh@gmail.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: fixed codestyle
+
+2019-12-14 17:15:21 +0700  Dmitry Shusharin <pmdvsh@gmail.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: corrected em_data value in CEA-708 CC SEI message (fixes #28)
+         Section 4.4 of CEA-708-D specification (table 2) requires all bits to be
+         set inside em_data field. h264parse element (and possible third-party
+         decoders such as libav) also follows this requirement.
+         https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/issues/28
+
+2019-06-09 00:30:53 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * .gitignore:
+       * .gitmodules:
+       * Makefile.am:
+       * README:
+       * autogen.sh:
+       * common:
+       * configure.ac:
+       * docs/.gitignore:
+       * docs/version.entities.in:
+       * ext/Makefile.am:
+       * ext/a52dec/Makefile.am:
+       * ext/amrnb/Makefile.am:
+       * ext/amrwbdec/Makefile.am:
+       * ext/cdio/Makefile.am:
+       * ext/dvdread/Makefile.am:
+       * ext/mpeg2dec/.gitignore:
+       * ext/mpeg2dec/Makefile.am:
+       * ext/sidplay/Makefile.am:
+       * ext/x264/Makefile.am:
+       * gst-libs/Makefile.am:
+       * gst-libs/gst/Makefile.am:
+       * gst/Makefile.am:
+       * gst/asfdemux/.gitignore:
+       * gst/asfdemux/Makefile.am:
+       * gst/dvdlpcmdec/Makefile.am:
+       * gst/dvdsub/Makefile.am:
+       * gst/realmedia/.gitignore:
+       * gst/realmedia/Makefile.am:
+       * gst/xingmux/Makefile.am:
+       * m4/.gitignore:
+       * m4/Makefile.am:
+       * m4/README:
+       * m4/a52.m4:
+       * m4/aalib.m4:
+       * m4/as-ffmpeg.m4:
+       * m4/as-slurp-ffmpeg.m4:
+       * m4/check-libheader.m4:
+       * m4/freetype2.m4:
+       * m4/gconf-2.m4:
+       * m4/glib.m4:
+       * m4/gst-fionread.m4:
+       * m4/gst-ivorbis.m4:
+       * m4/gst-sdl.m4:
+       * m4/gst-shout2.m4:
+       * m4/gst-sid.m4:
+       * m4/gtk.m4:
+       * m4/libfame.m4:
+       * m4/libmikmod.m4:
+       * m4/lrint.m4:
+       * m4/lrintf.m4:
+       * pkgconfig/.gitignore:
+       * pkgconfig/Makefile.am:
+       * pkgconfig/gstreamer-plugins-ugly-uninstalled.pc.in:
+       * po/.gitignore:
+       * po/Makevars:
+       * po/POTFILES:
+       * tests/Makefile.am:
+       * tests/check/.gitignore:
+       * tests/check/Makefile.am:
+       * tests/check/elements/.gitignore:
+       * tests/check/generic/.gitignore:
+       * tests/files/Makefile.am:
+         Remove autotools build system
+
+2019-09-02 09:33:15 -0400  Aaron Boxer <aaron.boxer@collabora.com>
+
+       * NEWS:
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/x264/gstx264enc.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/dvdsub/gstdvdsubdec.c:
+       * gst/realmedia/rdtjitterbuffer.c:
+       * gst/realmedia/rtspreal.c:
+       * hooks/pre-commit.hook:
+         documentation: fix some typos
+
+2019-08-23 19:06:59 +0200  Mathieu Duponchelle <mathieu@centricular.com>
+
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbenc.c:
+       * ext/amrwbdec/amrwbdec.c:
+         docstrings: port ulinks to markdown links
+
+2019-08-23 16:25:25 +1000  Matthew Waters <matthew@centricular.com>
+
+       * docs/meson.build:
+         meson: Don't generate doc cache when no plugins are enabled
+         Fixes gst-build with -Dauto-features=disabled -Dugly=enabled
+
+2019-07-15 21:56:57 +0900  Seungha Yang <seungha.yang@navercorp.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Port to color_{primaries,transfer,matrix}_to_iso
+         ... with more color value mapping
+
+2019-07-15 22:38:35 +0900  Seungha Yang <seungha.yang@navercorp.com>
+
+       * tests/check/elements/x264enc.c:
+       * tests/check/meson.build:
+         tests: x264enc: Enable test on Windows
+         ... with removal of pointless unistd.h dependency.
+         Note that full dependency listing is required to run unit test
+         executable binary on Windows uninstalled environment.
+
+2019-05-31 23:07:58 +0200  Niels De Graef <niels.degraef@barco.com>
+
+       * configure.ac:
+       * meson.build:
+         meson: Bump minimal GLib version to 2.44
+         This means we can use some newer features and get rid of some
+         boilerplate code using the G_DECLARE_* macros.
+         As discussed on IRC, 2.44 is old enough by now to start depending on it.
+
+2019-05-29 23:00:48 +0200  Mathieu Duponchelle <mathieu@centricular.com>
+
+       * ext/sidplay/gstsiddec.cc:
+         doc: remove xml from comments
+
+2019-05-25 14:19:54 +0200  Tim-Philipp Müller <tim@centricular.com>
+
+       * gst/asfdemux/asfheaders.h:
+         asfdemux: remove some unused cruft in internal headers
+
+2019-05-16 09:15:52 -0400  Thibault Saunier <tsaunier@igalia.com>
+
+       * docs/gst_plugins_cache.json:
+       * docs/meson.build:
+         docs: Stop building the doc cache by default
+         And update the cache
+         Fixes https://gitlab.freedesktop.org/gstreamer/gst-docs/issues/36
+
+2019-05-13 22:54:16 -0400  Thibault Saunier <tsaunier@igalia.com>
+
+       * docs/gst_plugins_cache.json:
+         docs: Update plugins documentation cache
+
+2018-10-22 11:47:37 +0200  Thibault Saunier <tsaunier@igalia.com>
+
+       * Makefile.am:
+       * configure.ac:
+       * docs/Makefile.am:
+       * docs/all_index.md:
+       * docs/gst_api_version.in:
+       * docs/gst_plugins_cache.json:
+       * docs/index.md:
+       * docs/meson.build:
+       * docs/plugins/.gitignore:
+       * docs/plugins/Makefile.am:
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+       * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
+       * docs/plugins/gst-plugins-ugly-plugins.signals:
+       * docs/plugins/gst-plugins-ugly-plugins.types:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-sid.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * docs/sitemap.txt:
+       * ext/a52dec/meson.build:
+       * ext/amrnb/meson.build:
+       * ext/amrwbdec/meson.build:
+       * ext/cdio/meson.build:
+       * ext/dvdread/meson.build:
+       * ext/mpeg2dec/meson.build:
+       * ext/sidplay/meson.build:
+       * ext/x264/meson.build:
+       * gst/asfdemux/gstasfdemux.h:
+       * gst/asfdemux/meson.build:
+       * gst/dvdlpcmdec/meson.build:
+       * gst/dvdsub/meson.build:
+       * gst/realmedia/meson.build:
+       * gst/xingmux/meson.build:
+       * meson.build:
+       * meson_options.txt:
+         docs: Port documentation to hotdoc
+
+2018-10-22 11:47:32 +0200  Thibault Saunier <tsaunier@igalia.com>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbenc.c:
+       * ext/amrwbdec/amrwbdec.c:
+       * ext/cdio/gstcdiocddasrc.c:
+       * ext/x264/gstx264enc.c:
+       * gst/asfdemux/gstasfdemux.h:
+       * gst/asfdemux/gstrtspwms.c:
+       * gst/realmedia/gstrdtbuffer.h:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rdtmanager.c:
+       * gst/realmedia/rtspreal.c:
+       * gst/xingmux/gstxingmux.c:
+         docs: Port all docstring to gtk-doc markdown
+
+2019-04-26 18:28:04 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/sidplay/meson.build:
+         meson: sidplay: use library() instead of shared_module()
+         Like we do for other plugins, and also install a .pc file
+         if we build the plugin statically.
+
+2019-04-22 12:51:33 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * ext/dvdread/meson.build:
+       * meson.build:
+         meson: Always require the gmodule dependency
+         It's needed by the dvdread plugin but also by the x264 plugin in certain
+         circumstances. As it's part of GLib and always available, simply move it
+         as a hard dependency to the top-level meson.build.
+
+2019-04-19 10:28:17 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * README:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-sid.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * meson.build:
+         Back to development
+
+=== release 1.16.0 ===
+
+2019-04-19 00:24:40 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * README:
+       * RELEASE:
+       * configure.ac:
+       * gst-plugins-ugly.doap:
+       * meson.build:
+         Release 1.16.0
+
+2019-04-19 00:24:40 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-sid.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+         Update docs
+
+2019-04-19 00:24:38 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * po/id.po:
+       * po/sv.po:
+         Update translations
+
+=== release 1.15.90 ===
+
+2019-04-11 00:28:18 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * gst-plugins-ugly.doap:
+       * meson.build:
+         Release 1.15.90
+
+2019-04-11 00:28:18 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-sid.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+         Update docs
+
+2019-03-27 21:59:45 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+       * ext/x264/meson.build:
+         meson: Add a subproject fallback for x264
+
+2019-03-10 19:33:31 +0000  Piotr Drąg <piotrdrag@gmail.com>
+
+       * po/LINGUAS:
+         Update LINGUAS
+
+2019-03-21 11:23:07 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+         meson: add -Wno-unused also to C++ args when gst debug system is disabled
+
+2019-03-04 09:08:07 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-sid.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * meson.build:
+         Back to development
+
+2019-02-28 11:03:31 +0100  Mathieu Duponchelle <mathieu@centricular.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: inject CEA708 closed captions
+
+=== release 1.15.2 ===
+
+2019-02-26 11:48:50 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * gst-plugins-ugly.doap:
+       * meson.build:
+         Release 1.15.2
+
+2019-02-26 11:48:50 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-sid.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+         Update docs
+
+2019-02-26 11:48:47 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/fur.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/ta.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update translations
+
+2019-02-22 23:54:30 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/sidplay/gstsiddec.cc:
+         sidplay: fix indentation
+
+2019-02-12 17:58:19 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdreadsrc: Work around GCC9 compiler warning
+         It's technically true but not for this specific type.
+         dvdreadsrc.c:394:65: error: taking address of packed member of ‘struct <anonymous>’ may result in an unaligned pointer value [-Werror=address-of-packed-member]
+         394 |       gst_dvd_read_src_make_clut_change_event (src, src->cur_pgc->palette);
+         |                                                     ~~~~~~~~~~~~^~~~~~~~~
+
+2019-01-30 19:50:30 +0900  Seungha Yang <seungha.yang@navercorp.com>
+
+       * meson.build:
+         meson: Add support orc fallback
+         Allow fallback to orc subproject if any.
+
+2019-01-25 14:38:05 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * ext/x264/gstx264enc.c:
+         x264: Only enable dynamic loading code for x264 < 253
+         Otherwise we get some compiler warnings:
+         ../subprojects/gst-plugins-ugly/ext/x264/gstx264enc.c:200:1: warning: ‘unload_x264’ defined but not used [-Wunused-function]
+         unload_x264 (GstX264EncVTable * vtable)
+         ^~~~~~~~~~~
+         ../subprojects/gst-plugins-ugly/ext/x264/gstx264enc.c:154:1: warning: ‘load_x264’ defined but not used [-Wunused-function]
+         load_x264 (const gchar * filename)
+         ^~~~~~~~~
+
+2019-01-25 14:36:55 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * ext/x264/meson.build:
+         x264: Link to gmodule in the meson build if extra x264 libraries are provided
+         We would dynamically load additional x264 libraries then.
+
+2019-01-17 17:29:38 +0200  Helmut Grohne <helmut@subdivi.de>
+
+       * m4/gst-sid.m4:
+         sid: Fix cross-compilation by using AC_TRY_LINK instead of AC_TRY_RUN
+         https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=917899
+
+=== release 1.15.1 ===
+
+2019-01-17 02:02:30 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * gst-plugins-ugly.doap:
+       * meson.build:
+         Release 1.15.1
+
+2019-01-17 02:02:30 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-sid.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+         Update docs
+
+2019-01-17 02:02:22 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * po/af.po:
+       * po/ast.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/fur.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update translations
+
+2018-12-30 22:48:42 +0900  Seungha Yang <seungha.yang@navercorp.com>
+
+       * tests/check/generic/states.c:
+       * tests/check/meson.build:
+         tests: Enable test generic_states on Windows
+         ... and drop needless unistd.h dependency
+
+2018-12-18 22:48:42 +0900  Seungha Yang <seungha.yang@navercorp.com>
+
+       * meson.build:
+       * tests/check/meson.build:
+         meson: Use join_paths() instead '/'
+
+2018-12-07 23:39:01 +0900  Seungha Yang <seungha.yang@navercorp.com>
+
+       * meson.build:
+       * tests/check/meson.build:
+       * tests/meson.build:
+         tests: Enable unit test on Windows
+         Remove hard-coded ':' whitelist separator since it varies with OS
+
+2018-12-05 17:24:25 -0300  Thibault Saunier <tsaunier@igalia.com>
+
+       * common:
+         Automatic update of common submodule
+         From ed78bee to 59cb678
+
+2018-11-24 19:28:19 +0900  Seungha Yang <seungha.yang@navercorp.com>
+
+       * meson.build:
+         meson: Specify encoding to UTF-8 when building with MSVC
+         Use build arguments consistent with core and -base. This can also
+         remove noisy "C4819" warning of non-us locale MSVC.
+
+2018-11-12 13:30:59 +0200  Jordan Petridis <jordan@centricular.com>
+
+       * .gitlab-ci.yml:
+         Add Gitlab CI configuration
+         This commit adds a .gitlab-ci.yml file, which uses a feature
+         to fetch the config from a centralized repository. The intent is
+         to have all the gstreamer modules use the same configuration.
+         The configuration is currently hosted at the gst-ci repository
+         under the gitlab/ci_template.yml path.
+         Part of https://gitlab.freedesktop.org/gstreamer/gstreamer-project/issues/29
+
+2018-11-05 05:38:33 +0000  Matthew Waters <matthew@centricular.com>
+
+       * .gitmodules:
+         Update common submodule location
+         Remove the git directory
+
+2018-11-05 12:52:46 +0800  Haihao Xiang <haihao.xiang@intel.com>
+
+       * .gitmodules:
+       * gst-plugins-ugly.doap:
+         Clone the code from gitlab
+         This fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/issues/22
+
+2018-10-08 20:45:52 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+         meson: use new 'python' module instead of deprecated
+         https://github.com/mesonbuild/meson/pull/4169
+
+2018-09-22 17:33:35 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * tests/check/elements/x264enc.c:
+         tests: x264enc: fix leak in unit test
+         The static pad templates weren't static so their
+         contents were leaked. valgrind was not happy.
+         Also rename confusing define.
+
+2018-09-18 21:43:14 +0900  Seungha Yang <seungha.yang@navercorp.com>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264enc: Avoid format decision per frame
+         Avoid switch/case per frame for format decision and detect the format
+         only if where it could be changed. Note that, whenever encoder->input_state
+         is changed, gst_x264_enc_init_encoder() is called.
+         https://bugzilla.gnome.org/show_bug.cgi?id=797164
+
+2018-09-19 12:00:32 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+       * meson_options.txt:
+         meson: add glib-checks option to disable API guards and such
+         We want this enabled by default, also in releases, but people
+         may want to disable this for performance-critical workloads or
+         on embedded devices.
+
+2018-09-19 11:58:54 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson_options.txt:
+         meson: fix missing closing bracket in option descriptions
+
+2018-08-18 21:22:42 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+       * meson_options.txt:
+       * tests/meson.build:
+         meson: add option to disable tests
+
+2018-08-18 21:20:20 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+         meson: clean up some cruft
+
+2018-08-18 21:15:23 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+       * meson_options.txt:
+         meson: add options to disable gobject cast checks and glib asserts
+         ... and define G_DISABLE_DEPRECATED for development versions,
+         like we do in autotools.
+
+2018-08-16 13:17:58 +0200  Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Set bit depth for x264 ≥ 153
+         https://bugzilla.gnome.org/show_bug.cgi?id=796975
+
+2018-08-16 14:55:04 +0200  Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Remove superfluous x264_param_default
+         https://bugzilla.gnome.org/show_bug.cgi?id=796973
+
+2018-07-27 19:29:01 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+       * ext/a52dec/meson.build:
+       * ext/amrnb/meson.build:
+       * ext/amrwbdec/meson.build:
+       * ext/cdio/meson.build:
+       * ext/dvdread/meson.build:
+       * ext/mpeg2dec/meson.build:
+       * ext/sidplay/meson.build:
+       * ext/x264/meson.build:
+       * gst/meson.build:
+       * meson.build:
+       * meson_options.txt:
+         Add feature options for all plugins
+         The only automagic dependency left is C++ availability detection.
+         https://bugzilla.gnome.org/show_bug.cgi?id=795107
+
+2018-07-25 17:17:21 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+       * meson.build:
+       * meson_options.txt:
+         meson: Convert common options to feature options
+         The rest will be converted later, these are necessary for gst-build to
+         set options correctly.
+         https://bugzilla.gnome.org/show_bug.cgi?id=795107
+
+2018-06-11 14:43:20 +0200  Edward Hervey <edward@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Remove 0.10 code
+         This was used to "close" a segment. It's no longer needed anymore
+         in 1.x (it was essentially sending the same thing again)
+
+2018-05-11 09:21:09 +0200  Edward Hervey <edward@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Only send flush event on seeking flushes
+         And not on all the time
+
+2018-05-21 11:54:50 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+       * meson_options.txt:
+         meson: add 'nls' option to disable translations
+         And enable by default. Was implicitly disabled because
+         ENABLE_NLS was not defined. Also use .set_quoted().
+
+2018-05-05 19:32:00 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+       * meson.build:
+       * meson_options.txt:
+         meson: Update option names to omit disable_ and with- prefixes
+         Also yield common options to the outer project (gst-build in our case)
+         so that they don't have to be set manually.
+
+2018-05-04 22:54:01 +1000  Jan Schmidt <jan@centricular.com>
+
+       * gst/dvdsub/gstdvdsubdec.c:
+         dvdsubdec: Take the highlight event from the structure.
+         Don't use GST_EVENT_TIMESTAMP to transfer any PTS
+         associated with a highlight event, instead store
+         it in the event structure directly, as
+         GstEvent::timestamp will disappear in GStreamer 2.0
+         https://bugzilla.gnome.org/show_bug.cgi?id=761477
+
+2018-04-24 14:06:20 -0400  Xavier Claessens <xavier.claessens@collabora.com>
+
+       * ext/a52dec/meson.build:
+       * ext/amrnb/meson.build:
+       * ext/amrwbdec/meson.build:
+       * ext/cdio/meson.build:
+       * ext/dvdread/meson.build:
+       * ext/mpeg2dec/meson.build:
+       * ext/x264/meson.build:
+       * gst/asfdemux/meson.build:
+       * gst/dvdlpcmdec/meson.build:
+       * gst/dvdsub/meson.build:
+       * gst/realmedia/meson.build:
+       * gst/xingmux/meson.build:
+       * meson.build:
+         Meson: Generate pc file for all plugins in ugly
+         https://bugzilla.gnome.org/show_bug.cgi?id=794568
+
+2018-04-25 10:59:11 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+         meson: use -Wl,-Bsymbolic-functions where supported
+         Just like the autotools build.
+
+2018-04-16 20:13:05 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Set the stream-format field of H264 streams
+         If we have codec_data it will be AVC, otherwise assume byte-stream.
+
+2018-04-16 10:53:12 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * README:
+       * common:
+         Automatic update of common submodule
+         From 3fa2c9e to ed78bee
+
+2018-03-20 09:26:15 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-sid.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * meson.build:
+         Back to development
+
+=== release 1.14.0 ===
+
+2018-03-19 20:19:43 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * gst-plugins-ugly.doap:
+       * meson.build:
+         Release 1.14.0
+
+2018-03-19 20:19:43 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-sid.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+         Update docs
+
+=== release 1.13.91 ===
+
+2018-03-13 19:17:58 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * gst-plugins-ugly.doap:
+       * meson.build:
+         Release 1.13.91
+
+2018-03-13 19:17:58 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-sid.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+         Update docs
+
+2018-03-12 20:19:19 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+         docs: plugins: minor addition to plugins list
+
+2018-03-08 10:12:16 +0100  Michael Tretter <m.tretter@pengutronix.de>
+
+       * configure.ac:
+         configure.ac: enable largefile support if possible
+         https://bugzilla.gnome.org/show_bug.cgi?id=793103
+
+=== release 1.13.90 ===
+
+2018-03-03 22:24:28 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * gst-plugins-ugly.doap:
+       * meson.build:
+         Release 1.13.90
+
+2018-03-03 22:24:28 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-sid.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+         Update docs
+
+2018-03-01 19:07:42 +0100  Mathieu Duponchelle <mathieu@centricular.com>
+
+       * meson.build:
+       * tests/check/meson.build:
+         meson: enable more warnings
+
+2018-02-28 10:07:13 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: fix build with newer x264 with support for multiple bit depths
+         libx264 used to be built for one specific bit depth, and if we
+         wanted to support multiple bit depths we would have to dynamically
+         load the right .so from different paths. That has changed now, and
+         libx264 can include support for multiple depths in the same lib,
+         so we don't need to do the dlopen() dance any more. We'll keep
+         the vtable stuff around until we can drop support for older x264.
+         gstx264enc.c:2927:36: error: ‘x264_bit_depth’ undeclared
+         https://bugzilla.gnome.org/show_bug.cgi?id=792111
+
+2018-02-27 15:42:32 +0100  Alicia Boya García <aboya@igalia.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Add format example for option-string
+         https://bugzilla.gnome.org/show_bug.cgi?id=793879
+
+2018-02-21 19:47:36 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+         meson: simplify GST_DISABLE_GST_DEBUG check and don't use add_global_*
+         add_global_arguments() can't be used in subprojects. It's
+         entirely possible that -ugly is a subproject but gstreamer
+         is picked up from an installed location, so we should
+         really use add_project_arguments() in both cases.
+
+2018-02-15 19:44:21 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-sid.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * meson.build:
+         Back to development
+
+=== release 1.13.1 ===
+
+2018-02-15 17:10:13 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * NEWS:
+       * configure.ac:
+       * gst-plugins-ugly.doap:
+       * meson.build:
+         Release 1.13.1
+
+2018-02-15 17:07:42 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-sid.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+         docs: update plugin docs
+
+2018-02-15 14:52:29 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * po/id.po:
+       * po/it.po:
+       * po/nl.po:
+       * po/sv.po:
+         po: update translations
+
+2018-02-08 19:09:45 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+         meson: make version numbers ints and fix int/string comparison
+         WARNING: Trying to compare values of different types (str, int).
+         The result of this is undefined and will become a hard error
+         in a future Meson release.
+
+2018-02-04 12:03:36 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * configure.ac:
+         autotools: use -fno-strict-aliasing where supported
+         https://bugzilla.gnome.org/show_bug.cgi?id=769183
+
+2018-01-30 20:34:52 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/sidplay/meson.build:
+       * meson.build:
+         meson: use -fno-strict-aliasing where supported
+         https://bugzilla.gnome.org/show_bug.cgi?id=769183
+
+2018-01-03 16:02:08 +0100  Edward Hervey <edward@centricular.com>
+
+       * ext/amrnb/amrnbdec.c:
+         amrnbdec: Don't use g_return_*_if_fail() on data parsing
+         Those functions can be disabled. Instead just use the (existing)
+         function.
+         CID #1427121
+
+2018-01-03 16:02:08 +0100  Edward Hervey <edward@centricular.com>
+
+       * ext/amrwbdec/amrwbdec.c:
+         amrwbdec: Don't use g_return_*_if_fail() on data parsing
+         Those functions can be disabled. Instead just use the (existing)
+         function.
+         CID #1427093
+
+2017-12-26 13:51:37 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+         meson: skip translations if gettext is not available
+
+2017-12-14 14:49:17 +1100  Matthew Waters <matthew@centricular.com>
+
+       * common:
+         Automatic update of common submodule
+         From e8c7a71 to 3fa2c9e
+
+2017-12-07 15:52:58 +0900  Justin Kim <justin.kim@collabora.com>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264enc: add 'insert-vui' property for users to choose
+         VUI(Video Usability Information) parameters should be set
+         according to the specification. However, some of the existing
+         hardware decoders refuse to decode in certain combinations of
+         the resolution and VUI parameters. To support the legacy
+         decoders, this patch provides 'insert-vui' to skip the settings.
+         https://bugzilla.gnome.org/show_bug.cgi?id=791331
+
+2017-12-06 13:01:39 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * ext/cdio/gstcdio.c:
+       * ext/cdio/gstcdio.h:
+       * ext/cdio/gstcdiocddasrc.c:
+         cdio: Fix build with cdio >= 1.0
+         LIBCDIO_VERSION_NUM was defined as e.g. 94 for 0.94 but is now defined
+         as 1 for 1.0. We had various checks for < 83, which of course succeeded
+         now although we are >= 0.83.
+         Fix this by checking for < 76 (0.76) too, as that is the minimum version
+         we currently support and everything < 76 is going to be >= 1.0.
+         https://bugzilla.gnome.org/show_bug.cgi?id=791301
+
+2017-11-27 20:11:56 +1100  Matthew Waters <matthew@centricular.com>
+
+       * common:
+         Automatic update of common submodule
+         From 3f4aa96 to e8c7a71
+
+2017-11-26 15:05:14 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * configure.ac:
+         configure: actually use -fvisibility if supported
+         Fix up for previous commit.
+
+2017-11-26 14:49:21 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * configure.ac:
+         autotools: stop controlling symbol visibility with -export-symbols-regex
+         Instead, use -fvisibility=hidden and explicit exports via GST_EXPORT.
+         This should result in consistent behaviour for the autotools and
+         Meson builds.
+
+2017-11-13 11:13:30 +0100  Edward Hervey <edward@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Fix prerolling files with "empty" streams
+         This is a regression that was introduced by
+         commit 1803b3c18530cb0100d140c2b8e49a8dfe41f941
+         "    asfdemux: Add support for dvr-ms"
+         The problem is that some files/streams might contain stream definition
+         but there is no actual packets for those streams.
+         This was used to "define" streams with different bitrates for example.
+         The first_ts calculation resulted in never ever finding a valid first_ts
+         since some streams were empty, and therefore never "activating" itself.
+         Instead of that we first check if we are prerolled. And if we are we
+         unconditionally get the "first_ts"
+         The preroll check has been adapted to check whether streams of
+         each defined type (i.e. audio/video/sub) has been prerolled. This solves
+         the problem of having different streams of a particular type where only
+         one stream actually has data.
+
+2017-11-13 11:09:31 +0100  Edward Hervey <edward@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Store the stream type in streams
+         The field was present but never set :)
+
+2017-09-26 10:11:24 +0530  Ponnam Srinivas <p.srinivas@samsung.com>
+
+       * ext/a52dec/gsta52dec.c:
+         a52dec: Fix out buffer memory leak in error code path
+         https://bugzilla.gnome.org/show_bug.cgi?id=788119
+
+2017-09-15 17:06:58 +0530  Deepak Srivastava <srivastava.d@samsung.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Fix buffer memory leak in error code path
+         https://bugzilla.gnome.org/show_bug.cgi?id=787817
+
+2017-09-07 13:27:26 +0530  Satya Prakash Gupta <sp.gupta@samsung.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Unmap output video frame if copying to it fails
+         https://bugzilla.gnome.org/show_bug.cgi?id=787398
+
+2017-08-31 11:33:14 +0530  Satya Prakash Gupta <sp.gupta@samsung.com>
+
+       * gst/realmedia/asmrules.c:
+         realmedia: fix leak in asmrules error code path
+         https://bugzilla.gnome.org/show_bug.cgi?id=787056
+
+2017-08-30 18:41:28 +0530  Satya Prakash Gupta <sp.gupta@samsung.com>
+
+       * gst/realmedia/rtspreal.c:
+         realmedia: Fix Memory leak in error case
+         https://bugzilla.gnome.org/show_bug.cgi?id=787014
+
+2017-08-26 13:02:26 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * tests/files/Makefile.am:
+       * tests/files/cbr_stream.mp3:
+       * tests/files/stream.mp2:
+       * tests/files/vbr_stream.mp3:
+         tests: remove files that were used by the mpg123 unit test
+
+2017-08-26 09:35:20 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * Makefile.am:
+       * REQUIREMENTS:
+       * configure.ac:
+       * docs/plugins/Makefile.am:
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * ext/Makefile.am:
+       * ext/meson.build:
+       * ext/twolame/Makefile.am:
+       * ext/twolame/gsttwolamemp2enc.c:
+       * ext/twolame/gsttwolamemp2enc.h:
+       * ext/twolame/meson.build:
+       * po/POTFILES.in:
+         Remove twolame plugin, moved to -good
+         https://bugzilla.gnome.org/show_bug.cgi?id=774252
+
+2017-08-26 08:51:01 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * Makefile.am:
+       * REQUIREMENTS:
+       * configure.ac:
+       * docs/plugins/Makefile.am:
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * ext/Makefile.am:
+       * ext/lame/Makefile.am:
+       * ext/lame/gstlamemp3enc.c:
+       * ext/lame/gstlamemp3enc.h:
+       * ext/lame/meson.build:
+       * ext/lame/plugin.c:
+       * ext/meson.build:
+       * m4/Makefile.am:
+       * m4/as-liblame.m4:
+       * po/POTFILES.in:
+       * tests/check/Makefile.am:
+       * tests/check/gst-plugins-ugly.supp:
+       * tests/check/meson.build:
+       * tests/check/pipelines/.gitignore:
+       * tests/check/pipelines/lame.c:
+         Remove lame plugin, moved to -good
+         https://bugzilla.gnome.org/show_bug.cgi?id=774252
+
+2017-08-20 14:31:02 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * Makefile.am:
+       * REQUIREMENTS:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/inspect/plugin-mpg123.xml:
+       * ext/Makefile.am:
+       * ext/meson.build:
+       * ext/mpg123/Makefile.am:
+       * ext/mpg123/gstmpg123audiodec.c:
+       * ext/mpg123/gstmpg123audiodec.h:
+       * ext/mpg123/meson.build:
+       * tests/check/Makefile.am:
+       * tests/check/elements/.gitignore:
+       * tests/check/elements/mpg123audiodec.c:
+       * tests/check/meson.build:
+         Remove mpg123 plugin, moved to -good
+         https://bugzilla.gnome.org/show_bug.cgi?id=774252
+
+2017-08-17 12:23:43 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * README:
+       * common:
+         Automatic update of common submodule
+         From 48a5d85 to 3f4aa96
+
+2017-08-10 15:48:27 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/sidplay/meson.build:
+         sidplay: hide symbols in meson for this c++ plugin too
+         Keep things local, as this is the only c++ plugin
+         in ugly currently.
+
+2017-08-10 11:55:58 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+         meson: don't export symbols by default
+         Only plugin entry points should be exported.
+         Currently plugins might export more symbols with
+         the meson build, as we don't have the exports
+         regexp there that we pass to libtool.
+
+2017-08-09 19:31:56 +0200  Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: add FIXME note for future configuration cleanup
+
+2017-07-25 13:36:17 +0530  Satya Prakash Gupta <sp.gupta@samsung.com>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdreadsrc: Fix string memory leak
+         https://bugzilla.gnome.org/show_bug.cgi?id=785388
+
+2017-07-15 15:01:09 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: fix indentation
+
+2017-07-15 14:59:42 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: fix caps leak
+         Move creation of supported sink pads into class_init function
+         which is also the only place where they're used. Unref the
+         caps when no longer needed, the pad template will take its
+         own ref.
+         https://bugzilla.gnome.org/show_bug.cgi?id=784982
+
+2017-07-15 14:57:49 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/mpg123/gstmpg123audiodec.c:
+         mpg123audiodec: fix caps leak
+         The pad template takes its own ref, so we should unref the caps.
+         https://bugzilla.gnome.org/show_bug.cgi?id=784982
+
+2017-07-15 12:49:19 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * po/meson.build:
+         meson: po: use glib preset and read language list from LINGUAS
+         Supported since meson 0.37, so we can use it now.
+
+2017-07-11 14:21:41 +0300  Vivia Nikolaidou <vivia@ahiru.eu>
+
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+         dvdlpmdec: Fix overrun from coverity
+         CID #1414801
+
+2017-07-07 11:58:36 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+         meson: find python3 via python3 module
+         https://bugzilla.gnome.org/show_bug.cgi?id=783198
+
+2017-07-05 18:58:35 +0300  Vivia Nikolaidou <vivia@ahiru.eu>
+
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+         dvdlpcmdec: Added support for Blu-Ray audio
+         https://bugzilla.gnome.org/show_bug.cgi?id=784552
+
+2017-06-27 11:48:08 +0200  Edward Hervey <edward@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: More index handling
+         In the same vein as the previous commit, the end of the file might have been
+         cut and therefore contains bogus data.
+         If the object is too short, consider it as garbage and return a non-fatal
+         flow.
+         Regression introduced in 97294eb8bbed1b9dad7d3f2c52dd69eb1812cc06
+
+2017-06-27 10:25:42 +0200  Edward Hervey <edward@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux; Don't assume index is present at end of file
+         Some files have garbage at the end of the file, don't error out if we don't
+         find the index there.
+         Reverts back to previous behaviour (where corrupted/missing indexex were
+         not a fatal error).
+         Regression introduced in 97294eb8bbed1b9dad7d3f2c52dd69eb1812cc06
+
+2017-06-26 09:49:22 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+         meson: fix with-package-name option
+         https://bugzilla.gnome.org/show_bug.cgi?id=784082
+
+2017-06-14 21:08:31 +0200  Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: adjust segment start to a keyframe ts only for a KEYUNIT seek
+         ... which is how it has always been until changed coincidentally in commit
+         9ee60482b265481d0e3b397044f560eb736e5429 which then prompted commit
+         dba14178ce6115b406ef86e356b1201463af5e2a to consider ACCURATE as well
+         to compensate for that in a lateral way
+
+2017-06-14 20:56:16 +0200  Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: relax bframes upper limit count to maximum encoder supported
+
+2017-06-23 23:44:18 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/sidplay/meson.build:
+         meson: don't error out if sidplay library is not found
+
+2017-06-23 18:33:24 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/meson.build:
+       * ext/sidplay/meson.build:
+         meson: build sid plugin
+         https://bugzilla.gnome.org/show_bug.cgi?id=784135
+
+2017-06-21 21:23:29 +0200  Víctor Manuel Jáquez Leal <vjaquez@igalia.com>
+
+       * ext/x264/gstx264enc.c:
+         x264: fix memory leak
+         When the allowed caps are the same of template caps the allowed
+         caps are not unrefed, leaking memory.
+         https://bugzilla.gnome.org/show_bug.cgi?id=784060
+
+2017-06-07 12:08:43 -0400  Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+       * tests/check/meson.build:
+         meson: Do not use path separator in test names
+         Avoiding warnings like:
+         WARNING: Target "elements/audioamplify" has a path separator in its name.
+
+2017-06-06 21:48:19 -0700  Thiago Santos <thiagossantos@gmail.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: fix checking for header objects
+         The if 'and' condition was mixed up with the last parameter of the
+         function and would lead to wrong results
+
+2017-05-21 17:49:59 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * Makefile.am:
+       * config.h.meson:
+       * meson.build:
+         meson: don't need config.h.meson any longer
+
+2017-05-20 14:58:37 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+       * meson_options.txt:
+         meson: add options to set package name and origin
+         https://bugzilla.gnome.org/show_bug.cgi?id=782172
+
+2017-05-19 20:05:02 +0200  Jan Schmidt <jan@centricular.com>
+
+       * tests/check/meson.build:
+         Add gstvideo_dep for meson mpeg2dec test build
+
+2017-05-19 18:59:17 +0200  Jan Schmidt <jan@centricular.com>
+
+       * tests/check/Makefile.am:
+       * tests/check/elements/mpeg2dec.c:
+         mpeg2dec test: Fix expected output caps
+         In the absence of explicit info, video decoders
+         now output mono multiview caps by default, so make
+         the expected caps match that
+
+2017-05-16 14:07:56 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * config.h.meson:
+       * configure.ac:
+       * ext/a52dec/Makefile.am:
+       * ext/amrnb/Makefile.am:
+       * ext/amrwbdec/Makefile.am:
+       * ext/cdio/Makefile.am:
+       * ext/dvdread/Makefile.am:
+       * ext/lame/Makefile.am:
+       * ext/mpeg2dec/Makefile.am:
+       * ext/mpg123/Makefile.am:
+       * ext/sidplay/Makefile.am:
+       * ext/twolame/Makefile.am:
+       * ext/x264/Makefile.am:
+       * gst/asfdemux/Makefile.am:
+       * gst/dvdlpcmdec/Makefile.am:
+       * gst/dvdsub/Makefile.am:
+       * gst/realmedia/Makefile.am:
+       * gst/xingmux/Makefile.am:
+         Remove plugin specific static build option
+         Static and dynamic plugins now have the same interface. The standard
+         --enable-static/--enable-shared toggle are sufficient.
+
+2017-05-09 09:45:27 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * ext/sidplay/gstsiddec.cc:
+         sid: Make plugin name match plugin file name
+
+2017-05-04 18:59:14 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * configure.ac:
+       * meson.build:
+         Back to development
+
+=== release 1.12.0 ===
+
+2017-05-04 15:39:25 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpg123.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * meson.build:
+         Release 1.12.0
+
+2017-05-04 15:12:50 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/fur.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2017-05-04 13:47:56 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/id.po:
+       * po/sv.po:
+         po: Update translations
+
+=== release 1.11.91 ===
+
+2017-04-27 17:33:23 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpg123.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * meson.build:
+         Release 1.11.91
+
+2017-04-27 16:08:13 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/fur.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2017-04-27 15:29:48 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/LINGUAS:
+       * po/fur.po:
+       * po/id.po:
+       * po/sv.po:
+         po: Update translations
+
+2017-04-27 12:42:34 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+       * ext/x264/gstx264enc.h:
+         x264: Use __declspec(dllimport) with MinGW too
+         x264.h says this isn't needed with MinGW, but it looks like it is.
+         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=779249
+
+2017-04-24 20:28:15 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * common:
+         Automatic update of common submodule
+         From 60aeef6 to 48a5d85
+
+2017-04-10 23:49:25 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * autogen.sh:
+       * common:
+         Automatic update of common submodule
+         From 39ac2f5 to 60aeef6
+
+=== release 1.11.90 ===
+
+2017-04-07 16:34:22 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpg123.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * meson.build:
+         Release 1.11.90
+
+2017-04-07 15:33:31 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2017-04-07 15:07:50 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/id.po:
+       * po/sv.po:
+         po: Update translations
+
+2017-03-28 14:18:38 -0300  Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+       * tests/check/meson.build:
+         meson: test: Fix environment object usage
+         And use get_pkgconfig_variable instead of calling pkg-config ourself
+
+2017-03-20 17:06:16 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * REQUIREMENTS:
+         REQUIREMENTS: update for mad mp3 decoder removal
+         https://bugzilla.gnome.org/show_bug.cgi?id=776140
+
+2017-03-12 11:57:23 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * Makefile.am:
+         Add libgstrmdemux.so to cruft list
+         This was renamed to libgstrealmedia.so, this fixes helps fixing
+         uninstalled setup.
+         https://bugzilla.gnome.org/show_bug.cgi?id=779344
+
+2017-03-04 11:09:33 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * gst/realmedia/Makefile.am:
+       * gst/realmedia/meson.build:
+         Rename plugin filenames to match plugin names
+         libgstrmdemux.so becomes libgstrealmedia.so
+         https://bugzilla.gnome.org/show_bug.cgi?id=779344
+
+2017-03-01 23:00:55 +1100  Jan Schmidt <jan@centricular.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Fix latency calculation
+         The latency calculation was missing a scaling by GST_SECOND,
+         so it would always report a tiny latency. Fix that.
+         Spotted by Guillaume Desmottes.
+
+2017-02-27 20:55:34 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Fix compilation with gcc 7
+         gstasfdemux.c: In function 'gst_asf_demux_parse_stream_object':
+         gstasfdemux.c:3001:39: error: '<<' in boolean context, did you mean '<' ? [-Werror=int-in-bool-context]
+         is_encrypted = ! !((flags & 0x8000) << 15);
+         ~~~~~~~~~~~~~~~~~~^~~~~~
+         https://bugzilla.gnome.org/show_bug.cgi?id=779329
+
+2017-02-25 21:48:46 -0300  Edgard Lima <edgard.lima@gmail.com>
+
+       * ext/amrwbdec/amrwb.c:
+       * ext/amrwbdec/amrwbdec.h:
+         Update Edgard Lima's email
+         https://bugzilla.gnome.org/show_bug.cgi?id=779230
+
+2017-02-24 15:59:47 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * meson.build:
+         meson: Update version
+
+2017-02-24 15:37:43 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * configure.ac:
+         Back to development
+
+=== release 1.11.2 ===
+
+2017-02-24 15:07:54 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpg123.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+         Release 1.11.2
+
+2017-02-24 12:57:00 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2017-02-24 12:45:43 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/id.po:
+       * po/sv.po:
+         po: Update translations
+
+2017-02-14 19:56:13 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * Makefile.am:
+         meson: dist meson build files
+         Ship meson build files in tarballs, so people who use tarballs
+         in their builds can start playing with meson already.
+
+2017-02-01 03:08:10 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+       * ext/x264/gstx264enc.c:
+         x264: Initialize function vtable in plugin_init()
+         These values are defined in the x264.h header and are not const on
+         Windows due to the way DLLs work. See:
+         https://msdn.microsoft.com/en-us/library/619w14ds.aspx
+         https://msdn.microsoft.com/en-us/library/zw3za17w.aspx
+         https://bugzilla.gnome.org/show_bug.cgi?id=777903
+
+2017-01-31 13:50:21 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Check that we have enough data available before parsing bool/uint extended content descriptors
+         https://bugzilla.gnome.org/show_bug.cgi?id=777955
+
+2017-01-30 15:39:59 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Reset number of languages to 0 when freeing the array because of errors
+         Otherwise we will happily index into the array at NULL if the requested
+         index is smaller than the number of languages that were previously
+         allocated.
+         https://bugzilla.gnome.org/show_bug.cgi?id=777937
+
+2017-01-24 19:24:10 -0300  Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+       * tests/check/meson.build:
+         meson: Properly use ':' for defining keywords
+
+2017-01-13 12:39:09 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+         meson: bump version
+
+2017-01-12 16:32:52 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * configure.ac:
+         Back to development
+
+=== release 1.11.1 ===
+
+2017-01-12 16:10:25 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpg123.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+         Release 1.11.1
+
+2017-01-12 14:45:56 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2017-01-12 14:37:02 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/hr.po:
+       * po/id.po:
+       * po/sv.po:
+         po: Update translations
+
+2016-12-16 16:52:00 -0300  Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+       * ext/amrnb/meson.build:
+       * ext/x264/meson.build:
+       * meson.build:
+         meson: Install presets files
+
+2015-06-26 20:22:47 +0200  Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
+
+       * ext/x264/GstX264Enc.prs:
+         x264enc: Add a youtube preset.
+         Based on https://support.google.com/youtube/answer/1722171
+         https://bugzilla.gnome.org/show_bug.cgi?id=751560
+
+2016-12-28 10:42:15 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * config.h.meson:
+       * configure.ac:
+       * docs/plugins/Makefile.am:
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * ext/Makefile.am:
+       * ext/mad/Makefile.am:
+       * ext/mad/gstmad.c:
+       * ext/mad/gstmad.h:
+       * ext/mad/meson.build:
+       * ext/meson.build:
+         mad: remove plugin
+         We have better replacements such as the mpg123 plugin.
+         The main reason to keep around mad was for 'freeform'
+         mp3 support, but mpg123 can handle those too nowadays.
+         Also, mad is GPL and has been unmaintained for years.
+         https://bugzilla.gnome.org/show_bug.cgi?id=776140
+
+2016-12-16 19:07:51 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * Makefile.am:
+       * configure.ac:
+       * win32/MANIFEST:
+       * win32/common/.gitignore:
+       * win32/common/config.h:
+         win32: remove platform-specific copies of generated headers
+         Unused and no longer needed.
+
+2016-12-14 10:24:26 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * .gitignore:
+       * Makefile.am:
+       * configure.ac:
+       * gst-plugins-ugly.spec.in:
+         Remove generated .spec file
+         Likely extremely bitrotten, and we should not ship this anyway.
+
+2016-12-09 17:45:34 -0300  Thibault Saunier <tsaunier@gnome.org>
+
+       * meson.build:
+         meson: Support building without Gst debug
+
+2016-12-03 08:19:44 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * README:
+       * common:
+         Automatic update of common submodule
+         From f980fd9 to 39ac2f5
+
+2016-12-02 14:06:21 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Fix memory leak of payload extensions for unusable/unsupported streams
+         https://bugzilla.gnome.org/show_bug.cgi?id=775515
+
+2016-11-30 18:11:30 +0200  Vivia Nikolaidou <vivia@ahiru.eu>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Add information for mixed mode
+         https://bugzilla.gnome.org/show_bug.cgi?id=775411
+
+2016-11-30 17:30:33 +0200  Vivia Nikolaidou <vivia@ahiru.eu>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Correctly pass interlacing/TFF information
+         Give the interlacing information correctly to the encoder. Also parse
+         TFF/BFF information from the caps and pass it too.
+         https://bugzilla.gnome.org/show_bug.cgi?id=775411
+
+2016-11-28 15:14:18 +0200  Vivia Nikolaidou <vivia@ahiru.eu>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Auto-detect interlace mode from caps
+         If the caps are interlaced, interlacing is always enabled on the
+         encoder. If the interlace-mode field is missing or if it's progressive,
+         the encoder uses the "interlaced" property.
+         https://bugzilla.gnome.org/show_bug.cgi?id=775228
+
+2016-11-26 11:20:51 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * .gitmodules:
+         common: use https protocol for common submodule
+         https://bugzilla.gnome.org/show_bug.cgi?id=775110
+
+2016-11-25 23:51:00 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * gst/realmedia/realhash.c:
+         real: Fix compiler warnings with latest clang
+         realhash.c:295:11: error: implicit conversion from 'int' to 'char' changes value from 128 to -128 [-Werror,-Wconstant-conversion]
+         *buf1 = 128;
+         ~ ^~~
+         https://bugzilla.gnome.org/show_bug.cgi?id=775112
+
+2016-11-25 12:41:03 +0100  Edward Hervey <edward@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Allow 64bit sizes for DATA object
+         we *can* have files greater than 4GB, any other object should be
+         smaller than that
+
+2016-11-25 10:07:35 +0100  Edward Hervey <edward@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Add sanity check for asf_stream_audio
+         We should have enough bytes for the specified codec_data
+         https://bugzilla.gnome.org/show_bug.cgi?id=775070
+
+2016-11-25 09:45:04 +0100  Edward Hervey <edward@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Add sanity checks when reading asf_stream_video_format
+         It should report a size of at least 40 bytes
+         Also check for the size of the remaining data (i.e. codec_data)
+         https://bugzilla.gnome.org/show_bug.cgi?id=775070
+
+2016-11-25 09:44:05 +0100  Edward Hervey <edward@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Add check for invalid/corrupt asf object
+         An asf object can't realistically be bigger than 2**32 bytes.
+         If it reports a size bigger than that, consider it corrupt and properly
+         propagate the error back.
+         https://bugzilla.gnome.org/show_bug.cgi?id=775070
+
+2016-11-22 17:14:44 +0100  Edward Hervey <edward@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Handle EOS in push-mode on corrupted files
+         It is possible no streams were activated when receiving EOS, if so
+         handled it as if we hadn't seen the header
+         https://bugzilla.gnome.org/show_bug.cgi?id=774846
+
+2016-11-22 16:56:04 +0100  Edward Hervey <edward@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: FILE headers are mandatory in the header
+         As per the specification, also avoids ending up trying to play a
+         file with plenty of un-initialized values.
+         https://bugzilla.gnome.org/show_bug.cgi?id=774846
+
+2016-11-22 16:54:26 +0100  Edward Hervey <edward@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Handle incomplete header in pull mode
+         pulling headers is meant to complete as a whole. If we don't have
+         enough data, it's an error.
+         Avoids pipeline hangs on corrupted files
+         https://bugzilla.gnome.org/show_bug.cgi?id=774846
+
+2016-11-22 16:22:49 +0100  Edward Hervey <edward@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Handle issues with "empty" files
+         In some corrupted files, we could end up with no actual streams
+         being exposed.
+         In those cases, make sure we properly propagate the failure all
+         the way to the loop function. This avoids ending up in cases where
+         we are neither EOS'd nor ERROR'd out from a pipeline point of view.
+         https://bugzilla.gnome.org/show_bug.cgi?id=774846
+
+2016-11-20 20:54:25 +0100  Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdreadsrc: dvd-spu-clut-change is a sticky custom event
+
+2016-11-17 17:20:03 -0800  Scott D Phillips <scott.d.phillips@intel.com>
+
+       * meson.build:
+         meson: Add ignored warnings for MSVC
+         https://bugzilla.gnome.org/show_bug.cgi?id=774656
+
+2016-11-11 14:15:17 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * configure.ac:
+       * ext/x264/Makefile.am:
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+       * ext/x264/meson.build:
+       * meson_options.txt:
+         x264enc: Add configure parameter to specify additional x264 libraries with e.g. different depth configuration
+         x264 has to be compiled specifically for a target bit depth.
+         Distributions currently ship various libraries in their packages, with
+         different bit depths.
+         This change now allows to provide them all at configure time and have
+         the x264enc element dynamically switch between them based on the bit
+         depth of the input format.
+         https://bugzilla.gnome.org/show_bug.cgi?id=763297
+
+2016-11-01 18:09:25 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+         meson: update version
+
+=== release 1.11.0 ===
+
+2016-11-01 18:53:15 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * configure.ac:
+         Back to development
+
+=== release 1.10.0 ===
+
+2016-11-01 18:05:31 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpg123.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.10.0
+
+2016-11-01 17:54:16 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2016-11-01 17:43:01 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/id.po:
+       * po/sv.po:
+         po: Update translations
+
+2016-10-25 08:54:52 -0700  Scott D Phillips <scott.d.phillips@intel.com>
+
+       * meson.build:
+       * tests/meson.build:
+         meson: Don't depend on gstreamer-check-1.0 on windows
+         https://bugzilla.gnome.org/show_bug.cgi?id=773114
+
+2016-10-25 10:51:08 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+       * meson.build:
+       * tests/check/meson.build:
+       * tests/meson.build:
+         Revert "meson: move gstreamer-check-1.0 dependency to tests/check"
+         This reverts commit 0555c09607e548b6c45d029ab31dbb3042195ae3.
+         Does not actually work. See:
+         https://bugzilla.gnome.org/show_bug.cgi?id=773114#c31
+
+2016-10-24 00:35:23 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * tests/check/meson.build:
+         meson: fix build outside of gst-all
+
+2016-10-21 00:47:14 -0700  Scott D Phillips <scott.d.phillips@intel.com>
+
+       * meson.build:
+       * tests/check/meson.build:
+       * tests/meson.build:
+         meson: move gstreamer-check-1.0 dependency to tests/check
+         https://bugzilla.gnome.org/show_bug.cgi?id=773114
+
+2016-10-15 22:20:05 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+       * meson.build:
+         meson: Don't set c_std to gnu99
+         Use the default for each compiler on every platform instead. This
+         improves our compatibility with compilers that don't have gnu99 as
+         a c_std.
+
+2016-10-04 18:06:09 -0300  Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+       * meson.build:
+       * tests/check/getpluginsdir:
+       * tests/check/meson.build:
+         meson: Make use of new environment object and set plugin path to builddir
+         Workaround source_root being the root directory of all projects
+         in the subproject case and remove now unneeded getpluginsdir
+         Bump meson requirement to 0.35
+
+2016-09-30 11:35:40 -0300  Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+       * hooks/pre-commit.hook:
+       * meson.build:
+       * tests/check/getpluginsdir:
+         meson: Setup pre commit hook and fix getpluginsdir for standalone case
+
+2016-09-30 11:41:28 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+         meson: update version
+
+=== release 1.9.90 ===
+
+2016-09-30 13:03:26 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpg123.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.9.90
+
+2016-09-30 12:23:17 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2016-09-30 11:44:22 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/id.po:
+       * po/sv.po:
+         po: Update translations
+
+2016-09-29 12:39:34 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Set colorimetry and chroma-site information
+         https://bugzilla.gnome.org/show_bug.cgi?id=772159
+
+2016-09-24 09:08:00 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+       * po/meson.build:
+         meson: hook up translations
+
+2016-09-24 08:59:55 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * meson.build:
+       * tests/check/getpluginsdir:
+       * tests/check/meson.build:
+       * tests/meson.build:
+         meson: hook up unit tests
+
+2016-09-14 11:30:58 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * configure.ac:
+         configure: Depend on gstreamer 1.9.2.1
+
+2016-09-10 20:51:36 +1000  Jan Schmidt <jan@centricular.com>
+
+       * autogen.sh:
+       * common:
+         Automatic update of common submodule
+         From b18d820 to f980fd9
+
+2016-09-10 09:54:15 +1000  Jan Schmidt <jan@centricular.com>
+
+       * autogen.sh:
+       * common:
+         Automatic update of common submodule
+         From f49c55e to b18d820
+
+2016-09-05 12:22:56 -0300  Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+       * meson.build:
+         meson: Bump version to 1.9.2
+
+2016-09-01 12:28:57 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * configure.ac:
+         Back to development
+
+=== release 1.9.2 ===
+
+2016-09-01 12:28:45 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpg123.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.9.2
+
+2016-09-01 11:24:13 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         po: Update translations
+
+2016-09-01 10:57:46 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * ext/sidplay/gstsiddec.cc:
+         siddec: Fix compilation with debugging disabled
+         gstsiddec.o
+         gstsiddec.cc: In function ‘void play_loop(GstPad*)’:
+         gstsiddec.cc:446:18: error: unused variable ‘reason’ [-Werror=unused-variable]
+         const gchar *reason = gst_flow_get_name (ret);
+         ^
+
+2016-08-19 11:11:14 -0700  Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+       * ext/sidplay/gstsiddec.cc:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/realmedia/rmdemux.c:
+         Use the new API to post flow ERROR messages on the bus
+         https://bugzilla.gnome.org/show_bug.cgi?id=770158
+
+2016-08-24 09:45:05 -0300  Thibault Saunier <tsaunier@gnome.org>
+
+       * gst/asfdemux/meson.build:
+         meson: Link asfdemux against the gstsdp library
+
+2016-08-23 15:29:10 -0300  Thibault Saunier <tsaunier@gnome.org>
+
+       * meson.build:
+         meson: Add support for fallback subprojects
+
+2016-08-12 21:25:34 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+       * .gitignore:
+       * config.h.meson:
+       * ext/a52dec/meson.build:
+       * ext/amrnb/meson.build:
+       * ext/amrwbdec/meson.build:
+       * ext/cdio/meson.build:
+       * ext/dvdread/meson.build:
+       * ext/lame/meson.build:
+       * ext/mad/meson.build:
+       * ext/meson.build:
+       * ext/mpeg2dec/meson.build:
+       * ext/mpg123/meson.build:
+       * ext/twolame/meson.build:
+       * ext/x264/meson.build:
+       * gst/asfdemux/meson.build:
+       * gst/dvdlpcmdec/meson.build:
+       * gst/dvdsub/meson.build:
+       * gst/meson.build:
+       * gst/realmedia/meson.build:
+       * gst/xingmux/meson.build:
+       * meson.build:
+         Add support for Meson as alternative/parallel build system
+         https://github.com/mesonbuild/meson
+         With contributions from:
+         Tim-Philipp Müller <tim@centricular.com>
+         Jussi Pakkanen <jpakkane@gmail.com> (original port)
+         Highlights of the features provided are:
+         * Faster builds on Linux (~40-50% faster)
+         * The ability to build with MSVC on Windows
+         * Generate Visual Studio project files
+         * Generate XCode project files
+         * Much faster builds on Windows (on-par with Linux)
+         * Seriously fast configure and building on embedded
+         ... and many more. For more details see:
+         http://blog.nirbheek.in/2016/05/gstreamer-and-meson-new-hope.html
+         http://blog.nirbheek.in/2016/07/building-and-developing-gstreamer-using.html
+         Building with Meson should work on both Linux and Windows, but may
+         need a few more tweaks on other operating systems.
+
+2016-08-12 21:41:39 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/dvdread/dvdreadsrc.c:
+       * ext/x264/gstx264enc.h:
+       * gst/realmedia/realhash.c:
+       * gst/realmedia/rtspreal.c:
+         plugins: Use <stdint.h> instead of _stdint.h
+         _stdint.h is generated by Autotools and we don't really need it. All
+         supported platforms now ship with stdint.h. The only stickler was MSVC,
+         and since Visual Studio 2015 it also ships stdint.h now.
+
+2016-08-19 13:01:39 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/mpeg2dec/perftest.c:
+         mpeg2dec: remove file no longer used or needed
+
+2016-08-08 09:58:20 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * gst/dvdlpcmdec/Makefile.am:
+         dvdlpcmdec: add libgstbase CFLAGS as well
+         For consistency.
+         https://bugzilla.gnome.org/show_bug.cgi?id=769610
+
+2016-08-07 00:10:24 +0000  xlazom00 <xlazom00@gmail.com>
+
+       * gst/dvdlpcmdec/Makefile.am:
+         dvdlpcmdec: link libgstbase-1.0
+         https://bugzilla.gnome.org/show_bug.cgi?id=769610
+
+2016-08-02 13:38:25 +0200  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Add byte rate based bitrate tag in case there are no audio props
+         https://bugzilla.gnome.org/show_bug.cgi?id=769418
+
+2016-04-28 16:42:43 +0200  Michael Olbrich <m.olbrich@pengutronix.de>
+
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+         dvdlpcmdec: add support for another format
+         The format specification can be found here:
+         http://www.dvdforum.org/images/Guideline1394V10R0_20020911.pdf
+         Note: This format is also used for Wifi-Display.
+         https://bugzilla.gnome.org/show_bug.cgi?id=765807
+
+2016-04-28 16:32:53 +0200  Michael Olbrich <m.olbrich@pengutronix.de>
+
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+         dvdlpcmdec: rewrite to use GstAudioDecoder
+         https://bugzilla.gnome.org/show_bug.cgi?id=765807
+
+2016-07-24 10:00:48 +0200  Josep Torra <n770galaxy@gmail.com>
+
+       * ext/sidplay/gstsiddec.cc:
+         sidplay: fix compiler warnings when building with -O3
+         Avoid compiler warnings "‘foo’ may be used uninitialized in this
+         function" when building with -O3 by checking the return bool value
+         of format conversion function.
+         https://bugzilla.gnome.org/show_bug.cgi?id=769116
+
+2016-07-11 21:14:06 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From f363b32 to f49c55e
+
+2016-07-06 13:51:09 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * configure.ac:
+         Back to development
+
+=== release 1.9.1 ===
+
+2016-07-06 13:15:28 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpg123.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.9.1
+
+2016-07-06 11:54:01 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2016-07-06 10:19:44 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/hr.po:
+         po: Update translations
+
+2016-06-21 11:46:53 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * common:
+         Automatic update of common submodule
+         From ac2f647 to f363b32
+
+2015-05-12 11:08:55 +0300  Vootele Vesterblom <vov@bang-olufsen.dk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: fix seeking back after EOS has been reached in push mode
+         Fix seeking when demuxer is in INDEX state. This happens when we
+         reached the end of the stream. It should still be possible to do
+         a flushing seek and seek back to any other position though. Instead
+         the demuxer would just go straight to EOS again instead of going
+         back to processing packets again from the new position.
+         https://bugzilla.gnome.org/show_bug.cgi?id=749066
+
+2016-05-17 16:00:29 +0300  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+       * gst/realmedia/rdtmanager.c:
+         rdtmanager: fix clock leak
+         The clock returned by gst_system_clock_obtain() was never unreffed.
+         https://bugzilla.gnome.org/show_bug.cgi?id=766565
+
+2016-05-15 13:33:30 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpg123.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+         docs: Update for git master
+
+2016-04-16 09:15:43 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/amrnb/amrnbdec.c:
+       * ext/mad/gstmad.c:
+         amrnbec, mad: fix two more parse function declarations
+
+2016-04-15 20:46:37 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/amrwbdec/amrwbdec.c:
+         a52dec, amrwbec: fix parse function declaration mismatch
+         Fixes MSVC compiler warning:
+         amrwbdec.c(99): warning C4133: '=': incompatible types
+         - from 'gboolean (__cdecl *)(GstAudioDecoder *,GstAdapter *,gint *,gint *)' to
+         'GstFlowReturn (__cdecl *)(GstAudioDecoder *,GstAdapter *,gint *,gint *)'
+         gsta52dec.c(156): warning C4133: '=': incompatible types
+         - from 'gboolean (__cdecl *)(GstAudioDecoder *,GstAdapter *,gint *,gint *)' to
+         'GstFlowReturn (__cdecl *)(GstAudioDecoder *,GstAdapter *,gint *,gint *)'
+
+2016-04-15 19:55:03 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/mpg123/gstmpg123audiodec.h:
+         mpg123: fix build with msvc
+         Fix syntax errors when compiling against cerbero-provided libmpg123
+         headers. We do the same as the libmpg123 internal visual studio
+         build here.
+         mpg123.h(1378): error C2143: syntax error: missing ')' before '('
+         mpg123.h(1378): error C2081: 'ssize_t': name in formal parameter list illegal
+         mpg123.h(1378): error C2143: syntax error: missing ')' before '*'
+         mpg123.h(1378): error C2091: function returns function
+         mpg123.h(1378): error C2143: syntax error: missing '{' before '*'
+         mpg123.h(1378): error C2059: syntax error: ')'
+         mpg123.h(1379): error C2143: syntax error: missing ')' before '*'
+         mpg123.h(1379): error C2365: 'off_t': redefinition; previous definition was 'typedef'
+         ...
+
+2016-04-15 18:37:42 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * configure.ac:
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: bump libmpeg2 requirement to 0.5.1 and fix msvc build
+         libmpeg2 0.5.1 was released in mid-2008, let's bump the requirement
+         and get rid of version-dependent code paths. There's still
+         avdec_mpeg2video for those who are stuck on ancient distros which
+         we don't target any more.
+         Also fixes build with MSVC, which doesn't like #if #else #endif
+         inside macro arguments (like the GST_DEBUG_OBJECT in line 941).
+
+2016-04-14 10:02:50 +0100  Julien Isorce <j.isorce@samsung.com>
+
+       * README:
+       * common:
+         Automatic update of common submodule
+         From 6f2d209 to ac2f647
+
+2016-03-04 16:14:44 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbenc.c:
+       * ext/amrwbdec/amrwbdec.c:
+       * ext/dvdread/dvdreadsrc.c:
+       * ext/lame/gstlamemp3enc.c:
+       * ext/mad/gstmad.c:
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/sidplay/gstsiddec.cc:
+       * ext/twolame/gsttwolamemp2enc.c:
+       * ext/x264/gstx264enc.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstrtpasfdepay.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/dvdsub/gstdvdsubdec.c:
+       * gst/dvdsub/gstdvdsubparse.c:
+       * gst/realmedia/pnmsrc.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rdtdepay.c:
+       * gst/realmedia/rdtmanager.c:
+       * gst/realmedia/rmdemux.c:
+       * gst/xingmux/gstxingmux.c:
+         ugly: use new gst_element_class_add_static_pad_template()
+         https://bugzilla.gnome.org/show_bug.cgi?id=763082
+
+2016-03-24 13:33:22 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * configure.ac:
+         Back to development
+
+=== release 1.8.0 ===
+
+2016-03-24 12:43:04 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpg123.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.8.0
+
+2016-03-24 12:18:09 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+=== release 1.7.91 ===
+
+2016-03-15 12:21:07 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpg123.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.7.91
+
+2016-03-15 12:03:34 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2016-03-08 12:26:01 +0100  Edward Hervey <edward@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: Don't modify segment values on accurate seeks
+         When dealing with accurate seeks, we want to return exactly the segment
+         that was requested by the seek event, and not adjust the values.
+         https://bugzilla.gnome.org/show_bug.cgi?id=755469
+
+=== release 1.7.90 ===
+
+2016-03-01 18:42:01 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpg123.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.7.90
+
+2016-03-01 17:18:01 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2016-03-01 16:54:07 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/bg.po:
+         po: Update translations
+
+2016-02-27 20:17:31 +0100  Jens Georg <mail@jensge.org>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdread: Fix seek starting at 0 for title != 1
+         Otherwise the playback would start at title 0
+         https://bugzilla.gnome.org/show_bug.cgi?id=762787
+
+2016-02-26 12:41:18 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * common:
+         Automatic update of common submodule
+         From b64f03f to 6f2d209
+
+2016-02-22 22:08:12 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: fix adding bitrate to stream tags
+         https://bugzilla.gnome.org/show_bug.cgi?id=699586
+
+2016-02-21 10:11:12 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * gst/asfdemux/asf.vcproj:
+       * gst/realmedia/rmdemux.vcproj:
+       * win32/MANIFEST:
+       * win32/gst.sln:
+       * win32/vs6/gst_plugins_ugly.dsw:
+       * win32/vs6/libgstasfdemux.dsp:
+       * win32/vs6/libgstdvdlpcmdec.dsp:
+       * win32/vs6/libgstdvdsub.dsp:
+       * win32/vs6/libgstlame.dsp:
+       * win32/vs6/libgstmad.dsp:
+       * win32/vs6/libgstrealmedia.dsp:
+       * win32/vs6/libgstsynaesthesia.dsp:
+         win32: remove outdated build cruft
+         This hasn't been touched for generations, doesn't work,
+         and is just causing confusion. We also don't want to
+         maintain these files manually.
+
+2016-02-20 11:55:37 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: don't use exported but undeclared core debug category symbols
+         It's not right and won't work on Windows with MSVC.
+
+2016-02-19 12:38:34 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * configure.ac:
+         Back to development
+
+=== release 1.7.2 ===
+
+2016-02-19 11:58:13 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpg123.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.7.2
+
+2016-02-19 11:21:03 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2016-02-19 10:32:06 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/fr.po:
+       * po/pt_BR.po:
+         po: Update translations
+
+2016-02-18 00:25:56 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * ext/sidplay/gstsiddec.cc:
+         sidplay: Fix compiler warning about C++11 compatibility
+         gstsiddec.cc:78:17: error: invalid suffix on literal; C++11 requires a space between literal and string macro [-Werror=literal-suffix]
+         #define FORMATS "{ "GST_AUDIO_NE(S16)","GST_AUDIO_NE(U16)", S8, U8 }"
+         ^
+         gstsiddec.cc:78:38: error: invalid suffix on literal; C++11 requires a space between literal and string macro [-Werror=literal-suffix]
+         #define FORMATS "{ "GST_AUDIO_NE(S16)","GST_AUDIO_NE(U16)", S8, U8 }"
+         ^
+
+2016-02-16 14:46:11 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpg123.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+         docs: update inspection to git and fix mpg123 inspect location
+
+2016-02-16 12:23:33 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * tests/files/Makefile.am:
+       * tests/files/stream.mp2:
+         tests: fix distcheck
+
+2016-02-16 10:38:18 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+       * docs/plugins/xml/plugin-mpg123.xml:
+       * ext/Makefile.am:
+       * gst-plugins-ugly.spec.in:
+       * tests/check/Makefile.am:
+         mpg123: move from -bad to -ugly
+         Hook up to build system, add to docs
+
+2016-02-16 10:55:01 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * configure.ac:
+       * tests/Makefile.am:
+       * tests/check/Makefile.am:
+       * tests/check/elements/.gitignore:
+       * tests/files/Makefile.am:
+       * tests/files/cbr_stream.mp3:
+       * tests/files/vbr_stream.mp3:
+         tests: add test data for mpg123 plugin
+
+2016-02-16 10:41:07 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+         Merge branch 'plugin-move-mpg123'
+         Move mpg123 plugin from -bad to -ugly.
+         https://bugzilla.gnome.org/show_bug.cgi?id=719849
+
+2015-12-14 11:09:46 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+       * ext/mpg123/gstmpg123audiodec.c:
+         plugins-bad: Fix example pipelines
+         rename gst-launch --> gst-launch-1.0
+         replace old elements with new elements(ffmpegcolorspace -> videoconvert, ffenc_** -> avenc_**)
+         fix caps in examples
+         https://bugzilla.gnome.org/show_bug.cgi?id=759432
+
+2015-08-17 11:50:28 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/mpg123/gstmpg123audiodec.c:
+         mpg123: still reset pending audio info on hard flush
+         Follow-up to previous commit.
+         https://bugzilla.gnome.org/show_bug.cgi?id=752431
+
+2015-07-15 10:44:02 -0600  Jason Litzinger <jlitzinger@control4.com>
+
+       * ext/mpg123/gstmpg123audiodec.c:
+         mpg123: fix handling of sample rate change during playback
+         If the sample rate of the media changes, the resulting flush will
+         clear the has_next_audioinfo flag, and the caps won't be sent
+         downstream.
+         https://bugzilla.gnome.org/show_bug.cgi?id=752431
+
+2015-08-15 12:58:40 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+       * ext/mpg123/gstmpg123audiodec.c:
+         audiodecoders: use default pad accept-caps handling
+         Avoids useless check of downstream caps when handling an
+         accept-caps query
+         Elements: dtsdec, faad, gsmdec, mpg123audiodec, opusdec,
+         sbcdec, adpcmdec, sirendec
+
+2015-04-26 18:04:16 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/mpg123/Makefile.am:
+         Remove obsolete Android build cruft
+         This is not needed any longer.
+
+2015-01-11 01:08:08 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/mpg123/gstmpg123audiodec.c:
+         mpg123: fix compiler warning and simplify checks in set_caps
+         https://bugzilla.gnome.org/show_bug.cgi?id=740195
+
+2015-01-03 13:06:45 +0100  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+       * ext/mpg123/gstmpg123audiodec.c:
+         mpg123: rework set_format code so mpg123audiodec works with decodebin/playbin
+         The old code was using gst_caps_normalize() and was generally overly
+         complex. Simplify by picking sample rate and number of channels from
+         upstream and the sample format from the allowed caps. If the format caps
+         is a list of strins, just pick the first one. And if the srcpad isn't
+         linked yet, use the default format (S16).
+         https://bugzilla.gnome.org/show_bug.cgi?id=740195
+
+2014-09-10 17:24:39 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/mpg123/gstmpg123audiodec.c:
+         Fix up one-element lists in template caps
+
+2014-03-05 00:51:04 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * tests/check/elements/mpg123audiodec.c:
+         tests: fix mpg123audiodec test for big-endian architectures
+
+2014-02-04 17:22:27 +0100  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+       * ext/mpg123/gstmpg123audiodec.c:
+         mpg123: improved error report and checks
+         Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
+
+2013-12-05 12:04:39 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+       * ext/mpg123/gstmpg123audiodec.c:
+         mpg123audiodec: Require caps to be set before any data processing
+
+2013-07-26 17:25:42 +0200  Edward Hervey <edward@collabora.com>
+
+       * ext/mpg123/gstmpg123audiodec.c:
+         mpg123: Remove dead assignment
+         harder ? :)
+
+2013-05-15 11:25:07 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * tests/check/elements/mpg123audiodec.c:
+         mpg123audiodec: Fix event handling in unit test
+
+2012-10-24 12:16:39 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/mpg123/Makefile.am:
+         gst: Add better support for static plugins
+
+2013-04-15 00:22:39 -0700  David Schleef <ds@schleef.org>
+
+       * ext/mpg123/gstmpg123audiodec.c:
+         mpg123: Add conditional on API version for new enum
+
+2016-02-05 19:11:38 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+       * tests/check/Makefile.am:
+         tests: extend the AM_TESTS_ENVIRONMENT from check.mak
+         To get the CK_DEFAULT_TIMEOUT defined for all tests
+         https://bugzilla.gnome.org/show_bug.cgi?id=761472
+
+2016-02-05 18:07:02 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+       * autogen.sh:
+       * common:
+         Automatic update of common submodule
+         From 86e4663 to b64f03f
+
+2016-01-25 20:00:26 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * configure.ac:
+       * ext/amrnb/amrnbdec.h:
+       * ext/amrnb/amrnbenc.h:
+       * ext/amrwbdec/amrwbdec.h:
+         amrnb, amrwb: unconditionally depend on opencore-amr*b >= 0.1.3
+         We don't really need to cater for older versions any more.
+
+2016-01-21 17:34:38 +0100  Edward Hervey <edward@centricular.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Demote rank to SECONDARY
+         https://bugzilla.gnome.org/show_bug.cgi?id=574461
+
+2016-01-08 21:40:53 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+       * gst/dvdsub/gstdvdsubdec.c:
+         dvdsubdec: use query caps instead of accept-caps
+         accept-caps does only a shallow check and a full downstream
+         caps query is needed to check if ARGB is possible
+
+2015-10-30 11:06:11 +0530  Ravi Kiran K N <ravi.kiran@samsung.com>
+
+       * gst/asfdemux/asfpacket.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: Support reverse playback
+         Support reverse playback for ASF format.
+         Parse packets and queue the payloads, then push
+         the payload buffer to decoder in reverse order.
+         Video buffers are pushed from KeyFrame to next
+         Keyframe.
+         https://bugzilla.gnome.org/show_bug.cgi?id=757341
+
+2015-12-24 15:28:46 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+       * configure.ac:
+         Back to development
+
+2015-12-24 14:48:50 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+       * tests/check/elements/amrnbenc.c:
+         amrnbenc: Fix various compiler warnings in the test
+
+2015-12-24 14:48:38 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+       * tests/check/elements/x264enc.c:
+         x264enc: Fix various compiler warnings in the test
+
+=== release 1.7.1 ===
+
+2015-12-24 14:41:21 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.7.1
+
+2015-12-24 14:10:29 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2015-12-24 12:23:27 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/id.po:
+       * po/sv.po:
+         po: Update translations
+
+2015-12-21 12:32:32 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+       * configure.ac:
+         configure: Use -Bsymbolic-functions if available
+         While this is more useful for libraries, some of our plugins with multiple
+         files and some internal API can also benefit from this.
+
+2015-12-16 09:36:08 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+         docs: update to git
+
+2015-12-07 09:08:18 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+       * autogen.sh:
+       * common:
+         Automatic update of common submodule
+         From b319909 to 86e4663
+
+2015-11-26 15:49:47 +0000  Arjen Veenhuizen <arjen.veenhuizen@tno.nl>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: increase bitrate limit from 100Mbps to 2Gbps
+         Don't artificially limit the bitrate, x264enc allows much
+         higher bitrates, and for intra-only 4k AVC they are needed.
+         x264 clips to 2Gbps internally, so use that as limit for now.
+         https://bugzilla.gnome.org/show_bug.cgi?id=758620
+
+2015-11-18 23:20:59 -0800  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: drop unnecessary NULL check before g_free
+
+2015-10-21 14:35:17 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * common:
+         Automatic update of common submodule
+         From b99800a to b319909
+
+2015-10-20 17:29:42 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * configure.ac:
+         Use new GST_ENABLE_EXTRA_CHECKS #define
+         https://bugzilla.gnome.org/show_bug.cgi?id=756870
+
+2015-10-21 14:26:07 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * README:
+       * common:
+         Automatic update of common submodule
+         From 9aed1d7 to b99800a
+
+2015-10-02 22:24:46 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * configure.ac:
+         Update GLib dependency to 2.40.0
+
+2015-09-29 14:16:07 -0700  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+       * ext/dvdread/README:
+         dvdread: remove broken link
+         Removing instead of updating as previously pointed-to page
+         (now http://dvd.sourceforge.net/dvdinfo/) is already linked
+         from dvd.sourceforge.net's homepage as: "Collection of
+         information on file formats/data structures relating to DVD
+         navigation/SPUs."
+
+2015-09-26 09:23:05 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+         dvdlpcmdec: fix invalid read beyond channel position array
+         We would always copy sizeof(sorted_position) bytes, which is
+         for 8 channels, but if we have less than 8 channels the
+         position array we copy from will only have allocated space
+         for channel channels, so we would read beyond the input
+         array in some cases.
+
+2015-08-25 10:08:46 +0900  HoonHee Lee <hoonhee.lee@lge.com>
+
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+         dvdlpcmdec: factor out common code to set output format into new function
+         When caps event is recieved and header is changed, reordering channel
+         and setting the default output format for audio are processed. These 2 of
+         code are same. Thus, It is better to make a new function for these common
+         code in terms of removing duplicated code, maintenance and expansion.
+         https://bugzilla.gnome.org/show_bug.cgi?id=753920
+
+2015-09-23 20:45:34 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Don't push any data on pads after the segment.stop
+         https://bugzilla.gnome.org/show_bug.cgi?id=755469
+
+2015-09-23 20:30:21 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: Only change segment start to a keyframe for KEYUNIT seeks
+         Not for accurate seeks, which should accurately start at the requested
+         position.
+         https://bugzilla.gnome.org/show_bug.cgi?id=755469
+
+2015-09-23 20:23:40 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Update segment.position when pushing buffers
+         Without this, non-flushing seeks are not going to work well.
+         https://bugzilla.gnome.org/show_bug.cgi?id=755469
+
+2015-09-23 19:37:43 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Only push EOS event if we're not doing a segment seek
+         https://bugzilla.gnome.org/show_bug.cgi?id=755469
+
+2015-09-23 16:31:28 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: If pushing buffers returned EOS, go into the EOS and not failure code path
+         We don't want to unconditionally send an EOS event downstream, but might want
+         to send a SEGMENT_DONE message/event instead if a segment seek was done
+         before.
+         https://bugzilla.gnome.org/show_bug.cgi?id=755469
+
+2015-09-25 23:51:12 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * configure.ac:
+         Back to development
+
+=== release 1.6.0 ===
+
+2015-09-25 23:32:02 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.6.0
+
+2015-09-25 23:04:56 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+=== release 1.5.91 ===
+
+2015-09-18 20:01:17 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.5.91
+
+2015-09-18 19:34:50 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2015-09-18 11:53:57 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/zh_CN.po:
+         po: Update translations
+
+2015-09-05 23:34:45 +1000  Jan Schmidt <jan@centricular.com>
+
+       * ext/x264/gstx264enc.c:
+         x264: Add bitrate info to the tags output.
+         Makes it possible for muxers to know the target bitrate as soon
+         as encoding starts, which flvmux now uses.
+
+2015-08-28 19:18:32 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: fix file mode of some source files
+
+=== release 1.5.90 ===
+
+2015-08-19 14:05:27 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.5.90
+
+2015-08-19 12:55:35 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2015-08-19 11:33:01 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/id.po:
+       * po/sv.po:
+         po: Update translations
+
+2015-08-18 02:23:55 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: actually return TRUE from accept-caps handler
+         The query was handled
+
+2015-08-16 14:27:44 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: implement accept-caps handling
+         Implement accept-caps handling without doing caps queries downstream
+
+2015-08-15 22:15:26 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+       * ext/amrnb/amrnbenc.c:
+       * ext/lame/gstlamemp3enc.c:
+       * ext/twolame/gsttwolamemp2enc.c:
+         audioencoders: use template subset check for accept-caps
+         It is faster than doing a query that propagates downstream and
+         should be enough
+         Elements: amrnbenc, lamemp3enc, twolamemp2enc
+
+2015-08-15 11:46:59 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: use default pad accept-caps handling
+         Avoids useless check of downstream caps when handling an
+         accept-caps query
+
+2015-08-15 11:46:13 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrwbdec/amrwbdec.c:
+       * ext/mad/gstmad.c:
+         audiodecoders: use default pad accept-caps handling
+         Avoids useless check of downstream caps when handling an
+         accept-caps query
+         Elements: a52dec, amrnbdec, amrwbdec, mad
+
+2015-08-14 11:14:31 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * tests/check/generic/states.c:
+         check: Rename states unit test
+         Makes it easier to differentiate from other modules states unit test
+
+2015-08-06 10:05:53 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: fix assertion error when freeing old tags.
+         Check if old_tags is present before calling gst_tag_list_unref
+         https://bugzilla.gnome.org/show_bug.cgi?id=753301
+
+2015-07-24 10:08:34 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: fix assertion error when codec_data is not present in structure
+         When discovering a particular asf file, caps structure doesn't have
+         codec_data, and this was not being checked before using the same,
+         resulting in assertion error
+         https://bugzilla.gnome.org/show_bug.cgi?id=752803
+
+2015-07-29 15:55:14 +0100  Luis de Bethencourt <luis@debethencourt.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: remove unread value
+         Init value of idx2 is never used. First usage sets it to idx + 1. Removing
+         initial value.
+
+2015-07-25 04:55:15 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Don't post error on flushing while reading headers
+
+2015-07-21 11:13:27 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: mark tag list as global scope
+
+2015-07-21 11:10:04 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: fix taglist leak
+         merge doesn't take ownership, so must unref the
+         old tags if we do merge.
+
+2015-07-21 12:44:55 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: fix wrong unref when there are no tags
+         Tags should be appended to pending tags and unref'ed only if tags
+         are present. Else there is no need to append.
+         https://bugzilla.gnome.org/show_bug.cgi?id=752404
+
+2015-07-16 18:11:37 +0900  Vineeth T M <vineeth.tm@samsung.com>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: fix memory leaks during error cases
+         while adding stream, during error cases, only stream is
+         being freed. Adapter, pad, tags, subpackets, index are not being
+         freed resulting in memory leaks
+         https://bugzilla.gnome.org/show_bug.cgi?id=752404
+
+2015-07-16 17:23:15 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * gst-plugins-ugly.doap:
+         Update mailing list in doap file as well
+
+2015-07-16 17:19:37 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/amrnb/amrnbdec.c:
+         Update mailing list address from sourceforge to freedesktop
+
+2015-07-16 09:49:17 +0900  Vineeth T M <vineeth.tm@samsung.com>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: fix tag memory leak
+         tags is not being freed after being merged to the
+         pending_tags.
+         https://bugzilla.gnome.org/show_bug.cgi?id=752404
+
+2015-07-03 21:58:33 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From f74b2df to 9aed1d7
+
+2015-06-25 00:04:19 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * configure.ac:
+         Back to development
+
+=== release 1.5.2 ===
+
+2015-06-24 23:39:37 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.5.2
+
+2015-06-24 23:14:52 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2015-06-24 11:15:22 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/nl.po:
+         po: Update translations
+
+2015-06-15 16:33:26 +1000  Jan Schmidt <jan@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Use gst_video_multiview_guess_half_aspect() function
+         Use gst_video_multiview_guess_half_aspect() to guess if frame-packed
+         stereoscopic video is full-frame per view or not.
+
+2015-06-16 17:49:05 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 6015d26 to f74b2df
+
+2014-11-26 22:15:43 +0100  Matej Knopp <matej.knopp@gmail.com>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264enc: Use gst_video_encoder_set_min_pts
+         This method replace the manual adjustment of PTS and DTS to avoid
+         negative DTS issues. Using this method will also update the segment so
+         we don't loos sync.
+         https://bugzilla.gnome.org/show_bug.cgi?id=740575
+
+2015-06-10 14:28:05 +1000  Jan Schmidt <jan@centricular.com>
+
+       * gst/asfdemux/Makefile.am:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: Add support for stereoscopic video metadata.
+         Add parsing of stereoscopic metadata, and place into the caps to
+         the decoder.
+         Fix parsing of Advanced Mutual Exclustion objects.
+         https://bugzilla.gnome.org/show_bug.cgi?id=711190
+         Based on a patch by HyeJin Choi <meeshel78@hotmail.com>
+
+2014-10-05 00:54:59 +1000  Jan Schmidt <jan@centricular.com>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264enc: Add support for stereoscopic video
+         Provide new frame-packing property to directly set
+         x264enc frame packing, or pass through upstream settings
+         The explicit layout from the frame-packing property is
+         preferred over any info from the caps.
+
+2015-06-10 15:32:44 +0100  Chris Clayton <chris2553@googlemail.com>
+
+       * gst/xingmux/gstxingmux.c:
+         xingmux: fix compiler warnings
+         https://bugzilla.gnome.org/show_bug.cgi?id=750596
+
+2015-06-09 15:28:46 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+       * Makefile.am:
+         cruft: add the obsolete tmpl dir to cruft-dirs
+
+2015-06-09 11:30:34 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * common:
+         Automatic update of common submodule
+         From d9a3353 to 6015d26
+
+2015-06-08 23:08:11 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From d37af32 to d9a3353
+
+2015-06-07 23:06:47 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From 21ba2e5 to d37af32
+
+2015-06-07 17:32:12 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From c408583 to 21ba2e5
+
+2015-06-07 17:02:31 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+       * docs/plugins/Makefile.am:
+         docs: remove variables that we define in the snippet from common
+         This is syncing our Makefile.am with upstream gtkdoc.
+
+2015-06-07 17:16:30 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+       * autogen.sh:
+       * common:
+         Automatic update of common submodule
+         From d676993 to c408583
+
+2015-06-07 16:44:43 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * configure.ac:
+         Back to development
+
+=== release 1.5.1 ===
+
+2015-06-07 11:05:29 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.5.1
+
+2015-06-07 11:05:22 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2015-06-07 09:36:00 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/eo.po:
+       * po/fr.po:
+         po: Update translations
+
+2015-06-02 16:31:10 +0200  Edward Hervey <edward@centricular.com>
+
+       * tests/check/elements/amrnbenc.c:
+       * tests/check/elements/mpeg2dec.c:
+       * tests/check/elements/x264enc.c:
+       * tests/check/elements/xingmux.c:
+       * tests/check/pipelines/lame.c:
+         check: Use GST_CHECK_MAIN () macro everywhere
+         Makes source code smaller, and ensures we go through common initialization
+         path (like the one that sets up XML unit test output ...)
+
+2015-05-26 17:58:18 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: don't artificially limit max allowed value of "threads" property
+         In auto mode it will happily chose much higher values anyway,
+         and a limit of 4 seems a bit low these days.
+
+2015-05-12 22:05:02 +1000  Jan Schmidt <jan@centricular.com>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdread: Also reset the first_seek var in start()
+         Make the initial chapter seek work across reuse.
+         https://bugzilla.gnome.org/show_bug.cgi?id=453322
+
+2015-05-12 21:52:24 +1000  Jan Schmidt <jan@centricular.com>
+
+       * ext/dvdread/dvdreadsrc.c:
+       * ext/dvdread/dvdreadsrc.h:
+         dvdread: Work around basesrc initial seek
+         Ignore the initial seek basesrc sends, as it
+         breaks starting from another chapter by
+         immediately seeking back to the start of the title
+
+2015-05-10 11:34:33 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbenc.c:
+       * ext/amrwbdec/amrwbdec.c:
+       * ext/cdio/gstcdiocddasrc.c:
+       * ext/lame/gstlamemp3enc.c:
+       * ext/mad/gstmad.c:
+       * ext/sidplay/gstsiddec.cc:
+       * ext/twolame/gsttwolamemp2enc.c:
+       * ext/x264/gstx264enc.c:
+       * gst/realmedia/rademux.c:
+       * gst/xingmux/gstxingmux.c:
+         docs: update example pipelines in element docs
+         Mostly gst-launch -> gst-launch-1.0, but also
+         use autoaudiosink/autovideosink in more places
+         and update pipelines a little or flesh out
+         descriptions.
+
+2015-04-27 10:57:12 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/realmedia/rdtdepay.c:
+         Rename property enums from ARG_ to PROP_
+         Property enum items should be nameed PROP_ for consistency and readability.
+
+2015-04-26 17:56:22 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * Android.mk:
+       * ext/mad/Makefile.am:
+       * ext/x264/Makefile.am:
+       * gst/asfdemux/Makefile.am:
+       * gst/dvdlpcmdec/Makefile.am:
+       * gst/dvdsub/Makefile.am:
+       * gst/realmedia/Makefile.am:
+       * gst/xingmux/Makefile.am:
+         Remove obsolete Android build cruft
+         This is not needed any longer.
+
+2015-04-24 17:05:20 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+       * gst/realmedia/pnmsrc.c:
+         realmedia: remove unused enum item PROP_LAST
+
+2015-04-23 16:23:01 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * tests/check/Makefile.am:
+         tests: define GST_CHECK_TEST_ENVIRONMENT_BEACON
+         Make sure the test environment is set up.
+         https://bugzilla.gnome.org//show_bug.cgi?id=747624
+
+2015-04-23 16:22:39 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * configure.ac:
+         configure: bump automake requirement to 1.14 and autoconf to 2.69
+         This is only required for builds from git, people can still
+         build tarballs if they only have older autotools.
+         https://bugzilla.gnome.org//show_bug.cgi?id=747624
+
+2015-04-23 16:22:30 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * .gitignore:
+         Update .gitignore
+
+2015-04-22 10:37:54 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * LICENSE_readme:
+         Remove LICENSE_readme
+         It's completely outdated and just confusing, better if people are
+         forced to look at the actual code in question than trusting this file.
+
+2015-04-22 10:37:43 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * INSTALL:
+         Remove INSTALL file
+         autotools automatically generate this, and when using different versions
+         for autogen.sh there will always be changes to a file tracked by git.
+
+2015-04-20 14:35:30 +0900  Cliff Han <cliff.han@lge.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: fix a seek failure due to out-of-range in push mode
+         A seek in push mode failed for big offsets which are beyond
+         the range of guint32.
+         https://bugzilla.gnome.org/show_bug.cgi?id=748162
+
+2015-04-08 16:52:06 +0200  Edward Hervey <edward@centricular.com>
+
+       * common:
+       * tests/check/Makefile.am:
+         tests: Use AM_TESTS_ENVIRONMENT
+         Needed by the new automake test runner
+
+2015-04-03 18:58:03 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * autogen.sh:
+       * common:
+         Automatic update of common submodule
+         From bc76a8b to c8fb372
+
+2015-04-02 17:24:05 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+       * ext/a52dec/gsta52dec.c:
+         a52dec: fix race in liba52dec lookup table initialization
+         a52_init initializes the IMDCT global state as well as creating
+         a new state. When two A52 decoders are created (eg, when two AC3
+         tracks are contained in a video), calls to a52_init may happen
+         at the same time, and the IMDCT initialization is not reentrant.
+         https://bugzilla.gnome.org/show_bug.cgi?id=746781
+
+2015-03-27 14:41:51 +0100  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: fix buffer leak in crop_buffer()
+         gst_buffer_pool_acquire_buffer() gives us a new owned buffer while
+         gst_buffer_replace() reffed it as well so we were one reference extra.
+         https://bugzilla.gnome.org/show_bug.cgi?id=746887
+
+2015-03-28 16:58:26 +0100  Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: resurrect some flow return handling
+         https://bugzilla.gnome.org/show_bug.cgi?id=744572
+
+2015-03-28 16:57:06 +0100  Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: resurrect some flow return handling
+         https://bugzilla.gnome.org/show_bug.cgi?id=744572
+
+2015-03-24 12:50:43 +0000  Luis de Bethencourt <luis.bg@samsung.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: fix memory leak
+         CID #1291630
+
+2015-03-24 10:29:48 +0000  Luis de Bethencourt <luis.bg@samsung.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: initialize buffer
+         Buffer needs to be null before passing it to gst_buffer_pool_acquire_buffer()
+         CID #1291634
+
+2015-03-13 17:00:03 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Add stride support
+         This allow using external pools that have different strides from the
+         default. These strides need to respect certain rules, which we check
+         and if these are not met, we fallback to generic pool.
+         https://bugzilla.gnome.org/show_bug.cgi?id=735379
+
+2015-03-10 16:45:01 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/mpeg2dec/gstmpeg2dec.h:
+         mpeg2dec: Re-implement pool handling
+         This is a rewrite of the pool negotiation and configuration. Direct
+         to output decoding is now achieved by configuring the pool using
+         video-alignment. This removes copies when dealing with any elements that
+         supports VideoAlignment, and enable usage of generic video buffer pool,
+         XVImagePool and GLPool. It drops the crop meta implementation for now.
+         https://bugzilla.gnome.org/show_bug.cgi?id=735379
+
+2015-03-10 09:33:15 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * gst/dvdsub/gstdvdsubdec.c:
+         dvbsub: fix indentation
+
+2015-03-10 09:32:51 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/dvdread/dvdreadsrc.c:
+       * gst/dvdsub/gstdvdsubdec.c:
+         Fix double semicolons
+
+2015-03-09 19:11:51 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         Revert "mpeg2dec: Fix handling of stride"
+         This reverts commit f3e8dcb9de4d546e7d80ccc1754ed13dd4e7ac81.
+
+2015-03-09 19:11:44 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         Revert "mpeg2dec: Use propose unref method for buffer"
+         This reverts commit 63b43d3bee832aec353d02575da543f3c73f6893.
+
+2015-03-09 18:43:43 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Use propose unref method for buffer
+
+2015-01-21 18:29:22 +0000  Simon Farnsworth <simon.farnsworth@onelan.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Fix handling of stride
+         A pipeline like:
+         gst-launch-1.0 filesrc location=file.ts ! tsdemux ! mpegvideoparse ! mpeg2dec  ! vaapisink
+         would look bad when file.ts contains 704x576 video, because vaapisink would
+         give you buffers of stride 768, but libmpeg2 was not told about this and
+         used a stride of 704.
+         Tell libmpeg2 about the stride from  downstream; in the process, teach it to
+         reject buffer pools that don't meet libmpeg2's chroma stride requirements
+         Signed-off-by: Simon Farnsworth <simon.farnsworth@onelan.co.uk>
+
+2015-02-11 13:56:48 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+       * ext/x264/gstx264enc.c:
+       * gst/asfdemux/gstasfdemux.c:
+         Improve and fix LATENCY query handling
+         This now follows the design docs everywhere, especially the maximum latency
+         handling.
+         https://bugzilla.gnome.org/show_bug.cgi?id=744106
+
+2015-02-06 19:04:32 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Don't set max latency to the same value as the encoder latency
+         The meaning of the max latency is *not* the maximum latency this element will
+         introduce. It is the maximum latency this element can endure without
+         overflowing any buffers, which is infinite for x264enc.
+         Fixes latency configuration in zero latency mode, where max latency was
+         becoming 0... which usually won't work well if something else introduces
+         latency as then max < min in the end, and latency configuration just fails.
+
+2015-02-02 14:13:10 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: set annexb=1 in byte stream mode when downstream has ANY caps
+         This matches what is done when downstream caps are not ANY, and fixes
+         prerolling in byte stream mode when typefind is downstream.
+
+2015-01-21 09:56:41 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+       * ext/lame/gstlamemp3enc.c:
+       * ext/twolame/gsttwolamemp2enc.c:
+         Constify some static arrays everywhere
+
+2015-01-18 16:53:41 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * configure.ac:
+         configure: remove non-ported plugins stuff
+         It's not needed any longer, all plugins in -ugly
+         have been ported.
+
+2015-01-18 11:07:43 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Don't set an allocation maximum
+         There is no reason x264enc should enforce a maximum allocation size.
+         The maximum is normally set by buffer pool which cannot grow, but we
+         don't offer a buffer pool. This would lead to stall when used with
+         element that don't implement allocation query.
+         Related to: https://bugzilla.gnome.org/show_bug.cgi?id=738302
+
+2015-01-12 16:10:45 +0100  Stefan Sauer <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From f2c6b95 to bc76a8b
+
+2014-12-22 11:46:27 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+       * MAINTAINERS:
+         MAINTAINERS: Update my mail address
+
+2014-12-18 10:54:30 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+       * common:
+         Automatic update of common submodule
+         From ef1ffdc to f2c6b95
+
+2014-11-27 17:11:30 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * common:
+         Automatic update of common submodule
+         From 7bb2bce to ef1ffdc
+
+2014-06-06 13:59:57 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+         dvdlpcmdec: set channel positions using the appropriate API
+         https://bugzilla.gnome.org/show_bug.cgi?id=731038
+
+2014-11-05 23:34:56 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: fix comment
+
+2014-11-05 13:45:29 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Send duration query upstream first
+         An upstream element (like mms or some dlna source) might be able to
+         answer the query. Try that first, else fallback to standard logic
+
+2014-11-02 17:31:05 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * gst/asfdemux/asfpacket.c:
+         asf: fix up file mode
+
+2014-10-27 17:58:14 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+       * common:
+         Automatic update of common submodule
+         From 84d06cd to 7bb2bce
+
+2014-10-21 19:46:03 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * Makefile.am:
+         tests: parallelise 'make check-valgrind'
+
+2014-10-21 13:02:03 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * common:
+         Automatic update of common submodule
+         From a8c8939 to 84d06cd
+
+2014-10-21 12:58:58 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+       * README:
+       * common:
+         Automatic update of common submodule
+         From 36388a1 to a8c8939
+
+2014-08-22 10:46:35 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: first try to delegate TIME seek events upstream
+         We should give a chance to upstream to handle TIME seek events before trying
+         to handle it in asfdemux.
+         Fix a bug where fast backward seeks where discarded right away because they
+         were not supported by asfdemux.
+         https://bugzilla.gnome.org/show_bug.cgi?id=734471
+
+2014-09-04 16:57:02 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+       * gst/asfdemux/asfheaders.c:
+       * gst/asfdemux/asfheaders.h:
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: add ASF_OBJ_METADATA_LIBRARY_OBJECT
+         We can safely ignore those but best to claim to understand this object type so
+         we don't raise a warning.
+         https://bugzilla.gnome.org/show_bug.cgi?id=736060
+
+2014-08-21 12:09:23 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: if video is h264, check the codec_data for bytestream data
+         For bytestream we don't want to expose it as codec_data but rather as
+         streamheader as it is not out-of-band data but data that should be
+         prepended to the beginning of the stream before the other buffers.
+         https://bugzilla.gnome.org/show_bug.cgi?id=735070
+
+2014-08-10 19:13:10 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+         docs: update for git master
+
+2014-08-06 12:07:09 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: simplify log statement
+         Use the GST_PTR_FORMAT to print the buffer
+
+2014-08-05 19:47:26 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/x264/gstx264enc.c:
+         x264: fix colour inversion with YV12 format
+         It's the same as I420 but with the U/V planes swapped.
+
+2014-08-01 10:37:44 +0200  Edward Hervey <edward@collabora.com>
+
+       * Makefile.am:
+       * common:
+         Makefile: Add usage of build-checks step
+         Allows building checks without running them
+
+2014-07-08 16:45:45 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Request buffers in allocation query
+         https://bugzilla.gnome.org/show_bug.cgi?id=732288
+
+2014-06-06 20:23:15 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264enc: Shift both PTS and DTS to ensure positive timestamp
+         Currently we only shift DTS to compensate that we don't support negative
+         timestamp. This cause a problem that PTS is no longer >= DTS and may
+         make muxers live much harder. Instead, shift both PTS/DTS forward. Also
+         remove all the hack to handle this which seems the result of thinking libx264
+         is bugged.
+         https://bugzilla.gnome.org/show_bug.cgi?id=731351
+
+2014-07-19 18:04:46 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * configure.ac:
+         Back to development
+
+=== release 1.4.0 ===
+
+2014-07-19 17:44:06 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.4.0
+
+2014-07-19 16:50:04 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2014-07-19 12:48:11 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/sv.po:
+         po: Update translations
+
+=== release 1.3.91 ===
+
+2014-07-11 11:44:28 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.3.91
+
+2014-07-11 11:13:39 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2014-07-11 08:53:12 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/vi.po:
+         po: Update translations
+
+2014-07-04 03:22:00 +0200  Sebastian Rasmussen <sebras@hotmail.com>
+
+       * gst/realmedia/rademux.c:
+         rademux: Print invalid fourcc in error message in hex
+         Previously this was printed as characters which caused later processing
+         of the error message to sometimes warn about non-UTF-8 characters.
+         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=732716
+
+=== release 1.3.90 ===
+
+2014-06-28 11:39:14 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.3.90
+
+2014-06-28 11:39:01 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2014-06-22 21:48:28 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * .gitignore:
+         Ignore autotools test-driver temp files from 'make check'
+
+2014-06-22 19:36:14 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * configure.ac:
+         Back to development
+
+=== release 1.3.3 ===
+
+2014-06-22 18:13:53 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.3.3
+
+2014-06-22 17:40:40 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2014-06-22 14:25:18 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/de.po:
+       * po/nl.po:
+         po: Update translations
+
+2014-05-26 17:55:43 -0300  Thiago Santos <ts.santos@sisa.samsung.com>
+
+       * gst/realmedia/rmdemux.c:
+       * gst/realmedia/rmdemux.h:
+         rmdemux: use GstFlowCombiner
+         Removes flow return combination code to use the newly added GstFlowCombiner
+         https://bugzilla.gnome.org/show_bug.cgi?id=709224
+
+2014-05-23 18:17:11 -0300  Thiago Santos <ts.santos@sisa.samsung.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: use GstFlowCombiner
+         Removes flow return combination code to use the newly added GstFlowCombiner
+         https://bugzilla.gnome.org/show_bug.cgi?id=709224
+
+2014-05-28 09:49:59 +0200  Aurélien Zanelli <aurelien.zanelli@parrot.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: fix caps leak in set_format()
+         https://bugzilla.gnome.org/show_bug.cgi?id=730865
+
+2013-12-01 20:53:03 +0100  Matej Knopp <matej.knopp@gmail.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Handle initial 0 timestamp that should have been -1
+         https://bugzilla.gnome.org/show_bug.cgi?id=719660
+
+2014-05-21 13:23:33 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * configure.ac:
+         Back to development
+
+=== release 1.3.2 ===
+
+2014-05-21 13:06:35 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * common:
+       * configure.ac:
+       * docs/plugins/inspect-build.stamp:
+       * docs/plugins/inspect.stamp:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.3.2
+
+2014-05-21 12:53:52 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2014-05-21 10:51:38 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * common:
+         Automatic update of common submodule
+         From 211fa5f to 1f5d3c3
+
+2014-05-16 16:24:46 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.h:
+         mpeg2dec: remove unused struct members
+
+2014-05-16 12:21:06 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * gst/realmedia/rtspreal.c:
+         rtspreal: Fix some memory leaks in an error path
+         CID 1212165.
+
+2014-05-09 14:54:54 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Release codec state on negotiation failures
+         Else it leaks
+         CID #1212169
+
+2014-05-03 20:48:37 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * configure.ac:
+         Back to development
+
+=== release 1.3.1 ===
+
+2014-05-03 18:29:23 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.3.1
+
+2014-05-03 18:21:01 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2014-05-03 17:23:39 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * po/de.po:
+       * po/id.po:
+       * po/lv.po:
+       * po/sk.po:
+       * po/sr.po:
+         po: Update translations
+
+2014-05-03 10:15:28 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+       * common:
+         Automatic update of common submodule
+         From bcb1518 to 211fa5f
+
+2014-04-27 00:29:16 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/sidplay/gstsiddec.cc:
+       * gst/asfdemux/gstrtspwms.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rdtmanager.c:
+       * gst/realmedia/rtspreal.c:
+         docs: remove outdated and pointless 'Last reviewed' lines from docs
+         They are very confusing for people, and more often than not
+         also just not very accurate. Seeing 'last reviewed: 2005' in
+         your docs is not very confidence-inspiring. Let's just remove
+         those comments.
+
+2014-04-10 17:29:30 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+       * gst/dvdsub/gstdvdsubdec.c:
+         dvdsubdec: fix spurious rejection of 0 time offset commands
+         Coverity 206168
+
+2014-04-10 16:53:25 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdread: avoid intermediate promotion to signed
+         We should not reach the dangerous range here, though.
+         Coverity 206491, 206492, 1139856
+
+2014-01-17 10:46:50 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: do not reset the whole video info when setting size
+         New changes to gstvideo will reset all the video info state
+         when calling _set_format, overwriting what was previously set
+         in the preceding code.
+         The comment says the following code is meant to preserve the
+         pre-crop size, so let's just keep the size and related data
+         as this does not seem to break anything else (this is what
+         the _set_format call would have set before the change that
+         reset all data, except the colorimetry).
+
+2014-04-03 15:06:22 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Fix payloads check
+         Don't iterate stream->payloads if ... it doesn't exist
+         CID #1139846
+
+2014-03-02 05:11:10 +0100  Sebastian Rasmussen <sebras@hotmail.com>
+
+       * .gitignore:
+         .gitignore: Ignore gcov intermediate files
+         https://bugzilla.gnome.org/show_bug.cgi?id=725483
+
+2014-02-28 09:35:10 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+       * common:
+         Automatic update of common submodule
+         From fe1672e to bcb1518
+
+2014-02-26 22:12:50 +0100  Stefan Sauer <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From 1a07da9 to fe1672e
+
+2014-02-26 11:31:03 +0100  Stefan Sauer <ensonic@users.sf.net>
+
+       * docs/Makefile.am:
+         docs: install prebuilt plugin docs if gtk-doc is disabled
+         Sync to the Makefile.am from gst-plugin-base where it is done right.
+         Fixes #725034
+
+2014-02-13 09:39:04 +0100  Stefan Sauer <ensonic@users.sf.net>
+
+       * gst/xingmux/gstxingmux.c:
+       * gst/xingmux/plugin.c:
+         xingmux: add muxer category and make element plugable
+         This is required to make encodebin consider the element. Yet it is not enough to
+         have it plugged it has a lower priority than most mp3encoders and no different
+         caps.
+
+2014-02-24 11:42:00 +0100  Dirk Van Haerenborgh <vhdirk@gmail.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: allow lossless compression (qp=0)
+         https://bugzilla.gnome.org/show_bug.cgi?id=725051
+
+2014-02-20 21:08:08 +0100  Edward Hervey <edward@collabora.com>
+
+       * m4/a52.m4:
+         m4: Remove extra check for 11+ year old a52 release
+         You deserve a build failure if you still have that version
+         If someone wants to completely remove this m4 to replace it with the
+         generic AS_GST_CHECK_LIBHEADER() it would be appreciated.
+
+2014-02-19 21:11:55 +0100  Rico Tzschichholz <ricotz@ubuntu.com>
+
+       * m4/a52.m4:
+         m4: Fix multiple tests in AC_CHECK_A52DEC
+
+2014-02-09 23:41:36 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Remove unused function
+
+2014-02-06 19:22:47 +0100  Edward Hervey <edward@collabora.com>
+
+       * tests/check/Makefile.am:
+         check: Fix test location
+
+2014-02-03 02:06:11 +0100  Sebastian Rasmussen <sebras@hotmail.com>
+
+       * tests/check/Makefile.am:
+         tests: Don't build disabled plugins' check tests
+         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=723505
+
+2014-01-30 10:44:29 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * common:
+         Automatic update of common submodule
+         From d48bed3 to 1a07da9
+
+2014-01-03 16:20:11 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: only add "format" field with fourcc to WMV caps
+         Doesn't make sense for e.g. H264 or MJPEG.
+
+2013-12-22 22:34:03 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * autogen.sh:
+       * common:
+         Automatic update of common submodule
+         From dbedaa0 to d48bed3
+
+2013-12-22 21:56:03 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * po/Makevars:
+         po: set gettext domain in Makevars so we don't have to patch the generated Makefile.in.in
+         https://bugzilla.gnome.org/show_bug.cgi?id=705455
+
+2013-12-05 12:16:45 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+       * ext/amrwbdec/amrwbdec.c:
+         amrwbdec: Remove some dead code
+
+2013-12-05 12:16:38 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+       * ext/amrnb/amrnbdec.c:
+         amrnbdec: Remove some dead code
+
+2013-12-05 12:09:04 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+       * ext/amrnb/amrnbdec.c:
+         amrnbdec: Use gst_audio_decoder_set_needs_format() instead of custom code
+
+2013-12-05 12:08:46 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+       * ext/amrwbdec/amrwbdec.c:
+         amrwbdec: Use gst_audio_decoder_set_needs_format() instead of custom code
+
+2013-12-05 11:44:10 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Use new gst_video_decoder_set_needs_format() API
+
+2013-11-29 15:51:49 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: fix compiler warning
+         Compiler warns rightly about possibly uninitialized variable.
+
+2013-11-29 15:49:29 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: fix crash on NULL caps when negotiation happens without a downstream peer
+         gst-launch-1.0 videotestsrc ! x264enc
+
+2013-11-11 13:15:54 +0100  Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: graceful degradation for badly parsed input
+
+2013-11-05 11:20:20 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+       * common:
+         Automatic update of common submodule
+         From 865aa20 to dbedaa0
+
+2013-10-22 16:02:04 +0900  HyeJin Choi <meeshel@meeshel78@hotmail.com>
+
+       * gst/asfdemux/asfpacket.c:
+         asfdemux: mo_size check bug fix. mo_size is not mandatory field.
+         So, don't need to check previous payload's mo_size and current
+         payload's mo_size when merging it.
+         https://bugzilla.gnome.org/show_bug.cgi?id=710609
+
+2013-10-22 15:03:15 -0300  Thiago Santos <ts.santos@partner.samsung.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: Keep audio error checking fields only for audio
+         Video shouldn't need to be descrambled, this can cause frames data
+         to be corrupted
+         https://bugzilla.gnome.org/show_bug.cgi?id=684942
+
+2013-10-22 00:56:29 -0300  Thiago Santos <ts.santos@partner.samsung.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: really copy the buffer data
+         Pass the copy-memory flag to copy the memory for the output buffer,
+         otherwise we end with 0-sized buffers
+         https://bugzilla.gnome.org/show_bug.cgi?id=684942
+
+2013-09-27 08:05:25 -0700  Michael Esemplare <michael.esemplare@gmail.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: If FPS is available, set VFR to false
+         https://bugzilla.gnome.org/show_bug.cgi?id=708940
+
+2013-09-24 10:08:10 -0700  Thiago Santos <ts.santos@partner.samsung.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Only use segment.start as seek_time if it is relative
+         Relying on the gst_segment_do_seek results for getting the
+         seeking time should not be used if seek type is SET because the
+         do_seek function makes the 'cur` position of the seek normalized
+         on the segment range. This means that seeking beyond the end of the
+         file might not result in instant EOS as it will end up seeking to
+         the final ts of the file.
+         In asf seeking to the final timestamp can lead to seeking to the last
+         keyframe, meaning a few seconds of video will still be played, which should
+         not be the desired behavior when seeking beyong file limits.
+
+2013-09-24 10:07:25 -0700  Thiago Santos <ts.santos@partner.samsung.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Parse last simple index entry
+         The entry size is fixed at 6, fix typo to finish parsing the index
+         correctly until the last sample
+
+2013-09-24 18:32:31 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * README:
+       * common:
+         Automatic update of common submodule
+         From 6b03ba7 to 865aa20
+
+2013-09-24 15:05:36 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * configure.ac:
+         configure: Actually use 1.3.0.1 as version to make configure happy
+
+2013-09-24 15:00:30 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * configure.ac:
+         Back to development
+
+=== release 1.2.0 ===
+
+2013-09-24 14:27:45 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.2.0
+
+2013-09-24 14:27:39 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2013-09-18 11:34:56 +0200  Andoni Morales Alastruey <ylatuya@gmail.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Update the documentation to match the default profile used
+         https://bugzilla.gnome.org/show_bug.cgi?id=708036
+
+2013-09-20 16:17:31 +0200  Edward Hervey <edward@collabora.com>
+
+       * common:
+         Automatic update of common submodule
+         From b613661 to 6b03ba7
+
+2013-09-19 18:43:43 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * common:
+         Automatic update of common submodule
+         From 74a6857 to b613661
+
+2013-09-19 17:36:25 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * autogen.sh:
+       * common:
+         Automatic update of common submodule
+         From 098c0d7 to 74a6857
+
+2013-09-19 11:35:04 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * configure.ac:
+         Back to development
+
+=== release 1.1.90 ===
+
+2013-09-19 10:50:32 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.1.90
+
+2013-09-19 10:30:37 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2013-09-19 09:45:55 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * po/cs.po:
+         po: Update translations
+
+2013-09-18 19:13:45 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+       * ext/x264/gstx264enc.c:
+       * tests/check/elements/x264enc.c:
+         x264enc: Implement getcaps that restricts the input format depending on the output profile
+         Also add some x264enc profile tests
+         https://bugzilla.gnome.org/show_bug.cgi?id=708326
+
+2013-09-16 19:38:36 +0200  Matej Knopp <matej.knopp@gmail.com>
+
+       * gst/asfdemux/asfpacket.c:
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: fix playback regression in push mode
+
+2013-09-10 19:33:33 -0300  Thiago Santos <thiago.sousa.santos@collabora.com>
+
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: remove unused variable
+
+2013-09-05 22:56:48 +0200  Mathieu Duponchelle <mathieu.duponchelle@epitech.eu>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Don't unref future state but the old one
+         Being silly will lead us nowhere.
+
+2013-09-04 16:32:43 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Check if we have an input state before using it
+         Flushing might happen before caps were set on the encoder,
+         which would lead to crashes here.
+         Thanks to Matej Knopp for analyzing this.
+         https://bugzilla.gnome.org/show_bug.cgi?id=707414
+
+2013-09-03 20:28:35 +0200  Matej Knopp <matej.knopp@gmail.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: fix unsigned comparison warning
+
+2013-08-28 13:27:05 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * configure.ac:
+         Back to development
+
+=== release 1.1.4 ===
+
+2013-08-28 12:58:43 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.1.4
+
+2013-08-28 12:58:37 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2013-08-28 12:32:37 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * po/pt_BR.po:
+         po: update translations
+
+2013-08-27 14:13:06 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: log when we output a lower profile than requested
+
+2013-08-21 18:32:17 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Consider subset relations of profiles when setting srcpad caps
+         constrained-baseline is a subset of baseline, is a subset of main,
+         is a subset of high profile.
+         https://bugzilla.gnome.org/show_bug.cgi?id=705425
+
+2013-08-21 12:31:23 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: propagate flow return back to base class and upstream
+         https://bugzilla.gnome.org/show_bug.cgi?id=705425
+
+2013-08-17 23:13:17 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * configure.ac:
+         configure: fix x264 version checking
+         x264 releases carry pkg-config versions such as 0.120.x
+         (literallly with an 'x'). Checking for x264 >= 0.120.0 will
+         then fail, so we need to either check for > 0.119.0 or
+         for >= 0.120 to make this work right.
+
+2013-08-17 23:09:15 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: minor clean-up
+         We requires x264 build >= 120 now.
+
+2013-08-15 15:30:31 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Fix mpeg2_reset() calls
+
+2013-08-15 15:27:48 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/x264/gstx264enc.c:
+         ext: Use new flush vfunc of video codec base classes and remove reset implementations
+
+2013-08-01 01:34:05 +0200  Matej Knopp <matej.knopp@gmail.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: fix build on C89 compilers
+
+2013-07-30 17:28:17 +0200  Matej Knopp <matej.knopp@gmail.com>
+
+       * gst/asfdemux/asfpacket.c:
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: fix seeking in push mode
+
+2013-08-02 14:14:48 +0200  Lubosz Sarnecki <lubosz@gmail.com>
+
+       * configure.ac:
+         build: add subdir-objects to AM_INIT_AUTOMAKE
+         Fixes warnings in automake 1.14
+         https://bugzilla.gnome.org/show_bug.cgi?id=705350
+
+2013-08-02 08:25:49 +0200  Edward Hervey <edward@collabora.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Do a hard reset of flush_stop
+         Which is notified by hard == 0 with latest refactoring.
+
+2013-07-29 21:09:37 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * po/LINGUAS:
+       * po/da.po:
+       * po/de.po:
+       * po/gl.po:
+       * po/hr.po:
+       * po/hu.po:
+       * po/ja.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/pl.po:
+       * po/ru.po:
+       * po/sl.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+         po: update translations
+
+2013-07-29 14:48:21 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * configure.ac:
+         Back to development
+
+=== release 1.1.3 ===
+
+2013-07-29 13:46:08 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.1.3
+
+2013-07-29 13:46:05 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2013-07-29 12:13:17 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rmdemux.c:
+         gst: Don't swap start/stop for negative rates in the SEGMENT query
+
+2013-07-29 10:57:38 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rmdemux.c:
+         real: Implement SEGMENT query
+
+2013-07-29 10:56:06 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Implement SEGMENT query
+
+2013-07-28 16:43:28 +0200  Matej Knopp <matej.knopp@gmail.com>
+
+       * gst/asfdemux/asfheaders.c:
+       * gst/asfdemux/asfheaders.h:
+       * gst/asfdemux/asfpacket.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: Add support for dvr-ms
+         https://bugzilla.gnome.org/show_bug.cgi?id=705026
+
+2013-07-26 16:47:48 +0200  Edward Hervey <edward@collabora.com>
+
+       * gst/realmedia/rtspreal.c:
+         rtspreal: Ensure output value has an assigned value
+         In the case where this macro was used, that dest was != NULL but that
+         the strncmp failed, we would end up with dest_len being undefined.
+
+2013-07-26 16:39:12 +0200  Edward Hervey <edward@collabora.com>
+
+       * ext/x264/gstx264enc.c:
+         x264: Fix dts comparision
+         We were assigning to a guint64 value (frame->dts) the sum of a unsigned
+         and signed value... resulting it the result never being < 0.
+         Instead just check if it is smaller before assigning to frame->dts.
+
+2013-07-25 11:28:54 -0300  Thiago Santos <thiago.sousa.santos@collabora.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: fix seqnum handling for seeks
+         Use the same seqnum as the seek for flushes/segments that are
+         caused by the seek. Also do the same for segment events
+         Fixes #676242
+
+2013-07-25 13:35:44 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Clean up reset/start/stop handling
+
+2013-07-25 11:01:20 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: React properly to flushing/resetting the encoder
+         https://bugzilla.gnome.org/show_bug.cgi?id=656007
+
+2013-07-22 16:01:13 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rademux.h:
+       * gst/realmedia/rmdemux.c:
+       * gst/realmedia/rmdemux.h:
+         realmedia: Add support for group-id in the stream-start event
+
+2013-07-22 15:45:57 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: Add support for group-id in the stream-start event
+
+2013-07-22 15:43:18 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * ext/sidplay/gstsiddec.cc:
+       * ext/sidplay/gstsiddec.h:
+         siddec: Add support for group-id in the stream-start event
+
+2013-07-18 17:14:29 +0200  Edward Hervey <edward@collabora.com>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: Mark demuxer as "running" in push-mode
+         Allows queries (and other code) to be answered when working in push-mode.
+         Running would only be set to TRUE accordingly when working in pull-mode
+         once it had read header/index.
+         Fixes #680185
+
+2013-07-17 16:17:54 +0200  Edward Hervey <edward@collabora.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Properly reset on sequence changes
+         Otherwise we end up using stray data/buffers.
+         Fixes #690701
+
+2013-07-11 16:57:24 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * configure.ac:
+         Back to development
+
+=== release 1.1.2 ===
+
+2013-07-11 16:12:25 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.1.2
+
+2013-07-11 16:12:21 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2013-06-18 20:06:24 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdreadsrc: correctly determine last chapter's duration
+         This (mostly) reverts 683f5eeae7b830e4e4b790f3817ff6b8ce517b1c.
+         It worked just fine before ...
+
+2013-06-25 14:20:37 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/realmedia/rdtmanager.c:
+         rdt: forward sticky events
+
+2013-06-05 18:36:40 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+         Back to development
+
+=== release 1.1.1 ===
+
+2013-06-05 17:58:51 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * common:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.1.1
+
+2013-06-05 16:42:01 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2013-06-05 15:15:16 +0200  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * common:
+         Automatic update of common submodule
+         From 098c0d7 to 01a7a46
+
+2013-06-04 16:12:27 +0300  Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: make the aspect ratio calculation more accurate.
+         Utilize the libmpeg2 api: mpeg2_guess_aspect() to guess the
+         aspect-ratio if we don't have a valid upstream PAR.
+         https://bugzilla.gnome.org/show_bug.cgi?id=685103
+
+2013-05-15 10:52:09 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 5edcd85 to 098c0d7
+
+2013-05-13 13:19:27 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * tests/check/elements/amrnbenc.c:
+       * tests/check/elements/mpeg2dec.c:
+       * tests/check/elements/x264enc.c:
+       * tests/check/elements/xingmux.c:
+         tests: Fix event handling
+
+2013-05-09 19:40:49 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+       * ext/lame/gstlamemp3enc.c:
+         lamemp3enc: Tell GstAudioEncoder about the number of incoming samples
+         lame does internal resampling, but the base class only cares about
+         the number of raw samples, so tell finish frames about that, not
+         the number of samples in the outgoing frame.:
+
+2013-04-30 10:01:29 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: output byte-stream if downstream has ANY caps
+         It's what people expect when they pipe the output to
+         filesink or into a tcp connection or pipe.
+
+2013-04-22 23:52:48 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * MAINTAINERS:
+       * README:
+       * README.static-linking:
+       * common:
+         Automatic update of common submodule
+         From 3cb3d3c to 5edcd85
+
+2012-10-24 12:15:54 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+       * ext/a52dec/Makefile.am:
+       * ext/amrnb/Makefile.am:
+       * ext/amrwbdec/Makefile.am:
+       * ext/cdio/Makefile.am:
+       * ext/dvdread/Makefile.am:
+       * ext/lame/Makefile.am:
+       * ext/mad/Makefile.am:
+       * ext/mpeg2dec/Makefile.am:
+       * ext/sidplay/Makefile.am:
+       * ext/twolame/Makefile.am:
+       * ext/x264/Makefile.am:
+       * gst/asfdemux/Makefile.am:
+       * gst/dvdlpcmdec/Makefile.am:
+       * gst/dvdsub/Makefile.am:
+       * gst/realmedia/Makefile.am:
+       * gst/xingmux/Makefile.am:
+         gst: Add better support for static plugins
+
+2013-04-14 17:55:44 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * autogen.sh:
+       * common:
+         Automatic update of common submodule
+         From aed87ae to 3cb3d3c
+
+2013-04-09 21:00:43 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From 04c7a1e to aed87ae
+
+2013-03-25 18:05:14 -0700  David Schleef <ds@schleef.org>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/realmedia/rmdemux.c:
+         Use %03u instead of %u in gst_pad_create_stream_id_printf()
+
+2013-03-06 13:28:37 +0000  Tom Greenwood <tgreenwood@Toms-MacBook-Pro.local>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Fix for 0/1 framerate - now uses VFR in this case
+         Previously did a division by zero.
+         https://bugzilla.gnome.org/show_bug.cgi?id=695728
+
+2013-03-07 00:02:00 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+       * common:
+         Automatic update of common submodule
+         From 2de221c to 04c7a1e
+
+2013-02-08 00:15:01 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: simplify template caps
+         No need to make an array for one single element.
+
+2013-02-08 00:11:03 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: put all theoretically possible formats in template caps
+         and decide at runtime which subset of these (8-bit or 10-bit video
+         formats) is supported. libx264 will be compiled for one of these
+         two options, and it is possible to switch by pointing the dynamic
+         linker to a different libx264 build at runtime. If we want our
+         template caps to be correct, they should contain all then, with
+         the actually supported ones determined at runtime.
+         https://bugzilla.gnome.org/show_bug.cgi?id=691935
+
+2013-01-23 10:16:51 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: detect supported bit depth and pixel formats at runtime
+         http://bugs.debian.org/667573
+         https://bugzilla.gnome.org/show_bug.cgi?id=691935
+
+2013-01-30 09:15:18 +0100  Benjamin Gaignard <benjamin.gaignard@st.com>
+
+       * autogen.sh:
+         autogen.sh: allow calling from out-of-tree
+         Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>
+         https://bugzilla.gnome.org/show_bug.cgi?id=692857
+
+2013-01-28 20:43:08 +0100  Stefan Sauer <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From a942293 to 2de221c
+
+2013-01-15 15:18:04 +0100  Martin Pitt <martinpitt@gnome.org>
+
+       * tests/check/Makefile.am:
+         tests: use _1_0 variants for the various registry variables
+         These override the variants without version suffix. Makes 'make check' work
+         properly in environments that set the suffixed variant for 1.0, such as
+         jhbuild.
+
+2013-01-15 15:06:41 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From a72faea to a942293
+
+2012-12-30 23:56:14 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+       * configure.ac:
+         configure: replace deprecated AM_CONFIG_HEADER with AC_CONFIG_HEADERS
+         AM_CONFIG_HEADER has been removed in the just-released automake 1.13:
+         https://lists.gnu.org/archive/html/automake/2012-12/msg00038.html
+         https://bugzilla.gnome.org/show_bug.cgi?id=690881
+
+2012-12-19 17:16:53 +0100  Thijs Vermeir <thijsvermeir@gmail.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: use appropriate printf format for gsize
+
+2012-12-19 17:15:03 +0100  Thijs Vermeir <thijsvermeir@gmail.com>
+
+       * ext/cdio/gstcdio.h:
+         cdio: Fix redundant redeclaration of 'cdio_version_string'
+         cdio/version.h is already included by cdio/cdio.h
+
+2012-12-01 13:26:26 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/sidplay/gstsiddec.cc:
+         siddec: init debug category
+
+2012-11-30 20:09:03 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * ext/dvdread/Makefile.am:
+         dvdread: link to libgmodule-2.0 since the g_module_* API is used
+         And the gmodule lib has been moved into the Requires.private
+         section of the pkg-config file in core.
+
+2012-11-27 17:07:31 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+       * ext/cdio/gstcdiocddasrc.c:
+       * ext/cdio/gstcdiocddasrc.h:
+         cdiocddasrc: detect whether drive produces samples in non-host endianness
+         If drive produces samples in other endianness than the host,
+         we need to byte swap them before pushing them out, or we
+         produce nothing but noise. cdparanoia detects this automatically,
+         but libcdio does not, so we have to do it ourselves.
+         This is needed on e.g. the PowerBook G4 with Matshita UJ-816 drive.
+         https://bugzilla.gnome.org/show_bug.cgi?id=377280
+
+2012-11-19 11:27:21 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+       * common:
+         Automatic update of common submodule
+         From b497c4f to a72faea
+
+2012-11-16 13:32:00 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * tests/check/elements/xingmux_testdata.h:
+         xingmux: Fix unit test after change to correctly calculate number of frames
+
+2012-11-15 16:42:09 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Add support for 10-bit color formats
+         Requires x264 to be built with 10-bit support, which disables
+         9-bit support. Also only advertise the color formats that were
+         compiled into x264.
+
+2012-11-15 16:21:49 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Add support for Y444, Y42B and NV12
+
+2012-11-11 20:42:42 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+       * ext/cdio/Makefile.am:
+       * ext/cdio/gstcdio.c:
+         cdio: use gst_tag_freeform_string_to_utf8() for CD-TEXT strings
+         They're probably not going to be UTF-8, but ISO-8859-1 or somesuch
+         if they're not plain ASCII.
+
+2012-11-09 11:33:40 +0100  Gautier Portet <kassoulet@gmail.com>
+
+       * gst/xingmux/gstxingmux.c:
+         xingmux: Properly calculate the number of frames
+         First, the xing header frame is never added to the count,
+         we have to increment the count.
+         Secondly, there is a rounding error when calculating the
+         frame duration, as spf*GST_SECOND/rate is not an integer
+         (26122448.9) an it must be 26122449.
+
+2012-11-07 20:45:38 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+       * configure.ac:
+         configure.ac: update courtesy of autoupdate
+
+2012-11-07 20:39:56 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+       * common:
+       * configure.ac:
+         configure: let AG_GST_PLUGIN_DOCS check for python
+         And update common for move from AS_PATH_PYTHON to AM_PATH_PYTHON,
+         which as a side-effect should pick up newer python versions as
+         well.
+         https://bugzilla.gnome.org/show_bug.cgi?id=563903
+
+2012-11-05 13:16:52 -0800  Michael Smith <msmith@rdio.com>
+
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+         dvdlpcmdec: Fix parsing of headers to set correct width to allow decode.
+
+2012-11-03 20:38:00 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+       * tests/check/elements/mpg123audiodec.c:
+         Fix FSF address
+         https://bugzilla.gnome.org/show_bug.cgi?id=687520
+
+2012-11-03 20:40:37 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+       * docs/random/LICENSE:
+       * ext/a52dec/gsta52dec.c:
+       * ext/a52dec/gsta52dec.h:
+       * ext/amrnb/amrnb.c:
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbdec.h:
+       * ext/amrnb/amrnbenc.c:
+       * ext/amrnb/amrnbenc.h:
+       * ext/amrwbdec/amrwb.c:
+       * ext/amrwbdec/amrwbdec.c:
+       * ext/amrwbdec/amrwbdec.h:
+       * ext/cdio/gstcdio.c:
+       * ext/cdio/gstcdio.h:
+       * ext/cdio/gstcdiocddasrc.c:
+       * ext/cdio/gstcdiocddasrc.h:
+       * ext/dvdread/dvdreadsrc.c:
+       * ext/dvdread/dvdreadsrc.h:
+       * ext/lame/gstlamemp3enc.c:
+       * ext/lame/gstlamemp3enc.h:
+       * ext/lame/plugin.c:
+       * ext/mad/gstmad.c:
+       * ext/mad/gstmad.h:
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/mpeg2dec/gstmpeg2dec.h:
+       * ext/sidplay/gstsiddec.cc:
+       * ext/sidplay/gstsiddec.h:
+       * ext/twolame/gsttwolamemp2enc.c:
+       * ext/twolame/gsttwolamemp2enc.h:
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+       * gst-libs/gst/gettext.h:
+       * gst-libs/gst/glib-compat-private.h:
+       * gst-libs/gst/gst-i18n-plugin.h:
+       * gst/asfdemux/asfheaders.c:
+       * gst/asfdemux/asfheaders.h:
+       * gst/asfdemux/asfpacket.c:
+       * gst/asfdemux/asfpacket.h:
+       * gst/asfdemux/gstasf.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+       * gst/asfdemux/gstrtpasfdepay.c:
+       * gst/asfdemux/gstrtpasfdepay.h:
+       * gst/asfdemux/gstrtspwms.c:
+       * gst/asfdemux/gstrtspwms.h:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+       * gst/dvdsub/gstdvdsubdec.c:
+       * gst/dvdsub/gstdvdsubdec.h:
+       * gst/dvdsub/gstdvdsubparse.c:
+       * gst/dvdsub/gstdvdsubparse.h:
+       * gst/realmedia/asmrules.c:
+       * gst/realmedia/asmrules.h:
+       * gst/realmedia/gstrdtbuffer.c:
+       * gst/realmedia/gstrdtbuffer.h:
+       * gst/realmedia/pnmsrc.c:
+       * gst/realmedia/pnmsrc.h:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rademux.h:
+       * gst/realmedia/rdtdepay.c:
+       * gst/realmedia/rdtdepay.h:
+       * gst/realmedia/rdtjitterbuffer.c:
+       * gst/realmedia/rdtjitterbuffer.h:
+       * gst/realmedia/rdtmanager.c:
+       * gst/realmedia/rdtmanager.h:
+       * gst/realmedia/realhash.c:
+       * gst/realmedia/realhash.h:
+       * gst/realmedia/realmedia.c:
+       * gst/realmedia/rmdemux.c:
+       * gst/realmedia/rmdemux.h:
+       * gst/realmedia/rmutils.c:
+       * gst/realmedia/rmutils.h:
+       * gst/realmedia/rtspreal.c:
+       * gst/realmedia/rtspreal.h:
+       * gst/xingmux/gstxingmux.c:
+       * gst/xingmux/gstxingmux.h:
+       * gst/xingmux/plugin.c:
+       * tests/check/elements/amrnbenc.c:
+       * tests/check/elements/mpeg2dec.c:
+       * tests/check/elements/x264enc.c:
+       * tests/check/generic/index.c:
+       * tests/check/generic/states.c:
+       * tests/check/pipelines/lame.c:
+         Fix FSF address
+         https://bugzilla.gnome.org/show_bug.cgi?id=687520
+
+2012-10-30 13:39:52 +0100  Andreas Frisch <fraxinas@opendreambox.org>
+
+       * gst/dvdsub/gstdvdsubdec.c:
+         dvdsubdec: allocate correct amount of memory for bitmap
+         https://bugzilla.gnome.org/show_bug.cgi?id=687192
+
+2012-10-30 09:27:24 +0100  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+       * ext/mpg123/gstmpg123audiodec.c:
+         mpg123: removed unnecessary finalize function
+         https://bugzilla.gnome.org/show_bug.cgi?id=687176
+
+2012-10-30 09:20:04 +0000  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/sidplay/gstsiddec.cc:
+         siddec: reset bytes counter
+         Reset the total_bytes counter so that we get timestamps correct.
+         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=686931
+
+2012-10-30 10:20:09 +1100  Jan Schmidt <thaytan@noraisin.net>
+
+       * ext/mpg123/gstmpg123audiodec.c:
+         mpg123: Fix leaks from not chaining up in the finalize function
+
+2012-10-25 12:38:47 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * win32/common/config.h:
+         Back to feature development
+
+=== release 1.0.2 ===
+
+2012-10-25 01:11:10 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.0.2
+
+2012-10-24 13:41:00 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * tests/check/elements/mpg123audiodec.c:
+         tests: fix up mpg123 test a little
+         - dist input files
+         - fix sample leak
+         - simplify check for elements
+         - only run mpg123 test if mpg123 is available and selected
+         - fix build in uninstalled setup
+         https://bugzilla.gnome.org/show_bug.cgi?id=686595
+
+2012-10-24 12:30:10 +0200  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+       * tests/check/elements/mpg123audiodec.c:
+         tets: add unit test for mpg123audiodec
+         https://bugzilla.gnome.org/show_bug.cgi?id=686595
+
+2012-10-24 00:36:42 +0200  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+       * ext/mpg123/gstmpg123audiodec.c:
+         mpg123: added gtkdoc section
+         https://bugzilla.gnome.org/show_bug.cgi?id=686595
+
+2012-10-24 00:22:05 +0200  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+       * ext/mpg123/gstmpg123audiodec.c:
+         mpg123: fixed bug with last frame, disabled internal resampler & chatter
+         * The last MP3 frame wasn't being pushed when base class was draining
+         * Made sure mpg123 cannot ever use its (crude) internal resampler
+         * Disabled mpg123 stderr output
+         https://bugzilla.gnome.org/show_bug.cgi?id=686595
+
+2012-10-24 20:10:03 +0800  Scott Fan <fanchp@neusoft.com>
+
+       * gst/asfdemux/Makefile.am:
+       * gst/realmedia/Makefile.am:
+         Makefile.am: Fix typos for generating the Android.mk files
+         Change libgstasfdemux to libgstasf, and change libgstrealmedia to libgstrmdemux.
+         The typos led to generate the incorrect Android.mk files for the asfdemux
+         and realmedia plugin.
+         https://bugzilla.gnome.org/show_bug.cgi?id=686748
+
+2012-10-24 00:21:45 +0200  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+       * ext/mpg123/gstmpg123audiodec.c:
+         mpg123: cleaned up comments, formatting, and logging lines
+         also replaced mpg123decoder->handle != NULL checks with asserts
+         https://bugzilla.gnome.org/show_bug.cgi?id=686595
+
+2012-10-18 22:19:04 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdreadsrc: correctly set next cell when seeking to sector
+
+2012-10-18 22:18:28 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/dvdsub/gstdvdsubparse.c:
+         dvdsubparse: send src caps when receiving sink caps
+
+2012-10-12 14:49:28 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdreadsrc: update dvd event to enhanced approach
+         ... in line with resindvdsrc.
+
+2012-10-07 17:08:37 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * docs/Makefile.am:
+         docs: add 'make upload' target for new-release script
+
+2012-10-07 16:58:10 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * win32/common/config.h:
+         Back to development (bug fixing)
+
+=== release 1.0.1 ===
+
+2012-10-07 16:13:11 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.0.1
+
+2012-10-06 14:58:34 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * common:
+         Automatic update of common submodule
+         From 6c0b52c to 6bb6951
+
+2012-10-01 00:01:09 +1000  Jan Schmidt <thaytan@noraisin.net>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Don't error out when there is no associated buffer
+         In 0.10, having mpeg2dec occasionally tell us to output a frame that
+         was never decoded was just ignored, so do the same in 1.0
+         Fixes: #685107
+
+2012-09-29 12:13:00 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * REQUIREMENTS:
+       * gst/dvdsub/gstdvdsubdec.c:
+         Purge mention of liboil and update REQUIREMENTS
+         https://bugzilla.gnome.org/show_bug.cgi?id=673285
+
+2012-09-26 01:04:32 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: when setting fallback decoder latency, set valid min_latency
+         Min. latency needs to be a valid time, so pass 0 as default
+         value in the fallback case where we can't determine any latency,
+         and avoid nasty criticals at runtime.
+
+2012-09-24 16:52:23 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * win32/common/config.h:
+         Back to development (bug fixing)
+
+=== release 1.0.0 ===
+
+2012-09-24 14:32:12 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 1.0.0
+
+2012-09-22 16:08:54 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * common:
+         Automatic update of common submodule
+         From 4f962f7 to 6c0b52c
+
+=== release 0.11.99 ===
+
+2012-09-17 17:59:57 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * docs/plugins/inspect/plugin-xingmux.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 0.11.99
+
+2012-09-17 16:57:53 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+         docs: update docs
+
+2012-09-17 16:57:30 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * ext/amrnb/Makefile.am:
+       * ext/amrwbdec/Makefile.am:
+       * ext/lame/Makefile.am:
+       * ext/twolame/Makefile.am:
+       * tests/check/Makefile.am:
+         Remove -DGST_USE_UNSTABLE_API
+
+2012-09-17 12:22:51 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+         Update docs
+
+2012-09-17 10:53:12 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/cdio/gstcdio.c:
+         cdio: work around cdio headers re-defining VERSION and PACKAGE_VERSION
+         Thanks guys. Fixes plugin version in gst-inspect-1.0 and docs
+         introspection/updating for this plugin.
+
+2012-09-15 22:23:53 +0200  Christian Fredrik Kalager Schaller <uraeus@linuxrisin.org>
+
+       * gst-plugins-ugly.spec.in:
+         Switch to F18 package naming
+
+2012-09-14 16:28:54 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/dvdread/demo-play:
+       * tests/check/elements/mpeg2dec.c:
+         rename some caps and elements in examples
+
+2012-09-14 02:58:26 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * configure.ac:
+         Back to development
+
+=== release 0.11.94 ===
+
+2012-09-14 02:49:34 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * ChangeLog:
+       * configure.ac:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 0.11.94
+
+2012-09-14 01:48:50 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+       * docs/plugins/gst-plugins-ugly-plugins.signals:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+         docs: update docs
+
+2012-09-13 13:49:33 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: use DTS and PTS
+         Video uses DTS as timestamps. Set the DTS on the buffers and leave the PTS
+         undefined to make the decoder do the right thing. We can then remove the code
+         that tries to guess the PTS from the DTS.
+
+2012-09-10 22:30:18 -0700  Jan Schmidt <thaytan@noraisin.net>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Hold ref to buffer while mapped
+         So that the buffer still exists when we go to unmap it later,
+         even if it got pushed in the meantime.
+
+2012-09-11 16:48:51 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+       * tests/check/elements/x264enc.c:
+         x264enc test: x264enc produces constrained-baseline, not the full baseline
+
+2012-09-11 17:37:03 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rmdemux.c:
+         gst: only activate in pull mode if upstream is seekable
+
+2012-09-11 11:28:06 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/realmedia/rademux.c:
+         rademux: tags can be NULL
+
+2012-09-11 11:13:31 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+         mad: fix email address
+
+2012-09-11 11:12:38 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+         mad: init base class method only once
+
+2012-09-11 10:46:52 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/xingmux/gstxingmux.c:
+         xingmux: remove defunct commented code
+
+2012-09-11 10:40:01 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/dvdsub/gstdvdsubdec.c:
+         dvbsubdec: handle and send GAP event
+         ... in stead of update newsegment event.
+
+2012-09-11 10:34:40 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/dvdsub/gstdvdsubdec.c:
+         dvbsubdec: adjust disabled code comment style
+
+2012-09-09 15:48:57 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: clean up some debug statements
+
+2012-09-07 17:38:18 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264enc: handle possibly negative DTS provided by codec
+         ... by arranging for an offset such that DTS == PTS for keyframes,
+         which is expected elsewhere to go along with semantics of PTS and DTS.
+         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=679443
+
+2012-09-07 13:31:15 +0200  Christian Fredrik Kalager Schaller <uraeus@linuxrisin.org>
+
+       * gst-plugins-ugly.spec.in:
+         Fix spec file for ugly
+
+2012-09-06 14:42:51 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * tests/check/elements/mpeg2dec.c:
+         tests: mpeg2dec: initialize variable
+         ... which avoids test segfaulting.
+
+2012-08-30 16:26:00 -0700  Edward Hervey <edward@collabora.com>
+
+       * tests/check/elements/mpeg2dec.c:
+         check: Feed parsed data to mpeg2dec
+         And fix the expected output caps by adding colorimetry field
+
+2012-08-22 13:31:00 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From 668acee to 4f962f7
+
+2012-08-22 13:19:01 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+       * configure.ac:
+         configure: bump gtk-doc req to 1.12 (mar-2009)
+         This allows us to e.g. unconditionally use gtkdoc-rebase.
+
+2012-08-20 23:32:32 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * gst/dvdsub/gstdvdsubdec.c:
+       * gst/dvdsub/gstdvdsubparse.c:
+         video/x-dvd-subpicture -> subpicture/x-dvd
+
+2012-08-09 16:30:10 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Use new video encoder base class API for handling tags
+
+2012-08-09 11:48:39 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/mpg123/gstmpg123audiodec.c:
+         mpg123: Give MARGINAL rank to the mpg123 decoder element
+
+2012-08-08 16:27:45 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/dvdsub/gstdvdsubdec.c:
+         dvdsubdec: Set alignment at the correct place of GstAllocationParams
+
+2012-08-08 16:26:41 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * win32/common/config.h:
+         Back to development
+
+=== release 0.11.93 ===
+
+2012-08-08 15:23:53 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 0.11.93
+
+2012-08-08 15:23:27 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/asfdemux/asfpacket.c:
+       * gst/realmedia/rmdemux.c:
+         gst: silence some compiler warnings with -DG_DISABLE_ASSERT
+
+2012-08-08 12:58:50 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * ext/mpg123/Makefile.am:
+         mpg123: dist header file
+
+2012-08-06 15:31:50 +0300  Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+       * gst/asfdemux/asfpacket.c:
+         asfdemux: avoid some more invalid timestamp arithmetic
+         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=681291
+
+2012-08-05 18:30:52 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/sidplay/gstsiddec.cc:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rmdemux.c:
+         gst: Add stream-id to stream-start events
+
+2012-07-27 11:35:52 +0200  Edward Hervey <edward@collabora.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Don't use NULL values for fbuf
+         We need to make a difference between the initial dummy buffers (which
+         have a fbuf->id of NULL) and the buffers on which we allocated
+         video frames.
+
+2012-08-05 16:40:57 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * common:
+         Automatic update of common submodule
+         From 94ccf4c to 668acee
+
+2012-08-04 16:13:36 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/lame/gstlamemp3enc.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rmdemux.c:
+       * gst/realmedia/rmutils.c:
+         gst_tag_list_free -> gst_tag_list_unref
+
+2012-08-03 13:43:31 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/mpg123/gstmpg123audiodec.c:
+         mpg123: map input buffer in READ mode, not WRITE mode
+         Makes things actually work.
+
+2012-08-03 11:50:10 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/mpg123/gstmpg123audiodec.c:
+         mpg123: query supported output formats at run-time
+         Fixes stuff. We use a string here since we can't be bothered
+         with GValue.
+
+2012-08-03 11:48:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/mpg123/Makefile.am:
+         mpg123: hook up to build system
+
+2012-08-03 11:13:48 +0100  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+       * ext/mpg123/gstmpg123audiodec.c:
+       * ext/mpg123/gstmpg123audiodec.h:
+         mpg123: add new libmpg123-based mp3 decoder plugin
+         Needs a bit of cleaning up.
+         https://bugzilla.gnome.org/show_bug.cgi?id=681003
+
+2012-07-28 00:28:27 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/sidplay/gstsiddec.cc:
+       * ext/x264/gstx264enc.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rmdemux.c:
+         tag: Update for taglist/tag event API changes
+
+2012-07-26 18:30:04 +0200  Edward Hervey <edward@collabora.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Avoid dropping first GOP
+         We use the mpeg2_fbuf_t id field as an integer and not as a pointer, so
+         do not check if it is NULL or not.
+         And cleanup a bit of debug
+
+2012-07-25 13:05:17 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/realmedia/rdtmanager.c:
+       * gst/realmedia/rdtmanager.h:
+         rdt: add on-npt-stop signal
+         rtspsrc will look for it.
+
+2012-07-25 12:48:21 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/realmedia/rdtmanager.c:
+         rdt: set caps after activating the pad
+
+2012-07-25 12:48:06 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/realmedia/gstrdtbuffer.c:
+         rdt: reset map info
+
+2012-07-25 09:37:08 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstrtpasfdepay.c:
+         asfdepay: fix padding correction
+         Fix padding correction. gst_buffer_copy_into() appends the memory to the already
+         existing memory in the target buffer..
+         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=680536
+
+2012-07-23 13:32:26 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: copy buffer flags when cropping
+         When we crop a buffer, copy the flags as well.
+
+2012-07-23 11:25:34 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Fix GstVideoInfo pointer
+
+2012-07-23 11:13:05 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Correctly flag output buffer interlaced state
+         If the sequence is not flagged as progressive its buffers are marked
+         interlace mode mixed. There is an individual picture flag indicating
+         whether picture in the sequence are interlaced or not. This is used
+         along with the new GST_VIDEO_BUFFER_FLAG_INTERLACED to correctly and
+         completely indicate the buffer's interlaced state.
+         Also, TFF and RFF should only be set if the sequence is not progressive.
+
+2012-07-23 10:33:33 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         ext: Update for video base classes API changes
+
+2012-07-23 08:45:55 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 98e386f to 94ccf4c
+
+2012-07-20 16:12:45 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/asfdemux/asfpacket.c:
+         asfdemux: make sure to avoid arithmetic with _NONE timestamp
+
+2012-07-16 17:36:19 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * gst/asfdemux/asfpacket.c:
+         asfdemux: convert invalid 0 payload TS into GST_CLOCK_TIME_NONE
+         ... so it does not get used as first (valid) payload ts, whereas
+         the first real valid payload ts may be considerably larger.
+         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=679838
+
+2012-07-20 14:41:57 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: slightly relax supported seek requirements
+         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=680279
+
+2012-07-19 09:58:50 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Propagate GstFlowReturn where needed
+         It was just ignoring the return values...
+
+2012-07-19 09:56:17 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Store temporary buffers out of the way
+         When mpeg2dec needs to do cropping (because downstream can't handle it),
+         we need temporary buffers to decode to.
+         Use the user_data field to store those, and unify the rest of the code
+         that needs to touch a buffer (regardless of how/where it was allocated).
+         https://bugzilla.gnome.org/show_bug.cgi?id=680194
+
+2012-07-18 18:32:54 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Call gst_video_decoder_negotiate()
+
+2012-07-18 17:21:27 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: give stream tags a different event name so they don't overwrite global tags
+         There can only be one taglist per name for sticky tag events.
+         Needs to be fixed more properly, see
+         https://bugzilla.gnome.org/show_bug.cgi?id=677619
+
+2012-07-18 16:49:47 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/realmedia/rademux.c:
+         rademux: set/send caps on pad after activating it
+
+2012-07-18 16:46:46 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: set/send caps after activating the source pads
+         Makes sure the caps event isn't dropped immediately.
+
+2012-07-17 20:54:45 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdreadsrc: mustn't drop queries like caps query if not started yet
+
+2012-07-15 20:12:46 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: extract WM/Year as GstDateTime instead of GDate
+         So we can signal that only the year field is valid.
+
+2012-07-13 15:41:05 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: don't leak payload if we are not pushing it
+
+2012-07-13 13:59:16 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+       * ext/sidplay/gstsiddec.cc:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rmdemux.c:
+         demuxers: Push STREAM_START when needed
+
+2012-07-13 11:36:40 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asf: don't push on inactive streams
+
+2012-07-12 18:05:10 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdreadsrc: set rank to NONE
+         It should never be autoplugged really, for DVD
+         playback there's rsndvd (or will be, realsoonnow).
+
+2012-07-09 16:27:25 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         fix for allocator API changes
+
+2012-07-06 11:50:55 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         update for query api changes
+
+2012-07-06 11:27:27 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         update for query api changes
+
+2012-07-06 11:03:19 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         update for allocation query changes
+
+2012-07-05 23:23:33 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * LICENSE_readme:
+         LICENSE_readme: fix typo
+
+2012-07-05 22:48:18 +0100  Tim-Philipp Müller <tim@centricular.net>
+
+       * LICENSE_readme:
+         LICENSE_readme: mention x264
+         https://bugzilla.gnome.org/show_bug.cgi?id=679472
+
+2012-07-05 13:12:17 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rmdemux.c:
+         gst: Implement segment-done event
+
+2012-06-27 11:23:36 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asf: fix x-wmv format in caps
+
+2012-06-27 10:24:45 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/asfpacket.c:
+         asf: unmap packets
+
+2012-06-21 15:13:57 +0100  Bastien Nocera <hadess@hadess.net>
+
+       * gst/asfdemux/asfpacket.c:
+       * gst/asfdemux/asfpacket.h:
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Ignore parsing errors from broken packets
+         We should instead be counting the number of errors and exiting if
+         they're too numerous. This makes a number of broken ASF files playable.
+         https://bugzilla.gnome.org/show_bug.cgi?id=678543
+         Conflicts:
+         gst/asfdemux/asfpacket.c
+         gst/asfdemux/gstasfdemux.c
+
+2012-06-26 17:15:43 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         fix interlace-mode
+
+2012-06-25 09:43:53 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Add comment explaining why we first chain up to the parent class' decide_allocation
+
+2012-06-25 09:34:53 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Set allocation parameters to guarantee 16-byte aligned output buffers
+         Fixes bug #377713.
+
+2012-06-20 13:36:25 -0400  Matej Knopp <matej.knopp@gmail.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Fix unitialized variable and taglist event
+
+2012-06-20 13:23:51 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: fix compilation
+
+2012-06-20 10:39:37 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/sidplay/gstsiddec.cc:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rdtmanager.c:
+       * gst/realmedia/rmdemux.c:
+         update for task api change
+
+2012-06-20 10:39:24 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/x264/gstx264enc.c:
+         fix compilation
+
+2012-06-20 09:06:37 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/mpeg2dec/gstmpeg2dec.h:
+         mpeg2dec: Port to 0.11 again
+
+2012-06-19 15:19:28 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Fix compiler warning
+
+2012-05-30 12:50:13 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/mpeg2dec/gstmpeg2dec.h:
+         mpeg2dec: Report PAR if not present upstream
+         And clean up some code
+
+2012-05-04 16:09:57 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: use _scale_ceil to compute frame period
+         https://bugzilla.gnome.org/show_bug.cgi?id=675769
+
+2012-05-04 16:08:27 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: mpeg2dec actually has 3 frame latency
+         https://bugzilla.gnome.org/show_bug.cgi?id=675769
+
+2012-05-01 18:49:03 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Fix large output buffers leak
+
+2012-05-01 18:46:31 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Port to new way of handling frame reference
+
+2012-05-01 16:12:42 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: don't leak input_state
+
+2012-04-13 19:06:52 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/mpeg2dec/gstmpeg2dec.h:
+         mpeg2dec: Port to GstVideoDecoder base class
+         Conflicts:
+         ext/mpeg2dec/gstmpeg2dec.c
+         ext/mpeg2dec/gstmpeg2dec.h
+         Back to 0.10 state, needs to be ported to 0.11 again.
+
+2012-06-19 09:26:46 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+         Merge remote-tracking branch 'origin/master'
+
+2012-06-19 09:26:02 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264enc: Port to 0.11 again
+
+2012-05-07 11:52:40 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Don't set latency while holding object lock
+         This reverts commit 30a0b50e9ca0d625e61f994d4f8acd022dcddf38.
+         https://bugzilla.gnome.org/show_bug.cgi?id=675762
+
+2012-05-03 18:07:24 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Use video encoder stream lock to avoid deadlock
+
+2012-05-01 18:45:33 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Port to new way of passing frame reference
+
+2012-04-30 19:00:09 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Set default stream-format to avc as it's a better format
+
+2012-04-26 22:27:55 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Fix setting latency
+         Fixes setting latency when framerate is dynamic and round up the latency
+         to avoid rounding issues.
+
+2012-04-30 18:59:44 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: gst_video_encoder_get_frame() is now transfer full
+
+2012-04-26 17:31:45 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: don't leak output state
+
+2012-04-18 17:09:12 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264enc: Remove x264 backward compatibility support
+
+2012-04-18 16:13:57 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Report latency base on x264 buffer size
+
+2012-04-17 15:44:24 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+       * configure.ac:
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264enc: Port to GstVideoEncoder baseclass
+         Conflicts:
+         configure.ac
+         ext/x264/gstx264enc.c
+         ext/x264/gstx264enc.h
+         Back to 0.10 state, needs to be ported to 0.11 again.
+
+2012-06-16 18:29:54 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * Android.mk:
+       * LICENSE_readme:
+       * configure.ac:
+       * docs/plugins/Makefile.am:
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+       * docs/plugins/inspect/plugin-synaesthesia.xml:
+       * gst/synaesthesia/.gitignore:
+       * gst/synaesthesia/Makefile.am:
+       * gst/synaesthesia/README:
+       * gst/synaesthesia/gstsynaesthesia.c:
+       * gst/synaesthesia/gstsynaesthesia.h:
+       * gst/synaesthesia/synaescope.c:
+       * gst/synaesthesia/synaescope.h:
+         synaesthesia: remove experimental GPL-ed synaesthesia plugin
+         It never made it out of experimental, and there's a new
+         synaescope element in gst-plugins-bad that's hopefully
+         sufficiently similar.
+         https://bugzilla.gnome.org/show_bug.cgi?id=356882
+
+2012-06-16 18:13:47 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/mpegstream/.gitignore:
+         mpegstream: remove leftover hidden .gitignore file
+
+2012-06-08 15:55:28 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/synaesthesia/gstsynaesthesia.c:
+       * tests/check/elements/amrnbenc.c:
+       * tests/check/elements/x264enc.c:
+         elements: Use gst_pad_set_caps() instead of manual event fiddling
+
+2012-06-08 15:05:22 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 03a0e57 to 98e386f
+
+2012-06-07 16:28:45 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+         Back to development
+
+=== release 0.11.92 ===
+
+2012-06-07 16:28:32 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 0.11.92
+
+2012-06-07 16:28:27 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2012-06-06 18:19:06 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 1fab359 to 03a0e57
+
+2012-06-06 13:03:04 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/sidplay/gstsiddec.cc:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rmdemux.c:
+         update for tag event change
+
+2012-06-01 10:29:16 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From f1b5a96 to 1fab359
+
+2012-05-31 13:08:49 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 92b7266 to f1b5a96
+
+2012-05-30 12:45:49 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From ec1c4a8 to 92b7266
+
+2012-05-30 11:24:04 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 3429ba6 to ec1c4a8
+
+2012-05-26 23:41:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/realmedia/rmutils.c:
+         realmedia: don't use GstStructure API on tag lists
+
+2012-05-21 14:57:44 +0200  Julien Isorce <julien.isorce@gmail.com>
+
+       * ext/a52dec/gsta52dec.c:
+         a52dec: really prefer the original number (and position) of channels
+         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=676495
+
+2012-05-24 12:32:25 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From dc70203 to 3429ba6
+
+2012-05-17 21:12:18 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * ext/x264/gstx264enc.c:
+         x264: bump x264 requirement to build 106 or later
+         Build 106 is from September 2010.
+         https://bugzilla.gnome.org/show_bug.cgi?id=676257
+
+2012-04-15 23:39:48 +0400  Руслан Ижбулатов <lrn1986@gmail.com>
+
+       * ext/a52dec/gsta52dec.c:
+       * m4/a52.m4:
+         a52dec: adapt to work also with new liba52
+         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=674091
+
+2012-05-17 12:40:05 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/a52dec/gsta52dec.c:
+         a52dec: trigger renegotiation upon changed stream channels
+         Fixes #675451
+
+2012-05-16 09:13:05 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+         configure: Require core/base 0.11.91
+
+2012-01-13 18:18:33 -0500  Matej Knopp <matej.knopp@gmail.com>
+
+       * .gitignore:
+         .gitignore: add visual studio IDE files and OS X .DS_Store files
+         https://bugzilla.gnome.org/show_bug.cgi?id=667899
+
+2012-05-13 17:00:50 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+         Back to development
+
+=== release 0.11.91 ===
+
+2012-05-13 16:49:04 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * common:
+       * configure.ac:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 0.11.91
+
+2012-05-13 16:48:57 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2012-05-13 16:45:50 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+         Merge branch 'master' of ssh://git.freedesktop.org/git/gstreamer/gst-plugins-ugly
+
+2012-05-13 15:56:27 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From dc70203 to 3429ba6
+
+2012-04-24 15:27:12 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/asfdemux/asfpacket.c:
+         asfdemux: Use correct enum type
+
+2012-05-10 10:11:44 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: implement pull mode seek snap flags when an index is present
+         Also ensure we get a proper EOS when seeking past the end of the
+         file, or (when the snap after flag is set) between the last keyframe
+         and the end of the file.
+
+2012-05-03 23:50:30 +0100  Leon Merten Lohse <leon@green-side.de>
+
+       * ext/cdio/gstcdio.c:
+       * ext/cdio/gstcdio.h:
+       * ext/cdio/gstcdiocddasrc.c:
+         cdio: compensate for libcdio's recent cd-text api changes
+         https://bugzilla.gnome.org/show_bug.cgi?id=675112
+         Conflicts:
+         ext/cdio/gstcdiocddasrc.c
+
+2012-04-30 21:27:52 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdread: fix build after recent include reshuffling in core
+         Need to include gmodule.h ourselves now.
+
+2012-04-19 12:22:08 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         video: Update for libgstvideo API changes
+
+2012-04-16 09:09:35 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 6db25be to dc70203
+
+2012-04-12 13:56:48 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/asfdemux/asfpacket.c:
+       * gst/asfdemux/asfpacket.h:
+         asfdemux: fix performance issue, especially with high-bitrate streams
+         Two things were suboptimal from a performance point of view:
+         a) consider a large media object such as a video keyframe, which
+         may be split up into multiple fragments. We would assemble
+         the media object as follows:
+         buf = join (join (join (frag1, frag2), frag3), frag4)
+         which causes many unnecessary memcpy()s, and malloc/free,
+         which could easily add up to a multiple of the actual object
+         size. To avoid this, we allocate a buffer of the size needed
+         from the start and copy fragments into that directly.
+         b) for every fragment to join, we would create a sub-buffer
+         before joining it (which would discard the sub-buffer again),
+         leading to unnecessary miniobject create/free churn.
+         Conflicts:
+         gst/asfdemux/asfpacket.c
+         gst/asfdemux/asfpacket.h
+
+2012-04-12 14:45:51 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/asfdemux/asfpacket.c:
+         asfdemux: avoid unnecessary stream lookup
+         We have already retrieved the stream for that stream number and
+         made sure it's not NULL, so no need to do it again here; neither
+         the number nor the streams changed since the last time.
+
+2012-04-02 19:31:20 +0200  Alban Browaeys <prahal@yahoo.com>
+
+       * ext/a52dec/gsta52dec.c:
+         a52dec: fix first_access bigger than 2
+         gst_buffer_extract returns the number of bytes extracted, here 2 max.
+         Set size to the buffer size as was done in 0.10 to avoid first_access
+         error when it bypass 2.
+         https://bugzilla.gnome.org/show_bug.cgi?id=673434
+
+2012-04-13 13:43:30 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * autogen.sh:
+       * configure.ac:
+         configure: Modernize autotools setup a bit
+         Also we now only create tar.bz2 and tar.xz tarballs.
+
+2012-04-13 13:37:32 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 464fe15 to 6db25be
+
+2012-04-12 11:19:12 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+         Back to development
+
+=== release 0.11.90 ===
+
+2012-04-12 10:40:20 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 0.11.90
+
+2012-04-12 10:39:13 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2012-04-10 00:48:47 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/mad/gstmad.c.orig:
+         mad: remove .c.orig file
+
+2012-04-10 00:47:44 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbenc.c:
+       * ext/amrwbdec/amrwbdec.c:
+       * ext/cdio/gstcdiocddasrc.c:
+       * ext/dvdread/dvdreadsrc.c:
+       * ext/lame/gstlamemp3enc.c:
+       * ext/mad/gstmad.c:
+       * ext/mad/gstmad.c.orig:
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/sidplay/gstsiddec.cc:
+       * ext/twolame/gsttwolamemp2enc.c:
+       * ext/x264/gstx264enc.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstrtpasfdepay.c:
+       * gst/asfdemux/gstrtspwms.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/dvdsub/gstdvdsubdec.c:
+       * gst/dvdsub/gstdvdsubparse.c:
+       * gst/realmedia/pnmsrc.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rdtdepay.c:
+       * gst/realmedia/rdtmanager.c:
+       * gst/realmedia/rmdemux.c:
+       * gst/realmedia/rtspreal.c:
+       * gst/synaesthesia/gstsynaesthesia.c:
+       * gst/xingmux/gstxingmux.c:
+         Use new gst_element_class_set_static_metadata()
+
+2012-04-05 18:43:17 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 7fda524 to 464fe15
+
+2012-04-05 17:40:12 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/amrnb/amrnb.c:
+       * ext/amrwbdec/amrwb.c:
+       * ext/cdio/gstcdio.c:
+       * ext/dvdread/dvdreadsrc.c:
+       * ext/lame/plugin.c:
+       * ext/mad/gstmad.c:
+       * ext/mad/gstmad.c.orig:
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/sidplay/gstsiddec.cc:
+       * ext/twolame/gsttwolamemp2enc.c:
+       * ext/x264/gstx264enc.c:
+       * gst/asfdemux/gstasf.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/dvdsub/gstdvdsubdec.c:
+       * gst/realmedia/realmedia.c:
+       * gst/synaesthesia/gstsynaesthesia.c:
+       * gst/xingmux/plugin.c:
+         gst: Update for GST_PLUGIN_DEFINE() API changes
+
+2012-04-05 13:26:45 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+         configure: Update version to 0.11.89.1
+
+2012-04-04 14:38:53 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+       * docs/plugins/Makefile.am:
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+       * docs/version.entities.in:
+       * ext/a52dec/Makefile.am:
+       * ext/amrnb/Makefile.am:
+       * ext/amrwbdec/Makefile.am:
+       * ext/cdio/Makefile.am:
+       * ext/lame/Makefile.am:
+       * ext/mad/Makefile.am:
+       * ext/mpeg2dec/Makefile.am:
+       * ext/sidplay/Makefile.am:
+       * ext/twolame/Makefile.am:
+       * ext/x264/Makefile.am:
+       * gst-plugins-ugly.spec.in:
+       * gst/asfdemux/Makefile.am:
+       * gst/dvdlpcmdec/Makefile.am:
+       * gst/dvdsub/Makefile.am:
+       * gst/realmedia/Makefile.am:
+       * pkgconfig/Makefile.am:
+       * pkgconfig/gstreamer-plugins-ugly-uninstalled.pc.in:
+       * tests/check/Makefile.am:
+         gst: Update versioning
+
+2012-04-02 15:21:36 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/mpeg2dec/gstmpeg2dec.h:
+         mpeg2dec: fix cropping
+         fix cropping in mpeg2dec
+
+2012-04-01 20:19:36 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: add crop metadata when buffer is still writable
+
+2012-03-30 18:13:42 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstrtpasfdepay.c:
+         update for buffer api change
+
+2012-03-30 11:52:48 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/mad/gstmad.c:
+         ext: Update for audio decoder API changes
+
+2012-03-29 17:32:08 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * tests/check/elements/amrnbenc.c:
+       * tests/check/elements/x264enc.c:
+         tests: make more valgrind-friendly and plug caps leak
+
+2012-03-28 12:50:09 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/asfpacket.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/dvdsub/gstdvdsubdec.c:
+         update for buffer changes
+
+2012-03-27 14:07:40 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * tests/check/elements/x264enc.c:
+         tests: x264enc: adjust test to removal of deprecated properties
+
+2012-03-26 12:13:30 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+         Replace master with 0.11
+
+2012-03-22 15:56:04 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * configure.ac:
+         back to development
+
+=== release 0.11.2 ===
+
+2012-03-22 15:52:55 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * gst-plugins-ugly.doap:
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+       * win32/common/config.h:
+         Release 0.11.2
+
+2012-03-21 13:18:35 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * tests/check/elements/mpeg2dec.c:
+         tests: fix after memory changes
+
+2012-03-21 13:18:11 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264enc: remove deprecated properties
+
+2012-03-20 12:08:23 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+         Merge remote-tracking branch 'origin/master' into 0.11
+         So 0.11 folks also get amr include fixes.
+         Conflicts:
+         ext/a52dec/gsta52dec.c
+         ext/mad/gstmad.c
+
+2012-03-18 18:56:16 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/synaesthesia/gstsynaesthesia.c:
+         synaesthesia: fixup for bufferpool api changes
+         ... as well as some caps ref handling.
+
+2012-03-16 21:48:02 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rmdemux.c:
+         don't pass random pointers to pull_range
+
+2012-03-15 22:11:41 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         update for bufferpool changes
+
+2012-03-15 20:38:50 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         update for allocation query changes
+
+2012-03-15 13:38:16 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/dvdread/dvdreadsrc.c:
+       * ext/lame/gstlamemp3enc.c:
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/x264/gstx264enc.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/dvdsub/gstdvdsubdec.c:
+         update for memory api changes
+
+2012-03-14 19:52:52 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         take padding into account
+
+2012-03-13 18:27:51 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+         mad: simplify parsing code
+         Also fixes #671455 (expected at least).
+
+2012-03-12 16:16:17 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * configure.ac:
+         configure.ac: bump required GLib to 2.31.14
+         Fixes https://bugzilla.gnome.org/show_bug.cgi?id=671911
+
+2012-03-12 12:23:43 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/sidplay/gstsiddec.cc:
+         fix for caps _normalize changes
+
+2012-03-11 19:07:19 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         fix for caps api changes
+
+2012-03-06 16:08:23 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/a52dec/gsta52dec.h:
+         a52dec: use base class tag handling helper
+         ... so as to ensure these to be handled and sent at proper time.
+
+2012-03-06 14:28:15 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdreadsrc: Use variable type with correct signedness
+
+2011-01-14 18:50:41 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Copy planes in one go when possible
+
+2012-03-03 17:17:31 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * ext/amrnb/amrnbdec.h:
+       * ext/amrnb/amrnbenc.h:
+       * ext/amrwbdec/amrwbdec.h:
+         amrnb, amrwbdec: fix build with opencore-amr >= 0.1.3
+         In previous versions, the opencore-amr include sub-directory
+         would be specified in the include path in the CFLAGS, but this
+         is no longer the case in newer versions, so we need to add those
+         to our include directives.
+         Based on patch by: Christian Morales Vega
+         https://bugzilla.gnome.org/show_bug.cgi?id=671123
+
+2012-03-03 16:56:13 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+         configure: get rid of non-pkg-config ways to check for opencore-amr
+
+2012-02-29 17:26:42 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         update for metadata API changes
+
+2012-02-27 06:35:01 +0100  Alessandro Decina <alessandro.d@gmail.com>
+
+       * ext/amrwbdec/Makefile.am:
+       * ext/lame/Makefile.am:
+       * ext/mad/Makefile.am:
+         amrwbdec, lame, mad: link to libgstbase
+
+2012-02-27 06:33:48 +0100  Alessandro Decina <alessandro.d@gmail.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: fix compiler warning
+
+2012-02-27 00:36:46 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+         Merge remote-tracking branch 'origin/master' into 0.11
+
+2012-02-27 00:34:09 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+         Merge commit '02f5d72a0519bcbe8f6958fab6dd998fc8ccda6b' into 0.11
+         Conflicts:
+         ext/mad/gstmad.c
+
+2012-02-23 11:20:33 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * win32/common/config.h:
+         Bump version after release
+
+2012-02-21 18:58:06 -0800  David Schleef <ds@schleef.org>
+
+       * autogen.sh:
+         autogen.sh: avoid touching .po files during 'make'
+         A simple workaround to deal with GNU gettext automake integration
+         failing to deal with git.  Fixes: #669207
+
+2012-02-22 02:17:55 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264: convert g_print to LOG
+
+2012-02-22 02:07:49 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstrtpasfdepay.c:
+         update for new memory api
+
+2012-02-22 02:07:29 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: handle pts and dts
+
+2012-02-21 18:53:57 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+         mad: handle libmad freeform parsing quirk
+
+2012-02-21 18:49:50 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+         mad: fixup unhacking last frame coaxing
+         ... so as to not only replace the data pointer but also available size.
+
+2012-02-20 14:27:49 +0000  Christian Fredrik Kalager Schaller <christian.schaller@collabora.co.uk>
+
+       * gst-plugins-ugly.spec.in:
+         Add latest plugins
+
+2012-02-18 00:02:20 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * win32/common/config.h:
+         win32: back to development
+
+2012-02-17 17:53:34 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * configure.ac:
+       * gst/synaesthesia/gstsynaesthesia.c:
+       * gst/synaesthesia/gstsynaesthesia.h:
+         synaesthesia: port to 0.11
+
+2012-02-17 17:53:28 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * configure.ac:
+       * gst/xingmux/gstxingmux.c:
+         xingmux: port to 0.11
+
+2012-02-17 11:06:59 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * configure.ac:
+         back to development
+
+=== release 0.11.1 ===
+
+2012-02-17 11:06:27 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * gst-plugins-ugly.doap:
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/eo.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+       * win32/common/config.h:
+         RELEASE 0.11.1
+
+2012-02-17 09:16:32 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+         Merge branch 'master' into 0.11
+         Conflicts:
+         ext/mad/gstmad.c
+
+2012-02-16 14:29:47 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+         mad: unhack last frame coaxing
+         ... so as to maximally use available base class API and interfere least
+         as possible with its internal state.
+
+2012-02-15 13:45:00 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+         mad: fix compilation
+
+2012-02-15 13:40:13 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+         mad: chain up to default event handler
+
+2012-02-11 05:38:41 -0500  Matej Knopp <matej.knopp@gmail.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: unmap video frame after encoding
+         Fixes major memory leak.
+         https://bugzilla.gnome.org/show_bug.cgi?id=669863
+
+2012-02-10 17:02:38 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: fix after merge
+
+2012-02-10 17:00:33 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+         Merge branch 'master' into 0.11
+         Conflicts:
+         ext/x264/gstx264enc.c
+
+2012-02-09 18:10:48 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/sidplay/gstsiddec.cc:
+       * ext/sidplay/gstsiddec.h:
+         sidplay: don't use ulong properties
+
+2012-02-09 16:14:55 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/sidplay/gstsiddec.cc:
+         sidplay: fix negotiation
+
+2012-02-09 11:55:07 +0100  Robert Swain <robert.swain@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Add baseline profile to caps
+         libx264 does not yet support the features that create the difference
+         between baseline and constrained baseline profile. Hence it currently
+         supports both though it can only technically encode constrained
+         baseline.
+
+2012-02-08 16:38:09 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/amrnb/amrnbenc.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/realmedia/rdtmanager.c:
+         GST_FLOW_WRONG_STATE -> GST_FLOW_FLUSHING
+
+2012-02-07 18:56:23 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * tests/check/elements/mpeg2dec.c:
+         mpeg2dec: fix test a bit more
+         Still broken because cropping is broken in mpeg2dec
+
+2012-02-07 11:06:29 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * tests/check/elements/amrnbenc.c:
+       * tests/check/elements/x264enc.c:
+       * tests/check/elements/xingmux.c:
+         tests: fix some tests
+
+2012-02-01 16:20:46 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/twolame/gsttwolamemp2enc.c:
+         twolame: Use new audio encoder/decoder base class API for srcpad caps
+
+2012-02-01 16:20:26 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/lame/gstlamemp3enc.c:
+         lame: Use new audio encoder/decoder base class API for srcpad caps
+
+2012-02-01 16:19:55 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+         mad: Use new audio encoder/decoder base class API for srcpad caps
+
+2012-02-01 16:17:57 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/a52dec/gsta52dec.c:
+         a52dec: Use new audio encoder/decoder base class API for srcpad caps
+
+2012-02-01 16:15:27 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/amrwbdec/amrwbdec.c:
+         amrwbdec: Use new audio encoder/decoder base class API for srcpad caps
+
+2012-02-01 16:14:08 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbenc.c:
+         amrnb: Use new audio encoder/decoder base class API for srcpad caps
+
+2012-01-31 15:52:38 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+         mad: ensure we do not confuse the base class with our buffer guard
+         mad expects extra bytes at the end of a buffer (see discussion in
+         http://www.mars.org/mailman/public/mad-dev/2001-May/000262.html),
+         and since we inject these without the base class' knowledge, we
+         need to hide the bodies better.
+         This fixes an assert at EOS when decoding an mp3 manually without
+         an intervening mpegaudioparse.
+
+2012-01-30 17:17:31 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/realmedia/rtspreal.c:
+         update for HEADER flag
+
+2011-07-20 09:00:58 +0200  Alessandro Decina <alessandro.d@gmail.com>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264enc: implement force-key-unit API
+
+2012-01-25 13:58:48 +0100  Thomas Vander Stichele <thomas (at) apestaart (dot) org>
+
+       * common:
+         Automatic update of common submodule
+         From c463bc0 to 7fda524
+
+2012-01-25 13:58:54 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrwbdec/amrwbdec.c:
+         amr: port to 0.11 again
+
+2012-01-25 13:03:33 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+         Merge branch 'master' into 0.11
+         Conflicts:
+         ext/a52dec/gsta52dec.c
+
+2012-01-25 07:24:59 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbenc.c:
+       * ext/amrwbdec/amrwbdec.c:
+       * ext/dvdread/dvdreadsrc.c:
+       * ext/lame/gstlamemp3enc.c:
+       * ext/mad/gstmad.c:
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/sidplay/gstsiddec.cc:
+       * ext/twolame/gsttwolamemp2enc.c:
+       * gst/asfdemux/asfpacket.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstrtpasfdepay.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/dvdsub/gstdvdsubdec.c:
+       * gst/dvdsub/gstdvdsubdec.h:
+       * gst/realmedia/gstrdtbuffer.c:
+       * gst/realmedia/gstrdtbuffer.h:
+       * gst/realmedia/rdtdepay.c:
+       * gst/realmedia/rmdemux.c:
+       * gst/realmedia/rmutils.c:
+         port to new memory API
+
+2012-01-25 11:38:56 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 2a59016 to c463bc0
+
+2012-01-22 23:56:07 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst-libs/gst/glib-compat-private.h:
+         Remove compatibility versions for deprecated GLib API
+
+2012-01-19 15:26:25 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+       * ext/a52dec/gsta52dec.c:
+         a52dec: fix read buffer overflow upon syncing
+         The wrong size was being decremented, leading to a runaway
+         read loop.
+
+2012-01-19 15:06:47 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * common:
+       * configure.ac:
+         Add --disable-fatal-warnings configure option
+
+2012-01-19 11:34:41 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rdtmanager.c:
+       * gst/realmedia/rmdemux.c:
+         port to new gthread API
+
+2012-01-18 17:00:26 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+         configure.ac: Require GLib 2.31.10 for consistency
+
+2012-01-18 16:46:42 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 0807187 to 2a59016
+
+2012-01-17 11:55:59 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/amrwbdec/amrwbdec.c:
+         amrwbdec: _parse should not return OK if not enough data yet
+
+2012-01-17 11:55:14 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/amrnb/amrnbdec.c:
+         amrnbdec: _parse should not return OK if not enough data yet
+
+2012-01-13 15:03:50 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdreadsrc: fix off by one in cell calculation for the last chapter
+
+2012-01-13 15:56:47 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: set caps on src pad before adding it
+
+2012-01-13 15:56:25 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: perform writable buffer map to copy into it
+
+2012-01-13 15:55:15 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/asfdemux/asfpacket.c:
+       * gst/asfdemux/asfpacket.h:
+         asfpacket: fix 0.11 ported payload extraction
+         ... to cater for not necessarily offset == size - cur_pos,
+         as size may have been adjusted due to padding.
+         Fixes #667567.
+
+2012-01-13 13:46:50 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: remove useless and semantically (though not practically) wrong code
+         The object will be freed, so it's pointless to set the pointers
+         to NULL anyway.
+
+2012-01-13 13:46:28 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: remove leaking "optimization"
+
+2012-01-13 00:05:50 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         GST_TYPE_DATE -> G_TYPE_DATE
+
+2012-01-13 00:01:01 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+         Merge remote-tracking branch 'origin/master' into 0.11
+         Conflicts:
+         ext/a52dec/gsta52dec.c
+
+2012-01-12 13:25:22 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/a52dec/gsta52dec.c:
+         a52dec: plug buffer leak
+
+2012-01-12 13:20:26 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/a52dec/gsta52dec.c:
+         a52dec: plug buffer leak
+
+2012-01-11 12:31:11 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/amrnb/amrnbenc.c:
+         amrnbenc: _map and _unmap the appropriate input and output buffers
+
+2012-01-10 15:25:12 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/a52dec/gsta52dec.c:
+         a52dec: Fix some merge mistakes
+
+2012-01-10 15:17:11 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+         Merge branch 'master' into 0.11
+         Conflicts:
+         ext/a52dec/gsta52dec.c
+         ext/a52dec/gsta52dec.h
+         ext/lame/gstlame.c
+         ext/lame/gstlame.h
+         ext/lame/gstlamemp3enc.c
+         ext/mad/gstmad.c
+         ext/mad/gstmad.h
+         gst/mpegaudioparse/gstmpegaudioparse.c
+         gst/mpegstream/gstdvddemux.c
+         gst/realmedia/rdtdepay.c
+         po/es.po
+         po/lv.po
+         po/sr.po
+
+2012-01-10 11:41:52 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/dvdsub/Makefile.am:
+         dvdsub: add some CFLAGS and LIBS in Makefile.am
+         ... since adapter is still used.
+
+2012-01-09 16:00:18 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: Don't use buffer after unreffing
+
+2012-01-09 15:46:10 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Only change writable caps and make sure to set updated caps on the srcpad
+
+2012-01-09 15:24:53 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+         mad: Correctly unmap the buffer with the original data pointer
+
+2012-01-09 15:15:28 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+         mad: Make sure to set caps on the srcpad if none are set yet
+
+2012-01-08 14:24:11 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/mad/Makefile.am:
+         mad: fix LIBS order in Makefile.am
+
+2012-01-07 21:04:01 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/mad/gstmad.h:
+         mad: remove left-over id3tag.h include
+         We don't use libid3tag any more.
+
+2012-01-05 12:17:20 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+         dvdlpcmdec: fix for multichannel
+
+2012-01-04 16:05:59 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/a52dec/gsta52dec.h:
+         a52dec: Update for the new raw audio caps
+
+2012-01-04 15:49:38 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+         mad: Update for the new raw audio caps
+
+2012-01-04 15:45:43 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/lame/gstlamemp3enc.c:
+         lamemp3enc: Update for the new raw audio caps
+
+2012-01-04 15:44:37 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/twolame/gsttwolamemp2enc.c:
+         twolamemp2enc: Update for the new raw audio caps
+
+2012-01-04 15:43:13 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/amrwbdec/amrwbdec.c:
+         amrwbdec: Add the new layout field to the raw audio caps
+
+2012-01-04 15:42:29 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbenc.c:
+         amrnb: Add the new layout field to the raw audio caps
+
+2012-01-04 15:26:56 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+         dvdlpcmdec: Port to the new raw audio caps
+
+2012-01-04 15:12:26 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Update for libgstriff API changes
+         Still needs to handle audio channel reordering.
+
+2012-01-04 19:53:13 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 50b34ab to 0807187
+
+2012-01-04 17:05:32 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/lame/Makefile.am:
+         lame: fix LIBADD order in Makefile.am
+
+2012-01-04 10:33:27 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * tests/check/elements/amrnbenc.c:
+       * tests/check/elements/mpeg2dec.c:
+       * tests/check/elements/x264enc.c:
+       * tests/check/elements/xingmux.c:
+       * tests/check/generic/states.c:
+         tests: make tests compile
+
+2012-01-03 15:27:42 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/amrwbdec/amrwbdec.c:
+       * ext/dvdread/dvdreadsrc.c:
+       * ext/mad/gstmad.c:
+       * ext/sidplay/gstsiddec.cc:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/realmedia/pnmsrc.c:
+       * gst/realmedia/rdtmanager.c:
+       * gst/realmedia/rmdemux.c:
+         GST_FLOW_UNEXPECTED -> GST_FLOW_EOS
+
+2011-12-30 18:31:32 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * tests/check/Makefile.am:
+         tests: disable generic index test
+
+2011-12-30 17:53:12 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: remove all seeking-related code
+         A parser or demuxer upstream should handle this Same for
+         queries.
+
+2011-12-30 17:49:01 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/mpeg2dec/gstmpeg2dec.h:
+         mpeg2dec: update for GstIndex removal
+
+2011-12-30 17:46:06 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/cdio/gstcdiocddasrc.c:
+         cdio: update for probe vfunc removal in GstAudioCdSrc
+
+2011-12-27 22:54:34 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/lame/gstlame.c:
+       * ext/lame/gstlamemp3enc.c:
+         lame: fix printf format in debug statements
+         https://bugzilla.gnome.org/show_bug.cgi?id=666926
+
+2011-12-26 18:24:32 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/lame/gstlame.c:
+       * ext/lame/gstlame.h:
+         lame: ensure parsed output
+         ... by doing some basic parsing of encoded lame data.
+
+2011-12-26 16:34:01 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/lame/gstlame.h:
+         lame: cleanup unused instance struct fields
+
+2011-12-26 18:23:52 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/lame/Makefile.am:
+       * ext/lame/gstlamemp3enc.c:
+       * ext/lame/gstlamemp3enc.h:
+         lamemp3enc: ensure parsed output
+         ... by doing some basic parsing of encoded lame data.
+         Fixes #652150.
+
+2011-12-26 18:15:41 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/lame/gstlamemp3enc.c:
+         lamemp3enc: do not leak merged tags
+
+2011-12-22 15:23:54 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+       * ext/mad/gstmad.h:
+         mad: helpfully bodge the last buffer to let mad decode the last frame
+         If http://www.mars.org/mailman/public/mad-dev/2001-May/000262.html is
+         to be believed, the last buffer must be followed by a number of 0 bytes
+         in order for the last frame to be decoded (at least in some cases).
+         Doing so seems to work here, fixing a missing 1152 samples when using
+         mp3parse before mad (not using mp3parse would yield the correct amount
+         of samples, if there's extra non-MP3 data after (eg, tag data)).
+
+2009-01-25 22:49:11 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdreadsrc: map subtitle language tag to stream indicated in PGC data
+
+2009-01-25 22:49:11 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/mpegstream/gstdvddemux.c:
+         dvddemux: tweak subtitle stream setup based on dvd language codes event
+         ... to allow for non-continuous subtitle stream numbers.
+         The missing stream numbers tend to come up as subtitle streams anyway
+         (albeit not with an identified language tag).
+
+2011-12-21 13:56:35 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdreadsrc: minor safety tweak to sector seeking
+
+2011-12-20 11:54:38 +0100  Julien Isorce <julien.isorce@gmail.com>
+
+       * ext/a52dec/gsta52dec.c:
+         a52dec: check that a52_init returns a valid a52 state
+
+2011-12-19 18:20:56 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: update for new interlaced flags
+
+2011-12-14 17:33:52 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/a52dec/Makefile.am:
+       * ext/a52dec/gsta52dec.c:
+       * ext/a52dec/gsta52dec.h:
+         a52dec: port to audiodecoder
+
+2011-12-12 13:44:12 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/mad/Makefile.am:
+       * ext/mad/gstmad.c:
+       * ext/mad/gstmad.h:
+         mad: port to audiodecoder
+
+2011-12-13 14:54:18 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/a52dec/gsta52dec.c:
+         a52dec: Don't claim to support upstream renegotiation
+         and use fixed caps on the srcpad. To correctly support
+         upstream renegotiation a52dec would need to check if the
+         caps of the downstream allocated buffer are the requested
+         caps or if the size is different.
+         Fixes bug #665989.
+
+2011-12-13 14:52:26 +0100  Julien Isorce <julien.isorce@gmail.com>
+
+       * ext/a52dec/gsta52dec.c:
+         a52dec: Check that the a52_state is correctly initialized
+
+2011-12-12 11:33:31 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst-libs/gst/Makefile.am:
+       * gst-libs/gst/glib-compat-private.h:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rdtmanager.c:
+       * gst/realmedia/rmdemux.c:
+         Work around deprecated thread API in glib master
+         Add private replacements for deprecated functions such as
+         g_mutex_new(), g_mutex_free(), g_cond_new() etc., mostly
+         to avoid the deprecation warnings. We can't change most of
+         these in 0.10 because they're part of our API and ABI.
+         Suppress deprecation warnings in selected files, mostly for
+         g_static_rec_mutex_*. StaticRecMutex is part of our API/ABI,
+         not much we can do here in 0.10.
+
+2011-12-10 15:19:03 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * po/LINGUAS:
+       * po/eo.po:
+       * po/es.po:
+       * po/lv.po:
+       * po/sr.po:
+         po: update translations
+
+2011-12-09 15:25:21 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/realmedia/rdtdepay.c:
+         rdtdepay: make buffer metadata writable before setting caps on it
+         Fixes issue when the header buffer is being pushed, which was taken
+         from the caps and is therefore not writable.
+
+2011-12-06 14:00:18 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/dvdread/dvdreadsrc.c:
+         fix for basesrc changes
+
+2011-12-05 18:43:49 +0100  Edward Hervey <edward@collabora.com>
+
+       * gst/asfdemux/gstrtpasfdepay.c:
+         rtpasfdepay: Initialize GstRTPBuffer before usage
+
+2011-12-02 02:01:06 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+         Merge remote-tracking branch 'origin/master' into 0.11
+         Conflicts:
+         ext/dvdread/dvdreadsrc.c
+
+2011-11-29 08:49:23 +0100  Руслан Ижбулатов <lrn1986@gmail.com>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdreadsrc: Fix format string compiler warning
+         Fixes bug #665101.
+
+2011-11-28 21:31:25 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+         Merge remote-tracking branch 'origin/master' into 0.11
+
+2011-11-28 18:26:34 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         Update for indexable change
+
+2011-11-28 17:52:52 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/realmedia/rdtmanager.c:
+         update for clock provider API change
+
+2011-11-28 13:10:01 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbenc.c:
+       * ext/amrwbdec/amrwbdec.c:
+       * ext/dvdread/dvdreadsrc.c:
+       * ext/lame/gstlame.c:
+       * ext/lame/gstlamemp3enc.c:
+       * ext/mad/gstmad.c:
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/sidplay/gstsiddec.cc:
+       * ext/twolame/gsttwolame.c:
+       * ext/x264/gstx264enc.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstrtpasfdepay.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/dvdsub/gstdvdsubdec.c:
+       * gst/dvdsub/gstdvdsubparse.c:
+       * gst/iec958/ac3iec.c:
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+       * gst/mpegaudioparse/gstxingmux.c:
+       * gst/mpegstream/gstdvddemux.c:
+       * gst/mpegstream/gstmpegdemux.c:
+       * gst/mpegstream/gstmpegparse.c:
+       * gst/mpegstream/gstrfc2250enc.c:
+       * gst/realmedia/pnmsrc.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rdtdepay.c:
+       * gst/realmedia/rdtmanager.c:
+       * gst/realmedia/rmdemux.c:
+       * gst/synaesthesia/gstsynaesthesia.c:
+         various: fix pad template ref leaks
+         https://bugzilla.gnome.org/show_bug.cgi?id=662664
+
+2011-11-24 21:41:55 +0100  René Stadler <rene.stadler@collabora.co.uk>
+
+       * tests/check/elements/xingmux.c:
+         tests: update for gstcheck API change
+
+2011-11-23 23:29:03 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/amrnb/amrnbenc.c:
+       * ext/dvdread/dvdreadsrc.c:
+       * ext/lame/gstlamemp3enc.c:
+       * ext/twolame/gsttwolamemp2enc.c:
+         ext: fix more printf format warnings in debug messages
+
+2011-11-21 22:02:07 +0100  Matej Knopp <matej.knopp@gmail.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstrtpasfdepay.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/dvdsub/gstdvdsubdec.c:
+       * gst/dvdsub/gstdvdsubparse.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rmdemux.c:
+         Fix print format compiler warnings on OS X / 64bit
+         https://bugzilla.gnome.org/show_bug.cgi?id=662617
+
+2011-11-21 13:36:10 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rdtmanager.c:
+       * gst/realmedia/rmdemux.c:
+         update for activation changes
+
+2011-11-18 18:00:28 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rmdemux.c:
+         update for new scheduling query
+
+2011-11-18 13:59:29 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rdtmanager.c:
+       * gst/realmedia/rmdemux.c:
+         add parent to activate functions
+
+2011-11-17 15:25:58 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/sidplay/gstsiddec.cc:
+       * ext/x264/gstx264enc.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/dvdsub/gstdvdsubdec.c:
+       * gst/dvdsub/gstdvdsubparse.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rdtdepay.c:
+       * gst/realmedia/rdtmanager.c:
+       * gst/realmedia/rmdemux.c:
+         add parent to pad functions
+
+2011-11-16 17:28:56 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/sidplay/gstsiddec.cc:
+       * ext/x264/gstx264enc.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rdtmanager.c:
+       * gst/realmedia/rmdemux.c:
+         add parent to query function
+
+2011-11-15 17:55:36 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/realmedia/rademux.c:
+         _query_peer_*() -> _peer_query_*()
+
+2011-11-15 17:42:32 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/dvdsub/gstdvdsubdec.c:
+         _accept_caps() -> _query_accept_caps()
+
+2011-11-15 17:23:39 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         _peer_get_caps() -> _peer_query_caps()
+
+2011-11-15 16:52:55 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         update for _get_caps() -> _query_caps()
+
+2011-11-15 16:34:39 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         change getcaps to query
+
+2011-11-14 00:55:16 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+         mad: re-instate accidentally dropped rank
+
+2011-11-13 23:47:46 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/dvdread/dvdreadsrc.c:
+       * gst/realmedia/pnmsrc.c:
+         Update for GstURIHandler get_protocols() changes
+
+2011-11-13 19:01:31 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/dvdread/dvdreadsrc.c:
+       * ext/dvdread/dvdreadsrc.h:
+       * gst/realmedia/pnmsrc.c:
+         dvdreadsrc, pnmsrc: update for GstURIHandler changes
+
+2011-11-13 01:33:25 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+         mad: re-port to 0.11
+         This time using the base class. Still something
+         wrong with the parsing though, when there's no
+         parser or demuxer upstream (which of course
+         shouldn't happen in a normal playback scenario).
+
+2011-11-13 00:29:20 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+       * ext/mad/gstmad.h:
+         mad: update for GstBaseAudioDecoder -> GstAudioDecoder rename
+
+2011-08-16 21:12:06 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+       * ext/mad/gstmad.h:
+         mad: replace with 0.10 version ported to GstAudioDecoder
+         Taken from commit 6e7e3657396454fe95fbd89170281865d4d1cec3
+         of Mark's baseaudio branch.
+         Would probably be too risky to drop this into 0.10 given
+         all the things mad is doing.
+
+2011-11-13 00:13:17 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+         docs: remove bits for old lame element from sections.txt file
+
+2011-11-13 00:04:07 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * Android.mk:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * gst-plugins-ugly.spec.in:
+       * gst/mpegstream/Makefile.am:
+       * gst/mpegstream/README:
+       * gst/mpegstream/gstdvddemux.c:
+       * gst/mpegstream/gstdvddemux.h:
+       * gst/mpegstream/gstmpegclock.c:
+       * gst/mpegstream/gstmpegclock.h:
+       * gst/mpegstream/gstmpegdemux.c:
+       * gst/mpegstream/gstmpegdemux.h:
+       * gst/mpegstream/gstmpegpacketize.c:
+       * gst/mpegstream/gstmpegpacketize.h:
+       * gst/mpegstream/gstmpegparse.c:
+       * gst/mpegstream/gstmpegparse.h:
+       * gst/mpegstream/gstmpegstream.c:
+       * gst/mpegstream/gstrfc2250enc.c:
+       * gst/mpegstream/gstrfc2250enc.h:
+       * gst/mpegstream/mpegstream.vcproj:
+       * gst/mpegstream/notes:
+       * win32/MANIFEST:
+       * win32/vs6/gst_plugins_ugly.dsw:
+       * win32/vs6/libgstac3parse.dsp:
+       * win32/vs6/libgstmpegaudioparse.dsp:
+       * win32/vs6/libgstmpegstream.dsp:
+         mpegstream: remove the old mpeg-ps parser and demuxers
+         Don't want anyone porting this by accident.
+         Superseded by mpegpsdemux in -bad.
+
+2011-11-12 21:06:29 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * ext/cdio/Makefile.am:
+       * ext/cdio/gstcdio.c:
+       * ext/cdio/gstcdiocddasrc.c:
+       * ext/cdio/gstcdiocddasrc.h:
+         cdio: port cdiocddasrc to 0.11
+
+2011-11-12 20:44:23 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * tests/check/elements/mpeg2dec.c:
+         tests: port mpeg2dec to 0.11
+         It compiles, but fails.
+
+2011-11-12 20:33:03 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * tests/check/elements/x264enc.c:
+         tests: port x264enc unit test to 0.11
+         Well, it compiles now at least.
+
+2011-11-11 12:33:51 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstrtpasfdepay.h:
+         update for base class rename
+
+2011-11-11 12:25:25 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstrtpasfdepay.c:
+       * gst/asfdemux/gstrtpasfdepay.h:
+         update for base class rename
+
+2011-11-11 01:30:11 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         po: update translations
+
+2011-11-11 01:29:33 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+         docs: update docs
+
+2011-11-11 01:27:47 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/lame/gstlamemp3enc.c:
+         lamemp3enc: cosmetic error message change
+         LET'S TRY TO KEEP CAPITALS TO A MINIMUM.
+
+2011-11-11 00:58:24 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * docs/plugins/Makefile.am:
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+       * ext/twolame/Makefile.am:
+       * ext/twolame/gsttwolamemp2enc.c:
+       * ext/twolame/gsttwolamemp2enc.h:
+       * po/POTFILES.in:
+         twolame: rename to twolamemp2enc
+
+2011-11-11 00:51:34 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * ext/twolame/gsttwolame.c:
+         twolame: port to 0.11
+
+2011-11-10 23:17:53 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * Android.mk:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * gst-plugins-ugly.spec.in:
+       * gst/iec958/Makefile.am:
+       * gst/iec958/ac3_padder.c:
+       * gst/iec958/ac3_padder.h:
+       * gst/iec958/ac3iec.c:
+       * gst/iec958/ac3iec.h:
+       * win32/MANIFEST:
+       * win32/vs6/libgstiec958.dsp:
+         iec958: remove this plugin
+         I think it can just go away. Audio sinks can and should payload
+         things themselves using the helper API in libgstaudio. If such
+         a plugin still makes sense, it should probably be rewritten
+         using the library functions (and be put into -good or so).
+
+2011-11-10 18:25:38 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rmdemux.c:
+       * gst/realmedia/rtspreal.c:
+         update for adapter api change
+
+2011-11-10 11:04:06 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         update for removed fixate function
+
+2011-11-09 11:58:03 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/realmedia/rmdemux.c:
+         remove query types
+
+2011-11-04 17:32:58 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * configure.ac:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rdtdepay.c:
+       * gst/realmedia/rmdemux.c:
+       * gst/realmedia/rmutils.c:
+         realmedia is ported
+
+2011-11-04 16:40:59 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/mpegstream/gstdvddemux.c:
+       * gst/mpegstream/gstmpegdemux.c:
+       * gst/realmedia/rmdemux.c:
+       * gst/realmedia/rmdemux.h:
+         more template fixes
+
+2011-11-04 16:32:48 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * po/POTFILES.in:
+         po: lame => lamemp3enc
+
+2011-11-04 12:04:56 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/realmedia/rdtmanager.c:
+         make request pads take %u
+
+2011-11-04 10:45:47 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/mpeg2dec/gstmpeg2dec.h:
+         mpeg2dec: Add basic cropping support
+
+2011-11-02 12:09:45 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/sidplay/gstsiddec.cc:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+         tags: update for tag API removal
+
+2011-10-31 02:24:30 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/mpeg2dec/gstmpeg2dec.h:
+         update for meta api change
+
+2011-10-29 09:10:54 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         structure: fix for api update
+
+2011-10-31 14:34:57 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+         Merge remote-tracking branch 'origin/master' into 0.11
+
+2011-10-30 15:05:56 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * tests/check/elements/amrnbenc.c:
+         tests: port amrnbenc test to 0.11
+
+2011-10-30 15:04:22 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbenc.c:
+         amrnb: fix up raw audio caps for 0.11
+
+2011-10-30 15:03:29 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * tests/check/Makefile.am:
+         tests: need to define GST_USE_UNSTABLE_API to avoid warnings
+
+2011-10-30 12:29:14 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * docs/plugins/Makefile.am:
+       * ext/lame/Makefile.am:
+       * ext/lame/README:
+       * ext/lame/gstlame.c:
+       * ext/lame/gstlame.h:
+       * ext/lame/plugin.c:
+       * ext/lame/test-lame.c:
+       * gst/xingmux/gstxingmux.c:
+       * tests/check/pipelines/lame.c:
+         lame: remove lame element, it's been superseded by lamemp3enc
+
+2011-10-30 11:51:58 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/lame/gstlamemp3enc.c:
+       * ext/mad/gstmad.c:
+       * ext/sidplay/gstsiddec.cc:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+         ext, gst: update for taglist API changes
+
+2011-10-29 11:57:40 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Don't leak pending payload buffers
+         Fixes #662964
+
+2011-10-28 15:21:27 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+         Merge branch 'master' into 0.11
+         Conflicts:
+         ext/sidplay/gstsiddec.cc
+
+2011-10-27 16:53:44 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+       * ext/sidplay/gstsiddec.cc:
+         siddec: use BOILERPLATE macro and cleanup FIXMEs
+
+2011-10-28 09:18:04 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/asfdemux/gstrtpasfdepay.c:
+         asfdepay: fix compiler warnings after gst_caps_new_simple() change
+
+2011-10-21 12:24:01 +0100  Christian Fredrik Kalager Schaller <christian.schaller@collabora.co.uk>
+
+       * gst-plugins-ugly.spec.in:
+         Update specfile with latest changes
+
+2011-10-11 18:03:01 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Don't unmap a buffer that doesn't exist
+
+2011-10-10 12:38:02 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * configure.ac:
+       * ext/dvdread/dvdreadsrc.c:
+         dvdread: port to 0.11
+
+2011-10-06 17:24:22 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * configure.ac:
+       * gst/dvdsub/Makefile.am:
+       * gst/dvdsub/gstdvdsubdec.c:
+       * gst/dvdsub/gstdvdsubdec.h:
+       * gst/dvdsub/gstdvdsubparse.c:
+         dvdsub: port to 0.11
+
+2011-10-05 13:32:33 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+         Merge branch 'master' into 0.11
+         Conflicts:
+         ext/amrwbdec/Makefile.am
+         ext/amrwbdec/amrwbdec.c
+
+2011-10-05 13:18:45 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/realmedia/gstrdtbuffer.c:
+       * gst/realmedia/gstrdtbuffer.h:
+       * gst/realmedia/pnmsrc.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rdtdepay.c:
+       * gst/realmedia/rdtmanager.c:
+       * gst/realmedia/rmdemux.c:
+       * gst/realmedia/rmutils.c:
+       * gst/realmedia/rtspreal.c:
+         realmedia: port to 0.11
+
+2011-10-05 12:05:34 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/amrwbdec/Makefile.am:
+       * ext/amrwbdec/amrwbdec.c:
+       * ext/amrwbdec/amrwbdec.h:
+         amrwbdec: port to audiodecoder
+
+2011-10-04 17:00:57 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/amrnb/Makefile.am:
+         amrnbdec: fixup build
+
+2011-10-04 17:00:41 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/amrnb/amrnbdec.c:
+         amrnbdec: remove leftover extraneous _unref
+
+2011-10-04 17:50:33 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+         Merge branch 'master' into 0.11
+         Conflicts:
+         ext/amrnb/amrnbdec.c
+
+2011-10-04 17:35:40 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * configure.ac:
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbenc.c:
+         amrnb: port to 0.11
+
+2011-10-04 17:12:35 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * configure.ac:
+       * ext/amrwbdec/Makefile.am:
+       * ext/amrwbdec/amrwbdec.c:
+         ported amrwbdec to 0.11
+
+2011-10-03 17:19:02 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbdec.h:
+         amrnbdec: port to audiodecoder
+
+2011-09-30 17:45:31 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+         Merge branch 'master' into 0.11
+
+2011-09-30 17:38:07 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * configure.ac:
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/mpeg2dec/gstmpeg2dec.h:
+         mpeg2dec: minimal port to 0.11
+
+2011-09-05 11:11:52 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/mpeg2dec/gstmpeg2dec.h:
+         mpeg2dec: post QoS messages when dropping a frame due to QoS
+         https://bugzilla.gnome.org/show_bug.cgi?id=658241
+
+2011-09-28 13:05:55 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * configure.ac:
+         configure: update ported plugins list
+
+2011-09-28 13:03:31 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * common:
+         update to 0.11 branch
+
+2011-09-27 20:32:46 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+         dvdlpcmdec: port to 0.11
+
+2011-09-27 18:19:50 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/lame/gstlame.c:
+       * ext/lame/gstlamemp3enc.c:
+         lame: fix raw audio caps too
+
+2011-09-27 18:15:00 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/lame/gstlame.c:
+       * ext/lame/gstlamemp3enc.c:
+         lame: port to 0.11
+
+2011-09-27 17:54:02 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+         Merge branch 'master' into 0.11
+
+2011-09-27 17:51:31 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264enc: port to 0.11
+
+2011-09-27 17:01:59 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/amrnb/Makefile.am:
+       * ext/amrnb/amrnbenc.c:
+       * ext/amrnb/amrnbenc.h:
+         amrnbenc: port to audioencoder
+
+2011-09-26 19:07:23 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+         Merge branch 'master' into 0.11
+         Conflicts:
+         ext/mad/gstmad.c
+
+2011-09-26 19:03:13 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/a52dec/gsta52dec.c:
+         port a52dec to 0.11
+
+2011-09-26 16:29:12 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/twolame/gsttwolame.c:
+         twolame: Simple fix for GstAudioEncoder API change
+
+2011-09-26 16:28:08 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/twolame/gsttwolame.c:
+         twolame: Fix variable 'gstelement_class' set but not used compiler warning
+
+2011-09-26 16:08:20 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/lame/gstlame.c:
+       * ext/lame/gstlamemp3enc.c:
+         lame: Don't get the parent class again, GST_BOILERPLATE does this already
+
+2011-09-26 16:07:54 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/lame/gstlame.c:
+       * ext/lame/gstlamemp3enc.c:
+         lame: Fix variable 'gstelement_class' set but not used compiler warning
+
+2011-09-26 12:07:15 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/twolame/gsttwolame.c:
+         twolame: improve output framing and timestamping
+         ... which simply comes down to requesting one frame of input data at a time,
+         since the encoder nicely turns this into 1 encoded frame.
+
+2011-09-26 11:56:23 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/twolame/Makefile.am:
+       * ext/twolame/gsttwolame.c:
+       * ext/twolame/gsttwolame.h:
+         twolame: port to audioencoder
+
+2011-09-23 15:32:01 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/lame/gstlame.c:
+         lame: use some more boilerplate
+
+2011-09-23 15:26:48 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/lame/gstlame.c:
+       * ext/lame/gstlame.h:
+         lame: port to audioencoder
+
+2011-09-23 14:33:55 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/lame/gstlamemp3enc.c:
+         lamemp3enc: use some more boilerplate
+
+2011-09-26 14:44:23 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/lame/gstlamemp3enc.c:
+         lamemp3enc: really report bitrate rather kbitrate
+
+2011-09-26 14:44:01 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/lame/Makefile.am:
+       * ext/lame/gstlamemp3enc.c:
+       * ext/lame/gstlamemp3enc.h:
+         lamemp3enc: port to audioencoder
+
+2011-09-16 15:35:06 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdreadsrc: take into account first sector of the current title
+         This fixes seeking on titles which do not start on a new file.
+         https://bugzilla.gnome.org/show_bug.cgi?id=659252
+
+2011-09-16 15:03:54 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdreadsrc: fix sector seeking
+         It was overly complicated, and did not take into account the offset
+         needed for titles which do not start on a new file.
+         https://bugzilla.gnome.org/show_bug.cgi?id=659252
+
+2011-09-16 13:42:53 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdreadsrc: fix sector search for packed titles
+         Some DVD titles are packed in a single set, and we need to use
+         the correct table to map times to sectors.
+         https://bugzilla.gnome.org/show_bug.cgi?id=659252
+
+2011-08-15 16:23:04 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * ext/mad/Makefile.am:
+       * ext/mad/gstmad.c:
+       * gst-plugins-ugly.spec.in:
+         mad: remove id3tag dependency used by in practice unreachable legacy code
+         The mad mp3 decoder element shouldn't parse tags at all really, but we
+         have so far kept this code around for backwards-compatibility reasons
+         for people building manual pipelines for some reason. However, as it
+         turns out that code has never actually worked in 0.10 in practice,
+         since it only gets executed if mad_frame_decode() returns LOSTSYNC,
+         which doesn't actually seem to happen any more though because of the
+         preceding mad_header_decode(), which will discover and report the
+         sync loss if it runs into a tag and make mad_frame_decode() try to
+         resync right away.
+         Discovered this while trying to make it use gst_tag_list_from_id3v2_tag().
+
+2011-09-08 17:01:27 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/asfdemux/asfpacket.c:
+         asfpacket: skip empty payload packets
+         ... which also avoids assertion failures and possible segfaults later on
+         when possibly trying to join 2 empty buffers.
+
+2011-09-08 14:33:00 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/realmedia/rmdemux.c:
+       * gst/realmedia/rmdemux.h:
+         rmdemux: delay announcing container tags until we have pads
+         Fixes tags when transcoding.
+         https://bugzilla.gnome.org/show_bug.cgi?id=658297
+
+2011-09-07 14:36:46 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * tests/check/elements/amrnbenc.c:
+         amrnbenc: Use complete raw audio caps in the test
+
+2011-09-07 14:25:41 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+       * docs/plugins/Makefile.am:
+         docs: cleanup makefiles
+         Remove commented out parts that we don't need. Remove "the wingo addition" - no
+         so useful after all. Narrow down file-globs for plugin docs.
+
+2011-09-06 21:25:13 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From a39eb83 to 11f0cd5
+
+2011-09-06 15:40:55 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From 605cd9a to a39eb83
+
+2011-08-25 13:04:01 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asf: don't use fourcc
+
+2011-08-25 12:54:42 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+         Merge branch 'master' into 0.11
+
+2011-08-22 17:49:14 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: fix spurious failure to decode some files
+         Parsing can return with an 'invalid' state, but this is not
+         actually fatal. For one, the mpeg2dec command line tool that
+         comes with the libmpeg2 library blithely ignores this condition
+         and merrily goes on. So we do this same, logging the error,
+         and going on with parsing. This makes something work that did
+         not use to work, and brings happiness to the world.
+         https://bugzilla.gnome.org/show_bug.cgi?id=429476
+
+2011-08-19 18:07:58 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+       * ext/sidplay/Makefile.am:
+       * ext/sidplay/gstsiddec.cc:
+         port to new audio caps
+
+2011-08-03 18:58:09 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+         Merge branch 'master' into 0.11
+         Conflicts:
+         common
+         gst/asfdemux/gstrtpasfdepay.c
+
+2011-08-03 09:05:47 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+         configure: Add synaesthesia to the list of non-ported plugins
+
+2011-08-03 01:08:43 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * docs/plugins/Makefile.am:
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * gst-plugins-ugly.spec.in:
+       * gst/mpegaudioparse/Makefile.am:
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+       * gst/mpegaudioparse/gstmpegaudioparse.h:
+       * gst/mpegaudioparse/mpegaudioparse.vcproj:
+       * gst/xingmux/Makefile.am:
+       * gst/xingmux/gstxingmux.c:
+       * gst/xingmux/gstxingmux.h:
+       * gst/xingmux/plugin.c:
+         Remove mp3parse plugin/element
+         It's been replaced by mpegaudioparse in -good. Don't want anyone
+         to spend time porting a deprecated element. Rename plugin to xingmux
+         for now until we move that somewhere else.
+
+2011-08-02 12:49:09 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+       * configure.ac:
+         configure.ac: Define list of non-ported plugins
+
+2011-08-02 12:48:52 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+         mad: Fix for changes in GstQuery API
+
+2011-08-02 12:40:22 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Fix for changes in GstQuery API
+
+2011-08-02 12:40:01 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+       * gst/asfdemux/asfpacket.c:
+         asfdemux: Fix print statement
+
+2011-08-02 12:35:40 +0200  Edward Hervey <edward.hervey@collabora.co.uk>
+
+       * common:
+         Update common submodule
+
+2011-07-30 18:47:44 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Properly set the stream format in setcaps
+         Do not forget to set the selected format to the options string
+         when getting it from caps
+         https://bugzilla.gnome.org/show_bug.cgi?id=655223
+
+2011-07-19 15:06:49 +0200  Stefan Sauer <ensonic@google.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: fix the build for older x264enc
+         b_fake_interlaced was introduced in x264 commit 1b48874d06 = X264_BUILD 96.
+
+2011-07-18 20:41:20 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Read stream-format from the right place
+         Read the stream-format from "stream-format" and not from profile, also rename
+         the "bytestream" variable to "stream_format" so it's easier to understand.
+
+2011-06-13 23:24:27 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264enc: Select stream-format based on caps
+         Makes x264 select its stream-format based on what's available
+         on caps, the user selected option will be chosen as a fallback
+         when both options are available.
+         https://bugzilla.gnome.org/show_bug.cgi?id=644233
+
+2011-07-04 18:03:49 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+       * ext/x264/gstx264enc.c:
+         x264: Allow renegotiation but prefer current caps
+
+2011-06-09 20:20:27 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+       * tests/check/elements/x264enc.c:
+         tests: Test x264enc profiles from the caps
+         https://bugzilla.gnome.org/show_bug.cgi?id=644233
+
+2011-03-07 17:58:34 -0500  Olivier Crête <olivier.crete@collabora.co.uk>
+
+       * ext/x264/Makefile.am:
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264: Use profile and level from caps
+         Enforces the profile and level from the downstream caps, also
+         sets them on the fixated caps
+         https://bugzilla.gnome.org/show_bug.cgi?id=644233
+
+2011-07-05 10:14:50 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+         Add -DGST_USE_UNSTABLE_API to the compiler flags to avoid warnings
+
+2011-06-25 06:29:50 +0300  Brian Gitonga Marete <marete@toshnix.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: fix subme property annotation - subme maximum is 10, not 6.
+         Although the element accepts subme values > 6, the annotation which is
+         visible through gst-inspect (for example) erroneously indicates 6 as the
+         maximum. Fix this by indicating 10 (which is the x264 max) as the maximum.
+         https://bugzilla.gnome.org/show_bug.cgi?id=653473
+
+2011-06-23 11:28:58 -0700  David Schleef <ds@schleef.org>
+
+       * common:
+         Automatic update of common submodule
+         From 69b981f to 605cd9a
+
+2011-06-19 12:45:00 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * gst/asfdemux/gstrtspwms.c:
+         rtspwms: Porting to 0.11
+
+2011-06-18 20:24:42 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * gst/asfdemux/gstrtpasfdepay.c:
+         rtpasfdepay: Port to 0.11
+
+2011-06-15 23:40:02 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * gst/asfdemux/asfpacket.c:
+       * gst/asfdemux/asfpacket.h:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: Porting to 0.11
+
+2011-06-08 18:18:17 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/sidplay/gstsiddec.cc:
+         siddec: port siddec to 0.11
+
+2011-06-06 12:41:03 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/asfdemux/gstrtpasfdepay.c:
+         rtpasfdepay: fix fragmented packet handling and packet padding
+         Also remove a bogus assert.
+
+2011-06-03 11:35:55 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * gst/synaesthesia/gstsynaesthesia.c:
+         synaesthesia: fix wrong debug log string (copy'n'paste)
+
+2011-06-02 18:46:11 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+         Merge branch 'master' into 0.11
+         Conflicts:
+         configure.ac
+
+2011-06-02 18:43:28 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+         mad: port to new API
+         Port to new segment API.
+         Eat Caps events.
+         No need to set caps on buffers.
+
+2011-05-20 13:32:31 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: target is unsigned and can't be < 0
+
+2011-05-20 13:31:14 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * ext/mad/gstmad.c:
+         mad: use signed when caluculating the delta
+         Avoids a <0 check for an unsigned variable.
+
+2011-05-19 23:55:41 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * docs/plugins/Makefile.am:
+         docs: remove obsolete commented out part
+         We don't have this in the other modules and its not needed.
+
+2011-05-19 23:38:23 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+         docs: update plugin introspection data
+         Now more files are merged and produced in a canonical fashion, which hopefully
+         creates less or no delta in the future.
+
+2011-05-19 22:58:28 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From 9e5bbd5 to 69b981f
+
+2011-05-18 14:49:17 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/lame/Makefile.am:
+       * ext/lame/gstlamemp3enc.c:
+         lamemp3enc: Post CODEC and BITRATE tags
+         Also filter any CODEC/AUDIO_CODEC tags from incoming
+         tag events.
+         Fixes bug #391543.
+
+2011-05-18 16:10:55 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From fd35073 to 9e5bbd5
+
+2011-05-18 12:25:01 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From 46dfcea to fd35073
+
+2011-04-27 15:20:20 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/asfdemux/gstrtpasfdepay.c:
+         rtpasfdepay: simplify and refactor packet parsing
+         Specifically, refactor buffer padding and consider marker bit for fragment
+         assembling.
+
+2011-04-27 15:14:00 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/asfdemux/gstrtpasfdepay.c:
+         rtpasfdepay: avoid re-sending header
+         ... e.g. following a seek, which otherwise confuses downstream demuxer
+         expecting only a flow of data packets at this time.
+
+2011-04-27 15:12:22 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/asfdemux/gstrtpasfdepay.c:
+       * gst/asfdemux/gstrtpasfdepay.h:
+         rtpasfdepay: remove unused field
+
+2011-04-29 09:19:19 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+         mad: Post bitrate tag whenever the bitrate changes
+         Also send the layer/mode/emphasis/bitrate tags as an event too.
+
+2011-05-14 10:09:16 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * win32/common/config.h:
+         win32: define GST_PACKAGE_RELEASE_DATETIME in win32 config.h as well
+
+2011-05-14 10:06:31 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * win32/common/config.h:
+         Back to development
+
+=== release 0.10.18 ===
+
+2011-05-10 10:26:50 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 0.10.18
+         Highlights:
+         - x264enc: allow changing bitrate and quantizers dynamically at runtime
+         - x264enc: proxy downstream caps restrictions upstream via get_caps()
+         - lamemp3enc: proxy downstream rate/channels restrictions upstream via get_caps()
+         - mad: allow build without libid3tag (which isn't really needed anyway)
+         - many other fixes and improvements
+
+2011-05-04 12:39:17 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Copy the template caps, it's not allowed to increase the refcount of const caps
+
+2011-05-04 12:30:39 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: do not leak peer pad reference
+
+2011-05-03 15:27:43 +0100  Sjoerd Simons <sjoerd.simons@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: No need to copy, reffing is enough
+
+2011-05-03 14:57:16 +0100  Sjoerd Simons <sjoerd.simons@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: get_caps function should return a copy of the caps
+
+2011-04-30 20:07:44 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-synaesthesia.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * po/da.po:
+       * po/de.po:
+       * po/fr.po:
+       * po/uk.po:
+       * win32/common/config.h:
+         0.10.17.4 pre-release
+
+2011-04-29 15:43:47 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+         mad: remove buffer_alloc
+
+2011-04-27 12:48:31 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-synaesthesia.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * po/bg.po:
+       * po/ja.po:
+       * po/nl.po:
+       * po/pl.po:
+       * po/ru.po:
+       * po/sl.po:
+       * po/tr.po:
+         0.10.17.3 pre-release
+
+2011-04-24 14:04:39 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From c3cafe1 to 46dfcea
+
+2011-04-19 19:24:23 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+         mad: port to 0.11
+
+2011-04-19 19:23:56 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+         Merge branch 'master' into 0.11
+         Conflicts:
+         android/amrnb.mk
+         android/amrwbdec.mk
+         android/asf.mk
+         android/mpegaudioparse.mk
+         configure.ac
+
+2011-04-19 17:26:42 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * tests/check/gst-plugins-ugly.supp:
+         tests: add suppression for lame unit test
+
+2011-04-19 14:41:48 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * tests/check/Makefile.am:
+       * tests/check/generic/.gitignore:
+       * tests/check/generic/index.c:
+         tests: add generic index-setting test
+
+2011-04-19 15:24:03 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: don't deadlock when setting an index
+
+2011-04-16 23:26:27 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-synaesthesia.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * po/sl.po:
+       * win32/common/config.h:
+         0.10.17.2 pre-release
+
+2011-04-16 23:23:56 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/realmedia/rademux.c:
+         rademux: fix two 'variable may be used uninitialized' warnings caused by -DG_DISABLE_ASSERT
+
+2011-04-14 15:04:19 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/mpegstream/gstmpegdemux.c:
+         mpegstream: fix unused-but-set-variable warnings with gcc 4.6
+
+2011-04-14 15:03:56 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/dvdread/dvdreadsrc.c:
+       * ext/sidplay/gstsiddec.cc:
+       * ext/x264/gstx264enc.c:
+         dvdread, sidplay, x264enc: fix unused-but-set-variable warnings with gcc 4.6
+
+2011-04-14 15:03:33 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: fix unused-but-set-variable warnings with gcc 4.6
+
+2011-04-13 20:31:53 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Implement getcaps function
+         This allows to set width/height/etc restrictions downstream.
+
+2011-04-10 18:24:22 -0400  Thibault Saunier <thibault.saunier@collabora.co.uk>
+
+       * Android.mk:
+       * ext/mad/Makefile.am:
+       * ext/x264/Makefile.am:
+       * gst/asfdemux/Makefile.am:
+       * gst/dvdlpcmdec/Makefile.am:
+       * gst/dvdsub/Makefile.am:
+       * gst/iec958/Makefile.am:
+       * gst/mpegaudioparse/Makefile.am:
+       * gst/mpegstream/Makefile.am:
+       * gst/realmedia/Makefile.am:
+       * gst/synaesthesia/Makefile.am:
+         android: make it ready for androgenizer
+         To build gstreamer for android we are now using androgenizer which
+         generates the needed Android.mk files.
+         Androgenizer can be found here: http://git.collabora.co.uk/?p=user/derek/androgenizer.git
+
+2011-04-10 18:34:11 -0400  Thibault Saunier <thibault.saunier@collabora.co.uk>
+
+       * android/NOTICE:
+       * android/amrnb.mk:
+       * android/amrwbdec.mk:
+       * android/asf.mk:
+       * android/mpegaudioparse.mk:
+         android: remove the android/ folder
+
+2011-04-04 15:57:58 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From 1ccbe09 to c3cafe1
+
+2010-09-21 20:14:04 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264enc: Allow changing the bitrate and quantitizers dynamically
+         https://bugzilla.gnome.org/show_bug.cgi?id=621663
+
+2010-09-21 19:33:10 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Set max bitrate in quality mode
+         https://bugzilla.gnome.org/show_bug.cgi?id=621663
+
+2010-09-21 19:20:29 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Make it clear that constant quantizer is for debugging only
+         https://bugzilla.gnome.org/show_bug.cgi?id=621663
+
+2011-03-25 22:34:31 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 193b717 to 1ccbe09
+
+2011-03-25 14:57:00 +0200  Stefan Kost <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From b77e2bf to 193b717
+
+2011-03-25 09:33:04 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From d8814b6 to b77e2bf
+
+2011-03-25 09:09:29 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 6aaa286 to d8814b6
+
+2011-03-24 18:50:17 +0200  Stefan Kost <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From 6aec6b9 to 6aaa286
+
+2011-03-22 12:59:33 +0100  Luis de Bethencourt <luis@debethencourt.com>
+
+       * configure.ac:
+         configure.ac: redundant use of AC_MSG_RESULT()
+         cleaned the redundant use of AC_MSG_RESULT() in configure.ac
+
+2011-03-18 19:34:57 +0100  Luis de Bethencourt <luis@debethencourt.com>
+
+       * autogen.sh:
+         autogen: wingo signed comment
+
+2011-03-15 11:02:42 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/dvdsub/gstdvdsubdec.c:
+       * gst/dvdsub/gstdvdsubdec.h:
+         dvdsubdec: Rearrange buffer allocation and pushing code a bit
+         This makes the code easier to read, doesn't store every buffer
+         in the instance until the next buffer is to be drawn and
+         fixes an unitialized variable compiler warning.
+
+2011-03-15 10:59:23 +0100  Brendan Le Foll <blefoll@fluendo.com>
+
+       * gst/dvdsub/gstdvdsubdec.c:
+         dvdsubdec: Output only a single buffer per subpicture and set the correct duration
+         Fixes bug #619136.
+
+2011-03-14 18:39:35 +0100  Brendan Le Foll <blefoll@fluendo.com>
+
+       * gst/dvdsub/gstdvdsubdec.c:
+         dvdsubdec: Implement clipping if the video size is smaller than the subpicture size
+         Fixes bug #644704.
+
+2011-03-11 17:45:37 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * ext/mad/gstmad.c:
+       * ext/mad/gstmad.h:
+         mad: build the mad plugin even if libid3tag is not available
+         ID3 tags are usually handled by id3demux, and should be handled
+         by id3demux. Tag handling in mad based on libid3tag is very basic
+         and mostly unnecessary really, so just build this plugin without
+         ID3 tag support if libid3tag is not available.
+
+2011-03-04 13:48:02 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+         Merge branch 'master' into 0.11
+
+2011-03-02 13:12:11 +0200  Stefan Kost <ensonic@users.sf.net>
+
+       * gst/mpegstream/gstdvddemux.c:
+         dvddemux: small code cleanup
+         Don't duplicate the 'if' check. Makes the 2nd condition easier to read also
+         and avoid empty 'if' when logging is disabled.
+
+2011-02-28 19:27:21 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * configure.ac:
+         configure.ac: export plugin description more platform independent
+         Fixes #642504.
+
+2011-02-28 18:33:34 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 1de7f6a to 6aec6b9
+
+2011-02-26 15:02:58 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+         Merge branch 'master' into 0.11
+         Conflicts:
+         configure.ac
+
+2011-02-21 13:13:11 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: do not fail fatally when unlinked
+         ... as _NOT_LINKED was neither tested as fatal before nor complained about.
+
+2011-02-21 11:05:31 +0200  Stefan Kost <ensonic@users.sf.net>
+
+       * ext/mad/gstmad.c:
+       * ext/mad/gstmad.h:
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/mpeg2dec/gstmpeg2dec.h:
+         index: remove conditional index support
+         Index support cannot be disabled since commit
+         4bfb1fe70c6f0d5e29c17a8eeffb02f7fd083f11
+         in core, which removed the configure flags to disable index.
+
+2011-02-17 18:06:51 +0200  Stefan Kost <ensonic@users.sf.net>
+
+       * ext/mad/gstmad.c:
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         formatting: trim trailing whitespace
+
+2011-02-17 18:05:58 +0200  Stefan Kost <ensonic@users.sf.net>
+
+       * ext/mad/gstmad.c:
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * gst/mpegstream/gstmpegdemux.c:
+         index: use delta frame flags instead of 0 or none
+
+2011-02-14 17:52:09 +0000  Sjoerd Simons <sjoerd.simons@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Don't register flags with a value of 0
+         Flags with a value of 0 aren't meaningful and will cause
+         g_value_transform to go into an endless loop when trying to
+         convert the flags to a string
+
+2011-02-14 12:54:10 +0200  Stefan Kost <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From f94d739 to 1de7f6a
+
+2011-02-07 19:58:45 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/amrwbdec/amrwbdec.c:
+         amrwbdec: avoid stalling on invalid frame
+         Skip 1 byte indicating invalid frame type index rather than stalling
+         on it indefinitely until EOS.
+         Fixes #639715.
+
+2011-02-03 18:25:00 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * tests/check/pipelines/lame.c:
+         tests: add unit test for lamemp3enc negotiation issue
+         https://bugzilla.gnome.org/show_bug.cgi?id=641151
+
+2011-02-03 18:18:35 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/lame/gstlamemp3enc.c:
+         lamemp3enc: implement sinkpad get_caps() function to proxy rate and channels restrictions from downstream
+         The element downstream of mp3enc might only accept certain sample rates or channels,
+         make sure we relay any restrictions that do exist to upstream when it does a
+         get_caps() on the sink pad. That way upstream elements like audioresample or
+         audioconvert can pick a sample rate / channel configuration that will be accepted,
+         instead of just negotiating to the highest, which might then be rejected.
+         https://bugzilla.gnome.org/show_bug.cgi?id=641151
+
+2011-01-30 16:17:19 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/asfpacket.c:
+         asfpacket: Avoid using broken duration extension
+         Quite a few (broken?) files have a packet duration of 1ms, which is
+         most definitely wrong for either audio or video packets.
+         We therefore avoid using that value and instead use other metrics to
+         determine the buffer duration (like using the extended stream properties
+         average frame duration if present and valid).
+
+2011-01-27 15:33:40 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * win32/common/config.h:
+         win32: fix DEFAULT_AUDIOSINK, should be direct*sound*sink
+         https://bugzilla.gnome.org/show_bug.cgi?id=640705
+
+2011-01-12 16:48:57 +0800  Yang Xichuan <xichuan.yang@tieto.com>
+
+       * gst/mpegaudioparse/gstxingmux.c:
+         xingmux: Use FALSE instead of 0 as return value for a function returning gboolean
+         Fixes bug #639291.
+
+2011-01-06 18:29:06 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+       * gst/mpegstream/gstdvddemux.c:
+         mpegstream: increase allowable gap between streams
+         The new delay is three times as much as the old one, and just happens
+         to let me properly decode my "Princess Mononoke" DVD, on which dvdreadsrc
+         was chocking before at 5:11.
+         While there, merge the constants used in two places into a define.
+         https://bugzilla.gnome.org/show_bug.cgi?id=539708
+
+2011-01-22 17:31:40 +0100  Miguel Angel Cabrera Moya <madmac2501@gmail.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: make tag event writable before modifying tag list in place
+         To modify an event tag is necessary to be sure that x264enc
+         has its own copy.
+         Also fix indentation.
+         https://bugzilla.gnome.org/show_bug.cgi?id=640272
+
+2011-01-24 10:14:56 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * win32/common/config.h:
+         Back to development
+
+=== release 0.10.17 ===
+
+2011-01-21 13:18:51 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 0.10.17
+
+2011-01-18 11:11:28 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * win32/common/config.h:
+         0.10.16.4 pre-release
+
+2011-01-14 17:37:09 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Use the proper component value for height
+
+2011-01-11 20:42:06 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * win32/common/config.h:
+         0.10.16.3 pre-release
+
+2011-01-11 17:09:02 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+       * gst/asfdemux/asfheaders.c:
+       * gst/asfdemux/asfheaders.h:
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Handle new type of DRM'd asf files.
+         These are produced by the new MS PlayReady system.
+         https://bugzilla.gnome.org/show_bug.cgi?id=639226
+
+2011-01-11 15:51:14 +0200  Stefan Kost <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From e572c87 to f94d739
+
+2011-01-10 16:37:19 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From ccbaa85 to e572c87
+
+2011-01-10 14:54:40 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 46445ad to ccbaa85
+
+2011-01-08 00:35:08 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * tests/check/Makefile.am:
+         tests: never disable g_assert() and cast checks for the unit tests
+         The unit tests are riddled with g_assert() and friends, make sure we
+         don't disable assert and cast checks for the unit tests even if
+         this has been specified for the rest of the code base, e.g. via
+         --disable-glib-asserts
+
+2011-01-07 14:42:26 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * win32/common/config.h:
+         0.10.16.2 pre-release
+
+2011-01-07 14:38:17 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+         docs: update docs
+
+2011-01-07 14:37:07 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * po/bg.po:
+       * po/ca.po:
+       * po/ru.po:
+         po: update translations
+
+2011-01-07 14:33:37 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+         configure: use $LIBM instead of hardcoding -lm
+
+2011-01-06 13:15:17 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: Initialize return variable.
+         In the unlikely event that height is 0 (which is invalid) we would end up
+         never setting the flow return.
+
+2011-01-05 16:52:03 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+       * gst/realmedia/rmutils.c:
+         realmedia: Fix unitialized variables on macosx
+
+2011-01-04 10:32:05 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Handle codec/encoder tags
+         Make x264enc drop video-codec and codec tags and replace
+         encoder/encoder-version with x264 and its build number
+         Fixes #621465
+
+2010-12-29 22:17:50 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: use gst_pad_alloc_buffer() when cropping buffers
+
+2010-12-29 22:10:58 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: minor formatting clean-up
+
+2010-12-29 21:42:36 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: refactor cropping code to use libgstvideo functions
+         https://bugzilla.gnome.org/show_bug.cgi?id=571146
+
+2010-12-29 20:19:34 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/mpeg2dec/gstmpeg2dec.h:
+         mpeg2dec: use GstVideoFormat instead of custom enum
+
+2010-12-29 20:15:03 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/mpeg2dec/Makefile.am:
+         mpeg2dec: fix LIBADD order in Makefile.am
+
+2010-11-19 13:01:35 -0500  Tristan Matthews <tristan@sat.qc.ca>
+
+       * ext/x264/gstx264enc.c:
+         x264: vbv-buf-capacity should have a minimum of 0
+         x264 will clip this value internally, and users should be allowed to
+         specify a lower value than 300 ms.
+         https://bugzilla.gnome.org/show_bug.cgi?id=635291
+
+2010-12-27 11:38:24 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: also accept YV12 input
+
+2010-12-01 18:35:59 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: add a note to the docs about encoder latency and queues
+         https://bugzilla.gnome.org/show_bug.cgi?id=636107
+
+2010-12-24 10:12:19 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rmdemux.c:
+         realmedia: do not use the pad buffer allocation functions in demuxers
+         Doing so can block, see https://bugzilla.gnome.org/show_bug.cgi?id=637822
+         https://bugzilla.gnome.org/show_bug.cgi?id=637932
+
+2010-12-20 17:47:41 +0100  Edward Hervey <edward.hervey@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 169462a to 46445ad
+
+2010-12-16 10:30:31 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+         mad: If gst_pad_alloc_buffer() returns a buffer with the wrong size allocate a new one
+         Fixes bug #635461.
+
+2010-12-15 14:56:36 +0200  Stefan Kost <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From 20742ae to 169462a
+
+2010-12-12 11:54:35 -0600  Rob Clark <rob@ti.com>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: set GST_BUFFER_FLAG_DELTA_UNIT properly
+         Signed-off-by: Rob Clark <rob@ti.com>
+
+2010-12-13 16:24:09 +0200  Stefan Kost <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From 011bcc8 to 20742ae
+
+2010-11-14 10:57:21 -0800  Leo Singer <leo.singer@ligo.org>
+
+       * configure.ac:
+         x264: uses pkg-config to locate libx264
+
+2010-12-07 15:40:08 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+         Merge branch 'master' into 0.11
+
+2010-12-07 15:39:32 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * tests/check/pipelines/lame.c:
+         check: don't use deprecated method
+
+2010-12-06 18:12:51 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * android/amrnb.mk:
+       * android/amrwbdec.mk:
+       * android/asf.mk:
+       * android/mpegaudioparse.mk:
+       * configure.ac:
+         more 0.10 -> 0,11 changes
+
+2010-12-06 12:29:12 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * configure.ac:
+         configure: open 0.11 branch
+
+2010-12-03 17:43:25 +0100  Benjamin Gaignard <benjamin.gaignard@stericsson.com>
+
+       * Android.mk:
+       * android/NOTICE:
+       * android/amrnb.mk:
+       * android/amrwbdec.mk:
+       * android/asf.mk:
+       * android/mpegaudioparse.mk:
+         Add build system for Android
+
+2010-11-25 19:51:50 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/realmedia/rmutils.c:
+         realmedia: Remove dead assignments
+
+2010-11-25 19:51:40 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * ext/mad/gstmad.c:
+         mad: Remove dead assignments
+
+2010-11-13 12:38:45 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdreadsrc: remove bogus comment
+
+2010-11-13 12:34:37 +0000  Thomas Green <thomasgr33n@gmail.com>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdreadsrc: fix handling of multi-angle streams
+         We would output all angles interleaved instead of just
+         the selected angle.
+         https://bugzilla.gnome.org/show_bug.cgi?id=539254
+
+2010-10-28 17:01:16 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/realmedia/Makefile.am:
+         realmedia: fix LIBS order in Makefile
+
+2010-10-22 09:17:40 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/gl.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ro.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         po: update for new translatable strings
+
+2010-10-27 13:17:29 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * common:
+         Automatic update of common submodule
+         From 7bbd708 to 011bcc8
+
+2010-10-20 20:26:45 +0200  Guillaume Emont <gemont@igalia.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: convert the position to stream time before answering to a position query
+
+2010-10-24 14:22:39 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/realmedia/Makefile.am:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rmdemux.c:
+       * gst/realmedia/rmdemux.h:
+         realmedia: Get codec name from pbutils instead of harcoding them
+
+2010-10-22 11:29:55 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Work around a rate control issue in libx264
+         When variable framerate is disabled in libx264 (which occurs when using
+         the zerolatency tuning), libx264 ignores timestamps but still uses the
+         timebase leading to messed up rate control with our nanosecond timebase.
+         We work around this issue by setting the timebase to the reciprocal of
+         the framerate and we validate that the framerate is suitable.
+         This has been fixed upstream in libx264 but there are non-fixed versions
+         in the wild so this workaround is still needed.
+         Fixes bug #632861
+
+2010-10-19 16:30:51 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Use gst_pad_peer_query() instead of getting the peer pad manually
+
+2010-10-13 21:38:06 +0200  Guillaume Emont <gemont@igalia.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: fix position query by trusting upstream
+         Position queries are badly handled for DVDs (probably due to the division in
+         chapters): the time returned was the time since the start of chapter.
+         Now ask upstream for position queries, fall back to the old code if upstream
+         cannot answer the query.
+
+2010-10-19 12:20:40 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * ext/lame/gstlame.c:
+       * ext/mad/gstmad.c:
+       * ext/sidplay/gstsiddec.cc:
+       * gst/mpegstream/gstmpegparse.c:
+         various: canonicalize property names
+
+2010-10-19 10:06:33 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbenc.c:
+       * ext/cdio/gstcdiocddasrc.c:
+       * ext/dvdread/dvdreadsrc.c:
+       * ext/lame/gstlame.c:
+       * ext/lame/gstlamemp3enc.c:
+       * ext/mad/gstmad.c:
+       * ext/sidplay/gstsiddec.cc:
+       * ext/x264/gstx264enc.c:
+         various (ext): add a missing G_PARAM_STATIC_STRINGS flags
+
+2010-10-19 09:49:47 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * gst/iec958/ac3iec.c:
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+       * gst/mpegstream/gstmpegparse.c:
+       * gst/mpegstream/gstrfc2250enc.c:
+       * gst/realmedia/pnmsrc.c:
+       * gst/realmedia/rdtmanager.c:
+         various (gst): add a missing G_PARAM_STATIC_STRINGS flags
+
+2010-10-14 12:32:16 -0700  David Schleef <ds@schleef.org>
+
+       * common:
+         Automatic update of common submodule
+         From 5a668bf to 7bbd708
+
+2010-10-08 12:44:52 -0700  David Schleef <ds@schleef.org>
+
+       * common:
+         Automatic update of common submodule
+         From c4a8adc to 5a668bf
+
+2010-10-08 12:56:05 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 5e3c9bf to c4a8adc
+
+2010-09-29 21:24:23 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/mad/gstmad.c:
+       * ext/mad/gstmad.h:
+         mad: support reverse playback
+
+2010-09-26 19:24:08 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/dvdread/dvdreadsrc.c:
+         dvdreadsrc: improve error messages on read errors
+         Provide proper i18n-ed error messages when a read error happens,
+         and point out that the error could be happening because the
+         DVD is scrambled.
+         https://bugzilla.gnome.org/show_bug.cgi?id=613633
+
+2010-09-24 00:03:50 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+         configure: set plugin release datetime
+
+2010-09-21 18:34:31 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * common:
+         Automatic update of common submodule
+         From aa0d1d0 to 5e3c9bf
+
+2010-09-15 20:14:47 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/mpegstream/gstmpegparse.c:
+         mpegparse: re-fix flow return handling
+         Fix wrong GST_FLOW_IS_SUCCESS substitution in commit e99cb46c:
+         -  } while (GST_FLOW_IS_SUCCESS (result));
+         +  } while (result != GST_FLOW_OK);
+
+2010-09-09 22:33:36 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * tests/check/Makefile.am:
+       * tests/check/generic/states.c:
+         tests: allow running state tests for all elements
+         Now one can use GST_NO_STATE_IGNORE_ELEMENTS=1 make generic/states.check
+         to try elements that would normaly be skipped.
+
+2010-09-09 09:53:07 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * Makefile.am:
+         New pkgconfig subdirectory needs to be added to SUBDIRS as well so it's entered and disted
+
+2010-09-08 00:09:35 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * pkgconfig/.gitignore:
+       * pkgconfig/Makefile.am:
+       * pkgconfig/gstreamer-plugins-ugly-uninstalled.pc.in:
+         Add gstreamer-plugins-ugly-uninstalled-0.10.pc file so other modules can find our plugins
+         This .pc file will not be installed, it's only for uninstalled setups,
+         same thing as we do for -good. This is so other modules' unit tests can
+         find our plugins properly in an uninstalled setup.
+
+2010-09-07 11:42:52 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From c2e10bf to aa0d1d0
+
+2010-09-06 23:53:10 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+         configure: re-enable use of -DGST_DISABLE_DEPRECATED in git versions
+
+2010-09-06 23:51:23 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/sidplay/gstsiddec.cc:
+         siddec: don't use GST_FLOW_IS_FATAL
+         GST_FLOW_IS_FATAL has been deprecated in core git.
+
+2010-09-05 18:58:50 -0700  David Schleef <ds@schleef.org>
+
+       * common:
+         Automatic update of common submodule
+         From d3d9acf to c2e10bf
+
+2010-09-05 12:27:02 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+         configure: Require orc >= 0.4.6 for --compat
+
+2010-09-05 12:20:22 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From ec60217 to d3d9acf
+
+2010-08-27 18:26:49 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Don't use GST_FLOW_IS_FATAL()
+         And don't post error messages if allocating a buffer resulted
+         in WRONG_STATE or UNEXPECTED.
+
+2010-08-27 18:25:31 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/mpegaudioparse/gstxingmux.c:
+         xingmux: Don't ignore WRONG_STATE and NOT_LINKED when pushing data downstream
+
+2010-08-27 18:24:11 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/mpegstream/gstdvddemux.c:
+       * gst/mpegstream/gstmpegdemux.c:
+       * gst/mpegstream/gstmpegparse.c:
+         mpegstream: Don't use GST_FLOW_IS_SUCCESS()
+
+2010-08-27 18:22:45 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: Don't use GST_FLOW_IS_FATAL() and GST_FLOW_IS_SUCCESS()
+
+2010-08-27 18:19:00 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Don't use GST_FLOW_IS_FATAL()
+         And don't post error messages for UNEXPECTED and post an error
+         message if pulling data failed because of NOT_LINKED.
+
+2010-09-04 13:17:53 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * win32/common/config.h:
+         Back to development
+         Temporarily disable -DGST_DISABLE_DEPRECATED for git builds until
+         the code is updated for the GST_FLOW_IS_* macro deprecations.
+
+=== release 0.10.16 ===
+
+2010-09-02 23:59:20 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 0.10.16
+
+2010-09-02 23:58:22 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+         docs: update docs for release
+
+2010-09-02 23:48:05 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * po/LINGUAS:
+       * po/gl.po:
+       * po/id.po:
+       * po/lv.po:
+       * po/ro.po:
+       * po/sv.po:
+         po: update translations
+
+2010-08-30 16:02:24 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         0.10.15.6 pre-release
+
+2010-08-27 17:50:59 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Don't error out on non-critical flow returns
+         Only error out when downstream returns:
+         * NOT_SUPPORTED
+         * ERROR
+         * NOT_NEGOTIATED
+         * NOT_LINKED
+         If we got _UNEXPECTED, we push an EOS downstream (since maybe only one
+         of the streams had gone EOS) and then stop the task silently.
+         In the case of WRONG_STATE we just need to stop silently
+         https://bugzilla.gnome.org/show_bug.cgi?id=600412
+
+2010-08-25 19:02:02 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         0.10.15.5 pre-release
+
+2010-08-25 15:39:33 +0200  Alessandro Decina <alessandro.decina@collabora.co.uk>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         mp3parse: propagate flow errors upstream.
+         Remove a wrong GST_FLOW_IS_FATAL call. When pushing fails, mp3parse should
+         always return the error upstream.
+
+2010-08-21 21:42:25 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         0.10.15.4 pre-release
+
+2010-08-13 17:24:41 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From 3e8db1d to ec60217
+
+2010-08-11 16:46:48 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * win32/common/config.h:
+         0.10.15.3 pre-release
+
+2010-08-11 09:21:43 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Fix b-pyramid libx264 API boolean arg for non-boolean issue
+         In X264_BUILD >= 78, b-pyramid became a non-boolean so passing a boolean
+         argument to the option string value causes an error. For < 78 we pass the
+         boolean value, for >= 78 we use the x264_b_pyramid_names[] array which will
+         result in passing 'none' for false and 'strict' for true. Other modes can be
+         set through the option-string property for now.
+         https://bugzilla.gnome.org/show_bug.cgi?id=626577
+
+2010-08-11 00:02:47 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * win32/common/config.h:
+         0.10.15.2 pre-release
+
+2010-08-10 14:37:39 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * gst/synaesthesia/gstsynaesthesia.c:
+         synaesthesia: code cleanups.
+         Remove unused boilerplate for signals. Use _OBJECT variants of logging macros
+         more.
+
+2010-08-10 14:24:01 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * gst/synaesthesia/gstsynaesthesia.c:
+         synaesthesia: use GST_BOILERPLATE macros
+
+2010-08-10 10:59:04 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From bd2054b to 3e8db1d
+
+2010-08-09 00:31:15 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264: fix printf format warning in debug message
+
+2010-08-07 00:09:47 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * docs/plugins/Makefile.am:
+         docs: fix bug passing arguments to gtkdoc-fixref in upload target
+         Missing backslash at end of line meant we weren't passing all arguments
+         to gtkdoc-fixref and we'd get a shell error when doing 'make upload'.
+
+2010-08-05 13:57:26 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From a519571 to bd2054b
+
+2010-08-04 19:28:09 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+         configure: Check if the compiler supports ISO C89 or C99 and which parameters are required
+         This first checks what is required for ISO C99 support and sets the relevant
+         compiler parameters and if no C99 compiler is found, it checks for a
+         C89 compiler. This enables us to check for and use C89/C99 functions
+         that gcc hides from us without the correct compiler parameters.
+
+2010-07-29 09:41:49 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Fix flushing of delayed frames
+         x264_encoder_encode() should be called with a NULL picture until at least
+         x264_encoder_delayed_frames() returns 0. This fixes what appeared to be a
+         regression in make check due to the recent change in defaults which enabled
+         b-frames and b-pyramid, both of which I believe increase the number of delayed
+         frames when encoding.
+
+2010-07-21 17:24:33 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Improve x264enc defaults
+         - medium x264 speed/quality preset
+         - threads defaults to 0 which automatically uses 1.5x number of cpu cores
+         Addresses part of bug #607798
+
+2010-07-21 17:22:48 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Fix property description typos
+
+2010-07-22 11:53:04 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Add some more debug info
+
+2010-07-21 17:09:20 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264enc: Add speed-preset and [psy-]tuning properties
+         Use of a rate control method (pass, bitrate, quantizer, etc properties), a
+         preset and possibly a profile and/or tuning are now the recommended way to
+         configure x264 through x264enc.
+         If a preset/tuning are specified then these will define the default values and
+         the property defaults will be ignored. After this the option-string property is
+         applied, followed by the user-set properties, fast first pass restrictions and
+         finally the profile restrictions.
+         Addresses part of bug #607798
+
+2010-07-21 16:56:06 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264enc: Refactor code in preparation for presets/tunings
+         - Make defaults append the appropriate default value to a string. This is
+         needed to differentiate between something user-set and the actual prop
+         default.
+         - Add an internal option string to which _set_property () cases append for the
+         majority of properties.
+         - Use gst_x264_enc_parse_options () to clean up application of settings. This
+         will make order of application with respect to the presets and tunings quite
+         simple.
+         Addresses part of bug #607798
+
+2010-07-21 16:32:11 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Update available me types
+         Use the x264_motion_est_names[] array to populate the enum of ME types. This is
+         now self-maintaining.
+
+2010-07-21 15:59:12 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Use new libx264 API to affect fast first pass
+         Uses new x264 API to apply reduced complexity values to the parameters to
+         increase encoding speed in the first pass of a multi-pass encode. This does
+         not impact on final quality.
+         Addresses part of bug #607798
+
+2010-07-21 15:52:28 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264enc: Add profile property
+         In X264_BUILD >= 86 there is a new API for applying restrictions to an H.264
+         Profile. This makes it easier to achieve Baseline Profile for example.
+         Addresses part of bug #607798
+
+2010-07-21 15:40:27 +0200  Robert Swain <robert.swain@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264enc: Add option-string property
+         Adds support for an x264 format option-string to specify advanced parameters
+         Addresses part of bug #607798
+
+2010-07-22 13:24:37 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/mad/Makefile.am:
+         mad: use right automake variable, should be ID3TAG_{LIBS,CFLAGS} not ID3_{LIBS,CFLAGS}
+         Spotted by syntr0py.
+
+2010-07-20 19:44:00 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: only set timebase on versions where it exists
+
+2010-07-20 16:40:22 +0200  David Hoyt <dhoyt@llnl.gov>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: set appropriate time base
+         Fixes #624786.
+
+2010-06-30 18:45:49 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * tests/check/Makefile.am:
+         tests: add plugin loading whitelist to test environment
+         Only want to load core/-base/-ugly plugins here.
+
+2010-06-28 16:12:12 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * autogen.sh:
+       * configure.ac:
+         Bump automake requirement to 1.10 and autoconf to 2.60
+         For maintainability reasons and $(builddir).
+         See #622944.
+
+2010-06-28 09:34:30 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Fix seeking after last commits
+         Don't handle wrong-state returns as errors to allow seeking to work
+         again.
+
+2010-06-24 19:46:39 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Push all pending data on EOS
+         When on push mode and receiving an EOS event, asfdemux
+         should push all pending data because we might be dealing
+         with a broken file that has a preroll value higher
+         than its actual length.
+
+2010-06-24 19:29:17 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Fix sending eos event for chained asfs
+         Properly push EOS event when finishing a chained asf file
+         in pull mode
+         Fixes #599718
+
+2010-06-24 20:55:33 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * docs/plugins/Makefile.am:
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+       * docs/plugins/inspect/plugin-rmdemux.xml:
+         docs: add rmdemux to docs properly
+         The plugin has been renamed, remove old introspection file.
+
+2010-06-24 18:04:15 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/inspect/plugin-x264.xml:
+         docs: update for recent x264enc changes
+
+2010-06-24 18:03:21 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: fix compiler warning when debugging system in core is disabled
+
+2010-06-24 15:09:44 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From 73ff93a to a519571
+
+2010-06-23 11:05:11 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Allow at least 500ms of preroll.
+         Some files have insanely low preroll values which break the
+         all_streams_prerolled() logic.
+         Fixes #622407
+
+2010-06-22 11:41:42 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: add new h264 caps attribute alignment
+         See #606662.
+
+2010-06-18 14:35:00 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264enc: conditionally expose enhanced upstream capabilities
+         API: GstX264Enc:sliced-threads
+         API: GstX264Enc:sync-lookahead
+         API: GstX264Enc:intra-refresh
+         API: GstX264Enc:mb-tree
+         API: GstX264Enc:rc-lookahead
+         See #607798.
+
+2010-06-17 16:48:59 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * common:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+         docs: update introspected plugin docs for gstdoc-scangobj and other changes
+         Update common for latest gstdoc-scangobj and inspect xml files for
+         escaping and pad template order changes.
+
+2010-06-15 16:50:21 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * common:
+         Automatic update of common submodule
+         From 9339ccc to 35617c2
+
+2010-06-15 16:54:42 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From 5adb1ca to 9339ccc
+
+2010-06-15 16:35:49 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From 57c89b7 to 5adb1ca
+
+2010-06-15 15:50:09 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From c804988 to 57c89b7
+
+2010-06-14 16:59:25 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+       * gst/realmedia/rtspreal.c:
+         configure: Update required GLib version to 2.20
+
+2010-06-14 15:33:14 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/a52dec/gsta52dec.c:
+         a52dec: Call orc_init() before trying to get target flags
+
+2010-06-14 14:34:56 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/a52dec/gsta52dec.c:
+         a52dec: Remove debug printf...
+
+2010-06-14 14:34:25 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+       * ext/a52dec/Makefile.am:
+       * ext/a52dec/gsta52dec.c:
+         a52dec: Use orc for CPU feature detection and don't check for liboil
+
+2010-06-14 13:27:47 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+         configure: Use GLIB_EXTRA_CFLAGS
+
+2010-06-14 13:05:25 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 7a0fdf5 to c804988
+
+2010-06-14 11:35:03 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 6da3bab to 7a0fdf5
+
+2010-06-12 08:29:28 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 733fca9 to 6da3bab
+
+2010-06-09 12:40:26 -0700  David Schleef <ds@schleef.org>
+
+       * common:
+         Automatic update of common submodule
+         From fad145b to 733fca9
+
+2010-06-09 12:34:18 -0700  David Schleef <ds@schleef.org>
+
+       * common:
+         Automatic update of common submodule
+         From 47683c1 to fad145b
+
+2010-06-05 14:11:30 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: pass bitrate on caps
+         Set the bitrate on the caps, some decoders like sipro need this to function
+         properly.
+         Fixes #620007
+
+2010-06-01 23:49:37 -0700  David Schleef <ds@schleef.org>
+
+       * common:
+         Automatic update of common submodule
+         From 17f89e5 to 47683c1
+
+2010-06-01 22:55:22 -0700  David Schleef <ds@schleef.org>
+
+       * common:
+         Automatic update of common submodule
+         From fd7ca04 to 17f89e5
+
+2010-05-31 16:57:42 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Only set i_weighted_pred on versions where it exists
+
+2010-05-20 11:28:47 -0400  Tristan Matthews <tristan@sat.qc.ca>
+
+       * ext/lame/gstlamemp3enc.c:
+         lamemp3enc: implement latency query
+         The encoder's latency is deduced from the framesize. Fixes #618896.
+
+2010-06-01 09:30:33 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/gst-plugins-ugly-plugins.signals:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * win32/common/config.h:
+         Back to development
+
+=== release 0.10.15 ===
+
+2010-05-30 14:21:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 0.10.15
+
+2010-05-30 14:20:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2010-05-30 12:10:29 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+         configure: make implicit GLib and liboil requirements explicit
+         core/base 0.10.26 require GLib >= 2.18 and liboil >= 0.3.14
+
+2010-05-26 23:16:46 -0400  Olivier Crête <tester@tester.ca>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: disable I weighted pred
+         If it is enabled, then it will be main profile instead of baseline.
+         This ensures maximum compatibility of the output stream until the
+         encoder configuration interface gets an overhaul with explicit
+         output profile selection.
+         Fixes #619776.
+
+2010-05-26 12:16:16 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * win32/common/config.h:
+         0.10.14.3 pre-release
+
+2010-05-26 11:52:53 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         po: update translations
+
+2010-05-26 11:55:58 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 357b0db to fd7ca04
+
+2010-05-14 20:06:46 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * win32/common/config.h:
+         0.10.14.2 pre-release
+
+2010-05-14 18:25:38 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 4d67bd6 to 357b0db
+
+2010-05-14 16:02:47 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/realmedia/rmdemux.c:
+       * gst/realmedia/rmutils.c:
+       * gst/realmedia/rmutils.h:
+         rmdemux: add better sipr nibble swap routine
+
+2010-05-13 17:57:57 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: descramble SIPR before pushing out
+         Collect and descramble the SIPR packets before pushing.
+         Descramble ATRAC audio.
+         Fixes #618098
+
+2010-05-13 17:57:02 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/realmedia/rmutils.c:
+       * gst/realmedia/rmutils.h:
+         rm: add function to descramble sipr
+
+2010-01-08 20:51:56 -0500  Olivier Crête <olivier.crete@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264enc: Re-send the received upstream event as-is downstream
+         https://bugzilla.gnome.org/show_bug.cgi?id=606689
+
+2010-05-07 15:33:28 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * ext/amrnb/amrnb.c:
+         amrnbenc: Set rank to GST_RANK_SECONDARY
+
+2010-04-30 19:53:15 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/realmedia/rtspreal.c:
+         rtspreal: use GLib's base64 functions if available
+         Since gst_rtsp_base64_decode_ip() just got deprecated in -base git.
+
+2010-04-28 17:10:36 +0400  Руслан Ижбулатов <lrn1986@gmail.com>
+
+       * ext/amrnb/amrnbdec.h:
+       * ext/amrnb/amrnbenc.h:
+       * ext/amrwbdec/amrwbdec.h:
+         amr: Use correct includes (as pkg-config suggests)
+         Fixes #617078
+
+2010-04-27 13:15:47 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * gst/ac3parse/.gitignore:
+       * gst/ac3parse/Makefile.am:
+       * gst/ac3parse/README:
+       * gst/ac3parse/ac3parse.vcproj:
+       * gst/ac3parse/gstac3parse.c:
+       * gst/ac3parse/gstac3parse.h:
+         ac3parse: remove unported 0.8 plugin
+         New ac3parse lives in gst-plugin-bad. Remove this to avoid confusion.
+
+2010-04-27 12:25:37 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         docs: adding a mp3decoder as well is useful
+
+2010-04-27 11:39:51 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+         docs: massage section index
+
+2010-04-27 11:39:11 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * ext/amrwbdec/amrwbdec.c:
+       * ext/amrwbdec/amrwbdec.h:
+         amrwbdec: move define to source to avoid hiding it from the docs
+
+2010-04-27 11:38:28 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * ext/cdio/gstcdiocddasrc.c:
+         docs: remove short_desc, it is taken from element details
+
+2010-04-27 11:37:52 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * gst/synaesthesia/gstsynaesthesia.c:
+         docs: fix sections docs for synaesthesia
+
+2010-04-27 11:02:15 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * docs/plugins/Makefile.am:
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         docs: add docs for mp3parse
+
+2010-04-20 17:23:04 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst-plugins-ugly.doap:
+         doap: update repository info from cvs->git and maintainers
+
+2010-04-23 14:41:42 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From fc85867 to 4d67bd6
+
+2010-04-13 16:59:03 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * tests/check/elements/x264enc.c:
+         x264enc: adaptive NALU type checking
+         In particular, be less picky about SEI NALU order, which makes test more
+         robust with respect to changes in libx264.
+         See also #615410.
+
+2010-04-16 21:10:58 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: adaptive x264 header NAL layout handling
+         Fixes #615410.
+
+2010-04-15 16:31:23 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstrtpasfdepay.c:
+         asfdepay: we require a dynamic payload type
+         Add an extra caps property that restricts the depayloader to only accept dynamic
+         payload types.
+
+2010-04-15 07:20:20 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * configure.ac:
+         configure: Drop -Wcast-align
+         Commit message copied from core's commit from Benjamin Otte:
+         246f5dba96a5b50bb74621af67b30942cca72af5
+         Apparently gcc warns that GstMiniObject is not castable to
+         GstEvent/Message/Buffer due to them containing 64bit variables, even
+         though ARM hackers claim that those only need 4byte alignment. And as
+         long as gcc behaves that way, this warning is not very useful.
+         So we'll remove the warning until this problem is fixed.
+         Fixes #615698
+
+2010-04-14 09:27:14 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: copy over all buffer flags when copying buffers.
+         Avoids losing the tff/rff video buffer flags
+
+2010-03-14 12:16:21 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/asfpacket.c:
+         asfdemux: Make a table static to avoid having to always allocate it.
+
+2010-04-13 16:31:25 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: fix up avcC header construction
+         Fix off-by-one introduced by commit 35dd89951d8bb1c094da65480e4197efdfb4e93c
+         for BUILD_X264 < 76.
+         Also fixes #610089.
+
+2010-04-13 13:16:41 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: parameterize libx264 provided NAL layout in codec-data creation
+
+2010-04-12 12:43:05 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * configure.ac:
+         configure: Remove -Wundef flag
+         Same fix as for #615161
+
+2010-04-09 11:23:22 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From fdf023d to fc85867
+
+2010-04-09 09:55:14 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst-libs/gst/gettext.h:
+         i18n: #if ENABLE_NLS -> #ifdef ENABLE_NLS to fix compiler warning
+
+2010-03-30 00:36:38 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * common:
+       * ext/Makefile.am:
+       * gst/Makefile.am:
+         build: build plugins in parallel where possible, if make -jN is used
+
+2010-03-26 17:08:23 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * Makefile.am:
+         build: add cruft alert for common/shave*
+
+2010-03-25 19:40:33 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * win32/MANIFEST:
+         Fix make distcheck
+         Remove removed file win32/common/config.h.in from MANIFEST.
+
+2010-03-24 19:35:03 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/synaesthesia/synaescope.c:
+       * gst/synaesthesia/synaescope.h:
+         synaestesia: Fix old-style prototype
+
+2010-03-24 19:07:11 +0300  Руслан Ижбулатов <lrn1986@gmail.com>
+
+       * gst/realmedia/rmutils.c:
+         Fix pointer type.
+         Fixes #613815
+
+2010-03-24 18:55:32 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * common:
+         Automatic update of common submodule
+         From 55cd514 to c1d07dd
+
+2010-03-24 11:27:40 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbenc.c:
+       * ext/cdio/gstcdiocddasrc.h:
+       * ext/dvdread/dvdreadsrc.c:
+       * ext/lame/gstlame.h:
+       * ext/lame/gstlamemp3enc.h:
+       * ext/lame/plugin.c:
+       * ext/mad/gstmad.c:
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+       * gst/mpegaudioparse/gstxingmux.c:
+       * gst/mpegstream/gstdvddemux.c:
+       * gst/mpegstream/gstmpegdemux.c:
+       * gst/mpegstream/gstmpegparse.c:
+       * gst/realmedia/asmrules.c:
+       * gst/realmedia/pnmsrc.c:
+       * gst/realmedia/pnmsrc.h:
+       * gst/realmedia/rdtdepay.h:
+       * gst/realmedia/rdtmanager.c:
+       * gst/realmedia/rtspreal.c:
+         build: Add all kinds of compiler warning flags and fix the resulting warnings
+
+2010-03-19 00:03:53 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/amrnb/Makefile.am:
+       * ext/amrwbdec/Makefile.am:
+       * ext/sidplay/Makefile.am:
+       * gst/asfdemux/Makefile.am:
+       * gst/mpegaudioparse/Makefile.am:
+         build: fix up Makefile.am
+         Mostly just add $(GST_BASE_CFLAGS) where they're missing and fix
+         the order a bit here and there (see docs/random/moving-plugins).
+
+2010-03-19 00:02:40 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * win32/common/config.h.in:
+         win32: remove win32-specific config.h.in copy that's not used any longer
+         The win32 config.h is now generated from the top-level config.h.in.
+
+2010-03-18 15:53:14 +0100  Benjamin Otte <otte@redhat.com>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbenc.c:
+       * ext/amrwbdec/amrwbdec.c:
+       * ext/cdio/gstcdiocddasrc.c:
+       * ext/dvdread/dvdreadsrc.c:
+       * ext/lame/gstlame.c:
+       * ext/mad/gstmad.c:
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * gst/ac3parse/gstac3parse.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstrtpasfdepay.c:
+       * gst/asfdemux/gstrtspwms.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/iec958/ac3iec.c:
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+       * gst/mpegaudioparse/gstxingmux.c:
+       * gst/mpegstream/gstdvddemux.c:
+       * gst/mpegstream/gstmpegdemux.c:
+       * gst/mpegstream/gstmpegparse.c:
+       * gst/mpegstream/gstrfc2250enc.c:
+       * gst/realmedia/pnmsrc.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rdtdepay.c:
+       * gst/realmedia/rdtmanager.c:
+       * gst/realmedia/rmdemux.c:
+       * gst/realmedia/rtspreal.c:
+       * gst/synaesthesia/gstsynaesthesia.c:
+         gst_element_class_set_details => gst_element_class_set_details_simple
+
+2010-03-16 15:05:06 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Put pixel-aspect-ratio from input into the src pad caps
+         Fixes bug #612995.
+
+2010-03-12 13:59:53 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * common:
+         Automatic update of common submodule
+         From e272f71 to 55cd514
+
+2010-03-11 11:21:19 +0100  Benjamin Otte <otte@redhat.com>
+
+       * common:
+         Automatic update of common submodule
+         From df8a7c8 to e272f71
+
+2010-03-10 22:13:45 +0100  Benjamin Otte <otte@redhat.com>
+
+       * configure.ac:
+         Update CXXFLAGS, too
+
+2010-03-10 21:01:20 +0100  Benjamin Otte <otte@redhat.com>
+
+       * configure.ac:
+         Update for recent changes to common submodule
+         This just replaces every "$ERROR_CFLAGS" usage with a usage of
+         "$WARNING_CFLAGS $ERROR_CFLAGS" to get the same functionality as
+         previously.
+         Actually using that separation will happen later.
+
+2010-03-10 21:52:30 +0100  Benjamin Otte <otte@redhat.com>
+
+       * common:
+         Automatic update of common submodule
+         From 9720a7d to df8a7c8
+
+2010-03-10 20:44:18 +0100  Benjamin Otte <otte@redhat.com>
+
+       * common:
+         Automatic update of common submodule
+         From 0b6e072 to 9720a7d
+
+2010-03-10 16:10:17 +0100  Benjamin Otte <otte@redhat.com>
+
+       * common:
+         Automatic update of common submodule
+         From 7cc5eb4 to 0b6e072
+
+2010-03-10 01:10:52 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 7aa65b5 to 7cc5eb4
+
+2010-03-09 21:40:26 +0000  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 44ecce7 to 7aa65b5
+
+2010-02-26 15:43:58 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+         configure: Use automake 1.11 silent rules instead of shave if available
+         This makes sure that we use something that is still maintained and
+         also brings back libtool 1.5 support.
+
+2010-03-09 17:42:11 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * win32/common/config.h:
+         Back to development
+
+=== release 0.10.14 ===
+
+2010-03-06 01:13:25 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+       * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 0.10.14
+
+2010-03-06 01:10:09 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/el.po:
+       * po/en_GB.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sl.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2010-03-03 22:52:12 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * win32/common/config.h:
+         0.10.13.4 pre-release
+
+2010-02-22 19:13:11 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+       * tests/check/elements/x264enc.c:
+         x264enc: Replace 'avc-sample' with 'avc' in caps
+         In the element and in its tests
+         Fixes #606662
+
+2010-03-01 14:07:20 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Don't set durations of 0 on outgoing buffers.
+         Some (broken) streams don't have the extended stream properties in
+         the header, resulting in applying a duration of zero on outgoing
+         buffers.
+         Fixes #611473
+
+2010-03-01 14:05:58 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/asfpacket.c:
+         asfdemux: Make sure we always set proper payload duration.
+         Some (broken) streams will have a delta of 0, resulting in outgoing
+         buffers having durations of 0.
+         Fixes #611473
+
+2010-02-24 01:40:34 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * win32/common/config.h:
+         0.10.13.3 pre-release
+
+2010-02-19 10:13:34 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/asfpacket.c:
+         asfdemux: Make sure we don't end up with negative timestamps.
+         Some files have payload with timestamps smaller than the preroll duration.
+         Instead of blindly substracting the preroll value (and ending up with
+         insanely high timestamps on the outgoing buffers), we make sure we
+         never go below 0.
+         Fixes #610432
+
+2010-02-19 01:07:08 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * win32/common/config.h:
+         0.10.13.2 pre-release
+         Update core/base requirement to 0.10.26, since that's more likely
+         to be the actual requirement.
+
+2010-02-19 01:06:44 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * po/LINGUAS:
+       * po/el.po:
+       * po/sl.po:
+         po: update translations
+
+2010-02-16 14:08:12 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * tests/check/elements/x264enc.c:
+         x264enc: add caps check to x264enc unit test
+         Add some minimal caps checking to x264enc unit test.
+         See #610089.
+
+2010-02-16 13:25:11 +0000  Vittorio Palmisano <vpalmisano@gmail.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: fix up avcC header construction and playback by flash players
+         Fix off-by-one bug when constructing the avcC header chunk: we
+         wrote wrong profile info into the header. The first byte in the
+         SPS NAL we get from x264 is the nal type, not the profile_idc.
+         Also add some debug logging.
+         Fixes #610089.
+
+2010-02-16 12:59:54 +0100  Robert Swain <robert.swain@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Improve seek behaviour for audio-only with no index
+         Instead of seeking to seek_time - 5s in the hope of hitting a keyframe
+         for video, we can just seek to seek_time instead.
+
+2010-02-16 00:24:32 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+         configure: fix up GST_CXXFLAGS properly
+         We don't want C specific flags in GST_CXXFLAGS, so base it on the
+         GST_CFLAGS that only contains the pkg-config CFLAGS but none of
+         the GST_OPTION_CFLAGS. Also, we only need the local includes once.
+
+2010-02-11 01:12:43 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * MAINTAINERS:
+         Update MAINTAINERS, add myself
+
+2010-02-15 23:16:32 +0200  Stefan Kost <ensonic@users.sf.net>
+
+       * configure.ac:
+         configure: base GST_CXXFLAGS on --cflags from pkg-config
+         pkg-config sets GST_CFLAGS and GST_LIBS. We need to use CFLAGS as a starting
+         point for for both C and CXX settings.
+
+2010-02-14 23:18:44 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 96dc793 to 44ecce7
+
+2010-02-01 01:33:22 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * Makefile.am:
+       * configure.ac:
+       * win32/common/.gitignore:
+       * win32/common/config.h:
+         win32: change how win32/common/config.h is updated
+         Generate win32/common/config.h-new directly from config.h.in,
+         using shell variables in configure and some hard-coded information.
+         Change top-level makefile so that 'make win32-update' copies the
+         generated file to win32/common/config.h, which we keep in source
+         control. It's kept in source control so that the git tree is
+         buildable from VS.
+         This change is similar to the ones applied a while ago to GStreamer
+         core, gst-plugins-base and gst-plugins-good and prevents configure
+         from changing files in source control. The generated config.h
+         should be ok, but needs testing.
+
+2010-01-31 13:03:33 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/realmedia/rtspreal.c:
+         rtspreal: don't construct config header with uninitialised bytes
+         Turns out 4 + 4 + 2 + (4 * 2) is actually 18 and not 22. This avoids
+         a presumably unintentional padding of uninitialised bytes at the end
+         of the CONT tags chunk, which should be harmless but causes warnings
+         in valgrind (see #608533 for a test URL).
+
+2010-01-30 19:12:24 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/realmedia/rtspreal.c:
+         rtspreal: add finalize function so we can free streams and rulebook
+         Fix memory leak in Real RTSP component (#608533).
+
+2010-01-30 19:10:45 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/realmedia/rtspreal.c:
+         rtspreal: fix minor memory leak
+         Caps take their own reference when a buffer is added to them, so
+         unref buffer after adding it to caps (#608533).
+
+2010-01-30 19:06:34 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/realmedia/rdtdepay.c:
+         rdtdepay: unref input buffer when done
+         Fixes memory leak, see #608533.
+
+2010-01-30 15:19:56 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 15d47a6 to 96dc793
+
+2010-01-29 19:47:03 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264enc: make use of Access Unit delimiters configurable
+         API: GstX264Enc:aud
+
+2010-01-22 15:40:28 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * gst/asfdemux/asfpacket.c:
+         asfdemux: Do not subtract padding twice
+         Only subtract implicit padding if an explicit one isn't
+         provided. Avoids subtracting it twice and causing
+         parsing errors.
+         Fixes #607698
+
+2010-01-22 16:55:14 +0200  Stefan Kost <ensonic@users.sf.net>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/mpegstream/gstmpegpacketize.c:
+         assert: g_assert_not_reached() cannot replace return statement
+         Fix build with assert being turned off.
+
+2010-01-20 00:55:12 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 14cec89 to 15d47a6
+
+2010-01-18 18:01:55 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Don't forget to update flow variable
+         Forgot to update the return value in the loop.
+
+2010-01-18 17:49:06 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Check flow return on every push
+         We previously only aggregated flow returns after the while(push) loop,
+         which meant that in some cases we would end-up not properly aggregating
+         the flow returns.
+         This is based on the same flow aggregation algorithm as oggdemux.
+
+2010-01-11 16:14:44 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Add stream-format to output caps
+         Adds stream-format to output caps of x264enc that
+         informs if the stream is in bytestream of avc format.
+         Fixes #606662
+
+2010-01-11 12:23:35 +0100  Arnaud Patard <apatard@mandriva.com>
+
+       * gst/mpegaudioparse/gstxingmux.c:
+         xingmux: Fix unaligned memory access
+         ARM/SPARC need 32bit alignment but xingmux accesses possibly
+         unaligned memory, which leads to SIGBUS.
+         Fixes bug #586464.
+
+2010-01-07 14:36:47 -0800  Michael Smith <msmith@songbirdnest.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Use GST_STR_NULL in a couple of places.
+         Fixes crashing on some of the log statements on win32.
+
+2010-01-07 16:36:08 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: Parse and post bitrate for streams
+         Parse the bitrate of the streams and post their tags.
+         Fixes #599299
+
+2010-01-07 13:54:21 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: Post bitrate tag
+         If stream bitrate object is available, post the bitrate
+         tags.
+         Fixes #599297
+
+2010-01-04 15:19:25 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+       * gst/mpegaudioparse/gstmpegaudioparse.h:
+         mp3parse: minor validation check of (Xing, VBRI) metadata
+         ... to detect e.g. a truncated file, rendering some of the metadata invalid.
+
+2010-01-04 14:59:06 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         mp3parse: use proper total_time and total_bytes in various cases
+         The correct basis for (Xing, VBRI) seek table calculations is the
+         byte size and duration provided by that metadata, rather than some
+         other (possibly even estimated) one.  This also prevents an infinite
+         conversion loop in (unlikely) case where a TOC is provided without
+         such corresponding (duration) metdata.
+
+2009-12-08 19:55:04 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+       * gst/mpegaudioparse/gstmpegaudioparse.h:
+         mp3parse: conserve stop time for non-accurate seek
+         Use the same strategy as accurate seeks to store
+         pending non-accurate seeks to avoid overwriting non-definite
+         stop times. When doing non-accurate seeks our position
+         reporting might drift off by some secs and the stream can
+         end up before it should.
+         Fixes #603695
+
+2009-12-21 19:12:59 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 47cb23a to 14cec89
+
+2009-12-18 16:04:12 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/amrwbdec/amrwb.c:
+         amrwbdec: give decoder a rank so decodebin/playbin will use it
+
+2009-12-08 19:01:50 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         mp3parse: return false when we can't seek
+         When upstream can't seek, we return false as well
+
+2009-12-02 11:21:22 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * ext/lame/gstlame.c:
+       * ext/lame/gstlamemp3enc.c:
+         lame: Avoid crash when seeking before negotiating
+         lame's 'lgv' variable is only initialized when the caps
+         is negotiated, whenever a seek happens before that, it would
+         attempt to call a function on an empty pointer, causing the crash.
+         Fixes #603515
+
+2009-12-01 15:08:07 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 87bf428 to 47cb23a
+
+2009-12-01 14:17:50 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From da4c75c to 87bf428
+
+2009-11-27 18:56:13 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * common:
+         Automatic update of common submodule
+         From 53a2485 to da4c75c
+
+2009-11-26 15:54:45 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         mp3parse: fix non-flushing seek
+         Specifically, in addition to clearing lots of variables/offsets
+         when receiving newsegment, also clear leftover data to match.
+
+2009-11-20 21:32:31 -0500  Olivier Crête <olivier.crete@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         x264enc: Make upstream GstForceKeyUnit thread-safe
+         Also send the GstForceKeyUnit event downstream when an upstream on is received,
+         allowing muxers or payloaders to take appropriate actions.
+         https://bugzilla.gnome.org/show_bug.cgi?id=602556
+
+2009-11-19 10:31:25 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From a3e3ce4 to 53a2485
+
+2009-11-18 09:58:39 +0100  Benjamin Gaignard <benjamin@gaignard.net>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Don't call strlen() on NULL pointers
+         Fixes bug #602280.
+
+2009-11-09 15:02:05 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Remove old pads when new ones are added
+         The old pads were being removed before adding the new ones,
+         we should add the new ones first.
+         Fixes #599718
+
+2009-11-09 13:30:45 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: Handle chained asfs on pull mode
+         Adds chained asfs handling to pull mode. It now checks if
+         there is a new asf header after the last packet (when it
+         is possible to know how many packets are) or it tries
+         checking if a processed packet that fails is an header
+         object.
+         Fixes #599718
+
+2009-11-09 10:24:46 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: properly do chained asfs on push mode
+         To properly do chained asfs work with playbin2, we need to
+         push eos on the old pads before removing them.
+         Fixes #599718
+
+2009-10-27 17:48:03 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: add support for chained asfs (push mode)
+         Adds support for detecting and playing chained asfs
+         in push mode. asfdemux tries to detect a new asf start
+         by identifying the header object guid in a input buffer.
+         When it finds it, it resets its state, removing its pads
+         and creates new ones for the new file.
+
+2009-11-05 18:33:09 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: fix two small leaks
+
+2009-11-05 18:19:58 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: prefer WM/TrackNumber over WM/Track, it's more reliable
+         WM/Track has a 0 base but is often wrongly written as starting from 1,
+         so not as reliable as WM/TrackNumber which always starts from 1.
+
+2009-11-05 18:11:55 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: WM/Track starts counting from 0, adjust to start from 1
+
+2009-11-05 18:11:14 +0000  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: map WM/TrackNumber to GST_TAG_TRACK_NUMBER as well
+         There's both WM/Track and WM/TrackNumber.
+
+2009-11-04 15:52:09 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * ext/a52dec/gsta52dec.c:
+         a52dec: Fix debug statement: Pass pos variable instead of time() function
+
+2009-11-04 15:50:17 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * gst/dvdsub/gstdvdsubdec.c:
+         dvdsubdec: Fix printf format string warning
+
+2009-11-04 15:46:04 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Fix bogus variable used uninitialised warnings
+
+2009-11-04 13:55:39 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * po/Makevars:
+         po: Don't create backup .po files
+         As well as preventing creation of useless backup files, it works
+         around a bug in gettext 0.17 on OS/X
+
+2009-10-29 11:39:13 -0700  Michael Smith <msmith@songbirdnest.com>
+
+       * gst/asfdemux/asfpacket.c:
+         asfdemux: fix c99-style comments.
+
+2009-10-29 10:34:17 -0700  Michael Smith <msmith@songbirdnest.com>
+
+       * gst/asfdemux/asfpacket.c:
+         asfdemux: accept fragments in a continued packet where the subsequent fragments declare a size of 0. Fixes bug 600037.
+
+2009-10-27 12:33:24 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/realmedia/rmutils.c:
+         rmutils: fix byteswapping
+         fix the byteswapping code that was wrong because of the side effects of the
+         READ/WRITE macros.
+         Fixes #599676
+
+2009-10-20 20:00:44 +0100  Robert Swain <robert.swain@gmail.com>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: Adapt to slightly modified x264 API
+         Fixes #599095.
+
+2009-10-26 17:31:19 -0300  Thiago Santos <thiago.sousa.santos@collabora.co.uk>
+
+       * gst/asfdemux/asfpacket.c:
+         asfdemux: careful to avoid crash on bogus data
+         When receiving bogus data, we have to avoid subtracting a value
+         larger than 'size' from 'size' variable, resulting in a wrap
+         that would make 'size' a really large bogus value.
+         Fixes #599333
+
+2009-10-26 00:56:37 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * win32/common/config.h:
+         win32: Commit bumped version number
+
+2009-10-17 13:46:13 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         mpegaudioparse: Don't use expensive glib ways to get an enum nick.
+         Fixes #598761
+         This removes a good 50% of processing time for parsing a buffer.
+         We do this by simply... getting the nicks that we already have handy
+         instead of going through the expensive glib system.
+
+2009-10-24 20:36:41 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * configure.ac:
+         configure.ac: And back to development we go...
+
+=== release 0.10.13 ===
+
+2009-10-21 17:16:00 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * common:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * gst-plugins-ugly.doap:
+       * win32/common/config.h:
+         Release 0.10.13
+
+2009-10-21 17:02:42 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/en_GB.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2009-10-16 10:16:55 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From 85d1530 to 0702fe1
+
+2009-10-15 23:56:55 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * ChangeLog:
+       * configure.ac:
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/en_GB.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+       * win32/common/config.h:
+         0.10.12.3 pre-release
+
+2009-10-14 10:41:48 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * common:
+         Automatic update of common submodule
+         From a3e3ce4 to 85d1530
+
+2009-10-13 13:05:32 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * ext/a52dec/gsta52dec.c:
+         a52dec: Fix reference leak on all input buffers in 'dvd mode'
+         https://bugzilla.gnome.org/show_bug.cgi?id=598272
+
+2009-10-12 13:54:27 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * ChangeLog:
+       * configure.ac:
+       * po/LINGUAS:
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/de.po:
+       * po/en_GB.po:
+       * po/es.po:
+       * po/eu.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/lv.po:
+       * po/ms.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+       * win32/common/config.h:
+         0.10.12.2 pre-release
+
+2009-10-12 11:31:22 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * docs/plugins/gst-plugins-ugly-plugins.args.new:
+       * docs/plugins/gst-plugins-ugly-plugins.signals.new:
+         docs: Remove files accidentally added
+         Remove the gst-plugins-ugly-plugins.args.new and
+         gst-plugins-ugly-plugins.signals.new files, that appear
+         to have been accidentally added in commit
+         f5d046a0b034f9bd7274291f7131ee5db1a30052
+
+2009-09-16 00:00:28 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * ext/a52dec/gsta52dec.c:
+         a52dec: Add some debugging for new segment events
+
+2009-10-11 16:18:37 +0200  Josep Torra <n770galaxy@gmail.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: fix warning in macosx snow leopard
+
+2009-10-11 16:16:09 +0200  Josep Torra <n770galaxy@gmail.com>
+
+       * gst/mpegstream/gstmpegparse.c:
+         mpegstream: fix warning in macosx snow leopard
+
+2009-10-11 16:14:08 +0200  Josep Torra <n770galaxy@gmail.com>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         mpegaudioparse: fix warning in macosx snow leopard
+
+2009-10-11 16:09:11 +0200  Josep Torra <n770galaxy@gmail.com>
+
+       * gst/dvdsub/gstdvdsubdec.c:
+         dvdsubdec: fix warning on macosx snow leopard
+
+2009-10-11 16:06:25 +0200  Josep Torra <n770galaxy@gmail.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: fix warning in macosx snow leopard
+
+2009-10-08 19:58:25 +0300  René Stadler <rene.stadler@nokia.com>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         mp3parse: don't fail SEEKING query when upstream query fails for TIME format
+
+2009-10-08 11:01:03 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * common:
+         Automatic update of common submodule
+         From 19fa4f3 to a3e3ce4
+
+2009-10-07 14:22:09 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/realmedia/rdtmanager.c:
+         build: fprintf, sprintf, sscanf need stdio.h
+
+2009-10-02 18:27:11 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * ext/mad/gstmad.c:
+         mad: add missing include to fix the build
+
+2009-10-05 12:13:51 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+         dvdlpcm: whitespace fixes
+
+2009-10-04 22:51:41 +0100  Christian F.K. Schaller <christian.schaller@collabora.co.uk>
+
+       * gst-plugins-ugly.spec.in:
+         update spec file
+
+2009-10-02 15:22:38 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * configure.ac:
+         x264enc: adjust configure checking to changed upstream
+
+2009-10-01 18:58:42 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         x264enc: conditionally adjust to new upstream API
+         Fixes #596517.
+
+2009-09-24 17:49:52 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+       * gst/mpegaudioparse/gstmpegaudioparse.h:
+         mpegaudioparse: prevent infinite (re)syncing
+         Conflicts:
+         gst/mpegaudioparse/gstmpegaudioparse.c
+
+2009-09-22 12:13:38 -0700  Michael Smith <msmith@songbirdnest.com>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         mp3parse: Refactor checking for sync. Make resyncing more reliable.
+         Previously, we could get false sync relatively easily - it sometimes happened
+         on real files. This cleans the code up a fair bit, and makes it require more
+         confirmation that we've found valid sync before continuing.
+
+2009-09-17 16:12:29 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         mpegaudioparse: ensure 2 valid headers in a row when resyncing
+
+2009-09-11 10:05:02 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/mpegstream/gstdvddemux.c:
+         dvddemux: remove bogus ifndef
+
+2009-09-05 10:23:49 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 94f95e3 to 19fa4f3
+
+2009-09-01 12:22:39 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Fix GstIndex handling, incl. refcounting and NULL indizes
+
+2009-08-31 13:42:27 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/dvdsub/gstdvdsubparse.c:
+         dvdsubparse: GstAdapter is not a GstObject and should be freed with g_object_unref
+
+2009-08-24 13:59:05 -0700  David Schleef <ds@schleef.org>
+
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbenc.c:
+         Remove Ronald Bultje from Authors field
+         Replaced with "GStreamer maintainers
+         <gstreamer-devel@lists.sourceforge.net>" or just removed,
+         depending on the number of other authors.
+
+2009-08-24 13:57:14 -0700  David Schleef <ds@schleef.org>
+
+       * gst/asfdemux/Makefile.am:
+       * gst/asfdemux/gstasfmux.c:
+       * gst/asfdemux/gstasfmux.h:
+         asfdemux: Remove old non-built asfmux code
+         Remove so people don't confuse it with the new asfmux code
+         in -bad.
+
+2009-08-23 13:35:46 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/a52dec/gsta52dec.c:
+         a52dec: Only add the MM_ACCEL_DJBFFT flag if it's defined
+         It's not defined for older liba52 versions.
+
+2009-08-23 13:34:32 +0200  Mart Raudsepp <leio@gentoo.org>
+
+       * ext/a52dec/gsta52dec.c:
+         a52dec: Allow liba52 to use djbfft based IMDCT transform
+         liba52 in a52dec-0.7.4 does not have any MMX, MMXEXT or 3DNOW based
+         IMDCT transform acceleration. It does however have a software based
+         acceleration using the djbfft library (D.J. Bernstein's library for
+         fourier transforms - Extremely fast library for floating-point
+         convolution). So allow liba52 to use it through the MM_ACCEL_DJBFFT
+         flag.
+         The liba52 copy in MPlayer sources does have SSE, 3dnowext, 3dnow
+         and AltiVec implementations, but those are checked for first, and
+         djbfft is chosen only if none of those is available - good in the
+         case of some distributions including a port of the MPlayer changes
+         in their system a52dec library.
+         The down and upmix code in liba52 doesn't seem to be disturbed by
+         this additional MM_ACCEL flag and will still use MMX, SSE or 3DNOW
+         versions if passed from oil_cpu_get_flags (SSE currently is not).
+         Fixes bug #592787.
+
+2009-08-17 17:31:10 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+         amr: Use opencore-amr pkg-config files if possible
+         This makes it possible to build the plugins when the libraries
+         are installed at non-standard locations.
+         Fixes bug #591348.
+
+2009-08-14 12:07:40 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         mpegaudioparse: use metadata (xing, vbri) provided bytesize for conversions
+         Metadata provided seek tables are consistent with metadata's view of
+         total size, which typically matches real size, but need not do so
+         (e.g. a truncated file).  Fixes seeking and position reporting
+         in such truncated files (although duration based on metadata may then
+         still be incorrect).
+
+2009-08-10 22:22:39 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+         configure: bump core/base requirements to released versions
+         to avoid confusion.
+
+2009-08-04 10:44:43 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * configure.ac:
+         configure: Remove all mentions to the id3tag plugin which was removed
+
+2009-08-01 08:43:21 +0200  Marvin Schmidt <marvin_schmidt@gmx.net>
+
+       * configure.ac:
+         mad: make check for mad independent of the check for id3tag
+         Fixes bug #590432.
+
+2009-07-31 00:25:43 -0300  Thiago Santos <thiagoss@embedded.ufcg.edu.br>
+
+       * gst/asfdemux/gstrtpasfdepay.c:
+         rtpasfdepay: set padding size to the correct value
+         asf packets in rtp packets should come with their padding fields
+         set to 0 and the depayload must update them to the correct
+         value before pushing downstream
+
+2009-07-27 20:12:20 +0200  Iago Toral <itoral@igalia.com>
+
+       * configure.ac:
+       * docs/plugins/Makefile.am:
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+       * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-amrwbdec.xml:
+       * ext/Makefile.am:
+       * ext/amrnb/GstAmrnbEnc.prs:
+       * ext/amrnb/Makefile.am:
+       * ext/amrnb/README:
+       * ext/amrnb/amrnb.c:
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbdec.h:
+       * ext/amrnb/amrnbenc.c:
+       * ext/amrnb/amrnbenc.h:
+       * ext/amrnb/amrnbparse.c:
+       * ext/amrnb/amrnbparse.h:
+       * ext/amrwbdec/Makefile.am:
+       * ext/amrwbdec/README:
+       * ext/amrwbdec/amrwb.c:
+       * ext/amrwbdec/amrwbdec.c:
+       * ext/amrwbdec/amrwbdec.h:
+         amr: Add AMR-WB decoder and AMR-NB encoder and decoder
+         These are based on the OpenCore codecs.
+         Fixes bug #584890.
+
+2009-07-24 00:43:07 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * common:
+         Automatic update of common submodule
+         From fedaaee to 94f95e3
+
+2009-07-22 11:10:38 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * LICENSE_readme:
+       * REQUIREMENTS:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+       * docs/plugins/gst-plugins-ugly-plugins.args.new:
+       * docs/plugins/gst-plugins-ugly-plugins.signals.new:
+       * docs/plugins/inspect/plugin-dvdnav.xml:
+       * ext/Makefile.am:
+       * ext/dvdnav/.gitignore:
+       * ext/dvdnav/Makefile.am:
+       * ext/dvdnav/README:
+       * ext/dvdnav/dvdnavsrc.c:
+       * ext/dvdnav/dvdnavsrc.h:
+       * ext/dvdnav/gst-dvd:
+       * ext/dvdread/dvdreadsrc.c:
+       * gst-plugins-ugly.spec.in:
+       * po/POTFILES.in:
+         dvdnav: remove dvdnav plugin
+         Remove dvdnav plugin, it has no future. resindvd is the plugin to
+         use for dvd playback. Note that dvdnav was never really enabled
+         in -ugly, you had to edit configure.ac to get it built.
+
+2009-06-20 14:31:06 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * tests/check/elements/mpeg2dec.c:
+         mpeg2dec: Fix unused variables compiler warnings in unit test
+
+2009-06-26 15:21:12 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * autogen.sh:
+         autogen.sh: Use printf instead of 'echo -n'. Check for automake-1.1[01]
+         Check for more automake command variants. Use printf instead of 'echo -n'
+         for portability
+
+2009-07-13 12:24:14 -0400  Olivier Crête <olivier.crete@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 5845b63 to fedaaee
+
+2009-02-10 13:25:54 +0000  Tim-Philipp Muller <tpm@mini.centricular.net>
+
+       * .gitignore:
+         Make git ignore more files
+
+2009-06-29 11:10:42 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Refactor multiple packet pull.
+         This also fixes a bug by which the first buffer (in a multi-packet mode)
+         passed to asf_demux_parse_packet() would have a GST_BUFFER_SIZE of the
+         full incoming buffer and not just of the single asf packet.
+         Fixes corrupted frames introduced by latest commit.
+
+2009-06-29 10:58:49 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: use the right accurate field
+         Remove accurate variable and its faulty use because the real variable is an
+         instance variable.
+
+2009-06-28 17:48:11 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/asfpacket.c:
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Sprinkle branch prediction macros accross the code
+
+2009-06-28 17:43:12 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Delay newsegment handling until we have a keyframe.
+         We now have a chance for packets to be collected before we send out the
+         newsegment. If we're not in accurate seeking (keyunit) it will set
+         the segment start/time to the keyframe's timestamp.
+
+2009-06-28 17:39:23 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Remove useless check. We already have checked for it above.
+
+2009-06-28 17:31:11 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: No longer queue GOPs now that seeking is fixed.
+         We now *always* seek to the keyframe just before our requested position.
+         When we encounter the first keyframe and we were not accurate (therefore doing
+         keyframe seeking), we update the segment start position to the keyframe timestamp.
+
+2009-06-28 17:42:44 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: Store the accurate seeking flag
+
+2009-06-28 17:04:00 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Use the average frame duration for buffers without a duration.
+         This will still cause some timestamp jitter, but giving a hint as to the duration
+         rather than nothing seems to be a better idea.
+         Also, this allows some scenarios (like remuxing with asfmux) to estimate the total
+         duration using the accumulated packet duration (which will be correct).
+
+2009-06-28 17:02:17 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: Use index entry packet count to optimize seeking.
+         The simple index entries also contain the number of packets one needs
+         to retrieve at a given position to get a full keyframe. We therefore
+         use that information to retrieve all those packets in one buffer when
+         working in pull-mode.
+
+2009-06-26 20:52:29 -0300  Thiago Santos <thiagoss@embedded.ufcg.edu.br>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Do not try to free const pointer
+         In gst_asf_demux_chain_headers, when 'goto wrong_type' was called
+         asfdemux tried to free a const pointer that had been cast to a
+         normal pointer variable.
+
+2009-06-26 20:44:09 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Use presentation timestamp when searching in the index.
+         We need to take the preroll into account... else we end up too early.
+
+2009-06-26 13:43:16 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * common:
+         Automatic update of common submodule
+         From f3bb51b to 5845b63
+
+2009-06-26 13:35:38 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Convert index entry from presentation time to timestamps.
+         We weren't taking the preroll into account previously, meaning that we
+         were always seeking preroll nanoseconds too early... resulting in a lot
+         of dropped packets (which are before the start time).
+         This brings quit a bit closer to as-fast-as-possible seeking in asf files.
+
+2009-06-26 10:58:56 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * common:
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Fix byte array metadata handling.
+         We basically discard byte array metadata. Should be trivial to adapt
+         to storing the pointers if we need it later on.
+
+2009-06-26 10:41:28 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: Handle PAR/interlaced information stored in packet payload.
+         This is the 'other' way to store non 1/1 PAR in asf streams (by storing it
+         in the ASF Packet payload extensions).
+
+2009-06-26 10:40:39 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: Store/Handle global metadata (not specific to one stream).
+         This allows us to store (and handle) PAR information which might be stored there.
+
+2009-06-25 18:24:56 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         mpegaudioparse: fix Xing inverse seek table building
+
+2009-06-24 15:15:37 +0100  Jan Schmidt <jan.schmidt@sun.com>
+
+       * common:
+         Automatic update of common submodule
+         From f3bb51b to f810030
+
+2009-06-23 16:45:00 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: don't try to free a NULL taglist
+
+2009-06-23 02:14:00 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: post tags only after we've created our source pads
+         Post global tags only after we've added our source pads, so that
+         tag events get sent downstream in addition to tag messages posted
+         on the bus. This makes sure tags can be picked up automatically
+         when transcoding, but also by tagreadbin/playbin2. Fixes #519721.
+         While we're at it, also add a container-format tag.
+
+2009-06-23 01:37:01 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: use new bytereader functions for image tag parsing
+
+2009-06-22 18:53:56 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: remove some more unused variables
+
+2009-06-19 17:25:58 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: plug buffer leaking
+
+2009-06-22 17:36:21 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstrtpasfdepay.c:
+         asfdepay: guard against dropped buffers
+         If a buffer was dropped, we might request data from the adapter that is not
+         there and then we get a NULL buffer.
+
+2009-06-22 17:16:58 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: set DISCONT on streams
+         When we receive a DISCONT as input, don't clear our complete state but simply
+         mark a discont that will be put on the next buffer. The code will be able to
+         handle and throw away incomplete data.
+         Add some more debug info.
+         Remove an unused variable.
+
+2009-06-22 17:15:52 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstrtpasfdepay.c:
+         asfdepay: set DELTA_UNIT flag correctly
+         Only set the DELTA_UNIT flag when we are not dealing with a keyframe.
+         Add some more debug info.
+
+2009-06-22 13:37:58 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: fix latency calculations
+         We need to check for -1 as an invalid timestamp, not 1.
+
+2009-06-16 09:45:59 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+       * gst/mpegaudioparse/gstmpegaudioparse.h:
+         mp3parse: don't put every single frame into the index
+         Let's not put every single mp3 frame in our index, a few frames per
+         second should be more than enough. For now use an index interval
+         of 100ms-500ms depending on the upstream size, to keep the index at
+         a reasonable size. Factor out the code that adds the index entry
+         into a separate function for better code readability.
+
+2009-06-16 01:40:42 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+       * gst/mpegaudioparse/gstmpegaudioparse.h:
+         mp3parse: assume seekability only if we know the upstream size
+         While technically upstream may be seekable even if it doesn't know
+         the exact size, I can't think of a use case where this distincation
+         is relevant in practice, so for now just assume we're not seekable
+         if upstream doesn't provide us with a size. Makes sure we don't
+         build a seek index when streaming internet radio with sources that
+         pretend to be seekable until you try to actually seek.
+
+2009-06-19 17:46:12 +0100  Christian Schaller <christian.schaller@collabora.co.uk>
+
+       * gst-plugins-ugly.spec.in:
+         Fix x264 requirement in SPEC file
+
+2009-06-19 15:01:46 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+       * gst/realmedia/rdtmanager.c:
+         x264enc, rdtmanager: fix compilation with debugging disabled
+
+2009-06-11 13:48:22 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * common:
+       * docs/plugins/Makefile.am:
+         docs: Bump common. Fix comment in the docs Makefile.am
+
+2009-06-18 20:26:04 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * configure.ac:
+       * win32/common/config.h:
+         Back to development -> 0.10.12.1
+
+2009-06-18 08:54:17 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * gst-plugins-ugly.doap:
+         Add 0.10.12 release to the doap file
+
+=== release 0.10.12 ===
+
+2009-06-18 08:34:54 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+       * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-synaesthesia.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * win32/common/config.h:
+         Release 0.10.12
+
+2009-06-18 08:34:46 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * po/bg.po:
+       * po/id.po:
+       * po/it.po:
+       * po/nl.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2009-06-18 08:04:40 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/en_GB.po:
+       * po/es.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2009-06-05 22:10:02 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * configure.ac:
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/en_GB.po:
+       * po/es.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+       * win32/common/config.h:
+         0.10.11.2 pre-release
+
+2009-06-05 22:07:31 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * win32/common/config.h.in:
+         win32: Remove #undef inline from the win32 config.h
+
+2009-06-05 20:53:57 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * ext/mad/Makefile.am:
+       * ext/mad/gstid3tag.c:
+       * ext/mad/gstmad.c:
+       * ext/mad/gstmad.h:
+         mad, id3mux: (re)move broken, unmaintained and unloved id3mux element
+         It will be reborn with a shiny new code base under its hood in -bad.
+         See #581756 and #565764.
+
+2009-06-05 19:48:28 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * tests/check/pipelines/.gitignore:
+         gitignore: Ignore some built files in the test area
+
+2009-06-05 19:46:17 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-synaesthesia.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+         docs: Update plugin inspect files
+
+2009-06-05 19:25:54 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * configure.ac:
+       * docs/plugins/Makefile.am:
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+       * docs/plugins/inspect/plugin-x264.xml:
+       * ext/Makefile.am:
+       * gst-plugins-ugly.spec.in:
+       * tests/check/Makefile.am:
+       * tests/check/elements/.gitignore:
+         Moved 'x264enc' from -bad to -ugly
+
+2009-05-25 11:18:57 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         [MOVED FROM BAD 28/28] x264enc: add multipass-cache-file property
+         Fixes #583627
+
+2009-05-09 23:47:39 +0100  Christian Schaller <christian.schaller@collabora.co.uk>
+
+       * ext/x264/GstX264Enc.prs:
+         [MOVED FROM BAD 27/28] Remove wrong stuff from preset file
+
+2009-05-09 12:42:25 +0100  Christian Schaller <christian.schaller@collabora.co.uk>
+
+       * ext/x264/GstX264Enc.prs:
+         [MOVED FROM BAD 26/28] Add a more representative example preset file for x264
+
+2009-05-07 17:53:42 +0100  Christian Schaller <christian.schaller@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         [MOVED FROM BAD 25/28] Add ranks to various muxers and encoders in -bad
+
+2009-04-30 00:06:36 +0300  Stefan Kost <ensonic@users.sf.net>
+
+       * ext/x264/GstX264Enc.prs:
+       * ext/x264/Makefile.am:
+       * ext/x264/gstx264enc.c:
+         [MOVED FROM BAD 24/28] x264enc: add preset support
+         Add preset iface and a (dummy) preset file as a starting point.
+
+2009-04-29 16:57:36 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * ext/x264/gstx264enc.c:
+         [MOVED FROM BAD 23/28] x264enc: add some documentation on profile
+
+2009-04-09 23:53:39 +0200  Janin Kolenc <janin.kolenc at marand.si>
+
+       * ext/x264/gstx264enc.c:
+       * ext/x264/gstx264enc.h:
+         [MOVED FROM BAD 22/28] x264enc: add force keyframe event handling
+         Use the GstForceKeyUnit event to force a keyframe.
+         Fixes #578112.
+
+2009-01-05 10:28:58 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+         [MOVED FROM BAD 21/28] ext/x264/gstx264enc.c: Use hyphen in property name, perform safety buffer size check prior to mem access, and some mo...
+         Original commit message from CVS:
+         * ext/x264/gstx264enc.c: (gst_x264_enc_class_init),
+         (gst_x264_enc_header_buf), (gst_x264_enc_encode_frame):
+         Use hyphen in property name, perform safety buffer size check
+         prior to mem access, and some more parentheses in macro.
+
+2009-01-02 01:44:11 +0000  Alessandro Decina <alessandro.d@gmail.com>
+
+         [MOVED FROM BAD 20/28] ext/apexsink/Makefile.am: Link against -lgcrpyto for RSA_new and RSA_free.
+         Original commit message from CVS:
+         * ext/apexsink/Makefile.am:
+         Link against -lgcrpyto for RSA_new and RSA_free.
+         * ext/faac/gstfaac.c:
+         * ext/x264/gstx264enc.c:
+         Fix compiler warnings.
+
+2008-11-14 19:52:24 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+         [MOVED FROM BAD 19/28] ext/x264/gstx264enc.c: Construct source caps in more conventional (and correct) manner.
+         Original commit message from CVS:
+         * ext/x264/gstx264enc.c: (gst_x264_enc_set_src_caps):
+         Construct source caps in more conventional (and correct) manner.
+
+2008-11-04 12:42:30 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         [MOVED FROM BAD 18/28] Don't install static libs for plugins. Fixes #550851 for -bad.
+         Original commit message from CVS:
+         * ext/alsaspdif/Makefile.am:
+         * ext/amrwb/Makefile.am:
+         * ext/apexsink/Makefile.am:
+         * ext/arts/Makefile.am:
+         * ext/artsd/Makefile.am:
+         * ext/audiofile/Makefile.am:
+         * ext/audioresample/Makefile.am:
+         * ext/bz2/Makefile.am:
+         * ext/cdaudio/Makefile.am:
+         * ext/celt/Makefile.am:
+         * ext/dc1394/Makefile.am:
+         * ext/dirac/Makefile.am:
+         * ext/directfb/Makefile.am:
+         * ext/divx/Makefile.am:
+         * ext/dts/Makefile.am:
+         * ext/faac/Makefile.am:
+         * ext/faad/Makefile.am:
+         * ext/gsm/Makefile.am:
+         * ext/hermes/Makefile.am:
+         * ext/ivorbis/Makefile.am:
+         * ext/jack/Makefile.am:
+         * ext/jp2k/Makefile.am:
+         * ext/ladspa/Makefile.am:
+         * ext/lcs/Makefile.am:
+         * ext/libfame/Makefile.am:
+         * ext/libmms/Makefile.am:
+         * ext/metadata/Makefile.am:
+         * ext/mpeg2enc/Makefile.am:
+         * ext/mplex/Makefile.am:
+         * ext/musepack/Makefile.am:
+         * ext/musicbrainz/Makefile.am:
+         * ext/mythtv/Makefile.am:
+         * ext/nas/Makefile.am:
+         * ext/neon/Makefile.am:
+         * ext/ofa/Makefile.am:
+         * ext/polyp/Makefile.am:
+         * ext/resindvd/Makefile.am:
+         * ext/sdl/Makefile.am:
+         * ext/shout/Makefile.am:
+         * ext/snapshot/Makefile.am:
+         * ext/sndfile/Makefile.am:
+         * ext/soundtouch/Makefile.am:
+         * ext/spc/Makefile.am:
+         * ext/swfdec/Makefile.am:
+         * ext/tarkin/Makefile.am:
+         * ext/theora/Makefile.am:
+         * ext/timidity/Makefile.am:
+         * ext/twolame/Makefile.am:
+         * ext/x264/Makefile.am:
+         * ext/xine/Makefile.am:
+         * ext/xvid/Makefile.am:
+         * gst-libs/gst/app/Makefile.am:
+         * gst-libs/gst/dshow/Makefile.am:
+         * gst/aiffparse/Makefile.am:
+         * gst/app/Makefile.am:
+         * gst/audiobuffer/Makefile.am:
+         * gst/bayer/Makefile.am:
+         * gst/cdxaparse/Makefile.am:
+         * gst/chart/Makefile.am:
+         * gst/colorspace/Makefile.am:
+         * gst/dccp/Makefile.am:
+         * gst/deinterlace/Makefile.am:
+         * gst/deinterlace2/Makefile.am:
+         * gst/dvdspu/Makefile.am:
+         * gst/festival/Makefile.am:
+         * gst/filter/Makefile.am:
+         * gst/flacparse/Makefile.am:
+         * gst/flv/Makefile.am:
+         * gst/games/Makefile.am:
+         * gst/h264parse/Makefile.am:
+         * gst/librfb/Makefile.am:
+         * gst/mixmatrix/Makefile.am:
+         * gst/modplug/Makefile.am:
+         * gst/mpeg1sys/Makefile.am:
+         * gst/mpeg4videoparse/Makefile.am:
+         * gst/mpegdemux/Makefile.am:
+         * gst/mpegtsmux/Makefile.am:
+         * gst/mpegvideoparse/Makefile.am:
+         * gst/mve/Makefile.am:
+         * gst/nsf/Makefile.am:
+         * gst/nuvdemux/Makefile.am:
+         * gst/overlay/Makefile.am:
+         * gst/passthrough/Makefile.am:
+         * gst/pcapparse/Makefile.am:
+         * gst/playondemand/Makefile.am:
+         * gst/rawparse/Makefile.am:
+         * gst/real/Makefile.am:
+         * gst/rtjpeg/Makefile.am:
+         * gst/rtpmanager/Makefile.am:
+         * gst/scaletempo/Makefile.am:
+         * gst/sdp/Makefile.am:
+         * gst/selector/Makefile.am:
+         * gst/smooth/Makefile.am:
+         * gst/smoothwave/Makefile.am:
+         * gst/speed/Makefile.am:
+         * gst/speexresample/Makefile.am:
+         * gst/stereo/Makefile.am:
+         * gst/subenc/Makefile.am:
+         * gst/tta/Makefile.am:
+         * gst/vbidec/Makefile.am:
+         * gst/videodrop/Makefile.am:
+         * gst/videosignal/Makefile.am:
+         * gst/virtualdub/Makefile.am:
+         * gst/vmnc/Makefile.am:
+         * gst/y4m/Makefile.am:
+         * sys/acmenc/Makefile.am:
+         * sys/cdrom/Makefile.am:
+         * sys/dshowdecwrapper/Makefile.am:
+         * sys/dshowsrcwrapper/Makefile.am:
+         * sys/dvb/Makefile.am:
+         * sys/dxr3/Makefile.am:
+         * sys/fbdev/Makefile.am:
+         * sys/oss4/Makefile.am:
+         * sys/qcam/Makefile.am:
+         * sys/qtwrapper/Makefile.am:
+         * sys/vcd/Makefile.am:
+         * sys/wininet/Makefile.am:
+         * win32/common/config.h:
+         Don't install static libs for plugins. Fixes #550851 for -bad.
+
+2008-10-27 17:01:22 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+         [MOVED FROM BAD 17/28] ext/x264/gstx264enc.c: Adapt to slightly modified x264 API.  Fixes #555238.
+         Original commit message from CVS:
+         * ext/x264/gstx264enc.c: (gst_x264_enc_init_encoder):
+         Adapt to slightly modified x264 API.  Fixes #555238.
+
+2008-08-12 16:13:15 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+         [MOVED FROM BAD 16/28] ext/x264/gstx264enc.*: Do not deal with duplicated input (timestamps).  If needed, a generic element can do so.
+         Original commit message from CVS:
+         * ext/x264/gstx264enc.c: (gst_x264_enc_reset),
+         (gst_x264_enc_chain), (gst_x264_enc_encode_frame):
+         * ext/x264/gstx264enc.h:
+         Do not deal with duplicated input (timestamps).  If needed,
+         a generic element can do so.
+         Do not manipulate input timestamps on the way out,
+         since that shifts the timeline and A/V sync.
+
+2008-08-12 15:41:48 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+         [MOVED FROM BAD 15/28] docs/plugins/gst-plugins-bad-plugins.args: Integrate new properties into documentation.
+         Original commit message from CVS:
+         * docs/plugins/gst-plugins-bad-plugins.args:
+         Integrate new properties into documentation.
+         * ext/x264/gstx264enc.c: (gst_x264_enc_class_init),
+         (gst_x264_enc_init), (gst_x264_enc_init_encoder),
+         (gst_x264_enc_set_property), (gst_x264_enc_get_property):
+         Fix up API prior to eventual plugin move.
+         API: GstX264Enc:pass (provides more options, and changed to enum)
+
+2008-08-12 13:08:39 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+         [MOVED FROM BAD 14/28] Add documentation and unit test for x264enc.
+         Original commit message from CVS:
+         * docs/plugins/Makefile.am:
+         * docs/plugins/gst-plugins-bad-plugins-docs.sgml:
+         * docs/plugins/gst-plugins-bad-plugins-sections.txt:
+         * ext/x264/gstx264enc.c:
+         * tests/check/Makefile.am:
+         * tests/check/elements/x264enc.c: (setup_x264enc),
+         (cleanup_x264enc), (GST_START_TEST), (x264enc_suite), (main):
+         Add documentation and unit test for x264enc.
+
+2008-08-11 17:24:58 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+         [MOVED FROM BAD 13/28] ext/x264/gstx264enc.c: Allocate some buffers in more adaptive and economical fashion.
+         Original commit message from CVS:
+         * ext/x264/gstx264enc.c: (gst_x264_enc_init),
+         (gst_x264_enc_header_buf), (gst_x264_enc_encode_frame):
+         Allocate some buffers in more adaptive and economical fashion.
+
+2008-08-11 15:16:14 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+         [MOVED FROM BAD 12/28] configure.ac: Check for sufficiently up-to-date x264 API.
+         Original commit message from CVS:
+         * configure.ac:
+         Check for sufficiently up-to-date x264 API.
+         * ext/x264/gstx264enc.c: (gst_x264_enc_pass_get_type),
+         (gst_x264_enc_base_init), (gst_x264_enc_class_init),
+         (gst_x264_enc_init), (gst_x264_enc_init_encoder),
+         (gst_x264_enc_set_property), (gst_x264_enc_get_property):
+         * ext/x264/gstx264enc.h:
+         Expose some more parameters of the x264 encoder as properties.
+
+2008-08-08 15:07:12 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+         [MOVED FROM BAD 11/28] ext/x264/gstx264enc.c: Coding style and layout; re-order some functions in more typical and natural flow.
+         Original commit message from CVS:
+         * ext/x264/gstx264enc.c: (gst_x264_enc_log_callback),
+         (gst_x264_enc_finalize), (gst_x264_enc_header_buf),
+         (gst_x264_enc_set_src_caps), (gst_x264_enc_sink_set_caps),
+         (gst_x264_enc_flush_frames):
+         Coding style and layout; re-order some functions in more
+         typical and natural flow.
+
+2008-08-08 14:19:16 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+         [MOVED FROM BAD 10/28] ext/x264/: Use GQueue in stead of custom queue code.
+         Original commit message from CVS:
+         * ext/x264/Makefile.am:
+         * ext/x264/gstx264enc.c: (gst_x264_enc_set_src_caps),
+         (gst_x264_enc_sink_set_caps), (gst_x264_enc_init),
+         (gst_x264_enc_reset), (gst_x264_enc_finalize),
+         (gst_x264_enc_flush_frames), (gst_x264_enc_sink_event),
+         (gst_x264_enc_chain), (gst_x264_enc_encode_frame),
+         (gst_x264_enc_change_state), (gst_x264_enc_set_property):
+         * ext/x264/gstx264enc.h:
+         Use GQueue in stead of custom queue code.
+         Factorize flushing out encoder delayed frames.
+         Factorize initialization and state change reset.
+
+2008-08-08 10:56:02 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+         [MOVED FROM BAD 09/28] Use configure-generated _stdint.h.
+         Original commit message from CVS:
+         * ext/x264/gstx264enc.h:
+         * sys/fbdev/gstfbdevsink.c:
+         Use configure-generated _stdint.h.
+
+2008-08-08 10:13:36 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+         [MOVED FROM BAD 08/28] ext/x264/: Use video format library and GST_WRITE_*_BE macros where applicable.
+         Original commit message from CVS:
+         * ext/x264/Makefile.am:
+         * ext/x264/gstx264enc.c: (gst_x264_enc_header_buf),
+         (gst_x264_enc_sink_set_caps), (gst_x264_enc_base_init),
+         (gst_x264_enc_class_init), (gst_x264_enc_log_callback),
+         (gst_x264_enc_init), (gst_x264_enc_init_encoder),
+         (gst_x264_enc_finalize), (gst_x264_enc_chain),
+         (gst_x264_enc_encode_frame), (plugin_init):
+         * ext/x264/gstx264enc.h:
+         Use video format library and GST_WRITE_*_BE macros where applicable.
+         Use finalize in stead of dispose.
+         Set up debug category and log callback.
+
+2008-06-04 11:33:21 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         [MOVED FROM BAD 07/28] ext/x264/gstx264enc.c: Try harder not to crash when we get an EOS event but haven't set up the encoder yet (as may ha...
+         Original commit message from CVS:
+         * ext/x264/gstx264enc.c: (gst_x264_enc_header_buf),
+         (gst_x264_enc_sink_event), (gst_x264_enc_chain),
+         (gst_x264_enc_encode_frame):
+         Try harder not to crash when we get an EOS event but haven't set
+         up the encoder yet (as may happen when upstream errors out with
+         not-negotiated, for example). Also, always push the EOS event
+         downstream.
+
+2007-12-11 16:26:07 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         [MOVED FROM BAD 06/28] ext/x264/gstx264enc.c: Fix caps memleak.
+         Original commit message from CVS:
+         * ext/x264/gstx264enc.c: (gst_x264_enc_set_src_caps):
+         Fix caps memleak.
+
+2007-10-26 17:18:41 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         [MOVED FROM BAD 05/28] ext/x264/gstx264enc.c: Fix build against the libx264 version that ships with debian stable.
+         Original commit message from CVS:
+         * ext/x264/gstx264enc.c:
+         Fix build against the libx264 version that ships with debian stable.
+
+2007-09-24 10:53:37 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         [MOVED FROM BAD 04/28] Massive leak fixing, plus code cleanups.
+         Original commit message from CVS:
+         * ext/audioresample/gstaudioresample.c:
+         * ext/x264/gstx264enc.c:
+         * gst/dvdspu/gstdvdspu.c:
+         * gst/dvdspu/gstdvdspu.h:
+         * gst/festival/gstfestival.c:
+         * gst/h264parse/gsth264parse.c:
+         * gst/mpegtsparse/mpegtspacketizer.c:
+         * gst/mpegtsparse/mpegtsparse.c:
+         * gst/multifile/gstmultifilesink.c:
+         * gst/multifile/gstmultifilesrc.c:
+         * gst/nuvdemux/gstnuvdemux.c:
+         * sys/dshowsrcwrapper/gstdshowaudiosrc.c:
+         * sys/dshowsrcwrapper/gstdshowvideosrc.c:
+         * sys/vcd/vcdsrc.c:
+         Massive leak fixing, plus code cleanups.
+
+2007-07-18 07:35:32 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         [MOVED FROM BAD 03/28] Add stdlib include (free, atoi, exit).
+         Original commit message from CVS:
+         * examples/app/appsrc_ex.c:
+         * examples/switch/switcher.c:
+         * ext/neon/gstneonhttpsrc.c:
+         * ext/timidity/gstwildmidi.c:
+         * ext/x264/gstx264enc.c:
+         * gst/mve/mveaudioenc.c: (mve_compress_audio):
+         * gst/rtpmanager/gstrtpclient.c:
+         * gst/rtpmanager/gstrtpjitterbuffer.c:
+         * gst/spectrum/demo-audiotest.c:
+         * gst/spectrum/demo-osssrc.c:
+         * sys/dvb/gstdvbsrc.c:
+         Add stdlib include (free, atoi, exit).
+
+2007-05-15 21:23:53 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         [MOVED FROM BAD 02/28] ext/x264/gstx264enc.c (gst_x264_enc_init_encoder): This needs a version check.
+         Original commit message from CVS:
+         * ext/x264/gstx264enc.c (gst_x264_enc_init_encoder):
+         This needs a version check.
+         * gst/bayer/Makefile.am:
+         Fix the build.
+
+2007-03-25 13:06:26 +0000  Michal Benes <michal.benes@itonis.tv>
+
+         [MOVED FROM BAD 01/28] Add libx264-based h264 encoder plugin (#421110). Probably doesn't handle 'odd' widths and heights correctly yet.
+         Original commit message from CVS:
+         Patch by: Michal Benes <michal.benes at itonis tv>
+         Patch by: Josef Zlomek <josef.zlomek at itonis tv>
+         * configure.ac:
+         * ext/Makefile.am:
+         * ext/x264/Makefile.am:
+         * ext/x264/gstx264enc.c: (gst_x264_enc_me_get_type),
+         (gst_x264_enc_analyse_get_type),
+         (gst_x264_enc_timestamp_queue_init),
+         (gst_x264_enc_timestamp_queue_free),
+         (gst_x264_enc_timestamp_queue_put),
+         (gst_x264_enc_timestamp_queue_get), (gst_x264_enc_header_buf),
+         (gst_x264_enc_set_src_caps), (gst_x264_enc_sink_set_caps),
+         (gst_x264_enc_base_init), (gst_x264_enc_class_init),
+         (gst_x264_enc_init), (gst_x264_enc_init_encoder),
+         (gst_x264_enc_close_encoder), (gst_x264_enc_dispose),
+         (gst_x264_enc_sink_event), (gst_x264_enc_chain),
+         (gst_x264_enc_encode_frame), (gst_x264_enc_change_state),
+         (gst_x264_enc_set_property), (gst_x264_enc_get_property),
+         (plugin_init):
+         * ext/x264/gstx264enc.h:
+         Add libx264-based h264 encoder plugin (#421110). Probably doesn't
+         handle 'odd' widths and heights correctly yet.
+
+2009-06-05 01:51:20 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: nicer metadata extraction of genre tags in some cases
+         Handle pseudo-strings like "(5)" and map them to the ID3v1 genre
+         that they presumably stand for.
+
+2009-06-05 01:32:07 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: parse WM/Picture tags to extract cover art
+         Fixes #583112.
+
+2009-05-31 20:20:30 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * REQUIREMENTS:
+         docs: fix http links for amr libs in REQUIREMENTS
+
+2009-05-29 20:07:14 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: fix bogus flow return handling in eos handler
+         Don't overwrite the origin flow return by whatever flow we get
+         when trying to push the remaining internally queued payloads.
+         We want to do our eos logic, ie. send an EOS event or segment-done
+         message in any case. Makes things EOS properly when an EOS event
+         is forced upon the pipeline so that the source returns
+         FLOW_UNEXPECTED to a pulling asfdemux. Should fix #582056.
+
+2009-05-29 19:52:58 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * win32/common/config.h:
+         win32: update config.h
+
+2009-05-22 19:27:35 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+         configure: bump core/base requirements to released versions
+
+2009-05-22 19:26:27 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * autogen.sh:
+       * configure.ac:
+         autogen: move the -Wno-portability for automake into configure.ac
+
+2009-05-27 00:16:30 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * gst/dvdlpcmdec/Makefile.am:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+         dvdlpcmdec: Add multichannel channel maps, and send some tags
+         Add a multichannel map to the output caps, and send at least a CODEC and
+         BITRATE tag. I'm not too sure about the 5.1 and 7.1 channel maps. I have
+         no samples and can't find info about the channel ordering, but this is
+         better than nothing.
+
+2009-05-26 17:19:54 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * common:
+         Automatic update of common submodule
+         From 888e0a2 to c572721
+
+2009-05-22 10:20:46 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * common:
+         Automatic update of common submodule
+         From 6ab11d1 to 888e0a2
+
+2009-05-21 15:18:06 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * gst/dvdsub/gstdvdsubdec.c:
+         dvdsubdec: Remove some dead code
+         Remove some redundant memset - gobject memory is already initalised to 0.
+         Remove a commented out line leftover from the previous commit
+
+2009-05-21 14:20:22 +0100  Kapil Agrawal <kapil@mediamagictechnologies.com>
+
+       * gst/dvdsub/gstdvdsubdec.c:
+       * gst/dvdsub/gstdvdsubdec.h:
+         dvdsubdec: Support ARGB output
+         Negotiate to and render into ARGB buffers directly if the peer supports it.
+         Fixes: #580869
+
+2009-05-19 00:51:49 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * ext/a52dec/gsta52dec.c:
+         a52dec: Reconcile code with dtsdec
+         Perform some cleanups based on the dtsdec code such as using the boilerplate
+         macro and static pad template functions.
+         Add some documentation. Don't register a change in flags until we synch on
+         another frame successfully.
+
+2009-05-14 12:32:16 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/lame/gstlamemp3enc.c:
+         lamemp3enc: Improve debugging a bit
+
+2009-05-13 19:32:16 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Revert ranking switch with ffdec_mpeg2video. Fixes #574461
+
+2009-05-13 01:55:16 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * po/Makevars:
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/en_GB.po:
+       * po/es.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         po: avoid conflicts of local *.po files with files in git
+         Make it so that filenames and line numbers are only stored in the *.pot file
+         (which is not in git), but not in the individual *.po files. This information
+         is hardly useful for translators in our case, and it should avoid the constant
+         conflicts of local *.po files with the ones in git which are caused by the
+         source files changing and the line numbers being updated. This commit might
+         cause one last merge conflict for you, which you can work around with
+         "git checkout po/*.po" before merging or pulling. After that there should
+         (hopefully) not be any more local modifications of these files (unless
+         someone committed additions or changes to translated strings and the
+         *.po files haven't been updated yet, that is).
+
+2009-05-12 19:22:07 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * ext/lame/gstlamemp3enc.c:
+         lamemp3enc: add Since tag to gtk-doc chunk
+
+2009-05-13 01:46:00 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * tests/check/elements/mpeg2dec.c:
+         checks: fix mpeg2dec unit test again after interlace addition to caps
+
+2009-05-12 20:34:20 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: work around old mpeg2dec versions
+         The repeat first field flag was introduced in 0.5.0 so conditionally disable its
+         detection and just assume no rff is used. This fixes the compilation.
+         Fixes #582375
+
+2009-05-12 20:24:02 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mpeg2dec/Makefile.am:
+         mpeg2dec: link to gstvideo
+         Fix compilation by adding the right include directories and linking to the video
+         library.
+
+2009-05-12 11:57:04 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/asfpacket.c:
+         asfdemux: Downgrade simple statements from WARNING to DEBUG
+
+2009-05-11 12:37:46 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/asfheaders.c:
+       * gst/asfdemux/asfheaders.h:
+       * gst/asfdemux/asfpacket.c:
+       * gst/asfdemux/asfpacket.h:
+         asf: Detect more payload extensions.
+         These should help fix interlaced/PAR issues with more files.
+
+2009-05-12 11:44:13 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/mpeg2dec/gstmpeg2dec.h:
+         mpeg2dec: Implement interlaced support.
+         Expand the debugging statements to show more picture information.
+
+2009-05-12 11:19:00 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Lower rank to MARGINAL to make ffdec_mpeg2video the default
+         ffdec_mpeg2video is much faster, fixes bug #574461.
+
+2009-05-10 16:53:07 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/lame/gstlamemp3enc.c:
+         lamemp3enc: Don't write a Xing header
+
+2009-05-10 11:17:25 +0200  Marc-Andre Lureau <marcandre.lureau@gmail.com>
+
+       * autogen.sh:
+         Run libtoolize before aclocal
+         This unbreaks the build in some cases. Fixes bug #582021
+
+2009-05-09 15:28:18 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: use 64bit safe scaling functions.
+         Got this to fail when seeking in a 14GB file (the value in bytes is
+         bigger than 2**32).
+
+2009-05-09 10:57:34 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         mpegaudioparse: remove some pointless g_return_if_fail()s
+
+2009-05-08 14:24:47 +0100  Christian Schaller <christian.schaller@collabora.co.uk>
+
+       * ext/twolame/gsttwolame.c:
+         Switch twolame to primary rank
+
+2009-05-07 17:59:52 +0100  Christian Schaller <christian.schaller@collabora.co.uk>
+
+       * ext/lame/gstlame.c:
+       * ext/lame/gstlamemp3enc.c:
+       * ext/twolame/gsttwolame.c:
+         Add ranks to mp3 encoders
+
+2009-05-07 17:57:17 +0100  Christian Schaller <christian.schaller@collabora.co.uk>
+
+       * gst-plugins-ugly.spec.in:
+         Add twolame plugin to spec file
+
+2009-05-02 18:11:06 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/asfdemux/asfpacket.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: use upstream segment and timestamps for some interpolation
+         This should particularly help in case of upstream live src, e.g. rtspsrc,
+         and especially so if it has to perform fallback to TCP.
+
+2009-05-07 11:09:59 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/gstrtpasfdepay.c:
+         rtpasfdepay: Add support for fragmented packet (L == 0).
+         This happens with rtp-over-udp.
+
+2009-05-07 10:10:02 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/lame/gstlamemp3enc.c:
+         lamemp3enc: Fixup the bitrate only for CBR
+         Additionally clarify some property descriptions.
+
+2009-05-06 21:47:17 +0200  Alessandro Decina <alessandro.d@gmail.com>
+
+       * ext/lame/gstlamemp3enc.c:
+         lame: fix format string in debug statement
+
+2009-05-06 15:37:44 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         mp3parse: Don't reject valid Xing tables of contents
+         Some Xing headers apparently start the TOC at byte 1 instead of 0. Don't
+         reject them because of it, just subtract the initial offset when reading
+         the table.
+
+2009-05-06 15:27:01 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         mp3parse: Allow more bits to change in headers during resynch
+         Be more lenient about what we accept as changing bits in a header - basically,
+         only require that the mp3 sync marker is present, for the mpeg version,
+         layer and samplerate.
+         Fixes: #581464
+
+2009-05-06 13:17:35 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * ext/mad/gstmad.c:
+         mad: Add duration of incoming/outgoing buffers in debug statements
+
+2009-05-06 13:15:30 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         mpegaudioparse: Remove useless checks for valid buffer duration.
+         The buffer duration is set to a valid value at the very top of
+         emit_frame(), we therefore don't need to check it later on.
+
+2009-05-06 13:13:35 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         mpegaudioparse: Fix stop condition for outputting buffers.
+         Some mp3 streams have an offset in timestamps, requiring us to push the
+         frame *AFTER* segment.stop in order for the decoder to be able to push
+         all data up to the segment.stop position.
+
+2009-05-02 16:51:11 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/asfdemux/asfpacket.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: 0-base timestamps consistently (whether or not streaming)
+         This also makes timestamps (more) consistent before and after a possible
+         seek, and moreover makes for reasonable position reporting in live stream
+         (whose payload timestamps should not be taken for granted).
+
+2009-05-02 13:45:22 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: report initial latency due to internal preroll queue
+
+2009-05-02 13:44:48 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: enhance debug statement and refactor some initialization
+
+2009-05-02 13:44:11 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: handle FIXME; activate pads after internal preroll also when streaming
+
+2009-05-02 11:12:51 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/asfdemux/asfpacket.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: handle FIXME; normalize preroll
+
+2009-05-02 16:08:03 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         asfdemux: fixes for streaming mode
+         * Improve newsegment handling, e.g. upstream might live in TIME.
+         * Only send newsegment if we have needed info.
+         * Avoid reading past end of data section.
+
+2009-05-01 18:08:15 +0200  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: fixes/enhancements for streaming mode
+         * Do not rock the boat by reacting to FLUSH_START.
+         * Try to handle TIME seeking by seeking upstream in BYTES.
+         * Handle SEEKING query.
+
+2009-05-05 16:38:19 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * configure.ac:
+       * ext/lame/gstlamemp3enc.c:
+         lame: fix compilation with LAME versions < 3.98
+         lame_set_VBR_quality(), which takes a floating point value for the
+         quality, has been added only in v3.98. Use lame_set_VBR_q(), which
+         takes quality as an integer, for older LAME versions.
+         Fixes #581341.
+
+2009-05-04 20:39:14 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * win32/common/config.h:
+         win32: update config.h to git
+         Until someone ports the new win32 config.h logic from the
+         other modules to -ugly.
+
+2009-05-04 12:53:06 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+         Update docs
+
+2009-05-04 12:51:29 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/lame/gstlamemp3enc.c:
+         lamemp3enc: Add a note to the encoding-engine-quality property
+         that says, that this does not affect the bitrate at all.
+
+2009-05-04 12:48:43 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/lame/gstlame.c:
+       * ext/lame/gstlamemp3enc.c:
+         lame: Implement preset interface
+
+2009-05-04 12:47:03 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/twolame/gsttwolame.c:
+         twolame: Implement preset interface
+
+2009-04-30 10:21:40 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * ext/lame/gstlamemp3enc.c:
+       * ext/lame/gstlamemp3enc.h:
+         lamemp3enc: Remove fast-vbr property and rename vbr-quality to quality
+
+2009-04-30 10:16:45 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/lame/gstlame.c:
+       * ext/lame/gstlamemp3enc.c:
+         lame/lamemp3enc: Fix memory leak on FLUSH_STOP
+
+2009-04-30 10:14:54 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/lame/gstlame.c:
+         lame: Deprecate the lame element
+
+2009-04-30 10:13:05 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * docs/plugins/Makefile.am:
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-synaesthesia.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+         Update docs
+
+2009-04-30 10:10:08 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/lame/gstlamemp3enc.c:
+         lame: Update example pipelines with the new properties
+
+2009-04-29 19:01:44 +0200  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * ext/lame/Makefile.am:
+       * ext/lame/gstlame.c:
+       * ext/lame/gstlamemp3enc.c:
+       * ext/lame/gstlamemp3enc.h:
+       * ext/lame/plugin.c:
+         lame: Add lamemp3enc element with much simplified interface
+         This deprecates the lame element and fixes bug #494528.
+
+2009-04-23 09:04:41 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/asfpacket.c:
+         asfpacket: Fix pull-mode timestamping handling.
+         The problem that happens is the following:
+         * A packet with multiple payloads comes in
+         * Those payloads get handled one by one
+         * The first payload contains the first audio payload with timestamp A
+         * The second payload contains the first video (key)frame with timestamp V (where V < A)
+         With the previous code, the following would happen:
+         * the first payload gets processed, then passed to queue_for_stream
+         * queue_for_stream detects it's the first valid timestamp received and stores
+         first_ts = A
+         * the second payload gets processed, then pass to queue_for_stream
+         * queue_for_stream detects the timestamp is lower than first_ts... and
+         discards it... resulting in losing the first keyframe of the video stream
+         We've been having this issue for *ages*... it's just that nobody noticed it
+         that much with playbin. But with playbin2's aggresive multiqueue handling, this
+         will result in multiqueue not being able to preroll (because the video decoder will
+         be dropping a ton of buffers before (maybe) receiving the next keyframe).
+         Tested with over 200 asf files, and they all play the first frame correctly now,
+         even the most braindead ones.
+
+2009-04-21 14:12:06 -0700  Michael Smith <msmith@songbirdnest.com>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+       * gst/mpegaudioparse/gstmpegaudioparse.h:
+         mp3parse: don't build seek table if we can't seek.
+         Fixes #573720 - unbounded memory usage increase when listening to mp3
+         stream for a long time.
+
+2009-04-21 22:13:32 +0100  Jan Schmidt <thaytan@noraisin.net>
+
+       * common:
+         Automatic update of common submodule
+         From b3941ea to 6ab11d1
+
+2009-04-21 20:17:57 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+       * gst/mpegaudioparse/gstxingmux.c:
+         mpegaudioparse: Remove dead assignment and duplicate code
+
+2009-04-21 20:21:11 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: Actually return the return value for the seek handling.
+
+2009-04-21 20:20:02 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/mpegstream/gstmpegdemux.c:
+       * gst/mpegstream/gstmpegparse.c:
+         mpegstream: Remove dead assignments.
+         The duplicate assignment of update_time was weird... but it seems normal
+         that it's indeed the second statement which is the valid one.
+
+2009-04-21 20:17:19 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * ext/amrnb/amrnbparse.c:
+         armnb: Remove unused variable, adapt debug message accordingly.
+
+2009-04-21 20:15:56 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/dvdsub/gstdvdsubdec.c:
+       * gst/mpegstream/gstdvddemux.c:
+       * gst/mpegstream/gstmpegclock.c:
+         dvdsub/mpegstream: _class_init: Remove unused class variables
+
+2009-04-19 14:03:58 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: Initialize flow for a corner case.
+         This might be caused by entering the if() line 1214 and then not having
+         any activated_streams.. resulting in reaching line 1267 without having
+         any valid flow value.
+
+2009-04-19 14:03:38 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * ext/twolame/gsttwolame.c:
+         twolame: Remove unneeded variable, value assigned was never read.
+
+2009-04-19 14:03:19 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         mpeg2dec: Remove dead assignment. Value overwritten later on.
+
+2009-04-19 14:02:44 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * ext/mad/gstmad.c:
+         mad: Remove dead assignment and variables given values which are never read.
+
+2009-04-19 14:02:03 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * ext/lame/gstlame.c:
+         lame: Remove unneeded variable, it's assigned a value never read.
+
+2009-04-19 13:59:24 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: Remove dead assignment, value is being overwritten before being read.
+
+2009-04-19 13:58:31 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/realmedia/rmdemux.c:
+         rmdemux: Remove unused accurate flag.
+         I couldn't see any reason why this was there in the first place.
+
+2009-04-19 13:57:59 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/realmedia/asmrules.c:
+       * gst/realmedia/rdtdepay.c:
+         realmedia: Remove dead assignments. The results are never read.
+
+2009-04-19 13:57:10 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/realmedia/gstrdtbuffer.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rdtmanager.c:
+       * gst/realmedia/rmdemux.c:
+         realmedia: Remove useless variables, only being used once (or not).
+
+2009-04-19 13:55:24 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * gst/asfdemux/gstrtspwms.c:
+       * gst/realmedia/pnmsrc.c:
+       * gst/realmedia/rdtdepay.c:
+       * gst/realmedia/rtspreal.c:
+         remove empty method implementations.
+
+2009-04-18 08:12:08 +0200  Josep Torra <n770galaxy@gmail.com>
+
+       * gst/asfdemux/gstrtspwms.c:
+         rtspwms: fix condition to detect extension commands for WMS
+         Reply with OK to the extension commands for WMS.
+
+2009-04-15 11:09:56 +0200  Josep Torra <n770galaxy@gmail.com>
+
+       * gst/realmedia/rtspreal.c:
+         realmedia: add special Real header to DESCRIBE message only for Real servers
+         Add headers that are specific to real only if a real server had been
+         detected by the OPTIONS message.
+
+2009-04-14 19:16:46 +0200  David Hoyt <dhoyt at llnl.gov>
+
+       * gst/synaesthesia/synaescope.c:
+         synaesthesia: fix compilation on windows
+         Fix compilation under MSVC due to references to headers
+         that are not available with the MS SDKs.
+         Fixes #578524
+
+2009-04-14 10:54:37 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstrtspwms.c:
+         rtspwms: reply to extension commands
+         Reply with OK to the extension commands for WMS.
+
+2009-04-14 10:53:51 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstrtpasfdepay.c:
+         asfdepay: fix a comment
+
+2009-04-14 10:53:33 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/gstasfdemux.c:
+         asfdemux: add some more debugging
+
+2009-04-14 10:51:45 +0200  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * configure.ac:
+         configure.ac: require git -base
+         We require 0.10.22.1 of -base for the new Match-If and ETag headers in RTSP.
+
+2009-04-09 20:21:46 +0100  Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+       * gst/realmedia/rtspreal.c:
+         realmedia: add special Real header to SETUP message only for Real servers
+         Fixes playback of Windows Media RTSP streams and other non-Real RTSP
+         streams where the server errors out because it can't handle the
+         Real-specific 'Required: com.real.retain-entity-for-setup' header
+         we've been adding unconditionally in the recent past.
+         For reference:
+         rtsp://66.111.34.191:601/broadcast/alnour.rm
+         rtsp://195.134.224.231/snowboard_100.wmv
+
+2009-04-08 11:44:53 -0700  Michael Smith <msmith@songbirdnest.com>
+
+       * configure.ac:
+       * gst/asfdemux/Makefile.am:
+         asfdemux: link to all required libraries including indirectly used ones.
+         On win32, we're required to link to all the libraries used - including
+         ones only indirectly used by other libs. So, add gstaudio, gsttag, and
+         (for windows only) winsock.
+
+2009-04-04 21:19:23 +0300  Felipe Contreras <felipe.contreras@gmail.com>
+
+       * common:
+         Automatic update of common submodule
+         From d0ea89e to b3941ea
+
+2009-04-04 14:54:41 +0200  Edward Hervey <bilboed@bilboed.com>
+
+       * common:
+         Automatic update of common submodule
+         From f8b3d91 to d0ea89e
+
+2009-03-26 20:23:14 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+         dvdlpcmdec: Fix factory klass, It's a 'Decoder', not a 'Demuxer'.
+
+2009-03-25 16:39:06 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/realmedia/rtspreal.c:
+       * gst/realmedia/rtspreal.h:
+         realrtsp: add more headers
+         Parse the ETag from the describe method and pass the sessionid as the value for
+         the If-Match header is subsequent setup calls.
+         Fixes support for more RealMedia RTSP streams.
+
+2009-03-22 13:08:48 -0700  David Schleef <ds@schleef.org>
+
+       * configure.ac:
+         twolame: bump requirement to 0.3.10
+         0.3.10 is the first version with the float32 encoder functions.
+         Fixes #576305.
+
+2009-03-22 20:15:24 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * configure.ac:
+         back to development -> 0.10.11.1
+
+=== release 0.10.11 ===
+
+2009-03-21 01:05:22 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * gst-plugins-ugly.doap:
+       * po/cs.po:
+       * win32/common/config.h:
+         Release 0.10.11
+
+2009-03-21 00:28:29 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/en_GB.po:
+       * po/es.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/ja.po:
+       * po/lt.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/tr.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+
+2009-03-13 16:45:08 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * configure.ac:
+       * win32/common/config.h:
+         0.10.10.3 pre-release
+
+2009-03-13 16:40:38 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * po/fi.po:
+       * po/id.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/sv.po:
+         po: Update translations from upstream
+
+2009-03-13 16:38:08 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * po/LINGUAS:
+       * po/tr.po:
+         po: Add Turkish translation
+
+2009-03-13 19:23:12 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+       * gst/mpegaudioparse/gstmpegaudioparse.h:
+         mp3parse: Fix glitches in the output when playing (for e.g.) AVI
+         Don't introduce glitches in the output by a) relaxing the threshold for
+         taking upstream timestamps in preference to our calculated timestamps and
+         b) only set the discont flag on outgoing buffers in response to an incoming
+         discont buffer.
+         Fixes: #575046
+
+2009-03-12 15:57:31 +0100  Alessandro Decina <alessandro.decina@collabora.co.uk>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         mp3parse: fix deadlock with accurate seeks.
+         Release pending_accurate_seeks_lock before forwarding the seek event upstream.
+         Fixes #575068.
+
+2009-03-10 00:22:35 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * configure.ac:
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/ca.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/en_GB.po:
+       * po/es.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/lt.po:
+       * po/mt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+       * win32/common/config.h:
+         0.10.10.2 pre-release
+         Bump version number, update translations and win32 config.h
+
+2009-03-10 00:19:01 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * po/LINGUAS:
+       * po/ja.po:
+         po: Add Japanese translation
+
+2009-03-10 00:10:20 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * configure.ac:
+       * docs/plugins/Makefile.am:
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+       * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * docs/plugins/inspect/plugin-synaesthesia.xml:
+       * docs/plugins/inspect/plugin-twolame.xml:
+       * ext/Makefile.am:
+       * po/POTFILES.in:
+         Moved twolame from Bad to Ugly
+
+2008-11-04 12:42:30 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         [MOVED FROM BAD] Don't install static libs for plugins. Fixes #550851 for -bad.
+         Original commit message from CVS:
+         * ext/alsaspdif/Makefile.am:
+         * ext/amrwb/Makefile.am:
+         * ext/apexsink/Makefile.am:
+         * ext/arts/Makefile.am:
+         * ext/artsd/Makefile.am:
+         * ext/audiofile/Makefile.am:
+         * ext/audioresample/Makefile.am:
+         * ext/bz2/Makefile.am:
+         * ext/cdaudio/Makefile.am:
+         * ext/celt/Makefile.am:
+         * ext/dc1394/Makefile.am:
+         * ext/dirac/Makefile.am:
+         * ext/directfb/Makefile.am:
+         * ext/divx/Makefile.am:
+         * ext/dts/Makefile.am:
+         * ext/faac/Makefile.am:
+         * ext/faad/Makefile.am:
+         * ext/gsm/Makefile.am:
+         * ext/hermes/Makefile.am:
+         * ext/ivorbis/Makefile.am:
+         * ext/jack/Makefile.am:
+         * ext/jp2k/Makefile.am:
+         * ext/ladspa/Makefile.am:
+         * ext/lcs/Makefile.am:
+         * ext/libfame/Makefile.am:
+         * ext/libmms/Makefile.am:
+         * ext/metadata/Makefile.am:
+         * ext/mpeg2enc/Makefile.am:
+         * ext/mplex/Makefile.am:
+         * ext/musepack/Makefile.am:
+         * ext/musicbrainz/Makefile.am:
+         * ext/mythtv/Makefile.am:
+         * ext/nas/Makefile.am:
+         * ext/neon/Makefile.am:
+         * ext/ofa/Makefile.am:
+         * ext/polyp/Makefile.am:
+         * ext/resindvd/Makefile.am:
+         * ext/sdl/Makefile.am:
+         * ext/shout/Makefile.am:
+         * ext/snapshot/Makefile.am:
+         * ext/sndfile/Makefile.am:
+         * ext/soundtouch/Makefile.am:
+         * ext/spc/Makefile.am:
+         * ext/swfdec/Makefile.am:
+         * ext/tarkin/Makefile.am:
+         * ext/theora/Makefile.am:
+         * ext/timidity/Makefile.am:
+         * ext/twolame/Makefile.am:
+         * ext/x264/Makefile.am:
+         * ext/xine/Makefile.am:
+         * ext/xvid/Makefile.am:
+         * gst-libs/gst/app/Makefile.am:
+         * gst-libs/gst/dshow/Makefile.am:
+         * gst/aiffparse/Makefile.am:
+         * gst/app/Makefile.am:
+         * gst/audiobuffer/Makefile.am:
+         * gst/bayer/Makefile.am:
+         * gst/cdxaparse/Makefile.am:
+         * gst/chart/Makefile.am:
+         * gst/colorspace/Makefile.am:
+         * gst/dccp/Makefile.am:
+         * gst/deinterlace/Makefile.am:
+         * gst/deinterlace2/Makefile.am:
+         * gst/dvdspu/Makefile.am:
+         * gst/festival/Makefile.am:
+         * gst/filter/Makefile.am:
+         * gst/flacparse/Makefile.am:
+         * gst/flv/Makefile.am:
+         * gst/games/Makefile.am:
+         * gst/h264parse/Makefile.am:
+         * gst/librfb/Makefile.am:
+         * gst/mixmatrix/Makefile.am:
+         * gst/modplug/Makefile.am:
+         * gst/mpeg1sys/Makefile.am:
+         * gst/mpeg4videoparse/Makefile.am:
+         * gst/mpegdemux/Makefile.am:
+         * gst/mpegtsmux/Makefile.am:
+         * gst/mpegvideoparse/Makefile.am:
+         * gst/mve/Makefile.am:
+         * gst/nsf/Makefile.am:
+         * gst/nuvdemux/Makefile.am:
+         * gst/overlay/Makefile.am:
+         * gst/passthrough/Makefile.am:
+         * gst/pcapparse/Makefile.am:
+         * gst/playondemand/Makefile.am:
+         * gst/rawparse/Makefile.am:
+         * gst/real/Makefile.am:
+         * gst/rtjpeg/Makefile.am:
+         * gst/rtpmanager/Makefile.am:
+         * gst/scaletempo/Makefile.am:
+         * gst/sdp/Makefile.am:
+         * gst/selector/Makefile.am:
+         * gst/smooth/Makefile.am:
+         * gst/smoothwave/Makefile.am:
+         * gst/speed/Makefile.am:
+         * gst/speexresample/Makefile.am:
+         * gst/stereo/Makefile.am:
+         * gst/subenc/Makefile.am:
+         * gst/tta/Makefile.am:
+         * gst/vbidec/Makefile.am:
+         * gst/videodrop/Makefile.am:
+         * gst/videosignal/Makefile.am:
+         * gst/virtualdub/Makefile.am:
+         * gst/vmnc/Makefile.am:
+         * gst/y4m/Makefile.am:
+         * sys/acmenc/Makefile.am:
+         * sys/cdrom/Makefile.am:
+         * sys/dshowdecwrapper/Makefile.am:
+         * sys/dshowsrcwrapper/Makefile.am:
+         * sys/dvb/Makefile.am:
+         * sys/dxr3/Makefile.am:
+         * sys/fbdev/Makefile.am:
+         * sys/oss4/Makefile.am:
+         * sys/qcam/Makefile.am:
+         * sys/qtwrapper/Makefile.am:
+         * sys/vcd/Makefile.am:
+         * sys/wininet/Makefile.am:
+         * win32/common/config.h:
+         Don't install static libs for plugins. Fixes #550851 for -bad.
+
+2008-09-02 09:56:44 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         [MOVED FROM BAD] Enable/fix up translations for these plugins.
+         Original commit message from CVS:
+         * ext/resindvd/plugin.c: (plugin_init):
+         * ext/resindvd/resindvdsrc.c:
+         * ext/twolame/gsttwolame.c: (plugin_init):
+         * gst/aiffparse/aiffparse.c: (plugin_init):
+         Enable/fix up translations for these plugins.
+         * po/LINGUAS:
+         Add 'ca' to LINGUAS.
+         * po/POTFILES.in:
+         * po/POTFILES.skip:
+         Add more files for translation and more files which tools
+         should skip.
+
+2008-08-07 14:34:03 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         [MOVED FROM BAD] ext/twolame/gsttwolame.*: Allow raw float samples as input for encoding.
+         Original commit message from CVS:
+         * ext/twolame/gsttwolame.c: (gst_two_lame_sink_setcaps),
+         (gst_two_lame_chain):
+         * ext/twolame/gsttwolame.h:
+         Allow raw float samples as input for encoding.
+
+2008-08-02 17:39:13 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         [MOVED FROM BAD] Add TwoLAME MP2 encoding element, based on the LAME element.
+         Original commit message from CVS:
+         * configure.ac:
+         * ext/Makefile.am:
+         * ext/twolame/Makefile.am:
+         * ext/twolame/gsttwolame.c: (gst_two_lame_mode_get_type),
+         (gst_two_lame_padding_get_type), (gst_two_lame_emphasis_get_type),
+         (gst_two_lame_release_memory), (gst_two_lame_finalize),
+         (gst_two_lame_base_init), (gst_two_lame_class_init),
+         (gst_two_lame_src_setcaps), (gst_two_lame_sink_setcaps),
+         (gst_two_lame_init), (gst_two_lame_set_property),
+         (gst_two_lame_get_property), (gst_two_lame_sink_event),
+         (gst_two_lame_chain), (gst_two_lame_setup),
+         (gst_two_lame_change_state), (gst_two_lame_get_default_settings),
+         (plugin_init):
+         * ext/twolame/gsttwolame.h:
+         Add TwoLAME MP2 encoding element, based on the LAME element.
+
+2009-03-09 23:13:20 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * common:
+         Automatic update of common submodule
+         From 7032163 to f8b3d91
+
+2009-03-08 12:05:57 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From ffa738d to 7032163
+
+2009-03-08 11:21:32 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 3f13e4e to ffa738d
+
+2009-03-07 11:47:06 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 3c7456b to 3f13e4e
+
+2009-03-07 10:47:13 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * common:
+         Automatic update of common submodule
+         From 57c83f2 to 3c7456b
+
+2009-03-06 12:30:36 -0800  Michael Smith <msmith@songbirdnest.com>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         mp3parse: be more conservative when changing layer/rate/etc.
+         Don't allow a change in sample rate/channels/layer/version unless we can
+         see another frame at the correct offset. Prevents accidently flipping
+         due to simple single-bit corruption.
+
+2009-03-04 16:52:59 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * gst/realmedia/realhash.c:
+         rmdemux: Fix strict-aliasing warnings.
+         Use existing GST_READ_UINT32 and GST_WRITE_UINT32 macros instead of
+         hand-rolled ones.
+
+2009-03-04 16:15:00 +0200  René Stadler <mail@renestadler.de>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         mpegaudioparse: Remove empty lines added by buggy indent.
+
+2009-02-27 13:41:58 +0100  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         mpegaudioparse: Provide SEEKING query handling.
+         Since SEEK event handling might perform some conversion
+         from TIME to BYTES, do not let upstream fool application
+         into (TIME) seeking not being possible.
+
+2009-02-25 13:34:05 -0800  Michael Smith <msmith@songbirdnest.com>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+         mp3parse: fix accurate seeks to near 0
+         Integer underflow made accurate seeks to near zero fail and seek to
+         completely the wrong place. Fix by clamping to zero, since we can't seek
+         to negative times anyway.
+
+2009-02-25 20:52:08 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * common:
+       * configure.ac:
+         build: Update shave init statement for changes in common. Bump common.
+
+2009-02-25 18:19:20 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/realmedia/rtspreal.c:
+         rtspreal: ignore data streams. Fixes #527112
+         Ignore data streams when parsing the SDP as they don't contain anything we need
+         to put in the realmedia header.
+
+2009-02-25 11:32:37 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * common:
+         Automatic update of common submodule
+         From 9cf8c9b to a6ce5c6
+
+2009-02-24 15:25:16 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * ext/mad/gstid3tag.c:
+         Forward unknown events
+         Forward unknown events upstream instead of dropping them. Also return the result
+         of the seek event instead of a fixed value.
+
+2009-02-23 10:50:50 +0200  Stefan Kost <ensonic@users.sf.net>
+
+       * gst/asfdemux/gstrtpasfdepay.c:
+         rtpasfdepay: Fix the build by adding the needed include for atoi.
+
+2009-02-22 19:19:12 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * configure.ac:
+       * docs/plugins/Makefile.am:
+         Use shave for the build output
+
+2009-02-22 16:00:02 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * common:
+         Automatic update of common submodule
+         From 5d7c9cc to 9cf8c9b
+
+2009-02-22 14:22:30 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/asfdemux/gstasf.c:
+       * gst/asfdemux/gstrtpasfdepay.c:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rdtdepay.c:
+       * gst/synaesthesia/gstsynaesthesia.c:
+       * gst/synaesthesia/synaescope.c:
+         Fix indentation.
+
+2009-02-22 14:21:22 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * gst/realmedia/pnmsrc.c:
+         pnmsrc: Error out gracefully if location is NULL. Run gst-indent
+
+2009-02-21 11:13:55 -0800  David Schleef <ds@schleef.org>
+
+       * common:
+         Automatic update of common submodule
+         From 80c627d to 5d7c9cc
+
+2009-02-20 15:53:34 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/realmedia/Makefile.am:
+       * gst/realmedia/pnmsrc.c:
+       * gst/realmedia/pnmsrc.h:
+       * gst/realmedia/rademux.c:
+       * gst/realmedia/rademux.h:
+       * gst/realmedia/realmedia.c:
+       * gst/realmedia/rmdemux.c:
+       * gst/realmedia/rmdemux.h:
+         Add pnm:// uri source
+         Add a new utri handler for pnm:// that for now just redirects to the same uri
+         with the rtsp:// protocol, which usually works nowadays.
+         Separate the registration of the various plugins into a separate source file.
+
+2009-02-20 13:48:08 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/asfdemux/Makefile.am:
+       * gst/asfdemux/gstasf.c:
+       * gst/asfdemux/gstrtpasfdepay.c:
+       * gst/asfdemux/gstrtpasfdepay.h:
+         Add ASF depayloader
+         Add ASF depayloader based on latest public MicroSoft docs (MS-RTSP).
+         Fixes #335067.
+
+2009-02-19 19:10:53 +0000  Zaheer Merali <zaheerabbas@merali.org>
+
+       * ext/mad/gstmad.c:
+         mad: remove log line added in error
+
+2009-02-19 19:08:10 +0000  Zaheer Merali <zaheerabbas@merali.org>
+
+       * ext/mad/gstmad.c:
+         mad: just flush data when seeing BADDATAPTR instead of going into error state
+
+2009-02-18 12:55:16 +0100  Roland Moser <rmoser@gmx.at>
+
+       * gst/realmedia/rmdemux.c:
+         Fix parsing of the flags in rmdemux
+         Fix parsing of the flags in version 1 realmedia streams.
+         Fixes #571358.
+
+2009-02-09 12:03:15 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * common:
+         Bump revision to use for common submodule.
+
+2009-01-30 22:27:05 +0200  Stefan Kost <ensonic@users.sf.net>
+
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+         Add releaseinfo with online url.
+
+2009-01-30 17:34:27 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * common:
+         Bump common
+
+2009-01-30 14:35:40 +0100  Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+       * gst/asfdemux/asfpacket.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         Remove redundant push_mode struct member
+
+2009-01-30 09:04:46 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * autogen.sh:
+         Fix previous commit, wasn't actually setting up a symbolic link
+
+2009-01-30 08:56:33 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * autogen.sh:
+       * common:
+         Use a symbolic link for the pre-commit client-side hook
+
+2009-01-30 08:56:24 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * .gitignore:
+         Ignore some more files
+
+2009-01-26 22:40:10 +0200  Stefan Kost <ensonic@users.sf.net>
+
+       * gst/synaesthesia/synaescope.c:
+       * gst/synaesthesia/synaescope.h:
+         Precalculate some size dependent variables. Demystify the height scaling a bit.
+         Adds more comments to the code about the height scaling. RIght now only certain heights are screen filling.
+
+2009-01-26 21:26:46 +0200  Stefan Kost <ensonic@users.sf.net>
+
+         Merge branch 'master' of ssh://git.freedesktop.org/git/gstreamer/gst-plugins-ugly
+
+2009-01-26 20:12:41 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/realmedia/rdtdepay.c:
+         Set flags on the realmedia chunks
+         Set the keyframe flags from the RDT packet to the realmedia chunk so that the
+         descrambler can be reset on keyframes. Fixes #556714.
+
+2009-01-26 20:10:36 +0100  Wim Taymans <wim.taymans@collabora.co.uk>
+
+       * gst/realmedia/gstrdtbuffer.c:
+       * gst/realmedia/gstrdtbuffer.h:
+         Add method to get RDT flags
+         Add a method to get the RDT flags. We need these flags to mark keyframes to
+         reset the descrambing queue. See #556714.
+
+2009-01-26 10:00:57 +0100  Hans de Goede <jwrdegoede@fedoraproject.org>
+
+       * gst/asfdemux/asfpacket.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+         Add seeking support to asfdemux in push mode
+         Fixes bug #568836.
+
+2009-01-26 09:57:26 +0100  Hans de Goede <jwrdegoede@fedoraproject.org>
+
+       * gst/asfdemux/asfpacket.c:
+         Drop packets with an invalid replicated data length
+         Drop packets with an invalid replicated data length
+         instead of continuing with an invalid timestamp
+         and uninitialized payload metadata.
+         All other code assumes that the timestamps are valid.
+
+2009-01-25 22:31:52 +0200  Stefan Kost <ensonic@users.sf.net>
+
+       * gst/synaesthesia/synaescope.h:
+         Change comment to refer to right variable.
+
+2009-01-24 23:27:08 +0200  Stefan Kost <ensonic@users.sf.net>
+
+       * gst/synaesthesia/gstsynaesthesia.c:
+       * gst/synaesthesia/gstsynaesthesia.h:
+       * gst/synaesthesia/synaescope.c:
+       * gst/synaesthesia/synaescope.h:
+         Bring synaesthesia to next century.
+         Do proper size negotiation. Change engine API to allow resizes. Small cleanups elsewhere.
+
+2009-01-23 17:51:00 -0800  David Schleef <ds@schleef.org>
+
+       * gst/asfdemux/gstasfdemux.c:
+         Fix leak of converted string
+
+2009-01-23 23:44:01 +0000  Jan Schmidt <thaytan@noraisin.net>
+
+       * .gitignore:
+       * po/.gitignore:
+         Add more to the gitignores
+
+2009-01-23 23:59:38 +0200  Stefan Kost <ensonic@users.sf.net>
+
+       * gst/synaesthesia/gstsynaesthesia.c:
+         Make synaesthesia build again.
+         _init() has no params.
+
+2009-01-22 18:15:36 +0200  Stefan Kost <ensonic@users.sf.net>
+
+       * common:
+         Update common snapshot.
+
+2009-01-22 13:50:09 +0100  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * common:
+         Fix pre-commit hook
+
+2009-01-22 06:14:31 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * autogen.sh:
+       * common:
+         Install and use pre-commit indentation hook from common
+
+2009-01-21 04:32:33 +0100  Edward Hervey <bilboed@bilboed.com>
+
+       * autogen.sh:
+         autogen.sh : Use git submodule
+
+2009-01-08 08:19:25 +0000  Yves Lefebvre <ivanohe@abacom.com>
+
+         gst/mpegstream/: Fix some caps leaks. Fixes bug #564885.
+         Original commit message from CVS:
+         Patch by: Yves Lefebvre <ivanohe at abacom dot com>
+         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_get_video_stream),
+         (gst_dvd_demux_get_audio_stream),
+         (gst_dvd_demux_get_subpicture_stream), (gst_dvd_demux_reset):
+         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_init_stream),
+         (gst_mpeg_demux_get_video_stream),
+         (gst_mpeg_demux_get_audio_stream), (gst_mpeg_demux_reset):
+         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_chain):
+         Fix some caps leaks. Fixes bug #564885.
+
+2009-01-02 00:43:53 +0000  Alessandro Decina <alessandro.d@gmail.com>
+
+         ext/cdio/gstcdio.c: Remove unused format argument.
+         Original commit message from CVS:
+         * ext/cdio/gstcdio.c:
+         Remove unused format argument.
+
+2008-12-13 20:41:40 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         win32/common/: Hardcode cpu for win32 build, just like we do in the other modules, to remove VCS conflicts and incons...
+         Original commit message from CVS:
+         * win32/common/.cvsignore:
+         * win32/common/config.h:
+         * win32/common/config.h.in:
+         Hardcode cpu for win32 build, just like we do in the other modules,
+         to remove VCS conflicts and inconsistent defines between modules,
+         and update version defines to CVS.
+
+2008-12-13 16:29:38 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         m4/Makefile.am: Removed two more .m4 that aren't shipped with gettext 0.17 anymore.
+         Original commit message from CVS:
+         * m4/Makefile.am:
+         Removed two more .m4 that aren't shipped with gettext 0.17 anymore.
+
+2008-12-13 13:01:49 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         m4/Makefile.am: inttypes.m4 hasn't been available since gettext-0.15, and since we now require gettext >= 0.17 ... we...
+         Original commit message from CVS:
+         * m4/Makefile.am:
+         inttypes.m4 hasn't been available since gettext-0.15, and since we now
+         require gettext >= 0.17 ... we can remove it from the list of files to
+         dist.
+
+2008-12-10 15:42:21 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/mpegaudioparse/gstmpegaudioparse.*: Do an initial class_ref on an internal enum type from within the class_init f...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c: (channel_mode_class),
+         (GST_TYPE_MP3_CHANNEL_MODE), (mp3_type_frame_length_from_header),
+         (gst_mp3parse_emit_frame), (mp3parse_get_query_types):
+         * gst/mpegaudioparse/gstmpegaudioparse.h:
+         Do an initial class_ref on an internal enum type from within the
+         class_init function so that there aren't any issues when multiple
+         mp3parse elements are started in separate threads at the same
+         time. (Why we use an enum type here if the tag is registered as
+         a string type, I don't know). Also remove custom UNUSED macro
+         and use GLib's instead.
+
+2008-12-04 20:11:33 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         configure.ac: Apparently AC_CONFIG_MACRO_DIR breaks when using more than one macro directory, reverting last change.
+         Original commit message from CVS:
+         * configure.ac:
+         Apparently AC_CONFIG_MACRO_DIR breaks when using more
+         than one macro directory, reverting last change.
+
+2008-12-04 19:48:20 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         configure.ac: Set AC_CONFIG_MACRO_DIR to common/m4 to point autoconf to our M4 macros.
+         Original commit message from CVS:
+         * configure.ac:
+         Set AC_CONFIG_MACRO_DIR to common/m4 to point autoconf to
+         our M4 macros.
+
+2008-12-01 14:39:34 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         ext/mpeg2dec/gstmpeg2dec.c: Last change introduced a regression that made mpeg2dec handle some 4:2:2 videos as 4:4:4....
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_negotiate_format):
+         Last change introduced a regression that made mpeg2dec handle
+         some 4:2:2 videos as 4:4:4. Fixes bug #562086.
+
+2008-11-29 13:33:37 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         Require gettext 0.17 because older versions don't mix with libtool 2.2. At build time an older gettext version will s...
+         Original commit message from CVS:
+         Patch by: Cygwin Ports maintainer
+         <yselkowitz at users dot sourceforge dot net>
+         * autogen.sh:
+         * configure.ac:
+         Require gettext 0.17 because older versions don't mix with libtool
+         2.2. At build time an older gettext version will still work.
+         Fixes bug #556091.
+
+2008-11-25 03:44:06 +0000  David Schleef <ds@schleef.org>
+
+         ext/mpeg2dec/gstmpeg2dec.*: Add support for 4:4:4 video.  Fixes #562086
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c:
+         * ext/mpeg2dec/gstmpeg2dec.h:
+         Add support for 4:4:4 video.  Fixes #562086
+
+2008-11-24 09:51:39 +0000  Simon Holm Thøgersen <odie@cs.aau.dk>
+
+         ext/mpeg2dec/gstmpeg2dec.c: Add support for the STATE_SEQUENCE_MODIFIED state in mpeg2dec >= 0.5.0. Fixes bug #562065.
+         Original commit message from CVS:
+         Patch by: Simon Holm Thøgersen <odie at cs dot aau dot dk>
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_chain):
+         Add support for the STATE_SEQUENCE_MODIFIED state in mpeg2dec
+         >= 0.5.0. Fixes bug #562065.
+
+2008-11-20 21:31:19 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/asfdemux/gstasfdemux.c: Remove duplicate and broken code for the streaming case and simply reuse the much better ...
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_chain):
+         Remove duplicate and broken code for the streaming case and simply reuse
+         the much better working pull based code. Fixes #560348.
+
+2008-11-20 20:42:33 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         configure.ac: Back to development -> 0.10.10.1
+         Original commit message from CVS:
+         * configure.ac:
+         Back to development -> 0.10.10.1
+
+=== release 0.10.10 ===
+
+2008-11-19 14:30:44 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * gst-plugins-ugly.doap:
+       * po/LINGUAS:
+         Release 0.10.10 - "Under the House"
+         Original commit message from CVS:
+         Release 0.10.10 - "Under the House"
+
+2008-11-19 13:59:12 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+       * po/bg.po:
+       * po/ca.po:
+       * po/da.po:
+       * po/id.po:
+       * po/it.po:
+       * po/mt.po:
+       * po/vi.po:
+         Update .po files
+         Original commit message from CVS:
+         Update .po files
+
+2008-11-17 09:53:39 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         ext/sidplay/Makefile.am: Use GST_CXXFLAGS for C++ code instead of GST_CFLAGS. The latter could contain CFLAGS that do...
+         Original commit message from CVS:
+         * ext/sidplay/Makefile.am:
+         Use GST_CXXFLAGS for C++ code instead of GST_CFLAGS. The latter could
+         contain CFLAGS that do not exist for C++, like -Wvla or
+         -Wdeclaration-after-statement. Fixes bug #561161.
+
+2008-11-12 23:19:55 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         configure.ac: 0.10.9.3 pre-release
+         Original commit message from CVS:
+         * configure.ac:
+         0.10.9.3 pre-release
+
+2008-11-11 17:14:46 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/asfdemux/gstasfdemux.c: Only copy sane aspect ratio values on the caps. Fixes #559682.
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_video_stream):
+         Only copy sane aspect ratio values on the caps. Fixes #559682.
+
+2008-11-06 13:29:37 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+       * ChangeLog:
+         Add bug number to the mp3parse mpeg 2.5 fix
+         Original commit message from CVS:
+         Add bug number to the mp3parse mpeg 2.5 fix
+
+2008-11-05 11:03:07 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/amrnb/amrnbdec.*: Add a property to select the amr variant. Fixes #424070.
+         Original commit message from CVS:
+         * ext/amrnb/amrnbdec.c: (gst_amrnb_variant_get_type),
+         (gst_amrnbdec_class_init), (gst_amrnbdec_set_property),
+         (gst_amrnbdec_get_property), (gst_amrnbdec_chain):
+         * ext/amrnb/amrnbdec.h:
+         Add a property to select the amr variant. Fixes #424070.
+
+2008-11-03 11:31:49 +0000  Tal Shalif <tshalif@nargila.org>
+
+         gst/mpegstream/: Fix memmory corruption due to not storing the new updated pointer after a g_renew(). Fixes #558896.
+         Original commit message from CVS:
+         Patch by: Tal Shalif <tshalif at nargila dot org>
+         * gst/mpegstream/gstdvddemux.c:
+         (gst_dvd_demux_get_subpicture_stream):
+         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_get_video_stream),
+         (gst_mpeg_demux_get_audio_stream):
+         Fix memmory corruption due to not storing the new updated pointer
+         after a g_renew(). Fixes #558896.
+
+2008-10-30 14:50:41 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         tests/check/Makefile.am: Blacklist cdiocddasrc from state-change tests. Fixes #558277.
+         Original commit message from CVS:
+         * tests/check/Makefile.am:
+         Blacklist cdiocddasrc from state-change tests. Fixes #558277.
+
+2008-10-24 20:44:13 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         configure.ac: oops, forgot to bump the version back to devel after the last release 0.10.9.1
+         Original commit message from CVS:
+         * configure.ac:
+         oops, forgot to bump the version back to devel
+         after the last release 0.10.9.1
+
+2008-10-24 12:47:05 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/rmdemux.c: Add suport for mpeg4 and aac audio. See #556714.
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
+         (gst_rmdemux_descramble_mp4a_audio),
+         (gst_rmdemux_handle_scrambled_packet):
+         Add suport for mpeg4 and aac audio. See #556714.
+
+2008-10-14 19:28:05 +0000  Michael Smith <msmith@xiph.org>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Calculate samples per frame correctly for "MPEG 2.5" layer 3.
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         Calculate samples per frame correctly for "MPEG 2.5" layer 3.
+         Fixes skipping on these files.
+
+2008-10-14 12:51:41 +0000  Robin Stocker <robin@nibor.org>
+
+         ext/mpeg2dec/gstmpeg2dec.*: Prefer the container's PAR over the stream's PAR if it's given in the srcpad caps. Fixes ...
+         Original commit message from CVS:
+         Patch by: Robin Stocker <robin at nibor dot org>
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
+         (handle_sequence), (gst_mpeg2dec_setcaps):
+         * ext/mpeg2dec/gstmpeg2dec.h:
+         Prefer the container's PAR over the stream's PAR if it's
+         given in the srcpad caps. Fixes bug #556184.
+
+2008-10-13 18:10:25 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         Don't install static libs for plugins. Fixes #550851 for ugly.
+         Original commit message from CVS:
+         * ext/a52dec/Makefile.am:
+         * ext/amrnb/Makefile.am:
+         * ext/cdio/Makefile.am:
+         * ext/dvdnav/Makefile.am:
+         * ext/dvdread/Makefile.am:
+         * ext/lame/Makefile.am:
+         * ext/mad/Makefile.am:
+         * ext/mpeg2dec/Makefile.am:
+         * ext/sidplay/Makefile.am:
+         * gst/ac3parse/Makefile.am:
+         * gst/asfdemux/Makefile.am:
+         * gst/dvdlpcmdec/Makefile.am:
+         * gst/dvdsub/Makefile.am:
+         * gst/iec958/Makefile.am:
+         * gst/mpegaudioparse/Makefile.am:
+         * gst/mpegstream/Makefile.am:
+         * gst/realmedia/Makefile.am:
+         * gst/synaesthesia/Makefile.am:
+         Don't install static libs for plugins. Fixes #550851 for ugly.
+
+2008-10-13 09:04:15 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Post a GST_ELEMENT_ERROR if we get EOS before seeing any valid frames. Partia...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_sink_event):
+         Post a GST_ELEMENT_ERROR if we get EOS before seeing any valid
+         frames. Partially fixes bug #552237.
+
+2008-10-09 09:23:00 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         ext/amrnb/amrnbparse.c: use #defines for HEADER. Unref the object in _sink_activate_pull().
+         Original commit message from CVS:
+         * ext/amrnb/amrnbparse.c:
+         use #defines for HEADER. Unref the object in _sink_activate_pull().
+
+2008-10-08 13:59:57 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/mad/gstmad.*: track discont on incomming buffers and set discont on outgoing buffers.
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (gst_mad_src_event), (gst_mad_chain),
+         (gst_mad_change_state):
+         * ext/mad/gstmad.h:
+         track discont on incomming buffers and set discont on outgoing
+         buffers.
+         Pass unknown events upstreams instead of dropping them.
+
+2008-09-28 17:33:43 +0000  Sameer Naik <sameer.subscriptions@damagehead.com>
+
+         ext/mpeg2dec/gstmpeg2dec.*: Fix compilation with --disable-index. Fixes bug #554150.
+         Original commit message from CVS:
+         Patch by: Sameer Naik <sameer dot subscriptions at damagehead dot com>
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_class_init),
+         (handle_slice), (gst_mpeg2dec_sink_event),
+         (gst_mpeg2dec_src_event):
+         * ext/mpeg2dec/gstmpeg2dec.h:
+         Fix compilation with --disable-index. Fixes bug #554150.
+
+2008-09-28 17:31:37 +0000  Sameer Naik <sameer.subscriptions@damagehead.com>
+
+         ext/mad/gstmad.*: Fix compilation with --disable-index. Fixes bug #554142.
+         Original commit message from CVS:
+         Patch by: Sameer Naik <sameer dot subscriptions at damagehead dot com>
+         * ext/mad/gstmad.c: (gst_mad_class_init), (gst_mad_dispose),
+         (gst_mad_src_event), (gst_mad_chain):
+         * ext/mad/gstmad.h:
+         Fix compilation with --disable-index. Fixes bug #554142.
+
+2008-09-27 00:20:48 +0000  Thijs Vermeir <thijsvermeir@gmail.com>
+
+         ext/a52dec/gsta52dec.*: Fix channel re-negotiation on a change of the incoming stream.
+         Original commit message from CVS:
+         * ext/a52dec/gsta52dec.c:
+         * ext/a52dec/gsta52dec.h:
+         Fix channel re-negotiation on a change of the incoming stream.
+         Patch By: Thijs Vermeir <thijsvermeir@gmail.com>
+         Fixes: #551660
+
+2008-09-26 14:39:42 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/amrnb/amrnbenc.*: Pass the discont flag from the input buffer on to the output buffer in the AMR encoder.
+         Original commit message from CVS:
+         * ext/amrnb/amrnbenc.c: (gst_amrnbenc_chain),
+         (gst_amrnbenc_state_change):
+         * ext/amrnb/amrnbenc.h:
+         Pass the discont flag from the input buffer on to the output buffer in
+         the AMR encoder.
+
+2008-09-26 10:04:35 +0000  Benoit Fouet <benoit.fouet@purplelabs.com>
+
+         ext/amrnb/amrnbparse.*: Add flush seek handler. Fixes #536274.
+         Original commit message from CVS:
+         Patch by: Benoit Fouet <benoit dot fouet at purplelabs dot com>
+         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
+         (gst_amrnbparse_handle_pull_seek),
+         (gst_amrnbparse_handle_push_seek), (gst_amrnbparse_src_event),
+         (gst_amrnbparse_sink_activate_push),
+         (gst_amrnbparse_sink_activate_pull):
+         * ext/amrnb/amrnbparse.h:
+         Add flush seek handler. Fixes #536274.
+
+2008-09-26 09:57:02 +0000  Benoit Fouet <benoit.fouet@purplelabs.com>
+
+         ext/amrnb/amrnbparse.*: Fix the duration query. Fixes #536226.
+         Original commit message from CVS:
+         Patch by: Benoit Fouet <benoit dot fouet at purplelabs dot com>
+         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_query),
+         (gst_amrnbparse_chain), (gst_amrnbparse_loop),
+         (gst_amrnbparse_state_change):
+         * ext/amrnb/amrnbparse.h:
+         Fix the duration query. Fixes #536226.
+         Also set caps on the pads and buffers more correctly.
+
+2008-09-02 09:43:10 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         po/LINGUAS: Add 'ca' to LINGUAS.
+         Original commit message from CVS:
+         * po/LINGUAS:
+         Add 'ca' to LINGUAS.
+
+2008-08-28 09:57:30 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         gst/asfdemux/gstasfdemux.c: Fix aggregated GST_FLOW_RETURN check for when to send an error message on the bus.
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_loop):
+         Fix aggregated GST_FLOW_RETURN check for when to send an error message
+         on the bus.
+         Re-fixes #546859
+
+2008-08-27 15:55:05 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/rdtdepay.*: Parse other values from the incomming caps.
+         Original commit message from CVS:
+         * gst/realmedia/rdtdepay.c: (gst_rdt_depay_init),
+         (gst_rdt_depay_setcaps), (gst_rdt_depay_sink_event),
+         (create_segment_event), (gst_rdt_depay_push),
+         (gst_rdt_depay_handle_data), (gst_rdt_depay_change_state):
+         * gst/realmedia/rdtdepay.h:
+         Parse other values from the incomming caps.
+         Add event handler to handle flushing and segments.
+         Create segment events.
+         * gst/realmedia/rdtjitterbuffer.c: (rdt_jitter_buffer_insert):
+         Do skew correction based on RDT timestamps.
+         * gst/realmedia/rdtmanager.c: (activate_session),
+         (gst_rdt_manager_parse_caps), (gst_rdt_manager_setcaps),
+         (create_recv_rtp):
+         Parse caps to get the clockrate needed for the jitterbuffer.
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_video_packet):
+         Apply timestamp fixup after correcting for initial timestamp and
+         internal base timestamp corrections.
+
+2008-08-27 11:28:50 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/rdtdepay.*: Check seqnum gaps and drop duplicate packets or mark outgoing buffers with a DISCONT flag w...
+         Original commit message from CVS:
+         * gst/realmedia/rdtdepay.c: (gst_rdt_depay_handle_data),
+         (gst_rdt_depay_change_state):
+         * gst/realmedia/rdtdepay.h:
+         Check seqnum gaps and drop duplicate packets or mark outgoing buffers
+         with a DISCONT flag when needed.
+         * gst/realmedia/rdtmanager.c: (gst_rdt_manager_query_src):
+         Report the configure latency instead of a hardcoded value.
+
+2008-08-27 10:02:06 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/rdtmanager.c: Include the new rdt jitterbuffer in the session manager.
+         Original commit message from CVS:
+         * gst/realmedia/rdtmanager.c: (create_session), (activate_session),
+         (free_session), (gst_rdt_manager_query_src),
+         (gst_rdt_manager_src_activate_push),
+         (gst_rdt_manager_handle_data_packet), (gst_rdt_manager_chain_rdt),
+         (gst_rdt_manager_loop), (create_recv_rtp):
+         Include the new rdt jitterbuffer in the session manager.
+
+2008-08-27 09:58:00 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/rdtdepay.*: Use new RDT parsing helper functions.
+         Original commit message from CVS:
+         * gst/realmedia/rdtdepay.c: (gst_rdt_depay_class_init),
+         (gst_rdt_depay_finalize), (gst_rdt_depay_setcaps),
+         (gst_rdt_depay_push), (gst_rdt_depay_handle_data),
+         (gst_rdt_depay_chain), (gst_rdt_depay_change_state):
+         * gst/realmedia/rdtdepay.h:
+         Use new RDT parsing helper functions.
+         Copy discont flags correctly.
+         Push the header from the chain function instead of the setcaps function.
+         Copy incomming timestamp to the output buffers instead of doing magic
+         with the RDT timestamps.
+
+2008-08-27 09:52:49 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/: Add first support for parsing RDT messages.
+         Original commit message from CVS:
+         * gst/realmedia/Makefile.am:
+         * gst/realmedia/gstrdtbuffer.c: (gst_rdt_buffer_validate_data),
+         (gst_rdt_buffer_validate), (gst_rdt_buffer_get_packet_count),
+         (read_packet_header), (gst_rdt_buffer_get_first_packet),
+         (gst_rdt_packet_move_to_next), (gst_rdt_packet_get_type),
+         (gst_rdt_packet_get_length), (gst_rdt_packet_to_buffer),
+         (gst_rdt_buffer_compare_seqnum), (gst_rdt_packet_data_get_seq),
+         (gst_rdt_packet_data_peek_data),
+         (gst_rdt_packet_data_get_stream_id),
+         (gst_rdt_packet_data_get_timestamp):
+         * gst/realmedia/gstrdtbuffer.h:
+         Add first support for parsing RDT messages.
+         * gst/realmedia/rdtjitterbuffer.c: (rdt_jitter_buffer_class_init),
+         (rdt_jitter_buffer_init), (rdt_jitter_buffer_finalize),
+         (rdt_jitter_buffer_new), (rdt_jitter_buffer_reset_skew),
+         (calculate_skew), (rdt_jitter_buffer_insert),
+         (rdt_jitter_buffer_pop), (rdt_jitter_buffer_peek),
+         (rdt_jitter_buffer_flush), (rdt_jitter_buffer_num_packets),
+         (rdt_jitter_buffer_get_ts_diff):
+         * gst/realmedia/rdtjitterbuffer.h:
+         Add first version of an RDT jitterbuffer.
+
+2008-08-27 09:47:17 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/rmdemux.*: Keep track of the first timestamp of the stream and add this to the outgoing buffer timestam...
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_init),
+         (find_seek_offset_time), (gst_rmdemux_reset), (gst_rmdemux_chain),
+         (gst_rmdemux_parse_mdpr), (gst_rmdemux_descramble_cook_audio),
+         (gst_rmdemux_descramble_dnet_audio),
+         (gst_rmdemux_parse_video_packet), (gst_rmdemux_parse_audio_packet):
+         * gst/realmedia/rmdemux.h:
+         Keep track of the first timestamp of the stream and add this to the
+         outgoing buffer timestamps so that we can handle live streams.
+         Set discont flag on the first buffers and after a seek.
+
+=== release 0.10.9 ===
+
+2008-08-26 23:06:04 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-cdio.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * gst-plugins-ugly.doap:
+         Release 0.10.9
+         Original commit message from CVS:
+         Release 0.10.9
+
+2008-08-26 22:56:30 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/en_GB.po:
+       * po/es.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/hu.po:
+       * po/id.po:
+       * po/it.po:
+       * po/lt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+         Original commit message from CVS:
+         Update .po files
+
+2008-08-26 15:35:43 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         ext/a52dec/gsta52dec.c: Set up a default time segment for output when receiving an incoming byte segment (as for raw ...
+         Original commit message from CVS:
+         * ext/a52dec/gsta52dec.c:
+         Set up a default time segment for output when receiving
+         an incoming byte segment (as for raw AC3 files).
+         Fixes: #548194
+
+2008-08-12 09:16:13 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         0.10.8.2 pre-release.
+         Original commit message from CVS:
+         * configure.ac:
+         * docs/plugins/Makefile.am:
+         * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+         * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+         * docs/plugins/gst-plugins-ugly-plugins.args:
+         * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+         * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+         * docs/plugins/inspect/plugin-a52dec.xml:
+         * docs/plugins/inspect/plugin-asf.xml:
+         * docs/plugins/inspect/plugin-cdio.xml:
+         * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+         * docs/plugins/inspect/plugin-dvdread.xml:
+         * docs/plugins/inspect/plugin-dvdsub.xml:
+         * docs/plugins/inspect/plugin-iec958.xml:
+         * docs/plugins/inspect/plugin-lame.xml:
+         * docs/plugins/inspect/plugin-mad.xml:
+         * docs/plugins/inspect/plugin-mpeg2dec.xml:
+         * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+         * docs/plugins/inspect/plugin-mpegstream.xml:
+         * docs/plugins/inspect/plugin-realmedia.xml:
+         * docs/plugins/inspect/plugin-siddec.xml:
+         * ext/Makefile.am:
+         0.10.8.2 pre-release.
+         * po/LINGUAS:
+         * po/POTFILES.in:
+         * po/id.po:
+         Add new translation.
+
+2008-08-11 18:44:35 +0000  Michael Smith <msmith@xiph.org>
+
+         gst/asfdemux/gstasfdemux.c: Properly aggregate flow returns for both push and pull mode, so we shut down if all pads ...
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c:
+         Properly aggregate flow returns for both push and pull mode, so we shut
+         down if all pads are unlinked.
+         Fixes #546859.
+
+2008-08-07 16:14:42 +0000  Frederic Crozat <fcrozat@mandriva.org>
+
+         Make sure gettext returns translations in UTF-8 encoding rather than in the current locale encoding (#546822).
+         Original commit message from CVS:
+         Patch by: Frederic Crozat <fcrozat@mandriva.org>
+         * ext/dvdread/dvdreadsrc.c: (plugin_init):
+         * ext/lame/gstlame.c: (plugin_init):
+         * gst/asfdemux/gstasf.c: (plugin_init):
+         Make sure gettext returns translations in UTF-8 encoding rather
+         than in the current locale encoding (#546822).
+
+2008-07-31 14:35:40 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Don't recurse from mp3parse_bytepos_to_time() to mp3parse_total_time() if we'...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_sink_event), (gst_mp3parse_emit_frame),
+         (mp3parse_total_time), (mp3parse_bytepos_to_time):
+         Don't recurse from mp3parse_bytepos_to_time() to mp3parse_total_time()
+         if we're called from there already. Otherwise we end up in a endless
+         recursion and crash with a stack overflow.
+         This can happen when a Xing or VBRI header with TOC exists but it
+         doesn't contain the total time. Fixes bug #545370.
+
+2008-07-31 14:24:27 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         ext/lame/gstlame.c: Use the default for the strict-iso property too.
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_class_init),
+         (gst_lame_get_default_settings):
+         Use the default for the strict-iso property too.
+         Allow a bitrate setting of 0, which lets lame choose the default value
+         and which makes it possible to set the compression-ratio property.
+
+2008-07-29 16:57:16 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         ext/lame/gstlame.*: Get the defaults settings of LAME in the plugin initialization function and return FALSE here if ...
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_class_init), (gst_lame_init),
+         (gst_lame_chain), (gst_lame_get_default_settings), (plugin_init):
+         * ext/lame/gstlame.h:
+         Get the defaults settings of LAME in the plugin initialization
+         function and return FALSE here if something goes wrong. This removes
+         the hacky failing instance init function.
+         Use LAMEs default value for all settings instead of overwriting some
+         of them. Overwriting some of them gives unexpected results if one only
+         sets a preset. Fixes bug #498004.
+
+2008-07-27 15:56:27 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         ext/lame/gstlame.c: Use LAME's default for the min/max/mean VBR bitrate. Setting our own defaults will restrict the b...
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_init):
+         Use LAME's default for the min/max/mean VBR bitrate. Setting our own
+         defaults will restrict the bitrate when using the presets in a bad way.
+         Fixes bug #498004.
+
+2008-07-27 11:01:12 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         Put the MPEG audio version into the caps as "mpegaudioversion".
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_sink_setcaps):
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (mp3_type_frame_length_from_header), (mp3_caps_create),
+         (gst_mp3parse_chain):
+         Put the MPEG audio version into the caps as "mpegaudioversion".
+         This is different from "mpegversion".
+
+2008-07-22 18:25:08 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         ext/lame/gstlame.*: Fix build with lame >= 3.97. The padding type and cwlimit settings are deprecated now and the fun...
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_class_init), (gst_lame_init),
+         (gst_lame_set_property), (gst_lame_get_property), (gst_lame_setup):
+         * ext/lame/gstlame.h:
+         Fix build with lame >= 3.97. The padding type and cwlimit settings
+         are deprecated now and the function declarations are hidden in the
+         headers so deprecate the GObject properties for them and remove them
+         in 0.11. Fixes bug #544039.
+
+2008-07-13 10:13:06 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         ext/mpeg2dec/gstmpeg2dec.c: Don't allow width/height outside the spec (i.e. smaller than 16 and higher than 4096). Su...
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c: (handle_sequence):
+         Don't allow width/height outside the spec (i.e. smaller than 16
+         and higher than 4096). Such files are corrupted ones and setting
+         caps that are not a subset of the template caps confuses playbin.
+         Fixes bug #542646.
+
+2008-07-11 12:30:22 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         ext/sidplay/Makefile.am: Fix the build.
+         Original commit message from CVS:
+         * ext/sidplay/Makefile.am:
+         Fix the build.
+
+2008-07-08 14:01:51 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         configure.ac: Don't include ERROR_CFLAGS in GST_CXXFLAGS as it might include flags that are invalid for C++.
+         Original commit message from CVS:
+         * configure.ac:
+         Don't include ERROR_CFLAGS in GST_CXXFLAGS as it might include
+         flags that are invalid for C++.
+
+2008-07-05 18:57:30 +0000  Tal Shalif <tshalif@nargila.org>
+
+         ext/dvdnav/dvdnavsrc.c: Prevent double free. Fixes bug #541697.
+         Original commit message from CVS:
+         Patch by: Tal Shalif <tshalif at nargila dot org>
+         * ext/dvdnav/dvdnavsrc.c: (gst_dvd_nav_src_stop):
+         Prevent double free. Fixes bug #541697.
+
+2008-07-05 15:56:56 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+         gst/mpegstream/: Resend tags event after a FLUSH (seek) to support prerolling a partial pipeline.
+         Original commit message from CVS:
+         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_base_init),
+         (gst_dvd_demux_get_audio_stream),
+         (gst_dvd_demux_get_subpicture_stream),
+         (gst_dvd_demux_parse_packhead), (gst_dvd_demux_reset):
+         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_init),
+         (gst_mpeg_demux_process_event), (gst_mpeg_demux_init_stream),
+         (gst_mpeg_demux_parse_packhead), (gst_mpeg_demux_reset):
+         * gst/mpegstream/gstmpegdemux.h:
+         Resend tags event after a FLUSH (seek) to support prerolling
+         a partial pipeline.
+
+2008-07-03 13:12:26 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         Use correct error code for encrypted streams.
+         Original commit message from CVS:
+         * configure.ac:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_object):
+         Use correct error code for encrypted streams.
+
+2008-07-02 07:49:19 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+         gst/mpegstream/gstmpegdemux.c: Bridge gaps in stream by NEWSEGMENT sending.  Fixes #540194.
+         Original commit message from CVS:
+         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer),
+         (gst_mpeg_demux_sync_stream_to_time):
+         Bridge gaps in stream by NEWSEGMENT sending.  Fixes #540194.
+
+2008-06-27 12:58:35 +0000  Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+         ext/dvdread/dvdreadsrc.c: Allow and implement non-flushing and/or segment seek (mainly in TIME and chapter format).
+         Original commit message from CVS:
+         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_read),
+         (gst_dvd_read_src_create), (gst_dvd_read_src_handle_seek_event):
+         Allow and implement non-flushing and/or segment seek
+         (mainly in TIME and chapter format).
+         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_event),
+         (gst_dvd_demux_get_subpicture_stream),
+         (gst_dvd_demux_synchronise_pads),
+         (gst_dvd_demux_sync_stream_to_time):
+         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_process_event),
+         (gst_mpeg_demux_send_subbuffer),
+         (gst_mpeg_demux_sync_stream_to_time),
+         (gst_mpeg_streams_reset_cur_ts):
+         * gst/mpegstream/gstmpegdemux.h:
+         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_process_event),
+         (gst_mpeg_parse_pad_added), (gst_mpeg_parse_handle_src_query):
+         Delegate a query to upstream if it can't be handled.
+         Make segment stop aware.
+         Fix (subtitle) stream synchronization.
+         Add some debug statements.
+
+2008-06-26 10:40:03 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Fix build on macosx.
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c: (head_check):
+         Fix build on macosx.
+
+2008-06-13 06:57:21 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         Add missing elements to docs. Restore alphabetical order in section file. Document mad (it was included in docs alrea...
+         Original commit message from CVS:
+         * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+         * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+         * ext/a52dec/gsta52dec.c:
+         * ext/amrnb/amrnbdec.c:
+         * ext/amrnb/amrnbenc.c:
+         * ext/amrnb/amrnbparse.c:
+         * ext/lame/gstlame.c:
+         * ext/mad/gstmad.c:
+         * ext/sidplay/gstsiddec.cc:
+         * gst/asfdemux/gstrtspwms.c:
+         * gst/mpegaudioparse/gstxingmux.c:
+         * gst/realmedia/rademux.c:
+         * gst/realmedia/rdtmanager.c:
+         * gst/realmedia/rtspreal.c:
+         * gst/synaesthesia/gstsynaesthesia.c:
+         Add missing elements to docs. Restore alphabetical order in section
+         file. Document mad (it was included in docs already).
+         Fix doc-markup: use convinience syntax for examples
+         (produces valid docbook), add several refsec2 when we have several
+         titles. Fix some types.
+
+2008-06-13 05:52:17 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         Do not use short_description in section docs for elements. We extract them from element details and there will be war...
+         Original commit message from CVS:
+         * ext/lame/gstlame.c:
+         * ext/sidplay/gstsiddec.cc:
+         * gst/mpegaudioparse/gstxingmux.c:
+         Do not use short_description in section docs for elements. We extract
+         them from element details and there will be warnings if they differ.
+
+2008-06-09 20:02:05 +0000  Benjamin Kampmann <benjamin@fluendo.com>
+
+         ext/cdio/: Also extract album title and album genre from CD-TEXT if available (#537021).
+         Original commit message from CVS:
+         Patch by: Benjamin Kampmann  <benjamin at fluendo dot com>
+         * ext/cdio/gstcdio.c: (gst_cdio_get_cdtext),
+         (gst_cdio_add_cdtext_album_tags):
+         * ext/cdio/gstcdio.h:
+         * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_open):
+         Also extract album title and album genre from CD-TEXT if
+         available (#537021).
+
+2008-06-09 07:51:00 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Don't mark MPEG headers with emphasis == 0x2 as invalid. This emphasis value ...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c: (head_check):
+         Don't mark MPEG headers with emphasis == 0x2 as invalid. This
+         emphasis value is reserved but unfortunately files with that
+         value exist and the information is not important for the decoder
+         anyway. Fixes bug #537235.
+
+2008-06-07 18:48:54 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         Require libcdio >= 0.76.
+         Original commit message from CVS:
+         * configure.ac:
+         * ext/cdio/gstcdio.c:
+         * ext/cdio/gstcdio.h:
+         * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_open):
+         Require libcdio >= 0.76.
+
+2008-06-02 15:44:57 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/a52dec/gsta52dec.c: Drain queued buffers before forwarding the segment event.
+         Original commit message from CVS:
+         * ext/a52dec/gsta52dec.c: (gst_a52dec_sink_event):
+         Drain queued buffers before forwarding the segment event.
+
+2008-06-02 11:59:07 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/a52dec/gsta52dec.*: Add segment handling, buffer clipping and basic reverse playback.
+         Original commit message from CVS:
+         * ext/a52dec/gsta52dec.c: (clear_queued), (flush_queued),
+         (gst_a52dec_drain), (gst_a52dec_push), (gst_a52dec_sink_event),
+         (gst_a52dec_chain), (gst_a52dec_change_state):
+         * ext/a52dec/gsta52dec.h:
+         Add segment handling, buffer clipping and basic reverse playback.
+
+2008-05-28 11:43:01 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         Random doc of the day. Also print human readable format of newsegment in log message if we complain about it.
+         Original commit message from CVS:
+         * docs/plugins/Makefile.am:
+         * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+         * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+         * docs/plugins/gst-plugins-ugly-plugins.args:
+         * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+         * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+         * docs/plugins/inspect/plugin-a52dec.xml:
+         * docs/plugins/inspect/plugin-amrnb.xml:
+         * docs/plugins/inspect/plugin-asf.xml:
+         * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+         * docs/plugins/inspect/plugin-dvdread.xml:
+         * docs/plugins/inspect/plugin-dvdsub.xml:
+         * docs/plugins/inspect/plugin-iec958.xml:
+         * docs/plugins/inspect/plugin-lame.xml:
+         * docs/plugins/inspect/plugin-mad.xml:
+         * docs/plugins/inspect/plugin-mpeg2dec.xml:
+         * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+         * docs/plugins/inspect/plugin-mpegstream.xml:
+         * docs/plugins/inspect/plugin-realmedia.xml:
+         * docs/plugins/inspect/plugin-siddec.xml:
+         * docs/plugins/inspect/plugin-synaesthesia.xml:
+         * ext/a52dec/gsta52dec.c:
+         Random doc of the day. Also print human readable format of newsegment
+         in log message if we complain about it.
+
+2008-05-26 09:06:54 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/a52dec/gsta52dec.*: Mark discont on outgoing buffers after receiving a DISCONT buffer or when we have a decoding ...
+         Original commit message from CVS:
+         * ext/a52dec/gsta52dec.c: (gst_a52dec_init), (gst_a52dec_push),
+         (gst_a52dec_sink_event), (gst_a52dec_handle_frame),
+         (gst_a52dec_chain), (gst_a52dec_change_state):
+         * ext/a52dec/gsta52dec.h:
+         Mark discont on outgoing buffers after receiving a DISCONT buffer or
+         when we have a decoding error.
+         We don't need to clear the cache when we receive a NEWSEGMENT event.
+         Clear buffer cache in DISCONT.
+         Add beginnings of GstSegment handling.
+
+2008-05-26 07:41:24 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/mpegaudioparse/gstxingmux.c: Fix alignment issues that caused SIGBUS on some architectures.
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstxingmux.c: (generate_xing_header):
+         Fix alignment issues that caused SIGBUS on some architectures.
+
+2008-05-25 21:30:40 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/ac3parse/gstac3parse.c: Fix alignment issue which isn't really an issue at all because the plugin hasn't been por...
+         Original commit message from CVS:
+         * gst/ac3parse/gstac3parse.c: (gst_ac3parse_chain):
+         Fix alignment issue which isn't really an issue at all because
+         the plugin hasn't been ported to 0.10 yet.
+
+2008-05-25 21:03:41 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         configure.ac: Back to devel -> 0.10.8.1
+         Original commit message from CVS:
+         * configure.ac:
+         Back to devel -> 0.10.8.1
+
+=== release 0.10.8 ===
+
+2008-05-21 23:03:13 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * gst-plugins-ugly.doap:
+       * po/LINGUAS:
+         Release 0.10.8
+         Original commit message from CVS:
+         Release 0.10.8
+
+2008-05-21 22:43:42 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+       * common:
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/en_GB.po:
+       * po/es.po:
+       * po/fi.po:
+       * po/fr.po:
+       * po/hu.po:
+       * po/it.po:
+       * po/lt.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/ru.po:
+       * po/sk.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+         Original commit message from CVS:
+         Update .po files
+
+2008-05-19 21:38:16 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         configure.ac: 0.10.7.4 pre-release
+         Original commit message from CVS:
+         * configure.ac:
+         0.10.7.4 pre-release
+
+2008-05-19 15:07:07 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         ext/mad/gstmad.c: Fix inconsistent use of rate and channels.
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (gst_mad_convert_src), (gst_mad_chain):
+         Fix inconsistent use of rate and channels.
+         Fixes #533581
+
+2008-05-19 10:23:46 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/rmdemux.c: Flush timestamp correction variables on a flush. Fixes #533832.
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_send_event):
+         Flush timestamp correction variables on a flush. Fixes #533832.
+
+2008-05-19 10:02:41 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+       * ChangeLog:
+       * common:
+       * configure.ac:
+         Commit 0.10.7.3 pre-rel marker
+         Original commit message from CVS:
+         Commit 0.10.7.3 pre-rel marker
+
+2008-05-13 09:33:09 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         gst/realmedia/rmdemux.c: Properly aggregate GstFlowReturn from downstream in order to properly stop, and doing that a...
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_video_packet):
+         Properly aggregate GstFlowReturn from downstream in order to properly
+         stop, and doing that as early as possible.
+         Fixes #532807
+
+2008-05-10 15:32:41 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         configure.ac: 0.10.7.2 pre-release
+         Original commit message from CVS:
+         * configure.ac:
+         0.10.7.2 pre-release
+
+2008-05-10 00:44:00 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         Always let FLUSH_START events flow downstream.
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (gst_mad_sink_event):
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_sink_event):
+         Always let FLUSH_START events flow downstream.
+
+2008-05-07 08:00:24 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         configure.ac: Error out if we don't have the required core/base versions.
+         Original commit message from CVS:
+         * configure.ac:
+         Error out if we don't have the required core/base versions.
+
+2008-05-06 17:53:26 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/rmdemux.c: Fix video timestamps by adjusting it with the first timestamp found.
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_mdpr),
+         (gst_rmdemux_fix_timestamp), (gst_rmdemux_parse_video_packet),
+         (gst_rmdemux_parse_audio_packet), (gst_rmdemux_parse_packet):
+         Fix video timestamps by adjusting it with the first timestamp found.
+         Don't assume we have a complete fragment when flushing the adapter,
+         packets might have been lost or the stream might just be broken.
+
+2008-05-06 10:30:18 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/rdtmanager.c: Set Rank to NONE so that we don't accidentally try to autoplug the rdtmanager.
+         Original commit message from CVS:
+         * gst/realmedia/rdtmanager.c: (gst_rdt_manager_plugin_init):
+         Set Rank to NONE so that we don't accidentally try to autoplug the
+         rdtmanager.
+
+2008-05-05 08:43:38 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Send a new duration message if the average bitrate changed and we don't know ...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_emit_frame):
+         Send a new duration message if the average bitrate changed and
+         we don't know the duration from the Xing or VBRI header.
+         Fixes bug #321857.
+
+2008-04-30 17:16:47 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/rtspreal.*: Move assembly rule parsing to the place where we parse the SDP as it's also there that we c...
+         Original commit message from CVS:
+         * gst/realmedia/rtspreal.c: (rtsp_ext_real_before_send),
+         (rtsp_ext_real_parse_sdp), (rtsp_ext_real_stream_select):
+         * gst/realmedia/rtspreal.h:
+         Move assembly rule parsing to the place where we parse the SDP as it's
+         also there that we create the MDPR and we need the currently selected
+         asmrule in order to select the right MTLI.
+         Fixes #529359.
+
+2008-04-29 17:34:19 +0000  Michael Smith <msmith@xiph.org>
+
+         gst/realmedia/: Include generated "_stdint.h" instead of <stdint.h> which might not exist on some systems.
+         Original commit message from CVS:
+         * gst/realmedia/realhash.c:
+         * gst/realmedia/rtspreal.c:
+         Include generated "_stdint.h" instead of <stdint.h> which might not
+         exist on some systems.
+
+2008-04-25 23:10:54 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         ext/sidplay/gstsiddec.cc: Cast NULL sentinels to void * as NULL is defined as an integer constant in most environment...
+         Original commit message from CVS:
+         * ext/sidplay/gstsiddec.cc:
+         Cast NULL sentinels to void * as NULL is defined as an integer
+         constant in most environments when using C++ and it's size might
+         be different from a pointer. Fixes #529488.
+
+2008-04-22 12:11:30 +0000  Edgard Lima <edgard.lima@indt.org.br>
+
+       * ChangeLog:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstrtspwms.c:
+         Fix "unused var" compiler error when --disable-gst-debug is used.
+         Original commit message from CVS:
+         Fix "unused var" compiler error when --disable-gst-debug is used.
+
+2008-04-17 20:58:00 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/amrnb/amrnbparse.c: We should also stop the streaming task when we get a NOT_LINKED flow return, which is not cov...
+         Original commit message from CVS:
+         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_loop):
+         We should also stop the streaming task when we get a NOT_LINKED
+         flow return, which is not covered by FLOW_IS_FATAL.
+
+2008-04-17 10:24:32 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         ext/: gst_atomic_int_set ==> g_atomic_int_set
+         Original commit message from CVS:
+         * ext/cdio/gstcdiocddasrc.c:
+         * ext/dv/gstdvdemux.c:
+         gst_atomic_int_set ==> g_atomic_int_set
+
+2008-04-11 08:09:55 +0000  Julien Moutte <julien@moutte.net>
+
+         gst/mpegaudioparse/gstxingmux.c: Fix argument formats.
+         Original commit message from CVS:
+         2008-04-11  Julien Moutte  <julien@fluendo.com>
+         * gst/mpegaudioparse/gstxingmux.c: (generate_xing_header): Fix
+         argument formats.
+
+2008-04-06 08:57:33 +0000  Damien Lespiau <damien.lespiau@gmail.com>
+
+         configure.ac: Actually build dlls when cross-compiling with mingw32.
+         Original commit message from CVS:
+         Patch by: Damien Lespiau <damien dot lespiau at gmail dot com>
+         * configure.ac:
+         Actually build dlls when cross-compiling with mingw32.
+         Fixes bug #526247.
+
+2008-04-04 19:04:20 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         Depend on GLib 2.12 and use it unconditionally as we do in other modules too already.
+         Original commit message from CVS:
+         * configure.ac:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (mpeg_audio_seek_entry_free):
+         * gst/mpegaudioparse/gstxingmux.c: (gst_xing_seek_entry_free):
+         Depend on GLib 2.12 and use it unconditionally as we do in other
+         modules too already.
+
+2008-04-03 15:21:50 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/mpegaudioparse/: Use GSlice for allocating the seek table entries if we compile with
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (mpeg_audio_seek_entry_new), (mpeg_audio_seek_entry_free),
+         (gst_mp3parse_reset), (gst_mp3parse_emit_frame):
+         * gst/mpegaudioparse/gstxingmux.c: (gst_xing_seek_entry_new),
+         (gst_xing_seek_entry_free), (gst_xing_mux_finalize), (xing_reset),
+         (gst_xing_mux_chain):
+         Use GSlice for allocating the seek table entries if we compile with
+         GLib 2.10 or newer.
+
+2008-04-01 14:39:24 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/asfdemux/gstasfdemux.c: Remove some debug code.
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c:
+         (gst_asf_demux_process_ext_stream_props):
+         Remove some debug code.
+
+2008-04-01 14:29:32 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/asfdemux/gstasfdemux.c: Guard against division by 0 and fall back to 25/1 framerate.
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c:
+         (gst_asf_demux_process_ext_stream_props):
+         Guard against division by 0 and fall back to 25/1 framerate.
+
+2008-04-01 14:00:32 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/asfdemux/gstasfdemux.c: Instead of adding a fixes 25/1 framerate to the video caps, use the average frame duratio...
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_video_stream),
+         (gst_asf_demux_process_ext_stream_props):
+         Instead of adding a fixes 25/1 framerate to the video caps, use the
+         average frame duration in the extended properties of the video stream as
+         the framerate. Fixes #524346.
+
+2008-03-21 14:15:27 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         configure.ac: Check if the compiler supports do { } while (0) macros. This fixes a warning when compiling with g++ 4....
+         Original commit message from CVS:
+         * configure.ac:
+         Check if the compiler supports do { } while (0) macros. This fixes
+         a warning when compiling with g++ 4.3, resulting in a build failure
+         because of -Werror.
+
+2008-03-19 11:01:25 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/asmrules.c: make ) also a delimiter for rules.
+         Original commit message from CVS:
+         * gst/realmedia/asmrules.c: (gst_asm_scan_string), (main):
+         make ) also a delimiter for rules.
+         Skip \\ when scanning strings.
+         Add new testcase for these problems.
+
+2008-03-12 16:09:48 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Don't take the stream lock when caching events. This is not necessary and res...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_sink_event):
+         Don't take the stream lock when caching events. This is not necessary
+         and results in a deadlock when seeking with rhythmbox (but not with
+         totem or banshee for some reason).
+
+2008-03-10 15:17:24 +0000  Pizpot Gargravarr <pgargravarr@siriuscybernetics.org>
+
+         gst/realmedia/rtspreal.c: Add the version field when creating the CONT chunk resulting in the Author, Comment and Cop...
+         Original commit message from CVS:
+         Patch by: Pizpot Gargravarr <pgargravarr at siriuscybernetics dot org>
+         * gst/realmedia/rtspreal.c: (rtsp_ext_real_parse_sdp):
+         Add the version field when creating the CONT chunk resulting in
+         the Author, Comment and Copyright tags not being parsed correctly.
+         Fixes #521459.
+
+2008-03-10 15:13:10 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Remove trailing newlines from debug statements.
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_sink_event), (gst_mp3parse_chain):
+         Remove trailing newlines from debug statements.
+
+2008-03-04 22:54:21 +0000  Simone Gotti <simone.gotti@email.it>
+
+         ext/dvdnav/dvdnavsrc.*: Apply patch that adds some seeking support to dvdnav, and fixes it in various other ways. Thi...
+         Original commit message from CVS:
+         * ext/dvdnav/dvdnavsrc.c:
+         * ext/dvdnav/dvdnavsrc.h:
+         Apply patch that adds some seeking support to dvdnav, and fixes it
+         in various other ways. This doesn't make dvdnavsrc fully functional,
+         but moves it forward.
+         Fixes: #476149
+         Patch By: Simone Gotti <simone.gotti@email.it>
+         * ext/dvdnav/gst-dvd:
+         Update the simple dvdnavsrc gst-launch example to work for 0.10
+
+2008-03-03 12:50:56 +0000  Peter Kjellerstedt <pkj@axis.com>
+
+         configure.ac: Use AG_GST_CHECK_PLUGIN and AG_GST_DISABLE_PLUGIN to simplify which plug-ins are included/excluded. (#4...
+         Original commit message from CVS:
+         * configure.ac:
+         Use AG_GST_CHECK_PLUGIN and AG_GST_DISABLE_PLUGIN to simplify which
+         plug-ins are included/excluded. (#498222)
+
+2008-02-27 15:23:51 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         Push EOS, FLUSH_STOP and NEWSEGMENT immediately instead of dropping and leaking them.
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (gst_mad_sink_event):
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_sink_event):
+         Push EOS, FLUSH_STOP and NEWSEGMENT immediately instead
+         of dropping and leaking them.
+
+2008-02-27 13:18:57 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         Cache all events except EOS if we still have to send a NEWSEGMENT event. This will let TAG events be forwarded until ...
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (gst_mad_dispose), (gst_mad_sink_event),
+         (gst_mad_chain):
+         * ext/mad/gstmad.h:
+         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_dispose),
+         (gst_mp3parse_sink_event), (gst_mp3parse_emit_frame):
+         * gst/mpegaudioparse/gstmpegaudioparse.h:
+         Cache all events except EOS if we still have to send a NEWSEGMENT
+         event. This will let TAG events be forwarded until after decodebin
+         to an encoder for example as decodebin only links the pads
+         after NEWSEGMENT. Fixes bug #518933.
+
+2008-02-27 12:48:41 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/mpegaudioparse/gstxingmux.c: Write Xing header at the correct position in the MP3 frame for stereo files. Fixes b...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstxingmux.c: (get_xing_offset):
+         Write Xing header at the correct position in the MP3 frame for
+         stereo files. Fixes bug #518676.
+
+2008-02-23 12:35:53 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         Check for and define ERROR_CXXFLAGS and GST_CXXFLAGS and use them when building C++ code (#516509).
+         Original commit message from CVS:
+         * configure.ac:
+         * ext/sidplay/Makefile.am:
+         Check for and define ERROR_CXXFLAGS and GST_CXXFLAGS and use them
+         when building C++ code (#516509).
+
+2008-02-22 14:55:57 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/lame/gstlame.c: Fix broken GST_ELEMENT_ERROR macro, fixes compile with the Sun
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_sink_setcaps):
+         Fix broken GST_ELEMENT_ERROR macro, fixes compile with the Sun
+         Workshop 12 compiler, but probably also crashes (#517985).
+
+2008-02-22 07:11:17 +0000  Thiago Sousa Santos <thiagoss@lcc.ufcg.edu.br>
+
+         gst/mpegaudioparse/gstmpegaudioparse.*: Post channel mode and CRC as tags. Fixes bug #504493.
+         Original commit message from CVS:
+         Patch by: Thiago Sousa Santos <thiagoss at lcc dot ufcg dot edu dot br>
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3_channel_mode_get_type),
+         (mp3_type_frame_length_from_header), (gst_mp3parse_class_init),
+         (gst_mp3parse_reset), (gst_mp3parse_emit_frame),
+         (gst_mp3parse_chain):
+         * gst/mpegaudioparse/gstmpegaudioparse.h:
+         Post channel mode and CRC as tags. Fixes bug #504493.
+
+2008-02-22 06:27:11 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         ext/dvdnav/dvdnavsrc.c: Correctly chain up to the parent's finalize function.
+         Original commit message from CVS:
+         * ext/dvdnav/dvdnavsrc.c: (gst_dvd_nav_src_finalize):
+         Correctly chain up to the parent's finalize function.
+
+2008-02-22 06:25:28 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Try a bit harder to get valid timestamps, especially if upstream gives us one...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_emit_frame), (gst_mp3parse_chain):
+         Try a bit harder to get valid timestamps, especially if upstream
+         gives us one and we are at the first frame or resyncing.
+         Return UNEXPECTED if we get a valid timestamp that is outside of
+         our configured segment. After all changes done so far this doesn't
+         seem to cause any regression, please test.
+
+2008-02-22 06:19:41 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/asfdemux/gstasfdemux.c: If we don't have the position to seek to in our index first try to convert from TIME to B...
+         Original commit message from CVS:
+         Patch by:
+         Hans de Goede <j dot w dot r dot degoede at hhs dot nl>
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_seek_event):
+         If we don't have the position to seek to in our index first try
+         to convert from TIME to BYTES upstream and only if that fails
+         too use the old hack to simply seek to an earlier position
+         and let the sink drop everything before segment start.
+         Partially fixes bug #469930.
+
+2008-02-21 23:54:25 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         configure.ac: Back to development...
+         Original commit message from CVS:
+         * configure.ac:
+         Back to development...
+
+=== release 0.10.7 ===
+
+2008-02-21 00:15:22 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+       * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+       * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
+       * docs/plugins/gst-plugins-ugly-plugins.signals:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-realmedia.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+       * gst-plugins-ugly.doap:
+       * po/LINGUAS:
+         Release 0.10.7 - I Cheated Time
+         Original commit message from CVS:
+         Release 0.10.7 - I Cheated Time
+
+2008-02-20 23:51:56 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/bg.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/en_GB.po:
+       * po/es.po:
+       * po/fi.po:
+       * po/hu.po:
+       * po/it.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/pl.po:
+       * po/pt_BR.po:
+       * po/sk.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/uk.po:
+       * po/vi.po:
+       * po/zh_CN.po:
+         Update .po files
+         Original commit message from CVS:
+         Update .po files
+
+2008-02-18 20:40:29 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         tests/check/Makefile.am: Exclude dvdreadsrc from the states test too.
+         Original commit message from CVS:
+         * tests/check/Makefile.am:
+         Exclude dvdreadsrc from the states test too.
+
+2008-02-18 10:25:16 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Handler buffers without valid timestamp more correctly: Don't drop them and d...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_emit_frame):
+         Handler buffers without valid timestamp more correctly: Don't drop
+         them and don't use the invalid timestamp to calculate the next
+         timestamp. Fixes bug #516811.
+
+2008-02-18 05:16:44 +0000  Tal Shalif <tshalif@nargila.org>
+
+         ext/dvdread/dvdreadsrc.c: Add some gint64 casts to prevent 32 bit integer overflows.
+         Original commit message from CVS:
+         Patch by: Tal Shalif <tshalif at nargila dot org>
+         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_create),
+         (gst_dvd_read_src_do_seek), (gst_dvd_read_src_do_position_query):
+         Add some gint64 casts to prevent 32 bit integer overflows.
+         Fixes bug #516989.
+
+2008-02-17 18:49:30 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Revert previous commit to mp3parse, as it breaks playback of AVI files.
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         Revert previous commit to mp3parse, as it breaks playback
+         of AVI files.
+
+2008-02-14 13:58:42 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Return GST_FLOW_UNEXPECTED if we get data that is after our configured segmen...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_emit_frame):
+         Return GST_FLOW_UNEXPECTED if we get data that is after our
+         configured segment. This makes upstream go EOS immediately instead
+         of sending us the complete stream. Also improve debugging a bit.
+
+2008-02-13 22:57:54 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         ext/dvdread/dvdreadsrc.c: Fix regression in DVD seeking - when a pack we expect to be a NAV block turns out not to be...
+         Original commit message from CVS:
+         * ext/dvdread/dvdreadsrc.c:
+         Fix regression in DVD seeking - when a pack we
+         expect to be a NAV block turns out not to be, scan forwards
+         for up to 2MB (at most ~1sec) until we find one.
+         Fixes: #516278
+
+2008-02-12 21:42:19 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+         win32/vs6/libgstmpegaudioparse.dsp: Add xing files to VS project file.
+         Original commit message from CVS:
+         * win32/vs6/libgstmpegaudioparse.dsp:
+         Add xing files to VS project file.
+
+2008-02-11 13:31:06 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/dvdsub/gstdvdsubparse.c: Stop leaking src pad templates. Fixes bug #515708.
+         Original commit message from CVS:
+         * gst/dvdsub/gstdvdsubparse.c: (gst_dvd_sub_parse_init):
+         Stop leaking src pad templates. Fixes bug #515708.
+
+2008-02-11 13:29:07 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/mpegaudioparse/gstxingmux.c: Correctly write the size in bytes on big endian systems.
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstxingmux.c: (generate_xing_header):
+         Correctly write the size in bytes on big endian systems.
+         Fixes bug #515725.
+
+2008-02-11 09:13:33 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         ext/lame/gstlame.c: Don't leak the allowed caps.
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_setup):
+         Don't leak the allowed caps.
+         * tests/check/pipelines/lame.c: (GST_START_TEST):
+         Stop leaking all buffers. Fixes bug #515575.
+
+2008-02-08 10:17:11 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         gst/mpegaudioparse/plugin.c: Commit new file I forgot to add.
+         Original commit message from CVS:
+         * gst/mpegaudioparse/plugin.c:
+         Commit new file I forgot to add.
+
+2008-02-08 01:09:53 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         configure.ac: Make DISABLE_DEPRECATED defined *only* during CVS, not during pre-releases or releases.
+         Original commit message from CVS:
+         * configure.ac:
+         Make DISABLE_DEPRECATED defined *only* during CVS, not during
+         pre-releases or releases.
+
+2008-02-08 00:44:19 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+       * ChangeLog:
+         Mention bug 511497 fixed in previous commit
+         Original commit message from CVS:
+         Mention bug 511497 fixed in previous commit
+
+2008-02-08 00:36:51 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         Move xingmux from -bad.
+         Original commit message from CVS:
+         * docs/plugins/Makefile.am:
+         * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+         * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+         * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+         * gst/mpegaudioparse/Makefile.am:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         * gst/mpegaudioparse/gstxingmux.c:
+         * tests/check/Makefile.am:
+         * tests/check/elements/.cvsignore:
+         Move xingmux from -bad.
+
+2008-02-07 19:25:08 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Use gst_guint64_to_gdouble for conversion
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:(mp3parse_time_to_bytepos):
+         Use gst_guint64_to_gdouble for conversion
+         * win32/vs6/libgstasfdemux.dsp:
+         * win32/vs6/libgstdvdsub.dsp:
+         * win32/vs6/libgstrealmedia.dsp:
+         Update project dependencies and add new source files
+
+2008-02-04 14:27:32 +0000  Zaheer Abbas Merali <zaheerabbas@merali.org>
+
+         ext/mpeg2dec/gstmpeg2dec.c: Reset decoder when handling sequence where libmpeg2 has set frame period to 0, probably d...
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c:
+         Reset decoder when handling sequence where libmpeg2 has set
+         frame period to 0, probably due to a corrupt packet.
+         Fixes bug #514297
+
+2008-01-29 19:10:38 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Don't set new caps on the srcpad everytime the bitrate or MPEG version change...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3_caps_create),
+         (gst_mp3parse_chain):
+         Don't set new caps on the srcpad everytime the bitrate or MPEG
+         version changes but calculate new spf value when the MPEG version
+         changes.
+
+2008-01-23 10:34:40 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         Add documentation for the xingheader plugin.
+         Original commit message from CVS:
+         * docs/plugins/Makefile.am:
+         * docs/plugins/gst-plugins-bad-plugins-docs.sgml:
+         * docs/plugins/gst-plugins-bad-plugins-sections.txt:
+         * gst/xingheader/gstxingmux.c:
+         * gst/xingheader/gstxingmux.h:
+         Add documentation for the xingheader plugin.
+         * tests/check/elements/xingmux.c: (GST_START_TEST):
+         Set element state to PLAYING before doing something else.
+
+2008-01-23 10:11:44 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         tests/check/: Add simple unit test for the xingmux element.
+         Original commit message from CVS:
+         * tests/check/Makefile.am:
+         * tests/check/elements/.cvsignore:
+         * tests/check/elements/xingmux.c: (setup_xingmux),
+         (cleanup_xingmux), (GST_START_TEST), (xingmux_suite), (main):
+         * tests/check/elements/xingmux_testdata.h:
+         Add simple unit test for the xingmux element.
+         * gst/xingheader/gstxingmux.c: (generate_xing_header),
+         (gst_xing_mux_finalize), (xing_reset):
+         Fix a memleak and invalid seek tables with less than 100 MP3 frames.
+
+2008-01-21 13:35:02 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         docs/plugins/: Add the real and rtsp elements and update the lists.
+         Original commit message from CVS:
+         * docs/plugins/Makefile.am:
+         * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+         * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+         Add the real and rtsp elements and update the lists.
+         * docs/plugins/inspect/plugin-amrnb.xml:
+         * docs/plugins/inspect/plugin-asf.xml:
+         * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+         * docs/plugins/inspect/plugin-dvdsub.xml:
+         * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+         * docs/plugins/inspect/plugin-mpegstream.xml:
+         * docs/plugins/inspect/plugin-realmedia.xml:
+         * docs/plugins/inspect/plugin-siddec.xml:
+         * docs/plugins/inspect/plugin-synaesthesia.xml:
+         Regenerate docs.
+         * gst/iec958/ac3_padder.c:
+         * gst/iec958/ac3_padder.h:
+         Do not use gtk-doc style comments for non gtk-doc comments. Note -
+         there are functions defined using extern in the .c file - does that
+         make sense?
+
+2008-01-21 12:43:37 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         ext/mad/gstmad.c: Chain up at the end of the function.
+         Original commit message from CVS:
+         * ext/mad/gstmad.c:
+         Chain up at the end of the function.
+
+2008-01-19 16:04:14 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         ext/mad/gstid3tag.c: Don't add pad templates for the base class but only in the subclasses.
+         Original commit message from CVS:
+         * ext/mad/gstid3tag.c: (gst_id3_tag_class_init):
+         Don't add pad templates for the base class but only in the
+         subclasses.
+
+2008-01-17 17:26:48 +0000  Zaheer Abbas Merali <zaheerabbas@merali.org>
+
+         ext/lame/gstlame.*: Fix the case where you initially have stereo input, and so lame's mode is not set to mono, and th...
+         Original commit message from CVS:
+         * ext/lame/gstlame.c:
+         * ext/lame/gstlame.h:
+         Fix the case where you initially have stereo input, and so lame's
+         mode is not set to mono, and then you get input with mono audio and
+         soon after you get stereo input again. What happened before this
+         commit is that it would keep the encoding mode as mono. It should
+         change it back to the one requested by the app (or the default one)
+         if not requested.
+
+2008-01-15 17:18:31 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Interpolate the VBRI seek table entries to get better results, support 3 byte...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_handle_first_frame), (mp3parse_time_to_bytepos),
+         (mp3parse_bytepos_to_time):
+         Interpolate the VBRI seek table entries to get better results,
+         support 3 byte seek table entries and prevent overflows in the
+         seek table by adding the relative offsets when using the seek
+         table in a large enough data type.
+
+2008-01-14 15:02:13 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/mpegaudioparse/gstmpegaudioparse.*: Add support for seeking based on the VBRI seek table. Might make sense to use...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_reset),
+         (gst_mp3parse_handle_first_frame), (mp3parse_time_to_bytepos),
+         (mp3parse_bytepos_to_time):
+         * gst/mpegaudioparse/gstmpegaudioparse.h:
+         Add support for seeking based on the VBRI seek table. Might make
+         sense to use interpolation in the table later to get hopefully a
+         bit more accurate values.
+
+2008-01-14 11:41:32 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/mpeg2dec/gstmpeg2dec.c: Fix compilation error. Fixes #509313.
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c: (clear_queued), (flush_queued),
+         (handle_picture), (handle_slice):
+         Fix compilation error. Fixes #509313.
+
+2008-01-14 11:24:57 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         ext/lame/gstlame.c: Use gst_util_uint64_scale instead of gst_util_uint64_scale_int as 8 * GST_SECOND is too large for...
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_sink_event):
+         Use gst_util_uint64_scale instead of gst_util_uint64_scale_int
+         as 8 * GST_SECOND is too large for int.
+
+2008-01-14 10:52:20 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/xingheader/gstxingmux.c: Bitrate is 4 bits, not 8 so check for 0xe as maximum value instead of 0xfe.
+         Original commit message from CVS:
+         * gst/xingheader/gstxingmux.c: (generate_xing_header):
+         Bitrate is 4 bits, not 8 so check for 0xe as maximum value instead
+         of 0xfe.
+
+2008-01-14 10:42:48 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/mpegaudioparse/gstmpegaudioparse.*: Add initial support for reading VBRI headers as found in VBR files created by...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_reset),
+         (gst_mp3parse_emit_frame), (gst_mp3parse_handle_first_frame),
+         (mp3parse_total_bytes), (mp3parse_total_time):
+         * gst/mpegaudioparse/gstmpegaudioparse.h:
+         Add initial support for reading VBRI headers as found in VBR files
+         created by some Fraunhofer encoders. Currently we only read the
+         number of frames and bytes (and calculate duration, etc from this)
+         but there is also a seek table that we currently don't use.
+
+2008-01-14 09:17:47 +0000  Mark Nauwelaerts <manauw@syknet.be>
+
+         ext/lame/gstlame.c: Correctly set number of channels when using mono-encoding mode and fix the duration calculation o...
+         Original commit message from CVS:
+         Patch by: Mark Nauwelaerts <manauw at syknet dot be>
+         * ext/lame/gstlame.c: (gst_lame_sink_setcaps),
+         (gst_lame_sink_event):
+         Correctly set number of channels when using mono-encoding mode
+         and fix the duration calculation of the EOS buffer.
+
+2008-01-14 09:13:29 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Guard against 0 values in the Xing header as frame count and byte count and c...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_handle_first_frame):
+         Guard against 0 values in the Xing header as frame count and
+         byte count and calculate the bitrate when we have all values
+         we need and not before.
+
+2008-01-14 09:09:49 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/xingheader/gstxingmux.c: Remove accidentially leftover debug printf.
+         Original commit message from CVS:
+         * gst/xingheader/gstxingmux.c: (generate_xing_header):
+         Remove accidentially leftover debug printf.
+
+2008-01-14 08:56:31 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/xingheader/gstxingmux.c: Choose smallest possible frame size for the Xing header, properly set the timestamp, dur...
+         Original commit message from CVS:
+         * gst/xingheader/gstxingmux.c: (has_xing_header),
+         (generate_xing_header), (gst_xing_mux_chain),
+         (gst_xing_mux_sink_event):
+         Choose smallest possible frame size for the Xing header, properly
+         set the timestamp, duration and offset on the outgoing buffers,
+         only send NEWSEGMENT events in BYTE format downstream and also
+         drop VBRI headers if already existing.
+
+2008-01-12 09:22:06 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/xingheader/: Major cleanup and rewrite of xingmux with less bugs and new features:
+         Original commit message from CVS:
+         * gst/xingheader/Makefile.am:
+         * gst/xingheader/gstxingmux.c: (parse_header), (get_xing_offset),
+         (has_xing_header), (generate_xing_header),
+         (gst_xing_mux_base_init), (gst_xing_mux_finalize), (xing_reset),
+         (gst_xing_mux_init), (gst_xing_mux_chain),
+         (gst_xing_mux_sink_event), (gst_xing_mux_change_state):
+         * gst/xingheader/gstxingmux.h:
+         Major cleanup and rewrite of xingmux with less bugs and new features:
+         - Handles other layers as 3
+         - Write TOC
+
+2008-01-10 17:24:09 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/mad/gstmad.c: Call g_type_class_ref() from a thread-safe context and not from the streaming thread to avoid GLib ...
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (GST_TYPE_MAD_MODE),
+         (GST_TYPE_MAD_EMPHASIS), (GST_TAG_EMPHASIS), (CHECK_HEADER):
+         Call g_type_class_ref() from a thread-safe context and not
+         from the streaming thread to avoid GLib screwing up (see
+         bug #349410 and #493432). Comment out unused code.
+
+2008-01-10 15:24:08 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/mpeg2dec/gstmpeg2dec.*: Add buffer clipping.
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c: (clear_queued), (flush_queued),
+         (handle_picture), (clip_buffer), (handle_slice),
+         (gst_mpeg2dec_chain), (gst_mpeg2dec_sink_event),
+         (gst_mpeg2dec_change_state):
+         * ext/mpeg2dec/gstmpeg2dec.h:
+         Add buffer clipping.
+         Add basic reverse playback support. Not complete yet when dealing with
+         non-closed GOPs.
+
+2008-01-10 12:28:19 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         autogen.sh: Add -Wno-portability to the automake parameters to stop warnings about GNU make extensions being used. We...
+         Original commit message from CVS:
+         * autogen.sh:
+         Add -Wno-portability to the automake parameters to stop warnings
+         about GNU make extensions being used. We require GNU make in almost
+         every Makefile anyway.
+         * configure.ac:
+         Use AM_PROG_CC_C_O as a compiler that accepts both -c and -o
+         at the same time is required for per target flags.
+
+2008-01-09 13:51:38 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         Makefile.am: Include lcov.mak to allow building coverage reports.
+         Original commit message from CVS:
+         * Makefile.am:
+         Include lcov.mak to allow building coverage reports.
+
+2008-01-08 19:42:38 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         Make sure that the Xing TOC starts with 0 and the entries are increasing over time. Otherwise it's broken and should ...
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (mpg123_parse_xing_header):
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_handle_first_frame):
+         Make sure that the Xing TOC starts with 0 and the entries
+         are increasing over time. Otherwise it's broken and should
+         be skipped. Fixes bug #507821.
+
+2008-01-08 16:31:29 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/gstasfdemux.*: Parse metadata object and extract pixel aspect ratio. Fixes #507844.
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (asfdemux_dbg), (gst_asf_demux_reset),
+         (gst_asf_demux_add_video_stream),
+         (gst_asf_demux_process_ext_content_desc),
+         (gst_asf_demux_get_metadata_for_stream),
+         (gst_asf_demux_process_metadata), (gst_asf_demux_process_object),
+         (gst_asf_demux_change_state):
+         * gst/asfdemux/gstasfdemux.h:
+         Parse metadata object and extract pixel aspect ratio. Fixes #507844.
+
+2007-12-31 21:41:52 +0000  David Schleef <ds@schleef.org>
+
+         docs/plugins/.cvsignore: Add *-undeclared.txt
+         Original commit message from CVS:
+         * docs/plugins/.cvsignore:
+         Add *-undeclared.txt
+
+2007-12-21 14:01:06 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/rdtmanager.*: Implement some more signals that rtspsrc connects to.
+         Original commit message from CVS:
+         * gst/realmedia/rdtmanager.c:
+         (gst_rdt_manager_marshal_VOID__UINT_UINT),
+         (gst_rdt_manager_class_init):
+         * gst/realmedia/rdtmanager.h:
+         Implement some more signals that rtspsrc connects to.
+         Fixes #504671.
+
+2007-12-18 09:07:53 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         Makefile.am: Include common/win32.mak for CRLF check of win32 project files (see #393626).
+         Original commit message from CVS:
+         * Makefile.am:
+         Include common/win32.mak for CRLF check of win32 project
+         files (see #393626).
+
+2007-12-13 11:20:11 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Don't post SEGMENT_START messages on the bus, only the element driving the pi...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_sink_event), (mp3parse_handle_seek):
+         Don't post SEGMENT_START messages on the bus, only the element
+         driving the pipeline should do that.
+
+2007-12-09 04:29:35 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         configure.ac: Don't define GST_DISABLE_DEPRECATED for releases. Fixes #498181.
+         Original commit message from CVS:
+         * configure.ac:
+         Don't define GST_DISABLE_DEPRECATED for releases. Fixes #498181.
+
+2007-12-03 19:05:20 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/mpeg2dec/gstmpeg2dec.h: Use G_GINT64_CONSTANT, fixes compilation with MSVC 6.0.
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.h:
+         Use G_GINT64_CONSTANT, fixes compilation with MSVC 6.0.
+         Fixes #500808.
+
+2007-11-20 12:15:51 +0000  Julien Moutte <julien@moutte.net>
+
+         gst/realmedia/rtspreal.c: Fix build on Mac OS X.
+         Original commit message from CVS:
+         2007-11-20  Julien MOUTTE  <julien@moutte.net>
+         * gst/realmedia/rtspreal.c: (rtsp_ext_real_parse_sdp): Fix build
+         on Mac OS X.
+
+2007-11-19 11:38:49 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Restore the segment handling logic.
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         Restore the segment handling logic.
+         Please don't do behavioural changes under the heading of 'leak fixes'
+         or 'whitespace changes', people.
+
+2007-11-19 09:50:58 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Plug some leaks.
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         Plug some leaks.
+
+2007-11-13 06:57:57 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         gst/asfdemux/gstasfdemux.c: Sync _activate_pull() a little more with other demuxers.
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c:
+         Sync _activate_pull() a little more with other demuxers.
+
+2007-11-11 20:41:32 +0000  Thijs Vermeir <thijsvermeir@gmail.com>
+
+         gst/mpegstream/gstmpegdemux.c: recognize the padding stream
+         Original commit message from CVS:
+         * gst/mpegstream/gstmpegdemux.c:
+         recognize the padding stream
+
+2007-10-31 14:33:03 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/gstasfdemux.c: Convert tags that come as string into the type required by
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_ext_content_desc):
+         Convert tags that come as string into the type required by
+         GstTagList.
+
+2007-10-30 12:27:32 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Remove some more broken code, it seems to clip even when it should not.
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_emit_frame):
+         Remove some more broken code, it seems to clip even when it should not.
+         See #491305.
+
+2007-10-30 11:13:49 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: When the element is not driving the streaming thread it is not supposed to em...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_emit_frame):
+         When the element is not driving the streaming thread it is not supposed
+         to emit EOS or post SEGMENT done. It is allowed to return UNEXPECTED
+         upstream when it detects EOS. See #491305.
+
+2007-10-13 15:13:34 +0000  Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+         gst/dvdsub/: Add dvd subtitle parser, which just packetizes the input stream. This is needed to mux dvd subtitles int...
+         Original commit message from CVS:
+         Patch by: Mark Nauwelaerts <mnauw at users.sourceforge.net>
+         * gst/dvdsub/Makefile.am:
+         * gst/dvdsub/gstdvdsubdec.c:
+         * gst/dvdsub/gstdvdsubparse.c:
+         * gst/dvdsub/gstdvdsubparse.h:
+         Add dvd subtitle parser, which just packetizes the input
+         stream. This is needed to mux dvd subtitles into matroska
+         files, since the muxer expects unfragmented and properly
+         timestamped input (#415754).
+
+2007-10-10 12:02:30 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         configure.ac: Update requirements from past CVS versions to released versions (0.10.14 in this case).
+         Original commit message from CVS:
+         * configure.ac:
+         Update requirements from past CVS versions to released
+         versions (0.10.14 in this case).
+         * ext/sidplay/gstsiddec.cc:
+         Fix compilation with g++-4.2.
+
+2007-10-08 17:51:33 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         gst/realmedia/: Fix some compiler warnings shown on Forte.
+         Original commit message from CVS:
+         * gst/realmedia/asmrules.c: (gst_asm_scan_parse_expression),
+         (gst_asm_scan_parse_condition):
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_video_packet):
+         Fix some compiler warnings shown on Forte.
+
+2007-10-05 08:51:44 +0000  Gautier Portet <kassoulet@gmail.com>
+
+         gst/xingheader/gstxingmux.c: The size of the Xing header is actually 417 as it's rounded to the next smaller integer....
+         Original commit message from CVS:
+         Patch by: Gautier Portet <kassoulet at gmail dot com>
+         * gst/xingheader/gstxingmux.c:
+         The size of the Xing header is actually 417 as it's rounded to the
+         next smaller integer. Fixes #397759.
+         * gst/xingheader/gstxingmux.c: (xing_generate_header),
+         (xing_push_header):
+         Some random cleanup, add FIXMEs and TODOs and check if the newsegment
+         event to the beginning was successful before pushing the header again.
+
+2007-09-29 17:11:16 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Use gst_util_guint64_to_gdouble for conversions.
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3parse_time_to_bytepos),
+         (mp3parse_bytepos_to_time):
+         Use gst_util_guint64_to_gdouble for conversions.
+         * win32/vs6/libgstmad.dsp:
+         Add a link to libgstaudio.
+
+2007-09-26 13:40:35 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/lame/gstlame.c: Fix up case where there is no peer, in which case _get_allowed_caps() will return NULL.
+         Original commit message from CVS:
+         * ext/lame/gstlame.c:
+         Fix up case where there is no peer, in which case
+         _get_allowed_caps() will return NULL.
+
+2007-09-25 13:20:27 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/lame/gstlame.c: Use GST_PTR_FORMAT to print caps in debug statement.
+         Original commit message from CVS:
+         * ext/lame/gstlame.c:
+         Use GST_PTR_FORMAT to print caps in debug statement.
+
+2007-09-25 09:16:05 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         configure.ac: Use AG_GST_ARG_WITH_PLUGINS, AG_GST_ARG_ENABLE_EXTERNAL and
+         Original commit message from CVS:
+         * configure.ac:
+         Use AG_GST_ARG_WITH_PLUGINS, AG_GST_ARG_ENABLE_EXTERNAL and
+         AG_GST_ARG_ENABLE_EXPERIMENTAL instead of duplicating those macros
+         in configure.ac.
+
+2007-09-24 10:26:21 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         ext/lame/gstlame.c: Allow fixing the sample rate lame converts to by negotiating fixed sample rate on the src pad caps.
+         Original commit message from CVS:
+         * ext/lame/gstlame.c:
+         Allow fixing the sample rate lame converts to by negotiating fixed
+         sample rate on the src pad caps.
+         Add docs for it.
+         * tests/check/Makefile.am:
+         * tests/check/pipelines/lame.c:
+         Add a check for it.
+
+2007-09-22 18:22:12 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         po/: Updated translations.
+         Original commit message from CVS:
+         * po/LINGUAS:
+         * po/da.po:
+         Updated translations.
+
+2007-09-22 18:20:50 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         po/pl.po: Added Polish translation.
+         Original commit message from CVS:
+         translated by: Jakub Bogusz <qboosh@pld-linux.org>
+         * po/pl.po:
+         Added Polish translation.
+
+2007-09-22 18:19:08 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         po/fi.po: Added Finnish translation.
+         Original commit message from CVS:
+         translated by: Ilkka Tuohela <hile@iki.fi>
+         * po/fi.po:
+         Added Finnish translation.
+
+2007-09-22 18:17:52 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         po/es.po: Added Spanish translation.
+         Original commit message from CVS:
+         translated by: Jorge González González <aloriel@gmail.com>
+         * po/es.po:
+         Added Spanish translation.
+
+2007-09-22 18:17:08 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         po/bg.po: Added Bulgarian translation.
+         Original commit message from CVS:
+         translated by: Alexander Shopov <ash@contact.bg>
+         * po/bg.po:
+         Added Bulgarian translation.
+
+2007-09-20 11:47:52 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         gst/iec958/ac3iec.c: Chainup in finalize.
+         Original commit message from CVS:
+         * gst/iec958/ac3iec.c:
+         Chainup in finalize.
+         * tests/check/Makefile.am:
+         * tests/check/generic/states.c:
+         Improved state change unit test.
+
+2007-09-19 18:20:41 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         Ignore registries in any format.
+         Original commit message from CVS:
+         * docs/plugins/.cvsignore:
+         * tests/check/.cvsignore:
+         Ignore registries in any format.
+
+2007-09-08 20:54:54 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         configure.ac: Use AC_TRY_COMPILE instead of AC_TRY_RUN to check for a define in the lame headers.  This has the advan...
+         Original commit message from CVS:
+         * configure.ac:
+         Use AC_TRY_COMPILE instead of AC_TRY_RUN to check for a
+         define in the lame headers.  This has the advantage that
+         it should still work when we're cross-compiling (#452025).
+
+2007-08-24 15:55:03 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         gst/dvdlpcmdec/gstdvdlpcmdec.c: Add other allowed rates to the pad templates.
+         Original commit message from CVS:
+         * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+         Add other allowed rates to the pad templates.
+         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_dispose):
+         Reset the parser to release memory in dispose.
+
+2007-08-17 06:56:53 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         ext/: Fix more leaks.
+         Original commit message from CVS:
+         * ext/amrnb/amrnbdec.c:
+         * ext/amrnb/amrnbenc.c:
+         * ext/amrnb/amrnbparse.c:
+         * ext/sidplay/gstsiddec.cc:
+         Fix more leaks.
+
+2007-08-16 14:49:11 +0000  Daniel Charles <dcharles@ti.com>
+
+         ext/amrnb/amrnbenc.*: Add property to select the BandMode of the AMR encoder.
+         Original commit message from CVS:
+         Patch by: Daniel Charles <dcharles at ti dot com>
+         * ext/amrnb/amrnbenc.c: (gst_amrnbenc_bandmode_get_type),
+         (gst_amrnbenc_set_property), (gst_amrnbenc_get_property),
+         (gst_amrnbenc_base_init), (gst_amrnbenc_class_init),
+         (gst_amrnbenc_chain), (gst_amrnbenc_state_change):
+         * ext/amrnb/amrnbenc.h:
+         Add property to select the BandMode of the AMR encoder.
+         See #466442.
+
+2007-08-16 12:15:32 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         gst/realmedia/asmrules.c: Make ro memory to share.
+         Original commit message from CVS:
+         * gst/realmedia/asmrules.c:
+         Make ro memory to share.
+
+2007-08-16 11:52:57 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/mpegaudioparse/gstmpegaudioparse.*: Queue segment event and push it after we know the caps on the pad or else an ...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_sink_event), (gst_mp3parse_emit_frame):
+         * gst/mpegaudioparse/gstmpegaudioparse.h:
+         Queue segment event and push it after we know the caps on the pad or
+         else an autoplugger might not have plugged the element yet and the
+         segment is lost.
+
+2007-08-16 07:17:13 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         gst/iec958/ac3iec.c: Fix tests.
+         Original commit message from CVS:
+         * gst/iec958/ac3iec.c:
+         Fix tests.
+
+2007-08-16 06:48:13 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         tests/check/: Add generic state-change test suite to help to fi leaks.
+         Original commit message from CVS:
+         * tests/check/Makefile.am:
+         * tests/check/generic/.cvsignore:
+         * tests/check/generic/states.c:
+         Add generic state-change test suite to help to fi leaks.
+
+2007-08-09 10:57:11 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         po/: Added Portuguese (Brazilian) translation.
+         Original commit message from CVS:
+         translated by: Raphael Higino <phhigino@gmail.com>
+         * po/LINGUAS:
+         * po/pt_BR.po:
+         Added Portuguese (Brazilian) translation.
+
+2007-08-09 10:55:59 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         po/: Updated translations.
+         Original commit message from CVS:
+         * po/hu.po:
+         * po/nl.po:
+         * po/sv.po:
+         * po/uk.po:
+         Updated translations.
+
+2007-08-07 11:50:44 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/rmdemux.c: Activate timestamp fixing code.
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_fix_timestamp),
+         (gst_rmdemux_parse_video_packet):
+         Activate timestamp fixing code.
+
+2007-08-07 10:57:09 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/rmdemux.c: Do fragment collection in the demuxer so that we can now work with both ffmpeg and realvideo...
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_reset),
+         (gst_rmdemux_chain), (gst_rmdemux_parse_mdpr),
+         (gst_rmdemux_fix_timestamp), (gst_rmdemux_parse_video_packet),
+         (gst_rmdemux_parse_audio_packet), (gst_rmdemux_parse_packet):
+         Do fragment collection in the demuxer so that we can now work with
+         both ffmpeg and realvideodec to decoder real video content.
+
+2007-08-04 12:59:24 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         gst/realmedia/asmrules.c: Include stdlib.h.
+         Original commit message from CVS:
+         * gst/realmedia/asmrules.c:
+         Include stdlib.h.
+
+2007-08-03 16:21:19 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/rdtmanager.c: Fix caps.
+         Original commit message from CVS:
+         * gst/realmedia/rdtmanager.c:
+         Fix caps.
+
+2007-08-03 16:11:09 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/rtspreal.c: Disable UDP transport for now.
+         Original commit message from CVS:
+         * gst/realmedia/rtspreal.c: (rtsp_ext_real_get_transports),
+         (rtsp_ext_real_parse_sdp), (rtsp_ext_real_stream_select):
+         Disable UDP transport for now.
+
+2007-08-03 16:09:01 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/: Add simple rdt manager.
+         Original commit message from CVS:
+         * gst/realmedia/Makefile.am:
+         * gst/realmedia/rdtmanager.c: (find_session_by_id),
+         (create_session), (free_session), (gst_rdt_manager_base_init),
+         (gst_rdt_manager_marshal_BOXED__UINT_UINT),
+         (gst_rdt_manager_class_init), (gst_rdt_manager_init),
+         (gst_rdt_manager_finalize), (gst_rdt_manager_query_src),
+         (gst_rdt_manager_chain_rtp), (gst_rdt_manager_chain_rtcp),
+         (gst_rdt_manager_set_property), (gst_rdt_manager_get_property),
+         (gst_rdt_manager_provide_clock), (gst_rdt_manager_change_state),
+         (create_recv_rtp), (create_recv_rtcp), (create_rtcp),
+         (gst_rdt_manager_request_new_pad), (gst_rdt_manager_release_pad),
+         (gst_rdt_manager_plugin_init):
+         * gst/realmedia/rdtmanager.h:
+         * gst/realmedia/rmdemux.c: (plugin_init):
+         Add simple rdt manager.
+
+2007-08-03 14:19:50 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/rdtdepay.c: Fix the encoding-name so that it matches what the rtsp extension sets.
+         Original commit message from CVS:
+         * gst/realmedia/rdtdepay.c:
+         Fix the encoding-name so that it matches what the rtsp extension sets.
+
+2007-08-02 19:37:41 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/: Use g_hash_table_destroy instead of _unref which is too new.
+         Original commit message from CVS:
+         * gst/realmedia/asmrules.c: (gst_asm_node_free),
+         (gst_asm_node_evaluate), (gst_asm_scan_new), (gst_asm_scan_free),
+         (gst_asm_scan_string), (gst_asm_scan_number),
+         (gst_asm_scan_identifier), (gst_asm_scan_print_token),
+         (gst_asm_scan_next_token), (gst_asm_rule_free),
+         (gst_asm_rule_add_property), (gst_asm_scan_parse_operand),
+         (gst_asm_scan_parse_expression), (gst_asm_scan_parse_condition),
+         (gst_asm_scan_parse_property), (gst_asm_scan_parse_rule),
+         (gst_asm_rule_evaluate), (gst_asm_rule_book_new),
+         (gst_asm_rule_book_n_rules), (gst_asm_rule_book_free),
+         (gst_asm_rule_book_match), (main):
+         * gst/realmedia/rtspreal.c: (rtsp_ext_real_parse_sdp),
+         (rtsp_ext_real_stream_select), (gst_rtsp_real_plugin_init):
+         Use g_hash_table_destroy instead of _unref which is too new.
+
+2007-08-02 19:30:05 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/.cvsignore: Add test to ignore.
+         Original commit message from CVS:
+         * gst/realmedia/.cvsignore:
+         Add test to ignore.
+         * gst/realmedia/Makefile.am:
+         * gst/realmedia/asmrules.c: (gst_asm_node_new),
+         (gst_asm_node_free), (gst_asm_operator_eval),
+         (gst_asm_node_evaluate), (gst_asm_scan_new), (gst_asm_scan_free),
+         (gst_asm_scan_string), (gst_asm_scan_number),
+         (gst_asm_scan_identifier), (gst_asm_scan_print_token),
+         (gst_asm_scan_next_token), (gst_asm_rule_new), (gst_asm_rule_free),
+         (gst_asm_rule_add_property), (gst_asm_scan_parse_operand),
+         (gst_asm_scan_parse_expression), (gst_asm_scan_parse_condition),
+         (gst_asm_scan_parse_property), (gst_asm_scan_parse_rule),
+         (gst_asm_rule_evaluate), (gst_asm_rule_book_new),
+         (gst_asm_rule_book_n_rules), (gst_asm_rule_book_free),
+         (gst_asm_rule_book_match), (main):
+         * gst/realmedia/asmrules.h:
+         Added asembler rule book parser and evaluator.
+         * gst/realmedia/rtspreal.c: (rtsp_ext_real_parse_sdp),
+         (rtsp_ext_real_stream_select), (gst_rtsp_real_plugin_init):
+         * gst/realmedia/rtspreal.h:
+         Keep per stream config info.
+         Parse and evaluate asm rule books for stream selection.
+
+2007-07-31 19:16:44 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         gst/realmedia/rtspreal.c: Include stdlib.
+         Original commit message from CVS:
+         * gst/realmedia/rtspreal.c:
+         Include stdlib.
+
+2007-07-27 16:39:45 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/: Split out hash code in separate file.
+         Original commit message from CVS:
+         * gst/realmedia/Makefile.am:
+         * gst/realmedia/realhash.c: (hash), (call_hash),
+         (gst_rtsp_ext_real_calc_response_and_checksum):
+         * gst/realmedia/realhash.h:
+         * gst/realmedia/rtspreal.c: (rtsp_ext_real_get_transports),
+         (rtsp_ext_real_after_send), (rtsp_ext_real_stream_select):
+         Split out hash code in separate file.
+
+2007-07-27 10:12:55 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/: Fix include paths and link dependecies for rtsp extension.
+         Original commit message from CVS:
+         * gst/asfdemux/Makefile.am:
+         * gst/asfdemux/gstrtspwms.c: (gst_rtsp_wms_parse_sdp), (_do_init),
+         (gst_rtsp_wms_class_init):
+         * gst/realmedia/Makefile.am:
+         * gst/realmedia/rtspreal.c: (rtsp_ext_real_get_transports),
+         (rtsp_ext_real_before_send), (rtsp_ext_real_after_send),
+         (rtsp_ext_real_parse_sdp), (rtsp_ext_real_stream_select),
+         (_do_init), (gst_rtsp_real_class_init):
+         Fix include paths and link dependecies for rtsp extension.
+
+2007-07-26 15:52:43 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/: Add RealMedia RTSP extension module. It has rank NONE until it is fully functional.
+         Original commit message from CVS:
+         * gst/realmedia/Makefile.am:
+         * gst/realmedia/rmdemux.c: (plugin_init):
+         * gst/realmedia/rtspreal.c: (rtsp_ext_real_get_transports),
+         (rtsp_ext_real_before_send), (rtsp_ext_real_after_send), (hash),
+         (call_hash), (rtsp_ext_real_calc_response_and_checksum),
+         (rtsp_ext_real_parse_sdp), (rtsp_ext_real_stream_select),
+         (_do_init), (gst_rtsp_real_base_init), (gst_rtsp_real_class_init),
+         (gst_rtsp_real_init), (gst_rtsp_real_finalize),
+         (gst_rtsp_real_change_state), (gst_rtsp_real_extension_init),
+         (gst_rtsp_real_plugin_init):
+         * gst/realmedia/rtspreal.h:
+         Add RealMedia RTSP extension module. It has rank NONE until it is fully
+         functional.
+
+2007-07-25 18:38:42 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/asfdemux/: Move WMS RTSP extension from -good to here.
+         Original commit message from CVS:
+         * gst/asfdemux/Makefile.am:
+         * gst/asfdemux/gstasf.c: (plugin_init):
+         * gst/asfdemux/gstrtspwms.c: (gst_rtsp_wms_before_send),
+         (gst_rtsp_wms_after_send), (gst_rtsp_wms_parse_sdp),
+         (gst_rtsp_wms_configure_stream), (_do_init),
+         (gst_rtsp_wms_base_init), (gst_rtsp_wms_class_init),
+         (gst_rtsp_wms_init), (gst_rtsp_wms_finalize),
+         (gst_rtsp_wms_change_state), (gst_rtsp_wms_extension_init):
+         * gst/asfdemux/gstrtspwms.h:
+         Move WMS RTSP extension from -good to here.
+         Port it to the new pluggable extension interface.
+
+2007-07-24 06:58:41 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         ext/mad/Makefile.am: Link to audio helper from plugins-base.
+         Original commit message from CVS:
+         * ext/mad/Makefile.am:
+         Link to audio helper from plugins-base.
+
+2007-07-24 05:05:29 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         Use the new buffer clipping function from gstaudio here and require gst-plugins-base CVS.
+         Original commit message from CVS:
+         * configure.ac:
+         * ext/mad/gstmad.c: (gst_mad_chain):
+         Use the new buffer clipping function from gstaudio here and
+         require gst-plugins-base CVS.
+
+2007-07-23 09:07:19 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         configure.ac: Sync liboil check with plugins-base. Add libm check.
+         Original commit message from CVS:
+         * configure.ac:
+         Sync liboil check with plugins-base. Add libm check.
+         * gst/synaesthesia/Makefile.am:
+         Link against libm. We're using sqrt here.
+
+2007-07-20 07:58:25 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         gst/asfdemux/gstasfdemux.c: Include stdlib.
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c:
+         Include stdlib.
+
+2007-07-20 07:41:57 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         ext/annodex/Makefile.am: Fix CFLAGS/LIBS.
+         Original commit message from CVS:
+         * ext/annodex/Makefile.am:
+         Fix CFLAGS/LIBS.
+         * ext/cdio/gstcdiocddasrc.c:
+         * ext/libpng/gstpngdec.c: (gst_pngdec_task):
+         Include stdlib
+         * ext/cairo/Makefile.am:
+         * gst/videofilter/Makefile.am:
+         * tests/examples/level/Makefile.am:
+         Use $(LIBM) instead of -lm
+
+2007-07-18 17:51:55 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/mpegaudioparse/gstmpegaudioparse.*: Save some memory for each frame by only saving the start timestamp and start ...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_reset),
+         (gst_mp3parse_emit_frame), (mp3parse_handle_seek):
+         * gst/mpegaudioparse/gstmpegaudioparse.h:
+         Save some memory for each frame by only saving the start timestamp
+         and start byte position instead of additionally the stop timestamp
+         and stop byte position. This requires us to use a doubly-linked list
+         but still saves 8-12 bytes per frame.
+
+2007-07-16 09:14:18 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         ext/mad/gstmad.c: Fix buffer clipping to correctly clip to the segment stop.
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (clip_outgoing_buffer):
+         Fix buffer clipping to correctly clip to the segment stop.
+
+2007-07-15 19:39:46 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Fix a calculation that was causing mp3parse to drop every incoming frame when...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_emit_frame):
+         Fix a calculation that was causing mp3parse to drop every incoming
+         frame when upstream delivered a segment in TIME format, breaking
+         playback of all mpeg system streams.
+
+2007-07-13 16:46:35 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         Remove bogus check for libcheck, since we check for gstreamer-check and it pulls in the required info from and we wer...
+         Original commit message from CVS:
+         * Makefile.am:
+         * configure.ac:
+         * tests/Makefile.am:
+         Remove bogus check for libcheck, since we check for
+         gstreamer-check and it pulls in the required info from
+         and we weren't actually _using_ the information for
+         libcheck ourselves anyway.
+
+2007-07-13 16:27:56 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/mpegaudioparse/gstmpegaudioparse.*: Implement accurate seeking in mpegaudioparse. Fixes #308312.
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_reset),
+         (gst_mp3parse_init), (gst_mp3parse_dispose),
+         (gst_mp3parse_sink_event), (mp3parse_seek_table_last_entry),
+         (gst_mp3parse_emit_frame), (gst_mp3parse_chain),
+         (mp3parse_handle_seek), (mp3parse_src_query):
+         * gst/mpegaudioparse/gstmpegaudioparse.h:
+         Implement accurate seeking in mpegaudioparse. Fixes #308312.
+         Also implement segment seeks.
+
+2007-07-13 15:46:13 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         ext/mad/gstmad.*: Implement buffer clipping and use GST_BOILERPLATE instead of manual
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (_do_init), (gst_mad_init), (index_seek),
+         (normal_seek), (gst_mad_sink_event), (clip_outgoing_buffer),
+         (gst_mad_chain), (gst_mad_change_state):
+         * ext/mad/gstmad.h:
+         Implement buffer clipping and use GST_BOILERPLATE instead of manual
+         GType magic. Part one of bug #308312.
+
+2007-07-12 11:21:23 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         configure.ac: Use pkg-config to locate check.
+         Original commit message from CVS:
+         * configure.ac:
+         Use pkg-config to locate check.
+
+2007-07-11 23:18:14 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         Fix build against core CVS by not using deprecated API. Bump requirements for new API (overdue anyway).
+         Original commit message from CVS:
+         * configure.ac:
+         * ext/mpeg2dec/gstmpeg2dec.c: (crop_buffer):
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_descramble_buffer):
+         * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain_raw):
+         Fix build against core CVS by not using deprecated API. Bump
+         requirements for new API (overdue anyway).
+
+2007-07-09 06:05:48 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         REQUIREMENTS: Also add amr-libs here and update a little.
+         Original commit message from CVS:
+         * REQUIREMENTS:
+         Also add amr-libs here and update a little.
+
+2007-07-06 17:59:29 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         docs/plugins/inspect/: Add inspect file for synaesthesia so the docs can be built even if the plugin isn't built yet....
+         Original commit message from CVS:
+         * docs/plugins/inspect/plugin-dvdnav.xml:
+         * docs/plugins/inspect/plugin-realmedia.xml:
+         * docs/plugins/inspect/plugin-synaesthesia.xml:
+         Add inspect file for synaesthesia so the docs can be built even if
+         the plugin isn't built yet. Fixes #454311. Also add inspect files
+         for dvdnavsrc and realmedia.
+
+2007-07-05 08:44:30 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         docs/plugins/Makefile.am: Simplify --extra-dir as gtkdoc scans recursively.
+         Original commit message from CVS:
+         * docs/plugins/Makefile.am:
+         Simplify --extra-dir as gtkdoc scans recursively.
+
+2007-07-03 13:05:01 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         And yet more docs enabled.
+         Original commit message from CVS:
+         * docs/plugins/Makefile.am:
+         * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+         * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+         * gst/synaesthesia/Makefile.am:
+         * gst/synaesthesia/gstsynaesthesia.c:
+         * gst/synaesthesia/gstsynaesthesia.h:
+         And yet more docs enabled.
+
+2007-07-03 11:55:45 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         docs/plugins/: Add new docs. Scan c++ files too.
+         Original commit message from CVS:
+         * docs/plugins/Makefile.am:
+         * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+         * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+         * docs/plugins/inspect/plugin-a52dec.xml:
+         * docs/plugins/inspect/plugin-amrnb.xml:
+         * docs/plugins/inspect/plugin-asf.xml:
+         * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+         * docs/plugins/inspect/plugin-dvdsub.xml:
+         * docs/plugins/inspect/plugin-iec958.xml:
+         * docs/plugins/inspect/plugin-lame.xml:
+         * docs/plugins/inspect/plugin-mad.xml:
+         * docs/plugins/inspect/plugin-mpeg2dec.xml:
+         * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+         * docs/plugins/inspect/plugin-mpegstream.xml:
+         Add new docs. Scan c++ files too.
+         * ext/amrnb/amrnbdec.c: (gst_amrnbdec_base_init),
+         (gst_amrnbdec_event):
+         * ext/amrnb/amrnbenc.c: (gst_amrnbenc_base_init):
+         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_base_init),
+         (gst_amrnbparse_loop):
+         Add documentation headers.
+         * ext/mad/gstmad.c:
+         * ext/mad/gstmad.h:
+         Refactor for docs.
+
+2007-07-01 19:12:32 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Use GST_BOILERPLATE instead of manual GType magic.
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_base_init),
+         (gst_mp3parse_init):
+         Use GST_BOILERPLATE instead of manual GType magic.
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_handle_first_frame), (mp3parse_time_to_bytepos),
+         (mp3parse_bytepos_to_time):
+         * gst/mpegaudioparse/gstmpegaudioparse.h:
+         Implement seeking, byte->time, time->byte conversions with the Xing
+         seek table if available. This allows better at least a bit more
+         accurate seeks and file position reporting.
+
+2007-06-28 20:33:51 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Copy the complete Xing seek table in the 100 byte array instead of copying th...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_handle_first_frame):
+         Copy the complete Xing seek table in the 100 byte array instead of
+         copying the first byte 100 times.
+         * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3parse_total_bytes),
+         (mp3parse_total_time), (mp3parse_time_to_bytepos):
+         Add seeking support based on the Xing header but comment it out for
+         now as it seems to yield worse result than the other method.
+         Also use gst_pad_query_peer_duration() instead of getting the peer pad
+         ourself, creating a new GstQuery, etc.
+
+2007-06-25 12:46:47 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         docs/plugins/: Update docs with caps info.
+         Original commit message from CVS:
+         * docs/plugins/gst-plugins-ugly-plugins.args:
+         * docs/plugins/inspect/plugin-a52dec.xml:
+         * docs/plugins/inspect/plugin-amrnb.xml:
+         * docs/plugins/inspect/plugin-asf.xml:
+         * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+         * docs/plugins/inspect/plugin-dvdread.xml:
+         * docs/plugins/inspect/plugin-dvdsub.xml:
+         * docs/plugins/inspect/plugin-iec958.xml:
+         * docs/plugins/inspect/plugin-lame.xml:
+         * docs/plugins/inspect/plugin-mad.xml:
+         * docs/plugins/inspect/plugin-mpeg2dec.xml:
+         * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+         * docs/plugins/inspect/plugin-mpegstream.xml:
+         Update docs with caps info.
+
+2007-06-25 12:25:09 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         po/POTFILES.in: Make sure dvdnav strings get translated too (no reason not to have them in the .po file, even if the ...
+         Original commit message from CVS:
+         * po/POTFILES.in:
+         Make sure dvdnav strings get translated too (no reason not to have
+         them in the .po file, even if the plugin is disabled for now).
+         Fixes #450879.
+
+2007-06-25 11:46:24 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         ext/amrnb/: Add newsegment and discont handling. Some code cleanups.
+         Original commit message from CVS:
+         * ext/amrnb/amrnbdec.c: (gst_amrnbdec_base_init),
+         (gst_amrnbdec_event), (gst_amrnbdec_chain),
+         (gst_amrnbdec_state_change):
+         * ext/amrnb/amrnbdec.h:
+         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_base_init),
+         (gst_amrnbparse_loop):
+         Add newsegment and discont handling. Some code cleanups.
+
+2007-06-25 07:55:51 +0000  David Schleef <ds@schleef.org>
+
+         ext/dvdread/dvdreadsrc.c: check for an error from
+         Original commit message from CVS:
+         * ext/dvdread/dvdreadsrc.c: check for an error from
+         DVDReadBlocks() correctly.
+
+2007-06-25 07:22:10 +0000  David Schleef <ds@schleef.org>
+
+         ext/dvdread/dvdreadsrc.c: If we can't read a nav packet, or it doesn't look like a nav packet, that's an error.  Prev...
+         Original commit message from CVS:
+         * ext/dvdread/dvdreadsrc.c:
+         If we can't read a nav packet, or it doesn't look like a nav
+         packet, that's an error.  Previous behavior was to look at
+         the next packet; I can't find any justification for doing that.
+         Fixes: #358891.
+
+2007-06-23 22:57:29 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         po/it.po: Updated Italian translation.
+         Original commit message from CVS:
+         * po/it.po:
+         Updated Italian translation.
+
+2007-06-23 11:22:39 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         po/vi.po: Updated Vietnames translation.
+         Original commit message from CVS:
+         * po/vi.po:
+         Updated Vietnames translation.
+
+2007-06-23 11:21:54 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         po/: Added Chinese (simplified) translation.
+         Original commit message from CVS:
+         contributed by: Wenzheng Hu <db_lobster@163.com>
+         * po/LINGUAS:
+         * po/zh_CN.po:
+         Added Chinese (simplified) translation.
+
+2007-06-22 14:27:18 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         MAINTAINERS: Updating all the maintainers files
+         Original commit message from CVS:
+         * MAINTAINERS:
+         Updating all the maintainers files
+
+2007-06-22 10:57:06 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         Fix leaks some more.
+         Original commit message from CVS:
+         * ext/amrnb/amrnbdec.c: (gst_amrnbdec_init):
+         * gst/ac3parse/gstac3parse.c: (gst_ac3parse_init):
+         * gst/asfdemux/gstasfmux.c: (gst_asfmux_init):
+         * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_init):
+         * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_init):
+         * gst/iec958/ac3iec.c: (ac3iec_init):
+         * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_init):
+         Fix leaks some more.
+
+2007-06-21 14:33:58 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: "She's leaking me", said valgrind.
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_init):
+         "She's leaking me", said valgrind.
+
+2007-06-19 14:40:20 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Fix "pad caps are not a real subset of its template caps" warning.
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3_caps_create):
+         Fix "pad caps are not a real subset of its template caps" warning.
+
+2007-06-19 14:15:50 +0000  Laurent Glayal <spglegle@yahoo.fr>
+
+         ext/amrnb/amrnbdec.c: Don't leak the adapter, unref it in a new finalize method instead.
+         Original commit message from CVS:
+         Patch by: Laurent Glayal <spglegle at yahoo dot fr>
+         * ext/amrnb/amrnbdec.c: (gst_amrnbdec_class_init),
+         (gst_amrnbdec_finalize):
+         Don't leak the adapter, unref it in a new finalize method instead.
+         Fixes #448782.
+
+2007-06-19 10:43:26 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         configure.ac: Back to CVS
+         Original commit message from CVS:
+         * configure.ac:
+         Back to CVS
+         * gst-plugins-ugly.doap:
+         Add 0.10.6 to the list of releases.
+
+=== release 0.10.6 ===
+
+2007-06-19 10:31:04 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+         Release 0.10.6
+         Original commit message from CVS:
+         Release 0.10.6
+
+2007-06-19 10:21:25 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/cs.po:
+       * po/da.po:
+       * po/en_GB.po:
+       * po/hu.po:
+       * po/it.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/uk.po:
+       * po/vi.po:
+         Update .po files
+         Original commit message from CVS:
+         Update .po files
+
+2007-06-15 09:31:16 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         win32/vs6/: Convert line endings to CRLF and mark as binary files.
+         Original commit message from CVS:
+         * win32/vs6/gst_plugins_ugly.dsw:
+         * win32/vs6/libgstac3parse.dsp:
+         * win32/vs6/libgstasfdemux.dsp:
+         * win32/vs6/libgstdvdlpcmdec.dsp:
+         * win32/vs6/libgstdvdsub.dsp:
+         * win32/vs6/libgstiec958.dsp:
+         * win32/vs6/libgstlame.dsp:
+         * win32/vs6/libgstmad.dsp:
+         * win32/vs6/libgstmpegaudioparse.dsp:
+         * win32/vs6/libgstmpegstream.dsp:
+         * win32/vs6/libgstrealmedia.dsp:
+         * win32/vs6/libgstsynaesthesia.dsp:
+         Convert line endings to CRLF and mark as binary files.
+
+2007-06-13 14:29:39 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/dvdnav/dvdnavsrc.c: Don't forget to unlock when setting the device property, or we'll sooner or later deadlock.
+         Original commit message from CVS:
+         * ext/dvdnav/dvdnavsrc.c: (gst_dvd_nav_src_set_property):
+         Don't forget to unlock when setting the device property, or
+         we'll sooner or later deadlock.
+
+2007-06-12 21:46:10 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+         gst/dvdsub/gstdvdsubdec.c: Use gst_util_guint64_to_gdouble for conversion.
+         Original commit message from CVS:
+         * gst/dvdsub/gstdvdsubdec.c:(gst_dvd_sub_dec_parse_subpic):
+         Use gst_util_guint64_to_gdouble for conversion.
+         * win32/vs6/libgstasfdemux.dsp:
+         Add asfpacket.c to the build.
+
+2007-06-08 08:39:43 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         gst/mpegaudioparse/gstmpegaudioparse.*: If the Xing header provides a total time, use it to calculate the correct ave...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_reset),
+         (gst_mp3parse_emit_frame), (gst_mp3parse_handle_first_frame):
+         * gst/mpegaudioparse/gstmpegaudioparse.h:
+         If the Xing header provides a total time, use it to calculate the
+         correct average bitrate immediately, instead of sending updates as
+         we parse the stream.
+
+2007-06-05 21:47:29 +0000  by Mark Nauwelaerts <manauw@skynet.be>
+
+         gst/dvdsub/gstdvdsubdec.c: Use GstClockTime instead of guint for a time variable to prevent overflows on too large su...
+         Original commit message from CVS:
+         Patch by by: Mark Nauwelaerts <manauw at skynet dot be>
+         * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_parse_subpic):
+         Use GstClockTime instead of guint for a time variable to prevent
+         overflows on too large subtitle durations. Fixes #444514.
+
+2007-05-31 22:33:26 +0000  Mark Nauwelaerts <manauw@skynet.be>
+
+         gst/dvdsub/gstdvdsubdec.c: Clear state when handling the serialized FLUSH_STOP event instead of the FLUSH_START event...
+         Original commit message from CVS:
+         Patch by: Mark Nauwelaerts <manauw at skynet be>
+         * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_sink_event):
+         Clear state when handling the serialized FLUSH_STOP event instead of
+         the FLUSH_START event, thereby making sure we don't free buffers the
+         chain function is still using. Fixes dvdsubdec crashing when flusing
+         or seeking (#442706).
+
+2007-05-23 11:16:09 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Initialise variable to make fc4 build bot happy.
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
+         Initialise variable to make fc4 build bot happy.
+
+2007-05-21 15:11:45 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/mpegstream/gstmpegdemux.c: Add sanity check so we don't abort for broken or non-MPEG streams, but instead error o...
+         Original commit message from CVS:
+         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer):
+         Add sanity check so we don't abort for broken or non-MPEG streams,
+         but instead error out. Fixes crashes/aborts for when our typefinder
+         wrongly identifies quicktime files as mpeg (which should be fixed in
+         -base now too). (#440120).
+
+2007-05-18 09:35:17 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+       * ChangeLog:
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbenc.c:
+       * ext/amrnb/amrnbparse.c:
+         ext/amrnb/amrnbdec.c (gst_amrnbdec_debug, GST_CAT_DEFAULT, block_size, _do_init, gst_amrnbdec_base_init, gst_amrnbdec...
+         Original commit message from CVS:
+         * ext/amrnb/amrnbdec.c (gst_amrnbdec_debug, GST_CAT_DEFAULT,
+         block_size, _do_init, gst_amrnbdec_base_init,
+         gst_amrnbdec_class_init, gst_amrnbdec_init):
+         * ext/amrnb/amrnbenc.c (gst_amrnbenc_debug, GST_CAT_DEFAULT, _do_init,
+         gst_amrnbenc_base_init, gst_amrnbenc_class_init, gst_amrnbenc_init):
+         * ext/amrnb/amrnbparse.c (gst_amrnbparse_debug, GST_CAT_DEFAULT,
+         block_size, _do_init, gst_amrnbparse_base_init,
+         gst_amrnbparse_class_init, gst_amrnbparse_init):
+         First round of cleanups, that use GST_BOILERPLATE, GST_ELEMENT_DETAILS,
+         GST_DEBUG_FUNCPTR and add log-category.
+
+2007-05-18 08:42:25 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         gst/mpegaudioparse/gstmpegaudioparse.*: Implement parsing of Xing headers from the first frame of the stream, and use...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (mp3_type_frame_length_from_header), (gst_mp3parse_reset),
+         (gst_mp3parse_emit_frame), (gst_mp3parse_handle_first_frame),
+         (gst_mp3parse_chain), (mp3parse_total_bytes),
+         (mp3parse_total_time):
+         * gst/mpegaudioparse/gstmpegaudioparse.h:
+         Implement parsing of Xing headers from the first frame of the stream,
+         and use it to report duration correctly where possible.
+
+2007-05-16 19:15:13 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/realmedia/rmdemux.c: After descrambling, push the packets out as individual packets instead of one big descramble...
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_descramble_cook_audio):
+         After descrambling, push the packets out as individual packets
+         instead of one big descrambled buffer. Makes cook audio decoding
+         work with the 'realaudiodec' decoder from gst-plugins-bad.
+
+2007-05-16 19:07:45 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/realmedia/rmdemux.*: Remember first timestamp encountered in stream and re-timestamp stream to start from zero (f...
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_init),
+         (gst_rmdemux_sink_event), (gst_rmdemux_perform_seek),
+         (gst_rmdemux_reset), (gst_rmdemux_chain), (gst_rmdemux_add_stream),
+         (gst_rmdemux_parse_packet):
+         * gst/realmedia/rmdemux.h:
+         Remember first timestamp encountered in stream and re-timestamp
+         stream to start from zero (fixes #397219); only send one newsegment
+         event, not two; when seeking, send newsegment events from the
+         streaming thread and not from the seeking thread.
+
+2007-05-16 12:48:43 +0000  Mark Nauwelaerts <manauw@skynet.be>
+
+         gst/mpegstream/: Reset last_flow values for the various streams after a flushing seek, otherwise we might aggregate w...
+         Original commit message from CVS:
+         Based on patch by: Mark Nauwelaerts  <manauw skynet be>
+         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_event):
+         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_class_init),
+         (gst_mpeg_demux_process_event), (gst_mpeg_streams_reset_last_flow):
+         * gst/mpegstream/gstmpegdemux.h:
+         Reset last_flow values for the various streams after a flushing
+         seek, otherwise we might aggregate wrong flow returns afterwards
+         that will make upstream pause silently. This should fix seeking
+         in DVDs and also fix the Thoggen cropping dialog (#438610).
+
+2007-05-07 13:51:43 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/gstasfdemux.*: Activate streams (ie. add the pads to the element) depending on whether we actually get d...
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_reset),
+         (gst_asf_demux_chain_headers),
+         (gst_asf_demux_parse_data_object_start), (all_streams_prerolled),
+         (gst_asf_demux_have_mutually_exclusive_active_stream),
+         (gst_asf_demux_check_activate_streams),
+         (gst_asf_demux_find_stream_with_complete_payload),
+         (gst_asf_demux_push_complete_payloads), (gst_asf_demux_loop),
+         (gst_asf_demux_activate_ext_props_streams),
+         (gst_asf_demux_process_object):
+         * gst/asfdemux/gstasfdemux.h:
+         Activate streams (ie. add the pads to the element) depending on
+         whether we actually get data for those streams within the ASF
+         preroll value specified. Currently only done in pull-mode though
+         (this will fix problems with playbin hanging on mms streams once
+         we use this in push-mode as well).
+
+2007-05-04 11:04:16 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/: Make all timestamps start from zero in pull-mode too; some small clean-ups and FIXMEs here and there.
+         Original commit message from CVS:
+         * gst/asfdemux/asfpacket.c: (gst_asf_payload_queue_for_stream):
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_reset),
+         (gst_asf_demux_init), (gst_asf_demux_push_complete_payloads),
+         (gst_asf_demux_process_file):
+         * gst/asfdemux/gstasfdemux.h:
+         Make all timestamps start from zero in pull-mode too; some small
+         clean-ups and FIXMEs here and there.
+
+2007-05-01 11:10:31 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/asfpacket.c: If packet size is specified within the packet and smaller than the actual packet size, don'...
+         Original commit message from CVS:
+         * gst/asfdemux/asfpacket.c: (gst_asf_demux_parse_payload),
+         (gst_asf_demux_parse_packet):
+         If packet size is specified within the packet and smaller than
+         the actual packet size, don't parse beyond the size specified in
+         the packet (this makes us parse some cases of packets with single
+         compressed payloads cleanly, see e.g stream from #431318). Also
+         add a sanity check when parsing compressed single payloads.
+
+2007-05-01 09:19:13 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/: Seeking improvements: honour the KEY_UNIT seek flag; after a seek, only send data from the keyframe ri...
+         Original commit message from CVS:
+         * gst/asfdemux/asfpacket.c: (gst_asf_payload_queue_for_stream):
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_seek_index_lookup),
+         (gst_asf_demux_handle_seek_event),
+         (gst_asf_demux_push_complete_payloads):
+         Seeking improvements: honour the KEY_UNIT seek flag; after a seek, only
+         send data from the keyframe right before the new segment start to
+         make sure the decoder doesn't have to decode more than absolutely
+         necessary.
+
+2007-04-30 15:36:00 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/: Implement payload extension system/extended replicated data parsing, so we can extract payload duratio...
+         Original commit message from CVS:
+         * gst/asfdemux/asfheaders.c:
+         * gst/asfdemux/asfheaders.h:
+         * gst/asfdemux/asfpacket.c:
+         (asf_payload_parse_replicated_data_extensions),
+         (gst_asf_demux_parse_payload):
+         * gst/asfdemux/asfpacket.h:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_free_stream),
+         (gst_asf_demux_push_complete_payloads),
+         (gst_asf_demux_process_ext_stream_props):
+         * gst/asfdemux/gstasfdemux.h:
+         Implement payload extension system/extended replicated data parsing,
+         so we can extract payload durations if they're specified.
+
+2007-04-30 11:41:22 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/: Refactor stream parse/activation a bit (stream activation heuristics are still the same though); some ...
+         Original commit message from CVS:
+         * gst/asfdemux/asfheaders.h:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_free_stream),
+         (gst_asf_demux_reset), (gst_asf_demux_parse_data_object_start),
+         (gst_asf_demux_loop), (gst_asf_demux_setup_pad),
+         (gst_asf_demux_add_audio_stream), (gst_asf_demux_activate_stream),
+         (gst_asf_demux_parse_stream_object),
+         (gst_asf_demux_process_ext_stream_props),
+         (gst_asf_demux_process_queued_extended_stream_objects),
+         (gst_asf_demux_activate_ext_props_streams),
+         (gst_asf_demux_process_object):
+         * gst/asfdemux/gstasfdemux.h:
+         Refactor stream parse/activation a bit (stream activation heuristics
+         are still the same though); some more clean-ups.
+
+2007-04-28 12:23:16 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         win32/common/.cvsignore: Ignore generated config.h file to make build bot happy.
+         Original commit message from CVS:
+         * win32/common/.cvsignore:
+         Ignore generated config.h file to make build bot happy.
+
+2007-04-28 10:49:17 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/: Init debug category before using it.
+         Original commit message from CVS:
+         * gst/asfdemux/gstasf.c: (plugin_init):
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init):
+         * gst/asfdemux/gstasfdemux.h:
+         Init debug category before using it.
+
+2007-04-27 18:39:21 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/gstasfdemux.c: Fix silly bug when we can't pull as much data as we want; don't forget to announce pendin...
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_pull_data),
+         (gst_asf_demux_push_complete_payloads), (gst_asf_demux_loop):
+         Fix silly bug when we can't pull as much data as we want; don't
+         forget to announce pending tags in the new packet parsing code.
+
+2007-04-25 17:23:33 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         Generate a win32 config.h into win32/common and add to MANIFEST so it gets disted (#393890). Looks like win32/common/...
+         Original commit message from CVS:
+         * configure.ac:
+         * win32/MANIFEST:
+         Generate a win32 config.h into win32/common and add to MANIFEST so
+         it gets disted (#393890). Looks like win32/common/config.h.in needs
+         some work though.
+
+2007-04-22 22:41:20 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/amrnb/amrnbparse.c: Fix pull mode operation some more: send newsegment event before sending data; handle EOS and ...
+         Original commit message from CVS:
+         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_get_type),
+         (gst_amrnbparse_class_init), (gst_amrnbparse_init),
+         (gst_amrnbparse_pull_header), (gst_amrnbparse_loop):
+         Fix pull mode operation some more: send newsegment event before
+         sending data; handle EOS and fatal flow returns a bit better; don't
+         leak buffers in some cases. Misc. minor cleanups. Fixes #431707.
+
+2007-04-20 20:57:56 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/: New packet parsing code: should put halfway decent timestamps on buffers, and might even set the appro...
+         Original commit message from CVS:
+         * gst/asfdemux/Makefile.am:
+         * gst/asfdemux/asfpacket.c: (asf_packet_read_varlen_int),
+         (asf_packet_create_payload_buffer),
+         (asf_payload_find_previous_fragment),
+         (gst_asf_payload_queue_for_stream), (gst_asf_demux_parse_payload),
+         (gst_asf_demux_parse_packet):
+         * gst/asfdemux/asfpacket.h:
+         * gst/asfdemux/gstasfdemux.c:
+         (gst_asf_demux_reset_stream_state_after_discont),
+         (gst_asf_demux_push_complete_payloads), (gst_asf_demux_loop),
+         (gst_asf_demux_setup_pad), (gst_asf_demux_descramble_buffer),
+         (gst_asf_demux_process_chunk):
+         * gst/asfdemux/gstasfdemux.h:
+         New packet parsing code: should put halfway decent timestamps on
+         buffers, and might even set the appropriate keyframe/discont buffer
+         flags from time to time (and even if it doesn't, I'm at least able
+         to debug this code); only used in pull-mode so far. Still needs
+         some more work, like payload extensions parsing and proper flow
+         aggregation, and stream activation based on preroll. Stay tuned.
+
+2007-04-20 17:32:00 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/: Some clean-ups and small fixes: rename asf_stream_context structure to
+         Original commit message from CVS:
+         * gst/asfdemux/asfheaders.h:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_free_stream),
+         (gst_asf_demux_seek_index_lookup),
+         (gst_asf_demux_handle_seek_event), (gst_asf_demux_get_stream),
+         (gst_asf_demux_setup_pad), (gst_asf_demux_add_video_stream),
+         (gst_asf_demux_process_ext_content_desc),
+         (gst_asf_demux_process_file), (gst_asf_demux_descramble_segment),
+         (gst_asf_demux_push_buffer), (gst_asf_demux_process_chunk),
+         (gst_asf_demux_process_segment), (gst_asf_demux_handle_data):
+         * gst/asfdemux/gstasfdemux.h:
+         Some clean-ups and small fixes: rename asf_stream_context structure to
+         AsfStream; inline some three-line utility functions that are only used
+         once anyway and get rid of their associated helper structs; make debug
+         category global so that it is used by the debug statements in the other
+         file as well; simplify gst_asf_demux_get_stream(); fix accidental
+         implicit initialisation of stream->last_buffer_timestamp to 0, which
+         would lead to missing timestamps on the first buffer; put fourcc format
+         into video caps to make certain proprietary wmv decoders happy (for the
+         case of WMVA in particular); play_time is offset by preroll as well, so
+         fix overreporting of duration for some files.
+
+2007-04-17 10:21:50 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/gstasfdemux.c: Printf format fixes.
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_seek_event),
+         (gst_asf_demux_pull_indices):
+         Printf format fixes.
+
+2007-04-16 16:30:50 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/mpegstream/gstmpegparse.c: Post an error message if EOS wasn't handled by anything downstream.
+         Original commit message from CVS:
+         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_process_event),
+         (gst_mpeg_parse_send_event):
+         Post an error message if EOS wasn't handled by anything downstream.
+         This should fix playbin freezing/hanging with small VobSub subtitle
+         files (background: not-linked flow returns from downstream are
+         ignored for a while at the beginning, so if the file is small
+         upstream will never get a not-linked flow return even if nothing
+         is connected downstream). (#429960).
+
+2007-04-16 15:15:07 +0000  Michael Smith <msmith@xiph.org>
+
+         ext/amrnb/amrnbparse.c: Rewrite terminally broken sinkpad activation code. and push mode activation doesn't leave the...
+         Original commit message from CVS:
+         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
+         (gst_amrnbparse_sink_activate),
+         (gst_amrnbparse_sink_activate_pull):
+         Rewrite terminally broken sinkpad activation code.
+         Now actually supports pull-mode activation (didn't before), and push
+         mode activation doesn't leave the sinkpad flushing.
+
+2007-04-12 13:38:03 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/: Make asfdemux work in pull mode where possible. If there's an index at the end of the file, read it an...
+         Original commit message from CVS:
+         * gst/asfdemux/asfheaders.c:
+         * gst/asfdemux/asfheaders.h:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_free_stream),
+         (gst_asf_demux_reset), (gst_asf_demux_init),
+         (gst_asf_demux_activate), (gst_asf_demux_activate_push),
+         (gst_asf_demux_activate_pull), (gst_asf_demux_sink_event),
+         (gst_asf_demux_seek_index_lookup),
+         (gst_asf_demux_reset_stream_state_after_discont),
+         (gst_asf_demux_handle_seek_event),
+         (gst_asf_demux_handle_src_event), (gst_asf_demux_chain_headers),
+         (gst_asf_demux_chain), (gst_asf_demux_pull_data),
+         (gst_asf_demux_pull_indices),
+         (gst_asf_demux_parse_data_object_start),
+         (gst_asf_demux_pull_headers), (gst_asf_demux_loop),
+         (gst_asf_demux_setup_pad), (gst_asf_demux_process_file),
+         (gst_asf_demux_process_simple_index),
+         (gst_asf_demux_process_object),
+         (gst_asf_demux_send_event_unlocked), (gst_asf_demux_push_buffer),
+         (gst_asf_demux_handle_data), (gst_asf_demux_change_state):
+         * gst/asfdemux/gstasfdemux.h:
+         Make asfdemux work in pull mode where possible. If there's an index
+         at the end of the file, read it and use it for seeking purposes.
+
+2007-04-12 10:19:18 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/synaesthesia/gstsynaesthesia.c: Some timestamp fixes.
+         Original commit message from CVS:
+         * gst/synaesthesia/gstsynaesthesia.c: (gst_synaesthesia_init),
+         (gst_synaesthesia_sink_setcaps), (gst_synaesthesia_src_setcaps),
+         (gst_synaesthesia_chain), (gst_synaesthesia_change_state):
+         Some timestamp fixes.
+         * gst/synaesthesia/synaescope.c: (synaescope_coreGo):
+         Fix for 64-bit machines.
+
+2007-04-12 10:10:22 +0000  René Stadler <mail@renestadler.de>
+
+         gst/realmedia/rmdemux.*: Make rmdemux handle any number of logical streams. Fixes #428698.
+         Original commit message from CVS:
+         Patch by: René Stadler <mail at renestadler dot de>
+         * gst/realmedia/rmdemux.c: (find_seek_offset_bytes),
+         (find_seek_offset_time), (gst_rmdemux_reset),
+         (gst_rmdemux_get_stream_by_id), (gst_rmdemux_send_event),
+         (gst_rmdemux_add_stream), (gst_rmdemux_combine_flows):
+         * gst/realmedia/rmdemux.h:
+         Make rmdemux handle any number of logical streams. Fixes #428698.
+
+2007-04-05 13:48:52 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * po/nl.po:
+         update dutch
+         Original commit message from CVS:
+         update dutch
+
+2007-04-05 13:48:12 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         po/: Added Danish translation.
+         Original commit message from CVS:
+         submitted by: Mogens Jaeger <mogens@jaeger.tf>
+         * po/LINGUAS:
+         * po/da.po:
+         Added Danish translation.
+
+2007-03-28 16:01:06 +0000  Zaheer Abbas Merali <zaheerabbas@merali.org>
+
+         po/.cvsignore: Add pot.
+         Original commit message from CVS:
+         * po/.cvsignore:
+         Add pot.
+
+2007-03-27 12:02:49 +0000  Julien Moutte <julien@moutte.net>
+
+         ext/mad/gstmad.c: Generate a perfect stream and try to adapt to incoming timestamps lack of precision up to half a fr...
+         Original commit message from CVS:
+         2007-03-27  Julien MOUTTE  <julien@moutte.net>
+         * ext/mad/gstmad.c: (gst_mad_chain): Generate a perfect
+         stream and try to adapt to incoming timestamps lack of
+         precision up to half a frame. This allows generating
+         a perfect stream even with muxed formats like FLV where
+         the timestamps are stored in milliseconds.
+
+2007-03-22 21:44:45 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/realmedia/rmdemux.c: Remove unused zlib.h include. Fixes #421594.
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c:
+         Remove unused zlib.h include. Fixes #421594.
+
+2007-03-21 12:53:57 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         ext/lame/gstlame.c: Disable the bitrate checking when the user has requested
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_setup):
+         Disable the bitrate checking when the user has requested
+         Free Format mode, as all bitrates less than the maximum
+         are valid then.
+
+2007-03-14 15:21:41 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         po/: Update translations.
+         Original commit message from CVS:
+         * po/hu.po:
+         * po/it.po:
+         * po/sv.po:
+         Update translations.
+
+2007-03-12 17:26:13 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         ext/mad/gstmad.c: When handling seeks, don't convert -1 start or stop values to a bogus byte position - pass them ups...
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (gst_mad_convert_sink), (gst_mad_convert_src):
+         When handling seeks, don't convert -1 start or stop values to a bogus
+         byte position - pass them upstream as -1.
+
+2007-03-12 10:47:01 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         gst/mpegaudioparse/gstmpegaudioparse.*: Implement seeking via average bitrate, and position+duration querying in mp3p...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (mp3_type_frame_length_from_header), (gst_mp3parse_reset),
+         (gst_mp3parse_init), (gst_mp3parse_sink_event),
+         (gst_mp3parse_emit_frame), (gst_mp3parse_chain),
+         (gst_mp3parse_change_state), (mp3parse_time_to_bytepos),
+         (mp3parse_bytepos_to_time), (mp3parse_total_bytes),
+         (mp3parse_total_time), (mp3parse_handle_seek),
+         (mp3parse_src_event), (mp3parse_src_query),
+         (mp3parse_get_query_types), (plugin_init):
+         * gst/mpegaudioparse/gstmpegaudioparse.h:
+         Implement seeking via average bitrate, and position+duration
+         querying in mp3parse. Later, it will support frame-accurate seeking by
+         building a seek table as it parses.
+         Add 'parsed=false' to the sink pad caps, and 'parsed=true' to the src
+         pad caps. Bump the priority to PRIMARY+1 so that it is autoplugged
+         before any extant MP3 decoder plugin. This allows us to remove framing
+         support from the decoders, if we want, and will provide them with
+         accurate seeking automatically once it is finished.
+         Fix the handling of MPEG-1 Layer 1 files.
+         Partially fix timestamping of packets arriving from a demuxer by
+         queueing the incoming timestamp until the next packet starts, rather
+         than applying it immediately to the next pushed buffer.
+
+2007-03-10 15:56:26 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/gstasfdemux.c: Printf format fix.
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_header_ext):
+         Printf format fix.
+
+2007-03-04 17:13:19 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         ext/cdio/gstcdiocddasrc.c: Make sure we always destroy our libcdio handle.
+         Original commit message from CVS:
+         * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_open),
+         (gst_cdio_cdda_src_finalize):
+         Make sure we always destroy our libcdio handle.
+
+2007-03-02 16:08:17 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/cdio/gstcdiocddasrc.c: Small code cleanups.
+         Original commit message from CVS:
+         * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_probe_devices),
+         (gst_cdio_cdda_src_read_sector), (gst_cdio_cdda_src_open),
+         (gst_cdio_cdda_src_finalize):
+         Small code cleanups.
+         Don't use pad_alloc as the base class cannot deal with the error codes.
+
+2007-03-02 13:01:48 +0000  Zaheer Abbas Merali <zaheermerali@gmail.com>
+
+         ext/mpeg2dec/gstmpeg2dec.c: Never post a (fatal) error message on the bus on decoding errors. We should only do this ...
+         Original commit message from CVS:
+         Patch by: Zaheer Abbas Merali  <zaheermerali at gmail com>
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_chain):
+         Never post a (fatal) error message on the bus on decoding errors. We
+         should only do this if we can't recover, but mpeg2dec can always
+         recover. This is needed for DVB streams, for example, where there
+         may be temporary glitches in the stream. Instead of an error
+         message, post a warning message on the bus for every N decoding
+         errors. Fixes #370020.
+
+2007-02-28 19:30:35 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         configure.ac: Convert to new AG_GST style.
+         Original commit message from CVS:
+         * configure.ac:
+         Convert to new AG_GST style.
+
+2007-02-28 18:41:38 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         ext/lame/gstlame.c: Display sensible defaults and limits for the vbr-min/max/mean properties. Fix the 'hard-limit' VB...
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_class_init), (gst_lame_init),
+         (gst_lame_setup):
+         Display sensible defaults and limits for the
+         vbr-min/max/mean properties. Fix the 'hard-limit' VBR min
+         property - it's supposed to be a boolean 0/1 value.
+
+2007-02-28 16:01:08 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         ext/lame/gstlame.c: Initialise the variables so gcc doesn't complain about possibly uninitialised uses, even though t...
+         Original commit message from CVS:
+         * ext/lame/gstlame.c:
+         Initialise the variables so gcc doesn't complain about possibly
+         uninitialised uses, even though they can't actually happen.
+
+2007-02-28 15:52:23 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/dvdlpcmdec/gstdvdlpcmdec.*: Implement all sample rates.
+         Original commit message from CVS:
+         * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcm_reset),
+         (update_timestamps), (parse_header), (gst_dvdlpcmdec_chain_dvd),
+         (gst_dvdlpcmdec_chain_raw), (dvdlpcmdec_sink_event):
+         * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+         Implement all sample rates.
+         Implement sample permutation a little smarter avoiding a memcpy.
+         Fix timestamps, use segments, fix seeking.
+
+2007-02-28 15:49:35 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         Document siddec.
+         Original commit message from CVS:
+         * docs/plugins/Makefile.am:
+         * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+         * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+         * docs/plugins/inspect/plugin-siddec.xml:
+         * ext/sidplay/gstsiddec.cc:
+         * ext/sidplay/gstsiddec.h:
+         Document siddec.
+
+2007-02-21 16:02:33 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         ext/lame/gstlame.c: Fix up bitrate checking macro.  Make it give us a
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_sink_setcaps),
+         (gst_lame_set_property), (gst_lame_setup):
+         Fix up bitrate checking macro.  Make it give us a
+         GST_ELEMENT_WARNING message so the application has a chance of
+         reporting this to the user.  Move the checking to _setup, so we
+         are sure it runs in the READY state, when we hope to have a pipeline
+         and a bus that is not flushing.
+         This fixes e.g. using 96 kbit/sec as a bitrate.
+
+2007-02-15 19:55:55 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/gstasfdemux.*: Parse advanced mutual exclusion object and only add pads for 'hidden' streams (those in a...
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_file),
+         (gst_asf_demux_process_advanced_mutual_exclusion),
+         (gst_asf_demux_process_queued_extended_stream_objects),
+         (gst_asf_demux_process_object), (gst_asf_demux_change_state):
+         * gst/asfdemux/gstasfdemux.h:
+         Parse advanced mutual exclusion object and only add pads for
+         'hidden' streams (those in an extended stream header) that are
+         mutually exclusive with an already existing 'main stream' if
+         the broadcasting flag is not set. If the broadcasting flag is set,
+         assume that data for this stream isn't sent. (This should ideally be
+         solved better by making playbin more robust against this and/or by
+         making mmssrc send some information downstream about which streams
+         will be streamed). Fixes #353116.
+
+2007-02-13 12:00:59 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         gst/synaesthesia/: Move all the mutable engine state into a structure so that multiple element instances can run with...
+         Original commit message from CVS:
+         * gst/synaesthesia/gstsynaesthesia.c:
+         (gst_synaesthesia_class_init), (gst_synaesthesia_init),
+         (gst_synaesthesia_finalize), (gst_synaesthesia_chain):
+         * gst/synaesthesia/synaescope.c: (synaescope_coreGo),
+         (synaescope32), (synaescope_set_data), (synaesthesia_update),
+         (synaesthesia_init), (synaesthesia_new), (synaesthesia_close):
+         * gst/synaesthesia/synaescope.h:
+         Move all the mutable engine state into a structure so that
+         multiple element instances can run without interfering.
+
+2007-02-13 09:15:41 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         Add crossreferences to glib/gobject/gstream docs.
+         Original commit message from CVS:
+         * configure.ac:
+         * docs/plugins/Makefile.am:
+         Add crossreferences to glib/gobject/gstream docs.
+
+2007-02-12 12:46:20 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         gst/synaesthesia/: More source cleanups and add FIXME comments.
+         Original commit message from CVS:
+         * gst/synaesthesia/gstsynaesthesia.c: (gst_synaesthesia_init),
+         (gst_synaesthesia_sink_setcaps), (gst_synaesthesia_src_getcaps),
+         (gst_synaesthesia_src_setcaps), (gst_synaesthesia_chain),
+         (plugin_init):
+         * gst/synaesthesia/synaescope.c: (synaescope_coreGo),
+         (synaescope8):
+         More source cleanups and add FIXME comments.
+
+2007-02-11 13:42:45 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+         gst/realmedia/rmdemux.c: Use gst_guint64_to_gdouble for conversions.
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c:(gst_rmdemux_parse_indx_data):
+         Use gst_guint64_to_gdouble for conversions.
+         * gst/synaesthesia/synaescope.c:
+         Define M_PI and do not include <pthread.h> and
+         <sys/time.h> for G_OS_WIN32
+         * win32/vs6/libgstrealmedia.dsp:
+         * win32/vs6/synaesthesia.dsp:
+         Update projects files.
+         * win32/common/config.h.in:
+         Add config.h.in for autogen of config.h
+
+2007-02-11 10:51:42 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         configure.ac: Add --enable-experimental support. Activate synaesthesia when building with --enable-experimental. Fix ...
+         Original commit message from CVS:
+         * configure.ac:
+         Add --enable-experimental support. Activate synaesthesia when building
+         with --enable-experimental. Fix --enable external configure switch
+         description.
+
+2007-02-09 16:24:45 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/lame/gstlame.*: On receiving EOS, we try to push a last buffer with the remaining samples. Don't do that if we go...
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_sink_event), (gst_lame_chain),
+         (gst_lame_change_state):
+         * ext/lame/gstlame.h:
+         On receiving EOS, we try to push a last buffer with the remaining
+         samples. Don't do that if we got an unclean flow return on the last
+         gst_pad_push(), downstream might not handle this very gracefully
+         (see #403168).
+         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
+         Pass flow returns upstream (helps #403168).
+
+2007-02-09 08:03:09 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         gst/synaesthesia/gstsynaesthesia.c: check result of gst_pad_push() in _chain.
+         Original commit message from CVS:
+         * gst/synaesthesia/gstsynaesthesia.c:
+         (gst_synaesthesia_class_init), (gst_synaesthesia_init),
+         (gst_synaesthesia_sink_setcaps), (gst_synaesthesia_src_getcaps),
+         (gst_synaesthesia_chain), (plugin_init):
+         check result of gst_pad_push() in _chain.
+
+2007-02-09 07:48:50 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         gst/synaesthesia/: Added docs (not yet added to gst-plugins-ugl/docs/plugins as plugin is not built by default). Fixe...
+         Original commit message from CVS:
+         * gst/synaesthesia/Makefile.am:
+         * gst/synaesthesia/gstsynaesthesia.c:
+         (gst_synaesthesia_class_init), (gst_synaesthesia_init),
+         (gst_synaesthesia_sink_setcaps), (gst_synaesthesia_src_getcaps),
+         (gst_synaesthesia_chain), (plugin_init):
+         * gst/synaesthesia/synaescope.c:
+         * gst/synaesthesia/synaescope.h:
+         Added docs (not yet added to gst-plugins-ugl/docs/plugins as plugin is not
+         built by default). Fixed Makefile.am. Fixed license headers (its GPL as it
+         is derived from GPL code). Fixed GST_SYNAESTHESIA_CLASS macro. Added
+         GST_DEBUG_FUNCPTR. Reflowed _setcaps. Updated pad setup in _init. Fix
+         possible leak in _chain. (#356882)
+
+2007-02-08 21:07:27 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/: Refactor and clean up header parsing and chain function a bit; get rid of some cruft; make header pars...
+         Original commit message from CVS:
+         * gst/asfdemux/asfheaders.c:
+         * gst/asfdemux/asfheaders.h:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_init),
+         (gst_asf_demux_sink_event), (gst_asf_demux_handle_seek_event),
+         (gst_asf_demux_identify_guid), (asf_demux_peek_object),
+         (gst_asf_demux_chain_headers), (gst_asf_demux_chain),
+         (gst_asf_demux_setup_pad), (gst_asf_demux_process_stream),
+         (gst_asf_demux_process_ext_content_desc),
+         (gst_asf_demux_get_object_header), (gst_asf_demux_process_header),
+         (gst_asf_demux_process_file), (gst_asf_demux_process_comment),
+         (gst_asf_demux_process_bitrate_props_object),
+         (gst_asf_demux_process_header_ext),
+         (gst_asf_demux_process_language_list),
+         (gst_asf_demux_process_ext_stream_props),
+         (gst_asf_demux_process_queued_extended_stream_objects),
+         (gst_asf_demux_process_object), (gst_asf_demux_change_state):
+         * gst/asfdemux/gstasfdemux.h:
+         Refactor and clean up header parsing and chain function a bit; get
+         rid of some cruft; make header parsing a tad more robust, fixing
+         #403188.
+
+2007-02-01 11:12:25 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/gstasfdemux.c: Post an error if we receive an EOS event while still waiting for the
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_sink_event):
+         Post an error if we receive an EOS event while still waiting for the
+         ASF header object to come through.
+
+2007-01-24 17:36:36 +0000  Xavier B <xavierb@gmail.com>
+
+         gst/asfdemux/gstasfdemux.c: Guard places where we assume that a certain amount of data is available better against le...
+         Original commit message from CVS:
+         Patch by: Xavier B. <xavierb gmail com>
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_get_guid),
+         (gst_asf_demux_add_audio_stream), (gst_asf_demux_add_video_stream),
+         (gst_asf_demux_process_ext_content_desc),
+         (gst_asf_demux_process_data),
+         (gst_asf_demux_process_language_list),
+         (gst_asf_demux_process_ext_stream_props),
+         (gst_asf_demux_process_segment), (gst_asf_demux_handle_data):
+         Guard places where we assume that a certain amount of data is
+         available better against less data being available (should fix
+         infamous assertion crasher bug #336370). Also fixes a small
+         memory leak.
+
+2007-01-11 12:49:23 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/realmedia/: Add demuxer for RealAudio files (#349779).
+         Original commit message from CVS:
+         * gst/realmedia/Makefile.am:
+         * gst/realmedia/rademux.c:
+         * gst/realmedia/rademux.h:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
+         (gst_rmdemux_descramble_dnet_audio), (gst_rmdemux_plugin_init):
+         * gst/realmedia/rmutils.c: (gst_rm_utils_descramble_dnet_buffer):
+         * gst/realmedia/rmutils.h:
+         Add demuxer for RealAudio files (#349779).
+
+2007-01-07 13:37:19 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+         Makefile.am: Add win32/MANIFEST to EXTRA_DIST so win32 files will be include in the next release.
+         Original commit message from CVS:
+         * Makefile.am:
+         Add win32/MANIFEST to EXTRA_DIST so win32 files will
+         be include in the next release.
+         * win32/MANIFEST:
+         Remove win32/common/config.h is which is not autogenerated yet.
+
+2006-12-30 20:01:35 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         ext/lame/gstlame.c: warn when outgoing sample rate is different from incoming
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_sink_setcaps), (gst_lame_chain):
+         warn when outgoing sample rate is different from incoming
+
+2006-12-29 14:51:19 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: All sample-rates < 32khz come from the LSF extensions, which only use 1 granu...
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
+         All sample-rates < 32khz come from the LSF extensions, which only
+         use 1 granule. Fixes parsing of 22.05khz, 24khz and 16khz files.
+         Use gst_util_uint64_scale because we can.
+
+2006-12-22 13:06:24 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         tests/check/elements/amrnbenc.c: and fix compilation of this test
+         Original commit message from CVS:
+         * tests/check/elements/amrnbenc.c: (setup_amrnbenc),
+         (cleanup_amrnbenc):
+         and fix compilation of this test
+
+2006-12-22 12:41:52 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         tests/check/elements/: re-apply as it was -bad and not -ugly that is frozen, doh
+         Original commit message from CVS:
+         * tests/check/elements/amrnbenc.c: (setup_amrnbenc),
+         (cleanup_amrnbenc):
+         * tests/check/elements/mpeg2dec.c: (setup_mpeg2dec),
+         (cleanup_mpeg2dec):
+         re-apply as it was -bad and not -ugly that is frozen, doh
+
+2006-12-21 12:50:00 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         tests/check/elements/: revert my freeze breakage
+         Original commit message from CVS:
+         * tests/check/elements/amrnbenc.c: (setup_amrnbenc),
+         (cleanup_amrnbenc):
+         * tests/check/elements/mpeg2dec.c: (setup_mpeg2dec),
+         (cleanup_mpeg2dec):
+         revert my freeze breakage
+
+2006-12-21 08:16:41 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         gst/asfdemux/gstasfdemux.c: add a comment about a future change
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c:
+         (gst_asf_demux_get_gst_tag_from_tag_name),
+         (gst_asf_demux_process_ext_content_desc):
+         add a comment about a future change
+         * tests/check/elements/amrnbenc.c: (setup_amrnbenc),
+         (cleanup_amrnbenc):
+         * tests/check/elements/mpeg2dec.c: (setup_mpeg2dec),
+         (cleanup_mpeg2dec):
+         consistent pad (de)activation
+
+2006-12-15 18:26:41 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/gstasfdemux.c: Update query_types function too.
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_get_src_query_types):
+         Update query_types function too.
+
+2006-12-15 18:25:17 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/realmedia/rmdemux.c: Implement SEEKING query, make query function thread-safe.
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_src_query),
+         (gst_rmdemux_src_query_types):
+         Implement SEEKING query, make query function thread-safe.
+
+2006-12-15 17:59:47 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/realmedia/rmdemux.c: Use alignment-safe macros here too (subbuffers ...); guard against hypothetical memory acces...
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_descramble_dnet_audio):
+         Use alignment-safe macros here too (subbuffers ...); guard against
+         hypothetical memory access beyond our given buffer in the case
+         where the buffer size is not a multiple of 2.
+
+2006-12-15 17:54:48 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/gstasfdemux.*: Don't crash in the seek event handling code when playtime is 0, as may be the case with l...
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_seek_event),
+         (gst_asf_demux_process_data), (gst_asf_demux_process_file),
+         (gst_asf_demux_handle_src_query), (gst_asf_demux_change_state):
+         * gst/asfdemux/gstasfdemux.h:
+         Don't crash in the seek event handling code when playtime is 0,
+         as may be the case with live streams (#386218). Implement SEEKING
+         query so applications can query seekability without second-guessing
+         based on whether we have a duration or not.
+
+2006-12-15 11:12:21 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         add doap file
+         Original commit message from CVS:
+         * Makefile.am:
+         * gst-plugins-ugly.doap:
+         * gst-plugins-ugly.spec.in:
+         add doap file
+
+2006-12-14 12:05:49 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/mpegstream/gstmpegparse.c: Use our alignment-safe macros here too, since we can't assume that
+         Original commit message from CVS:
+         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead):
+         Use our alignment-safe macros here too, since we can't assume that
+         GST_BUFFER_DATA is aligned (these are subbuffers we're dealing with
+         here).
+
+2006-12-14 11:49:39 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/realmedia/rmdemux.c: Also, don't read the index for a stream a second time when operating in pull-mode and reachi...
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_indx_data):
+         Also, don't read the index for a stream a second time when
+         operating in pull-mode and reaching the end of the file.
+
+2006-12-14 11:25:00 +0000  Roland Kay <roland.kay@ox.compsoc.net>
+
+         gst/realmedia/rmdemux.c: Don't leak stream index (#385292).
+         Original commit message from CVS:
+         Patch by: Roland Kay  <roland.kay at ox compsoc net>
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_reset):
+         Don't leak stream index (#385292).
+
+2006-12-14 10:15:24 +0000  Roland Kay <roland.kay@ox.compsoc.net>
+
+         ext/lame/gstlame.*: Fix leak (by calling lame_init_params() before lame_close()); handle
+         Original commit message from CVS:
+         Based on patch by: Roland Kay  <roland.kay at ox compsoc net>
+         * ext/lame/gstlame.c: (gst_lame_init), (gst_lame_chain),
+         (gst_lame_setup):
+         * ext/lame/gstlame.h:
+         Fix leak (by calling lame_init_params() before lame_close()); handle
+         NULL return from lame_init() more gracefully. Fixes #385311.
+
+2006-12-14 09:57:12 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         configure.ac: Back to CVS
+         Original commit message from CVS:
+         * configure.ac:
+         Back to CVS
+
+=== release 0.10.5 ===
+
+2006-12-13 21:04:12 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+         Release 0.10.5
+         Original commit message from CVS:
+         Release 0.10.5
+
+2006-12-12 21:09:16 +0000  David Schleef <ds@schleef.org>
+
+         gst/mpegstream/gstmpegparse.c: Use the GST_READ macro I meant to in the previous checkin.  see #385192.  You can have...
+         Original commit message from CVS:
+         * gst/mpegstream/gstmpegparse.c: Use the GST_READ macro I meant
+         to in the previous checkin.  see #385192.  You can have your
+         cheese back now.
+
+2006-12-12 20:56:58 +0000  David Schleef <ds@schleef.org>
+
+         gst/mpegstream/gstmpegparse.c: Fix unaligned load that loads from the dereferenced integer, not the pointer itself.  ...
+         Original commit message from CVS:
+         * gst/mpegstream/gstmpegparse.c: Fix unaligned load that loads
+         from the dereferenced integer, not the pointer itself.  Fixes
+         #385192.
+         I'm takin ur cheese!
+
+2006-12-12 10:29:32 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+       * ChangeLog:
+         ChangeLog surgery: fix bug number
+         Original commit message from CVS:
+         ChangeLog surgery: fix bug number
+
+2006-12-12 10:24:40 +0000  Roland Kay <roland.kay@ox.compsoc.net>
+
+         gst/realmedia/rmdemux.c: For version 4 streams, read the extra codec data size from the header instead of assuming it...
+         Original commit message from CVS:
+         Based on patch by: Roland Kay  <roland.kay at ox compsoc net>
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_mdpr):
+         For version 4 streams, read the extra codec data size from the
+         header instead of assuming it is always 16 (also read it from the
+         right position) (#384989). For version 4 and 5 streams, check that
+         the specified extra codec data size doesn't make us read beyond the
+         chunk boundary (#384989).
+
+2006-12-10 21:27:03 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+       * po/af.po:
+       * po/az.po:
+       * po/cs.po:
+       * po/en_GB.po:
+       * po/hu.po:
+       * po/it.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/uk.po:
+       * po/vi.po:
+         Update .po files
+         Original commit message from CVS:
+         Update .po files
+
+2006-11-21 12:33:25 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/mpeg2dec/gstmpeg2dec.c: Cosmetic changes: fix misleading debug statement, update comment, add cast.
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_alloc_sized_buf):
+         Cosmetic changes: fix misleading debug statement, update
+         comment, add cast.
+
+2006-11-21 12:15:58 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         ext/mpeg2dec/gstmpeg2dec.*: Align buffers to a 16 byte boundary so the altivec optimisations don't crash. Fixes #327350.
+         Original commit message from CVS:
+         Patch by: Sebastian Dröge  <slomo@circular-chaos.org>
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
+         (gst_mpeg2dec_reset), (gst_mpeg2dec_alloc_sized_buf),
+         (gst_mpeg2dec_alloc_buffer), (init_dummybuf), (handle_slice):
+         * ext/mpeg2dec/gstmpeg2dec.h:
+         Align buffers to a 16 byte boundary so the altivec optimisations
+         don't crash. Fixes #327350.
+
+2006-11-20 15:52:42 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/gstasfdemux.c: The availability of extra codec data isn't something that warrants debug messages at WARN...
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_audio_stream):
+         The availability of extra codec data isn't something that
+         warrants debug messages at WARNING level (see #376958).
+
+2006-11-19 13:08:30 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/mpegstream/: Fix flow value combination; this fixes playbin/totem locking up if a VobSub file is specified as sub...
+         Original commit message from CVS:
+         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_base_init),
+         (gst_dvd_demux_class_init), (gst_dvd_demux_combine_flows),
+         (gst_dvd_demux_send_subbuffer):
+         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_class_init),
+         (gst_mpeg_demux_init_stream), (gst_mpeg_demux_parse_packet),
+         (gst_mpeg_demux_parse_pes), (gst_mpeg_demux_combine_flows),
+         (gst_mpeg_demux_send_subbuffer):
+         * gst/mpegstream/gstmpegdemux.h:
+         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_process_event),
+         (gst_mpeg_parse_chain):
+         Fix flow value combination; this fixes playbin/totem locking up if
+         a VobSub file is specified as subtitle file (#334322). Flow value
+         combination should only happen once we are fairly sure we've got all
+         pads that are available for now. Since there isn't a well-specified
+         time when this is the case in MPEG, we'll just assume this is the
+         case once there has been a certain number of packets for each
+         stream we've found so far.
+
+2006-11-15 13:57:21 +0000  Jan Arne Petersen <jpetersen@jpetersen.org>
+
+         ext/mpeg2dec/gstmpeg2dec.c: Simplify the framerate code and support more framerates. Fixes #361584.
+         Original commit message from CVS:
+         Patch by: Jan Arne Petersen <jpetersen at jpetersen dot org>
+         * ext/mpeg2dec/gstmpeg2dec.c: (handle_sequence), (handle_slice):
+         Simplify the framerate code and support more framerates. Fixes #361584.
+
+2006-11-15 11:41:39 +0000  Sebastian Dröge <slomo@circular-chaos.org>
+
+         ext/mpeg2dec/gstmpeg2dec.c: Fix minor memleak when creating pads from static pad templates (#369627).
+         Original commit message from CVS:
+         Patch by: Sebastian Dröge  <slomo@circular-chaos.org>
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init):
+         Fix minor memleak when creating pads from static pad templates (#369627).
+         * tests/check/Makefile.am:
+         * tests/check/elements/.cvsignore:
+         * tests/check/elements/mpeg2dec.c: (setup_mpeg2dec),
+         (cleanup_mpeg2dec), (GST_START_TEST), (mpeg2dec_suite), (main):
+         Add unit tests for mpeg2dec (#369627).
+
+2006-11-14 10:31:11 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+       * ChangeLog:
+         give credit
+         Original commit message from CVS:
+         give credit
+
+2006-11-14 10:29:37 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/lame/gstlame.*: Make lame timestamp flushed eos buffer by some additional timestamp accounting. Fixes #374760.
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_sink_event), (gst_lame_chain),
+         (gst_lame_change_state):
+         * ext/lame/gstlame.h:
+         Make lame timestamp flushed eos buffer by some additional timestamp
+         accounting. Fixes #374760.
+
+2006-11-13 17:01:15 +0000  Michael Smith <msmith@xiph.org>
+
+         gst/mpegaudioparse/gstmpegaudioparse.*: Make timestamp handling in mp3parse saner; now works for at least simple cases.
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (mp3_type_frame_length_from_header), (gst_mp3parse_reset),
+         (gst_mp3parse_init), (gst_mp3parse_dispose),
+         (gst_mp3parse_sink_event), (gst_mp3parse_chain), (head_check),
+         (gst_mp3parse_change_state):
+         * gst/mpegaudioparse/gstmpegaudioparse.h:
+         Make timestamp handling in mp3parse saner; now works for at least
+         simple cases.
+
+2006-11-13 16:23:22 +0000  Michael Smith <msmith@xiph.org>
+
+         gst/mpegaudioparse/: Bring mp3parse into the 21st century.
+         Original commit message from CVS:
+         * gst/mpegaudioparse/Makefile.am:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (mp3_type_frame_length_from_header), (gst_mp3parse_class_init),
+         (gst_mp3parse_reset), (gst_mp3parse_init), (gst_mp3parse_dispose),
+         (gst_mp3parse_sink_event), (gst_mp3parse_chain), (head_check),
+         (gst_mp3parse_change_state), (plugin_init):
+         * gst/mpegaudioparse/gstmpegaudioparse.h:
+         Bring mp3parse into the 21st century.
+         Use its own debug category, use gstadapter, format nicely to 80
+         columns, and fix incorrect handling of 32 kHz and less files.
+
+2006-11-03 09:52:12 +0000  Sebastian Droege <slomo@ubuntu.com>
+
+         ext/mpeg2dec/gstmpeg2dec.*: libmpeg2 requires its output buffers to start at a 16byte aligned address or the altivec ...
+         Original commit message from CVS:
+         Patch by: Sebastian Droege <slomo at ubuntu dot com>
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_finalize),
+         (gst_mpeg2dec_alloc_buffer), (init_dummybuf), (handle_slice):
+         * ext/mpeg2dec/gstmpeg2dec.h:
+         libmpeg2 requires its output buffers to start at a 16byte aligned
+         address or the altivec optimizations will explode.
+
+2006-11-02 14:43:11 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/cdio/: Move CD-TEXT utility function into common file so it can also be used by a future cdioparanoiasrc.
+         Original commit message from CVS:
+         * ext/cdio/gstcdio.c: (gst_cdio_get_cdtext):
+         * ext/cdio/gstcdio.h:
+         * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_open):
+         Move CD-TEXT utility function into common file so it can also be
+         used by a future cdioparanoiasrc.
+
+2006-10-19 10:17:14 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/dvdread/dvdreadsrc.c: Use dsi_pack.dsi_gi.vobu_ea correctly, add some more debugging information (fixes #340433).
+         Original commit message from CVS:
+         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_read):
+         Use dsi_pack.dsi_gi.vobu_ea correctly, add some more debugging
+         information (fixes #340433).
+
+2006-10-16 18:07:23 +0000  Josep Torra Valles <josep@fluendo.com>
+
+         gst/: Misc. fixes for problems discovered by Forte (different return types in function declaration and definition, po...
+         Original commit message from CVS:
+         Patch by: Josep Torra Valles  <josep at fluendo com>
+         * gst/iec958/ac3_padder.c: (ac3p_init):
+         * gst/mpegstream/gstmpegparse.c:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_parse__rmf),
+         (gst_rmdemux_parse_prop), (gst_rmdemux_parse_mdpr),
+         (gst_rmdemux_parse_indx), (gst_rmdemux_parse_indx_data),
+         (gst_rmdemux_parse_data), (gst_rmdemux_parse_cont),
+         (gst_rmdemux_parse_packet):
+         Misc. fixes for problems discovered by Forte (different return types
+         in function declaration and definition, pointer arithmetics with
+         void pointers). Fixes #362639.
+
+2006-10-13 19:11:26 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/dvdread/dvdreadsrc.c: Don't announce audio or subtitle streams that aren't really present, it makes dvddemux crea...
+         Original commit message from CVS:
+         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_goto_title):
+         Don't announce audio or subtitle streams that aren't really present,
+         it makes dvddemux create pads that will never carry any data, which
+         is not good.
+
+2006-10-13 14:45:11 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/lame/gstlame.c: Round up not allowed bitrates to the next higher allowed one (Closes: #361140).
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_set_property):
+         Round up not allowed bitrates to the next higher allowed one
+         (Closes: #361140).
+
+2006-10-13 14:19:24 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         Add docs for lame and lame to docs. Specify allowed bitrates in the properties description (#361140). Canonicalise ob...
+         Original commit message from CVS:
+         * docs/plugins/Makefile.am:
+         * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+         * docs/plugins/gst-plugins-ugly-plugins-sections.txt:
+         * ext/lame/gstlame.c: (gst_lame_class_init):
+         * ext/lame/gstlame.h:
+         Add docs for lame and lame to docs. Specify allowed bitrates
+         in the properties description (#361140). Canonicalise object
+         property names (ie. use hyphen instead of underscore).
+         * docs/plugins/inspect/plugin-a52dec.xml:
+         * docs/plugins/inspect/plugin-amrnb.xml:
+         * docs/plugins/inspect/plugin-asf.xml:
+         * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+         * docs/plugins/inspect/plugin-dvdread.xml:
+         * docs/plugins/inspect/plugin-dvdsub.xml:
+         * docs/plugins/inspect/plugin-iec958.xml:
+         * docs/plugins/inspect/plugin-lame.xml:
+         * docs/plugins/inspect/plugin-mad.xml:
+         * docs/plugins/inspect/plugin-mpeg2dec.xml:
+         * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+         * docs/plugins/inspect/plugin-mpegstream.xml:
+         * docs/plugins/inspect/plugin-siddec.xml:
+         Update version to CVS.
+
+2006-10-13 10:00:27 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         Add i18n magic to lame plugin. Throw decent error message when we fail to setup the encoder (#361140, 361151); misc. ...
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_sink_setcaps),
+         (gst_lame_set_property), (gst_lame_get_property), (gst_lame_chain),
+         (plugin_init):
+         * po/POTFILES.in:
+         Add i18n magic to lame plugin. Throw decent error message when we
+         fail to setup the encoder (#361140, 361151); misc. minor clean-ups.
+
+2006-10-10 17:02:05 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/rdtdepay.c: Change caps to x-rdt, because it's not x-rtp.
+         Original commit message from CVS:
+         * gst/realmedia/rdtdepay.c: (gst_rdt_depay_base_init),
+         (gst_rdt_depay_init), (gst_rdt_depay_setcaps),
+         (gst_rdt_depay_chain), (gst_rdt_depay_change_state):
+         Change caps to x-rdt, because it's not x-rtp.
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
+         (gst_rmdemux_parse_mdpr), (gst_rmdemux_parse_packet),
+         (gst_rmdemux_plugin_init):
+         Activate pad before adding to the element.
+         Return the combined stream return values after pad_alloc.
+
+2006-10-10 16:58:32 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/mpeg2dec/gstmpeg2dec.*: Add some debugging to timestamp handling.
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c: (handle_slice):
+         * ext/mpeg2dec/gstmpeg2dec.h:
+         Add some debugging to timestamp handling.
+         Make sure we don't convert invalid timestamps.
+
+2006-10-09 12:09:14 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/: Active pads before adding them to the running element. Don't assert on non-BYTE format newsegment events in asf...
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_sink_event),
+         (gst_asf_demux_setup_pad), (gst_asf_demux_process_segment):
+         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_get_audio_stream),
+         (gst_dvd_demux_get_subpicture_stream):
+         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_get_video_stream),
+         (gst_mpeg_demux_get_audio_stream),
+         (gst_mpeg_demux_get_private_stream):
+         Active pads before adding them to the running element. Don't assert
+         on non-BYTE format newsegment events in asfdemux.
+
+2006-10-05 17:07:52 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         Printf format fixes.
+         Original commit message from CVS:
+         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_goto_title),
+         (gst_dvd_read_src_handle_seek_event):
+         * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
+         * ext/mad/gstmad.c: (gst_mad_src_query), (gst_mad_chain):
+         * ext/sidplay/gstsiddec.cc:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_parse_data):
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_loop),
+         (gst_rmdemux_parse_packet):
+         Printf format fixes.
+
+2006-10-03 10:55:42 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/: Added RDT depayloader.
+         Original commit message from CVS:
+         * gst/realmedia/Makefile.am:
+         * gst/realmedia/rdtdepay.c: (gst_rdt_depay_base_init),
+         (gst_rdt_depay_class_init), (gst_rdt_depay_init),
+         (gst_rdt_depay_setcaps), (gst_rdt_depay_chain),
+         (gst_rdt_depay_set_property), (gst_rdt_depay_get_property),
+         (gst_rdt_depay_change_state), (gst_rdt_depay_plugin_init):
+         * gst/realmedia/rdtdepay.h:
+         Added RDT depayloader.
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_mdpr),
+         (gst_rmdemux_plugin_init), (plugin_init):
+         Remove unused function.
+         Added some more mime-types.
+
+2006-09-28 21:44:49 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         gst/dvdlpcmdec/gstdvdlpcmdec.c: If an incoming timestamp is within one sample of our current timestamp, then keep it....
+         Original commit message from CVS:
+         * gst/dvdlpcmdec/gstdvdlpcmdec.c: (update_timestamps):
+         If an incoming timestamp is within one sample of our current
+         timestamp, then keep it. This prevents imprecision in the
+         PTS (which only has 90khz granularity) from affecting our stream.
+
+2006-09-28 09:16:38 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/mpegstream/gstmpegparse.c: Reflow code so that compiler doesn't complain about possible use of uninitialised vari...
+         Original commit message from CVS:
+         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_handle_src_query):
+         Reflow code so that compiler doesn't complain about possible use
+         of uninitialised variable any longer; but just in case, initialise
+         it anyway; also take object ref in query function and do peer pad
+         stuff in a more thread-safe way.
+
+2006-09-27 09:54:01 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/dvdread/dvdreadsrc.c: Init a variable to make compilers happy.
+         Original commit message from CVS:
+         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_do_convert_query):
+         Init a variable to make compilers happy.
+
+2006-09-21 13:34:59 +0000  Martin Zlomek <martin.zlomek@itonis.tv>
+
+         gst/mpegstream/: Send newsegment updates for sparse streams (#350778).
+         Original commit message from CVS:
+         Patch by: Martin Zlomek <martin dot zlomek at itonis dot tv>
+         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_reset),
+         (gst_dvd_demux_sync_stream_to_time):
+         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer),
+         (gst_mpeg_demux_synchronise_pads),
+         (gst_mpeg_demux_sync_stream_to_time):
+         Send newsegment updates for sparse streams (#350778).
+
+2006-09-20 16:18:24 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         ext/dvdread/dvdreadsrc.c: fix compile warning
+         Original commit message from CVS:
+         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_do_convert_query):
+         fix compile warning
+
+2006-09-20 16:16:18 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * configure.ac:
+         bump the nano bitches
+         Original commit message from CVS:
+         bump the nano bitches
+
+2006-09-20 11:55:00 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         configure.ac: As another attempt, synaesthesia can be enabled by passing
+         Original commit message from CVS:
+         * configure.ac:
+         As another attempt, synaesthesia can be enabled by passing
+         --with-plugins="synaesthesia" to configure
+
+2006-09-20 11:12:22 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         configure.ac: Don't build synaesthesia by default, until someone confirms that it is okay (filed as #356882)
+         Original commit message from CVS:
+         * configure.ac:
+         Don't build synaesthesia by default, until someone confirms that it
+         is okay (filed as #356882)
+
+2006-09-20 11:11:26 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         configure.ac: Don't build synaesthesia by default, until someone confirms that it is okay (filed as #356882)
+         Original commit message from CVS:
+         * configure.ac:
+         Don't build synaesthesia by default, until someone confirms that it
+         is okay (filed as #356882)
+
+2006-09-18 12:29:09 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         Port synaesthesia.
+         Original commit message from CVS:
+         * configure.ac:
+         * gst/synaesthesia/Makefile.am:
+         * gst/synaesthesia/gstsynaesthesia.c: (gst_synaesthesia_init),
+         (gst_synaesthesia_sink_setcaps), (gst_synaesthesia_src_getcaps),
+         (gst_synaesthesia_src_setcaps), (gst_synaesthesia_chain),
+         (gst_synaesthesia_change_state), (plugin_init):
+         Port synaesthesia.
+
+2006-09-16 21:58:48 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         More G_OBJECT macro fixing.
+         Original commit message from CVS:
+         * ext/mad/gstid3tag.c:
+         * gst/mpegstream/gstrfc2250enc.h:
+         * gst/synaesthesia/gstsynaesthesia.c:
+         More G_OBJECT macro fixing.
+
+2006-09-15 16:14:15 +0000  Yves Lefebvre <ivanohe@abacom.com>
+
+         ext/mpeg2dec/gstmpeg2dec.c: Fix initialisation dummy buffer, the offsets are relative to the start of the buffers. Fi...
+         Original commit message from CVS:
+         Patch by: Yves Lefebvre <ivanohe at abacom dot com>
+         * ext/mpeg2dec/gstmpeg2dec.c: (init_dummybuf):
+         Fix initialisation dummy buffer, the offsets are relative to the start
+         of the buffers. Fixes #356004.
+
+2006-09-12 10:14:29 +0000  Christian Schaller <uraeus@gnome.org>
+
+       * gst-plugins-ugly.spec.in:
+         update spec file
+         Original commit message from CVS:
+         update spec file
+
+2006-09-09 15:22:58 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/dvdread/dvdreadsrc.c: Add convert query (needed for later when we just operate in time format and let the base so...
+         Original commit message from CVS:
+         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_read):
+         Add convert query (needed for later when we just operate in time
+         format and let the base source class handle all the seeking stuff).
+
+2006-09-07 16:05:31 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         gst/asfdemux/gstasfdemux.c: Erm, lets properly fix it. The only non-text tag that we support is the track-number and ...
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c:
+         (gst_asf_demux_get_gst_tag_from_tag_name),
+         (gst_asf_demux_process_ext_content_desc):
+         Erm, lets properly fix it. The only non-text tag that we support is
+         the track-number and that is an UINT. asfdemux was returning a GValue
+         initialized as INT. Further the Track and not the TrackNumber tag
+         (the latter is a string too).
+
+2006-09-07 14:08:42 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         gst/asfdemux/gstasfdemux.c: Skip tags that are unknown (was producing an uninialized GValue).
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c:
+         (gst_asf_demux_get_gst_tag_from_tag_name),
+         (gst_asf_demux_process_ext_content_desc):
+         Skip tags that are unknown (was producing an uninialized GValue).
+
+2006-09-01 16:21:43 +0000  from Michal Benes <michal.benes@itonis.tv>
+
+         ext/a52dec/gsta52dec.*: Add two things to a52dec: configure the exact output format for ac3 decoding through properti...
+         Original commit message from CVS:
+         * ext/a52dec/gsta52dec.c: (gst_a52dec_mode_get_type),
+         (gst_a52dec_class_init), (gst_a52dec_init), (gst_a52dec_channels),
+         (gst_a52dec_handle_frame), (gst_a52dec_change_state),
+         (gst_a52dec_set_property), (gst_a52dec_get_property):
+         * ext/a52dec/gsta52dec.h:
+         Patch from from Michal Benes <michal.benes@itonis.tv>:
+         Add two things to a52dec: configure the exact output format for ac3
+         decoding through properties, if desired.
+         By default, configure an output format preferred by downstream. Now
+         that audioconvert lists caps by preference, this means that a52dec
+         can do downmixing (iff required) rather than audioconvert, so it can
+         use the ac3 downmix levels from the bitstream.
+
+2006-08-31 13:04:31 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         Add missing GST_LIBS to the link flags
+         Original commit message from CVS:
+         * ext/lame/Makefile.am:
+         * ext/mpeg2dec/Makefile.am:
+         * gst/dvdlpcmdec/Makefile.am:
+         * gst/dvdsub/Makefile.am:
+         * gst/mpegaudioparse/Makefile.am:
+         Add missing GST_LIBS to the link flags
+
+2006-08-29 13:28:41 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         configure.ac: Up requirements to core 0.10.6 for gst_event_new_new_segment_full().
+         Original commit message from CVS:
+         * configure.ac:
+         Up requirements to core 0.10.6 for gst_event_new_new_segment_full().
+
+2006-08-27 20:46:54 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         gst/mpegstream/gstmpegpacketize.c: fix build for debug disabled
+         Original commit message from CVS:
+         * gst/mpegstream/gstmpegpacketize.c: (gst_mpeg_packetize_new):
+         fix build for debug disabled
+
+2006-08-22 15:52:16 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/gstasfdemux.c: Use static pad templates with ANY caps for the source pads for simplicity and to avoid wa...
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init),
+         (gst_asf_demux_add_audio_stream), (gst_asf_demux_add_video_stream):
+         Use static pad templates with ANY caps for the source pads for
+         simplicity and to avoid warnings when creating pads for unhandled
+         codec IDs (#351795).
+
+2006-08-16 10:34:57 +0000  Michal Benes <michal.benes@itonis.tv>
+
+         ext/mad/gstmad.c: Fix timestamping in mad by only activating a new timestamp when the previous frame has been decoded...
+         Original commit message from CVS:
+         Patch by: Michal Benes <michal dot benes at itonis dot tv>
+         * ext/mad/gstmad.c: (gst_mad_chain):
+         Fix timestamping in mad by only activating a new timestamp when the
+         previous frame has been decoded. Fixes #350723.
+         Also clean up some of the non fatal warnings when the input buffer is
+         too small to decode a header.
+
+=== release 0.10.4 ===
+
+2006-08-14 11:15:09 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-rmdemux.xml:
+       * docs/plugins/inspect/plugin-siddec.xml:
+         releasing 0.10.4
+         Original commit message from CVS:
+         releasing 0.10.4
+
+2006-08-14 11:06:29 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * po/af.po:
+       * po/az.po:
+       * po/cs.po:
+       * po/en_GB.po:
+       * po/hu.po:
+       * po/it.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/uk.po:
+       * po/vi.po:
+         Update .po files
+         Original commit message from CVS:
+         Update .po files
+
+2006-08-14 10:19:41 +0000  Wim Taymans <wim@fluendo.com>
+
+         ext/a52dec/gsta52dec.c: Instead of forwarding the event in the wrong format, unref it and set a boolean that we still...
+         Original commit message from CVS:
+         Patch by: Wim Taymans <wim at fluendo dot com>
+         * ext/a52dec/gsta52dec.c: (gst_a52dec_sink_event):
+         Instead of forwarding the event in the wrong format, unref it and set
+         a boolean that we still need to send it in the streaming thread.
+         Fixes #350554
+
+2006-08-14 09:50:26 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         ext/dvdread/dvdreadsrc.c: Put debug category initialization before use of GST_DEBUG, in order to remove a fatal warni...
+         Original commit message from CVS:
+         Patch by: Edward Hervey (edward at fluendo dot com)
+         * ext/dvdread/dvdreadsrc.c: (plugin_init):
+         Put debug category initialization before use of GST_DEBUG, in order
+         to remove a fatal warning.  Fixes #350895
+
+2006-08-08 13:23:27 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/dvdsub/gstdvdsubdec.c: Set rank to NONE for the time being until we make playbin handle subtitle pictures again (...
+         Original commit message from CVS:
+         * gst/dvdsub/gstdvdsubdec.c: (plugin_init):
+         Set rank to NONE for the time being until we make playbin handle
+         subtitle pictures again (dvdsubdec seems to be a bit shaky at
+         times when seeking, so it's probably better if it doesn't get
+         autoplugged for the time being).
+
+2006-08-07 19:01:40 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/realmedia/rmdemux.c: Handle audio streams with stream_version 3 properly; warn about unknown stream versions; han...
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
+         (gst_rmdemux_parse_mdpr):
+         Handle audio streams with stream_version 3 properly; warn about
+         unknown stream versions; handle unknown fourccs a tad more
+         gracefully (setting bogus caps). Also, use GST_FOURCC_ARGS
+         with GST_FOURCC_FORMAT.
+
+2006-08-07 16:25:45 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/dvdread/dvdreadsrc.c: Error out properly if this is an interactive DVD (fixes #345694).
+         Original commit message from CVS:
+         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_goto_title):
+         Error out properly if this is an interactive DVD (fixes #345694).
+
+2006-08-07 16:18:33 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         ext/a52dec/gsta52dec.c: When the first_access is 1 or 0, we should copy the timestamp from the incoming buffer if the...
+         Original commit message from CVS:
+         * ext/a52dec/gsta52dec.c: (gst_a52dec_chain):
+         When the first_access is 1 or 0, we should copy the timestamp from
+         the incoming buffer if there is one.
+
+2006-08-07 14:01:33 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/a52dec/gsta52dec.c: Use GST_ELEMENT_ERROR for error reporting; post errors in some more places; remove superfluou...
+         Original commit message from CVS:
+         * ext/a52dec/gsta52dec.c: (gst_a52dec_channels), (gst_a52dec_push),
+         (gst_a52dec_reneg), (gst_a52dec_handle_frame), (gst_a52dec_chain):
+         Use GST_ELEMENT_ERROR for error reporting; post errors in some
+         more places; remove superfluous newlines from debug statements.
+
+2006-08-07 09:17:01 +0000  Frédéric Riss <frederic.riss@gmail.com>
+
+         gst/dvdsub/gstdvdsubdec.c: which happens when you use macros that got changed during the last unstable cycle because ...
+         Original commit message from CVS:
+         Patch by: Frédéric Riss  <frederic.riss at gmail com>
+         * gst/dvdsub/gstdvdsubdec.c: (gst_send_subtitle_frame):
+         Don't set negative durations on outgoing buffers (#350044),
+         which happens when you use macros that got changed during
+         the last unstable cycle because they were thought not to
+         be used anywhere.
+
+2006-08-06 19:47:40 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/dvdread/dvdreadsrc.*: Add basic support for time-based seeking; set timestamps on outgoing buffers if we have the...
+         Original commit message from CVS:
+         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_stop),
+         (gst_dvd_read_src_goto_chapter),
+         (gst_dvd_read_src_get_chapter_starts),
+         (gst_dvd_read_src_goto_title), (gst_dvd_read_src_get_next_cell),
+         (gst_dvd_read_src_get_time_for_sector),
+         (gst_dvd_read_src_get_sector_from_time), (gst_dvd_read_src_read),
+         (gst_dvd_read_src_handle_seek_event), (gst_dvd_read_src_do_seek),
+         (gst_dvd_read_src_goto_sector):
+         * ext/dvdread/dvdreadsrc.h:
+         Add basic support for time-based seeking; set timestamps on
+         outgoing buffers if we have them; create table with
+         chapter to time mapping when opening a title; rename
+         gst_dvd_read_src_get_next_cell_for() to _get_next_cell() and
+         make it take an explicit pgc argument; fix up some debugging
+         messages so that title/chapter numbers are printed as starting
+         from 1 for easier readability.
+
+2006-08-04 13:05:01 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/realmedia/: Factor out some code into rmutils.[ch]; when reading strings, don't read beyond the available data; r...
+         Original commit message from CVS:
+         * gst/realmedia/Makefile.am:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_mdpr),
+         (gst_rmdemux_parse_cont):
+         * gst/realmedia/rmutils.c: (gst_rm_utils_read_string8),
+         (gst_rm_utils_read_string16), (gst_rm_utils_read_tags):
+         * gst/realmedia/rmutils.h:
+         Factor out some code into rmutils.[ch]; when reading
+         strings, don't read beyond the available data; read
+         metadata strings correctly (string length is 16 bits
+         here, not just 8).
+
+2006-07-31 09:53:05 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         Fix dist by including gst-libs/
+         Original commit message from CVS:
+         * Makefile.am:
+         * configure.ac:
+         * gst/asfdemux/gstasfdemux.c:
+         Fix dist by including gst-libs/
+
+2006-07-29 11:20:30 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         Make custom error messages translatable.
+         Original commit message from CVS:
+         * ext/dvdread/dvdreadsrc.c: (plugin_init):
+         * po/POTFILES.in:
+         Make custom error messages translatable.
+         * gst/asfdemux/gstasf.c: (plugin_init):
+         Remove setlocale() call, doesn't seem to be needed or recommended for
+         plugins, at least not according to gstreamer/docs/random/i18n.
+
+2006-07-28 15:15:15 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/: Error out when the stream is encrypted (rather than feeding garbage to the decoders). Fixes #349025.
+         Original commit message from CVS:
+         * gst/asfdemux/Makefile.am:
+         * gst/asfdemux/asfheaders.c:
+         * gst/asfdemux/asfheaders.h:
+         * gst/asfdemux/gstasf.c: (plugin_init):
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_object):
+         Error out when the stream is encrypted (rather than feeding
+         garbage to the decoders). Fixes #349025.
+
+2006-07-28 15:11:42 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         Add/enable autofoo magic for translations.
+         Original commit message from CVS:
+         * Makefile.am:
+         * autogen.sh:
+         * configure.ac:
+         * po/POTFILES.in:
+         Add/enable autofoo magic for translations.
+
+2006-07-28 13:28:19 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/realmedia/rmdemux.c: Don't leak streams, strings or caps. Get rid of unnecessary getcaps() function.
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_reset),
+         (gst_rmdemux_change_state), (gst_rmdemux_add_stream),
+         (gst_rmdemux_parse_cont), (gst_rmdemux_descramble_cook_audio),
+         (gst_rmdemux_handle_scrambled_packet), (gst_rmdemux_parse_packet):
+         Don't leak streams, strings or caps. Get rid of unnecessary
+         getcaps() function.
+
+2006-07-27 20:34:25 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/realmedia/rmdemux.c: Descramble cook audio streams before sending them to the decoder. Fixes #347292.
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_class_init),
+         (gst_rmdemux_init), (gst_rmdemux_chain), (gst_rmdemux_add_stream),
+         (gst_rmdemux_parse_mdpr), (gst_rmdemux_parse_data),
+         (gst_rmdemux_stream_clear_cached_subpackets),
+         (gst_rmdemux_descramble_cook_audio),
+         (gst_rmdemux_descramble_dnet_audio),
+         (gst_rmdemux_handle_scrambled_packet), (gst_rmdemux_parse_packet):
+         Descramble cook audio streams before sending them to the
+         decoder. Fixes #347292.
+         Also miscellaneous clean-ups and log-level changes.
+
+2006-07-26 17:09:04 +0000  Zaheer Abbas Merali <zaheerabbas@merali.org>
+
+         ext/lame/gstlame.c: Fix lame putting lots of 0's at start of mp3.  Fixes bug #348786.
+         Original commit message from CVS:
+         2006-07-26  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+         * ext/lame/gstlame.c: (gst_lame_setup):
+         Fix lame putting lots of 0's at start of mp3.  Fixes bug #348786.
+
+2006-07-21 11:01:55 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/sidplay/gstsiddec.*: Remove old metadata thing.
+         Original commit message from CVS:
+         * ext/sidplay/gstsiddec.cc:
+         * ext/sidplay/gstsiddec.h:
+         Remove old metadata thing.
+
+2006-07-15 13:33:38 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/gstasfdemux.c: Find language codes for audio streams if they are available.
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c:
+         (gst_asf_demux_get_ext_stream_props_for_stream),
+         (gst_asf_demux_add_audio_stream), (gst_asf_demux_change_state):
+         Find language codes for audio streams if they are available.
+
+2006-07-14 13:02:53 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/: Parse extended stream properties objects and stream objects hidden inside them (but delay creation of ...
+         Original commit message from CVS:
+         * gst/asfdemux/asfheaders.h:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_get_obj_stream),
+         (gst_asf_demux_process_stream),
+         (gst_asf_demux_process_language_list),
+         (gst_asf_demux_process_ext_stream_props),
+         (gst_asf_demux_process_queued_extended_stream_objects),
+         (gst_asf_demux_process_object), (gst_asf_demux_change_state):
+         * gst/asfdemux/gstasfdemux.h:
+         Parse extended stream properties objects and stream objects
+         hidden inside them (but delay creation of the appropriate
+         pads until after all the 'normal' stream objects have been
+         dealt with) (#343763). Also parse language list object.
+
+2006-07-13 11:28:32 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/rmdemux.*: Cleanups, use GstSegment for seeking.
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_class_init),
+         (gst_rmdemux_finalize), (gst_rmdemux_src_event),
+         (find_seek_offset_time), (gst_rmdemux_perform_seek),
+         (gst_rmdemux_src_query), (gst_rmdemux_change_state),
+         (gst_rmdemux_loop), (gst_rmdemux_chain), (gst_rmdemux_send_event),
+         (gst_rmdemux_add_stream), (gst_rmdemux_parse_mdpr),
+         (gst_rmdemux_combine_flows), (gst_rmdemux_parse_packet):
+         * gst/realmedia/rmdemux.h:
+         Cleanups, use GstSegment for seeking.
+         Fix error handling.
+         Combine flow return from all streams.
+
+2006-07-11 22:46:47 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/cdio/gstcdiocddasrc.c: Remove g_assert that shouldn't be there.
+         Original commit message from CVS:
+         * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_close):
+         Remove g_assert that shouldn't be there.
+
+2006-07-10 11:52:58 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/mpeg2dec/gstmpeg2dec.c: Fix refcounting when cropping. Fixes #341677.
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c: (crop_buffer), (handle_slice):
+         Fix refcounting when cropping. Fixes #341677.
+
+2006-07-09 14:07:31 +0000  Grzegorz Lukasik <hauserx@gmail.com>
+
+         gst/asfdemux/gstasfdemux.c: Fix typo. Closes #347029.
+         Original commit message from CVS:
+         Patch by: Grzegorz Lukasik <hauserx at gmail dot com>
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_video_stream),
+         (gst_asf_demux_process_segment):
+         Fix typo. Closes #347029.
+
+2006-07-08 20:29:56 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/gstasfdemux.c: Skip chunks for unknown streams properly. Fixes broken sound and/or video for files that ...
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_chunk):
+         Skip chunks for unknown streams properly. Fixes broken sound
+         and/or video for files that have additional streams that
+         we don't recognise yet (e.g. if they are embedded in extended
+         stream properties). Partly fixes #343763.
+
+2006-07-07 19:26:40 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/: Add some more GUIDs and make debug log more readable and easier to follow when parsing the headers.
+         Original commit message from CVS:
+         * gst/asfdemux/asfheaders.c:
+         * gst/asfdemux/asfheaders.h:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_identify_guid),
+         (gst_asf_demux_process_header), (gst_asf_demux_push_obj),
+         (gst_asf_demux_pop_obj), (gst_asf_demux_process_object),
+         (gst_asf_demux_change_state):
+         * gst/asfdemux/gstasfdemux.h:
+         Add some more GUIDs and make debug log more readable
+         and easier to follow when parsing the headers.
+
+2006-06-30 11:26:22 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/dvdread/dvdreadsrc.*: Rewrite seeking code and make seeking in DVDs work (#337834).
+         Original commit message from CVS:
+         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_init),
+         (gst_dvd_read_src_is_seekable), (gst_dvd_read_src_class_init),
+         (gst_dvd_read_src_stop), (gst_dvd_read_src_goto_title),
+         (gst_dvd_read_src_create), (gst_dvd_read_src_handle_seek_event),
+         (gst_dvd_read_src_do_seek), (gst_dvd_read_src_src_event):
+         * ext/dvdread/dvdreadsrc.h:
+         Rewrite seeking code and make seeking in DVDs work (#337834).
+
+2006-06-29 14:31:55 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         autogen.sh: Check for automake-1.9 as well.
+         Original commit message from CVS:
+         * autogen.sh:
+         Check for automake-1.9 as well.
+
+2006-06-29 12:25:15 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/dvdread/dvdreadsrc.c: Make check stronger.
+         Original commit message from CVS:
+         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_is_nav_pack):
+         Make check stronger.
+
+2006-06-28 11:20:03 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/gstasfdemux.*: Handle unknown codec IDs/fourccs properly (#345879); send tag events after newsegment eve...
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_setup_pad),
+         (gst_asf_demux_add_audio_stream), (gst_asf_demux_add_video_stream),
+         (gst_asf_demux_push_buffer):
+         * gst/asfdemux/gstasfdemux.h:
+         Handle unknown codec IDs/fourccs properly (#345879); send tag
+         events after newsegment event; fix use of GST_FOURCC_FORMAT
+         macro.
+
+2006-06-23 16:29:41 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         ext/a52dec/gsta52dec.c: Call the channel positions get_type() method in plugin_init to ensure that it isn't simultane...
+         Original commit message from CVS:
+         * ext/a52dec/gsta52dec.c: (plugin_init):
+         Call the channel positions get_type() method in plugin_init
+         to ensure that it isn't simultaneously called later from
+         multiple threads.
+
+2006-06-23 12:24:56 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/mpegstream/: Also flush packetizer cache when we get a buffer that has the
+         Original commit message from CVS:
+         * gst/mpegstream/gstmpegpacketize.c:
+         (gst_mpeg_packetize_flush_cache), (gst_mpeg_packetize_put):
+         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_chain):
+         Also flush packetizer cache when we get a buffer that has the
+         DISCONT flag set; update current byte position from buffer
+         offset after a flush.
+
+2006-06-23 11:22:04 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/mpegstream/: Flush packetizer cache when we get a FLUSH_STOP event; remove unused source pad member from packetiz...
+         Original commit message from CVS:
+         * gst/mpegstream/gstmpegpacketize.c: (gst_mpeg_packetize_new),
+         (gst_mpeg_packetize_flush_cache), (gst_mpeg_packetize_destroy),
+         (gst_mpeg_packetize_read):
+         * gst/mpegstream/gstmpegpacketize.h:
+         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_process_event),
+         (gst_mpeg_parse_change_state):
+         Flush packetizer cache when we get a FLUSH_STOP event;
+         remove unused source pad member from packetizer; add debug
+         category for packetizer.
+
+2006-06-23 09:28:28 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         ext/a52dec/gsta52dec.c: Treat dual-mono as stereo. It should really be output on 2 separate pads, but isn't for now.
+         Original commit message from CVS:
+         * ext/a52dec/gsta52dec.c: (gst_a52dec_channels), (plugin_init):
+         Treat dual-mono as stereo. It should really be output on 2 separate
+         pads, but isn't for now.
+
+2006-06-19 15:16:43 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/mpeg2dec/gstmpeg2dec.c: Assume 4:3 DAR rather than 4:3 PAR (#345184).
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_negotiate_format):
+         Assume 4:3 DAR rather than 4:3 PAR (#345184).
+
+2006-06-19 11:59:14 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/mpeg2dec/gstmpeg2dec.c: Assume pixel-aspect-ratio of 4:3 if libmpeg2dec doesn't give us any PAR whatsoever (rathe...
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_negotiate_format):
+         Assume pixel-aspect-ratio of 4:3 if libmpeg2dec doesn't give us
+         any PAR whatsoever (rather than using 0/0, which will lead to
+         an abort later on). Fixes #345184.
+
+2006-06-17 19:35:41 +0000  Michael Dominic K <mdk@mdk.org.pl>
+
+         ext/mad/gstmad.c: Send newsegment event before calling gst_pad_alloc_buffer_and_set_caps(), makes mad behave better i...
+         Original commit message from CVS:
+         Patch by: Michael Dominic K.  < mdk at mdk org pl>
+         * ext/mad/gstmad.c: (gst_mad_chain):
+         Send newsegment event before calling
+         gst_pad_alloc_buffer_and_set_caps(), makes mad behave better
+         in connection with pad blocking (#342594). While we're at it,
+         do some minor clean-ups.
+
+2006-06-17 14:48:04 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         configure.ac: Fix --disable-external (can't set conditionals conditionally, #343602).
+         Original commit message from CVS:
+         * configure.ac:
+         Fix --disable-external (can't set conditionals conditionally,
+         #343602).
+
+2006-06-15 17:10:09 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/a52dec/Makefile.am: ... and then he said "When you go and fix the build you better make sure you have some spare ...
+         Original commit message from CVS:
+         * ext/a52dec/Makefile.am:
+         ... and then he said "When you go and fix the build you
+         better make sure you have some spare backslashes in your
+         pocket".
+
+2006-06-13 15:46:09 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/sidplay/gstsiddec.cc: Fix copyright, email addresses and descriptions.
+         Original commit message from CVS:
+         * ext/sidplay/gstsiddec.cc:
+         Fix copyright, email addresses and descriptions.
+         Use saner defaults for arguments. Fixes #344667.
+         constify some stuff.
+         Fix memleaks.
+         Add tags.
+         Fix negotiation to do mono/44100 by default.
+         Post error messages.
+         Use _scale_int where possible.
+
+2006-06-12 14:09:20 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/dvdnav/.cvsignore: More ignore
+         Original commit message from CVS:
+         * ext/dvdnav/.cvsignore:
+         More ignore
+
+2006-06-12 13:49:42 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         tests/check/elements/amrnbenc.c: Init memory before feeding it to the encoder to make the valgrind test succeed.
+         Original commit message from CVS:
+         * tests/check/elements/amrnbenc.c: (push_data):
+         Init memory before feeding it to the encoder to make
+         the valgrind test succeed.
+
+2006-06-12 13:27:18 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         gst/asfdemux/.cvsignore: More ignore
+         Original commit message from CVS:
+         * gst/asfdemux/.cvsignore:
+         More ignore
+
+2006-06-11 20:38:54 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         .cvsignore: Ignore files generated by 'make dist'.
+         Original commit message from CVS:
+         * .cvsignore:
+         Ignore files generated by 'make dist'.
+
+2006-06-11 17:08:11 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         update build files
+         Original commit message from CVS:
+         * autogen.sh:
+         * configure.ac:
+         * ext/a52dec/Makefile.am:
+         * ext/dvdnav/Makefile.am:
+         * ext/dvdread/Makefile.am:
+         * ext/lame/Makefile.am:
+         * ext/mad/Makefile.am:
+         * ext/mpeg2dec/Makefile.am:
+         * ext/sidplay/Makefile.am:
+         update build files
+
+2006-06-11 13:57:18 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         autogen.sh: require am17
+         Original commit message from CVS:
+         * autogen.sh:
+         require am17
+         * configure.ac:
+         * ext/annodex/Makefile.am:
+         * ext/cdio/Makefile.am:
+         * ext/dv/Makefile.am:
+         * ext/esd/Makefile.am:
+         * ext/flac/Makefile.am:
+         * ext/gdk_pixbuf/Makefile.am:
+         * ext/ladspa/Makefile.am:
+         * ext/libcaca/Makefile.am:
+         * ext/speex/Makefile.am:
+         * ext/taglib/Makefile.am:
+         * sys/oss/Makefile.am:
+         * sys/sunaudio/Makefile.am:
+         * sys/ximage/Makefile.am:
+         clean up build further
+
+2006-06-07 17:05:48 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/mpeg2dec/gstmpeg2dec.*: Simplify and don't leak our buffer pool.
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_finalize),
+         (gst_mpeg2dec_reset), (clear_buffers), (handle_picture),
+         (gst_mpeg2dec_sink_convert), (gst_mpeg2dec_src_convert),
+         (gst_mpeg2dec_change_state):
+         * ext/mpeg2dec/gstmpeg2dec.h:
+         Simplify and don't leak our buffer pool.
+         Use _scale_int.
+         Remove unfixed bug number from previous ChangeLog entry.
+
+2006-06-07 16:15:42 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/mpeg2dec/gstmpeg2dec.*: Fix padtemplate as we can now do fractional framerates.
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_base_init),
+         (gst_mpeg2dec_class_init), (gst_mpeg2dec_init),
+         (gst_mpeg2dec_finalize), (gst_mpeg2dec_reset),
+         (gst_mpeg2dec_qos_reset), (gst_mpeg2dec_alloc_buffer),
+         (gst_mpeg2dec_negotiate_format), (init_dummybuf),
+         (handle_sequence), (handle_picture), (handle_slice),
+         (gst_mpeg2dec_chain), (gst_mpeg2dec_sink_event),
+         (gst_mpeg2dec_src_event), (gst_mpeg2dec_change_state):
+         * ext/mpeg2dec/gstmpeg2dec.h:
+         Fix padtemplate as we can now do fractional framerates.
+         Small cleanups.
+         Use GstSegment.
+         Add simple frame dropping QoS.
+         Precalc buffer output sizes and UV offsets.
+         Always give libmpeg2 a valid fbuf when it wants one.
+         don't trust libmpeg to discard our buffers but manage it
+         ourselves.
+         Fixes #343627, #327350, #335288
+
+2006-06-05 20:57:12 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+         win32/MANIFEST: Add a manifest for futures ugly win32 releases.
+         Original commit message from CVS:
+         * win32/MANIFEST:
+         Add a manifest for futures ugly win32 releases.
+         * gst/iec958/ac3iec.c: (ac3iec_chain_raw):
+         Move bufcaps declaration at the begining of the instructions
+         block.
+
+2006-06-01 22:00:26 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
+         Original commit message from CVS:
+         * ext/alsaspdif/alsaspdifsink.h:
+         * ext/amrwb/gstamrwbdec.h:
+         * ext/amrwb/gstamrwbenc.h:
+         * ext/amrwb/gstamrwbparse.h:
+         * ext/arts/gst_arts.h:
+         * ext/artsd/gstartsdsink.h:
+         * ext/audiofile/gstafparse.h:
+         * ext/audiofile/gstafsink.h:
+         * ext/audiofile/gstafsrc.h:
+         * ext/audioresample/gstaudioresample.h:
+         * ext/bz2/gstbz2dec.h:
+         * ext/bz2/gstbz2enc.h:
+         * ext/dirac/gstdiracdec.h:
+         * ext/directfb/dfbvideosink.h:
+         * ext/divx/gstdivxdec.h:
+         * ext/divx/gstdivxenc.h:
+         * ext/dts/gstdtsdec.h:
+         * ext/faac/gstfaac.h:
+         * ext/gsm/gstgsmdec.h:
+         * ext/gsm/gstgsmenc.h:
+         * ext/ivorbis/vorbisenc.h:
+         * ext/libfame/gstlibfame.h:
+         * ext/nas/nassink.h:
+         * ext/neon/gstneonhttpsrc.h:
+         * ext/polyp/polypsink.h:
+         * ext/sdl/sdlaudiosink.h:
+         * ext/sdl/sdlvideosink.h:
+         * ext/shout/gstshout.h:
+         * ext/snapshot/gstsnapshot.h:
+         * ext/sndfile/gstsf.h:
+         * ext/swfdec/gstswfdec.h:
+         * ext/tarkin/gsttarkindec.h:
+         * ext/tarkin/gsttarkinenc.h:
+         * ext/theora/theoradec.h:
+         * ext/wavpack/gstwavpackdec.h:
+         * ext/wavpack/gstwavpackparse.h:
+         * ext/xine/gstxine.h:
+         * ext/xvid/gstxviddec.h:
+         * ext/xvid/gstxvidenc.h:
+         * gst/cdxaparse/gstcdxaparse.h:
+         * gst/cdxaparse/gstcdxastrip.h:
+         * gst/colorspace/gstcolorspace.h:
+         * gst/festival/gstfestival.h:
+         * gst/freeze/gstfreeze.h:
+         * gst/gdp/gstgdpdepay.h:
+         * gst/gdp/gstgdppay.h:
+         * gst/modplug/gstmodplug.h:
+         * gst/mpeg1sys/gstmpeg1systemencode.h:
+         * gst/mpeg1videoparse/gstmp1videoparse.h:
+         * gst/mpeg2sub/gstmpeg2subt.h:
+         * gst/mpegaudioparse/gstmpegaudioparse.h:
+         * gst/multifilesink/gstmultifilesink.h:
+         * gst/overlay/gstoverlay.h:
+         * gst/playondemand/gstplayondemand.h:
+         * gst/qtdemux/qtdemux.h:
+         * gst/rtjpeg/gstrtjpegdec.h:
+         * gst/rtjpeg/gstrtjpegenc.h:
+         * gst/smooth/gstsmooth.h:
+         * gst/smoothwave/gstsmoothwave.h:
+         * gst/spectrum/gstspectrum.h:
+         * gst/speed/gstspeed.h:
+         * gst/stereo/gststereo.h:
+         * gst/switch/gstswitch.h:
+         * gst/tta/gstttadec.h:
+         * gst/tta/gstttaparse.h:
+         * gst/videodrop/gstvideodrop.h:
+         * gst/xingheader/gstxingmux.h:
+         * sys/directdraw/gstdirectdrawsink.h:
+         * sys/directsound/gstdirectsoundsink.h:
+         * sys/dxr3/dxr3audiosink.h:
+         * sys/dxr3/dxr3spusink.h:
+         * sys/dxr3/dxr3videosink.h:
+         * sys/qcam/gstqcamsrc.h:
+         * sys/vcd/vcdsrc.h:
+         Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
+
+2006-06-01 21:11:41 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
+         Original commit message from CVS:
+         * ext/a52dec/gsta52dec.h:
+         * ext/amrnb/amrnbdec.h:
+         * ext/amrnb/amrnbenc.h:
+         * ext/amrnb/amrnbparse.h:
+         * ext/mpeg2dec/gstmpeg2dec.h:
+         * ext/sidplay/gstsiddec.h:
+         * gst/ac3parse/gstac3parse.h:
+         * gst/asfdemux/gstasfdemux.h:
+         * gst/asfdemux/gstasfmux.h:
+         * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+         * gst/iec958/ac3iec.h:
+         * gst/mpegaudioparse/gstmpegaudioparse.h:
+         * gst/mpegstream/gstdvddemux.h:
+         * gst/mpegstream/gstmpegclock.h:
+         * gst/mpegstream/gstmpegdemux.h:
+         * gst/mpegstream/gstmpegparse.h:
+         Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
+
+2006-05-27 11:35:11 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         README: Replace current README (containing the release notes from some 0.9.x version) with a proper README taken from...
+         Original commit message from CVS:
+         * README:
+         Replace current README (containing the release notes from
+         some 0.9.x version) with a proper README taken from the core.
+
+2006-05-24 15:56:13 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/amrnb/: Sortof first quick cleanup of all this mess...
+         Original commit message from CVS:
+         * ext/amrnb/amrnbdec.c: (gst_amrnbdec_event), (gst_amrnbdec_chain):
+         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
+         (gst_amrnbparse_sink_event), (gst_amrnbparse_chain),
+         (gst_amrnbparse_sink_activate), (gst_amrnbparse_state_change):
+         * ext/amrnb/amrnbparse.h:
+         Sortof first quick cleanup of all this mess...
+         Don't crap out on empty and invalid FTs but treat them as
+         empty packets, the decoder handles them fine.
+         Fixes #342222.
+
+2006-05-22 08:24:09 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/gstasf.c: Call gst_riff_init() so the riff debug category gets set up before it is being used.
+         Original commit message from CVS:
+         * gst/asfdemux/gstasf.c: (plugin_init):
+         Call gst_riff_init() so the riff debug category gets set up
+         before it is being used.
+
+2006-05-19 13:55:11 +0000  Michael Smith <msmith@xiph.org>
+
+         gst/iec958/: Write rate into the caps, for the allowed ac3 rates. Some minor cleanups.
+         Original commit message from CVS:
+         * gst/iec958/ac3_padder.c: (ac3p_parse):
+         * gst/iec958/ac3_padder.h:
+         * gst/iec958/ac3iec.c: (ac3iec_init), (ac3iec_set_property),
+         (ac3iec_chain_raw), (ac3iec_change_state):
+         * gst/iec958/ac3iec.h:
+         Write rate into the caps, for the allowed ac3 rates. Some minor
+         cleanups.
+
+2006-05-18 13:00:21 +0000  James Doc Livingston <doclivingston@gmail.com>
+
+         ext/mad/gstid3tag.c: Do tag merging correctly (#339918). Output taglists properly in debug statements too while we're...
+         Original commit message from CVS:
+         Patch by: James "Doc" Livingston  <doclivingston gmail com>
+         * ext/mad/gstid3tag.c: (gst_id3_tag_get_tag_to_render):
+         Do tag merging correctly (#339918). Output taglists
+         properly in debug statements too while we're at it.
+
+2006-05-11 16:17:44 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         ext/a52dec/gsta52dec.c: Add more debug
+         Original commit message from CVS:
+         * ext/a52dec/gsta52dec.c: (gst_a52dec_chain):
+         Add more debug
+         * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcm_reset),
+         (gst_dvdlpcmdec_init), (update_timestamps),
+         (gst_dvdlpcmdec_chain_dvd), (gst_dvdlpcmdec_chain_raw),
+         (dvdlpcmdec_sink_event):
+         * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+         If we have a first_access offset but no current timestamp (might
+         happen after a seek), then calculate a start time for the first
+         portion so that it will align with the timestamp given for the
+         first_access portion.
+         If a new-segment arrives with format time, store the start
+         time as a failsafe timestamp in case we never get any further
+         timestamp info (unlikely)
+         Mask out the 'frame number' section of the incoming header so
+         that we don't consider it to be changing on every buffer and
+         reset the caps constantly.
+         Use gst_util_uint64_scale for duration calculation
+
+2006-05-11 14:34:10 +0000  Michael Smith <msmith@xiph.org>
+
+         gst/dvdlpcmdec/gstdvdlpcmdec.c: Fix timestamping for cases where the first_access parameter is 4.
+         Original commit message from CVS:
+         * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain_dvd):
+         Fix timestamping for cases where the first_access parameter is 4.
+         Ensure we don't overrun buffers in other cases.
+
+2006-05-10 14:40:03 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/gstasfdemux.c: Fix silly bug when reading metadata (#341254).
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_get_string):
+         Fix silly bug when reading metadata (#341254).
+
+2006-05-08 11:57:26 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         autogen.sh: libtoolize on Darwin/MacOSX is called glibtoolize
+         Original commit message from CVS:
+         * autogen.sh: (CONFIGURE_DEF_OPT):
+         libtoolize on Darwin/MacOSX is called glibtoolize
+
+2006-05-06 11:38:30 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/lame/gstlame.*: Remove tag writing from lame (which was completely broken anyway, #329184). Leaving GstTagSetter ...
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_get_type),
+         (gst_lame_release_memory), (gst_lame_init), (gst_lame_sink_event),
+         (gst_lame_setup), (gst_lame_change_state):
+         * ext/lame/gstlame.h:
+         Remove tag writing from lame (which was completely broken
+         anyway, #329184). Leaving GstTagSetter interface around for
+         now, albeit non-functional. Should be removed completely
+         in 0.11. Use the 'id3v2mux' plugin from -good for writing
+         tags.
+
+2006-05-06 00:18:31 +0000  Maciej Katafiasz <mathrick@mathrick.org>
+
+       * ChangeLog:
+       * ext/dvdread/dvdreadsrc.c:
+       * gst/asfdemux/gstasfdemux.c:
+         Add semicolons after GST_BOILERPLATE[_FULL] so that indent doesn't mess up following lines.
+         Original commit message from CVS:
+         Add semicolons after GST_BOILERPLATE[_FULL] so that indent doesn't mess up following lines.
+
+2006-05-05 08:23:39 +0000  Andres Salomon <dilinger@debian.org>
+
+         ext/lame/gstlame.c: Fix typo (comma vs. semicolon) (#340710).
+         Original commit message from CVS:
+         Patch by: Andres Salomon  <dilinger at debian org>
+         * ext/lame/gstlame.c: (gst_lame_sink_event):
+         Fix typo (comma vs. semicolon) (#340710).
+
+2006-05-04 08:24:52 +0000  Lutz Müller <lutz@topfrose.de>
+
+         ext/mad/gstmad.c: Make mad the second element to support the highly useful
+         Original commit message from CVS:
+         Patch by: Lutz Müller <lutz at topfrose de>
+         * ext/mad/gstmad.c: (gst_mad_init), (gst_mad_src_query):
+         Make mad the second element to support the highly useful
+         FORMATS query (#340594)
+
+2006-05-02 10:28:48 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         ext/mpeg2dec/gstmpeg2dec.c: Remember the query duration format before passing it upstream since it could have been mo...
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_sink_convert),
+         (gst_mpeg2dec_src_query):
+         Remember the query duration format before passing it upstream since it
+         could have been modified.
+         Add GST_WARNING_OBJECT in sink convert function to detail why the
+         conversion didn't work.
+
+2006-04-25 21:56:37 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         Define GstElementDetails as const and also static (when defined as global)
+         Original commit message from CVS:
+         * ext/amrwb/gstamrwbdec.c:
+         * ext/amrwb/gstamrwbenc.c:
+         * ext/amrwb/gstamrwbparse.c:
+         * ext/arts/gst_arts.c:
+         * ext/artsd/gstartsdsink.c:
+         * ext/audiofile/gstafparse.c:
+         * ext/audiofile/gstafsink.c:
+         * ext/audiofile/gstafsrc.c:
+         * ext/audioresample/gstaudioresample.c:
+         * ext/bz2/gstbz2dec.c:
+         * ext/bz2/gstbz2enc.c:
+         * ext/cdaudio/gstcdaudio.c:
+         * ext/directfb/dfbvideosink.c:
+         * ext/divx/gstdivxdec.c:
+         * ext/divx/gstdivxenc.c:
+         * ext/dts/gstdtsdec.c: (gst_dtsdec_base_init):
+         * ext/faac/gstfaac.c: (gst_faac_base_init):
+         * ext/faad/gstfaad.c:
+         * ext/gsm/gstgsmdec.c:
+         * ext/gsm/gstgsmenc.c:
+         * ext/hermes/gsthermescolorspace.c:
+         * ext/ivorbis/vorbisfile.c:
+         * ext/lcs/gstcolorspace.c:
+         * ext/libfame/gstlibfame.c:
+         * ext/libmms/gstmms.c: (gst_mms_base_init):
+         * ext/musepack/gstmusepackdec.c: (gst_musepackdec_base_init):
+         * ext/musicbrainz/gsttrm.c: (gst_musicbrainz_base_init):
+         * ext/nas/nassink.c: (gst_nassink_base_init):
+         * ext/neon/gstneonhttpsrc.c:
+         * ext/sdl/sdlaudiosink.c:
+         * ext/sdl/sdlvideosink.c:
+         * ext/shout/gstshout.c:
+         * ext/snapshot/gstsnapshot.c:
+         * ext/sndfile/gstsf.c:
+         * ext/swfdec/gstswfdec.c:
+         * ext/tarkin/gsttarkindec.c:
+         * ext/tarkin/gsttarkinenc.c:
+         * ext/theora/theoradec.c:
+         * ext/wavpack/gstwavpackdec.c: (gst_wavpack_dec_base_init):
+         * ext/wavpack/gstwavpackparse.c: (gst_wavpack_parse_base_init):
+         * ext/xvid/gstxviddec.c:
+         * ext/xvid/gstxvidenc.c:
+         * gst/cdxaparse/gstcdxaparse.c: (gst_cdxa_parse_base_init):
+         * gst/cdxaparse/gstcdxastrip.c: (gst_cdxastrip_base_init):
+         * gst/chart/gstchart.c:
+         * gst/colorspace/gstcolorspace.c:
+         * gst/deinterlace/gstdeinterlace.c:
+         * gst/equalizer/gstiirequalizer.c: (gst_iir_equalizer_base_init):
+         * gst/festival/gstfestival.c:
+         * gst/filter/gstbpwsinc.c:
+         * gst/filter/gstiir.c:
+         * gst/filter/gstlpwsinc.c:
+         * gst/freeze/gstfreeze.c:
+         * gst/games/gstpuzzle.c: (gst_puzzle_base_init):
+         * gst/librfb/gstrfbsrc.c:
+         * gst/mixmatrix/mixmatrix.c:
+         * gst/mpeg1sys/gstmpeg1systemencode.c:
+         * gst/mpeg1videoparse/gstmp1videoparse.c:
+         * gst/mpeg2sub/gstmpeg2subt.c:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         * gst/multifilesink/gstmultifilesink.c:
+         * gst/overlay/gstoverlay.c:
+         * gst/passthrough/gstpassthrough.c:
+         * gst/playondemand/gstplayondemand.c:
+         * gst/qtdemux/qtdemux.c:
+         * gst/rtjpeg/gstrtjpegdec.c:
+         * gst/rtjpeg/gstrtjpegenc.c:
+         * gst/smooth/gstsmooth.c:
+         * gst/smoothwave/gstsmoothwave.c:
+         * gst/spectrum/gstspectrum.c:
+         * gst/speed/gstspeed.c:
+         * gst/stereo/gststereo.c:
+         * gst/switch/gstswitch.c:
+         * gst/tta/gstttadec.c: (gst_tta_dec_base_init):
+         * gst/tta/gstttaparse.c: (gst_tta_parse_base_init):
+         * gst/vbidec/gstvbidec.c:
+         * gst/videocrop/gstvideocrop.c:
+         * gst/videodrop/gstvideodrop.c:
+         * gst/virtualdub/gstxsharpen.c:
+         * gst/xingheader/gstxingmux.c: (gst_xing_mux_base_init):
+         * gst/y4m/gsty4mencode.c:
+         * sys/cdrom/gstcdplayer.c:
+         * sys/directdraw/gstdirectdrawsink.c:
+         * sys/directsound/gstdirectsoundsink.c:
+         * sys/glsink/glimagesink.c:
+         * sys/qcam/gstqcamsrc.c:
+         * sys/v4l2/gstv4l2src.c:
+         * sys/vcd/vcdsrc.c: (gst_vcdsrc_base_init):
+         * sys/ximagesrc/ximagesrc.c:
+         Define GstElementDetails as const and also static (when defined as
+         global)
+
+2006-04-25 21:47:03 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         Define GstElementDetails as const and also static (when defined as global)
+         Original commit message from CVS:
+         * ext/mad/gstid3tag.c:
+         * ext/mad/gstmad.c:
+         * gst/ac3parse/gstac3parse.c:
+         * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+         * gst/synaesthesia/gstsynaesthesia.c:
+         Define GstElementDetails as const and also static (when defined as
+         global)
+
+2006-04-25 21:39:40 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         Define GstElementDetails as const and also static (when defined as global)
+         Original commit message from CVS:
+         * ext/aalib/gstaasink.c:
+         * ext/annodex/gstcmmldec.c:
+         * ext/annodex/gstcmmlenc.c:
+         * ext/cairo/gsttextoverlay.c:
+         * ext/cairo/gsttimeoverlay.c:
+         * ext/cdio/gstcdiocddasrc.c:
+         * ext/dv/gstdvdec.c:
+         * ext/dv/gstdvdemux.c:
+         * ext/esd/esdmon.c:
+         * ext/esd/esdsink.c:
+         * ext/flac/gstflacenc.c:
+         * ext/flac/gstflactag.c:
+         * ext/gconf/gstgconfaudiosink.c: (gst_gconf_audio_sink_base_init):
+         * ext/gconf/gstgconfaudiosrc.c: (gst_gconf_audio_src_base_init):
+         * ext/gconf/gstgconfvideosink.c: (gst_gconf_video_sink_base_init):
+         * ext/gconf/gstgconfvideosrc.c: (gst_gconf_video_src_base_init):
+         * ext/gdk_pixbuf/pixbufscale.c:
+         * ext/hal/gsthalaudiosink.c: (gst_hal_audio_sink_base_init):
+         * ext/hal/gsthalaudiosrc.c: (gst_hal_audio_src_base_init):
+         * ext/jpeg/gstjpegdec.c:
+         * ext/jpeg/gstjpegenc.c:
+         * ext/jpeg/gstsmokedec.c:
+         * ext/jpeg/gstsmokeenc.c:
+         * ext/libcaca/gstcacasink.c:
+         * ext/libmng/gstmngdec.c:
+         * ext/libmng/gstmngenc.c:
+         * ext/libpng/gstpngdec.c:
+         * ext/libpng/gstpngenc.c:
+         * ext/mikmod/gstmikmod.c:
+         * ext/raw1394/gstdv1394src.c:
+         * ext/shout2/gstshout2.c: (gst_shout2send_init):
+         * ext/shout2/gstshout2.h:
+         * ext/speex/gstspeexdec.c:
+         * ext/speex/gstspeexenc.c:
+         * gst/alpha/gstalpha.c:
+         * gst/alpha/gstalphacolor.c:
+         * gst/apetag/gstapedemux.c:
+         * gst/auparse/gstauparse.c:
+         * gst/autodetect/gstautoaudiosink.c:
+         (gst_auto_audio_sink_base_init):
+         * gst/autodetect/gstautovideosink.c:
+         (gst_auto_video_sink_base_init):
+         * gst/avi/gstavidemux.c: (gst_avi_demux_base_init):
+         * gst/avi/gstavimux.c: (gst_avimux_base_init):
+         * gst/cutter/gstcutter.c:
+         * gst/debug/breakmydata.c:
+         * gst/debug/efence.c:
+         * gst/debug/gstnavigationtest.c:
+         * gst/debug/gstnavseek.c:
+         * gst/debug/negotiation.c:
+         * gst/debug/progressreport.c:
+         * gst/debug/testplugin.c:
+         * gst/effectv/gstaging.c:
+         * gst/effectv/gstdice.c:
+         * gst/effectv/gstedge.c:
+         * gst/effectv/gstquark.c:
+         * gst/effectv/gstrev.c:
+         * gst/effectv/gstshagadelic.c:
+         * gst/effectv/gstvertigo.c:
+         * gst/effectv/gstwarp.c:
+         * gst/flx/gstflxdec.c:
+         * gst/goom/gstgoom.c:
+         * gst/icydemux/gsticydemux.c:
+         * gst/id3demux/gstid3demux.c:
+         * gst/interleave/deinterleave.c:
+         * gst/interleave/interleave.c:
+         * gst/law/alaw-decode.c: (gst_alawdec_base_init):
+         * gst/law/alaw-encode.c: (gst_alawenc_base_init):
+         * gst/law/mulaw-decode.c: (gst_mulawdec_base_init):
+         * gst/law/mulaw-encode.c: (gst_mulawenc_base_init):
+         * gst/level/gstlevel.c:
+         * gst/matroska/matroska-demux.c: (gst_matroska_demux_base_init):
+         * gst/matroska/matroska-mux.c: (gst_matroska_mux_base_init):
+         * gst/median/gstmedian.c:
+         * gst/monoscope/gstmonoscope.c:
+         * gst/multipart/multipartdemux.c:
+         * gst/multipart/multipartmux.c:
+         * gst/oldcore/gstaggregator.c:
+         * gst/oldcore/gstfdsink.c:
+         * gst/oldcore/gstmd5sink.c:
+         * gst/oldcore/gstmultifilesrc.c:
+         * gst/oldcore/gstpipefilter.c:
+         * gst/oldcore/gstshaper.c:
+         * gst/oldcore/gststatistics.c:
+         * gst/rtp/gstasteriskh263.c:
+         * gst/rtp/gstrtpL16depay.c:
+         * gst/rtp/gstrtpL16pay.c:
+         * gst/rtp/gstrtpamrdepay.c:
+         * gst/rtp/gstrtpamrpay.c:
+         * gst/rtp/gstrtpdepay.c:
+         * gst/rtp/gstrtpgsmpay.c:
+         * gst/rtp/gstrtph263pay.c:
+         * gst/rtp/gstrtph263pdepay.c:
+         * gst/rtp/gstrtph263ppay.c:
+         * gst/rtp/gstrtpilbcdepay.c:
+         * gst/rtp/gstrtpmp4gpay.c:
+         * gst/rtp/gstrtpmp4vdepay.c:
+         * gst/rtp/gstrtpmp4vpay.c:
+         * gst/rtp/gstrtpmpadepay.c:
+         * gst/rtp/gstrtpmpapay.c:
+         * gst/rtp/gstrtppcmadepay.c:
+         * gst/rtp/gstrtppcmapay.c:
+         * gst/rtp/gstrtppcmudepay.c:
+         * gst/rtp/gstrtppcmupay.c:
+         * gst/rtp/gstrtpspeexdepay.c:
+         * gst/rtp/gstrtpspeexpay.c:
+         * gst/rtsp/gstrtpdec.c:
+         * gst/rtsp/gstrtspsrc.c:
+         * gst/smpte/gstsmpte.c:
+         * gst/udp/gstdynudpsink.c:
+         * gst/udp/gstmultiudpsink.c:
+         * gst/udp/gstudpsink.c:
+         * gst/udp/gstudpsrc.c:
+         * gst/videobox/gstvideobox.c:
+         * gst/videofilter/gstgamma.c: (gst_gamma_base_init):
+         * gst/videofilter/gstvideobalance.c:
+         * gst/videofilter/gstvideoflip.c:
+         * gst/videofilter/gstvideotemplate.c:
+         (gst_videotemplate_base_init):
+         * gst/videomixer/videomixer.c:
+         * gst/wavparse/gstwavparse.c: (gst_wavparse_base_init),
+         (gst_wavparse_class_init), (gst_wavparse_dispose),
+         (gst_wavparse_reset), (gst_wavparse_init),
+         (gst_wavparse_perform_seek), (gst_wavparse_peek_chunk_info),
+         (gst_wavparse_peek_chunk), (gst_wavparse_stream_headers),
+         (gst_wavparse_parse_stream_init), (gst_wavparse_send_event),
+         (gst_wavparse_add_src_pad), (gst_wavparse_stream_data),
+         (gst_wavparse_chain), (gst_wavparse_srcpad_event),
+         (gst_wavparse_sink_activate), (gst_wavparse_sink_activate_pull),
+         (gst_wavparse_change_state):
+         * gst/wavparse/gstwavparse.h:
+         * sys/oss/gstossmixerelement.c:
+         * sys/oss/gstosssink.c:
+         * sys/oss/gstosssrc.c:
+         * sys/osxaudio/gstosxaudioelement.c:
+         * sys/osxaudio/gstosxaudiosink.c:
+         * sys/osxaudio/gstosxaudiosrc.c:
+         * sys/sunaudio/gstsunaudiomixer.c:
+         * sys/sunaudio/gstsunaudiosink.c:
+         Define GstElementDetails as const and also static (when defined as
+         global)
+
+2006-04-25 12:17:02 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/dvdnav/dvdnavsrc.c: Fix name of custom event (use same as dvdreadsrc).
+         Original commit message from CVS:
+         * ext/dvdnav/dvdnavsrc.c: (gst_dvd_nav_src_push_titlelang_event):
+         Fix name of custom event (use same as dvdreadsrc).
+         * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_chain),
+         (gst_dvd_sub_dec_sink_event), (gst_dvd_sub_dec_handle_dvd_event):
+         Fix event parsing (the event name is in the structure, not the
+         name of the structure itself); also fix indentation after
+         boilerplate macro.
+
+2006-04-23 09:49:14 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/mad/gstid3tag.c: Change debug category to 'id3mux'.
+         Original commit message from CVS:
+         * ext/mad/gstid3tag.c: (plugin_init):
+         Change debug category to 'id3mux'.
+
+2006-04-22 18:49:01 +0000  Alexander Lancaster <alexl@users.sourceforge.net>
+
+         ext/mad/gstid3tag.c: When acting as a muxer, set caps on outgoing buffers and set caps on source pad (fixes #323658)....
+         Original commit message from CVS:
+         Patch by: Alexander Lancaster  <alexl at users sourceforge net>
+         * ext/mad/gstid3tag.c: (gst_id3_tag_get_caps), (gst_id3_tag_init),
+         (gst_id3_tag_sink_event), (gst_id3_tag_src_link),
+         (gst_id3_tag_chain):
+         When acting as a muxer, set caps on outgoing buffers and set caps
+         on source pad (fixes #323658). Remove unused application/x-gst-tags
+         cruft from the 0.6 days.
+
+2006-04-21 20:37:43 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/mad/gstmad.c: .. and DEFAULT queries should work too. Use magic gst util scale functions in some places.
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (gst_mad_convert_sink), (gst_mad_convert_src),
+         (gst_mad_src_query), (gst_mad_chain):
+         .. and DEFAULT queries should work too. Use magic gst util scale
+         functions in some places.
+
+2006-04-21 19:31:47 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/mad/gstmad.c: Fix duration query in BYTES format (#336824).
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (gst_mad_src_query):
+         Fix duration query in BYTES format (#336824).
+
+2006-04-21 12:40:41 +0000  Ed Catmur <ed@catmur.co.uk>
+
+         ext/lame/gstlame.c: Don't crash if we get an EOS event before the encoder has been set up (#339287).
+         Original commit message from CVS:
+         Patch by: Ed Catmur  <ed at catmur dot co dot uk>
+         * ext/lame/gstlame.c: (gst_lame_sink_event):
+         Don't crash if we get an EOS event before the encoder
+         has been set up (#339287).
+
+2006-04-21 11:17:08 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/dvdread/dvdreadsrc.c: Move errors out of the normal code flow.
+         Original commit message from CVS:
+         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_start),
+         (gst_dvd_read_src_goto_title), (gst_dvd_read_src_read),
+         (gst_dvd_read_src_create), (gst_dvd_read_src_goto_sector):
+         Move errors out of the normal code flow.
+         Don't send eos, basesrc will do that for us when needed.
+
+2006-04-21 10:50:17 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/mpegstream/: Do state changes correctly
+         Original commit message from CVS:
+         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_change_state):
+         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_change_state):
+         * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_change_state):
+         Do state changes correctly
+
+2006-04-13 19:08:20 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/mpeg2dec/gstmpeg2dec.c: Can't use gst_pad_alloc_buffer*() when we are going to crop the image before sending it o...
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_alloc_sized_buf),
+         (gst_mpeg2dec_alloc_buffer):
+         Can't use gst_pad_alloc_buffer*() when we are going to crop
+         the image before sending it out. Downstream basetransform-based
+         elements will complain about the wrong unit size otherwise
+         (when not operating in passthrough-mode at least).
+         Const-ify some static variables and do some minor clean-ups.
+         Use I420 macros for size/offsets (not really necessary in this
+         particular context, but this kind of code gets copy'n'pasted).
+
+2006-04-13 18:21:08 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/mpegstream/gstmpegpacketize.*: g_malloc() can't fail, we don't need to handle this. Same for gst_buffer_new_and_a...
+         Original commit message from CVS:
+         * gst/mpegstream/gstmpegpacketize.c: (gst_mpeg_packetize_put),
+         (read_cache):
+         * gst/mpegstream/gstmpegpacketize.h:
+         g_malloc() can't fail, we don't need to handle this. Same for
+         gst_buffer_new_and_alloc().
+         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_chain):
+         klass->send_buffer() should have the same semantics as
+         gst_pad_push(), ie. ownership of the buffer is transfered,
+         so we never have to unref the buffer no matter what the flow
+         return value was.
+
+2006-04-12 16:21:17 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * tests/check/gst-plugins-ugly.supp:
+         one more suppression for FC4
+         Original commit message from CVS:
+         one more suppression for FC4
+
+2006-04-10 16:58:24 +0000  Michael Smith <msmith@xiph.org>
+
+       * tests/check/gst-plugins-ugly.supp:
+         The AMR encoder sucks giant sucky things through a sucky object with a giant sucking machine. More suppressions.
+         Original commit message from CVS:
+         The AMR encoder sucks giant sucky things through a sucky object with a giant
+         sucking machine. More suppressions.
+
+2006-04-10 14:47:11 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         add test for amrnbenc, enable test infrastructure, and fix a leak
+         Original commit message from CVS:
+         add test for amrnbenc, enable test infrastructure, and fix a leak
+         * common/check.mak:
+         allow for specifying more than one suppressions file in SUPPRESSIONS
+         * Makefile.am:
+         * tests/Makefile.am:
+         * tests/check/.cvsignore:
+         * tests/check/Makefile.am:
+         * tests/check/elements/.cvsignore:
+         * configure.ac:
+         add tests/check
+         * tests/check/gst-plugins-ugly.supp:
+         add suppressions for libs used by -ugly
+         * tests/check/elements/amrnbenc.c: (buffer_new), (buffer_unref),
+         (setup_amrnbenc), (cleanup_amrnbenc), (push_data),
+         (GST_START_TEST), (amrnbenc_suite), (main):
+         add a simple test for encoding amr
+         * ext/amrnb/amrnbenc.c: (gst_amrnbenc_init):
+         fix pad template leaks
+
+2006-04-10 11:48:29 +0000  Michael Smith <msmith@xiph.org>
+
+         ext/amrnb/amrnbenc.c: Plug big leak in AMR encoder.
+         Original commit message from CVS:
+         * ext/amrnb/amrnbenc.c: (gst_amrnbenc_chain):
+         Plug big leak in AMR encoder.
+
+2006-04-09 18:09:40 +0000  Sébastien Moutte <sebastien@moutte.net>
+
+         ext/mad/gstmad.c: move GstIndexEntry *entry variable declaration before the first instruction
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (index_seek):
+         move GstIndexEntry *entry variable declaration before
+         the first instruction
+         * ext/mad/gstmad.c:
+         remove debug macros with variable number of parameter by using
+         GST_DEBUG for WIN32
+         * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_parse_subpic):
+         use gst_guint64_to_gdouble for conversions
+         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_sync_stream_to_time):
+         replace __FUNCTION__ which is not supported by MSVC by the current function name
+         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_reset):
+         remove LL suffix by using G_GINT64_CONSTANT
+         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead),(gst_mpeg_parse_get_rate):
+         use gst_guint64_to_gdouble for conversions
+         * gst/mpegstream/gstmpegparse.h:
+         remove LL suffix by using G_GINT64_CONSTANT
+         * win32/vs6:
+         add project files for tagac3parse, asfdemux, dvdlpcmdec, dvdsub, iec958, lame,
+         mad, mpegaudioparse, mpegstream, realmedia, synaesthesia
+
+2006-04-08 21:42:19 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         Fix #337365 (g_type_class_ref <-> g_type_class_peek_parent)
+         Original commit message from CVS:
+         * ext/amrnb/amrnbdec.c: (gst_amrnbdec_class_init):
+         * ext/amrnb/amrnbenc.c: (gst_amrnbenc_class_init):
+         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_class_init):
+         * ext/mad/gstmad.c: (gst_mad_class_init):
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_class_init):
+         * gst/ac3parse/gstac3parse.c: (gst_ac3parse_class_init):
+         * gst/asfdemux/gstasfmux.c: (gst_asfmux_class_init):
+         * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_class_init):
+         * gst/iec958/ac3iec.c: (ac3iec_class_init):
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_class_init):
+         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_class_init):
+         * gst/mpegstream/gstmpegclock.c: (gst_mpeg_clock_class_init):
+         * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_class_init):
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_class_init):
+         * gst/synaesthesia/gstsynaesthesia.c:
+         (gst_synaesthesia_class_init):
+         Fix #337365 (g_type_class_ref <-> g_type_class_peek_parent)
+
+2006-04-07 09:14:26 +0000  Fabrizio Gennari <fabrizio.ge@tiscali.it>
+
+         gst/asfdemux/gstasfdemux.c: Send newsegment event only once per pad, fixes #336550.
+         Original commit message from CVS:
+         Patch by: Fabrizio Gennari  <fabrizio dot ge at tiscali dot it>
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_sink_event),
+         (gst_asf_demux_push_buffer):
+         Send newsegment event only once per pad, fixes #336550.
+
+2006-04-06 11:35:26 +0000  j^ <j@bootlab.org>
+
+         Unify the long descriptions in the plugin details (#337263).
+         Original commit message from CVS:
+         Patch by: j^  <j at bootlab dot org>
+         * ext/amrwb/gstamrwbdec.c:
+         * ext/amrwb/gstamrwbenc.c:
+         * ext/amrwb/gstamrwbparse.c:
+         * ext/arts/gst_arts.c:
+         * ext/artsd/gstartsdsink.c:
+         * ext/audiofile/gstafparse.c:
+         * ext/audiofile/gstafsink.c:
+         * ext/audiofile/gstafsrc.c:
+         * ext/cdaudio/gstcdaudio.c:
+         * ext/directfb/dfbvideosink.c:
+         * ext/divx/gstdivxdec.c:
+         * ext/divx/gstdivxenc.c:
+         * ext/dts/gstdtsdec.c: (gst_dtsdec_base_init):
+         * ext/faac/gstfaac.c: (gst_faac_base_init):
+         * ext/faad/gstfaad.c:
+         * ext/gsm/gstgsmdec.c:
+         * ext/gsm/gstgsmenc.c:
+         * ext/hermes/gsthermescolorspace.c:
+         * ext/ivorbis/vorbisfile.c:
+         * ext/lcs/gstcolorspace.c:
+         * ext/libfame/gstlibfame.c:
+         * ext/libmms/gstmms.c: (gst_mms_base_init):
+         * ext/musicbrainz/gsttrm.c: (gst_musicbrainz_base_init):
+         * ext/nas/nassink.c: (gst_nassink_base_init):
+         * ext/neon/gstneonhttpsrc.c:
+         * ext/polyp/polypsink.c: (gst_polypsink_base_init):
+         * ext/sdl/sdlaudiosink.c:
+         * ext/sdl/sdlvideosink.c:
+         * ext/shout/gstshout.c:
+         * ext/snapshot/gstsnapshot.c:
+         * ext/sndfile/gstsf.c:
+         * ext/tarkin/gsttarkindec.c:
+         * ext/tarkin/gsttarkinenc.c:
+         * ext/theora/theoradec.c:
+         * ext/wavpack/gstwavpackdec.c: (gst_wavpack_dec_base_init):
+         * ext/wavpack/gstwavpackparse.c: (gst_wavpack_parse_base_init):
+         * ext/xvid/gstxviddec.c:
+         * ext/xvid/gstxvidenc.c:
+         * gst/cdxaparse/gstcdxaparse.c: (gst_cdxa_parse_base_init):
+         * gst/cdxaparse/gstcdxastrip.c: (gst_cdxastrip_base_init):
+         * gst/chart/gstchart.c:
+         * gst/equalizer/gstiirequalizer.c: (gst_iir_equalizer_base_init):
+         * gst/festival/gstfestival.c:
+         * gst/filter/gstiir.c:
+         * gst/filter/gstlpwsinc.c:
+         * gst/freeze/gstfreeze.c:
+         * gst/games/gstpuzzle.c: (gst_puzzle_base_init):
+         * gst/mixmatrix/mixmatrix.c:
+         * gst/mpeg1sys/gstmpeg1systemencode.c:
+         * gst/mpeg1videoparse/gstmp1videoparse.c:
+         * gst/mpeg2sub/gstmpeg2subt.c:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         * gst/multifilesink/gstmultifilesink.c:
+         * gst/overlay/gstoverlay.c:
+         * gst/passthrough/gstpassthrough.c:
+         * gst/playondemand/gstplayondemand.c:
+         * gst/qtdemux/qtdemux.c:
+         * gst/rtjpeg/gstrtjpegdec.c:
+         * gst/rtjpeg/gstrtjpegenc.c:
+         * gst/smooth/gstsmooth.c:
+         * gst/tta/gstttadec.c: (gst_tta_dec_base_init):
+         * gst/tta/gstttaparse.c: (gst_tta_parse_base_init):
+         * gst/videocrop/gstvideocrop.c:
+         * gst/videodrop/gstvideodrop.c:
+         * gst/virtualdub/gstxsharpen.c:
+         * gst/xingheader/gstxingmux.c: (gst_xing_mux_base_init):
+         * gst/y4m/gsty4mencode.c:
+         Unify the long descriptions in the plugin details (#337263).
+
+2006-04-05 10:02:34 +0000  Christian Schaller <uraeus@gnome.org>
+
+       * gst-plugins-ugly.spec.in:
+         fix version numbering
+         Original commit message from CVS:
+         fix version numbering
+
+2006-04-05 09:18:35 +0000  Christian Schaller <uraeus@gnome.org>
+
+       * common:
+       * gst-plugins-ugly.spec.in:
+         add dvdsub plugin to spec
+         Original commit message from CVS:
+         add dvdsub plugin to spec
+
+2006-04-01 15:43:46 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         docs/plugins/: add siddec
+         Original commit message from CVS:
+         * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+         * docs/plugins/inspect/plugin-siddec.xml:
+         add siddec
+         * ext/dvdnav/dvdnavsrc.c:
+         doc fixes
+
+2006-04-01 15:30:56 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * common:
+       * configure.ac:
+       * ext/sidplay/Makefile.am:
+         disable use of AS_LIBTOOL_TAGS, it doesn't work correctly
+         Original commit message from CVS:
+         disable use of AS_LIBTOOL_TAGS, it doesn't work correctly
+
+2006-04-01 14:08:36 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * docs/plugins/.gitignore:
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+         ignore more
+         Original commit message from CVS:
+         ignore more
+
+2006-04-01 14:08:11 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * common:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-asf.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-dvdread.xml:
+       * docs/plugins/inspect/plugin-dvdsub.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-mpegstream.xml:
+       * docs/plugins/inspect/plugin-rmdemux.xml:
+         update plugin inspect files
+         Original commit message from CVS:
+         update plugin inspect files
+
+2006-04-01 10:09:10 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * gst/mpegaudioparse/gstxingmux.c:
+         rework build; add translations for v4l2
+         Original commit message from CVS:
+         rework build; add translations for v4l2
+
+2006-04-01 09:54:39 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         configure.ac: rework similarly to other modules
+         Original commit message from CVS:
+         * configure.ac:
+         rework similarly to other modules
+         * ext/a52dec/gsta52dec.c:
+         * ext/amrnb/amrnb.c:
+         * ext/dvdnav/dvdnavsrc.c:
+         * ext/dvdread/dvdreadsrc.c:
+         * ext/lame/gstlame.c:
+         * ext/mad/gstid3tag.c:
+         * ext/mpeg2dec/gstmpeg2dec.c:
+         * ext/sidplay/gstsiddec.cc:
+         * gst/asfdemux/gstasf.c:
+         * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+         * gst/dvdsub/gstdvdsubdec.c:
+         * gst/iec958/ac3iec.c:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         * gst/mpegstream/gstmpegstream.c:
+         * gst/realmedia/rmdemux.c: (plugin_init):
+         use the correct defines
+
+2006-04-01 09:53:17 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * common:
+       * docs/.gitignore:
+       * docs/plugins/.gitignore:
+         ignore more
+         Original commit message from CVS:
+         ignore more
+
+2006-03-31 11:13:50 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ChangeLog:
+       * common:
+       * configure.ac:
+         back to HEAD
+         Original commit message from CVS:
+         back to HEAD
+
+=== release 0.10.3 ===
+
+2006-03-31 11:10:46 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.signals:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-rmdemux.xml:
+         releasing 0.10.3
+         Original commit message from CVS:
+         releasing 0.10.3
+
+2006-03-30 15:37:00 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         better/unified long descriptions
+         Original commit message from CVS:
+         * ext/aalib/gstaasink.c:
+         * ext/annodex/gstcmmldec.c:
+         * ext/annodex/gstcmmlenc.c:
+         * ext/cairo/gsttextoverlay.c:
+         * ext/cairo/gsttimeoverlay.c:
+         * ext/cdio/gstcdiocddasrc.c:
+         * ext/dv/gstdvdec.c:
+         * ext/esd/esdmon.c:
+         * ext/esd/esdsink.c:
+         * ext/flac/gstflacdec.c:
+         * ext/flac/gstflacenc.c:
+         * ext/flac/gstflactag.c:
+         * ext/gconf/gstgconfaudiosink.c: (gst_gconf_audio_sink_base_init):
+         * ext/gconf/gstgconfaudiosrc.c: (gst_gconf_audio_src_base_init):
+         * ext/gconf/gstgconfvideosink.c: (gst_gconf_video_sink_base_init):
+         * ext/gconf/gstgconfvideosrc.c: (gst_gconf_video_src_base_init):
+         * ext/gdk_pixbuf/gstgdkpixbuf.c:
+         * ext/gdk_pixbuf/pixbufscale.c:
+         * ext/hal/gsthalaudiosink.c: (gst_hal_audio_sink_base_init):
+         * ext/hal/gsthalaudiosrc.c: (gst_hal_audio_src_base_init):
+         * ext/jpeg/gstjpegdec.c:
+         * ext/jpeg/gstjpegenc.c:
+         * ext/jpeg/gstsmokedec.c:
+         * ext/jpeg/gstsmokeenc.c:
+         * ext/libcaca/gstcacasink.c:
+         * ext/libmng/gstmngdec.c:
+         * ext/libmng/gstmngenc.c:
+         * ext/libpng/gstpngdec.c:
+         * ext/libpng/gstpngenc.c:
+         * ext/mikmod/gstmikmod.c:
+         * ext/raw1394/gstdv1394src.c:
+         * ext/shout2/gstshout2.c:
+         * ext/speex/gstspeexdec.c:
+         * ext/speex/gstspeexenc.c:
+         * gst/alpha/gstalpha.c:
+         * gst/alpha/gstalphacolor.c:
+         * gst/auparse/gstauparse.c:
+         * gst/autodetect/gstautoaudiosink.c:
+         (gst_auto_audio_sink_base_init):
+         * gst/autodetect/gstautovideosink.c:
+         (gst_auto_video_sink_base_init):
+         * gst/avi/gstavimux.c: (gst_avimux_base_init):
+         * gst/cutter/gstcutter.c:
+         * gst/debug/breakmydata.c:
+         * gst/debug/efence.c:
+         * gst/debug/gstnavigationtest.c:
+         * gst/debug/negotiation.c:
+         * gst/debug/progressreport.c:
+         * gst/debug/testplugin.c:
+         * gst/effectv/gstaging.c:
+         * gst/effectv/gstdice.c:
+         * gst/effectv/gstedge.c:
+         * gst/effectv/gstquark.c:
+         * gst/effectv/gstrev.c:
+         * gst/effectv/gstvertigo.c:
+         * gst/effectv/gstwarp.c:
+         * gst/flx/gstflxdec.c:
+         * gst/goom/gstgoom.c:
+         * gst/interleave/deinterleave.c:
+         * gst/interleave/interleave.c:
+         * gst/law/alaw-decode.c: (gst_alawdec_base_init):
+         * gst/law/alaw-encode.c: (gst_alawenc_base_init):
+         * gst/law/mulaw-decode.c: (gst_mulawdec_base_init):
+         * gst/law/mulaw-encode.c: (gst_mulawenc_base_init):
+         * gst/level/gstlevel.c:
+         * gst/matroska/matroska-demux.c: (gst_matroska_demux_base_init):
+         * gst/matroska/matroska-mux.c: (gst_matroska_mux_base_init):
+         * gst/median/gstmedian.c:
+         * gst/monoscope/gstmonoscope.c:
+         * gst/multipart/multipartdemux.c:
+         * gst/multipart/multipartmux.c:
+         * gst/oldcore/gstmd5sink.c:
+         * gst/oldcore/gstmultifilesrc.c:
+         * gst/oldcore/gstpipefilter.c:
+         * gst/oldcore/gstshaper.c:
+         * gst/oldcore/gststatistics.c:
+         * gst/rtp/gstasteriskh263.c:
+         * gst/rtp/gstrtpL16depay.c:
+         * gst/rtp/gstrtpL16pay.c:
+         * gst/rtp/gstrtpamrdepay.c:
+         * gst/rtp/gstrtpamrpay.c:
+         * gst/rtp/gstrtpdepay.c:
+         * gst/rtp/gstrtpgsmpay.c:
+         * gst/rtp/gstrtph263pay.c:
+         * gst/rtp/gstrtph263pdepay.c:
+         * gst/rtp/gstrtph263ppay.c:
+         * gst/rtp/gstrtpmp4gpay.c:
+         * gst/rtp/gstrtpmp4vdepay.c:
+         * gst/rtp/gstrtpmp4vpay.c:
+         * gst/rtp/gstrtpmpadepay.c:
+         * gst/rtp/gstrtpmpapay.c:
+         * gst/rtp/gstrtppcmadepay.c:
+         * gst/rtp/gstrtppcmapay.c:
+         * gst/rtp/gstrtppcmudepay.c:
+         * gst/rtp/gstrtppcmupay.c:
+         * gst/rtp/gstrtpspeexdepay.c:
+         * gst/rtp/gstrtpspeexpay.c:
+         * gst/rtsp/gstrtpdec.c:
+         * gst/smpte/gstsmpte.c:
+         * gst/videobox/gstvideobox.c:
+         * gst/videofilter/gstgamma.c: (gst_gamma_base_init):
+         * gst/videofilter/gstvideobalance.c:
+         * gst/videofilter/gstvideoflip.c:
+         * gst/videofilter/gstvideotemplate.c:
+         (gst_videotemplate_base_init):
+         * gst/videomixer/videomixer.c:
+         * gst/wavenc/gstwavenc.c:
+         * gst/wavparse/gstwavparse.c: (gst_wavparse_base_init):
+         better/unified long descriptions
+         Fixed #336602
+         Some cleanups to auparse, don't send multiple newsegments.
+
+2006-03-29 11:31:55 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/mpegstream/gstmpegparse.c: Don't unref event unconditionally after giving away ownership (gst_pad_push_event(), g...
+         Original commit message from CVS:
+         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_handle_src_event):
+         Don't unref event unconditionally after giving away ownership
+         (gst_pad_push_event(), gst_pad_send_event() and
+         gst_pad_event_default() take ownership of the event
+         passed to them). Fixes warnings/crashes caused by
+         navigation events.
+
+2006-03-28 20:19:31 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/mpegstream/gstmpegdemux.c: Don't ref NULL caps (private streams have NULL caps) (#336387); also, no need to set c...
+         Original commit message from CVS:
+         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer):
+         Don't ref NULL caps (private streams have NULL caps) (#336387);
+         also, no need to set caps on the same buffer twice.
+
+2006-03-28 19:44:51 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/mpegstream/: Don't leak element and pad names in error messages, use
+         Original commit message from CVS:
+         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_event),
+         (gst_dvd_demux_handle_dvd_event), (gst_dvd_demux_get_audio_stream),
+         (gst_dvd_demux_get_subpicture_stream):
+         * gst/mpegstream/gstmpegdemux.c:
+         (gst_mpeg_demux_sync_stream_to_time):
+         Don't leak element and pad names in error messages, use
+         GST_DEBUG_PAD_NAME instead. Add some more debug code.
+
+2006-03-28 19:29:39 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/dvdread/dvdreadsrc.c: Name the structure in the custom event with the language codes for the audio and subtitle s...
+         Original commit message from CVS:
+         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_init),
+         (gst_dvd_read_src_goto_title), (gst_dvd_read_src_read):
+         Name the structure in the custom event with the
+         language codes for the audio and subtitle streams
+         actually like dvddemux expects it to be named.
+         Set caps on source pad and outgoing buffers.
+
+2006-03-28 16:06:05 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/lame/gstlame.*: Make xingheader property non-functional, it's broken anyway after all (use xingmux instead).
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_init), (gst_lame_set_property),
+         (gst_lame_get_property), (gst_lame_setup):
+         * ext/lame/gstlame.h:
+         Make xingheader property non-functional, it's broken anyway
+         after all (use xingmux instead).
+
+2006-03-28 15:10:18 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/lame/gstlame.c: On EOS, flush encoder and send remaining data. Fix return value handling in sink event function.
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_sink_event):
+         On EOS, flush encoder and send remaining data. Fix
+         return value handling in sink event function.
+
+2006-03-27 14:04:08 +0000  Jürg Billeter <j@bitron.ch>
+
+         ext/dvdread/dvdreadsrc.c: Fix wrong check for started flag when setting the 'device' property.
+         Original commit message from CVS:
+         Patch by: Jürg Billeter  <j at bitron dot ch>
+         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_set_property):
+         Fix wrong check for started flag when setting the 'device' property.
+         We want to allow it when the source is NOT started yet and ignore it
+         when the source is running.
+
+2006-03-27 10:39:03 +0000  Fabrizio Gennari <fabrizio.ge@tiscali.it>
+
+         gst/asfdemux/gstasfdemux.*: Subtract first timestamp from timestamps, so that stream starts from 0; makes live stream...
+         Original commit message from CVS:
+         Patch by: Fabrizio Gennari  <fabrizio dot ge at tiscali dot it>
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_setup_pad),
+         (gst_asf_demux_process_chunk):
+         * gst/asfdemux/gstasfdemux.h:
+         Subtract first timestamp from timestamps, so that
+         stream starts from 0; makes live streams that don't
+         start at 0 work again (fixes #317310, #336097).
+
+2006-03-27 10:09:43 +0000  Christian Kirbach <christian.kirbach@googlemail.com>
+
+         configure.ac: Remove CXX tag from AS_LIBTOOL_TAGS, just like we did for
+         Original commit message from CVS:
+         Patch by: Christian Kirbach
+         * configure.ac:
+         Remove CXX tag from AS_LIBTOOL_TAGS, just like we did for
+         -good. Fixes build on some systems (#331838).
+
+2006-03-24 19:47:37 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/realmedia/rmdemux.c: Extract more tags and also post codec name tag on the bus so this shows up in totem and naut...
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
+         (gst_rmdemux_parse_cont):
+         Extract more tags and also post codec name tag on the
+         bus so this shows up in totem and nautilus.
+
+2006-03-24 19:06:41 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/realmedia/rmdemux.c: Extra data usually goes into the caps as 'codec_data', not as first buffer into the stream.
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
+         (gst_rmdemux_fill_audio_packet), (gst_rmdemux_parse_packet):
+         Extra data usually goes into the caps as 'codec_data', not
+         as first buffer into the stream.
+         Need to byte swap AC3 content in realmedia files for some
+         reason (fixes #331588).
+
+2006-03-24 12:08:39 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/realmedia/rmdemux.c: When operating in pull mode, post an error message on the bus when all source pads are unlin...
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_init),
+         (gst_rmdemux_validate_offset), (gst_rmdemux_loop),
+         (gst_rmdemux_parse_mdpr), (gst_rmdemux_parse_packet):
+         When operating in pull mode, post an error message on the
+         bus when all source pads are unlinked or some other fatal
+         error occured (#323023). Regrade some recurring debug messages
+         to LOG level. Convert c++-style comments into C-style ones.
+
+2006-03-24 11:42:31 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/realmedia/rmdemux.*: Handle unlinked source pads properly and stop if all source pads are unlinked (#323023).
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_perform_seek),
+         (gst_rmdemux_loop), (gst_rmdemux_chain), (gst_rmdemux_send_event),
+         (gst_rmdemux_all_source_pads_unlinked),
+         (gst_rmdemux_at_least_one_stream_flowok), (gst_rmdemux_add_stream),
+         (gst_rmdemux_parse_packet):
+         * gst/realmedia/rmdemux.h:
+         Handle unlinked source pads properly and stop if all source pads
+         are unlinked (#323023).
+
+2006-03-23 18:17:34 +0000  Michal Benes <michal.benes@xeris.cz>
+
+         gst/mpegstream/: Timestamps in mpeg stream are 32-bit numbers. Therefore, with a clock_freq of 90kHz this timestamp o...
+         Original commit message from CVS:
+         Patch by: Michal Benes <michal dot benes at xeris dot cz>
+         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_init),
+         (gst_mpeg_demux_parse_packet), (gst_mpeg_demux_parse_pes),
+         (gst_mpeg_demux_send_subbuffer), (gst_mpeg_demux_reset):
+         * gst/mpegstream/gstmpegdemux.h:
+         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead):
+         Timestamps in mpeg stream are 32-bit numbers. Therefore, with a
+         clock_freq of 90kHz this timestamp overflows every ~13 hours. This
+         situation really happens when grabbing DVB streams. Current
+         mpegdemuxer can not handle this situation correctly and it
+         restarts counting gstreamer timestamps from zero.
+         Fixes #326598.
+
+2006-03-15 22:01:40 +0000  Michael Smith <msmith@xiph.org>
+
+         ext/a52dec/gsta52dec.*: Fix #334550: failure to play raw AC3 files due to segment problems.
+         Original commit message from CVS:
+         * ext/a52dec/gsta52dec.c: (gst_a52dec_sink_event),
+         (gst_a52dec_chain_raw), (gst_a52dec_change_state):
+         * ext/a52dec/gsta52dec.h:
+         Fix #334550: failure to play raw AC3 files due to segment problems.
+
+2006-03-15 13:43:42 +0000  Christophe Fergeau <teuf@gnome.org>
+
+         ext/lame/gstlame.c: use GST_DEBUG_FUNCPTR more often.
+         Original commit message from CVS:
+         Patch by: Christophe Fergeau  <teuf gnome org>
+         * ext/lame/gstlame.c: (gst_lame_release_memory),
+         (gst_lame_finalize), (gst_lame_class_init),
+         (gst_lame_sink_setcaps), (gst_lame_init), (gst_lame_sink_event),
+         (gst_lame_change_state):
+         Fix some memory leaks (#333345), use GST_DEBUG_FUNCPTR more often.
+
+2006-03-14 19:41:17 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/mad/gstmad.c: Include AUDIO_CODEC tag with tags posted if input is not framed (#334258). Use _scale() util functi...
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (gst_mad_convert_sink), (gst_mad_update_info),
+         (gst_mad_sink_event), (gst_mad_change_state):
+         Include AUDIO_CODEC tag with tags posted if input is not
+         framed (#334258). Use _scale() util functions in more places.
+
+2006-03-12 11:00:33 +0000  Christophe Fergeau <teuf@gnome.org>
+
+         ext/lame/gstlame.c: mark the xing-header property as BROKEN (see http://bugzilla.gnome.org/show_bug.cgi?id=330317#c19...
+         Original commit message from CVS:
+         2006-03-12  Christophe Fergeau  <teuf@gnome.org>
+         Reviewed by: Tim-Philipp Müller  <tim at centricular dot net>
+         * ext/lame/gstlame.c: (gst_lame_class_init): mark the xing-header
+         property as BROKEN (see
+         http://bugzilla.gnome.org/show_bug.cgi?id=330317#c19 for an
+         explanation why it's broken).
+
+2006-03-11 11:12:30 +0000  Christophe Fergeau <teuf@gnome.org>
+
+         added new element to add Xing headers to MP3 files (this allows decoder to figure out the length of VBR files)
+         Original commit message from CVS:
+         2006-03-11  Christophe Fergeau  <teuf@gnome.org>
+         Reviewed by: Tim-Philipp Müller  <tim at centricular dot net>
+         * configure.ac:
+         * gst/xingheader/Makefile.am:
+         * gst/xingheader/gstxingmux.c:
+         * gst/xingheader/gstxingmux.h: added new element to add Xing headers
+         to MP3 files (this allows decoder to figure out the length of VBR
+         files)
+
+2006-03-07 11:19:55 +0000  Alex Lancaster <alexlan@fedoraproject.org>
+
+         ext/mad/gstid3tag.c: Add support for writing the GST_TAG_ALBUM_VOLUME_NUMBER
+         Original commit message from CVS:
+         * ext/mad/gstid3tag.c: (tag_list_to_id3_tag_foreach):
+         Add support for writing the GST_TAG_ALBUM_VOLUME_NUMBER
+         tag (#333683, patch by: Alex Lancaster).
+
+2006-03-02 20:03:00 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/amrnb/: Further fancyfication.
+         Original commit message from CVS:
+         * ext/amrnb/amrnbdec.c: (gst_amrnbdec_init),
+         (gst_amrnbdec_setcaps), (gst_amrnbdec_chain),
+         (gst_amrnbdec_state_change):
+         * ext/amrnb/amrnbenc.c: (gst_amrnbenc_init),
+         (gst_amrnbenc_setcaps), (gst_amrnbenc_chain),
+         (gst_amrnbenc_state_change):
+         * ext/amrnb/amrnbenc.h:
+         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
+         (gst_amrnbparse_query):
+         Further fancyfication.
+         Use _take to get writable data from the adapter.
+         Precalc packet duration.
+         Handle disconts.
+         Forward _push to upstream.
+         Post error messages when something goes wrong.
+         Remove old code in amrnbparse.
+         Don't ignore query results from upstream.
+
+2006-03-02 18:45:40 +0000  Michael Smith <msmith@xiph.org>
+
+         ext/amrnb/amrnbenc.c: The AMR encoder writes into the audio buffers it processes, so use gst_buffer_make_writable() o...
+         Original commit message from CVS:
+         * ext/amrnb/amrnbenc.c: (gst_amrnbenc_chain):
+         The AMR encoder writes into the audio buffers it processes, so
+         use gst_buffer_make_writable() on buffers we might (they go through
+         an adapter, so there can be copying going on later anyway) be
+         encoding.
+
+2006-03-01 12:35:09 +0000  Jens Granseuer <jensgr@gmx.net>
+
+         gst/mpegstream/gstmpegparse.c: Declare variables at the beginning of a block and make
+         Original commit message from CVS:
+         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_pad_added),
+         (gst_mpeg_parse_handle_src_query):
+         Declare variables at the beginning of a block and make
+         gcc-2.9x happy (fixes #328957; patch by: Jens Granseuer).
+
+2006-03-01 09:55:49 +0000  Fabrizio <fabrizio.ge@tiscali.it>
+
+         gst/asfdemux/gstasfdemux.c: Read packet size, sequence and padsize in right order again
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_data):
+         Read packet size, sequence and padsize in right order again
+         (fixes #332796; patch by: Fabrizio Gennari).
+
+2006-02-28 13:50:02 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         gst/iec958/ac3iec.c: Set a proper klass (Codec/Muxer/Audio) for the ElementDetails.
+         Original commit message from CVS:
+         * gst/iec958/ac3iec.c:
+         Set a proper klass (Codec/Muxer/Audio) for the ElementDetails.
+
+2006-02-27 18:37:47 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         configure.ac: Make the id3tag and mad checks check for both a header and the appropriate library if the pkg-config is...
+         Original commit message from CVS:
+         * configure.ac:
+         Make the id3tag and mad checks check for both a header and the
+         appropriate library if the pkg-config is missing. (Closes #331842)
+         Split the id3tag and mad checks into 2 pieces. Sometime soon I might
+         do the same for the plugins themselves.
+
+2006-02-27 14:49:05 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/mpeg2dec/gstmpeg2dec.*: Don't treat STATE_INVALID as fatal error; throw an error only after five consecutive deco...
+         Original commit message from CVS:
+         Reviewed by: Tim-Philipp Müller  <tim at centricular dot net>
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
+         (gst_mpeg2dec_reset), (gst_mpeg2dec_chain):
+         * ext/mpeg2dec/gstmpeg2dec.h:
+         Don't treat STATE_INVALID as fatal error; throw an error
+         only after five consecutive decoding errors. Makes decoding
+         mpeg streams more robust and fixes playback of joined clips
+         (#300682).
+
+2006-02-26 22:33:33 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/dvdnav/dvdnavsrc.h: Oops. forgot to add this one.
+         Original commit message from CVS:
+         * ext/dvdnav/dvdnavsrc.h:
+         Oops. forgot to add this one.
+
+2006-02-26 21:25:01 +0000  Julien Moutte <julien@moutte.net>
+
+         ext/Makefile.am: Fix dist-check.
+         Original commit message from CVS:
+         2006-02-26  Julien MOUTTE  <julien@moutte.net>
+         * ext/Makefile.am: Fix dist-check.
+
+2006-02-26 18:01:15 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         configure.ac: Disable dvdnavsrc for now.
+         Original commit message from CVS:
+         * configure.ac:
+         Disable dvdnavsrc for now.
+
+2006-02-26 17:55:05 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         dvdnavsrc ported to 0.10, for the most part at least. Not quite ready for prime time yet though.
+         Original commit message from CVS:
+         * configure.ac:
+         * ext/Makefile.am:
+         * ext/dvdnav/Makefile.am:
+         * ext/dvdnav/dvdnavsrc.c: (gst_dvd_nav_src_base_init),
+         (gst_dvd_nav_src_class_init), (gst_dvd_nav_src_check_get_range),
+         (gst_dvd_nav_src_init), (gst_dvd_nav_src_finalize),
+         (gst_dvd_nav_src_is_open), (gst_dvd_nav_src_set_property),
+         (gst_dvd_nav_src_get_property), (gst_dvd_nav_src_set_clock),
+         (gst_dvd_nav_src_tca_seek), (gst_dvd_nav_src_update_streaminfo),
+         (gst_dvd_nav_src_set_domain), (gst_dvd_nav_src_update_highlight),
+         (gst_dvd_nav_src_user_op), (dvdnav_get_event_name),
+         (dvdnav_get_read_domain_name), (gst_dvd_nav_src_print_event),
+         (gst_dvd_nav_src_make_dvd_event),
+         (gst_dvd_nav_src_structure_set_uint64),
+         (gst_dvd_nav_src_push_dvd_nav_packet_event),
+         (gst_dvd_nav_src_push_clut_change_event), (read_vts_info),
+         (gst_dvd_nav_src_push_titlelang_event),
+         (gst_dvd_nav_src_process_next_block), (gst_dvd_nav_src_create),
+         (gst_dvd_nav_src_start), (gst_dvd_nav_src_stop),
+         (gst_dvd_nav_src_handle_navigation_event),
+         (gst_dvd_nav_src_handle_seek_event), (gst_dvd_nav_src_src_event),
+         (gst_dvd_nav_src_query_position), (gst_dvd_nav_src_query_duration),
+         (gst_dvd_nav_src_query), (gst_dvd_nav_src_uri_get_type),
+         (gst_dvd_nav_src_uri_get_protocols), (gst_dvd_nav_src_uri_get_uri),
+         (gst_dvd_nav_src_uri_set_uri), (gst_dvd_nav_src_uri_handler_init),
+         (gst_dvd_nav_src_do_init), (plugin_init):
+         dvdnavsrc ported to 0.10, for the most part at least. Not quite
+         ready for prime time yet though.
+
+2006-02-23 20:08:58 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/cdio/Makefile.am: Add GST_BASE_CFLAGS and GST_BASE_LIBS (seems to be required for Cygwin, see #317048)
+         Original commit message from CVS:
+         * ext/cdio/Makefile.am:
+         Add GST_BASE_CFLAGS and GST_BASE_LIBS (seems to be
+         required for Cygwin, see #317048)
+         * gst/rtp/gstasteriskh263.c:
+         Cygwin has includes for both the unix network socket API
+         and the windows API, but only one can be included, so fix
+         includes to only use one or the other, prefering the unxi
+         one (#317048).
+
+2006-02-22 14:54:54 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         Port dvdsubdec to 0.10
+         Original commit message from CVS:
+         * configure.ac:
+         * gst/dvdsub/Makefile.am:
+         * gst/dvdsub/gstdvdsubdec.c: (gst_dvd_sub_dec_base_init),
+         (gst_dvd_sub_dec_class_init), (gst_dvd_sub_dec_init),
+         (gst_dvd_sub_dec_finalize), (gst_dvd_sub_dec_src_event),
+         (gst_dvd_sub_dec_get_event_delay), (gst_dvd_sub_dec_parse_subpic),
+         (gst_get_nibble), (gst_setup_palette), (gst_get_rle_code),
+         (gst_draw_rle_line), (gst_dvd_sub_dec_merge_title),
+         (gst_send_empty_fill), (gst_send_subtitle_frame),
+         (gst_dvd_sub_dec_advance_time), (gst_dvd_sub_dec_chain),
+         (gst_dvd_sub_dec_sink_event), (gst_dvd_sub_dec_handle_dvd_event),
+         (plugin_init):
+         * gst/dvdsub/gstdvdsubdec.h:
+         Port dvdsubdec to 0.10
+
+2006-02-21 16:24:10 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         gst/mpegstream/gstdvddemux.c: Push the rank up to SECONDARY+1 so that dvddemux is preferred over mpegdemux for MPEG-2...
+         Original commit message from CVS:
+         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_plugin_init):
+         Push the rank up to SECONDARY+1 so that dvddemux is preferred over
+         mpegdemux for MPEG-2 video streams.
+
+2006-02-20 19:16:10 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         configure.ac: Bump nano back to CVS
+         Original commit message from CVS:
+         * configure.ac:
+         Bump nano back to CVS
+
+=== release 0.10.2 ===
+
+2006-02-20 19:13:54 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         configure.ac: releasing 0.10.2, "Season to Taste"
+         Original commit message from CVS:
+         * configure.ac:
+         releasing 0.10.2, "Season to Taste"
+
+2006-02-19 23:45:34 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         configure.ac: releasing 0.10.1.3 prelease for 0.10.2
+         Original commit message from CVS:
+         * configure.ac:
+         releasing 0.10.1.3 prelease for 0.10.2
+
+2006-02-17 17:58:44 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/asfdemux/gstasfdemux.c: In sink event handler, release object lock again _before_ sending EOS event downstream (#...
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_sink_event):
+         In sink event handler, release object lock again
+         _before_ sending EOS event downstream (#313838).
+
+2006-02-17 17:54:37 +0000  Christian Schaller <uraeus@gnome.org>
+
+       * ChangeLog:
+       * gst/asfdemux/gstasf.c:
+         fix rank of asfdemux
+         Original commit message from CVS:
+         fix rank of asfdemux
+
+2006-02-17 15:08:28 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         configure.ac: releasing 0.10.1.2 prelease for 0.10.2
+         Original commit message from CVS:
+         * configure.ac:
+         releasing 0.10.1.2 prelease for 0.10.2
+
+2006-02-17 15:02:30 +0000  Christian Schaller <uraeus@gnome.org>
+
+       * gst-plugins-ugly.spec.in:
+         latest updates
+         Original commit message from CVS:
+         latest updates
+
+2006-02-17 11:51:12 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/mpeg2dec/gstmpeg2dec.c: When we need to crop the output buffer, make sure we create a buffer of the right size an...
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c: (crop_copy_i420_buffer),
+         (crop_copy_i422_buffer), (crop_buffer):
+         When we need to crop the output buffer, make sure we
+         create a buffer of the right size and respect the implicit
+         striding used for I420 elsewhere in GStreamer (#331301).
+
+2006-02-17 11:19:34 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/cdio/gstcdio.c: Init debug category (#331253).
+         Original commit message from CVS:
+         * ext/cdio/gstcdio.c: (plugin_init):
+         Init debug category (#331253).
+
+2006-02-17 10:24:56 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         gst/asfdemux/gstasfdemux.c: Do not error out on non-recognized streams. Ignore them and allow playback of the other s...
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_stream):
+         Do not error out on non-recognized streams. Ignore them and allow
+         playback of the other streams.
+
+2006-02-17 10:10:40 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         gst/dvdlpcmdec/gstdvdlpcmdec.c: Add a small sanity check for LPCM reading.
+         Original commit message from CVS:
+         * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain_dvd):
+         Add a small sanity check for LPCM reading.
+
+2006-02-17 09:54:43 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         gst/asfdemux/gstasfdemux.c: Take into account the file properties preroll value for timestamping/newsegment. It's wei...
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_file):
+         Take into account the file properties preroll value for
+         timestamping/newsegment. It's weird this value was commented out.
+
+2006-02-16 17:57:59 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/asfdemux/Makefile.am: More asf makefile fixing.
+         Original commit message from CVS:
+         * gst/asfdemux/Makefile.am:
+         More asf makefile fixing.
+
+2006-02-16 17:16:06 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/lame/gstlame.c: Fix up lame a bit.
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_init), (gst_lame_chain),
+         (gst_lame_change_state):
+         Fix up lame a bit.
+         Apply patch #319782 by Gautier Portet.
+
+2006-02-16 11:14:11 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         gst/asfdemux/Makefile.am: But we do need to link against the riff libraryr.
+         Original commit message from CVS:
+         * gst/asfdemux/Makefile.am:
+         But we do need to link against the riff libraryr.
+
+2006-02-16 11:08:51 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         gst/asfdemux/Makefile.am: We don't want asfmux.c yet.
+         Original commit message from CVS:
+         * gst/asfdemux/Makefile.am:
+         We don't want asfmux.c yet.
+
+2006-02-16 09:50:43 +0000  Jon Trowbridge <trow@ximian.com>
+
+         ext/mad/gstmad.c: Port fixes for bugs 314771, 308772, 140237, and 302625
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (gst_mad_init), (scale), (gst_mad_update_info),
+         (gst_mad_sink_event), (gst_mad_check_caps_reset), (gst_mad_chain),
+         (gst_mad_change_state):
+         Port fixes for bugs 314771, 308772, 140237, and 302625
+         from 0.8 (Patch by Jonathan Matthew, Fixes #329575)
+         Use GST_EVENT_FLUSH_STOP to clear data from the current input
+         buffer, to avoid using it for any future decoding.
+
+2006-02-15 15:48:07 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         asfdemux ported to 0.10. Does still need a bit of work (seems like there's something funky going on when timestamping...
+         Original commit message from CVS:
+         * configure.ac:
+         * gst/asfdemux/asfheaders.c: (gst_asf_identify_guid),
+         (gst_asf_get_guid_nick):
+         * gst/asfdemux/asfheaders.h:
+         * gst/asfdemux/gstasf.c: (plugin_init):
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init),
+         (gst_asf_demux_class_init), (gst_asf_demux_init),
+         (gst_asf_demux_sink_event), (gst_asf_demux_handle_seek_event),
+         (gst_asf_demux_handle_src_event),
+         (gst_asf_demux_get_current_offset), (gst_asf_demux_chain),
+         (gst_asf_demux_skip_bytes), (gst_asf_demux_identify_guid),
+         (gst_asf_demux_get_uint8), (gst_asf_demux_get_uint16),
+         (gst_asf_demux_get_uint32), (gst_asf_demux_get_uint64),
+         (gst_asf_demux_get_var_length), (gst_asf_demux_get_buffer),
+         (gst_asf_demux_get_bytes), (gst_asf_demux_get_string),
+         (gst_asf_demux_get_guid), (gst_asf_demux_get_obj_file),
+         (gst_asf_demux_get_bitrate_record),
+         (gst_asf_demux_get_obj_comment), (gst_asf_demux_get_obj_header),
+         (gst_asf_demux_get_obj_header_ext), (gst_asf_demux_get_obj_stream),
+         (gst_asf_demux_get_replicated_data), (gst_asf_demux_get_obj_data),
+         (gst_asf_demux_get_obj_data_correction),
+         (gst_asf_demux_get_stream_audio),
+         (gst_asf_demux_get_stream_correction),
+         (gst_asf_demux_get_stream_video),
+         (gst_asf_demux_get_stream_video_format),
+         (gst_asf_demux_get_stream), (gst_asf_demux_setup_pad),
+         (gst_asf_demux_add_audio_stream), (gst_asf_demux_add_video_stream),
+         (gst_asf_demux_process_stream),
+         (gst_asf_demux_get_gst_tag_from_tag_name),
+         (gst_asf_demux_commit_taglist),
+         (gst_asf_demux_process_ext_content_desc),
+         (gst_asf_demux_get_object_header), (gst_asf_demux_process_data),
+         (gst_asf_demux_process_header), (gst_asf_demux_process_file),
+         (gst_asf_demux_process_comment),
+         (gst_asf_demux_process_bitrate_props_object),
+         (gst_asf_demux_process_header_ext), (gst_asf_demux_process_object),
+         (gst_asf_demux_descramble_segment),
+         (gst_asf_demux_element_send_event),
+         (gst_asf_demux_send_event_unlocked), (gst_asf_demux_push_buffer),
+         (gst_asf_demux_process_chunk), (gst_asf_demux_process_segment),
+         (gst_asf_demux_handle_data), (gst_asf_demux_parse_data),
+         (gst_asf_demux_get_src_query_types),
+         (gst_asf_demux_handle_src_query), (gst_asf_demux_change_state):
+         * gst/asfdemux/gstasfdemux.h:
+         asfdemux ported to 0.10. Does still need a bit of work (seems like
+         there's something funky going on when timestamping video frames).
+         The seeking code is likely to make Wim cry, but hey, at least it
+         compiles.
+
+2006-02-15 10:18:39 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/amrnb/amrnbdec.c: Some more comments.
+         Original commit message from CVS:
+         * ext/amrnb/amrnbdec.c: (gst_amrnbdec_setcaps),
+         (gst_amrnbdec_chain), (gst_amrnbdec_state_change):
+         Some more comments.
+         * ext/mpeg2dec/gstmpeg2dec.c: (crop_buffer), (handle_slice):
+         Applied patch from Fabrizio Gennari, fixes #330844.
+
+2006-02-14 14:57:18 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/dvdread/dvdreadsrc.*: Let's try to play the title the user set via the URI handler or via properties instead of a...
+         Original commit message from CVS:
+         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_init),
+         (gst_dvd_read_src_class_init), (gst_dvd_read_src_start),
+         (gst_dvd_read_src_stop), (gst_dvd_read_src_goto_title),
+         (gst_dvd_read_src_set_property), (gst_dvd_read_src_get_property),
+         (gst_dvd_read_src_uri_get_uri), (gst_dvd_read_src_uri_set_uri):
+         * ext/dvdread/dvdreadsrc.h:
+         Let's try to play the title the user set via the URI handler or
+         via properties instead of always playing the first title. Also,
+         Also, count title/chapter/angle number in URI and properties
+         from 1 rather than 0.
+
+2006-02-13 14:09:26 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/dvdread/dvdreadsrc.c: Don't implement GstBaseSrc::get_size or GstBaseSrc::is_seekable, otherwise GstBaseSrc will ...
+         Original commit message from CVS:
+         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_class_init),
+         (gst_dvd_read_src_get_size), (gst_dvd_read_src_do_seek),
+         (gst_dvd_read_src_do_duration_query):
+         Don't implement GstBaseSrc::get_size or GstBaseSrc::is_seekable,
+         otherwise GstBaseSrc will think we can operate pull_range based,
+         which we don't really, and typefinding will fail miserably.
+         Also, make seeking work somewhat (only works with flumpegdemux
+         at the moment, mpegstream needs fixing for that first).
+
+2006-02-13 14:00:35 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/dvdread/dvdreadsrc.c: Only allocate buffer once we know exactly how much we need, rather than gratuitously alloca...
+         Original commit message from CVS:
+         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_read),
+         (gst_dvd_read_src_create), (gst_dvd_read_src_src_event):
+         Only allocate buffer once we know exactly how much we need,
+         rather than gratuitously allocating 2MB-buffers all the time
+         even if we usually need much less than that. Also, demote
+         a debug message from DEBUG to LOG level.
+
+2006-02-10 12:40:54 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/dvdread/dvdreadsrc.c: Add some more debugging and fix duration query in BYTES.
+         Original commit message from CVS:
+         * ext/dvdread/dvdreadsrc.c: (gst_dvd_read_src_class_init),
+         (gst_dvd_read_src_seekable), (gst_dvd_read_src_get_size),
+         (gst_dvd_read_src_do_seek), (gst_dvd_read_src_do_duration_query),
+         (gst_dvd_read_src_do_position_query):
+         Add some more debugging and fix duration query in BYTES.
+
+2006-02-09 17:27:57 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         Half-baked port to 0.10. Needs some love in the seeking department, but at least it does something.
+         Original commit message from CVS:
+         * configure.ac:
+         * ext/Makefile.am:
+         * ext/dvdread/Makefile.am:
+         * ext/dvdread/dvdreadsrc.c:
+         * ext/dvdread/dvdreadsrc.h:
+         Half-baked port to 0.10. Needs some love
+         in the seeking department, but at least
+         it does something.
+         * ext/dvdread/stream_labels.c:
+         * ext/dvdread/stream_labels.h:
+         Remove these (we use ISO-639 language codes internally; applications
+         that want to translate those into language names for display to the
+         user should rely on the iso-codes package for that).
+
+2006-02-06 15:55:28 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/amrnb/amrnbdec.*: Fix amrnbdec, handle events, take copy from adapter since the decoder apparently writes in the ...
+         Original commit message from CVS:
+         * ext/amrnb/amrnbdec.c: (gst_amrnbdec_init),
+         (gst_amrnbdec_setcaps), (gst_amrnbdec_event), (gst_amrnbdec_chain),
+         (gst_amrnbdec_state_change):
+         * ext/amrnb/amrnbdec.h:
+         Fix amrnbdec, handle events, take copy from adapter since the decoder
+         apparently writes in the source data.
+         Use some _scale_int, and precalc duration.
+         Fix some leaks, post ERROR messages.
+
+2006-02-06 11:34:23 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         docs/plugins/: Add cdio plugin to docs.
+         Original commit message from CVS:
+         * docs/plugins/Makefile.am:
+         * docs/plugins/gst-plugins-good-plugins-docs.sgml:
+         * docs/plugins/gst-plugins-good-plugins-sections.txt:
+         * docs/plugins/inspect/plugin-cdio.xml:
+         Add cdio plugin to docs.
+         * ext/cdio/gstcdiocddasrc.c:
+         Add gtk-doc blurb.
+         * ext/cdio/gstcdio.c:
+         The plugin is called 'cdio' not 'cddio'.
+
+2006-02-04 15:22:02 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/realmedia/rmdemux.c: One source pad not being linked is not an error condition when we're still parsing the heade...
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream):
+         One source pad not being linked is not an error condition when we're
+         still parsing the header. In this case (e.g. where we don't have a
+         suitable decoder installed) just pretend everything is fine, so that
+         the demuxer will actually go on to signal no-more-pads when done
+         parsing the header, otherwise  decodebin/playbin will never post the
+         appropriate error message if decoders are not available.
+
+2006-02-03 18:24:54 +0000  Edgard Lima <edgard.lima@indt.org.br>
+
+       * ChangeLog:
+       * common:
+       * ext/mad/gstid3tag.c:
+       * gst/realmedia/rmdemux.c:
+         Just make it compile with --disable-gst-debug.
+         Original commit message from CVS:
+         Just make it compile with --disable-gst-debug.
+
+2006-01-31 22:03:30 +0000  Radoslaw Szkodzinski <astralstorm@gorzow.mm.pl>
+
+         ext/mad/gstmad.c: Merge patch from Radoslaw Szkodzinski (bug 326734)
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (gst_mad_convert_src), (scale),
+         (gst_mad_check_caps_reset), (gst_mad_chain):
+         Merge patch from Radoslaw Szkodzinski (bug 326734)
+
+2006-01-30 22:00:18 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         ext/mad/gstid3tag.c: fixing Gdate handling enabling mux/demux mode switching adding better debug output
+         Original commit message from CVS:
+         * ext/mad/gstid3tag.c: (tag_list_to_id3_tag_foreach),
+         (gst_id3_tag_get_tag_to_render), (gst_id3_tag_sink_event),
+         (gst_id3_tag_src_link), (gst_id3_tag_send_tag_event),
+         (gst_id3_tag_chain):
+         fixing Gdate handling
+         enabling mux/demux mode switching
+         adding better debug output
+
+2006-01-30 18:57:45 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/mpegstream/gstmpegparse.c: If we haven't set caps on a source pad yet, the caps on the pad are NULL, not un-fixed...
+         Original commit message from CVS:
+         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_send_buffer):
+         If we haven't set caps on a source pad yet, the caps on the
+         pad are NULL, not un-fixed. Set caps on outgoing buffers.
+
+2006-01-23 18:37:16 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/lame/gstlame.*: Contrary to what the const char in the lame API might suggest, lame expects us to keep the string...
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_finalize), (gst_lame_class_init),
+         (gst_lame_init), (add_one_tag), (gst_lame_set_metadata):
+         * ext/lame/gstlame.h:
+         Contrary to what the const char in the lame API might suggest,
+         lame expects us to keep the strings we pass to id3tag_set_foo()
+         around; it doesn't free them either though, so we have to store
+         them somewhere and free them later when we can be sure lame
+         doesn't need them any longer.
+
+2006-01-23 15:02:04 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/lame/gstlame.c: don't pass an uninitialised string pointer to lame if we don't know how to handle the tag type, a...
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (add_one_tag):
+         Fix handling of GST_TAG_DATE (#311679), don't pass an
+         uninitialised string pointer to lame if we don't know
+         how to handle the tag type, and fix minor memory leak.
+
+2006-01-23 10:15:27 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/mad/gstmad.c: Fix debug message.
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (gst_mad_chain):
+         Fix debug message.
+
+2006-01-22 12:00:46 +0000  Martin Soto <martinsoto@users.sourceforge.net>
+
+         gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_process_event): Erase spurious call to gst_segment_set_newsegment.
+         Original commit message from CVS:
+         2006-01-22  Martin Soto  <martinsoto@users.sourceforge.net>
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_process_event):
+         Erase spurious call to gst_segment_set_newsegment.
+         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_process_event): Call
+         the superclass method when handling NEWSEGMENT events.
+         (gst_dvd_demux_handle_dvd_event): Get rid of dvd-audio-shutdown
+         and dvd-audio-restart event handling. There are currently less
+         hackish ways of handling the sparse audio stream problem.
+
+2006-01-20 14:18:20 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         fix up error domains, error strings, and use of translation
+         Original commit message from CVS:
+         2006-01-20  Thomas Vander Stichele  <thomas at apestaart dot org>
+         * ext/dvdnav/dvdnavsrc.c: (if):
+         * ext/dvdread/stream_labels.c:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_segment):
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_loop):
+         fix up error domains, error strings, and use of translation
+         * po/POTFILES.in:
+         fix up this file, even though none of them are actually marked
+         for build yet.
+
+2006-01-19 21:32:05 +0000  Martin Soto <martinsoto@users.sourceforge.net>
+
+         gst/mpegstream/gstmpegparse.h (struct _GstMPEGParse): gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_reset) (gst_mpeg_...
+         Original commit message from CVS:
+         2006-01-19  Martin Soto  <martinsoto@users.sourceforge.net>
+         * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParse):
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_reset)
+         (gst_mpeg_parse_process_event, gst_mpeg_parse_parse_packhead)
+         (gst_mpeg_parse_change_state):
+         Make timestamp adjustment somewhat milder. Actual timestamps are
+         now sent unmodified unless an actual gap is found in the
+         stream. This should fix time display when playing most MPEG
+         files.
+
+2006-01-19 00:10:51 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/cdio/: Fix build for libcdio versions >= 76; give slightly lower rank than cdparanoia.
+         Original commit message from CVS:
+         * ext/cdio/gstcdio.c: (gst_cdio_add_cdtext_field), (plugin_init):
+         * ext/cdio/gstcdio.h:
+         * ext/cdio/gstcdiocddasrc.c: (gst_cdio_cdda_src_get_cdtext):
+         Fix build for libcdio versions >= 76; give slightly lower rank
+         than cdparanoia.
+
+2006-01-18 19:30:36 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         Port libcdio cdda source, formerly known as cddasrc, now known as cdiocddasrc (fixes #323327). Should also read CD-TE...
+         Original commit message from CVS:
+         * configure.ac:
+         * ext/Makefile.am:
+         * ext/cdio/Makefile.am:
+         * ext/cdio/gstcdio.c:
+         * ext/cdio/gstcdio.h:
+         * ext/cdio/gstcdiocddasrc.c:
+         * ext/cdio/gstcdiocddasrc.h:
+         Port libcdio cdda source, formerly known as cddasrc, now known as
+         cdiocddasrc (fixes #323327). Should also read CD-TEXT if available,
+         but that's not tested (fixes #317658).
+
+2006-01-18 09:30:00 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         gst/mpegstream/gstmpegdemux.c: tss tss... always set caps on outgoing buffer.
+         Original commit message from CVS:
+         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer):
+         tss tss... always set caps on outgoing buffer.
+
+2006-01-17 14:16:52 +0000  Christian Schaller <uraeus@gnome.org>
+
+       * gst-plugins-ugly.spec.in:
+         update spec file
+         Original commit message from CVS:
+         update spec file
+
+2006-01-13 19:30:31 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ChangeLog:
+       * configure.ac:
+         back to HEAD
+         Original commit message from CVS:
+         back to HEAD
+
+=== release 0.10.1 ===
+
+2006-01-13 19:25:42 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-rmdemux.xml:
+         releasing 0.10.1
+         Original commit message from CVS:
+         releasing 0.10.1
+
+2006-01-11 11:44:02 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ChangeLog:
+       * configure.ac:
+         prerelease
+         Original commit message from CVS:
+         prerelease
+
+2006-01-10 11:43:37 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         Pass unhandled queries upstream (useful e.g. for SEEKING query)
+         Original commit message from CVS:
+         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_query):
+         * ext/mad/gstid3tag.c: (gst_id3_tag_src_query):
+         * ext/mad/gstmad.c: (gst_mad_src_query):
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_src_query):
+         * ext/sidplay/gstsiddec.cc:
+         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_handle_src_query):
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_src_query):
+         Pass unhandled queries upstream (useful e.g. for SEEKING query)
+         (fixes #325652; based on patch by: Philippe); make rmdemux return
+         FALSE for position queries, instead of setting -1 as value and
+         returning TRUE.
+
+2006-01-05 21:36:49 +0000  Martin Soto <martinsoto@users.sourceforge.net>
+
+         gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_adjust_ts)
+         Original commit message from CVS:
+         2006-01-05  Martin Soto  <martinsoto@users.sourceforge.net>
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_adjust_ts)
+         (gst_mpeg_parse_process_event, gst_mpeg_parse_pad_added): Don't
+         rewrite timestamps in the case segments are being set from
+         upstream, but use timestamps unmodified. Also send proper position
+         values. This allows for correct time display and makes queries
+         work in sink elements.
+         * gst/mpegstream/gstdvddemux.h:
+         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_init)
+         (gst_dvd_demux_handle_dvd_event, gst_dvd_demux_send_subbuffer):
+         Rename flush_filter to segment_filter, which is better represents
+         what the arreibute does.
+         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_process_event):
+         Activate segment filtering when a timestamp discontinuity is seen.
+
+2006-01-04 15:17:15 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/mad/gstmad.c: Don't forget that we need to send out a newsegment event after a restart even if we don't have enou...
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (gst_mad_chain):
+         Don't forget that we need to send out a newsegment event after a
+         restart even if we don't have enough data to decode a frame right
+         now.
+
+2005-12-30 23:51:46 +0000  Martin Soto <martinsoto@users.sourceforge.net>
+
+         gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event): Use the new "audio-shutdown" and "audio-restart" DVD e...
+         Original commit message from CVS:
+         2005-12-31  Martin Soto  <martinsoto@users.sourceforge.net>
+         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event):
+         Use the new "audio-shutdown" and "audio-restart" DVD events
+         instead of the "spu-still-frame" event to shutdown and restart
+         the audio pipeline.
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_adjust_ts):
+         Check for cases where the segment-based adjustment calculation
+         would produce negative values (which result in an overflow) and
+         return GST_CLOCK_TIME_NONE instead.
+         * gst/mpegstream/gstdvddemux.h:
+         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_init)
+         (gst_dvd_demux_process_event, gst_dvd_demux_send_subbuffer):
+         Add a mechanism to discard audio buffers with timestamps outside
+         the currently set segment. This was causing (sometimes serious)
+         synchronization problems after seeking in DVDs with LPCM audio,
+         since VOBUs usually contain audio material that lies outside the
+         timestamp range specified by the header.
+
+2005-12-30 16:25:05 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         ext/mad/gstid3tag.c: Remove lingering reference to GstID3Demux
+         Original commit message from CVS:
+         * ext/mad/gstid3tag.c: (gst_id3_tag_get_type):
+         Remove lingering reference to GstID3Demux
+         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_pes):
+         Don't output debug saying padding streams are unknown type,
+         because they're not
+
+2005-12-27 19:06:08 +0000  Martin Soto <martinsoto@users.sourceforge.net>
+
+         gst/mpegstream/gstdvddemux.c (AUDIO_CAPS)
+         Original commit message from CVS:
+         2005-12-27  Martin Soto  <martinsoto@users.sourceforge.net>
+         * gst/mpegstream/gstdvddemux.c (AUDIO_CAPS)
+         (gst_dvd_demux_get_audio_stream): Use audio/x-lpcm as mimetype for
+         LPCM.
+         * gstmpegdemux.h:
+         * gstmpegdemux.c (gst_mpeg_demux_get_video_stream)
+         (gst_mpeg_demux_get_audio_stream):
+         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_get_video_stream)
+         (gst_dvd_demux_get_audio_stream)
+         (gst_dvd_demux_get_subpicture_stream)
+         (gst_dvd_demux_send_subbuffer):
+         Send current* pad buffers with appropriate caps.
+
+2005-12-26 17:48:32 +0000  Martin Soto <martinsoto@users.sourceforge.net>
+
+         gst/iec958/ac3iec.*: (NORMAL_CAPS_DEF, RAW_AUDIO_CAPS_DEF, ac3iec_class_init)
+         Original commit message from CVS:
+         2005-12-26  Martin Soto  <martinsoto@users.sourceforge.net>
+         * gst/iec958/ac3iec.h:
+         * gst/iec958/ac3iec.c:
+         (NORMAL_CAPS_DEF, RAW_AUDIO_CAPS_DEF, ac3iec_class_init)
+         (ac3iec_init, ac3iec_set_property, ac3iec_get_property): Add a
+         raw-audio property to ac3iec958 that allows setting the source pad
+         caps to raw audio instead of audio/x-iec958. This makes it
+         possible to use ac3iec958 together with the normal alsasink
+         element to drive an external receiver that autodetects AC3
+         content.
+
+2005-12-23 15:48:04 +0000  Michael Smith <msmith@xiph.org>
+
+         gst/iec958/ac3iec.*: Accept audio/x-ac3 and audio/ac3 to ac3iec958 element.
+         Original commit message from CVS:
+         * gst/iec958/ac3iec.c: (ac3iec_init), (ac3iec_setcaps),
+         (ac3iec_chain_dvd):
+         * gst/iec958/ac3iec.h:
+         Accept audio/x-ac3 and audio/ac3 to ac3iec958 element.
+
+2005-12-21 10:25:34 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/mpeg2dec/gstmpeg2dec.c: When getting a seek event, first check if the upstream element can handle it and only do ...
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_src_event):
+         When getting a seek event, first check if the upstream element
+         can handle it and only do our own seek stuff when it can't
+         (should fix #322856).
+
+2005-12-21 09:58:43 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/mpeg2dec/gstmpeg2dec.c: Really convert to BYTES format when we want to convert to bytes (use right variable; fixe...
+         Original commit message from CVS:
+         Reviewed by: Tim-Philipp Müller  <tim at centricular dot net>
+         * ext/mpeg2dec/gstmpeg2dec.c: (normal_seek):
+         Really convert to BYTES format when we want to convert
+         to bytes (use right variable; fixes #322856).
+
+2005-12-19 17:26:47 +0000  Martin Soto <martinsoto@users.sourceforge.net>
+
+         Big mpegparse clean up, second round:
+         Original commit message from CVS:
+         2005-12-19  Martin Soto  <martinsoto@users.sourceforge.net>
+         Big mpegparse clean up, second round:
+         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event):
+         Send and EOS event down the audio pipeline when an still frame
+         event arrives. This prevents the pipeline from locking when a
+         still menu comes directly after a flush.
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_reset):
+         Don't send a newsegment in reset.
+         (gst_mpeg_parse_adjust_ts): Check for invalid timestamps.
+         (gst_mpeg_parse_handle_newsegment, gst_mpeg_parse_process_event):
+         Move the code of handle_newsegment to process_event. Send a
+         NEWSEGMENT after FLUSH_STOP.
+         (gst_mpeg_parse_change_state): Send a NEWSEGMENT right after
+         moving to PAUSED.
+         * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_send_event)
+         (gst_mpeg_demux_class_init): Don't override send_event.
+         * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_init)
+         (gst_mpeg_demux_send_event, gst_mpeg_demux_send_subbuffer)
+         (gst_mpeg_demux_reset):
+         * gst/mpegstream/gstmpegdemux.h:  Get rid of just_flushed
+         attribute.
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_process_event):
+         Reset the mpegparse element after a flush.
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_handle_newsegment):
+         Don't forward events.
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_process_event):
+         * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass):
+         handle_newsegment is not a virtual method anymore.
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_send_newsegment)
+         (gst_mpeg_parse_reset, gst_mpeg_parse_class_init):
+         * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass): Get
+         rid of send_newsegment virtual method.
+         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_process_event): Only
+         handle DVD events and call the superclass method for other event
+         types.
+         * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_send_event): Don't
+         override process_event anymore.
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_event)
+         (gst_mpeg_parse_process_event): Move actual event processing to
+         process event so that subclasses can properly override or extend
+         it.
+         * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass):
+         Eliminate time parameter in process event.
+         * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_init)
+         (gst_mpeg_demux_parse_packet, gst_mpeg_demux_parse_pes)
+         (gst_mpeg_demux_send_subbuffer):
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_class_init)
+         (gst_mpeg_parse_parse_packhead, gst_mpeg_parse_event)
+         (gst_mpeg_parse_chain): Use the new adjust_ts method instead of
+         adding the value of the adjust attribute.
+         * gst/mpegstream/gstmpegdemux.h (struct _GstMPEGVideoStream): Get
+         rid of the adjust attribute. Now all timestamp adjustments are
+         performed by mpegparse using the current segment.
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_adjust_ts)
+         (gst_mpeg_parse_class_init): Implement the adjust_ts method based
+         on the adjust attribute for SCR values and the current segment.
+         * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass): New
+         adjust_ts virtual method to adjust timestamps for outgoing
+         buffers.
+         * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_send_newsegment)
+         (gst_mpeg_demux_parse_packet): Don't override send_newsegment.
+         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_class_init)
+         (gst_dvd_demux_handle_newsegment): Don't override
+         handle_newsegment.
+         (gst_dvd_demux_process_event, gst_dvd_demux_handle_dvd_event):
+         Check for DVD events in process_event instead of
+         handle_dvd_event.
+         * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass):
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_handle_newsegment)
+         (gst_mpeg_parse_send_newsegment, gst_mpeg_parse_send_event):
+         * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_process_event)
+         (gst_mpeg_demux_send_event):
+         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_process_event)
+         (gst_dvd_demux_handle_dvd_event):
+         Eliminate the time parameter in send_event.
+
+2005-12-18 15:08:15 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         ext/mad/gstid3tag.c: Fix typefinding in id3demux, and then remove it in favour of the new LGPL id3demux in gst-plugin...
+         Original commit message from CVS:
+         * ext/mad/gstid3tag.c: (gst_id3_tag_do_typefind),
+         (gst_id3_tag_do_caps_nego), (gst_id3_tag_chain), (plugin_init):
+         Fix typefinding in id3demux, and then remove it in favour
+         of the new LGPL id3demux in gst-plugins-good
+         * ext/mad/gstmad.c: (gst_mad_dispose):
+         dispose can run more than once.
+
+2005-12-16 21:56:32 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         gst/asfdemux/gstasfmux.c: change some char* into char[]
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfmux.c: (gst_asfmux_file_start):
+         change some char* into char[]
+
+2005-12-15 17:06:10 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         gst/realmedia/rmdemux.c: Remove memleak from unused GstRMDemuxStream
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream):
+         Remove memleak from unused GstRMDemuxStream
+
+2005-12-12 19:17:11 +0000  Michael Smith <msmith@xiph.org>
+
+         ext/mad/gstid3tag.c: Use the correct function to free typefind factory list.
+         Original commit message from CVS:
+         * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list),
+         (gst_id3_tag_do_typefind):
+         Use the correct function to free typefind factory list.
+
+2005-12-09 18:38:53 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/mad/gstmad.c: For position and duration queries in TIME format, try the peer first (might be a demuxer).
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (gst_mad_src_query):
+         For position and duration queries in TIME format, try the peer
+         first (might be a demuxer).
+
+2005-12-08 12:45:09 +0000  Martin Soto <martinsoto@users.sourceforge.net>
+
+         gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_newsegment): Properly handle non contiguous VOBUs by adding the se...
+         Original commit message from CVS:
+         2005-12-08  Martin Soto  <martinsoto@users.sourceforge.net>
+         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_newsegment):
+         Properly handle non contiguous VOBUs by adding the segment accum
+         field to the adjust value.
+         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_class_init)
+         (gst_dvd_demux_init, gst_dvd_demux_handle_newsegment): Extend
+         handle_newsegment to prevent sending actual newsegment events and
+         use tiemstamp rewriting instead.
+         (gst_dvd_demux_handle_dvd_event): Don't send a newsegment after
+         dvd-lang-codes.
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_handle_newsegment)
+         (gst_mpeg_parse_event):
+         * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParseClass):
+         Add a new parameter to handle_newsegment to allow controlling
+         whether newsegment events are forwarded or not.
+         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_init)
+         (gst_dvd_demux_handle_dvd_event, gst_dvd_demux_send_subbuffer)
+         (gst_dvd_demux_reset):
+         last_end_ptm and discont_time aren't necessary anymore, since
+         timestamp adjustment is now replaced by newsegment events.
+         (gst_dvd_demux_init): Prevent MPEGParse from adjusting
+         timestamps.
+         * gst/mpegstream/gstdvddemux.h:
+         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event):
+         Don't handle dvd-nav-packet events anymore, since the are now
+         replaced by standard newsegment events.
+         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_init)
+         (gst_dvd_demux_handle_dvd_event, gst_dvd_demux_send_subbuffer)
+         (gst_dvd_demux_change_state):
+         * gst/mpegstream/gstdvddemux.h:
+         Get rid of the ignore_next_newmedia_discont hack.
+         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_class_init)
+         (gst_dvd_demux_handle_newsegment):
+         * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_class_init)
+         (gst_mpeg_demux_handle_newsegment): Don't override
+         handle_newsegment anymore. It was only necessary to handle
+         NEWMEDIA events.
+         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_process_event)
+         (gst_dvd_demux_handle_dvd_event, gst_dvd_demux_set_cur_audio)
+         (gst_dvd_demux_set_cur_subpicture):
+         Reactivate handling of DVD events.
+         * gst/mpegstream/gstmpegparse.c (normal_seek)
+         (gst_mpeg_parse_handle_src_event)
+         (gst_mpeg_parse_handle_src_query):
+         First attempt at reenabling seek.
+         * gst/mpegstream/gstmpegparse.h:
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_init)
+         (gst_mpeg_parse_update_streaminfo)
+         (gst_mpeg_parse_get_rate)
+         (gst_mpeg_parse_convert, gst_mpeg_parse_get_src_query_types)
+         (gst_mpeg_parse_handle_src_query):
+         * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_new_output_pad):
+         Make queries work again.
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_reset)
+         (gst_mpeg_parse_handle_newsegment)
+         (gst_mpeg_parse_send_newsegment, gst_mpeg_parse_pad_added)
+         (gst_mpeg_parse_chain, gst_mpeg_parse_handle_src_event):
+         * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParse):
+         Get rid of the newsegment_pending attribute, and rely instead on
+         proper timestamp adjustment.
+         * gst/mpegstream/gstmpegparse.c
+         (gst_mpeg_parse_get_src_event_masks): Erase.
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_init):
+         Initialize fields before creating pads to prevent the pad creation
+         callback from failing.
+         (gst_mpeg_parse_reset): Initialize new fields, and change
+         initialization order to match the order in the structure.
+         (gst_mpeg_parse_handle_newsegment): Forward new segment events
+         whenever possible, and update the current segment.
+         (gst_mpeg_parse_send_newsegment): Update the current segment and
+         pending_newsegment.
+         (gst_mpeg_parse_pad_added): Use the current segment to send
+         newsegment events to new pads.
+         (gst_mpeg_parse_chain): Properly add adjust time to sent buffers
+         and events. Properly update newsegment_pending.
+         * gst/mpegstream/gstmpegparse.h       (struct _GstMPEGParse):
+         New fields do_adjust and current_segment.
+         * gst/mpegstream/gstmpegdemux.c:
+         * gst/mpegstream/gstdvddemux.c:
+         * gst/mpegstream/gstmpegparse.h:
+         Rename handle_discont virtual method to handle_newsegment. Erase
+         some (already commented out support) for old NEW_MEDIA events.
+         * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParse):
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_init)
+         (gst_mpeg_parse_reset, gst_mpeg_parse_handle_discont)
+         (gst_mpeg_parse_pad_added, gst_mpeg_parse_parse_packhead)
+         (gst_mpeg_parse_event, gst_mpeg_parse_chain):
+         Erase the "pending_scr" field, and replace it by a slightly
+         different handling of the current SCR. Document code blocks in
+         parse_packhead and chain.
+
+2005-12-07 11:50:10 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         ext/mad/gstid3tag.c: g_warning() are only for really fatal warnings. If we can't decode a tag, just ignore that tag a...
+         Original commit message from CVS:
+         * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
+         g_warning() are only for really fatal warnings. If we can't decode a
+         tag, just ignore that tag and do a GST_WARNING.
+
+2005-12-06 19:48:07 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ChangeLog:
+       * ext/a52dec/gsta52dec.h:
+       * ext/dvdread/dvdreadsrc.h:
+       * ext/lame/gstlame.h:
+       * ext/mad/gstid3tag.c:
+       * ext/mad/gstmad.c:
+       * ext/mad/gstmad.h:
+       * ext/mpeg2dec/gstmpeg2dec.h:
+       * ext/sidplay/gstsiddec.h:
+       * gst/ac3parse/gstac3parse.c:
+       * gst/ac3parse/gstac3parse.h:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfdemux.h:
+       * gst/iec958/ac3iec.h:
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+       * gst/mpegaudioparse/gstmpegaudioparse.h:
+       * gst/mpegstream/gstdvddemux.h:
+       * gst/mpegstream/gstmpegclock.h:
+       * gst/mpegstream/gstmpegdemux.h:
+       * gst/mpegstream/gstmpegpacketize.h:
+       * gst/mpegstream/gstmpegparse.c:
+       * gst/mpegstream/gstmpegparse.h:
+       * gst/mpegstream/gstrfc2250enc.c:
+       * gst/mpegstream/gstrfc2250enc.h:
+       * gst/realmedia/rmdemux.c:
+       * gst/realmedia/rmdemux.h:
+       * gst/synaesthesia/synaescope.c:
+         expand tabs
+         Original commit message from CVS:
+         expand tabs
+
+2005-12-05 18:12:24 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * configure.ac:
+         back to HEAD
+         Original commit message from CVS:
+         back to HEAD
+
+=== release 0.10.0 ===
+
+2005-12-05 18:04:06 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-rmdemux.xml:
+         releasing 0.10.0
+         Original commit message from CVS:
+         releasing 0.10.0
+
+2005-12-05 13:03:40 +0000  Andy Wingo <wingo@pobox.com>
+
+         Update for alloc_buffer changes.
+         Original commit message from CVS:
+         2005-12-05  Andy Wingo  <wingo@pobox.com>
+         * ext/a52dec/gsta52dec.c: (gst_a52dec_push):
+         * ext/mad/gstmad.c: (gst_mad_chain):
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_alloc_buffer):
+         * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain_raw):
+         * gst/iec958/ac3iec.c: (ac3iec_chain_raw):
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream),
+         (gst_rmdemux_parse_packet): Update for alloc_buffer changes.
+
+2005-12-05 09:33:32 +0000  Andy Wingo <wingo@pobox.com>
+
+         ext/mad/gstid3tag.c (plugin_init): Remove id3tag -- there's just id3demux and id3mux now. Fixes #323199.
+         Original commit message from CVS:
+         2005-12-05  Andy Wingo  <wingo@pobox.com>
+         * ext/mad/gstid3tag.c (plugin_init): Remove id3tag -- there's just
+         id3demux and id3mux now. Fixes #323199.
+
+2005-12-04 22:36:51 +0000  Christian Schaller <uraeus@gnome.org>
+
+       * gst-plugins-ugly.spec.in:
+         update spec file for latest changes
+         Original commit message from CVS:
+         update spec file for latest changes
+
+2005-12-02 12:28:03 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         fix silly Makefile.am bug so they link correctly again
+         Original commit message from CVS:
+         * ext/amrnb/Makefile.am:
+         * gst/realmedia/Makefile.am:
+         fix silly Makefile.am bug so they link correctly again
+
+2005-12-01 19:18:24 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * configure.ac:
+         back to HEAD
+         Original commit message from CVS:
+         back to HEAD
+
+=== release 0.9.7 ===
+
+2005-12-01 19:14:57 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * common:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-rmdemux.xml:
+       * docs/random/LICENSE:
+       * docs/random/PORTED_09:
+         releasing 0.9.7
+         Original commit message from CVS:
+         releasing 0.9.7
+
+2005-12-01 15:49:59 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ChangeLog:
+       * common:
+       * ext/amrnb/Makefile.am:
+       * gst/realmedia/Makefile.am:
+         Don't know how these escaped my eye before.  Fix link flags.
+         Original commit message from CVS:
+         Don't know how these escaped my eye before.  Fix link flags.
+
+2005-11-30 18:37:24 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * common:
+       * examples/Makefile.am:
+       * examples/capsfilter/Makefile.am:
+       * examples/capsfilter/capsfilter1.c:
+       * examples/gob/Makefile.am:
+       * examples/gob/gst-identity2.gob:
+       * examples/gstplay/.gitignore:
+       * examples/gstplay/Makefile.am:
+       * examples/gstplay/player.c:
+       * examples/indexing/.gitignore:
+       * examples/indexing/Makefile.am:
+       * examples/indexing/indexmpeg.c:
+       * examples/level/Makefile.am:
+       * examples/level/README:
+       * examples/level/demo.c:
+       * examples/level/plot.c:
+       * examples/stats/Makefile.am:
+       * examples/stats/mp2ogg.c:
+       * examples/switch/.gitignore:
+       * examples/switch/Makefile.am:
+       * examples/switch/switcher.c:
+         no examples
+         Original commit message from CVS:
+         no examples
+
+2005-11-29 11:26:35 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/mpegstream/: Ref events before sending them to multiple pads, after all gst_pad_send_event() takes ownership of e...
+         Original commit message from CVS:
+         Reviewed by: Tim-Philipp Müller  <tim at centricular dot net>
+         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_event):
+         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_send_newsegment),
+         (gst_mpeg_parse_send_event):
+         Ref events before sending them to multiple pads, after all
+         gst_pad_send_event() takes ownership of events. Don't leak
+         events that have not been handled (fixes #322745).
+
+2005-11-28 19:13:51 +0000  Martin Soto <martinsoto@users.sourceforge.net>
+
+         gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event)
+         Original commit message from CVS:
+         2005-11-28  Martin Soto  <martinsoto@users.sourceforge.net>
+         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event)
+         (gst_dvd_demux_handle_dvd_event): Erase code to prevent mpegparse
+         from making timestamp adjustments. This will have to be re-added
+         in some form in the near future, but in order to do that, some nav
+         packet parsing will be necessary in mpegdemux.
+         * gst/mpegstream/gstmpegparse.h (struct _GstMPEGParse):
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_init)
+         (g_value_set_int, gst_mpeg_parse_set_property)
+         Get rid of do_adjust and use_adjust. Rename max_discont to
+         max_src_gap.
+         (gst_mpeg_parse_parse_packhead): When max_scr_gap has a value of
+         -1, no adjustment is made.
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_class_init):
+         Rename max_discont property to max_scr_gap. Erase "adjust"
+         property.
+         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_send_event): Don't
+         override send_event anymore, base class does the job.
+         * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_send_event):
+         Base class now does most of the work.
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_send_event):
+         Generalize to forwarding the event to all source pads in the
+         element.
+         * gst/mpegstream/gstmpegparse.h:
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_class_init)
+         (gst_mpeg_parse_init, gst_mpeg_parse_set_clock)
+         (gst_mpeg_parse_chain, gst_mpeg_parse_get_property)
+         (gst_mpeg_parse_set_property):
+         Clock synchronization doesn't make sense anymore for a
+         demultiplexer.
+
+2005-11-28 18:54:09 +0000  Michael Smith <msmith@xiph.org>
+
+         gst/realmedia/rmdemux.c: Don't treat normal EOS as a fatal error.
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_loop):
+         Don't treat normal EOS as a fatal error.
+
+2005-11-28 15:47:01 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         ext/mad/gstmad.c: Proper warning statements,
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (gst_mad_chain):
+         Proper warning statements,
+         Don't error if the src pad isn't linked when pushing.
+         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_change_state):
+         Proper state_change, avoids borkage when going to READY
+
+2005-11-27 15:34:00 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * configure.ac:
+       * gst-libs/Makefile.am:
+       * gst-libs/README:
+       * gst-libs/ext/.gitignore:
+       * gst-libs/gst/media-info/.gitignore:
+       * gst-libs/gst/play/.gitignore:
+       * gst-libs/gst/play/play.h:
+       * gst-libs/gst/play/play.vcproj:
+         no need for an AS_LIBTOOL call
+         Original commit message from CVS:
+         no need for an AS_LIBTOOL call
+
+2005-11-27 14:34:34 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * Makefile.am:
+       * common:
+       * gst-plugins-ugly.spec.in:
+         add ACLOCAL_AMFLAGS; remove old stuff from spec changelog
+         Original commit message from CVS:
+         add ACLOCAL_AMFLAGS; remove old stuff from spec changelog
+
+2005-11-25 17:02:41 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         ext/mpeg2dec/gstmpeg2dec.c: Prime libmpeg2's pumps with some null custom buffers to ensure it doesn't ask us to disca...
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c: (handle_sequence):
+         Prime libmpeg2's pumps with some null custom buffers
+         to ensure it doesn't ask us to discard garbage later yay.
+
+2005-11-25 17:01:46 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         ext/mpeg2dec/gstmpeg2dec.c: Prime libmpeg2's pumps with some null custom buffers to ensure it ask us to discard garba...
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c: (handle_sequence):
+         Prime libmpeg2's pumps with some null custom buffers
+         to ensure it ask us to discard garbage later yay.
+
+2005-11-25 14:50:19 +0000  Michael Smith <msmith@xiph.org>
+
+         ext/a52dec/gsta52dec.*: Accept AC3 in audio/x-private1-ac3 format, which includes
+         Original commit message from CVS:
+         * ext/a52dec/gsta52dec.c: (gst_a52dec_init),
+         (gst_a52dec_sink_setcaps), (gst_a52dec_chain),
+         (gst_a52dec_chain_raw):
+         * ext/a52dec/gsta52dec.h:
+         Accept AC3 in audio/x-private1-ac3 format, which includes
+         DVD-specific headers, as well as raw AC3, for compatibility with
+         some demuxers.
+
+2005-11-25 00:03:52 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         ext/mad/gstmad.c: When pad_alloc returns other-than-GST_FLOW_OK and mad exits early, skip frame synthesis and consume...
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (gst_mad_chain):
+         When pad_alloc returns other-than-GST_FLOW_OK and mad exits early,
+         skip frame synthesis and consume input data as if we'd done the
+         decode. Makes mad not error when the src pad is not connected.
+         (#319784)
+
+2005-11-24 13:58:55 +0000  Martin Soto <martinsoto@users.sourceforge.net>
+
+       * ChangeLog:
+         Erase old CVS conflict line.
+         Original commit message from CVS:
+         Erase old CVS conflict line.
+
+2005-11-24 13:52:49 +0000  Martin Soto <martinsoto@users.sourceforge.net>
+
+         gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_class_init) (gst_mpeg_parse_handle_discont, gst_mpeg_parse_send_newsegm...
+         Original commit message from CVS:
+         2005-11-23  Martin Soto  <martinsoto@users.sourceforge.net>
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_class_init)
+         (gst_mpeg_parse_handle_discont, gst_mpeg_parse_send_newsegment)
+         (gst_mpeg_parse_chain):
+         * gst/mpegstream/gstmpegdemux.c (gst_mpeg_demux_class_init)
+         (gst_mpeg_demux_send_newsegment):
+         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_send_subbuffer):
+         * gst/mpegstream/gstmpegparse.h:
+         Rename send_discont method to send_newsegment and add parameters
+         to handle actual segments. Adapt code all around to run with the
+         new name and signature.
+         * gst/mpegstream/gstmpegdemux.c:
+         * gst/mpegstream/gstmpegparse.c:
+         * gst/mpegstream/gstdvddemux.c:
+         Convert to GST_BOILERPLATE.
+
+2005-11-24 12:23:04 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * configure.ac:
+         fix AS_LIBTOOL call
+         Original commit message from CVS:
+         fix AS_LIBTOOL call
+
+2005-11-23 21:26:35 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * Makefile.am:
+         add a torture target
+         Original commit message from CVS:
+         add a torture target
+
+2005-11-23 20:05:47 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ChangeLog:
+       * configure.ac:
+         back to HEAD
+         Original commit message from CVS:
+         back to HEAD
+
+=== release 0.9.6 ===
+
+2005-11-23 19:57:04 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/gst-plugins-ugly-plugins.signals:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-rmdemux.xml:
+         releasing 0.9.6
+         Original commit message from CVS:
+         releasing 0.9.6
+
+2005-11-23 00:26:42 +0000  Michael Smith <msmith@xiph.org>
+
+         gst/realmedia/rmdemux.c: Fractional framerates.
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_sink_event),
+         (gst_rmdemux_src_event), (gst_rmdemux_validate_offset),
+         (find_seek_offset_bytes), (find_seek_offset_time),
+         (gst_rmdemux_perform_seek), (gst_rmdemux_src_query),
+         (gst_rmdemux_loop), (gst_rmdemux_fourcc_isplausible),
+         (gst_rmdemux_chain), (gst_rmdemux_send_event),
+         (gst_rmdemux_add_stream), (gst_rmdemux_parse_mdpr),
+         (gst_rmdemux_parse_packet):
+         Fractional framerates.
+
+2005-11-23 00:12:24 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         ext/mpeg2dec/gstmpeg2dec.*: Use fractional framerates
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c: (src_templ),
+         (gst_mpeg2dec_negotiate_format), (handle_sequence),
+         (gst_mpeg2dec_sink_event):
+         * ext/mpeg2dec/gstmpeg2dec.h:
+         Use fractional framerates
+
+2005-11-22 19:07:13 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/mpegstream/gstmpegparse.c: set_clock returns a boolean.
+         Original commit message from CVS:
+         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_set_clock):
+         set_clock returns a boolean.
+
+2005-11-22 18:39:36 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/mad/gstmad.c: Fix seeking even more by sending the newsegment event with the right parameters. Should fix queryin...
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (gst_mad_chain):
+         Fix seeking even more by sending the newsegment event with the
+         right parameters. Should fix querying in playbin/totem after
+         a seek.
+
+2005-11-22 17:39:36 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/mad/gstmad.c: Fix seeking in stand-alone mode. Fix nonexistant enum value introduced in previous commit. Improve ...
+         Original commit message from CVS:
+         * ext/mad/gstmad.c: (gst_mad_mode_get_type), (gst_mad_src_query),
+         (normal_seek), (gst_mad_sink_event), (gst_mad_chain):
+         Fix seeking in stand-alone mode. Fix nonexistant enum value
+         introduced in previous commit. Improve debug messages here and
+         there. Actually return a proper return value in the sink event
+         handler.
+
+2005-11-22 17:15:25 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ext/lame/gstlame.c:
+         doh
+         Original commit message from CVS:
+         doh
+
+2005-11-22 17:04:38 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ChangeLog:
+       * ext/lame/gstlame.c:
+       * ext/mad/gstmad.c:
+       * ext/sidplay/gstsiddec.cc:
+         fix up GValueEnum
+         Original commit message from CVS:
+         fix up GValueEnum
+
+2005-11-22 12:39:29 +0000  Andy Wingo <wingo@pobox.com>
+
+       * ChangeLog:
+       * ext/lame/gstlame.c:
+       * ext/mad/gstid3tag.c:
+       * ext/sidplay/gstsiddec.cc:
+         Update for gst_tag_setter API changes.
+         Original commit message from CVS:
+         2005-11-22  Andy Wingo  <wingo@pobox.com>
+         * Update for gst_tag_setter API changes.
+
+2005-11-22 11:55:32 +0000  Andy Wingo <wingo@pobox.com>
+
+       * ChangeLog:
+       * ext/a52dec/gsta52dec.c:
+       * ext/mad/gstid3tag.c:
+       * ext/mad/gstmad.c:
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+       * gst/mpegstream/gstdvddemux.c:
+       * gst/mpegstream/gstmpegparse.c:
+       * gst/realmedia/rmdemux.c:
+         ext/a52dec/gsta52dec.c (gst_a52dec_sink_event) ext/mad/gstid3tag.c (gst_id3_tag_sink_event) ext/mad/gstmad.c (gst_mad...
+         Original commit message from CVS:
+         2005-11-22  Andy Wingo  <wingo@pobox.com>
+         * ext/a52dec/gsta52dec.c (gst_a52dec_sink_event)
+         * ext/mad/gstid3tag.c (gst_id3_tag_sink_event)
+         * ext/mad/gstmad.c (gst_mad_chain)
+         * gst/mpegaudioparse/gstmpegaudioparse.c
+         (gst_mp3parse_sink_event)
+         * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_handle_dvd_event)
+         * gst/mpegstream/gstmpegparse.c (gst_mpeg_parse_handle_discont)
+         (gst_mpeg_parse_send_discont, gst_mpeg_parse_pad_added)
+         * gst/realmedia/rmdemux.c (gst_rmdemux_perform_seek)
+         (gst_rmdemux_chain, gst_rmdemux_add_stream): Run update-funcnames.
+
+2005-11-22 11:39:06 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/mad/Makefile.am: libgsttagedit => libgsttag
+         Original commit message from CVS:
+         * ext/mad/Makefile.am:
+         libgsttagedit => libgsttag
+
+2005-11-21 23:50:02 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         ext/lame/gstlame.c: Don't take the stream lock
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_sink_event):
+         Don't take the stream lock
+
+2005-11-21 17:34:30 +0000  Andy Wingo <wingo@pobox.com>
+
+         ext/: Don't take the stream lock.
+         Original commit message from CVS:
+         2005-11-21  Andy Wingo  <wingo@pobox.com>
+         * ext/sidplay/gstsiddec.cc (gst_siddec_sink_event):
+         * ext/mpeg2dec/gstmpeg2dec.c (gst_mpeg2dec_sink_event):
+         * ext/mad/gstmad.c (gst_mad_sink_event):
+         * ext/a52dec/gsta52dec.c (gst_a52dec_sink_event): Don't take the
+         stream lock.
+         * gst/realmedia/rmdemux.c (gst_rmdemux_perform_seek): Update for
+         stream lock changes.
+
+2005-11-21 16:36:44 +0000  Andy Wingo <wingo@pobox.com>
+
+         *.*: Ran scripts/update-macros. Oh yes.
+         Original commit message from CVS:
+         2005-11-21  Andy Wingo  <wingo@pobox.com>
+         * *.h:
+         * *.c: Ran scripts/update-macros. Oh yes.
+
+2005-11-21 15:12:43 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/mpegstream/: Filler events have beem removed for now.
+         Original commit message from CVS:
+         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_event):
+         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_process_event):
+         Filler events have beem removed for now.
+
+2005-11-21 14:08:45 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         gst/: Update for GST_FOURCC_FORMAT API change.
+         Original commit message from CVS:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_video_stream):
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_chain),
+         (gst_rmdemux_add_stream), (gst_rmdemux_parse_mdpr):
+         Update for GST_FOURCC_FORMAT API change.
+
+2005-11-21 10:32:55 +0000  Edward Hervey <bilboed@bilboed.com>
+
+         gst/: Modifications for disapearance of GST_PAD_IS_USABLE()
+         Original commit message from CVS:
+         * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain_raw):
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_chain),
+         (gst_rmdemux_add_stream), (gst_rmdemux_parse_mdpr),
+         (gst_rmdemux_parse_packet):
+         Modifications for disapearance of GST_PAD_IS_USABLE()
+
+2005-11-18 16:14:00 +0000  Michael Smith <msmith@xiph.org>
+
+         gst/iec958/ac3iec.c: Remove some setcaps brokenness.
+         Original commit message from CVS:
+         * gst/iec958/ac3iec.c: (ac3iec_init), (ac3iec_chain_dvd):
+         Remove some setcaps brokenness.
+         Don't crash on bad input.
+
+2005-11-15 22:46:23 +0000  Johan Dahlin <johan@gnome.org>
+
+         ext/mad/gstid3tag.c (gst_mad_id3_to_tag_list): unset GValues after calling transform.
+         Original commit message from CVS:
+         * ext/mad/gstid3tag.c (gst_mad_id3_to_tag_list): unset GValues after
+         calling transform.
+         (gst_id3_tag_do_typefind): Unref caps
+         * ext/mad/gstmad.c (gst_mad_check_caps_reset): Ditto
+
+2005-11-15 21:00:44 +0000  Johan Dahlin <johan@gnome.org>
+
+       * ext/mad/gstmad.c:
+         remove accidentally commited hack
+         Original commit message from CVS:
+         remove accidentally commited hack
+
+2005-11-15 20:30:53 +0000  Johan Dahlin <johan@gnome.org>
+
+       * ext/mad/gstmad.c:
+         free pad templates
+         Original commit message from CVS:
+         free pad templates
+
+2005-11-15 14:19:38 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/mpeg2dec/gstmpeg2dec.c: Set DELTA_UNIT flag on outgoing buffers if this is NOT a keyframe; nice-ify debug message...
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c: (handle_slice),
+         (gst_mpeg2dec_sink_event):
+         Set DELTA_UNIT flag on outgoing buffers if this is NOT a keyframe;
+         nice-ify debug message in event handler; add CHECKME.
+         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_event),
+         (gst_dvd_demux_send_event), (gst_dvd_demux_process_private),
+         (gst_dvd_demux_send_subbuffer), (gst_dvd_demux_reset),
+         (gst_dvd_demux_sync_stream_to_time):
+         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_class_init),
+         (gst_mpeg_demux_process_event), (gst_mpeg_demux_send_event),
+         (gst_mpeg_demux_handle_discont), (gst_mpeg_demux_new_output_pad),
+         (gst_mpeg_demux_parse_packet), (gst_mpeg_demux_parse_pes),
+         (gst_mpeg_demux_send_subbuffer), (gst_mpeg_demux_process_private),
+         (gst_mpeg_demux_sync_stream_to_time),
+         (gst_mpeg_demux_handle_src_event), (gst_mpeg_demux_reset):
+         * gst/mpegstream/gstmpegdemux.h:
+         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_init),
+         (gst_mpeg_parse_handle_discont), (gst_mpeg_parse_send_buffer),
+         (gst_mpeg_parse_process_event), (gst_mpeg_parse_send_discont),
+         (gst_mpeg_parse_send_event), (gst_mpeg_parse_event),
+         (gst_mpeg_parse_chain):
+         * gst/mpegstream/gstmpegparse.h:
+         Get rid of GST_PAD_IS_USABLE and fix GstFlowReturn vs. gboolean
+         return value confusion (gst_pad_push vs. gst_pad_send_event and
+         gst_pad_push_event); pass flow return values to caller;
+         miscellaneous fixes and clean-ups.
+
+2005-11-15 08:37:00 +0000  Christian Schaller <uraeus@gnome.org>
+
+       * gst/mpegstream/gstdvddemux.c:
+         set rank to secondary until it works 100%
+         Original commit message from CVS:
+         set rank to secondary until it works 100%
+
+2005-11-15 07:59:58 +0000  Christian Schaller <uraeus@gnome.org>
+
+       * gst-plugins-ugly.spec.in:
+         add mpegstream plugin to spec file
+         Original commit message from CVS:
+         add mpegstream plugin to spec file
+
+2005-11-14 22:18:21 +0000  Martin Soto <martinsoto@users.sourceforge.net>
+
+         gst/mpegstream/Makefile.am (noinst_HEADERS): Add gstrfc2250enc.h.
+         Original commit message from CVS:
+         2005-11-14  Martin Soto  <soto@localhost.localdomain>
+         * gst/mpegstream/Makefile.am (noinst_HEADERS): Add
+         gstrfc2250enc.h.
+
+2005-11-14 21:20:21 +0000  Josef Zlomek <josef.zlomek@xeris.cz>
+
+         partially port the mpegstream plugin to GStreamer 0.9.
+         Original commit message from CVS:
+         2005-11-14  Martin Soto  <martinsoto@users.sourceforge.net>
+         * configure.ac:
+         * gst/mpegstream/Makefile.am:
+         * gst/mpegstream/gstdvddemux.c:
+         * gst/mpegstream/gstdvddemux.h:
+         * gst/mpegstream/gstmpegdemux.c:
+         * gst/mpegstream/gstmpegdemux.h:
+         * gst/mpegstream/gstmpegpacketize.c:
+         * gst/mpegstream/gstmpegpacketize.h:
+         * gst/mpegstream/gstmpegparse.c:
+         * gst/mpegstream/gstmpegparse.h:
+         * gst/mpegstream/gstmpegstream.c:
+         * gst/mpegstream/gstrfc2250enc.c:
+         * gst/mpegstream/gstrfc2250enc.h:
+         Applied patch from Josef Zlomek <josef.zlomek@xeris.cz> to
+         partially port the mpegstream plugin to GStreamer 0.9.
+
+2005-11-14 17:13:20 +0000  Andy Wingo <wingo@pobox.com>
+
+         configure.ac (GST_PLUGIN_LDFLAGS): -no-undefined for better debugging, allows dll builds on windows. Fixes #316076.
+         Original commit message from CVS:
+         2005-11-14  Andy Wingo  <wingo@pobox.com>
+         * configure.ac (GST_PLUGIN_LDFLAGS): -no-undefined for better
+         debugging, allows dll builds on windows. Fixes #316076.
+
+2005-11-11 19:37:33 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ChangeLog:
+       * configure.ac:
+         back to head
+         Original commit message from CVS:
+         back to head
+
+=== release 0.9.5 ===
+
+2005-11-11 19:35:55 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ChangeLog:
+       * NEWS:
+       * RELEASE:
+       * common:
+       * configure.ac:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-rmdemux.xml:
+         releasing 0.9.5
+         Original commit message from CVS:
+         releasing 0.9.5
+
+2005-10-27 21:50:11 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/mpeg2dec/gstmpeg2dec.c: Forward GstFlowReturn about everywhere.
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_reset),
+         (gst_mpeg2dec_alloc_buffer), (gst_mpeg2dec_negotiate_format),
+         (handle_sequence), (handle_picture), (handle_slice),
+         (gst_mpeg2dec_chain), (gst_mpeg2dec_src_query), (normal_seek),
+         (gst_mpeg2dec_src_event), (gst_mpeg2dec_change_state):
+         Forward GstFlowReturn about everywhere.
+         Handle seeking correctly.
+
+2005-10-27 17:26:13 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/mpeg2dec/gstmpeg2dec.c: Small cleanups in refcounting.
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_negotiate_format),
+         (handle_sequence), (handle_slice), (gst_mpeg2dec_chain),
+         (gst_mpeg2dec_src_query), (gst_mpeg2dec_change_state):
+         Small cleanups in refcounting.
+
+2005-10-26 16:45:04 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/mpeg2dec/gstmpeg2dec.*: Removed lots of dubious code.
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
+         (gst_mpeg2dec_dispose), (gst_mpeg2dec_reset),
+         (gst_mpeg2dec_alloc_buffer), (gst_mpeg2dec_negotiate_format),
+         (handle_sequence), (handle_picture):
+         * ext/mpeg2dec/gstmpeg2dec.h:
+         Removed lots of dubious code.
+         Handle flushing and seeking correctly. Still leaks though...
+
+2005-10-24 13:37:47 +0000  Christian Schaller <uraeus@gnome.org>
+
+       * ChangeLog:
+       * configure.ac:
+         port plugins listing changes
+         Original commit message from CVS:
+         port plugins listing changes
+
+2005-10-23 23:06:09 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ChangeLog:
+       * configure.ac:
+         back to HEAD
+         Original commit message from CVS:
+         back to HEAD
+
+=== release 0.9.4 ===
+
+2005-10-23 22:44:44 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ChangeLog:
+       * Makefile.am:
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins.args:
+       * docs/plugins/gst-plugins-ugly-plugins.signals:
+       * docs/plugins/inspect/plugin-a52dec.xml:
+       * docs/plugins/inspect/plugin-amrnb.xml:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpeg2dec.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-rmdemux.xml:
+       * gst/realmedia/rmdemux.c:
+       * po/POTFILES.in:
+         releasing 0.9.4
+         Original commit message from CVS:
+         releasing 0.9.4
+
+2005-10-23 14:32:49 +0000  Julien Moutte <julien@moutte.net>
+
+         gst/realmedia/rmdemux.c: STOPPED->FAILED
+         Original commit message from CVS:
+         2005-10-23  Julien MOUTTE  <julien@moutte.net>
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_loop): STOPPED->FAILED
+
+2005-10-21 16:22:00 +0000  Christian Schaller <uraeus@gnome.org>
+
+       * gst-plugins-ugly.spec.in:
+         add packaging of a52dec
+         Original commit message from CVS:
+         add packaging of a52dec
+
+2005-10-21 11:58:38 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/rmdemux.c: Set correct stream time in newsegment event.
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_validate_offset),
+         (gst_rmdemux_perform_seek), (gst_rmdemux_src_query):
+         Set correct stream time in newsegment event.
+
+2005-10-20 22:43:04 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ext/Makefile.am:
+         fix distcheck
+         Original commit message from CVS:
+         fix distcheck
+
+2005-10-20 22:40:07 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ChangeLog:
+       * ext/Makefile.am:
+         fix distcheck
+         Original commit message from CVS:
+         fix distcheck
+
+2005-10-20 09:51:58 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/a52dec/: Re-enable CPU flags, use liboil to get them.
+         Original commit message from CVS:
+         * ext/a52dec/Makefile.am:
+         * ext/a52dec/gsta52dec.c: (gst_a52dec_base_init),
+         (gst_a52dec_class_init), (gst_a52dec_sink_event),
+         (gst_a52dec_change_state):
+         * ext/a52dec/gsta52dec.h:
+         Re-enable CPU flags, use liboil to get them.
+
+2005-10-20 09:00:30 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         Port AC3 decoder to 0.9 (#318849).
+         Original commit message from CVS:
+         Reviewed by: Tim-Philipp Müller  <tim at centricular dot net>
+         * configure.ac:
+         * ext/a52dec/Makefile.am:
+         * ext/a52dec/gsta52dec.c:
+         * ext/a52dec/gsta52dec.h:
+         Port AC3 decoder to 0.9 (#318849).
+
+2005-10-20 08:30:33 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/sidplay/gstsiddec.cc: Small fixes and more error messages.
+         Original commit message from CVS:
+         * ext/sidplay/gstsiddec.cc:
+         Small fixes and more error messages.
+
+2005-10-19 16:01:35 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         API change fixen.
+         Original commit message from CVS:
+         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_query),
+         (gst_amrnbparse_state_change):
+         * ext/mad/gstid3tag.c: (gst_id3_tag_src_query):
+         * ext/mad/gstmad.c: (gst_mad_get_query_types), (gst_mad_src_query):
+         * ext/mpeg2dec/gstmpeg2dec.c:
+         * ext/sidplay/gstsiddec.cc:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_validate_offset),
+         (gst_rmdemux_src_query), (gst_rmdemux_src_query_types):
+         API change fixen.
+
+2005-10-19 12:43:28 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         configure.ac: GST_DOC has been renamed to GST_DOCBOOK_CHECK
+         Original commit message from CVS:
+         * configure.ac:
+         GST_DOC has been renamed to GST_DOCBOOK_CHECK
+
+2005-10-19 09:47:31 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         configure.ac: some docs I had
+         Original commit message from CVS:
+         * configure.ac:
+         some docs I had
+         * ext/amrnb/amrnbenc.c: (gst_amrnbenc_chain):
+         trivial fixes
+
+2005-10-18 13:23:22 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/realmedia/rmdemux.c: segment-start/done API change.
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_validate_offset),
+         (gst_rmdemux_perform_seek):
+         segment-start/done API change.
+
+2005-10-17 17:50:45 +0000  Michael Smith <msmith@xiph.org>
+
+       * ChangeLog:
+       * common:
+       * gst/iec958/ac3iec.c:
+         Set buffer durations on IEC958 buffers.
+         Original commit message from CVS:
+         Set buffer durations on IEC958 buffers.
+
+2005-10-16 17:06:42 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         configure.ac: Fix glib check
+         Original commit message from CVS:
+         * configure.ac:
+         Fix glib check
+
+2005-10-13 19:14:25 +0000  Tim-Philipp Müller <tim@centricular.net>
+
+         ext/mad/gstid3tag.c: Fix handling of GST_TAG_DATE, which is now of type GST_TYPE_DATE.
+         Original commit message from CVS:
+         * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
+         Fix handling of GST_TAG_DATE, which is now of type GST_TYPE_DATE.
+
+2005-10-13 15:29:56 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         examples/stats/mp2ogg.c: yes, typo fixes
+         Original commit message from CVS:
+         * examples/stats/mp2ogg.c:
+         yes, typo fixes
+
+2005-10-12 14:30:36 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         renamed GST_FLAGS macros to GST_OBJECT_FLAGS moved bitshift from macro to enum definition
+         Original commit message from CVS:
+         * examples/indexing/indexmpeg.c: (main):
+         * ext/a52dec/gsta52dec.c: (gst_a52dec_init):
+         * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_is_open),
+         (dvdnavsrc_set_property), (dvdnavsrc_open), (dvdnavsrc_close),
+         (dvdnavsrc_event), (dvdnavsrc_convert), (dvdnavsrc_query):
+         * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_set_property),
+         (dvdreadsrc_srcpad_query), (dvdreadsrc_get),
+         (dvdreadsrc_open_file), (dvdreadsrc_close_file):
+         * ext/dvdread/dvdreadsrc.h:
+         * ext/lame/gstlame.h:
+         * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_init):
+         * gst/asfdemux/gstasfmux.c: (gst_asfmux_init):
+         * gst/iec958/ac3iec.h:
+         * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_init):
+         * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_init):
+         * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_init):
+         * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_init):
+         * gst/synaesthesia/gstsynaesthesia.c: (gst_synaesthesia_init):
+         renamed GST_FLAGS macros to GST_OBJECT_FLAGS
+         moved bitshift from macro to enum definition
+
+2005-10-11 16:37:16 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         newsegment API update.
+         Original commit message from CVS:
+         * ext/mad/gstid3tag.c: (gst_id3_tag_sink_event):
+         * ext/mad/gstmad.c: (gst_mad_chain):
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_sink_event), (gst_mp3parse_chain):
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_perform_seek),
+         (gst_rmdemux_chain), (gst_rmdemux_add_stream):
+         newsegment API update.
+
+2005-10-06 13:14:38 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/amrnb/amrnbdec.c: Mark invalid frame sizes
+         Original commit message from CVS:
+         * ext/amrnb/amrnbdec.c:
+         Mark invalid frame sizes
+         * ext/mad/gstmad.c: (gst_mad_init), (gst_mad_chain):
+         UNUSABLE is not to be used here, just push out stuff so
+         probes can continue linking or making the pad usable.
+
+2005-10-05 11:25:51 +0000  Michael Smith <msmith@xiph.org>
+
+       * ChangeLog:
+       * gst/realmedia/rmdemux.c:
+         Improve seek error-resilience.
+         Original commit message from CVS:
+         Improve seek error-resilience.
+         Better error handling generally.
+
+2005-10-03 17:59:55 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ChangeLog:
+       * configure.ac:
+         back to head
+         Original commit message from CVS:
+         back to head
+
+=== release 0.9.3 ===
+
+2005-10-03 17:49:44 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ChangeLog:
+       * NEWS:
+       * README:
+       * configure.ac:
+       * ext/sidplay/Makefile.am:
+         release time
+         Original commit message from CVS:
+         release time
+
+2005-09-30 16:43:12 +0000  Michael Smith <msmith@xiph.org>
+
+       * gst/realmedia/rmdemux.h:
+         Forgot to commit this file. I hate Nano.
+         Original commit message from CVS:
+         Forgot to commit this file. I hate Nano.
+
+2005-09-30 16:39:47 +0000  Michael Smith <msmith@xiph.org>
+
+       * ChangeLog:
+       * common:
+       * gst/realmedia/rmdemux.c:
+         Sanity checks and memory leak fixes for real demuxer
+         Original commit message from CVS:
+         Sanity checks and memory leak fixes for real demuxer
+
+2005-09-29 13:44:15 +0000  Michael Smith <msmith@xiph.org>
+
+         gst/realmedia/rmdemux.c: Real demuxer fixes. Make it more bulletproof against bad data, identify a few more stream ty...
+         Original commit message from CVS:
+         * gst/realmedia/rmdemux.c: (gst_rmdemux_src_event),
+         (gst_rmdemux_perform_seek), (gst_rmdemux_loop),
+         (gst_rmdemux_send_event), (gst_rmdemux_add_stream),
+         (gst_rmdemux_parse_mdpr), (gst_rmdemux_parse_packet):
+         Real demuxer fixes. Make it more bulletproof against bad data,
+         identify a few more stream types.
+         Fix seeking so that it works (at least with the seek example
+         program; it still fails with totem).
+
+2005-09-26 14:41:23 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/mpegaudioparse/gstmpegaudioparse.c: Set correct caps on buffers too.
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c:
+         (gst_mp3parse_sink_event), (gst_mp3parse_chain):
+         Set correct caps on buffers too.
+
+2005-09-26 14:31:53 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/mpegaudioparse/gstmpegaudioparse.*: Put timestamps on buffers.
+         Original commit message from CVS:
+         * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_init),
+         (gst_mp3parse_sink_event), (gst_mp3parse_chain):
+         * gst/mpegaudioparse/gstmpegaudioparse.h:
+         Put timestamps on buffers.
+
+2005-09-21 22:21:22 +0000  Flavio Oliveira <flavio.oliveira@indt.org.br>
+
+       * ChangeLog:
+       * ext/amrnb/amrnbenc.c:
+         Changed amrnbenc description, it is an encoder, not decoder.
+         Original commit message from CVS:
+         Changed amrnbenc description, it is an encoder, not decoder.
+
+2005-09-21 16:21:45 +0000  Michael Smith <msmith@xiph.org>
+
+       * ChangeLog:
+       * gst/iec958/ac3_padder.c:
+       * gst/iec958/ac3_padder.h:
+       * gst/iec958/ac3iec.c:
+         Various changes to AC3->IEC958 framer. Mostly to make our IEC958 headers and dump the frame (as a probable sync failu...
+         Original commit message from CVS:
+         Various changes to AC3->IEC958 framer. Mostly to make our IEC958 headers
+         more accurate, and to check AC3 checksums (both of them in each frame),
+         and dump the frame (as a probable sync failure) if they don't match.
+         General code cleanup, improved comments. Changed to not construct the
+         header backwards, and not byteswap everything else. If we end up needing
+         to do little-endian output, we should swap in the element doing the
+         output (AC3 is big-endian).
+
+2005-09-20 17:37:54 +0000  Christian Schaller <uraeus@gnome.org>
+
+       * gst-plugins-ugly.spec.in:
+         fix spec file for ugly
+         Original commit message from CVS:
+         fix spec file for ugly
+
+2005-09-19 23:25:07 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * docs/plugins/inspect/plugin-lame.xml:
+         revert empty commit
+         Original commit message from CVS:
+         revert empty commit
+
+2005-09-19 23:24:12 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * docs/plugins/scan.stamp:
+         whoops, wrong files
+         Original commit message from CVS:
+         whoops, wrong files
+
+2005-09-19 23:21:31 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         docs/plugins/gst-plugins-ugly-plugins.*: commit missing files
+         Original commit message from CVS:
+         * docs/plugins/gst-plugins-ugly-plugins.args:
+         * docs/plugins/gst-plugins-ugly-plugins.hierarchy:
+         * docs/plugins/gst-plugins-ugly-plugins.interfaces:
+         * docs/plugins/gst-plugins-ugly-plugins.prerequisites:
+         commit missing files
+         * docs/plugins/inspect/plugin-lame.xml:
+         update
+
+2005-09-19 16:44:13 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * Makefile.am:
+       * common:
+       * gst-plugins-ugly.spec.in:
+         add check-valgrind target
+         Original commit message from CVS:
+         add check-valgrind target
+
+2005-09-19 13:46:35 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * docs/plugins/scanobj-build.stamp:
+         add stamp
+         Original commit message from CVS:
+         add stamp
+
+2005-09-19 11:07:40 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/lame/gstlame.c: Set caps on outgoing buffers.
+         Original commit message from CVS:
+         * ext/lame/gstlame.c: (gst_lame_chain):
+         Set caps on outgoing buffers.
+
+2005-09-16 16:04:28 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ChangeLog:
+       * ext/lame/gstlame.c:
+       * ext/lame/gstlame.h:
+         clean up further so we don't try to set up five times for a simple pipeline
+         Original commit message from CVS:
+         clean up further so we don't try to set up five times for
+         a simple pipeline
+
+2005-09-16 15:43:08 +0000  Michael Smith <msmith@xiph.org>
+
+       * ChangeLog:
+       * common:
+       * gst/iec958/ac3iec.c:
+         Set setcaps function on sink pad, not source pad. Produce correct caps on output buffers.
+         Original commit message from CVS:
+         Set setcaps function on sink pad, not source pad. Produce correct caps
+         on output buffers.
+
+2005-09-11 17:53:12 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * common:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-rmdemux.xml:
+         update inspect with source
+         Original commit message from CVS:
+         update inspect with source
+
+2005-09-07 13:42:44 +0000  Stefan Kost <ensonic@users.sourceforge.net>
+
+         ext/mad/gstid3tag.c: gsttaginterface.h -> gsttagsetter.h
+         Original commit message from CVS:
+         * ext/mad/gstid3tag.c:
+         gsttaginterface.h -> gsttagsetter.h
+
+2005-09-06 14:06:51 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * configure.ac:
+         back to HEAD
+         Original commit message from CVS:
+         back to HEAD
+
+=== release 0.9.1 ===
+
+2005-09-06 14:05:40 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * ChangeLog:
+       * NEWS:
+       * README:
+       * RELEASE:
+       * autogen.sh:
+       * configure.ac:
+         releasing 0.9.2
+         Original commit message from CVS:
+         releasing 0.9.2
+
+2005-09-06 12:00:33 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         ext/amrnb/: State change function updates.
+         Original commit message from CVS:
+         * ext/amrnb/amrnbdec.c: (gst_amrnbdec_state_change):
+         * ext/amrnb/amrnbenc.c: (gst_amrnbenc_state_change):
+         * ext/amrnb/amrnbparse.c: (gst_amrnbparse_state_change):
+         State change function updates.
+
+2005-09-05 17:24:20 +0000  Jan Schmidt <thaytan@mad.scientist.com>
+
+         ext/mpeg2dec/gstmpeg2dec.c: GST_CAT_SEEK disappeared from the public API at some point
+         Original commit message from CVS:
+         * ext/mpeg2dec/gstmpeg2dec.c:
+         GST_CAT_SEEK disappeared from the public API at some point
+
+2005-09-05 11:42:10 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * gst/iec958/ac3_padder.c:
+       * gst/iec958/ac3_padder.h:
+         doc fixes
+         Original commit message from CVS:
+         doc fixes
+
+2005-09-04 19:28:29 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * Makefile.am:
+       * autogen.sh:
+       * common:
+       * configure.ac:
+       * docs/plugins/gst-plugins-ugly-plugins-docs.sgml:
+       * docs/plugins/inspect-build.stamp:
+       * docs/plugins/inspect.stamp:
+       * docs/plugins/inspect/plugin-dvdlpcmdec.xml:
+       * docs/plugins/inspect/plugin-iec958.xml:
+       * docs/plugins/inspect/plugin-lame.xml:
+       * docs/plugins/inspect/plugin-mad.xml:
+       * docs/plugins/inspect/plugin-mpegaudioparse.xml:
+       * docs/plugins/inspect/plugin-rmdemux.xml:
+         docs for ugly plugins
+         Original commit message from CVS:
+         docs for ugly plugins
+
+2005-09-02 18:01:33 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * gst-plugins-ugly.spec.in:
+       * gst/iec958/Makefile.am:
+         build fixes
+         Original commit message from CVS:
+         build fixes
+
+2005-09-02 17:04:39 +0000  Michael Smith <msmith@xiph.org>
+
+       * ChangeLog:
+       * gst/iec958/ac3iec.c:
+         Accept audio/x-private1-a3c on sink pad
+         Original commit message from CVS:
+         Accept audio/x-private1-a3c on sink pad
+
+2005-09-02 17:01:14 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * gst-plugins-ugly.spec.in:
+         spec updates
+         Original commit message from CVS:
+         spec updates
+
+2005-09-02 15:43:54 +0000  Andy Wingo <wingo@pobox.com>
+
+       * examples/gstplay/player.c:
+       * examples/stats/mp2ogg.c:
+       * ext/a52dec/gsta52dec.c:
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbenc.c:
+       * ext/amrnb/amrnbparse.c:
+       * ext/dvdnav/dvdnavsrc.c:
+       * ext/dvdread/dvdreadsrc.c:
+       * ext/lame/gstlame.c:
+       * ext/mad/gstid3tag.c:
+       * ext/mad/gstmad.c:
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * gst/ac3parse/gstac3parse.c:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfmux.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/iec958/ac3iec.c:
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+       * gst/mpegstream/gstdvddemux.c:
+       * gst/mpegstream/gstmpegdemux.c:
+       * gst/mpegstream/gstmpegparse.c:
+       * gst/mpegstream/gstrfc2250enc.c:
+       * gst/realmedia/rmdemux.c:
+       * gst/synaesthesia/gstsynaesthesia.c:
+         All plugins updated for element state changes.
+         Original commit message from CVS:
+         2005-09-02  Andy Wingo  <wingo@pobox.com>
+         * All plugins updated for element state changes.
+
+2005-09-02 14:19:17 +0000  Michael Smith <msmith@xiph.org>
+
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/iec958/ac3iec.c:
+         Fix return types in setcaps functions
+         Original commit message from CVS:
+         Fix return types in setcaps functions
+
+2005-09-02 13:37:13 +0000  Michael Smith <msmith@xiph.org>
+
+       * ChangeLog:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/iec958/ac3iec.c:
+         Changes to correctly use first_access parameter in ac3 and lpcm plugins.
+         Original commit message from CVS:
+         Changes to correctly use first_access parameter in ac3 and lpcm plugins.
+         Some general cleanups in iec958 framer.
+
+2005-09-01 21:07:34 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * common:
+       * m4/Makefile.am:
+       * m4/as-arts.m4:
+       * m4/esd.m4:
+       * m4/gst-alsa.m4:
+       * m4/gst-artsc.m4:
+       * m4/gst-matroska.m4:
+       * m4/ogg.m4:
+       * m4/vorbis.m4:
+         fix distcheck; remove some old m4s
+         Original commit message from CVS:
+         fix distcheck; remove some old m4s
+
+2005-09-01 17:31:21 +0000  Michael Smith <msmith@xiph.org>
+
+       * ChangeLog:
+       * configure.ac:
+       * gst/iec958/Makefile.am:
+       * gst/iec958/ac3_padder.c:
+       * gst/iec958/ac3_padder.h:
+       * gst/iec958/ac3iec.c:
+       * gst/iec958/ac3iec.h:
+         AC3 -> IEC958 (S/PDIF) framer, based on Martin Soto's 0.8 plugin
+         Original commit message from CVS:
+         AC3 -> IEC958 (S/PDIF) framer, based on Martin Soto's 0.8 plugin
+
+2005-09-01 11:52:34 +0000  Wim Taymans <wim.taymans@gmail.com>
+
+         gst/dvdlpcmdec/gstdvdlpcmdec.c: Cleanups, fixed header parsing and stripping.
+         Original commit message from CVS:
+         * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_setcaps),
+         (gst_dvdlpcmdec_chain_dvd), (gst_dvdlpcmdec_chain_raw),
+         (gst_dvdlpcmdec_change_state):
+         Cleanups, fixed header parsing and stripping.
+
+2005-09-01 11:34:39 +0000  Michael Smith <msmith@xiph.org>
+
+       * ChangeLog:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+         Use the right bytes when parsing the LPCM dvd header
+         Original commit message from CVS:
+         Use the right bytes when parsing the LPCM dvd header
+
+2005-09-01 11:16:15 +0000  Michael Smith <msmith@xiph.org>
+
+       * ChangeLog:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+         Return the correct values from chain function
+         Original commit message from CVS:
+         Return the correct values from chain function
+
+2005-09-01 10:04:53 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+       * common:
+       * docs/Makefile.am:
+       * docs/plugins/.gitignore:
+       * docs/random/ChangeLog-0.8:
+       * docs/version.entities.in:
+         adding doc stuff
+         Original commit message from CVS:
+         adding doc stuff
+
+2005-08-31 19:37:08 +0000  Michael Smith <msmith@xiph.org>
+
+       * ChangeLog:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+         Restructure LPCM decoder to not expect the demuxer to parse the LPCM header; instead do this internally. Also support...
+         Original commit message from CVS:
+         Restructure LPCM decoder to not expect the demuxer to parse the LPCM
+         header; instead do this internally. Also support the old way, using
+         a different mime-type. CVS:
+
+2001-12-17 18:37:01 +0000  Thomas Vander Stichele <thomas@apestaart.org>
+
+         building up speed
+         Original commit message from CVS:
+         building up speed
+
diff --git a/subprojects/gst-plugins-ugly/MAINTAINERS b/subprojects/gst-plugins-ugly/MAINTAINERS
new file mode 100644 (file)
index 0000000..72aac8e
--- /dev/null
@@ -0,0 +1,12 @@
+GStreamer is currently maintained by the consensus of a number
+of people, including, but not limited to:
+
+ Jan Schmidt <thaytan@noraisin.net>
+ Wim Taymans <wim.taymans@gmail.com>
+ David Schleef <ds@schleef.org>
+ Tim-Philipp Müller <tim centricular net>
+ Sebastian Dröge <slomo@coaxion.net>
+
+Maintainer-related issues should be addressed to:
+
+  gstreamer-devel@lists.freedesktop.org
diff --git a/subprojects/gst-plugins-ugly/NEWS b/subprojects/gst-plugins-ugly/NEWS
new file mode 100644 (file)
index 0000000..0e581c3
--- /dev/null
@@ -0,0 +1,299 @@
+GStreamer 1.20 Release Notes
+
+GStreamer 1.20 has not been released yet. It is scheduled for release
+around October/November 2021.
+
+1.19.x is the unstable development version that is being developed in
+the git main branch and which will eventually result in 1.20, and 1.19.2
+is the current development release in that series
+
+It is expected that feature freeze will be in early October 2021,
+followed by one or two 1.19.9x pre-releases and the new 1.20 stable
+release around October/November 2021.
+
+1.20 will be backwards-compatible to the stable 1.18, 1.16, 1.14, 1.12,
+1.10, 1.8, 1.6,, 1.4, 1.2 and 1.0 release series.
+
+See https://gstreamer.freedesktop.org/releases/1.20/ for the latest
+version of this document.
+
+Last updated: Wednesday 22 September 2021, 18:00 UTC (log)
+
+Introduction
+
+The GStreamer team is proud to announce a new major feature release in
+the stable 1.x API series of your favourite cross-platform multimedia
+framework!
+
+As always, this release is again packed with many new features, bug
+fixes and other improvements.
+
+Highlights
+
+-   this section will be completed in due course
+
+Major new features and changes
+
+Noteworthy new features and API
+
+-   this section will be filled in in due course
+
+New elements
+
+-   this section will be filled in in due course
+
+New element features and additions
+
+-   this section will be filled in in due course
+
+Plugin and library moves
+
+-   this section will be filled in in due course
+
+-   There were no plugin moves or library moves in this cycle.
+
+Plugin removals
+
+The following elements or plugins have been removed:
+
+-   this section will be filled in in due course
+
+Miscellaneous API additions
+
+-   this section will be filled in in due course
+
+Miscellaneous performance, latency and memory optimisations
+
+-   this section will be filled in in due course
+
+Miscellaneous other changes and enhancements
+
+-   this section will be filled in in due course
+
+Tracing framework and debugging improvements
+
+-   this section will be filled in in due course
+
+Tools
+
+-   this section will be filled in in due course
+
+GStreamer RTSP server
+
+-   this section will be filled in in due course
+
+GStreamer VAAPI
+
+-   this section will be filled in in due course
+
+GStreamer OMX
+
+-   this section will be filled in in due course
+
+GStreamer Editing Services and NLE
+
+-   this section will be filled in in due course
+
+GStreamer validate
+
+-   this section will be filled in in due course
+
+GStreamer Python Bindings
+
+-   this section will be filled in in due course
+
+GStreamer C# Bindings
+
+-   this section will be filled in in due course
+
+GStreamer Rust Bindings and Rust Plugins
+
+The GStreamer Rust bindings are released separately with a different
+release cadence that’s tied to gtk-rs, but the latest release has
+already been updated for the upcoming new GStreamer 1.20 API.
+
+gst-plugins-rs, the module containing GStreamer plugins written in Rust,
+has also seen lots of activity with many new elements and plugins.
+
+What follows is a list of elements and plugins available in
+gst-plugins-rs, so people don’t miss out on all those potentially useful
+elements that have no C equivalent.
+
+-   FIXME: add new elements
+
+Rust audio plugins
+
+-   audiornnoise: New element for audio denoising which implements the
+    noise removal algorithm of the Xiph RNNoise library, in Rust
+-   rsaudioecho: Port of the audioecho element from gst-plugins-good
+    rsaudioloudnorm: Live audio loudness normalization element based on
+    the FFmpeg af_loudnorm filter
+-   claxondec: FLAC lossless audio codec decoder element based on the
+    pure-Rust claxon implementation
+-   csoundfilter: Audio filter that can use any filter defined via the
+    Csound audio programming language
+-   lewtondec: Vorbis audio decoder element based on the pure-Rust
+    lewton implementation
+
+Rust video plugins
+
+-   cdgdec/cdgparse: Decoder and parser for the CD+G video codec based
+    on a pure-Rust CD+G implementation, used for example by karaoke CDs
+-   cea608overlay: CEA-608 Closed Captions overlay element
+-   cea608tott: CEA-608 Closed Captions to timed-text (e.g. VTT or SRT
+    subtitles) converter
+-   tttocea608: CEA-608 Closed Captions from timed-text converter
+-   mccenc/mccparse: MacCaption Closed Caption format encoder and parser
+-   sccenc/sccparse: Scenarist Closed Caption format encoder and parser
+-   dav1dec: AV1 video decoder based on the dav1d decoder implementation
+    by the VLC project
+-   rav1enc: AV1 video encoder based on the fast and pure-Rust rav1e
+    encoder implementation
+-   rsflvdemux: Alternative to the flvdemux FLV demuxer element from
+    gst-plugins-good, not feature-equivalent yet
+-   rsgifenc/rspngenc: GIF/PNG encoder elements based on the pure-Rust
+    implementations by the image-rs project
+
+Rust text plugins
+
+-   textwrap: Element for line-wrapping timed text (e.g. subtitles) for
+    better screen-fitting, including hyphenation support for some
+    languages
+
+Rust network plugins
+
+-   reqwesthttpsrc: HTTP(S) source element based on the Rust
+    reqwest/hyper HTTP implementations and almost feature-equivalent
+    with the main GStreamer HTTP source souphttpsrc
+-   s3src/s3sink: Source/sink element for the Amazon S3 cloud storage
+-   awstranscriber: Live audio to timed text transcription element using
+    the Amazon AWS Transcribe API
+
+Generic Rust plugins
+
+-   sodiumencrypter/sodiumdecrypter: Encryption/decryption element based
+    on libsodium/NaCl
+-   togglerecord: Recording element that allows to pause/resume
+    recordings easily and considers keyframe boundaries
+-   fallbackswitch/fallbacksrc: Elements for handling potentially
+    failing (network) sources, restarting them on errors/timeout and
+    showing a fallback stream instead
+-   threadshare: Set of elements that provide alternatives for various
+    existing GStreamer elements but allow to share the streaming threads
+    between each other to reduce the number of threads
+-   rsfilesrc/rsfilesink: File source/sink elements as replacements for
+    the existing filesrc/filesink elements
+
+Build and Dependencies
+
+-   this section will be filled in in due course
+
+gst-build
+
+-   this section will be filled in in due course
+
+Cerbero
+
+Cerbero is a meta build system used to build GStreamer plus dependencies
+on platforms where dependencies are not readily available, such as
+Windows, Android, iOS and macOS.
+
+General improvements
+
+-   this section will be filled in in due course
+
+macOS / iOS
+
+-   this section will be filled in in due course
+
+Windows
+
+-   this section will be filled in in due course
+
+Windows MSI installer
+
+-   this section will be filled in in due course
+
+Linux
+
+-   this section will be filled in in due course
+
+Android
+
+-   this section will be filled in in due course
+
+Platform-specific changes and improvements
+
+Android
+
+-   this section will be filled in in due course
+
+macOS and iOS
+
+-   this section will be filled in in due course
+
+Windows
+
+-   this section will be filled in in due course
+
+Linux
+
+-   this section will be filled in in due course
+
+Documentation improvements
+
+-   this section will be filled in in due course
+
+Possibly Breaking Changes
+
+-   this section will be filled in in due course
+-   MPEG-TS SCTE-35 API changes (FIXME: flesh out)
+-   gst_parse_launch() and friends now error out on non-existing
+    properties on top-level bins where they would silently fail and
+    ignore those before.
+
+Known Issues
+
+-   this section will be filled in in due course
+
+-   There are a couple of known WebRTC-related regressions/blockers:
+
+    -   webrtc: DTLS setup with Chrome is broken
+    -   webrtcbin: First keyframe is usually lost
+
+Contributors
+
+-   this section will be filled in in due course
+
+… and many others who have contributed bug reports, translations, sent
+suggestions or helped testing.
+
+Stable 1.20 branch
+
+After the 1.20.0 release there will be several 1.20.x bug-fix releases
+which will contain bug fixes which have been deemed suitable for a
+stable branch, but no new features or intrusive changes will be added to
+a bug-fix release usually. The 1.20.x bug-fix releases will be made from
+the git 1.20 branch, which will be a stable branch.
+
+1.20.0
+
+1.20.0 is scheduled to be released around October/November 2021.
+
+Schedule for 1.22
+
+Our next major feature release will be 1.22, and 1.21 will be the
+unstable development version leading up to the stable 1.22 release. The
+development of 1.21/1.22 will happen in the git main branch.
+
+The plan for the 1.22 development cycle is yet to be confirmed.
+
+1.22 will be backwards-compatible to the stable 1.20, 1.18, 1.16, 1.14,
+1.12, 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0 release series.
+
+------------------------------------------------------------------------
+
+These release notes have been prepared by Tim-Philipp Müller with
+contributions from …
+
+License: CC BY-SA 4.0
diff --git a/subprojects/gst-plugins-ugly/README b/subprojects/gst-plugins-ugly/README
new file mode 100644 (file)
index 0000000..c95e53e
--- /dev/null
@@ -0,0 +1,252 @@
+GStreamer 1.19.x development series
+
+WHAT IT IS
+----------
+
+This is GStreamer, a framework for streaming media.
+
+WHERE TO START
+--------------
+
+We have a website at
+
+  https://gstreamer.freedesktop.org
+
+Our documentation, including tutorials, API reference and FAQ can be found at
+
+  https://gstreamer.freedesktop.org/documentation/
+
+You can subscribe to our mailing lists:
+
+  https://lists.freedesktop.org/mailman/listinfo/gstreamer-announce
+
+  https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
+
+We track bugs, feature requests and merge requests (patches) in GitLab at
+
+  https://gitlab.freedesktop.org/gstreamer/
+
+You can join us on IRC - #gstreamer on irc.freenode.org
+
+GStreamer 1.0 series
+--------------------
+
+Starring
+
+  GSTREAMER
+
+The core around which all other modules revolve.  Base functionality and
+libraries, some essential elements, documentation, and testing.
+
+  BASE
+
+A well-groomed and well-maintained collection of GStreamer plug-ins and
+elements, spanning the range of possible types of elements one would want
+to write for GStreamer.  
+
+And introducing, for the first time ever, on the development screen ...
+
+  THE GOOD
+
+ --- "Such ingratitude.  After all the times I've saved your life."
+
+A collection of plug-ins you'd want to have right next to you on the
+battlefield.  Shooting sharp and making no mistakes, these plug-ins have it
+all: good looks, good code, and good licensing.  Documented and dressed up
+in tests.  If you're looking for a role model to base your own plug-in on,
+here it is.
+
+If you find a plot hole or a badly lip-synced line of code in them,
+let us know - it is a matter of honour for us to ensure Blondie doesn't look
+like he's been walking 100 miles through the desert without water.
+
+  THE UGLY
+
+  --- "When you have to shoot, shoot.  Don't talk."
+
+There are times when the world needs a color between black and white.
+Quality code to match the good's, but two-timing, backstabbing and ready to
+sell your freedom down the river.  These plug-ins might have a patent noose
+around their neck, or a lock-up license, or any other problem that makes you
+think twice about shipping them.
+
+We don't call them ugly because we like them less.  Does a mother love her
+son less because he's not as pretty as the other ones ? No  - she commends
+him on his great personality.  These plug-ins are the life of the party.
+And we'll still step in and set them straight if you report any unacceptable
+behaviour - because there are two kinds of people in the world, my friend:
+those with a rope around their neck and the people who do the cutting.
+
+  THE BAD
+
+  --- "That an accusation?"
+
+No perfectly groomed moustache or any amount of fine clothing is going to
+cover up the truth - these plug-ins are Bad with a capital B. 
+They look fine on the outside, and might even appear to get the job done, but
+at the end of the day they're a black sheep. Without a golden-haired angel
+to watch over them, they'll probably land in an unmarked grave at the final
+showdown.
+
+Don't bug us about their quality - exercise your Free Software rights,
+patch up the offender and send us the patch on the fastest steed you can
+steal from the Confederates. Because you see, in this world, there's two
+kinds of people, my friend: those with loaded guns and those who dig.
+You dig.
+
+The Lowdown
+-----------
+
+  --- "I've never seen so many plug-ins wasted so badly."
+
+GStreamer Plug-ins has grown so big that it's hard to separate the wheat from
+the chaff.  Also, distributors have brought up issues about the legal status
+of some of the plug-ins we ship.  To remedy this, we've divided the previous
+set of available plug-ins into four modules:
+
+- gst-plugins-base: a small and fixed set of plug-ins, covering a wide range
+  of possible types of elements; these are continuously kept up-to-date
+  with any core changes during the development series.
+
+  - We believe distributors can safely ship these plug-ins.
+  - People writing elements should base their code on these elements.
+  - These elements come with examples, documentation, and regression tests.
+
+- gst-plugins-good: a set of plug-ins that we consider to have good quality
+  code, correct functionality, our preferred license (LGPL for the plug-in
+  code, LGPL or LGPL-compatible for the supporting library).
+
+  - We believe distributors can safely ship these plug-ins.
+  - People writing elements should base their code on these elements.
+- gst-plugins-ugly: a set of plug-ins that have good quality and correct
+  functionality, but distributing them might pose problems.  The license
+  on either the plug-ins or the supporting libraries might not be how we'd
+  like. The code might be widely known to present patent problems.
+
+  - Distributors should check if they want/can ship these plug-ins.
+  - People writing elements should base their code on these elements.
+
+- gst-plugins-bad: a set of plug-ins that aren't up to par compared to the
+  rest.  They might be close to being good quality, but they're missing
+  something - be it a good code review, some documentation, a set of tests,
+  a real live maintainer, or some actual wide use.
+  If the blanks are filled in they might be upgraded to become part of
+  either gst-plugins-good or gst-plugins-ugly, depending on the other factors.
+
+  - If the plug-ins break, you can't complain - instead, you can fix the
+    problem and send us a patch, or bribe someone into fixing them for you.
+  - New contributors can start here for things to work on.
+
+PLATFORMS
+---------
+
+- Linux is of course fully supported
+- FreeBSD is reported to work; other BSDs should work too; same for Solaris
+- MacOS works, binary 1.x packages can be built using the cerbero build tool
+- Windows works; binary 1.x packages can be built using the cerbero build tool
+  - MSys/MinGW builds
+  - Microsoft Visual Studio builds are also available and supported
+- Android works, binary 1.x packages can be built using the cerbero build tool
+- iOS works
+
+INSTALLING FROM PACKAGES
+------------------------
+
+You should always prefer installing from packages first.  GStreamer is
+well-maintained for a number of distributions, including Fedora, Debian,
+Ubuntu, Mandrake, Arch Linux, Gentoo, ...
+
+Only in cases where you:
+
+ - want to hack on GStreamer
+ - want to verify that a bug has been fixed
+ - do not have a sane distribution
+
+should you choose to build from source tarballs or git.
+
+Find more information about the various packages at
+
+  https://gstreamer.freedesktop.org/download/
+
+COMPILING FROM SOURCE TARBALLS
+------------------------------
+
+- again, make sure that you really need to install from source!
+  If GStreamer is one of your first projects ever that you build from source,
+  consider taking on an easier project.
+
+- you need a recent version of Meson installed, see
+
+    http://mesonbuild.com/Getting-meson.html
+
+  and
+
+    https://gitlab.freedesktop.org/gstreamer/gst-build/blob/master/README.md
+
+- run
+
+    meson build
+    ninja -C build
+
+  to build GStreamer.
+
+- if you want to install it (not required, but what you usually want to do), run
+
+    ninja -C build install
+
+- try out a simple test:
+  gst-launch-1.0 -v fakesrc num_buffers=5 ! fakesink
+  (If you didn't install GStreamer, run `./build/tools/gst-launch-1.0`)
+
+  If it outputs a bunch of messages from fakesrc and fakesink, everything is
+  ok.
+
+  If it did not work, keep in mind that you might need to adjust the
+  PATH and/or LD_LIBRARY_PATH environment variables to make the system
+  find GStreamer in the prefix where you installed (by default that is /usr/local).
+
+- After this, you're ready to install gst-plugins, which will provide the
+  functionality you're probably looking for by now, so go on and read
+  that README.
+
+COMPILING FROM GIT
+------------------
+
+You can build an uninstalled GStreamer from git for development or testing
+purposes without affecting your system installation.
+
+Get started with:
+
+    git clone https://gitlab.freedesktop.org/gstreamer/gst-build
+    meson build
+    ninja -C build
+    ninja -C build uninstalled
+
+For more information, see the `gst-build` module and its documentation:
+
+  https://gitlab.freedesktop.org/gstreamer/gst-build/blob/master/README.md
+
+
+PLUG-IN DEPENDENCIES AND LICENSES
+---------------------------------
+
+GStreamer is developed under the terms of the LGPL (see COPYING file for
+details). Some of our plug-ins however rely on libraries which are available
+under other licenses. This means that if you are distributing an application
+which has a non-GPL compatible license (for instance a closed-source
+application) with GStreamer, you have to make sure not to distribute GPL-linked
+plug-ins.
+
+When using GPL-linked plug-ins, GStreamer is for all practical reasons
+under the GPL itself.
+
+HISTORY
+-------
+
+The fundamental design comes from the video pipeline at Oregon Graduate
+Institute, as well as some ideas from DirectMedia.  It's based on plug-ins that
+will provide the various codec and other functionality.  The interface
+hopefully is generic enough for various companies (ahem, Apple) to release
+binary codecs for Linux, until such time as they get a clue and release the
+source.
diff --git a/subprojects/gst-plugins-ugly/README.static-linking b/subprojects/gst-plugins-ugly/README.static-linking
new file mode 100644 (file)
index 0000000..6d8299b
--- /dev/null
@@ -0,0 +1,174 @@
+=================================
+ GStreamer Static Linking README
+=================================
+
+DRAFT, April 2013
+
+
+   I. INTRODUCTION
+
+It is possible to link GStreamer libraries, plugins and applications
+statically, both in case of free/libre/open-source software applications
+and proprietary applications. On some platforms static linking may even
+be required.
+
+However, distributing statically linked binaries using GStreamer usually
+requires additional effort to stay compliant with the GNU LGPL v2.1 license.
+
+The purpose of this document is to draw attention to this fact, and to
+summarise in layman's terms what we believe is required from anyone
+distributing statically linked GStreamer binaries. Most of this also
+applies to dynamically linked GStreamer binaries.
+
+
+   II. DISCLAIMER
+
+This document is not legal advice, nor is it comprehensive. It may use
+words in ways that do not match the definition or use in the license
+text. It may even be outright wrong. Read the license text for all the
+details, it is the only legally binding document in this respect.
+
+This document is primarily concerned with the implications for the
+distribution of binaries based on LGPL-licensed software as imposed by
+the LGPL license, but there may be other restrictions to the distribution
+of such binaries, such as terms and conditions of distribution channels
+(e.g. "app stores").
+
+
+   III. THE SPIRIT OF THE LGPL LICENSE
+
+The GNU LGPL v2.1 license allows use of such-licensed software by
+proprietary applications, but still aims to ensure that at least the
+LGPL-licensed software parts remain free under all circumstances. This
+means any changes to LGPL-licensed source code must be documented and
+be made available on request to those who received binaries of the
+software. It also means that it must be possible to make changes to the
+LGPL-licensed software parts and make the application use those, as far
+as that is possible. And that recipients of an application using
+LGPL-licensed software are made aware of their rights according to the
+LGPL license.
+
+In an environment where GStreamer libraries and plugins are used as
+dynamically-loaded shared objects (DLL/.so/.dyn files), this is usually
+not a big problem, because it is fairly easy to compile a modified version
+of the GStreamer libraries or LGPL plugins, and the application will/should
+just pick up and use the modified version automatically. All that is needed
+is for the original, LGPL-licensed source code and source code modifications
+to be made available, and for a way to build the libraries or plugins for
+the platform required (usually that will be using the build system scripts
+that come with GStreamer, and using the typical build environment on the
+system in question, but where that is not the case the needed build scripts
+and/or tools would need to be provided as well).
+
+
+   IV. THINGS YOU NEED TO DO
+
+  * You must tell users of your application that you are using LGPL-licensed
+    software, which LGPL-licensed software exactly, and you must provide them
+    with a copy of the license so they know their rights under the LGPL.
+
+  * You must provide (on request) all the source code and all the changes
+    or additions you have made to the LGPL-licensed software you are using.
+
+    For GStreamer code we would recommend that the changes be provided either
+    in form of a branch in a git repository, or as a set of "git format-patch"-
+    style patches against a GStreamer release or a snapshot of a GStreamer git
+    repository. The patches should ideally say what was changed and why it
+    was changed, and there should ideally be separate patches for independent
+    changes.
+
+  * You must provide a way for users of your application to make changes to
+    the LGPL-licensed parts of the code, and re-create a full application
+    binary with the changes (using the standard toolchain and tools of the
+    target platform; if you are using a custom toolchain or custom tools
+    you must provide these and document how to use them to create a new
+    application binary).
+
+    Note that this of course does not mean that the user is allowed to
+    re-distribute the changed application. Nor does it mean that you have
+    to provide your proprietary source code - it is sufficient to provide a
+    ready-made compiled object file that can be relinked into an application
+    binary with the re-compiled LGPL components.
+
+
+   V. THINGS TO LOOK OUT FOR
+
+While most GStreamer plugins and the libraries they depend on are licensed
+under the LGPL or even more permissive licenses, that is not the case for
+all plugins and libraries used, esp. those in the gst-plugins-ugly or
+some of those in the gst-plugins-bad set of plugins.
+
+When statically linking proprietary code, care must be taken not to
+statically link plugins or libraries that are licensed under less permissive
+terms than the LGPL, such as e.g. GPL-licensed libraries.
+
+
+   VI. SPECIAL CONSIDERATIONS FOR SPECIFIC USE-CASES
+
+
+   1. Proprietary GStreamer/GLib-based Application On iOS
+
+Let's assume an individual or a company wants to distribute a proprietary
+iOS application that is built on top of GStreamer and GLib through
+Apple's App Store. At the time of writing the Apple iPhone developer
+agreement didn’t allow the bundling of shared libraries, so distributing
+a proprietary iOS application with shared libraries is only possible using
+distribution mechanisms outside of the App Store and/or only to jailbroken
+devices, a prospect that may not appeal to our individual or company. So the
+only alternative then is to link everything statically, which means the
+obligations mentioned above come into play.
+
+
+   2. Example: Jabber on iOS
+
+Tandberg (now Cisco) created a Jabber application for iOS, based on GStreamer.
+On request they provided an LGPL compliance bundle in form of a zip file, with
+roughly the following contents:
+
+buildapp.sh
+readme.txt
+Jabber/Jabber-Info.plist
+Jabber/libip.a [236MB binary with proprietary code]
+Jabber/main.mm
+Jabber/xcconfig/Application.xcconfig
+Jabber/xcconfig/Debug.xcconfig
+Jabber/xcconfig/Release.xcconfig
+Jabber/xcconfig/Shared.xcconfig
+Jabber/Resources/*.lproj/Localizable.strings
+Jabber/Resources/{Images,Audio,Sounds,IB,Message Styles,Emoticons,Fonts}/*
+Jabber/Resources/*
+Jabber.xcodeproj/project.pbxproj
+Jabber.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+opensource/build/config.site
+opensource/build/m4/movi.m4
+opensource/build/scripts/clean-deps.sh
+opensource/build/scripts/fixup-makefile.sh
+opensource/build/scripts/MoviMaker.py
+opensource/build.sh
+opensource/env.sh
+opensource/Makefile
+opensource/external/glib/*
+opensource/external/gstreamer/{gstreamer,gst-plugins-*}/*
+opensource/external/openssl/*
+opensource/external/proxy-libintl/*
+opensource/toolchain/darwin-x86/bin/{misc autotoools,m4,glib-mkenums,glib-genmarshal,libtool,pkg-config,etc.}
+opensource/toolchain/darwin-x86/share/{aclocal,aclocal-1.11,autoconf,automake-1.11,libtool}/*
+opensource/toolchain/darwin-x86/share/Config.pm
+opensource/toolchain/darwin-x86/share/Config.pm.movi.in
+patches/glib/glib.patch
+patches/gst-plugins-bad/gst-plugins-bad.patch
+patches/gst-plugins-base/gst-plugins-base.patch
+patches/gst-plugins-good/gst-plugins-good.patch
+patches/gstreamer/gstreamer.patch
+patches/openssl/openssl.patch
+
+readme.txt starts with "This Readme file describes how to build the Cisco 
+Jabber for iPad application. You need to install Xcode, but the final package
+is built by running buildapp.sh." and describes how to build project,
+prerequisites, the procedure in detail, and a "How to Include Provisioning
+Profile Manually / Alternate Code Signing Instructions" section.
+
+
+   3. Random Links Which May Be Of Interest
+
+[0] http://multinc.com/2009/08/24/compatibility-between-the-iphone-app-store-and-the-lgpl/
diff --git a/subprojects/gst-plugins-ugly/RELEASE b/subprojects/gst-plugins-ugly/RELEASE
new file mode 100644 (file)
index 0000000..cef054a
--- /dev/null
@@ -0,0 +1,96 @@
+This is GStreamer gst-plugins-ugly 1.19.2.
+
+GStreamer 1.19 is the development branch leading up to the next major
+stable version which will be 1.20.
+
+The 1.19 development series adds new features on top of the 1.18 series and is
+part of the API and ABI-stable 1.x release series of the GStreamer multimedia
+framework.
+
+Full release notes will one day be found at:
+
+  https://gstreamer.freedesktop.org/releases/1.20/
+
+Binaries for Android, iOS, Mac OS X and Windows will usually be provided
+shortly after the release.
+
+This module will not be very useful by itself and should be used in conjunction
+with other GStreamer modules for a complete multimedia experience.
+
+ - gstreamer: provides the core GStreamer libraries and some generic plugins
+
+ - gst-plugins-base: a basic set of well-supported plugins and additional
+                     media-specific GStreamer helper libraries for audio,
+                     video, rtsp, rtp, tags, OpenGL, etc.
+
+ - gst-plugins-good: a set of well-supported plugins under our preferred
+                     license
+
+ - gst-plugins-ugly: a set of well-supported plugins which might pose
+                     problems for distributors
+
+ - gst-plugins-bad: a set of plugins of varying quality that have not made
+                    their way into one of core/base/good/ugly yet, for one
+                    reason or another. Many of these are are production quality
+                    elements, but may still be missing documentation or unit
+                    tests; others haven't passed the rigorous quality testing
+                    we expect yet.
+
+ - gst-libav: a set of codecs plugins based on the ffmpeg library. This is
+                    where you can find audio and video decoders and encoders
+                    for a wide variety of formats including H.264, AAC, etc.
+
+ - gstreamer-vaapi: hardware-accelerated video decoding and encoding using
+                    VA-API on Linux. Primarily for Intel graphics hardware.
+
+ - gst-omx: hardware-accelerated video decoding and encoding, primarily for
+                    embedded Linux systems that provide an OpenMax
+                    implementation layer such as the Raspberry Pi.
+
+ - gst-rtsp-server: library to serve files or streaming pipelines via RTSP
+
+ - gst-editing-services: library an plugins for non-linear editing
+
+==== Download ====
+
+You can find source releases of gstreamer in the download
+directory: https://gstreamer.freedesktop.org/src/gstreamer/
+
+The git repository and details how to clone it can be found at
+https://gitlab.freedesktop.org/gstreamer/
+
+==== Homepage ====
+
+The project's website is https://gstreamer.freedesktop.org/
+
+==== Support and Bugs ====
+
+We have recently moved from GNOME Bugzilla to GitLab on freedesktop.org
+for bug reports and feature requests:
+
+  https://gitlab.freedesktop.org/gstreamer
+
+Please submit patches via GitLab as well, in form of Merge Requests. See
+
+  https://gstreamer.freedesktop.org/documentation/contribute/
+
+for more details.
+
+For help and support, please subscribe to and send questions to the
+gstreamer-devel mailing list (see below for details).
+
+There is also a #gstreamer IRC channel on the Freenode IRC network.
+
+==== Developers ====
+
+GStreamer source code repositories can be found on GitLab on freedesktop.org:
+
+  https://gitlab.freedesktop.org/gstreamer
+
+and can also be cloned from there and this is also where you can submit
+Merge Requests or file issues for bugs or feature requests.
+
+Interested developers of the core library, plugins, and applications should
+subscribe to the gstreamer-devel list:
+
+  https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
diff --git a/subprojects/gst-plugins-ugly/REQUIREMENTS b/subprojects/gst-plugins-ugly/REQUIREMENTS
new file mode 100644 (file)
index 0000000..cb0cfbd
--- /dev/null
@@ -0,0 +1,48 @@
+GStreamer uses a *large* array of tools and libraries, most of which are
+optional.  We have attempted to make sure that any code that depends on
+optional libraries doesn't get built unless you have those libraries.  If
+you find this not to be the case, please, let us know by filing a bug
+report at http://bugzilla.gnome.org/.
+
+
+Required tools:
+===============
+
+An extra set of tools is required if you wish to build GStreamer out of
+git (using autogen.sh):
+
+autoconf 2.52 or better 
+automake 1.5
+gettext 0.11.5
+libtool v1.4 or better
+pkgconfig 0.9.0 or better (http://www.freedesktop.org/software/pkgconfig/)
+
+Required libraries:
+===================
+
+The core GStreamer libraries. See the gstreamer/ module in GStreamer cvs, or
+the version that corresponds to this plugin release.
+
+Optional libraries:
+===================
+
+This file lists supporting libraries for which gst-plugins contains plugins,
+as well as their minimum version.  You can find the corresponding plugins in
+ext/(library)
+
+a52dec         (for the a52dec AC-3 decoder)
+                       http://liba52.sourceforge.net/
+opencore-amr (for the AMR-NB decoder and encoder and the AMR-WB decoder)
+                       http://sourceforge.net/projects/opencore-amr/
+libdvdread     (for the dvdreadsrc)
+                       http://www.dtek.chalmers.se/groups/dvd/
+                       (optional: libcss for encrypted DVDs)
+mpeg2dec       (for mpeg2 related plugins and dvd playback)
+                       http://libmpeg2.sourceforge.net/
+liborc         (for the liborc optimization library)
+                       http://code.entropywave.com/download/orc/
+cdio           (for the cdio CDDA CD audio source)
+                       http://savannah.gnu.org/projects/libcdio/
+x264           (for the x264enc H.264 encoder)
+                       http://www.videolan.org/developers/x264.html
+sidplay                FIXME
diff --git a/subprojects/gst-plugins-ugly/docs/all_index.md b/subprojects/gst-plugins-ugly/docs/all_index.md
new file mode 100644 (file)
index 0000000..4577a79
--- /dev/null
@@ -0,0 +1,6 @@
+---
+short-description: Plugins from gst-plugins-ugly
+...
+
+# Plugins
+
diff --git a/subprojects/gst-plugins-ugly/docs/gst_api_version.in b/subprojects/gst-plugins-ugly/docs/gst_api_version.in
new file mode 100644 (file)
index 0000000..efa22cd
--- /dev/null
@@ -0,0 +1 @@
+@GST_API_VERSION@
diff --git a/subprojects/gst-plugins-ugly/docs/gst_plugins_cache.json b/subprojects/gst-plugins-ugly/docs/gst_plugins_cache.json
new file mode 100644 (file)
index 0000000..e3290a1
--- /dev/null
@@ -0,0 +1,2015 @@
+{
+    "a52dec": {
+        "description": "Decodes ATSC A/52 encoded audio streams",
+        "elements": {
+            "a52dec": {
+                "author": "David I. Lehn <dlehn@users.sourceforge.net>",
+                "description": "Decodes ATSC A/52 encoded audio streams",
+                "hierarchy": [
+                    "GstA52Dec",
+                    "GstAudioDecoder",
+                    "GstElement",
+                    "GstObject",
+                    "GInitiallyUnowned",
+                    "GObject"
+                ],
+                "klass": "Codec/Decoder/Audio/Converter",
+                "long-name": "ATSC A/52 audio decoder",
+                "pad-templates": {
+                    "sink": {
+                        "caps": "audio/x-ac3:\naudio/ac3:\naudio/x-private1-ac3:\n",
+                        "direction": "sink",
+                        "presence": "always"
+                    },
+                    "src": {
+                        "caps": "audio/x-raw:\n         format: F32LE\n         layout: interleaved\n           rate: [ 4000, 96000 ]\n       channels: [ 1, 6 ]\n",
+                        "direction": "src",
+                        "presence": "always"
+                    }
+                },
+                "properties": {
+                    "drc": {
+                        "blurb": "Use Dynamic Range Compression",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "false",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gboolean",
+                        "writable": true
+                    },
+                    "lfe": {
+                        "blurb": "LFE",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "false",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gboolean",
+                        "writable": true
+                    },
+                    "mode": {
+                        "blurb": "Decoding Mode (default 3f2r)",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": " (0)",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "GstA52DecMode",
+                        "writable": true
+                    }
+                },
+                "rank": "secondary"
+            }
+        },
+        "filename": "gsta52dec",
+        "license": "GPL",
+        "other-types": {
+            "GstA52DecMode": {
+                "kind": "enum",
+                "values": [
+                    {
+                        "desc": "Mono",
+                        "name": "mono",
+                        "value": "1"
+                    },
+                    {
+                        "desc": "Stereo",
+                        "name": "stereo",
+                        "value": "2"
+                    },
+                    {
+                        "desc": "3 Front",
+                        "name": "3f",
+                        "value": "3"
+                    },
+                    {
+                        "desc": "2 Front, 1 Rear",
+                        "name": "2f1r",
+                        "value": "4"
+                    },
+                    {
+                        "desc": "3 Front, 1 Rear",
+                        "name": "3f1r",
+                        "value": "5"
+                    },
+                    {
+                        "desc": "2 Front, 2 Rear",
+                        "name": "2f2r",
+                        "value": "6"
+                    },
+                    {
+                        "desc": "3 Front, 2 Rear",
+                        "name": "3f2r",
+                        "value": "7"
+                    },
+                    {
+                        "desc": "Dolby",
+                        "name": "dolby",
+                        "value": "10"
+                    }
+                ]
+            }
+        },
+        "package": "GStreamer Ugly Plug-ins",
+        "source": "gst-plugins-ugly",
+        "tracers": {},
+        "url": "Unknown package origin"
+    },
+    "amrnb": {
+        "description": "Adaptive Multi-Rate Narrow-Band",
+        "elements": {
+            "amrnbdec": {
+                "author": "GStreamer maintainers <gstreamer-devel@lists.freedesktop.org>",
+                "description": "Adaptive Multi-Rate Narrow-Band audio decoder",
+                "hierarchy": [
+                    "GstAmrnbDec",
+                    "GstAudioDecoder",
+                    "GstElement",
+                    "GstObject",
+                    "GInitiallyUnowned",
+                    "GObject"
+                ],
+                "klass": "Codec/Decoder/Audio",
+                "long-name": "AMR-NB audio decoder",
+                "pad-templates": {
+                    "sink": {
+                        "caps": "audio/AMR:\n           rate: 8000\n       channels: 1\n",
+                        "direction": "sink",
+                        "presence": "always"
+                    },
+                    "src": {
+                        "caps": "audio/x-raw:\n         format: S16LE\n         layout: interleaved\n           rate: 8000\n       channels: 1\n",
+                        "direction": "src",
+                        "presence": "always"
+                    }
+                },
+                "properties": {
+                    "variant": {
+                        "blurb": "The decoder variant",
+                        "conditionally-available": false,
+                        "construct": true,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "IF1 (0)",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "GstAmrnbVariant",
+                        "writable": true
+                    }
+                },
+                "rank": "primary"
+            },
+            "amrnbenc": {
+                "author": "Wim Taymans <wim.taymans@gmail.com>",
+                "description": "Adaptive Multi-Rate Narrow-Band audio encoder",
+                "hierarchy": [
+                    "GstAmrnbEnc",
+                    "GstAudioEncoder",
+                    "GstElement",
+                    "GstObject",
+                    "GInitiallyUnowned",
+                    "GObject"
+                ],
+                "interfaces": [
+                    "GstPreset"
+                ],
+                "klass": "Codec/Encoder/Audio",
+                "long-name": "AMR-NB audio encoder",
+                "pad-templates": {
+                    "sink": {
+                        "caps": "audio/x-raw:\n         format: S16LE\n         layout: interleaved\n           rate: 8000\n       channels: 1\n",
+                        "direction": "sink",
+                        "presence": "always"
+                    },
+                    "src": {
+                        "caps": "audio/AMR:\n           rate: 8000\n       channels: 1\n",
+                        "direction": "src",
+                        "presence": "always"
+                    }
+                },
+                "properties": {
+                    "band-mode": {
+                        "blurb": "Encoding Band Mode (Kbps)",
+                        "conditionally-available": false,
+                        "construct": true,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "MR122 (7)",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "GstAmrnbEncBandMode",
+                        "writable": true
+                    }
+                },
+                "rank": "secondary"
+            }
+        },
+        "filename": "gstamrnb",
+        "license": "unknown",
+        "other-types": {
+            "GstAmrnbEncBandMode": {
+                "kind": "enum",
+                "values": [
+                    {
+                        "desc": "MR475",
+                        "name": "MR475",
+                        "value": "0"
+                    },
+                    {
+                        "desc": "MR515",
+                        "name": "MR515",
+                        "value": "1"
+                    },
+                    {
+                        "desc": "MR59",
+                        "name": "MR59",
+                        "value": "2"
+                    },
+                    {
+                        "desc": "MR67",
+                        "name": "MR67",
+                        "value": "3"
+                    },
+                    {
+                        "desc": "MR74",
+                        "name": "MR74",
+                        "value": "4"
+                    },
+                    {
+                        "desc": "MR795",
+                        "name": "MR795",
+                        "value": "5"
+                    },
+                    {
+                        "desc": "MR102",
+                        "name": "MR102",
+                        "value": "6"
+                    },
+                    {
+                        "desc": "MR122",
+                        "name": "MR122",
+                        "value": "7"
+                    },
+                    {
+                        "desc": "MRDTX",
+                        "name": "MRDTX",
+                        "value": "8"
+                    }
+                ]
+            },
+            "GstAmrnbVariant": {
+                "kind": "enum",
+                "values": [
+                    {
+                        "desc": "IF1",
+                        "name": "IF1",
+                        "value": "0"
+                    },
+                    {
+                        "desc": "IF2",
+                        "name": "IF2",
+                        "value": "1"
+                    }
+                ]
+            }
+        },
+        "package": "GStreamer Ugly Plug-ins",
+        "source": "gst-plugins-ugly",
+        "tracers": {},
+        "url": "Unknown package origin"
+    },
+    "amrwbdec": {
+        "description": "Adaptive Multi-Rate Wide-Band Decoder",
+        "elements": {
+            "amrwbdec": {
+                "author": "Renato Araujo <renato.filho@indt.org.br>",
+                "description": "Adaptive Multi-Rate Wideband audio decoder",
+                "hierarchy": [
+                    "GstAmrwbDec",
+                    "GstAudioDecoder",
+                    "GstElement",
+                    "GstObject",
+                    "GInitiallyUnowned",
+                    "GObject"
+                ],
+                "klass": "Codec/Decoder/Audio",
+                "long-name": "AMR-WB audio decoder",
+                "pad-templates": {
+                    "sink": {
+                        "caps": "audio/AMR-WB:\n           rate: 16000\n       channels: 1\n",
+                        "direction": "sink",
+                        "presence": "always"
+                    },
+                    "src": {
+                        "caps": "audio/x-raw:\n         format: S16LE\n         layout: interleaved\n           rate: 16000\n       channels: 1\n",
+                        "direction": "src",
+                        "presence": "always"
+                    }
+                },
+                "properties": {},
+                "rank": "primary"
+            }
+        },
+        "filename": "gstamrwbdec",
+        "license": "unknown",
+        "other-types": {},
+        "package": "GStreamer Ugly Plug-ins",
+        "source": "gst-plugins-ugly",
+        "tracers": {},
+        "url": "Unknown package origin"
+    },
+    "asf": {
+        "description": "Demuxes and muxes audio and video in Microsofts ASF format",
+        "elements": {
+            "asfdemux": {
+                "author": "Owen Fraser-Green <owen@discobabe.net>",
+                "description": "Demultiplexes ASF Streams",
+                "hierarchy": [
+                    "GstASFDemux",
+                    "GstElement",
+                    "GstObject",
+                    "GInitiallyUnowned",
+                    "GObject"
+                ],
+                "klass": "Codec/Demuxer",
+                "long-name": "ASF Demuxer",
+                "pad-templates": {
+                    "audio_%%u": {
+                        "caps": "ANY",
+                        "direction": "src",
+                        "presence": "sometimes"
+                    },
+                    "sink": {
+                        "caps": "video/x-ms-asf:\n",
+                        "direction": "sink",
+                        "presence": "always"
+                    },
+                    "video_%%u": {
+                        "caps": "ANY",
+                        "direction": "src",
+                        "presence": "sometimes"
+                    }
+                },
+                "rank": "secondary",
+                "signals": {}
+            },
+            "rtpasfdepay": {
+                "author": "Tim-Philipp Müller <tim centricular net>, Wim Taymans <wim.taymans@gmail.com>",
+                "description": "Extracts ASF streams from RTP",
+                "hierarchy": [
+                    "GstRtpAsfDepay",
+                    "GstRTPBaseDepayload",
+                    "GstElement",
+                    "GstObject",
+                    "GInitiallyUnowned",
+                    "GObject"
+                ],
+                "klass": "Codec/Depayloader/Network",
+                "long-name": "RTP ASF packet depayloader",
+                "pad-templates": {
+                    "sink": {
+                        "caps": "application/x-rtp:\n          media: { (string)application, (string)video, (string)audio }\n        payload: [ 96, 127 ]\n     clock-rate: [ 1, 2147483647 ]\n  encoding-name: X-ASF-PF\n",
+                        "direction": "sink",
+                        "presence": "always"
+                    },
+                    "src": {
+                        "caps": "video/x-ms-asf:\n",
+                        "direction": "src",
+                        "presence": "always"
+                    }
+                },
+                "properties": {},
+                "rank": "marginal"
+            },
+            "rtspwms": {
+                "author": "Wim Taymans <wim.taymans@gmail.com>",
+                "description": "Extends RTSP so that it can handle WMS setup",
+                "hierarchy": [
+                    "GstRTSPWMS",
+                    "GstElement",
+                    "GstObject",
+                    "GInitiallyUnowned",
+                    "GObject"
+                ],
+                "interfaces": [
+                    "GstRTSPExtension"
+                ],
+                "klass": "Network/Extension/Protocol",
+                "long-name": "WMS RTSP Extension",
+                "rank": "secondary"
+            }
+        },
+        "filename": "gstasf",
+        "license": "LGPL",
+        "other-types": {},
+        "package": "GStreamer Ugly Plug-ins",
+        "source": "gst-plugins-ugly",
+        "tracers": {},
+        "url": "Unknown package origin"
+    },
+    "cdio": {
+        "description": "Read audio from audio CDs",
+        "elements": {
+            "cdiocddasrc": {
+                "author": "Tim-Philipp Müller <tim centricular net>",
+                "description": "Read audio from CD using libcdio",
+                "hierarchy": [
+                    "GstCdioCddaSrc",
+                    "GstAudioCdSrc",
+                    "GstPushSrc",
+                    "GstBaseSrc",
+                    "GstElement",
+                    "GstObject",
+                    "GInitiallyUnowned",
+                    "GObject"
+                ],
+                "interfaces": [
+                    "GstURIHandler"
+                ],
+                "klass": "Source/File",
+                "long-name": "CD audio source (CDDA)",
+                "pad-templates": {
+                    "src": {
+                        "caps": "audio/x-raw:\n         format: S16LE\n         layout: interleaved\n           rate: 44100\n       channels: 2\n",
+                        "direction": "src",
+                        "presence": "always"
+                    }
+                },
+                "properties": {
+                    "read-speed": {
+                        "blurb": "Read from device at the specified speed (-1 = default)",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "-1",
+                        "max": "100",
+                        "min": "-1",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gint",
+                        "writable": true
+                    }
+                },
+                "rank": "secondary - 1"
+            }
+        },
+        "filename": "gstcdio",
+        "license": "GPL",
+        "other-types": {},
+        "package": "GStreamer Ugly Plug-ins",
+        "source": "gst-plugins-ugly",
+        "tracers": {},
+        "url": "Unknown package origin"
+    },
+    "dvdlpcmdec": {
+        "description": "Decode DVD LPCM frames into standard PCM",
+        "elements": {
+            "dvdlpcmdec": {
+                "author": "Jan Schmidt <jan@noraisin.net>, Michael Smith <msmith@fluendo.com>",
+                "description": "Decode DVD LPCM frames into standard PCM audio",
+                "hierarchy": [
+                    "GstDvdLpcmDec",
+                    "GstAudioDecoder",
+                    "GstElement",
+                    "GstObject",
+                    "GInitiallyUnowned",
+                    "GObject"
+                ],
+                "klass": "Codec/Decoder/Audio",
+                "long-name": "DVD LPCM Audio decoder",
+                "pad-templates": {
+                    "sink": {
+                        "caps": "audio/x-private1-lpcm:\naudio/x-private2-lpcm:\naudio/x-private-ts-lpcm:\naudio/x-lpcm:\n          width: { (int)16, (int)20, (int)24 }\n           rate: { (int)32000, (int)44100, (int)48000, (int)96000 }\n       channels: [ 1, 8 ]\n  dynamic_range: [ 0, 255 ]\n       emphasis: { (boolean)true, (boolean)false }\n           mute: { (boolean)true, (boolean)false }\n",
+                        "direction": "sink",
+                        "presence": "always"
+                    },
+                    "src": {
+                        "caps": "audio/x-raw:\n         format: { S16BE, S24BE }\n         layout: interleaved\n           rate: { (int)32000, (int)44100, (int)48000, (int)96000 }\n       channels: [ 1, 8 ]\n",
+                        "direction": "src",
+                        "presence": "always"
+                    }
+                },
+                "properties": {},
+                "rank": "primary"
+            }
+        },
+        "filename": "gstdvdlpcmdec",
+        "license": "LGPL",
+        "other-types": {},
+        "package": "GStreamer Ugly Plug-ins",
+        "source": "gst-plugins-ugly",
+        "tracers": {},
+        "url": "Unknown package origin"
+    },
+    "dvdread": {
+        "description": "Access a DVD with dvdread",
+        "elements": {
+            "dvdreadsrc": {
+                "author": "Erik Walthinsen <omega@cse.ogi.edu>",
+                "description": "Access a DVD title/chapter/angle using libdvdread",
+                "hierarchy": [
+                    "GstDvdReadSrc",
+                    "GstPushSrc",
+                    "GstBaseSrc",
+                    "GstElement",
+                    "GstObject",
+                    "GInitiallyUnowned",
+                    "GObject"
+                ],
+                "interfaces": [
+                    "GstURIHandler"
+                ],
+                "klass": "Source/File/DVD",
+                "long-name": "DVD Source",
+                "pad-templates": {
+                    "src": {
+                        "caps": "video/mpeg:\n    mpegversion: 2\n   systemstream: true\n",
+                        "direction": "src",
+                        "presence": "always"
+                    }
+                },
+                "properties": {
+                    "angle": {
+                        "blurb": "angle",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "1",
+                        "max": "999",
+                        "min": "1",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gint",
+                        "writable": true
+                    },
+                    "chapter": {
+                        "blurb": "chapter",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "1",
+                        "max": "999",
+                        "min": "1",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gint",
+                        "writable": true
+                    },
+                    "device": {
+                        "blurb": "DVD device location",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "/dev/dvd",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gchararray",
+                        "writable": true
+                    },
+                    "title": {
+                        "blurb": "title",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "1",
+                        "max": "999",
+                        "min": "1",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gint",
+                        "writable": true
+                    }
+                },
+                "rank": "none"
+            }
+        },
+        "filename": "gstdvdread",
+        "license": "GPL",
+        "other-types": {},
+        "package": "GStreamer Ugly Plug-ins",
+        "source": "gst-plugins-ugly",
+        "tracers": {},
+        "url": "Unknown package origin"
+    },
+    "dvdsub": {
+        "description": "DVD subtitle parser and decoder",
+        "elements": {
+            "dvdsubdec": {
+                "author": "Wim Taymans <wim.taymans@gmail.com>, Jan Schmidt <thaytan@mad.scientist.com>",
+                "description": "Decodes DVD subtitles into AYUV video frames",
+                "hierarchy": [
+                    "GstDvdSubDec",
+                    "GstElement",
+                    "GstObject",
+                    "GInitiallyUnowned",
+                    "GObject"
+                ],
+                "klass": "Codec/Decoder/Video",
+                "long-name": "DVD subtitle decoder",
+                "pad-templates": {
+                    "sink": {
+                        "caps": "subpicture/x-dvd:\n",
+                        "direction": "sink",
+                        "presence": "always"
+                    },
+                    "src": {
+                        "caps": "video/x-raw:\n         format: { AYUV, ARGB }\n          width: 720\n         height: 576\n      framerate: 0/1\n",
+                        "direction": "src",
+                        "presence": "always"
+                    }
+                },
+                "rank": "none"
+            },
+            "dvdsubparse": {
+                "author": "Mark Nauwelaerts <mnauw@users.sourceforge.net>",
+                "description": "Parses and packetizes DVD subtitle streams",
+                "hierarchy": [
+                    "GstDvdSubParse",
+                    "GstElement",
+                    "GstObject",
+                    "GInitiallyUnowned",
+                    "GObject"
+                ],
+                "klass": "Codec/Parser/Subtitle",
+                "long-name": "DVD subtitle parser",
+                "pad-templates": {
+                    "sink": {
+                        "caps": "subpicture/x-dvd:\n",
+                        "direction": "sink",
+                        "presence": "always"
+                    },
+                    "src": {
+                        "caps": "subpicture/x-dvd:\n         parsed: true\n",
+                        "direction": "src",
+                        "presence": "always"
+                    }
+                },
+                "rank": "none"
+            }
+        },
+        "filename": "gstdvdsub",
+        "license": "LGPL",
+        "other-types": {},
+        "package": "GStreamer Ugly Plug-ins",
+        "source": "gst-plugins-ugly",
+        "tracers": {},
+        "url": "Unknown package origin"
+    },
+    "mpeg2dec": {
+        "description": "LibMpeg2 decoder",
+        "elements": {
+            "mpeg2dec": {
+                "author": "Wim Taymans <wim.taymans@chello.be>",
+                "description": "Uses libmpeg2 to decode MPEG video streams",
+                "hierarchy": [
+                    "GstMpeg2dec",
+                    "GstVideoDecoder",
+                    "GstElement",
+                    "GstObject",
+                    "GInitiallyUnowned",
+                    "GObject"
+                ],
+                "klass": "Codec/Decoder/Video",
+                "long-name": "mpeg1 and mpeg2 video decoder",
+                "pad-templates": {
+                    "sink": {
+                        "caps": "video/mpeg:\n    mpegversion: [ 1, 2 ]\n   systemstream: false\n",
+                        "direction": "sink",
+                        "presence": "always"
+                    },
+                    "src": {
+                        "caps": "video/x-raw:\n         format: { YV12, I420, Y42B, Y444 }\n          width: [ 16, 4096 ]\n         height: [ 16, 4096 ]\n      framerate: [ 0/1, 2147483647/1 ]\n",
+                        "direction": "src",
+                        "presence": "always"
+                    }
+                },
+                "properties": {},
+                "rank": "secondary"
+            }
+        },
+        "filename": "gstmpeg2dec",
+        "license": "GPL",
+        "other-types": {},
+        "package": "GStreamer Ugly Plug-ins",
+        "source": "gst-plugins-ugly",
+        "tracers": {},
+        "url": "Unknown package origin"
+    },
+    "realmedia": {
+        "description": "RealMedia support plugins",
+        "elements": {
+            "pnmsrc": {
+                "author": "Wim Taymans <wim.taymans@gmail.com>",
+                "description": "Receive data over the network via PNM",
+                "hierarchy": [
+                    "GstPNMSrc",
+                    "GstPushSrc",
+                    "GstBaseSrc",
+                    "GstElement",
+                    "GstObject",
+                    "GInitiallyUnowned",
+                    "GObject"
+                ],
+                "interfaces": [
+                    "GstURIHandler"
+                ],
+                "klass": "Source/Network",
+                "long-name": "PNM packet receiver",
+                "pad-templates": {
+                    "src": {
+                        "caps": "application/vnd.rn-realmedia:\n",
+                        "direction": "src",
+                        "presence": "always"
+                    }
+                },
+                "properties": {
+                    "location": {
+                        "blurb": "Location of the PNM url to read",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "NULL",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gchararray",
+                        "writable": true
+                    }
+                },
+                "rank": "marginal"
+            },
+            "rademux": {
+                "author": "Tim-Philipp Müller <tim centricular net>",
+                "description": "Demultiplex a RealAudio file",
+                "hierarchy": [
+                    "GstRealAudioDemux",
+                    "GstElement",
+                    "GstObject",
+                    "GInitiallyUnowned",
+                    "GObject"
+                ],
+                "klass": "Codec/Demuxer",
+                "long-name": "RealAudio Demuxer",
+                "pad-templates": {
+                    "sink": {
+                        "caps": "application/x-pn-realaudio:\n",
+                        "direction": "sink",
+                        "presence": "always"
+                    },
+                    "src": {
+                        "caps": "ANY",
+                        "direction": "src",
+                        "presence": "sometimes"
+                    }
+                },
+                "rank": "secondary",
+                "signals": {}
+            },
+            "rdtdepay": {
+                "author": "Lutz Mueller <lutz at topfrose dot de>, Wim Taymans <wim@fluendo.com>",
+                "description": "Extracts RealMedia from RDT packets",
+                "hierarchy": [
+                    "GstRDTDepay",
+                    "GstElement",
+                    "GstObject",
+                    "GInitiallyUnowned",
+                    "GObject"
+                ],
+                "klass": "Codec/Depayloader/Network",
+                "long-name": "RDT packet parser",
+                "pad-templates": {
+                    "sink": {
+                        "caps": "application/x-rdt:\n          media: application\n     clock-rate: [ 1, 2147483647 ]\n  encoding-name: X-REAL-RDT\n",
+                        "direction": "sink",
+                        "presence": "always"
+                    },
+                    "src": {
+                        "caps": "application/vnd.rn-realmedia:\n",
+                        "direction": "src",
+                        "presence": "always"
+                    }
+                },
+                "rank": "marginal"
+            },
+            "rdtmanager": {
+                "author": "Wim Taymans <wim.taymans@gmail.com>",
+                "description": "Accepts raw RTP and RTCP packets and sends them forward",
+                "hierarchy": [
+                    "GstRDTManager",
+                    "GstElement",
+                    "GstObject",
+                    "GInitiallyUnowned",
+                    "GObject"
+                ],
+                "klass": "Codec/Parser/Network",
+                "long-name": "RTP Decoder",
+                "pad-templates": {
+                    "recv_rtcp_sink_%%u": {
+                        "caps": "application/x-rtcp:\n",
+                        "direction": "sink",
+                        "presence": "request"
+                    },
+                    "recv_rtp_sink_%%u": {
+                        "caps": "application/x-rdt:\n",
+                        "direction": "sink",
+                        "presence": "request"
+                    },
+                    "recv_rtp_src_%%u_%%u_%%u": {
+                        "caps": "application/x-rdt:\n",
+                        "direction": "src",
+                        "presence": "sometimes"
+                    },
+                    "rtcp_src_%%u": {
+                        "caps": "application/x-rtcp:\n",
+                        "direction": "src",
+                        "presence": "request"
+                    }
+                },
+                "properties": {
+                    "latency": {
+                        "blurb": "Amount of ms to buffer",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "200",
+                        "max": "-1",
+                        "min": "0",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "guint",
+                        "writable": true
+                    }
+                },
+                "rank": "none",
+                "signals": {
+                    "clear-pt-map": {
+                        "args": [],
+                        "return-type": "void",
+                        "when": "last"
+                    },
+                    "on-bye-ssrc": {
+                        "args": [
+                            {
+                                "name": "arg0",
+                                "type": "guint"
+                            },
+                            {
+                                "name": "arg1",
+                                "type": "guint"
+                            }
+                        ],
+                        "return-type": "void",
+                        "when": "last"
+                    },
+                    "on-bye-timeout": {
+                        "args": [
+                            {
+                                "name": "arg0",
+                                "type": "guint"
+                            },
+                            {
+                                "name": "arg1",
+                                "type": "guint"
+                            }
+                        ],
+                        "return-type": "void",
+                        "when": "last"
+                    },
+                    "on-npt-stop": {
+                        "args": [
+                            {
+                                "name": "arg0",
+                                "type": "guint"
+                            },
+                            {
+                                "name": "arg1",
+                                "type": "guint"
+                            }
+                        ],
+                        "return-type": "void",
+                        "when": "last"
+                    },
+                    "on-timeout": {
+                        "args": [
+                            {
+                                "name": "arg0",
+                                "type": "guint"
+                            },
+                            {
+                                "name": "arg1",
+                                "type": "guint"
+                            }
+                        ],
+                        "return-type": "void",
+                        "when": "last"
+                    },
+                    "request-pt-map": {
+                        "args": [
+                            {
+                                "name": "arg0",
+                                "type": "guint"
+                            },
+                            {
+                                "name": "arg1",
+                                "type": "guint"
+                            }
+                        ],
+                        "return-type": "GstCaps",
+                        "when": "last"
+                    }
+                }
+            },
+            "rmdemux": {
+                "author": "David Schleef <ds@schleef.org>",
+                "description": "Demultiplex a RealMedia file into audio and video streams",
+                "hierarchy": [
+                    "GstRMDemux",
+                    "GstElement",
+                    "GstObject",
+                    "GInitiallyUnowned",
+                    "GObject"
+                ],
+                "klass": "Codec/Demuxer",
+                "long-name": "RealMedia Demuxer",
+                "pad-templates": {
+                    "audio_%%u": {
+                        "caps": "ANY",
+                        "direction": "src",
+                        "presence": "sometimes"
+                    },
+                    "sink": {
+                        "caps": "application/vnd.rn-realmedia:\n",
+                        "direction": "sink",
+                        "presence": "always"
+                    },
+                    "video_%%u": {
+                        "caps": "ANY",
+                        "direction": "src",
+                        "presence": "sometimes"
+                    }
+                },
+                "rank": "primary",
+                "signals": {}
+            },
+            "rtspreal": {
+                "author": "Wim Taymans <wim.taymans@gmail.com>",
+                "description": "Extends RTSP so that it can handle RealMedia setup",
+                "hierarchy": [
+                    "GstRTSPReal",
+                    "GstElement",
+                    "GstObject",
+                    "GInitiallyUnowned",
+                    "GObject"
+                ],
+                "interfaces": [
+                    "GstRTSPExtension"
+                ],
+                "klass": "Network/Extension/Protocol",
+                "long-name": "RealMedia RTSP Extension",
+                "rank": "marginal"
+            }
+        },
+        "filename": "gstrealmedia",
+        "license": "LGPL",
+        "other-types": {},
+        "package": "GStreamer Ugly Plug-ins",
+        "source": "gst-plugins-ugly",
+        "tracers": {},
+        "url": "Unknown package origin"
+    },
+    "sid": {
+        "description": "Uses libsidplay to decode .sid files",
+        "elements": {
+            "siddec": {
+                "author": "Wim Taymans <wim.taymans@gmail.com>",
+                "description": "Use libsidplay to decode SID audio tunes",
+                "hierarchy": [
+                    "GstSidDec",
+                    "GstElement",
+                    "GstObject",
+                    "GInitiallyUnowned",
+                    "GObject"
+                ],
+                "klass": "Codec/Decoder/Audio",
+                "long-name": "Sid decoder",
+                "pad-templates": {
+                    "sink": {
+                        "caps": "audio/x-sid:\n",
+                        "direction": "sink",
+                        "presence": "always"
+                    },
+                    "src": {
+                        "caps": "audio/x-raw:\n         format: { S16LE, U16LE, S8, U8 }\n         layout: interleaved\n           rate: [ 8000, 48000 ]\n       channels: [ 1, 2 ]\n",
+                        "direction": "src",
+                        "presence": "always"
+                    }
+                },
+                "properties": {
+                    "blocksize": {
+                        "blurb": "Size in bytes to output per buffer",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "4096",
+                        "max": "-1",
+                        "min": "1",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "guint",
+                        "writable": true
+                    },
+                    "clock": {
+                        "blurb": "clock",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "pal (1)",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "GstSidClock",
+                        "writable": true
+                    },
+                    "filter": {
+                        "blurb": "filter",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "true",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gboolean",
+                        "writable": true
+                    },
+                    "force-speed": {
+                        "blurb": "force_speed",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "false",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gboolean",
+                        "writable": true
+                    },
+                    "measured-volume": {
+                        "blurb": "measured_volume",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "true",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gboolean",
+                        "writable": true
+                    },
+                    "memory": {
+                        "blurb": "memory",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "bank-switching (32)",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "GstSidMemory",
+                        "writable": true
+                    },
+                    "metadata": {
+                        "blurb": "Metadata",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "GstCaps",
+                        "writable": false
+                    },
+                    "mos8580": {
+                        "blurb": "mos8580",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "false",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gboolean",
+                        "writable": true
+                    },
+                    "tune": {
+                        "blurb": "tune",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "0",
+                        "max": "100",
+                        "min": "0",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gint",
+                        "writable": true
+                    }
+                },
+                "rank": "primary"
+            }
+        },
+        "filename": "gstsid",
+        "license": "GPL",
+        "other-types": {
+            "GstSidClock": {
+                "kind": "enum",
+                "values": [
+                    {
+                        "desc": "PAL",
+                        "name": "pal",
+                        "value": "1"
+                    },
+                    {
+                        "desc": "NTSC",
+                        "name": "ntsc",
+                        "value": "2"
+                    }
+                ]
+            },
+            "GstSidMemory": {
+                "kind": "enum",
+                "values": [
+                    {
+                        "desc": "Bank Switching",
+                        "name": "bank-switching",
+                        "value": "32"
+                    },
+                    {
+                        "desc": "Transparent ROM",
+                        "name": "transparent-rom",
+                        "value": "33"
+                    },
+                    {
+                        "desc": "Playsid Environment",
+                        "name": "playsid-environment",
+                        "value": "34"
+                    }
+                ]
+            }
+        },
+        "package": "GStreamer Ugly Plug-ins",
+        "source": "gst-plugins-ugly",
+        "tracers": {},
+        "url": "Unknown package origin"
+    },
+    "x264": {
+        "description": "libx264-based H264 plugins",
+        "elements": {
+            "x264enc": {
+                "author": "Josef Zlomek <josef.zlomek@itonis.tv>, Mark Nauwelaerts <mnauw@users.sf.net>",
+                "description": "H264 Encoder",
+                "hierarchy": [
+                    "GstX264Enc",
+                    "GstVideoEncoder",
+                    "GstElement",
+                    "GstObject",
+                    "GInitiallyUnowned",
+                    "GObject"
+                ],
+                "interfaces": [
+                    "GstPreset"
+                ],
+                "klass": "Codec/Encoder/Video",
+                "long-name": "x264enc",
+                "pad-templates": {
+                    "sink": {
+                        "caps": "video/x-raw:\n      framerate: [ 0/1, 2147483647/1 ]\n          width: [ 1, 2147483647 ]\n         height: [ 1, 2147483647 ]\n         format: { Y444, Y42B, I420, YV12, NV12, Y444_10LE, I422_10LE, I420_10LE }\n",
+                        "direction": "sink",
+                        "presence": "always"
+                    },
+                    "src": {
+                        "caps": "video/x-h264:\n      framerate: [ 0/1, 2147483647/1 ]\n          width: [ 1, 2147483647 ]\n         height: [ 1, 2147483647 ]\n  stream-format: { (string)avc, (string)byte-stream }\n      alignment: au\n        profile: { (string)high-4:4:4, (string)high-4:2:2, (string)high-10, (string)high, (string)main, (string)baseline, (string)constrained-baseline, (string)high-4:4:4-intra, (string)high-4:2:2-intra, (string)high-10-intra }\n",
+                        "direction": "src",
+                        "presence": "always"
+                    }
+                },
+                "properties": {
+                    "analyse": {
+                        "blurb": "Partitions to consider",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "(none)",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "GstX264EncAnalyse",
+                        "writable": true
+                    },
+                    "aud": {
+                        "blurb": "Use AU (Access Unit) delimiter",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "true",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gboolean",
+                        "writable": true
+                    },
+                    "b-adapt": {
+                        "blurb": "Automatically decide how many B-frames to use",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "true",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gboolean",
+                        "writable": true
+                    },
+                    "b-pyramid": {
+                        "blurb": "Keep some B-frames as references",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "false",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gboolean",
+                        "writable": true
+                    },
+                    "bframes": {
+                        "blurb": "Number of B-frames between I and P",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "0",
+                        "max": "16",
+                        "min": "0",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "guint",
+                        "writable": true
+                    },
+                    "bitrate": {
+                        "blurb": "Bitrate in kbit/sec",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "2048",
+                        "max": "2048000",
+                        "min": "1",
+                        "mutable": "playing",
+                        "readable": true,
+                        "type": "guint",
+                        "writable": true
+                    },
+                    "byte-stream": {
+                        "blurb": "Generate byte stream format of NALU",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "false",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gboolean",
+                        "writable": true
+                    },
+                    "cabac": {
+                        "blurb": "Enable CABAC entropy coding",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "true",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gboolean",
+                        "writable": true
+                    },
+                    "dct8x8": {
+                        "blurb": "Adaptive spatial transform size",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "false",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gboolean",
+                        "writable": true
+                    },
+                    "frame-packing": {
+                        "blurb": "Set frame packing mode for Stereoscopic content",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "auto (-1)",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "GstX264EncFramePacking",
+                        "writable": true
+                    },
+                    "insert-vui": {
+                        "blurb": "Insert VUI NAL in stream",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "true",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gboolean",
+                        "writable": true
+                    },
+                    "interlaced": {
+                        "blurb": "Interlaced material",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "false",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gboolean",
+                        "writable": true
+                    },
+                    "intra-refresh": {
+                        "blurb": "Use Periodic Intra Refresh instead of IDR frames",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "false",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gboolean",
+                        "writable": true
+                    },
+                    "ip-factor": {
+                        "blurb": "Quantizer factor between I- and P-frames",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "1.4",
+                        "max": "2",
+                        "min": "0",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gfloat",
+                        "writable": true
+                    },
+                    "key-int-max": {
+                        "blurb": "Maximal distance between two key-frames (0 for automatic)",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "0",
+                        "max": "2147483647",
+                        "min": "0",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "guint",
+                        "writable": true
+                    },
+                    "mb-tree": {
+                        "blurb": "Macroblock-Tree ratecontrol",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "true",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gboolean",
+                        "writable": true
+                    },
+                    "me": {
+                        "blurb": "Integer pixel motion estimation method",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "hex (1)",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "GstX264EncMe",
+                        "writable": true
+                    },
+                    "multipass-cache-file": {
+                        "blurb": "Filename for multipass cache file",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "x264.log",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gchararray",
+                        "writable": true
+                    },
+                    "noise-reduction": {
+                        "blurb": "Noise reduction strength",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "0",
+                        "max": "100000",
+                        "min": "0",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "guint",
+                        "writable": true
+                    },
+                    "option-string": {
+                        "blurb": "String of x264 options (overridden by element properties) in the format \"key1=value1:key2=value2\".",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gchararray",
+                        "writable": true
+                    },
+                    "pass": {
+                        "blurb": "Encoding pass/type",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "cbr (0)",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "GstX264EncPass",
+                        "writable": true
+                    },
+                    "pb-factor": {
+                        "blurb": "Quantizer factor between P- and B-frames",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "1.3",
+                        "max": "2",
+                        "min": "0",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gfloat",
+                        "writable": true
+                    },
+                    "psy-tune": {
+                        "blurb": "Preset name for psychovisual tuning options",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "none (0)",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "GstX264EncPsyTune",
+                        "writable": true
+                    },
+                    "qp-max": {
+                        "blurb": "Maximum quantizer",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "51",
+                        "max": "63",
+                        "min": "0",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "guint",
+                        "writable": true
+                    },
+                    "qp-min": {
+                        "blurb": "Minimum quantizer",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "10",
+                        "max": "63",
+                        "min": "0",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "guint",
+                        "writable": true
+                    },
+                    "qp-step": {
+                        "blurb": "Maximum quantizer difference between frames",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "4",
+                        "max": "63",
+                        "min": "0",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "guint",
+                        "writable": true
+                    },
+                    "quantizer": {
+                        "blurb": "Constant quantizer or quality to apply",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "21",
+                        "max": "50",
+                        "min": "0",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "guint",
+                        "writable": true
+                    },
+                    "rc-lookahead": {
+                        "blurb": "Number of frames for frametype lookahead",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "40",
+                        "max": "250",
+                        "min": "0",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gint",
+                        "writable": true
+                    },
+                    "ref": {
+                        "blurb": "Number of reference frames",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "3",
+                        "max": "16",
+                        "min": "1",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "guint",
+                        "writable": true
+                    },
+                    "sliced-threads": {
+                        "blurb": "Low latency but lower efficiency threading",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "false",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gboolean",
+                        "writable": true
+                    },
+                    "speed-preset": {
+                        "blurb": "Preset name for speed/quality tradeoff options (can affect decode compatibility - impose restrictions separately for your target decoder)",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "medium (6)",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "GstX264EncPreset",
+                        "writable": true
+                    },
+                    "sps-id": {
+                        "blurb": "SPS and PPS ID number",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "0",
+                        "max": "31",
+                        "min": "0",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "guint",
+                        "writable": true
+                    },
+                    "subme": {
+                        "blurb": "Subpixel motion estimation and partition decision quality: 1=fast, 10=best",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "1",
+                        "max": "10",
+                        "min": "1",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "guint",
+                        "writable": true
+                    },
+                    "sync-lookahead": {
+                        "blurb": "Number of buffer frames for threaded lookahead (-1 for automatic)",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "-1",
+                        "max": "250",
+                        "min": "-1",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gint",
+                        "writable": true
+                    },
+                    "threads": {
+                        "blurb": "Number of threads used by the codec (0 for automatic)",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "0",
+                        "max": "2147483647",
+                        "min": "0",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "guint",
+                        "writable": true
+                    },
+                    "trellis": {
+                        "blurb": "Enable trellis searched quantization",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "true",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gboolean",
+                        "writable": true
+                    },
+                    "tune": {
+                        "blurb": "Preset name for non-psychovisual tuning options",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "(none)",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "GstX264EncTune",
+                        "writable": true
+                    },
+                    "vbv-buf-capacity": {
+                        "blurb": "Size of the VBV buffer in milliseconds",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "600",
+                        "max": "10000",
+                        "min": "0",
+                        "mutable": "playing",
+                        "readable": true,
+                        "type": "guint",
+                        "writable": true
+                    },
+                    "weightb": {
+                        "blurb": "Weighted prediction for B-frames",
+                        "conditionally-available": false,
+                        "construct": false,
+                        "construct-only": false,
+                        "controllable": false,
+                        "default": "false",
+                        "mutable": "null",
+                        "readable": true,
+                        "type": "gboolean",
+                        "writable": true
+                    }
+                },
+                "rank": "primary"
+            }
+        },
+        "filename": "gstx264",
+        "license": "GPL",
+        "other-types": {
+            "GstX264EncAnalyse": {
+                "kind": "flags",
+                "values": [
+                    {
+                        "desc": "i4x4",
+                        "name": "i4x4",
+                        "value": "0x00000001"
+                    },
+                    {
+                        "desc": "i8x8",
+                        "name": "i8x8",
+                        "value": "0x00000002"
+                    },
+                    {
+                        "desc": "p8x8",
+                        "name": "p8x8",
+                        "value": "0x00000010"
+                    },
+                    {
+                        "desc": "p4x4",
+                        "name": "p4x4",
+                        "value": "0x00000020"
+                    },
+                    {
+                        "desc": "b8x8",
+                        "name": "b8x8",
+                        "value": "0x00000100"
+                    }
+                ]
+            },
+            "GstX264EncFramePacking": {
+                "kind": "enum",
+                "values": [
+                    {
+                        "desc": "Automatic (use incoming video information)",
+                        "name": "auto",
+                        "value": "-1"
+                    },
+                    {
+                        "desc": "checkerboard - Left and Right pixels alternate in a checkerboard pattern",
+                        "name": "checkerboard",
+                        "value": "0"
+                    },
+                    {
+                        "desc": "column interleaved - Alternating pixel columns represent Left and Right views",
+                        "name": "column-interleaved",
+                        "value": "1"
+                    },
+                    {
+                        "desc": "row interleaved - Alternating pixel rows represent Left and Right views",
+                        "name": "row-interleaved",
+                        "value": "2"
+                    },
+                    {
+                        "desc": "side by side - The left half of the frame contains the Left eye view, the right half the Right eye view",
+                        "name": "side-by-side",
+                        "value": "3"
+                    },
+                    {
+                        "desc": "top bottom - L is on top, R on bottom",
+                        "name": "top-bottom",
+                        "value": "4"
+                    },
+                    {
+                        "desc": "frame interleaved - Each frame contains either Left or Right view alternately",
+                        "name": "frame-interleaved",
+                        "value": "5"
+                    }
+                ]
+            },
+            "GstX264EncMe": {
+                "kind": "enum",
+                "values": [
+                    {
+                        "desc": "dia",
+                        "name": "dia",
+                        "value": "0"
+                    },
+                    {
+                        "desc": "hex",
+                        "name": "hex",
+                        "value": "1"
+                    },
+                    {
+                        "desc": "umh",
+                        "name": "umh",
+                        "value": "2"
+                    },
+                    {
+                        "desc": "esa",
+                        "name": "esa",
+                        "value": "3"
+                    },
+                    {
+                        "desc": "tesa",
+                        "name": "tesa",
+                        "value": "4"
+                    }
+                ]
+            },
+            "GstX264EncPass": {
+                "kind": "enum",
+                "values": [
+                    {
+                        "desc": "Constant Bitrate Encoding",
+                        "name": "cbr",
+                        "value": "0"
+                    },
+                    {
+                        "desc": "Constant Quantizer",
+                        "name": "quant",
+                        "value": "4"
+                    },
+                    {
+                        "desc": "Constant Quality",
+                        "name": "qual",
+                        "value": "5"
+                    },
+                    {
+                        "desc": "VBR Encoding - Pass 1",
+                        "name": "pass1",
+                        "value": "17"
+                    },
+                    {
+                        "desc": "VBR Encoding - Pass 2",
+                        "name": "pass2",
+                        "value": "18"
+                    },
+                    {
+                        "desc": "VBR Encoding - Pass 3",
+                        "name": "pass3",
+                        "value": "19"
+                    }
+                ]
+            },
+            "GstX264EncPreset": {
+                "kind": "enum",
+                "values": [
+                    {
+                        "desc": "No preset",
+                        "name": "None",
+                        "value": "0"
+                    },
+                    {
+                        "desc": "ultrafast",
+                        "name": "ultrafast",
+                        "value": "1"
+                    },
+                    {
+                        "desc": "superfast",
+                        "name": "superfast",
+                        "value": "2"
+                    },
+                    {
+                        "desc": "veryfast",
+                        "name": "veryfast",
+                        "value": "3"
+                    },
+                    {
+                        "desc": "faster",
+                        "name": "faster",
+                        "value": "4"
+                    },
+                    {
+                        "desc": "fast",
+                        "name": "fast",
+                        "value": "5"
+                    },
+                    {
+                        "desc": "medium",
+                        "name": "medium",
+                        "value": "6"
+                    },
+                    {
+                        "desc": "slow",
+                        "name": "slow",
+                        "value": "7"
+                    },
+                    {
+                        "desc": "slower",
+                        "name": "slower",
+                        "value": "8"
+                    },
+                    {
+                        "desc": "veryslow",
+                        "name": "veryslow",
+                        "value": "9"
+                    },
+                    {
+                        "desc": "placebo",
+                        "name": "placebo",
+                        "value": "10"
+                    }
+                ]
+            },
+            "GstX264EncPsyTune": {
+                "kind": "enum",
+                "values": [
+                    {
+                        "desc": "No tuning",
+                        "name": "none",
+                        "value": "0"
+                    },
+                    {
+                        "desc": "Film",
+                        "name": "film",
+                        "value": "1"
+                    },
+                    {
+                        "desc": "Animation",
+                        "name": "animation",
+                        "value": "2"
+                    },
+                    {
+                        "desc": "Grain",
+                        "name": "grain",
+                        "value": "3"
+                    },
+                    {
+                        "desc": "PSNR",
+                        "name": "psnr",
+                        "value": "4"
+                    },
+                    {
+                        "desc": "SSIM",
+                        "name": "ssim",
+                        "value": "5"
+                    }
+                ]
+            },
+            "GstX264EncTune": {
+                "kind": "flags",
+                "values": [
+                    {
+                        "desc": "Still image",
+                        "name": "stillimage",
+                        "value": "0x00000001"
+                    },
+                    {
+                        "desc": "Fast decode",
+                        "name": "fastdecode",
+                        "value": "0x00000002"
+                    },
+                    {
+                        "desc": "Zero latency",
+                        "name": "zerolatency",
+                        "value": "0x00000004"
+                    }
+                ]
+            }
+        },
+        "package": "GStreamer Ugly Plug-ins",
+        "source": "gst-plugins-ugly",
+        "tracers": {},
+        "url": "Unknown package origin"
+    },
+    "xingmux": {
+        "description": "Add XING tags to mpeg audio files",
+        "elements": {
+            "xingmux": {
+                "author": "Christophe Fergeau <teuf@gnome.org>",
+                "description": "Adds a Xing header to the beginning of a VBR MP3 file",
+                "hierarchy": [
+                    "GstXingMux",
+                    "GstElement",
+                    "GstObject",
+                    "GInitiallyUnowned",
+                    "GObject"
+                ],
+                "klass": "Formatter/Muxer/Metadata",
+                "long-name": "MP3 Xing muxer",
+                "pad-templates": {
+                    "sink": {
+                        "caps": "audio/mpeg:\n    mpegversion: 1\n          layer: [ 1, 3 ]\n",
+                        "direction": "sink",
+                        "presence": "always"
+                    },
+                    "src": {
+                        "caps": "audio/mpeg:\n    mpegversion: 1\n          layer: [ 1, 3 ]\n",
+                        "direction": "src",
+                        "presence": "always"
+                    }
+                },
+                "rank": "marginal"
+            }
+        },
+        "filename": "gstxingmux",
+        "license": "LGPL",
+        "other-types": {},
+        "package": "GStreamer Ugly Plug-ins",
+        "source": "gst-plugins-ugly",
+        "tracers": {},
+        "url": "Unknown package origin"
+    }
+}
\ No newline at end of file
diff --git a/subprojects/gst-plugins-ugly/docs/index.md b/subprojects/gst-plugins-ugly/docs/index.md
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/subprojects/gst-plugins-ugly/docs/meson.build b/subprojects/gst-plugins-ugly/docs/meson.build
new file mode 100644 (file)
index 0000000..5b377e3
--- /dev/null
@@ -0,0 +1,102 @@
+build_hotdoc = false
+
+required_hotdoc_extensions = ['gst-extension']
+plugins_cache = join_paths(meson.current_source_dir(), 'gst_plugins_cache.json')
+if gst_dep.type_name() == 'internal'
+    gst_proj = subproject('gstreamer')
+    plugins_cache_generator = gst_proj.get_variable('plugins_cache_generator')
+else
+    plugins_cache_generator = find_program(join_paths(gst_dep.get_pkgconfig_variable('libexecdir'), 'gstreamer-' + api_version, 'gst-plugins-doc-cache-generator'),
+        required: false)
+endif
+
+if plugins.length() == 0
+    message('All ugly plugins have been disabled')
+elif plugins_cache_generator.found()
+    plugins_doc_dep = custom_target('ugly-plugins-doc-cache',
+        command: [plugins_cache_generator, plugins_cache, '@OUTPUT@', '@INPUT@'],
+        input: plugins,
+        output: 'gst_plugins_cache.json',
+        build_always_stale: true,
+    )
+else
+    warning('GStreamer plugin inspector for documentation not found, can\'t update the cache')
+endif
+
+hotdoc_p = find_program('hotdoc', required: get_option('doc'))
+if not hotdoc_p.found()
+    message('Hotdoc not found, not building the documentation')
+    subdir_done()
+endif
+
+hotdoc_req = '>= 0.11.0'
+hotdoc_version = run_command(hotdoc_p, '--version').stdout()
+if not hotdoc_version.version_compare(hotdoc_req)
+    if get_option('doc').enabled()
+        error('Hotdoc version @0@ not found, got @1@'.format(hotdoc_req, hotdoc_version))
+    else
+        message('Hotdoc version @0@ not found, got @1@'.format(hotdoc_req, hotdoc_version))
+        subdir_done()
+    endif
+endif
+
+hotdoc = import('hotdoc')
+foreach extension: required_hotdoc_extensions
+    if not hotdoc.has_extensions(extension)
+        if get_option('doc').enabled()
+            error('Documentation enabled but @0@ missing'.format(extension))
+        endif
+
+        message('@0@ extension not found, not building documentation'.format(extension))
+        subdir_done()
+    endif
+endforeach
+
+build_hotdoc = true
+docconf = configuration_data()
+docconf.set('GST_API_VERSION', api_version)
+
+configure_file(input : 'gst_api_version.in',
+               output : 'gst_api_version.md',
+               configuration : docconf)
+
+root_rel = '..'
+excludes = []
+foreach f: []
+    excludes += [join_paths(meson.current_source_dir(), root_rel, '..', f)]
+endforeach
+
+libs_doc = []
+plugins_doc = []
+list_plugin_res = run_command(python3, '-c',
+'''
+import sys
+import json
+
+with open("@0@") as f:
+        print(':'.join(json.load(f).keys()), end='')
+'''.format(plugins_cache))
+
+assert(list_plugin_res.returncode() == 0,
+  'Could not list plugins from @0@'.format(plugins_cache))
+
+foreach plugin_name: list_plugin_res.stdout().split(':')
+    plugins_doc += [hotdoc.generate_doc(plugin_name,
+        project_version: api_version,
+        sitemap: 'sitemap.txt',
+        index: 'index.md',
+        gst_index: 'index.md',
+        gst_smart_index: true,
+        gst_c_sources: [
+            join_paths(root_rel, 'sys/*/*.[ch]'),
+            join_paths(root_rel, 'ext/*/*.[ch]'),
+            join_paths(root_rel, 'gst/*/*.[ch]'),
+        ],
+        gst_c_source_filters: excludes,
+        dependencies: [gst_dep, plugins],
+        gst_order_generated_subpages: true,
+        disable_incremental_build: true,
+        gst_cache_file: plugins_cache,
+        gst_plugin_name: plugin_name,
+    )]
+endforeach
diff --git a/subprojects/gst-plugins-ugly/docs/random/ChangeLog-0.8 b/subprojects/gst-plugins-ugly/docs/random/ChangeLog-0.8
new file mode 100644 (file)
index 0000000..0c62918
--- /dev/null
@@ -0,0 +1,17692 @@
+2005-08-31  Michael Smith <msmith@fluendo.com>
+
+       * configure.ac:
+       * gst/dvdlpcmdec/Makefile.am:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcm_reset),
+       (gst_dvdlpcmdec_init), (gst_dvdlpcmdec_link), (update_timestamps),
+       (gst_dvdlpcmdec_chain):
+       * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+         Port LPCM decoder to 0.9
+
+2005-08-30  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * configure.ac:
+         Remove plugins that should have disappeared.
+
+2005-08-30  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * autogen.sh:
+       * configure.ac:
+         Make autogen work again.
+
+2005-08-30  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+       * ext/Makefile.am:
+       * ext/aalib/Makefile.am:
+       * ext/aalib/gstaasink.c:
+       * ext/aalib/gstaasink.h:
+       * ext/cairo/Makefile.am:
+       * ext/cairo/gstcairo.c:
+       * ext/cairo/gsttextoverlay.c:
+       * ext/cairo/gsttextoverlay.h:
+       * ext/cairo/gsttimeoverlay.c:
+       * ext/cairo/gsttimeoverlay.h:
+       * ext/dv/Makefile.am:
+       * ext/dv/NOTES:
+       * ext/dv/demo-play.c:
+       * ext/dv/gstdv.c:
+       * ext/dv/gstdvdec.c:
+       * ext/dv/gstdvdec.h:
+       * ext/dv/gstdvdemux.c:
+       * ext/dv/gstdvdemux.h:
+       * ext/esd/Makefile.am:
+       * ext/esd/README:
+       * ext/esd/esdmon.c:
+       * ext/esd/esdmon.h:
+       * ext/esd/esdsink.c:
+       * ext/esd/esdsink.h:
+       * ext/esd/gstesd.c:
+       * ext/flac/Makefile.am:
+       * ext/flac/flac_compat.h:
+       * ext/flac/gstflac.c:
+       * ext/flac/gstflacdec.c:
+       * ext/flac/gstflacdec.h:
+       * ext/flac/gstflacenc.c:
+       * ext/flac/gstflacenc.h:
+       * ext/flac/gstflactag.c:
+       * ext/flac/gstflactag.h:
+       * ext/gconf/Makefile.am:
+       * ext/gconf/gconf.c:
+       * ext/gconf/gconf.h:
+       * ext/gconf/gstgconfaudiosink.c:
+       * ext/gconf/gstgconfaudiosink.h:
+       * ext/gconf/gstgconfelements.c:
+       * ext/gconf/gstgconfelements.h:
+       * ext/gconf/gstgconfvideosink.c:
+       * ext/gconf/gstgconfvideosink.h:
+       * ext/gdk_pixbuf/Makefile.am:
+       * ext/gdk_pixbuf/gst_loader.c:
+       * ext/gdk_pixbuf/gstgdkanimation.c:
+       * ext/gdk_pixbuf/gstgdkanimation.h:
+       * ext/gdk_pixbuf/gstgdkpixbuf.c:
+       * ext/gdk_pixbuf/gstgdkpixbuf.h:
+       * ext/gdk_pixbuf/pixbufscale.c:
+       * ext/gdk_pixbuf/pixbufscale.h:
+       * ext/jpeg/Makefile.am:
+       * ext/jpeg/README:
+       * ext/jpeg/gstjpeg.c:
+       * ext/jpeg/gstjpegdec.c:
+       * ext/jpeg/gstjpegdec.h:
+       * ext/jpeg/gstjpegenc.c:
+       * ext/jpeg/gstjpegenc.h:
+       * ext/jpeg/gstsmokedec.c:
+       * ext/jpeg/gstsmokedec.h:
+       * ext/jpeg/gstsmokeenc.c:
+       * ext/jpeg/gstsmokeenc.h:
+       * ext/jpeg/smokecodec.c:
+       * ext/jpeg/smokecodec.h:
+       * ext/jpeg/smokeformat.h:
+       * ext/ladspa/Makefile.am:
+       * ext/ladspa/gstladspa.c:
+       * ext/ladspa/gstladspa.h:
+       * ext/ladspa/gstsignalprocessor.c:
+       * ext/ladspa/gstsignalprocessor.h:
+       * ext/ladspa/load.c:
+       * ext/ladspa/search.c:
+       * ext/ladspa/utils.h:
+       * ext/libcaca/Makefile.am:
+       * ext/libcaca/gstcacasink.c:
+       * ext/libcaca/gstcacasink.h:
+       * ext/libmng/Makefile.am:
+       * ext/libmng/gstmng.c:
+       * ext/libmng/gstmng.h:
+       * ext/libmng/gstmngdec.c:
+       * ext/libmng/gstmngdec.h:
+       * ext/libmng/gstmngenc.c:
+       * ext/libmng/gstmngenc.h:
+       * ext/libpng/Makefile.am:
+       * ext/libpng/gstpng.c:
+       * ext/libpng/gstpng.h:
+       * ext/libpng/gstpngdec.c:
+       * ext/libpng/gstpngdec.h:
+       * ext/libpng/gstpngenc.c:
+       * ext/libpng/gstpngenc.h:
+       * ext/mikmod/Makefile.am:
+       * ext/mikmod/README:
+       * ext/mikmod/drv_gst.c:
+       * ext/mikmod/gstmikmod.c:
+       * ext/mikmod/gstmikmod.h:
+       * ext/mikmod/mikmod_reader.c:
+       * ext/mikmod/mikmod_types.c:
+       * ext/mikmod/mikmod_types.h:
+       * ext/pango/Makefile.am:
+       * ext/pango/gsttextoverlay.c:
+       * ext/pango/gsttextoverlay.h:
+       * ext/pango/gsttimeoverlay.c:
+       * ext/pango/gsttimeoverlay.h:
+       * ext/raw1394/Makefile.am:
+       * ext/raw1394/gst1394.c:
+       * ext/raw1394/gstdv1394src.c:
+       * ext/raw1394/gstdv1394src.h:
+       * ext/shout2/Makefile.am:
+       * ext/shout2/gstshout2.c:
+       * ext/shout2/gstshout2.h:
+       * ext/speex/Makefile.am:
+       * ext/speex/gstspeex.c:
+       * ext/speex/gstspeexdec.c:
+       * ext/speex/gstspeexdec.h:
+       * ext/speex/gstspeexenc.c:
+       * ext/speex/gstspeexenc.h:
+       * gst/avi/.cvsignore:
+       * gst/avi/Makefile.am:
+       * gst/avi/README:
+       * gst/avi/avi-ids.h:
+       * gst/avi/avi.vcproj:
+       * gst/avi/gstavi.c:
+       * gst/avi/gstavidemux.c:
+       * gst/avi/gstavidemux.h:
+       * gst/avi/gstavimux.c:
+       * gst/avi/gstavimux.h:
+       * gst/level/gstlevel.c: (gst_level_transform):
+       * sys/Makefile.am:
+       * sys/oss/.cvsignore:
+       * sys/oss/Makefile.am:
+       * sys/oss/gst-i18n-plugin.h:
+       * sys/oss/gstossaudio.c:
+       * sys/oss/gstossdmabuffer.c:
+       * sys/oss/gstossdmabuffer.h:
+       * sys/oss/gstosshelper.c:
+       * sys/oss/gstosshelper.h:
+       * sys/oss/gstossmixer.c:
+       * sys/oss/gstossmixer.h:
+       * sys/oss/gstossmixerelement.c:
+       * sys/oss/gstossmixerelement.h:
+       * sys/oss/gstossmixertrack.c:
+       * sys/oss/gstossmixertrack.h:
+       * sys/oss/gstosssink.c:
+       * sys/oss/gstosssink.h:
+       * sys/oss/gstosssrc.c:
+       * sys/oss/gstosssrc.h:
+       * sys/oss/oss_probe.c:
+       * sys/osxaudio/Makefile.am:
+       * sys/osxaudio/gstosxaudio.c:
+       * sys/osxaudio/gstosxaudioelement.c:
+       * sys/osxaudio/gstosxaudioelement.h:
+       * sys/osxaudio/gstosxaudiosink.c:
+       * sys/osxaudio/gstosxaudiosink.h:
+       * sys/osxaudio/gstosxaudiosrc.c:
+       * sys/osxaudio/gstosxaudiosrc.h:
+       * sys/osxvideo/Makefile.am:
+       * sys/osxvideo/cocoawindow.h:
+       * sys/osxvideo/cocoawindow.m:
+       * sys/osxvideo/osxvideosink.h:
+       * sys/osxvideo/osxvideosink.m:
+         all these plugins are moved to gst-plugins-good
+
+2005-08-28  Flavio Oliveira  <flavio.oliveira@indt.org.br>
+
+       * gst/wavenc/gstwavenc.c: Ported to GStreamer 0.9.
+       Need to fix performance issues.
+
+2005-08-28  Andy Wingo  <wingo@pobox.com>
+
+       * Updates for two-arg init from GST_BOILERPLATE.
+
+       * ext/ladspa/gstsignalprocessor.c (gst_signal_processor_init): Use
+       the second arg for the class, because G_OBJECT_GET_CLASS (self)
+       returns the wrong thing.
+       (gst_signal_processor_add_pad_from_template): Make pads of the
+       right type.
+
+       * ext/ladspa/gstladspa.c (gst_ladspa_class_get_param_spec): Make
+       writable param specs G_PARAM_CONSTRUCT so default values work.
+       (gst_ladspa_init): Use the second arg for the class.
+
+2005-08-26  Andy Wingo  <wingo@pobox.com>
+
+       * ext/ladspa/gstladspa.c: 
+       * ext/ladspa/gstladspa.h: Finish porting, still doesn't work but
+       it does compile and register. I have more features than you.
+       
+       * ext/ladspa/gstsignalprocessor.h: 
+       * ext/ladspa/gstsignalprocessor.c: Updates, bug fixen.
+
+2005-08-26  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/effectv/gstquark.c: (gst_quarktv_init),
+       (gst_quarktv_change_state):
+         do proper cleanup/creation, fixes state changes
+
+2005-08-25  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * gst/level/gstlevel.c: (gst_level_message_new):
+       Revert unpopular change for GST_MESSAGE_SRC to GObject.
+
+2005-08-25  Andy Wingo  <wingo@pobox.com>
+
+       * ext/ladspa/gstladspa.h: 
+       * ext/ladspa/gstladspa.c: Halfway-ported. Doesn't compile yet.
+
+       * ext/ladspa/gstsignalprocessor.h:
+       * ext/ladspa/gstsignalprocessor.c: New files, the start of a base
+       class for DSP elements.
+
+       * configure.ac: Sort the external libs checks, add a ladspa check,
+       output the ladspa makefile.
+
+2005-08-25  Owen Fraser-Green  <owen@discobabe.net>
+
+       * gst/realmedia/rmdemux.c (gst_rmdemux_loop, gst_rmdemux_chain):
+       Fixed EOS.
+       (gst_rmdemux_parse_indx_data, gst_rmdemux_parse_indx): Handle
+       malformed index headers where the packet size is incorrect.
+
+2005-08-24  Andy Wingo  <wingo@pobox.com>
+
+       * ext/dv/gstdvdemux.c (gst_dvdemux_demux_frame): Send out valid
+       segment end timestamps.
+
+2005-08-24  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+       * ext/Makefile.am:
+         lame and mpegaudioparse seem to work
+       * gst/videobox/gstvideobox.c: (gst_video_box_class_init),
+       (gst_video_box_transform_caps), (gst_video_box_get_unit_size):
+         update for basetransform changes
+
+2005-08-24  Jan Schmidt  <thaytan@mad.scientist.com>
+       * gst/level/gstlevel.c: (gst_level_message_new):
+         GST_MESSAGE_SRC became a GObject
+
+2005-08-23  Stefan Kost  <ensonic@users.sf.net>
+
+       * ext/speex/gstspeexenc.h:
+         Fixed include path of adapter
+
+2005-08-23  Wim Taymans  <wim@fluendo.com>
+
+       * ext/speex/gstspeexdec.c: (gst_speex_dec_class_init):
+       * ext/speex/gstspeexenc.c: (gst_speexenc_class_init):
+       Fix property warning.
+
+2005-08-23  Wim Taymans  <wim@fluendo.com>
+
+       * gst/rtp/gstrtpamrdec.c: (gst_rtpamrdec_init),
+       (gst_rtpamrdec_sink_setcaps), (gst_rtpamrdec_chain):
+       * gst/rtp/gstrtpamrenc.c: (gst_rtpamrenc_class_init),
+       (gst_rtpamrenc_init), (gst_rtpamrenc_chain):
+       * gst/rtp/gstrtph263penc.c: (gst_rtph263penc_class_init),
+       (gst_rtph263penc_flush), (gst_rtph263penc_chain):
+       Small updates, RFC reference to payload encoders.
+
+2005-08-23  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * configure.ac:
+       * ext/Makefile.am:
+       * ext/speex/Makefile.am:
+       * ext/speex/gstspeex.c: (plugin_init):
+       * ext/speex/gstspeexdec.c: (speex_get_query_types),
+       (gst_speex_dec_init), (speex_dec_src_query), (speex_dec_src_event),
+       (speex_dec_event), (speex_dec_chain):
+         Port speexdec. Leads to some unfamiliar warnings on console,
+         but works otherwise.
+
+2005-08-23  Andy Wingo  <wingo@pobox.com>
+
+       * sys/oss/gstosssrc.c (gst_oss_src_open): Set the device-name
+       property after opening the mixer.
+
+       * sys/oss/gstosssrc.c: 
+       * sys/oss/gstosssrc.h: Easy to implement a mixer, eh...
+
+       * sys/oss/gstossmixerelement.h:
+       * sys/oss/gstossmixerelement.c: Added mixer element like
+       alsamixer.
+
+       * sys/oss/Makefile.am: 
+       * sys/oss/gstossaudio.c: Register the ossmixer element.
+       
+       * sys/oss/gstossmixer.h:
+       * sys/oss/gstossmixer.c: Refactored to be more like alsamixer.
+
+       * sys/oss/gstossmixertrack.h:
+       * sys/oss/gstossmixertrack.c: Split out from gstossmixer.[ch],
+       like gstalsamixer.
+
+       * sys/oss/gstosssrc.c:
+       * sys/oss/gstosssink.c: Where before we used a gstosselement
+       object as a helper library, now just call functions from
+       gstosshelper.
+
+       * sys/oss/gstosshelper.h:
+       * sys/oss/gstosshelper.c: Made a real library. Removed
+       propertyprobe for now, should add it back later.
+       
+       * sys/oss/gstosselement.h:
+       * sys/oss/gstosselement.c: Removed, we don't have a shared base
+       class.
+       
+       * sys/oss/gstosshelper.c (gst_oss_helper_probe_caps): Search
+       higher-to-lower, makes 16 bit appear earlier in the caps, which
+       makes it preferred.
+
+       * sys/oss/gstosssrc.h: 
+       * sys/oss/gstosssrc.c: Totally ported, dude.
+
+       * sys/oss/Makefile.am:
+       * sys/oss/gstossaudio.c: Add osssrc.
+       
+       * sys/oss/gstosssink.c: We do native byte order.
+
+2005-08-23  Owen Fraser-Green  <owen@discobabe.net>
+
+       * gst/realmedia/rmdemux.c (gst_rmdemux_src_event): Fixed bug
+       causing events to be passed wrong way.
+       (gst_rmdemux_parse_packet): Avoid accidentally skipping audio.
+
+2005-08-22  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_init),
+       (gst_id3_tag_sink_event), (gst_id3_tag_do_caps_nego),
+       (gst_id3_tag_chain), (gst_id3_tag_change_state), (plugin_init):
+         Works a bit better now, but still needs a rewrite to use
+         get_range instead of this seeking nastiness.
+
+2005-08-22  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * configure.ac:
+       * ext/Makefile.am:
+       * ext/flac/Makefile.am:
+       * ext/flac/gstflac.c: (plugin_init):
+       * ext/flac/gstflacdec.c: (flacdec_get_type), (gst_flacdec_init),
+       (gst_flacdec_update_metadata), (gst_flacdec_seek),
+       (gst_flacdec_tell), (gst_flacdec_length), (gst_flacdec_read),
+       (gst_flacdec_write), (gst_flacdec_loop),
+       (gst_flacdec_get_src_query_types), (gst_flacdec_src_query),
+       (gst_flacdec_src_event), (gst_flacdec_sink_activate),
+       (gst_flacdec_sink_activate_pull), (gst_flacdec_change_state):
+       * ext/flac/gstflacdec.h:
+         Port flacdec (seeking is still slow'ish).
+
+2005-08-22  Owen Fraser-Green  <owen@discobabe.net>
+
+       * gst/realmedia/rmdemux.c: 
+       (gst_rmdemux_perform_seek, gst_rmdemux_parse_packet): 
+       Seeking improvements.
+
+2005-08-19  Wim Taymans  <wim@fluendo.com>
+
+       * gst/udp/gstmultiudpsink.c: (gst_multiudpsink_class_init):
+       Remove get_time code that is both wrong and unneeded.
+
+2005-08-19  Wim Taymans  <wim@fluendo.com>
+
+       * gst/rtp/gstrtph263penc.c: (gst_rtph263penc_class_init),
+       (gst_rtph263penc_flush), (gst_rtph263penc_chain),
+       (gst_rtph263penc_set_property), (gst_rtph263penc_get_property):
+       * gst/rtp/gstrtph263penc.h:
+       Added configurable pt and ssrc, to be merged in the caps or
+       a base class...
+
+2005-08-19  Wim Taymans  <wim@fluendo.com>
+
+       * gst/rtp/gstrtph263pdec.c: (gst_rtph263pdec_init),
+       (gst_rtph263pdec_chain):
+       * gst/rtp/gstrtph263penc.c: (gst_rtph263penc_class_init),
+       (gst_rtph263penc_flush), (gst_rtph263penc_chain):
+       Some cleanups in the h263p (de)payloaders.
+
+2005-08-19  Wim Taymans  <wim@fluendo.com>
+
+       * ext/amrnb/amrnbdec.c:
+       * ext/amrnb/amrnbenc.c: (gst_amrnbenc_setcaps):
+       * ext/amrnb/amrnbparse.c:
+       Update caps with audio/AMR.
+       
+       * gst/rtp/gstrtpamrdec.c: (gst_rtpamrdec_init),
+       (gst_rtpamrdec_sink_setcaps), (gst_rtpamrdec_chain),
+       (gst_rtpamrdec_change_state):
+       * gst/rtp/gstrtpamrdec.h:
+       * gst/rtp/gstrtpamrenc.c: (gst_rtpamrenc_class_init),
+       (gst_rtpamrenc_init), (gst_rtpamrenc_chain):
+       Dont set FT headers twice, it was already in the encoded
+       bitstream.
+       
+       * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_send), (gst_rtspsrc_open),
+       (gst_rtspsrc_close), (gst_rtspsrc_play):
+       * gst/rtsp/rtspconnection.c: (parse_line):
+       Cleanups
+       
+       * gst/udp/gstudpsrc.c: (gst_udpsrc_class_init),
+       (gst_udpsrc_create), (gst_udpsrc_set_property),
+       (gst_udpsrc_get_property):
+       * gst/udp/gstudpsrc.h:
+       Added caps property, we need this soon to type the buffers.
+
+2005-08-18  Wim Taymans  <wim@fluendo.com>
+
+       * gst/rtp/gstrtpamrdec.c: (gst_rtpamrdec_init),
+       (gst_rtpamrdec_chain):
+       Fix up amr depayloader a bit.
+
+       * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_send), (gst_rtspsrc_open),
+       (gst_rtspsrc_close), (gst_rtspsrc_play):
+       Look for options result in Public and Allow header fields..
+       spec says Allow but some servers return Public...
+
+2005-08-18  Wim Taymans  <wim@fluendo.com>
+
+       * gst/rtp/gstrtpamrenc.c: (gst_rtpamrenc_class_init),
+       (gst_rtpamrenc_init), (gst_rtpamrenc_chain),
+       (gst_rtpamrenc_set_property), (gst_rtpamrenc_get_property):
+       * gst/rtp/gstrtpamrenc.h:
+       Added payload_type and ssrc properties to the payloader.
+
+       * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_send), (gst_rtspsrc_open),
+       (gst_rtspsrc_close), (gst_rtspsrc_play):
+       Options need to be stripped and are in the Public header field.
+
+       * gst/rtsp/rtspurl.c: (rtsp_url_parse):
+       Fix url / parsing...
+
+
+2005-08-18  Wim Taymans  <wim@fluendo.com>
+
+       * gst/rtp/Makefile.am:
+       * gst/rtp/gstrtp.c: (plugin_init):
+       * gst/rtp/gstrtpamrdec.c: (gst_rtpamrdec_get_type),
+       (gst_rtpamrdec_base_init), (gst_rtpamrdec_class_init),
+       (gst_rtpamrdec_init), (gst_rtpamrdec_chain),
+       (gst_rtpamrdec_set_property), (gst_rtpamrdec_get_property),
+       (gst_rtpamrdec_change_state), (gst_rtpamrdec_plugin_init):
+       * gst/rtp/gstrtpamrdec.h:
+       * gst/rtp/gstrtpamrenc.c: (gst_rtpamrenc_get_type),
+       (gst_rtpamrenc_base_init), (gst_rtpamrenc_class_init),
+       (gst_rtpamrenc_init), (gst_rtpamrenc_chain),
+       (gst_rtpamrenc_set_property), (gst_rtpamrenc_get_property),
+       (gst_rtpamrenc_change_state), (gst_rtpamrenc_plugin_init):
+       * gst/rtp/gstrtpamrenc.h:
+       * gst/rtp/gstrtpmpaenc.c: (gst_rtpmpaenc_class_init),
+       (gst_rtpmpaenc_flush), (gst_rtpmpaenc_chain):
+       Added very simplistic amr payloader. depayloader does not
+       work yet.
+
+2005-08-18  Wim Taymans  <wim@fluendo.com>
+
+       * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_send), (gst_rtspsrc_open),
+       (gst_rtspsrc_close), (gst_rtspsrc_play), (gst_rtspsrc_pause),
+       (gst_rtspsrc_change_state):
+       * gst/rtsp/gstrtspsrc.h:
+       * gst/rtsp/rtspdefs.c: (rtsp_method_as_text), (rtsp_find_method):
+       * gst/rtsp/rtspdefs.h:
+       * gst/rtsp/rtsptransport.c: (rtsp_transport_parse):
+       Handle RTSP defaults better.
+       Issue OPTIONS request to figure out what we are allowed to do.
+       Make the methods a bitfield so we can easily collect supported 
+       options.
+       Fix rtsp_find_method.
+       Do proper RTSP connection shutdown.
+
+2005-08-18  Wim Taymans  <wim@fluendo.com>
+
+       * gst/rtp/Makefile.am:
+       * gst/rtp/gstrtp-common.h:
+       * gst/rtp/gstrtp.c: (plugin_init):
+       * gst/rtp/gstrtpL16enc.h:
+       * gst/rtp/gstrtpdec.c: (gst_rtpdec_get_type),
+       (gst_rtpdec_class_init), (gst_rtpdec_chain_rtp),
+       (gst_rtpdec_chain_rtcp), (gst_rtpdec_change_state),
+       (gst_rtpdec_plugin_init):
+       * gst/rtp/gstrtph263pdec.c: (gst_rtph263pdec_get_type),
+       (gst_rtph263pdec_base_init), (gst_rtph263pdec_class_init),
+       (gst_rtph263pdec_init), (gst_rtph263pdec_chain),
+       (gst_rtph263pdec_set_property), (gst_rtph263pdec_get_property),
+       (gst_rtph263pdec_change_state), (gst_rtph263pdec_plugin_init):
+       * gst/rtp/gstrtph263pdec.h:
+       * gst/rtp/gstrtph263penc.c: (gst_rtph263penc_get_type),
+       (gst_rtph263penc_base_init), (gst_rtph263penc_class_init),
+       (gst_rtph263penc_init), (gst_rtph263penc_flush),
+       (gst_rtph263penc_chain), (gst_rtph263penc_set_property),
+       (gst_rtph263penc_get_property), (gst_rtph263penc_change_state),
+       (gst_rtph263penc_plugin_init):
+       * gst/rtp/gstrtph263penc.h:
+       * gst/rtp/gstrtpmpadec.c: (gst_rtpmpadec_get_type),
+       (gst_rtpmpadec_base_init), (gst_rtpmpadec_class_init),
+       (gst_rtpmpadec_init), (gst_rtpmpadec_chain),
+       (gst_rtpmpadec_set_property), (gst_rtpmpadec_get_property),
+       (gst_rtpmpadec_change_state), (gst_rtpmpadec_plugin_init):
+       * gst/rtp/gstrtpmpadec.h:
+       * gst/rtp/gstrtpmpaenc.c: (gst_rtpmpaenc_get_type),
+       (gst_rtpmpaenc_base_init), (gst_rtpmpaenc_class_init),
+       (gst_rtpmpaenc_init), (gst_rtpmpaenc_flush), (gst_rtpmpaenc_chain),
+       (gst_rtpmpaenc_set_property), (gst_rtpmpaenc_get_property),
+       (gst_rtpmpaenc_change_state), (gst_rtpmpaenc_plugin_init):
+       * gst/rtp/gstrtpmpaenc.h:
+       * gst/rtp/rtp-packet.c:
+       * gst/rtp/rtp-packet.h:
+       Remove old code that is now in gst-libs/gst/rtp/.
+       Added some payload/depayloaders.
+
+       * gst/udp/gstudpsink.c: (gst_udpsink_class_init):
+       Fix port number range.
+
+2005-08-17  Wim Taymans  <wim@fluendo.com>
+
+       * configure.ac:
+       Added mpegaudioparse
+
+       * ext/lame/gstlame.c: (gst_lame_src_getcaps),
+       (gst_lame_src_setcaps), (gst_lame_sink_setcaps),
+       (gst_lame_sink_event), (gst_lame_chain):
+       Some cleanups.
+       Fix memleak.
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+       (gst_mp3parse_class_init), (gst_mp3parse_init),
+       (gst_mp3parse_chain), (gst_mp3parse_change_state):
+       * gst/mpegaudioparse/gstmpegaudioparse.h:
+       Ported mpegaudioparse
+
+2005-08-17  Wim Taymans  <wim@fluendo.com>
+
+       * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_open), (gst_rtspsrc_play):
+       Support absolute control urls too.
+
+2005-08-16  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_parse_stream),
+       (gst_avi_demux_stream_header):
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
+       (gst_qtdemux_add_stream), (qtdemux_parse_tree):
+         Uncomment metadata and codec-name handling.
+
+2005-08-16  Wim Taymans  <wim@fluendo.com>
+
+       * configure.ac:
+       * ext/amrnb/amrnbparse.c: (gst_amrnbparse_read_header):
+       Fix compile warning.
+
+       * ext/lame/gstlame.c: (gst_lame_class_init),
+       (gst_lame_src_getcaps), (gst_lame_src_setcaps),
+       (gst_lame_sink_setcaps), (gst_lame_init), (gst_lame_sink_event),
+       (gst_lame_chain), (gst_lame_change_state):
+       * ext/lame/gstlame.h:
+       Port lame plugin
+
+2005-08-16  Andy Wingo  <wingo@pobox.com>
+
+       * ext/dv/gstdvdemux.c (gst_dvdemux_flush): Use gst_adapter_take so
+       we have our own copy of the data.
+       (gst_dvdemux_demux_video): Set the take() data as malloc_data so
+       it will get freed later.
+
+       * ext/raw1394/gstdv1394src.c (gst_dv1394src_iso_receive): Note
+       license info in the source code -- was only in the commit log
+       before.
+
+       * ext/dv/gstdvdec.h:
+       * ext/dv/gstdvdec.c: Only decodes systemstream=FALSE dv video --
+       old pipelines using dvdec should probably have a dvdemux first.
+
+       * ext/dv/gstdvdemux.h:
+       * ext/dv/gstdvdemux.c: Split out from dvdec, chunks the incoming
+       systemstream=TRUE data into frames, sets caps data, and spits out
+       PCM audio in addition to systemstream=FALSE video frames. Operates
+       in chain mode only for now; should make a getrange version as
+       well.
+
+       * ext/dv/gstdv.c: New file, registers the libgstdv plugin.
+
+       * ext/dv/Makefile.am: Library name changed to libgstdv. Split
+       dvdec into dvdemux and dvdec.
+
+2005-08-16  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/faad/gstfaad.c: (gst_faad_event), (gst_faad_chain):
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header):
+         Handle _push() return values.
+
+2005-08-15  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/faad/gstfaad.c: (gst_faad_event):
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header):
+         Fix debug.
+
+2005-08-15  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/qtdemux/qtdemux.c: (qtdemux_parse_trak),
+       (qtdemux_video_caps):
+         Forwardport from 0.8 to implement RLE.
+
+2005-08-15  Wim Taymans  <wim@fluendo.com>
+
+       * gst/rtsp/README:
+       Added rtsp server implementation docs.
+
+2005-08-14  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/aalib/gstaasink.c:
+         aalib is LGPL, so this plugin can be LGPL
+       * ext/arts/gst_arts.c: (plugin_init):
+         rename, we don't like underscores
+       * ext/audiofile/gstaf.c:
+       * ext/sndfile/gstsf.c:
+         rename, we like a descriptive plugin name
+       * ext/gconf/gstgconfelements.c:
+         change description a little
+       * ext/musicbrainz/gsttrm.c:
+         musicbrainz is LGPL, so plugin can be LGPL
+       * ext/raw1394/gst1394.c:
+         rename, we like all-digit names
+       * gst/equalizer/gstiirequalizer.c:
+       * gst/fdsrc/gstfdsrc.c:
+       * gst/multifilesink/gstmultifilesink.c:
+         rename
+       * gst/virtualdub/gstvirtualdub.c:
+         use GST_PLUGIN_DEFINE
+       * sys/dxr3/dxr3init.c:
+         only uses system headers, and code is LGPL, so plugin is LGPL
+
+2005-08-13  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * ext/mad/Makefile.am:
+       * gst/avi/Makefile.am:
+       * gst/effectv/Makefile.am:
+       * gst/udp/Makefile.am:
+       * gst/wavparse/Makefile.am:
+         Use -lgstfoo-@GST_MAJORMINOR@ instead of -lgstfoo-0.9
+
+2005-08-12  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_decode_indirect),
+       (gst_jpeg_dec_decode_direct), (gst_jpeg_dec_chain):
+         Fix decoding of pictures with certain uneven or unaligned
+         widths where jpeglib needs more horizontal padding than our
+         I420 buffers provide, resulting in blocky artifacts at the
+         left side of the picture (#164176). 
+         Also make use of our shiny new GST_ROUND_N() macros.
+
+2005-08-11  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_init), (gst_jpeg_dec_chain),
+       (gst_jpeg_dec_change_state):
+       * ext/jpeg/gstjpegdec.h:
+         Fix crashes/invalid memory access for pictures that have a height
+         that is not a multiple of 16 (or rather: v_samp_factor * DCTSIZE).
+         
+         Also fix the state change function for downwards state changes
+         (need to chain up to parent before destroying our resources, to 
+         make sure pads get deactivated and our chain function isn't
+         running and using those very same resources in another thread).
+
+         The jpeg line buffer only needs to be v_samp_factor*DCTSIZE lines
+         per plane, not picture_height lines; allocate that on the stack.
+
+2005-08-10  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * gst/wavparse/gstwavparse.c: (gst_wavparse_stream_headers),
+       (gst_wavparse_stream_data):
+         Add some fixes from 0.8 branch: allow 24/32bps songs and
+         blockalign samples to the header-specified size, if any
+         (#311070); error out on channels==0 or bitrate==0 
+         (#309043, #304588).
+
+2005-08-10  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/level/gstlevel.c: (gst_level_init), (gst_level_set_caps),
+       (gst_level_transform):
+       * gst/level/gstlevel.h:
+         remove unused MS struct member
+         don't reset the CS values for channels on every _chain, so that
+         level actually correctly calculates the RMS value.  sigh.
+         calculate RMS values correctly for peak and decay peak sums;
+         before we were signalling them as if they already were amplitude
+         and not power values.  sigh.
+       Remind me to not try and pretend I'm writing DSP code.
+
+2005-08-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/faad/gstfaad.c: (gst_faad_class_init), (gst_faad_setcaps):
+         Add debug category, remove Close() call that made it crash
+         whenever reusing, renegotiating or anything; Close() actually
+         free()s the handle and should only be called on READY->NULL.
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header):
+         Actually set caps on buffer (in addition to pad), also.
+
+2005-08-10  Owen Fraser-Green  <owen@discobabe.net>
+
+       * gst/realmedia/rmdemux.c (gst_rmdemux_sink_activate) 
+       (gst_rmdemux_sink_activate_push, gst_rmdemux_sink_activate_pull) 
+       (gst_rmdemux_loop, gst_rmdemux_src_event) 
+       (gst_rmdemux_perform_seek, gst_rmdemux_src_query): Implemented
+       push-pull and seeking.
+
+2005-08-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/faad/gstfaad.c: (gst_faad_event):
+         Sign/unsign mismatch.
+       * configure.ac:
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_class_init),
+       (gst_qtdemux_init), (gst_qtdemux_get_src_query_types),
+       (gst_qtdemux_handle_src_query), (gst_qtdemux_handle_src_event),
+       (plugin_init), (gst_qtdemux_handle_sink_event),
+       (gst_qtdemux_change_state), (gst_qtdemux_loop_header),
+       (qtdemux_sink_activate), (qtdemux_sink_activate_pull),
+       (gst_qtdemux_add_stream), (qtdemux_parse), (qtdemux_parse_tree),
+       (qtdemux_parse_trak), (qtdemux_video_caps), (qtdemux_audio_caps):
+       * gst/qtdemux/qtdemux.h:
+         Half-assed port (hey, it works).
+
+2005-08-09  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_header):
+         Fix AVI header parsing: add missing break statement after
+         GST_RIFF_INFO_LIST parsing code; gst_riff_read_chunk() has
+         already advanced the avi->offset, no need to do it twice
+         (fixes MovieOfMovies.avi).
+
+2005-08-09  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_init),
+       (gst_jpeg_dec_setcaps), (gst_jpeg_dec_chain),
+       (gst_jpeg_dec_change_state):
+       * ext/jpeg/gstjpegdec.h:
+         Make mjpeg actually work and skip jpeg data parsing if we
+         know that the input is packetized (ie. each input buffer
+         is exactly one jpeg frame).
+
+2005-08-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/mad/gstmad.c: (gst_mad_init), (gst_mad_chain):
+         It'd be nice if I could listen to my mp3 files, so send out an
+         initial discont, as the sink apparently wants.
+
+2005-08-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_event),
+       (gst_avi_demux_handle_seek):
+         Fix seeking (or, well, fix threading issue where a variable was
+         set before a lock was taken and was already unset before that
+         same lock was taken and was thus no longer in existance when it
+         actually had to be used).
+
+2005-08-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_process_next_entry):
+         Mixing binary and logical operators is not going to work; fix
+         position-querying in Totem.
+
+2005-08-08  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * ext/faad/gstfaad.c: (gst_faad_base_init), (gst_faad_class_init),
+       (gst_faad_init), (gst_faad_setcaps), (gst_faad_srcgetcaps),
+       (gst_faad_event), (gst_faad_update_caps), (gst_faad_chain),
+       (gst_faad_change_state):
+       * ext/faad/gstfaad.h:
+         Fix negotiation (#310932) and miscellaneous other stuff. Probably
+         still needs some more work.
+
+2005-08-08  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_init),
+       (gst_jpeg_dec_setcaps), (gst_jpeg_dec_chain):
+         Add setcaps() function (for mjpeg).
+
+2005-08-08  Andy Wingo  <wingo@pobox.com>
+
+       * ext/esd/esdsink.c (gst_esdsink_getcaps): Seems that wierd
+       va_list caps setting function was borked. Fixed esdsink.
+
+       * sys/oss/gstosssink.c (gst_oss_sink_open, gst_oss_sink_close) 
+       (gst_oss_sink_prepare, gst_oss_sink_unprepare): Update for newer
+       audiosink api.
+
+       * ext/raw1394/gstdv1394src.c (gst_dv1394src_get_property) 
+       (gst_dv1394src_set_property): Style. All about the style.
+
+       * ext/esd/esdsink.c (gst_esdsink_getcaps): Return specific caps
+       only if in READY or higher (i.e., if _open() has been called.)
+       (gst_esdsink_open, gst_esdsink_close, gst_esdsink_prepare) 
+       (gst_esdsink_unprepare): Update for audiosink changes.
+       (gst_esdsink_change_state): Die!
+
+2005-08-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/jpeg/Makefile.am:
+         Fix compile.
+
+2005-08-08  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * configure.ac:
+       * ext/Makefile.am:
+       * ext/jpeg/Makefile.am:
+       * ext/jpeg/gstjpeg.c: (plugin_init):
+       * ext/jpeg/gstjpegdec.c: (gst_jpeg_dec_get_type),
+       (gst_jpeg_dec_finalize), (gst_jpeg_dec_base_init),
+       (gst_jpeg_dec_class_init), (gst_jpeg_dec_fill_input_buffer),
+       (gst_jpeg_dec_init_source), (gst_jpeg_dec_skip_input_data),
+       (gst_jpeg_dec_resync_to_restart), (gst_jpeg_dec_term_source),
+       (gst_jpeg_dec_my_output_message), (gst_jpeg_dec_my_emit_message),
+       (gst_jpeg_dec_my_error_exit), (gst_jpeg_dec_init),
+       (is_jpeg_start_marker), (is_jpeg_end_marker),
+       (gst_jpeg_dec_find_jpeg_header), (gst_jpeg_dec_ensure_header),
+       (gst_jpeg_dec_have_end_marker),
+       (gst_jpeg_dec_parse_tag_has_entropy_segment),
+       (gst_jpeg_dec_parse_image_data), (gst_jpeg_dec_chain),
+       (gst_jpeg_dec_change_state):
+       * ext/jpeg/gstjpegdec.h:
+         Port jpegdec to 0.9; handles 'progressive loading' now, ie. input does
+         no longer need to be one single buffer.
+
+2005-08-04  Andy Wingo  <wingo@pobox.com>
+
+       * sys/oss/gstossaudio.c (plugin_init): Second-class citizen.
+
+       * gst/videobox/gstvideobox.c (gst_video_box_get_size): Update for
+       API changes.
+
+       * configure.ac (DEFAULT_AUDIOSINK, DEFAULT_VIDEOSINK): Set to
+       autoaudiosink and autovideosink.
+
+2005-08-04  Edward Hervey  <edward@fluendo.com>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_reset),
+       (gst_avi_demux_parse_stream), (gst_avi_demux_process_next_entry):
+       You need to allocatate (len+1) characters to store a len size string.
+       Also don't stop the processing task if the output pad is not linked.
+
+2005-08-03  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/gconf/gstgconfaudiosink.c: (gst_gconf_audio_sink_reset),
+       (gst_gconf_audio_sink_init), (do_toggle_element),
+       (cb_toggle_element), (gst_gconf_audio_sink_change_state):
+       * ext/gconf/gstgconfaudiosink.h:
+       * ext/gconf/gstgconfvideosink.c: (gst_gconf_video_sink_reset),
+       (gst_gconf_video_sink_init), (do_toggle_element),
+       (cb_toggle_element), (gst_gconf_video_sink_change_state):
+       * ext/gconf/gstgconfvideosink.h:
+       * gst/autodetect/gstautoaudiosink.c: (gst_auto_audio_sink_reset),
+       (gst_auto_audio_sink_init), (gst_auto_audio_sink_detect),
+       (gst_auto_audio_sink_change_state):
+       * gst/autodetect/gstautoaudiosink.h:
+       * gst/autodetect/gstautovideosink.c: (gst_auto_video_sink_reset),
+       (gst_auto_video_sink_init), (gst_auto_video_sink_detect),
+       (gst_auto_video_sink_change_state):
+       * gst/autodetect/gstautovideosink.h:
+         Use new ghostpad API; now they actually work in Totem, also.
+
+2005-08-03  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/libpng/Makefile.am:
+         Fix uninstalled build.
+
+2005-08-02  Edward Hervey  <edward@fluendo.com>
+
+       * configure.ac:
+       * ext/Makefile.am:
+       * ext/libpng/Makefile.am:
+       * ext/libpng/gstpng.c:
+       * ext/libpng/gstpngenc.c:
+       Ported pngenc , still have to port pngdec...
+
+2005-08-01  Stefan Kost  <ensonic@users.sf.net>
+
+       reviewed by: <delete if not using a buddy>
+
+       * configure.ac:
+       * ext/ladspa/Makefile.am:
+       * ext/ladspa/gstladspa.c: (gst_ladspa_init), (gst_ladspa_loop),
+       (gst_ladspa_chain), (gst_ladspa_get), (plugin_init):
+       * ext/ladspa/gstladspa.h:
+          deactivate and remove dparams (libgstcontrol)
+
+2005-07-27  Wim Taymans  <wim@fluendo.com>
+
+       * ext/faad/gstfaad.c: (gst_faad_event):
+       Compile fixes.
+
+2005-07-27  Wim Taymans  <wim@fluendo.com>
+
+       * ext/amrnb/amrnbparse.c: (gst_amrnbparse_event),
+       (gst_amrnbparse_loop):
+       * ext/dv/gstdvdec.c: (gst_dvdec_handle_sink_event),
+       (gst_dvdec_handle_src_event), (gst_dvdec_decode_frame):
+       * ext/mad/gstid3tag.c: (gst_id3_tag_src_event),
+       (gst_id3_tag_sink_event), (gst_id3_tag_chain):
+       * ext/mad/gstmad.c: (gst_mad_src_query), (index_seek),
+       (normal_seek), (gst_mad_sink_event), (gst_mad_chain):
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/shout2/gstshout2.c: (gst_shout2send_event):
+       * ext/sidplay/gstsiddec.cc:
+       * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_event),
+       (gst_avi_demux_send_event), (gst_avi_demux_stream_header),
+       (gst_avi_demux_handle_seek), (gst_avi_demux_process_next_entry):
+       * gst/goom/gstgoom.c: (gst_goom_event):
+       * gst/realmedia/rmdemux.c: (gst_rmdemux_sink_event),
+       (gst_rmdemux_chain), (gst_rmdemux_send_event),
+       (gst_rmdemux_add_stream):
+       * gst/wavparse/gstwavparse.c: (gst_wavparse_handle_seek),
+       (gst_wavparse_stream_headers), (gst_wavparse_stream_data),
+       (gst_wavparse_loop), (gst_wavparse_srcpad_event):
+       Various event updates and cleanups.
+
+2005-07-25  Christian Schaller  <uraeus@gnome.org>
+
+
+       * gst-plugins.spec.in: add silence and videoflip
+       * gst/videofilter/Makefile.am: add missing header to noinst
+
+2005-07-25  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/videofilter/Makefile.am:
+       * gst/videofilter/gstgamma.c: (gst_gamma_setup):
+       * gst/videofilter/gstvideobalance.c: (gst_videobalance_setup):
+       * gst/videofilter/gstvideofilter.c: (gst_videofilter_class_init),
+       (gst_videofilter_getcaps), (gst_videofilter_setcaps),
+       (gst_videofilter_init), (gst_videofilter_chain),
+       (gst_videofilter_set_property), (gst_videofilter_get_property),
+       (gst_videofilter_setup), (gst_videofilter_class_add_pad_templates):
+       * gst/videofilter/gstvideofilter.h:
+       * gst/videofilter/gstvideoflip.c: (gst_videoflip_init),
+       (gst_videoflip_set_property), (gst_videoflip_get_property),
+       (plugin_init), (gst_videoflip_setup), (gst_videoflip_planar411):
+         forward port from 0.9 and enable videoflip now that it works
+
+2005-07-23  Edward Hervey  <edward@fluendo.com>
+
+       * configure.ac:
+       * gst/silence/Makefile.am:
+       * gst/silence/gstsilence.h:
+       * gst/silence/gstsilence.c:
+       Ported silence to 0.9 using GstBaseSrc ... 180 lines :)
+
+2005-07-22  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/mad/gstmad.c: (gst_mad_src_event):
+         First try forwarding events, makes seeking in AVI files with mp3
+         audio work again.
+
+2005-07-20  Andy Wingo  <wingo@pobox.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c (gst_mpeg2dec_sink_event): Signedness
+       fix.
+
+2005-07-20  Edward Hervey  <edward@fluendo.com>
+
+       * configure.ac: 
+       * gst/wavparse/gstwavparse.c: 
+       * gst/wavparse/gstwavparse.h:
+       * gst/wavparse/Makefile.am:
+       Ported wavparse to 0.9 . Playing, seeking and state changes work.
+       Could need more loving on the headers though.
+
+2005-07-20  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * configure.ac:
+       * ext/Makefile.am:
+       * ext/gconf/Makefile.am:
+       * ext/gconf/gconf.c: (gst_bin_find_unconnected_pad),
+       (gst_gconf_render_bin_from_description),
+       (gst_gconf_get_default_video_sink):
+       * ext/gconf/gstgconfaudiosink.c: (gst_gconf_audio_sink_base_init),
+       (gst_gconf_audio_sink_class_init), (gst_gconf_audio_sink_dispose),
+       (cb_toggle_element), (gst_gconf_audio_sink_change_state):
+       * ext/gconf/gstgconfelements.h:
+       * ext/gconf/gstgconfvideosink.c: (gst_gconf_video_sink_base_init),
+       (gst_gconf_video_sink_class_init), (gst_gconf_video_sink_dispose),
+       (cb_toggle_element), (gst_gconf_video_sink_change_state):
+       * gst/autodetect/gstautoaudiosink.c:
+       (gst_auto_audio_sink_base_init), (gst_auto_audio_sink_class_init),
+       (gst_auto_audio_sink_detect), (gst_auto_audio_sink_change_state):
+       * gst/autodetect/gstautovideosink.c:
+       (gst_auto_video_sink_base_init), (gst_auto_video_sink_class_init),
+       (gst_auto_video_sink_find_best), (gst_auto_video_sink_detect):
+         Port auto/gconfsinks to 0.9. They actually appear to work here in
+         Totem as well, making them actually useful.
+
+2005-07-20  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/faad/Makefile.am:
+         Fix uninstalled build.
+
+2005-07-19  Wim Taymans  <wim@fluendo.com>
+
+       * sys/oss/gstosssink.c: (gst_oss_sink_get_format),
+       (gst_oss_sink_open):
+       Parse spec to set correct oss values.
+
+2005-07-19  Edgard N. A. G. Lima <edgard.lima@indt.org.br>
+
+        * configure.ac
+       * ext/Makefile.am
+       * ext/amrnb/amrnbdec.c
+       * ext/amrnb/amrnbenc.c
+       * ext/amrnb/amrnbparse.c
+       * ext/faad/gstfaad.c
+       * ext/mpeg2dec/gstmpeg2dec.c
+       Ported amrnb, faad, mpeg2dec to 0.9
+
+2005-07-19  Andy Wingo  <wingo@pobox.com>
+
+       * ext/dv/gstdvdec.c (gst_dvdec_decode_video): Set the proper
+       framerate on the outbound buffer.
+
+       * ext/dv/gstdvdec.c (gst_dvdec_decode_video): Don't clobber
+       alloc_buffer's return value.
+       (gst_dvdec_decode_frame): Handle unlinked pads with grace and
+       agility.
+
+       * ext/dv/gstdvdec.h: Fix signedness error.
+
+2005-07-19  Wim Taymans  <wim@fluendo.com>
+
+       * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_src_convert),
+       (gst_dvdec_sink_convert), (gst_dvdec_get_src_query_types),
+       (gst_dvdec_src_query), (gst_dvdec_get_sink_query_types),
+       (gst_dvdec_sink_query), (gst_dvdec_send_event),
+       (gst_dvdec_handle_sink_event), (gst_dvdec_handle_src_event),
+       (gst_dvdec_decode_audio), (gst_dvdec_decode_video),
+       (gst_dvdec_decode_frame), (gst_dvdec_flush), (gst_dvdec_chain):
+       * ext/dv/gstdvdec.h:
+       Implemented seeking in dvdec.
+
+2005-07-19  Andy Wingo  <wingo@pobox.com>
+
+       * ext/Makefile.am: Enable dvdev and raw1394src.
+
+2005-07-18  Andy Wingo  <wingo@pobox.com>
+
+       * configure.ac: Use AS_LIBTOOL_TAGS. Fix crap gettext commit
+       comment.
+
+2005-07-18  Wim Taymans  <wim@fluendo.com>
+
+       * gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_add_element),
+       (gst_rtspsrc_play):
+       Fix for core changes.
+
+2005-07-18  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_sink_event):
+         When returning to NORMAL state after reading tags,
+         pass on the discont event.
+
+2005-07-18  Wim Taymans  <wim@fluendo.com>
+
+       * gst/realmedia/rmdemux.c: (gst_rmdemux_sink_event),
+       (gst_rmdemux_change_state), (gst_rmdemux_chain),
+       (gst_rmdemux_get_stream_by_id), (gst_rmdemux_send_event),
+       (gst_rmdemux_add_stream):
+       Send discont event before pushing first buffer.
+
+2005-07-17  Philippe Khalaf <burger@speedy.org>
+
+       * gst/fdsrc/gstfdsrc.c:
+       Removed #include <gst_private.h>
+
+2005-07-16  Philippe Khalaf <burger@speedy.org>
+
+       * gst/fdsrc/gstfdsrc.c:
+       * gst/fdsrc/gstfdsrc.h:
+       * gst/fdsrc/Makefile.am:
+       Moved fdsrc 0.9 port from gstreamer/gst/elements to here.
+
+2005-07-16  Wim Taymans  <wim@fluendo.com>
+
+       * ext/mad/gstmad.c: (gst_mad_src_query), (gst_mad_sink_event),
+       (gst_mad_chain):
+       Add convert function for proper timestamp calculations.
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_send_event),
+       (gst_avi_demux_stream_header), (gst_avi_demux_handle_seek),
+       (gst_avi_demux_process_next_entry), (gst_avi_demux_loop):
+       Send out initial discont.
+
+2005-07-15  Wim Taymans  <wim@fluendo.com>
+
+       * gst/level/gstlevel.c: (gst_level_transform):
+       * gst/videobox/gstvideobox.c: (gst_video_box_class_init),
+       (gst_video_box_get_size), (gst_video_box_transform):
+       Port to new base class.
+
+2005-07-14  Wim Taymans  <wim@fluendo.com>
+
+       * ext/raw1394/gstdv1394src.c: (gst_dv1394src_get_type),
+       (gst_dv1394src_class_init), (gst_dv1394src_init),
+       (gst_dv1394src_iso_receive), (gst_dv1394src_create),
+       (gst_dv1394src_change_state), (gst_dv1394src_query):
+       It's PUSH_SRC now.
+
+2005-07-14  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/udp/gstudpsrc.c: (gst_udpsrc_get_type),
+       (gst_udpsrc_class_init):
+         more autistic cleanliness in functions/names/defines
+
+
+2005-07-10  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/aalib/gstaasink.c: (gst_aasink_get_type),
+       (gst_aasink_class_init), (gst_aasink_init):
+       * ext/esd/esdsink.c: (gst_esdsink_get_type),
+       (gst_esdsink_class_init):
+       * ext/libcaca/gstcacasink.c: (gst_cacasink_get_type),
+       (gst_cacasink_class_init), (gst_cacasink_init):
+       * ext/shout2/gstshout2.c: (gst_shout2send_get_type),
+       (gst_shout2send_class_init), (gst_shout2send_init):
+       * gst/udp/gstdynudpsink.c: (gst_dynudpsink_get_type),
+       (gst_dynudpsink_class_init):
+       * gst/udp/gstmultiudpsink.c: (gst_multiudpsink_get_type),
+       (gst_multiudpsink_class_init):
+         more macro splitting
+
+2005-07-08  Andy Wingo  <wingo@pobox.com>
+
+       * sys/oss/: Port from THREADED+wim's fixes.
+
+       * gst/avi/Makefile.am (libgstavi_la_CFLAGS): No gettext hacks, the
+       defines come from config.h.
+
+       * autogen.sh: Run autopoint, etc.
+
+       * Makefile.am (DIST_SUBDIRS, SUBDIRS): Go into po/.
+
+       * configure.ac: Add gettext stuff.
+
+2005-07-07  Wim Taymans  <wim@fluendo.com>
+
+       * gst/videobox/gstvideobox.c: (gst_video_box_init),
+       (gst_video_box_transform_caps), (gst_video_box_set_caps):
+       Logic was reversed. Needs some  more fixes in the transform
+       function to include AYUV output.
+       Moved AYUV as prefered format.
+
+2005-07-07  Wim Taymans  <wim@fluendo.com>
+
+       * configure.ac:
+       * ext/dv/Makefile.am:
+       * ext/dv/gstdvdec.c: (gst_dvdec_class_init), (gst_dvdec_init),
+       (gst_dvdec_get_src_query_types), (gst_dvdec_src_query),
+       (gst_dvdec_handle_sink_event), (gst_dvdec_handle_src_event),
+       (gst_dvdec_video_getcaps), (gst_dvdec_video_setcaps),
+       (gst_dvdec_decode_audio), (gst_dvdec_decode_video),
+       (gst_dvdec_decode_frame), (gst_dvdec_chain),
+       (gst_dvdec_change_state), (gst_dvdec_set_property),
+       (gst_dvdec_get_property), (plugin_init):
+       * ext/dv/gstdvdec.h:
+       * ext/esd/esdsink.c: (gst_esdsink_class_init):
+       Ported DVdec to 0.9.
+       Parent of esdsink is GstAudioSink.
+
+2005-07-07  Wim Taymans  <wim@fluendo.com>
+
+       * configure.ac:
+       * ext/raw1394/Makefile.am:
+       * ext/raw1394/gstdv1394src.c: (gst_dv1394src_get_type),
+       (gst_dv1394src_class_init), (gst_dv1394src_init),
+       (gst_dv1394src_iso_receive), (gst_dv1394src_create),
+       (gst_dv1394src_change_state), (gst_dv1394src_convert),
+       (gst_dv1394src_get_query_types), (gst_dv1394src_query):
+       * ext/raw1394/gstdv1394src.h:
+       Ported the 1394 source to 0.9.
+
+2005-07-07  Wim Taymans  <wim@fluendo.com>
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_get_query_types):
+       * ext/mad/gstmad.c: (gst_mad_get_query_types), (gst_mad_src_query):
+       * gst/avi/gstavidemux.c: (gst_avi_demux_get_src_query_types):
+       Remove deprecated/unsed code.
+
+2005-07-06  Edward Hervey  <edward@fluendo.com>
+
+       * gst/udp/gstudpsrc.c: (gst_udpsrc_init): 
+       GST_BASESRC --> GST_BASE_SRC
+
+2005-07-05  Andy Wingo  <wingo@pobox.com>
+
+       * gst/oneton: Removed (replaced by deinterleave).
+
+       * gst/adder:
+       * gst/audioconvert:
+       * gst/audiorate:
+       * gst/audioscale:
+       * gst/ffmpegcolorspace:
+       * gst/playback:
+       * gst/sine:
+       * gst/subparse:
+       * gst/tags:
+       * gst/tcp:
+       * gst/videoscale:
+       * gst/volume: Removed dirs that are now in gst-plugins-base.
+
+2005-07-05  Edward Hervey  <edward@fluendo.com>
+
+       * configure.ac: (GST_PLUGINS_ALL): 
+       videofilter must be compiled first, since other plugins depend ont it.
+
+2005-07-05  Andy Wingo  <wingo@pobox.com>
+
+       * Way, way, way too many files:
+       Remove crack comment from the 2000 era.
+
+2005-07-05  Andy Wingo  <wingo@pobox.com>
+
+       * gst/videobox/gstvideobox.c: Clean up, port to 0.9, use
+       BaseTransform.
+
+       * gst/videobox/Makefile.am: Link to base libs, include
+       plugins-base cflags, dist the README.
+
+       * configure.ac (GST_PLUGIN_ALL, AC_CONFIG_FILES): Add videobox to
+       the build.
+
+2005-07-04  Wim Taymans  <wim@fluendo.com>
+
+       * gst/realmedia/rmdemux.c:
+       I don't think that piece of changelog should go there.
+
+2005-07-04  Andy Wingo  <wingo@pobox.com>
+
+       * examples/level/:
+       * examples/level/Makefile.am:
+       * examples/level/README:
+       * examples/level/demo.c:
+       * examples/level/plot.c: Examples moved out of the source dir. Not
+       updated tho.
+
+       * configure.ac: Add level to the build.
+
+       * gst/level/Makefile.am:
+       * gst/level/gstlevel.h:
+       * gst/level/gstlevel.c: Cleaned up, ported to 0.9.
+
+       * ext/aalib/gstaasink.c (gst_aasink_fixate): Update for newer
+       fixate prototype.
+
+2005-07-03  Owen Fraser-Green  <owen@discobabe.net>
+
+       * gst/realmedia/rmdemux.c (gst_rmdemux_add_stream),
+       (gst_rmdemux_src_getcaps), (gst_rmdemux_chain): 
+       Added getcaps function no_more_pads call
+
+2005-07-01  Philippe Khalaf <burger@speedy.org>
+       * gst/udp/Makefile.am:
+       * gst/udp/gstudp.c:
+       * gst/udp/gstdynudpsink.c: (new)
+       * gst/udp/gstdynudpsink.h: (new)
+         Added new element (udpdynsink) that receives GstNetBuffers and sends the
+         udp packets to the source given in the buffer. It's used by rtpsession
+         element for now.
+       * gst/udp/gstudpsrc.c:
+         Fixed memory leak.
+
+2005-07-01  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * configure.ac:
+       * ext/mad/Makefile.am:
+       * sys/oss/Makefile.am:
+       Roll gstreamer-interfaces-0.9.pc into gstreamer-plugins-base-0.9.pc
+
+2005-07-01  Jan Schmidt  <thaytan@mad.scientist.com>
+       * ext/libcaca/Makefile.am:
+       * ext/mad/Makefile.am:
+       * gst/effectv/Makefile.am:
+       * gst/udp/Makefile.am:
+         Replace GST_PLUGINS_LIBS_* with GST_PLUGINS_BASE_*
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_src_query),
+       (gst_id3_tag_src_event), (gst_id3_tag_sink_event),
+       (gst_id3_tag_chain), (plugin_init):
+       * ext/mad/gstmad.c: (gst_mad_src_query), (gst_mad_chain):
+         Signedness warning fix, use gst_pad_get_peer instead of GST_PAD_PEER
+         in querying and event handling, because we're not holding the pad
+         lock and the peer may disappear.
+       * gst/avi/gstavidemux.c: (gst_avi_demux_parse_subindex),
+       (gst_avi_demux_parse_index), (gst_avi_demux_massage_index):
+         Signedness warning fixes.
+
+       * gst/videofilter/gstvideotemplate.c: (plugin_init):
+         Remove gst_library_load
+
+2005-06-30  Edward Hervey  <edward@fluendo.com>
+
+       * gst/avi/Makefile.am: (libgstavi_la_LIBADD):
+       Added linking to libgstriff-0.9
+       
+       * ext/mad/gstmad.c: (gst_mad_src_query): 
+       check the format of the upstream query and return query if it's the
+       same format as the requested one.
+
+2005-06-30  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query):
+         Compiler pains.
+
+2005-06-30  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * configure.ac:
+       * gst/avi/Makefile.am:
+       * gst/avi/gstavi.c: (plugin_init):
+       * gst/avi/gstavidemux.c: (gst_avi_demux_get_type),
+       (gst_avi_demux_class_init), (gst_avi_demux_init),
+       (gst_avi_demux_reset), (gst_avi_demux_index_next),
+       (gst_avi_demux_index_entry_for_time),
+       (gst_avi_demux_index_entry_for_byte),
+       (gst_avi_demux_index_entry_for_frame), (gst_avi_demux_src_convert),
+       (gst_avi_demux_handle_src_query), (gst_avi_demux_handle_src_event),
+       (gst_avi_demux_parse_file_header), (gst_avi_demux_stream_init),
+       (gst_avi_demux_parse_avih), (gst_avi_demux_parse_superindex),
+       (gst_avi_demux_parse_subindex), (gst_avi_demux_read_subindexes),
+       (gst_avi_demux_parse_stream), (gst_avi_demux_parse_odml),
+       (gst_avi_demux_parse_index), (gst_avi_demux_stream_index),
+       (gst_avi_demux_stream_scan), (gst_avi_demux_massage_index),
+       (gst_avi_demux_stream_header), (gst_avi_demux_handle_seek),
+       (gst_avi_demux_process_next_entry), (gst_avi_demux_stream_data),
+       (gst_avi_demux_loop), (gst_avi_demux_sink_activate),
+       (gst_avi_demux_sink_activate_pull):
+       * gst/avi/gstavidemux.h:
+         Port from -THREADED to HEAD, and fix for latest API changes of
+         the day. Keep avimux dead for now.
+
+2005-06-29  Wim Taymans  <wim@fluendo.com>
+
+       * ext/shout2/gstshout2.c: (gst_shout2send_render):
+       Fix build.
+
+2005-06-29  Andy Wingo  <wingo@pobox.com>
+
+       * gst/videofilter/gstvideoexample.c: Removed gst_library_load, I
+       think. Whatever this plugin actually does, that I don't know.
+
+2005-06-29  Andy Wingo  <wingo@pobox.com>
+
+       * ext/mad/gstid3tag.c (gst_id3_tag_get_event_masks): Reschmoove.
+
+       * ext/mad/gstmad.c (gst_mad_get_event_masks): Remove.
+       (gst_mad_chain): Appease GCC.
+
+       * ext/libcaca/gstcacasink.c (gst_cacasink_setcaps): Signedness.
+
+       * ext/aalib/gstaasink.c (gst_aasink_fixate): Unref caps, not free.
+       (gst_aasink_scale): Signedness.
+
+       * gst/udp/gstudpsink.c (gst_udpsink_get_type): Actually add the
+       URI handler.
+
+       * gst/udp/gstudpsrc.c (gst_udpsrc_start):
+       (gst_udpsrc_create): Signedness.
+
+       * gst/rtsp/sdpmessage.c (sdp_message_parse_buffer): Thanks
+       compiler!
+       (sdp_parse_line): Signedness fix.
+
+       * configure.ac (GST_CFLAGS): GCC strikes back!!! Let the build
+       breakage ensue!!!
+
+       * gst/rtsp/gstrtspsrc.c (gst_rtspsrc_loop, gst_rtspsrc_open):
+       Signedness, unused var fixes.
+       (gst_rtspsrc_close): Unused?
+
+       * gst/realmedia/rmdemux.c (re_hexdump_bytes): Unused.
+
+       * gst/law/mulaw-encode.c (gst_mulawenc_chain): Signeness fix.
+
+       * gst/law/alaw-encode.c (alawenc_getcaps): Remove unneeded
+       declarations. Typo (probably crasher) fix.
+       
+       * gst/law/mulaw-encode.c (mulawdec_getcaps): 
+       * gst/law/mulaw-encode.c (mulawenc_getcaps): 
+       * gst/law/alaw-decode.c (alawdec_getcaps): Same crasher fix.
+
+       * gst/goom/gstgoom.c (gst_goom_init): Hook up the event function.
+
+       * gst/effectv/gstwarp.c (gst_warptv_setup): Signedness fix.
+
+       * gst/effectv/gstdice.c (gst_dicetv_draw): Um, deferencing
+       uninitialized pointer not good.
+
+       * gst/videofilter/gstvideoexample.c (plugin_init): 
+       * gst/videofilter/Makefile.am (libgstvideoexample_la_LIBADD): Link
+       to libgstvideofilter instead of gst_library_load.
+
+       * gst/alpha/gstalpha.c (gst_alpha_chroma_key_i420) 
+       (gst_alpha_chroma_key_ayuv): Signedness fixen.
+
+2005-06-29  Wim Taymans  <wim@fluendo.com>
+
+       * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
+       (gst_rtspsrc_class_init), (gst_rtspsrc_create_stream),
+       (gst_rtspsrc_add_element), (gst_rtspsrc_set_state),
+       (gst_rtspsrc_stream_setup_rtp),
+       (gst_rtspsrc_stream_configure_transport), (find_stream),
+       (gst_rtspsrc_loop), (gst_rtspsrc_open), (gst_rtspsrc_play),
+       (gst_rtspsrc_change_state):
+       Fix case where outpad could not be decided.
+
+2005-06-29  Andy Wingo  <wingo@pobox.com>
+
+       * ext/Makefile.am (MAD_DIR): Add mad to the build.
+
+2005-06-28  Wim Taymans  <wim@fluendo.com>
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_src_link):
+       * gst/udp/gstudpsrc.c: (gst_udpsrc_init):
+       Fix old RPAD macro.
+       basesrc -> base_src
+
+2005-06-27  Wim Taymans  <wim@fluendo.com>
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_src_link):
+       * ext/mad/gstmad.c: (gst_mad_chain):
+       RPAD_ -> PAD
+       Fix args in bufferalloc function call.
+       Makes the mad plugin compile again
+
+2005-06-27  Owen Fraser-Green  <owen@discobabe.net>
+
+       * gst/realmedia/rmdemux.c: Rewrote to use gstadapter. Also parses
+       audio and video header packets for known properties.
+
+2005-06-23  Wim Taymans  <wim@fluendo.com>
+
+       * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
+       (gst_rtspsrc_class_init), (gst_rtspsrc_create_stream),
+       (gst_rtspsrc_add_element), (gst_rtspsrc_set_state),
+       (gst_rtspsrc_stream_setup_rtp),
+       (gst_rtspsrc_stream_configure_transport), (find_stream),
+       (gst_rtspsrc_loop), (gst_rtspsrc_open), (gst_rtspsrc_play),
+       (gst_rtspsrc_change_state):
+       * gst/rtsp/rtspurl.c: (rtsp_url_parse):
+       Make rtspsrc a live source.
+       Don't try to parse NULL urls.
+
+2005-06-23  Wim Taymans  <wim@fluendo.com>
+
+       * gst/udp/gstudpsrc.c: (gst_udpsrc_init):
+       Make udpsrc a live source.
+
+2005-06-02  Wim Taymans  <wim@fluendo.com>
+
+       * gst/udp/Makefile.am:
+       Use versioned net lib.
+
+2005-06-02  Wim Taymans  <wim@fluendo.com>
+
+       * gst/udp/Makefile.am:
+       Fix hack in makefile.
+
+2005-06-02  Andy Wingo  <wingo@pobox.com>
+
+       * ext/mad/gstid3tag.c: Finish porting to 0.9: no more gstdata,
+       check for link functions before calling them, give
+       gst_message_new_tag its own copy of the tag list, set the parser
+       state before sending the event (because in 0.9 events are
+       processed immediately), casting fixes.
+
+       * ext/mad/Makefile.am (libgstmad_la_LDFLAGS): Link with
+       gsttagedit.
+
+2005-06-02  Wim Taymans  <wim@fluendo.com>
+
+       * gst/udp/Makefile.am:
+       * gst/udp/gstmultiudpsink.c: (gst_multiudpsink_get_type),
+       (gst_multiudpsink_base_init), (gst_multiudpsink_class_init),
+       (gst_multiudpsink_init), (gst_multiudpsink_finalize),
+       (gst_multiudpsink_get_times), (gst_multiudpsink_render),
+       (gst_multiudpsink_set_property), (gst_multiudpsink_init_send),
+       (gst_multiudpsink_add), (client_compare), (free_client),
+       (gst_multiudpsink_remove), (gst_multiudpsink_clear),
+       (gst_multiudpsink_get_stats):
+       * gst/udp/gstudpsrc.c: (gst_udpsrc_get_type),
+       (gst_udpsrc_base_init), (gst_udpsrc_class_init),
+       (gst_udpsrc_create), (gst_udpsrc_set_uri), (gst_udpsrc_start),
+       (gst_udpsrc_unlock), (gst_udpsrc_stop):
+       Use NetBuffer and small cleanups.
+       Implement client removal in multiudpsink.
+
+2005-06-02  Wim Taymans  <wim@fluendo.com>
+
+       * gst/rtsp/README:
+       * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
+       (gst_rtspsrc_class_init), (gst_rtspsrc_create_stream),
+       (gst_rtspsrc_add_element), (gst_rtspsrc_set_state),
+       (gst_rtspsrc_stream_setup_rtp),
+       (gst_rtspsrc_stream_configure_transport), (find_stream),
+       (gst_rtspsrc_loop), (gst_rtspsrc_open), (gst_rtspsrc_play),
+       (gst_rtspsrc_change_state):
+       * gst/rtsp/rtsptransport.c: (rtsp_transport_new),
+       (rtsp_transport_init), (parse_mode), (parse_range),
+       (rtsp_transport_parse), (rtsp_transport_free):
+       RTSP cleanups.
+
+2005-06-02  Wim Taymans  <wim@fluendo.com>
+
+       * gst/effectv/gstquark.c: (gst_quarktv_chain):
+       * gst/goom/gstgoom.c: (gst_goom_chain):
+       * gst/videobox/Makefile.am:
+       * gst/videobox/gstvideobox.c: (gst_video_box_class_init),
+       (gst_video_box_init), (gst_video_box_sink_setcaps),
+       (gst_video_box_chain):
+       * gst/videofilter/gstvideofilter.c: (gst_videofilter_chain):
+       * gst/videorate/gstvideorate.c: (gst_videorate_class_init),
+       (gst_videorate_getcaps), (gst_videorate_setcaps),
+       (gst_videorate_init), (gst_videorate_event), (gst_videorate_chain),
+       (gst_videorate_change_state):
+       Bufferalloc changes.
+
+2005-05-25  Wim Taymans  <wim@fluendo.com>
+
+       * ext/mad/gstmad.c: (gst_mad_chain), (gst_mad_change_state):
+       * ext/sidplay/gstsiddec.cc:
+       * gst/alpha/gstalpha.c: (gst_alpha_chain):
+       * gst/goom/gstgoom.c: (gst_goom_chain):
+       No need to take the lock anymore,  core already did
+       that before calling us.
+
+2005-05-25  Wim Taymans  <wim@fluendo.com>
+
+       * ext/amrnb/amrnbdec.c: (gst_amrnbdec_init), (gst_amrnbdec_chain),
+       (gst_amrnbdec_state_change):
+       * ext/amrnb/amrnbenc.c: (gst_amrnbenc_base_init),
+       (gst_amrnbenc_finalize), (gst_amrnbenc_chain),
+       (gst_amrnbenc_state_change):
+       * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
+       (gst_amrnbparse_query), (gst_amrnbparse_chain),
+       (gst_amrnbparse_read_header), (gst_amrnbparse_loop),
+       (gst_amrnbparse_sink_activate), (gst_amrnbparse_state_change):
+       Core already took the lock.
+
+2005-05-19  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * configure.ac:
+       * ext/esd/Makefile.am:
+         Disable tcp elements and esdmon (they don't compile).
+
+2005-05-19  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * Makefile.am:
+       * ext/Makefile.am:
+       * sys/Makefile.am:
+         Make my automake version shut up about undefined variables
+       * gst/goom/gstgoom.c:
+         GstAdapter moved to base objects. 
+
+2005-05-18  Wim Taymans  <wim@fluendo.com>
+
+       * ext/amrnb/Makefile.am:
+       * ext/amrnb/amrnb.c: (plugin_init):
+       * ext/amrnb/amrnbdec.c: (gst_amrnbdec_init),
+       (gst_amrnbdec_setcaps), (gst_amrnbdec_chain),
+       (gst_amrnbdec_state_change):
+       * ext/amrnb/amrnbdec.h:
+       * ext/amrnb/amrnbenc.c: (gst_amrnbenc_get_type),
+       (gst_amrnbenc_base_init), (gst_amrnbenc_class_init),
+       (gst_amrnbenc_init), (gst_amrnbenc_finalize),
+       (gst_amrnbenc_setcaps), (gst_amrnbenc_chain),
+       (gst_amrnbenc_state_change):
+       * ext/amrnb/amrnbenc.h:
+       * ext/amrnb/amrnbparse.c: (gst_amrnbparse_init),
+       (gst_amrnbparse_query), (gst_amrnbparse_event),
+       (gst_amrnbparse_chain), (gst_amrnbparse_read_header),
+       (gst_amrnbparse_loop), (gst_amrnbparse_sink_activate),
+       (gst_amrnbparse_state_change):
+       * ext/amrnb/amrnbparse.h:
+       Ported AMR decoder/parse.
+       Added AMR encoder.
+
+2005-05-18  Wim Taymans  <wim@fluendo.com>
+
+       * configure.ac:
+       * gst/goom/Makefile.am:
+       * gst/goom/gstgoom.c: (gst_goom_init), (gst_goom_sink_setcaps),
+       (gst_goom_src_setcaps), (gst_goom_src_negotiate), (gst_goom_event),
+       (gst_goom_chain), (gst_goom_change_state), (plugin_init):
+       Ported goom.
+       Added goom and alpha to build.
+
+2005-05-17  Wim Taymans  <wim@fluendo.com>
+
+       * configure.ac:
+       * gst/alpha/Makefile.am:
+       * gst/alpha/gstalpha.c: (gst_alpha_class_init), (gst_alpha_init),
+       (gst_alpha_sink_setcaps), (gst_alpha_chain):
+       Ported alpha,  remove alphacolor as functionality is in
+       ffmpegcolorspace.
+
+2005-05-17  Wim Taymans  <wim@fluendo.com>
+
+       * ext/libcaca/gstcacasink.c: (gst_cacasink_setcaps),
+       (gst_cacasink_render), (gst_cacasink_open), (gst_cacasink_close),
+       (gst_cacasink_change_state):
+       * ext/libcaca/gstcacasink.h:
+       Cleanups.
+
+2005-05-15  David Schleef  <ds@schleef.org>
+
+       Move core plugins out of core.  I don't mind fdsrc/fdsink
+       going back into the core; they were just disabled there, so
+       I moved them.  Some of this stuff could (should) be deleted.
+       * gst/oldcore/Makefile.am:
+       * gst/oldcore/gstaggregator.c:
+       * gst/oldcore/gstaggregator.h:
+       * gst/oldcore/gstelements.c:
+       * gst/oldcore/gstfdsink.c:
+       * gst/oldcore/gstfdsink.h:
+       * gst/oldcore/gstfdsrc.c:
+       * gst/oldcore/gstfdsrc.h:
+       * gst/oldcore/gstmd5sink.c:
+       * gst/oldcore/gstmd5sink.h:
+       * gst/oldcore/gstmultifilesrc.c:
+       * gst/oldcore/gstmultifilesrc.h:
+       * gst/oldcore/gstpipefilter.c:
+       * gst/oldcore/gstpipefilter.h:
+       * gst/oldcore/gstshaper.c:
+       * gst/oldcore/gstshaper.h:
+       * gst/oldcore/gststatistics.c:
+       * gst/oldcore/gststatistics.h:
+
+2005-05-13  Christian Schaller  <uraeus@gnome.org>
+
+       * ext/Makefile.am: dist esd directory
+       * gst-plugins.spec.in: add rtp plugins and esd plugin
+       * gst/effectv/Makefile.am: fix videofilter linking
+       * gst/rtp/Makefile.am: add missing headers 
+       * gst/rtsp/Makefile.am: add missing headers
+
+2005-05-12  Wim Taymans  <wim@fluendo.com>
+
+       * configure.ac:
+       * ext/sidplay/gstsiddec.cc:
+       Add working plugins to build.
+       Make sidplay compile again.
+
+2005-05-12  Wim Taymans  <wim@fluendo.com>
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_src_query):
+       * ext/mad/gstmad.c: (gst_mad_chain):
+       Fix mad and id3tag compilation again.
+
+2005-05-12  Wim Taymans  <wim@fluendo.com>
+
+       * gst/udp/.cvsignore:
+       * gst/udp/Makefile.am:
+       * gst/udp/gstmultiudpsink.c: (gst_multiudpsink_get_type),
+       (gst_multiudpsink_base_init), (gst_multiudpsink_class_init),
+       (gst_multiudpsink_init), (gst_multiudpsink_finalize),
+       (gst_multiudpsink_get_times), (gst_multiudpsink_render),
+       (gst_multiudpsink_set_property), (gst_multiudpsink_get_property),
+       (gst_multiudpsink_init_send), (gst_multiudpsink_close),
+       (gst_multiudpsink_add), (gst_multiudpsink_remove),
+       (gst_multiudpsink_clear), (gst_multiudpsink_get_stats),
+       (gst_multiudpsink_change_state):
+       * gst/udp/gstmultiudpsink.h:
+       * gst/udp/gstudp-marshal.list:
+       * gst/udp/gstudp.c: (plugin_init):
+       * gst/udp/gstudp.h:
+       * gst/udp/gstudpsink.c: (gst_udpsink_get_type),
+       (gst_udpsink_base_init), (gst_udpsink_class_init),
+       (gst_udpsink_init), (gst_udpsink_set_uri),
+       (gst_udpsink_set_property), (gst_udpsink_get_property),
+       (gst_udpsink_uri_get_type), (gst_udpsink_uri_get_protocols),
+       (gst_udpsink_uri_get_uri), (gst_udpsink_uri_set_uri),
+       (gst_udpsink_uri_handler_init):
+       * gst/udp/gstudpsink.h:
+       * gst/udp/gstudpsrc.c: (gst_udpsrc_get_type),
+       (gst_udpsrc_base_init), (gst_udpsrc_class_init),
+       (gst_udpsrc_create), (gst_udpsrc_set_uri), (gst_udpsrc_start),
+       (gst_udpsrc_unlock), (gst_udpsrc_stop):
+       * gst/udp/gstudpsrc.h:
+       Added multifdsink to send UDP to multiple addresses.
+       Cleaned up UDP source/sink elements some more.
+       Make UDP sink extends from multiudpsink.
+
+2005-05-12  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * ext/mad/gstmad.c: (gst_mad_src_query), (gst_mad_sink_event):
+         Make queries actually work (update core first).
+
+2005-05-12  Wim Taymans  <wim@fluendo.com>
+
+       * gst/rtsp/README:
+       * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_get_type),
+       (gst_tcpclientsrc_base_init), (gst_tcpclientsrc_class_init),
+       (gst_tcpclientsrc_init), (gst_tcpclientsrc_getcaps),
+       (gst_tcpclientsrc_stop), (gst_tcpclientsrc_eos),
+       (gst_tcpclientsrc_create), (gst_tcpclientsrc_start):
+       * gst/tcp/gsttcpclientsrc.h:
+       * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_get_type),
+       (gst_tcpserversrc_base_init), (gst_tcpserversrc_class_init),
+       (gst_tcpserversrc_init), (gst_tcpserversrc_create),
+       (gst_tcpserversrc_start), (gst_tcpserversrc_stop):
+       * gst/tcp/gsttcpserversrc.h:
+       * gst/tcp/gsttcpsrc.c: (gst_tcpsrc_get_type),
+       (gst_tcpsrc_base_init), (gst_tcpsrc_class_init), (gst_tcpsrc_init),
+       (gst_tcpsrc_create), (gst_tcpsrc_start), (gst_tcpsrc_stop):
+       * gst/tcp/gsttcpsrc.h:
+       * gst/udp/gstudpsink.c: (gst_udpsink_base_init),
+       (gst_udpsink_init), (gst_udpsink_get_times), (gst_udpsink_render),
+       (gst_udpsink_set_property), (gst_udpsink_get_property),
+       (gst_udpsink_change_state):
+       * gst/udp/gstudpsink.h:
+       * gst/udp/gstudpsrc.c: (gst_udpsrc_get_type),
+       (gst_udpsrc_base_init), (gst_udpsrc_class_init), (gst_udpsrc_init),
+       (gst_udpsrc_create), (gst_udpsrc_set_uri), (gst_udpsrc_start),
+       (gst_udpsrc_stop):
+       * gst/udp/gstudpsrc.h:
+       Make UDP and TCP elements use PushSrc.
+
+
+2005-05-11  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * ext/mad/gstmad.c: (gst_mad_init), (gst_mad_src_query),
+       (index_seek), (normal_seek), (gst_mad_sink_event):
+         Port to new query API and replace gst_pad_convert()
+         and gst_pad_get_formats() usage. gstid3tag looks like
+         it needs some more love before it will work again, if 
+         not a rewrite.
+
+2005-05-12  Zeeshan Ali  <zeenix@gmail.com>
+
+       * gst/effectv/Makefile.am:
+       Fixed the effectv build again.
+
+2005-05-11  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/Makefile.am:
+       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_get_type),
+       (gst_multifdsink_base_init), (gst_multifdsink_class_init),
+       (gst_multifdsink_init), (gst_multifdsink_handle_client_write),
+       (gst_multifdsink_queue_buffer), (gst_multifdsink_render),
+       (gst_multifdsink_change_state):
+       * gst/tcp/gstmultifdsink.h:
+       * gst/tcp/gsttcp.c:
+       * gst/tcp/gsttcpclientsink.c: (gst_tcpclientsink_get_type),
+       (gst_tcpclientsink_base_init), (gst_tcpclientsink_class_init),
+       (gst_tcpclientsink_init), (gst_tcpclientsink_render),
+       (gst_tcpclientsink_set_property), (gst_tcpclientsink_get_property),
+       (gst_tcpclientsink_change_state):
+       * gst/tcp/gsttcpclientsink.h:
+       * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_class_init),
+       (gst_tcpclientsrc_init_receive):
+       * gst/tcp/gsttcpplugin.c: (plugin_init):
+       * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init):
+       * gst/tcp/gsttcpserversink.h:
+       * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_class_init):
+       * gst/tcp/gsttcpsink.c: (gst_tcpsink_get_type),
+       (gst_tcpsink_base_init), (gst_tcpsink_class_init),
+       (gst_tcpsink_setcaps), (gst_tcpsink_init), (gst_tcpsink_get_times),
+       (gst_tcpsink_render), (gst_tcpsink_set_property),
+       (gst_tcpsink_get_property):
+       * gst/tcp/gsttcpsink.h:
+       * gst/tcp/gsttcpsrc.c: (gst_tcpsrc_class_init), (gst_tcpsrc_get):
+       Ported over some sink elements.
+       Sources not ported yet as they require a PushSource base class.
+
+2005-05-11  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * gst/effectv/Makefile.am:
+       * gst/videofilter/Makefile.am:
+         Turn videofilter into a library (private for now)
+
+2005-05-11  Wim Taymans  <wim@fluendo.com>
+
+       * gst/rtsp/README:
+       * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
+       (gst_rtspsrc_class_init), (gst_rtspsrc_create_stream),
+       (gst_rtspsrc_add_element), (gst_rtspsrc_set_state),
+       (gst_rtspsrc_stream_setup_rtp),
+       (gst_rtspsrc_stream_configure_transport), (find_stream),
+       (gst_rtspsrc_loop), (gst_rtspsrc_open), (gst_rtspsrc_play):
+       * gst/rtsp/rtsp.h:
+       * gst/rtsp/rtspconnection.c: (rtsp_connection_create),
+       (rtsp_connection_send), (read_line), (parse_request_line),
+       (parse_line), (read_body), (rtsp_connection_receive),
+       (rtsp_connection_free):
+       * gst/rtsp/rtspconnection.h:
+       * gst/rtsp/rtspdefs.c: (rtsp_find_method):
+       * gst/rtsp/rtspdefs.h:
+       * gst/rtsp/rtspmessage.c: (rtsp_message_set_body),
+       (rtsp_message_take_body):
+       * gst/rtsp/rtspmessage.h:
+       * gst/rtsp/rtspstream.h:
+       * gst/rtsp/sdpmessage.c: (sdp_parse_line):
+       Added README
+       Some cleanups.
+
+2005-05-11  Wim Taymans  <wim@fluendo.com>
+
+       * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
+       (gst_rtspsrc_class_init), (gst_rtspsrc_init),
+       (gst_rtspsrc_create_stream), (gst_rtspsrc_add_element),
+       (gst_rtspsrc_set_state), (gst_rtspsrc_stream_setup_rtp),
+       (gst_rtspsrc_stream_configure_transport), (find_stream),
+       (gst_rtspsrc_loop), (gst_rtspsrc_open), (gst_rtspsrc_close),
+       (gst_rtspsrc_play), (gst_rtspsrc_change_state):
+       * gst/rtsp/gstrtspsrc.h:
+       Setup UDP sources correctly, receives raw data from RTSP
+       compliant servers now.
+
+2005-05-11  Wim Taymans  <wim@fluendo.com>
+
+       * gst/rtsp/.cvsignore:
+       * gst/rtsp/Makefile.am:
+       * gst/rtsp/gstrtsp.c: (plugin_init):
+       * gst/rtsp/gstrtsp.h:
+       * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
+       (gst_rtspsrc_get_type), (gst_rtspsrc_base_init),
+       (gst_rtspsrc_class_init), (gst_rtspsrc_init),
+       (gst_rtspsrc_set_property), (gst_rtspsrc_get_property),
+       (gst_rtspsrc_create_stream), (rtspsrc_add_element),
+       (gst_rtspsrc_stream_setup_rtp),
+       (gst_rtspsrc_stream_configure_transport), (find_stream),
+       (gst_rtspsrc_loop), (gst_rtspsrc_send), (gst_rtspsrc_open),
+       (gst_rtspsrc_close), (gst_rtspsrc_play), (gst_rtspsrc_pause),
+       (gst_rtspsrc_activate), (gst_rtspsrc_change_state):
+       * gst/rtsp/gstrtspsrc.h:
+       * gst/rtsp/rtsp.h:
+       * gst/rtsp/rtspconnection.c: (rtsp_connection_open),
+       (rtsp_connection_create), (append_header), (rtsp_connection_send),
+       (read_line), (read_string), (read_key), (parse_response_status),
+       (parse_line), (read_body), (rtsp_connection_receive),
+       (rtsp_connection_close):
+       * gst/rtsp/rtspconnection.h:
+       * gst/rtsp/rtspdefs.c: (rtsp_init_status), (rtsp_method_as_text),
+       (rtsp_header_as_text), (rtsp_status_as_text),
+       (rtsp_status_to_string), (rtsp_find_header_field):
+       * gst/rtsp/rtspdefs.h:
+       * gst/rtsp/rtspmessage.c: (rtsp_message_new_request),
+       (rtsp_message_init_request), (rtsp_message_new_response),
+       (rtsp_message_init_response), (rtsp_message_init_data),
+       (rtsp_message_add_header), (rtsp_message_remove_header),
+       (rtsp_message_get_header), (rtsp_message_get_header_copy),
+       (rtsp_message_set_body), (rtsp_message_set_body_copy),
+       (rtsp_message_get_body), (rtsp_message_get_body_copy), (dump_mem),
+       (dump_key_value), (rtsp_message_dump):
+       * gst/rtsp/rtspmessage.h:
+       * gst/rtsp/rtspstream.h:
+       * gst/rtsp/rtsptransport.c: (rtsp_transport_new),
+       (rtsp_transport_init), (parse_mode), (parse_range),
+       (rtsp_transport_parse), (rtsp_transport_free):
+       * gst/rtsp/rtsptransport.h:
+       * gst/rtsp/rtspurl.c: (rtsp_url_parse), (rtsp_url_free):
+       * gst/rtsp/rtspurl.h:
+       * gst/rtsp/sdp.h:
+       * gst/rtsp/sdpmessage.c: (sdp_message_new), (sdp_message_init),
+       (sdp_message_clean), (sdp_message_free), (sdp_media_new),
+       (sdp_media_init), (sdp_message_set_origin),
+       (sdp_message_get_origin), (sdp_message_set_connection),
+       (sdp_message_get_connection), (sdp_message_add_bandwidth),
+       (sdp_message_add_time), (sdp_message_add_zone),
+       (sdp_message_set_key), (sdp_message_get_key),
+       (sdp_message_get_attribute_val), (sdp_message_add_attribute),
+       (sdp_message_add_media), (sdp_media_add_attribute),
+       (sdp_media_add_bandwidth), (sdp_media_add_format),
+       (sdp_media_get_attribute_val), (read_string), (read_string_del),
+       (sdp_parse_line), (sdp_message_parse_buffer), (print_media),
+       (sdp_message_dump):
+       * gst/rtsp/sdpmessage.h:
+       * gst/rtsp/test.c: (main):
+       Ported to 0.9.
+       Set up transports, init UDP ports, init RTP session managers.
+
+2005-05-11  Wim Taymans  <wim@fluendo.com>
+
+       * gst/rtp/Makefile.am:
+       * gst/rtp/gstrtp.c: (plugin_init):
+       * gst/rtp/gstrtpdec.c: (gst_rtpdec_get_type),
+       (gst_rtpdec_class_init), (gst_rtpdec_init), (gst_rtpdec_chain_rtp),
+       (gst_rtpdec_chain_rtcp), (gst_rtpdec_set_property),
+       (gst_rtpdec_get_property), (gst_rtpdec_change_state),
+       (gst_rtpdec_plugin_init):
+       * gst/rtp/gstrtpdec.h:
+       * gst/udp/gstudpsink.c: (gst_udpsink_base_init),
+       (gst_udpsink_get_times), (gst_udpsink_render),
+       (gst_udpsink_change_state):
+       * gst/udp/gstudpsrc.c: (gst_udpsrc_get_type),
+       (gst_udpsrc_base_init), (gst_udpsrc_class_init), (gst_udpsrc_init),
+       (gst_udpsrc_loop), (gst_udpsrc_set_uri), (gst_udpsrc_set_property),
+       (gst_udpsrc_get_property), (gst_udpsrc_init_receive),
+       (gst_udpsrc_activate), (gst_udpsrc_change_state),
+       (gst_udpsrc_uri_get_type), (gst_udpsrc_uri_get_protocols),
+       (gst_udpsrc_uri_get_uri), (gst_udpsrc_uri_set_uri),
+       (gst_udpsrc_uri_handler_init):
+       * gst/udp/gstudpsrc.h:
+       UDP fixes, added uri handler.
+       Added rtpdec that will manage the RTP session in the future.
+
+2005-05-10  Arwed v. Merkatz  <v.merkatz@gmx.net>
+
+       * PORTED_09:
+       * configure.ac:
+       * ext/Makefile.am:
+       * ext/esd/Makefile.am:
+       * ext/esd/esdsink.c: (gst_esdsink_get_type),
+       (gst_esdsink_class_init), (gst_esdsink_init),
+       (gst_esdsink_dispose), (gst_esdsink_change_state),
+       (gst_caps_set_each), (gst_esdsink_getcaps), (gst_esdsink_open),
+       (gst_esdsink_close), (gst_esdsink_write), (gst_esdsink_delay),
+       (gst_esdsink_reset), (gst_esdsink_set_property),
+       (gst_esdsink_get_property), (gst_esdsink_factory_init):
+       * ext/esd/esdsink.h:
+       * ext/esd/gstesd.c: (plugin_init):
+       Ported esdsink plugin
+
+2005-05-10  Wim Taymans  <wim@fluendo.com>
+
+       * gst/udp/Makefile.am:
+       * gst/udp/gstudpsink.c: (gst_udpsink_get_type),
+       (gst_udpsink_base_init), (gst_udpsink_class_init),
+       (gst_udpsink_init), (gst_udpsink_get_times), (gst_udpsink_render),
+       (gst_udpsink_set_property), (gst_udpsink_get_property),
+       (gst_udpsink_init_send), (gst_udpsink_close),
+       (gst_udpsink_change_state):
+       * gst/udp/gstudpsink.h:
+       * gst/udp/gstudpsrc.c: (gst_udpsrc_base_init),
+       (gst_udpsrc_class_init), (gst_udpsrc_init), (gst_udpsrc_loop),
+       (gst_udpsrc_set_property), (gst_udpsrc_get_property),
+       (gst_udpsrc_init_receive), (gst_udpsrc_close),
+       (gst_udpsrc_activate), (gst_udpsrc_change_state):
+       * gst/udp/gstudpsrc.h:
+       Ported udp src/sink.
+
+2005-05-09  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * PORTED_09:
+       * configure.ac:
+       * ext/Makefile.am:
+       * ext/shout2/Makefile.am:
+       * ext/shout2/gstshout2.c: (gst_shout2send_get_type),
+       (gst_shout2send_base_init), (gst_shout2send_class_init),
+       (gst_shout2send_init), (gst_shout2send_event),
+       (gst_shout2send_render), (gst_shout2send_set_property),
+       (gst_shout2send_get_property), (gst_shout2send_setcaps),
+       (gst_shout2send_change_state):
+       * ext/shout2/gstshout2.h:
+
+       Port shout2 plugin
+
+2005-05-08  Zeeshan Ali   <zeenix@gmail.com>
+
+       * configure.ac:
+       * ext/Makefile.am:
+       * ext/libcaca/Makefile.am:
+       * ext/libcaca/gstcacasink.c: (gst_cacasink_get_type),
+       (gst_cacasink_class_init), (gst_cacasink_get_times),
+       (gst_cacasink_setcaps), (gst_cacasink_init), (gst_cacasink_render),
+       (plugin_init):
+       * ext/libcaca/gstcacasink.h:
+       Ported the libcaca plugin.
+
+2005-05-08  Zeeshan Ali  <zeenix@gmail.com>
+
+       * configure.ac:
+       * ext/mad/Makefile.am:
+       * effectv/Makefile.am:
+       Fixed a few things to enable the mad and effectv to be able to find the
+       headers in the gst-plugins-base/gst-libs and to link against the libs
+       in there.
+
+2005-05-07  Zeeshan Ali  <zeenix@gmail.com>
+
+       * configure.ac:
+       Fixed the build by fixing a small mistake of Wim.
+       
+2005-05-06  Wim Taymans  <wim@fluendo.com>
+
+       * configure.ac:
+       * ext/aalib/Makefile.am:
+       * ext/aalib/gstaasink.c: (gst_aasink_get_type),
+       (gst_aasink_class_init), (gst_aasink_fixate), (gst_aasink_setcaps),
+       (gst_aasink_init), (gst_aasink_get_times), (gst_aasink_render),
+       (gst_aasink_set_property), (gst_aasink_get_property),
+       (gst_aasink_open), (gst_aasink_close), (gst_aasink_change_state):
+       * ext/aalib/gstaasink.h:
+       * gst/smpte/Makefile.am:
+       * gst/smpte/gstsmpte.c: (gst_smpte_setcaps), (gst_smpte_init),
+       (gst_smpte_collected):
+       * gst/smpte/gstsmpte.h:
+       Ported 2 more plugins. usgly hack in the Makefile.am though, I'm
+       sure someone will fix it.
+
+2005-05-06  Christian Schaller  <uraeus@gnome.org>
+
+       * configure.ac: add sidplay
+       * ext/Makefile.am: add sidplay
+       * ext/sidplay/Makefile.am: add GST_PLUGINS_CFLAGS
+       * ext/sidplay/gstsiddec.cc: remove bytestream.h
+
+2005-05-06  Christian Schaller  <uraeus@gnome.org>
+
+       * configure.ac: add gst-plugins-libs
+
+2005-05-06  Wim Taymans  <wim@fluendo.com>
+
+       * configure.ac:
+       * ext/sidplay/gstsiddec.cc:
+       * ext/sidplay/gstsiddec.h:
+       Ported sidplay.
+
+2005-05-06  Christian Schaller  <uraeus@gnome.org>
+
+       * configure.ac: 
+       * ext/mad/Makefile.am: add linking of gstinterfaces
+       * ext/mad/gstid3tag.c: (plugin_init): remove library_load
+       * gst-plugins.spec.in: 
+       * gst/effectv/Makefile.am: link to libgstvideofilter
+       * gst/effectv/gsteffectv.c: (plugin_init): same as for mad
+       * gst/videofilter/Makefile.am: make sure videoflip is not built
+
+2005-05-06  Wim Taymans  <wim@fluendo.com>
+
+       * gst/law/alaw-decode.c: (alawdec_getcaps), (alawdec_setcaps),
+       (gst_alawdec_init), (gst_alawdec_chain):
+       * gst/law/alaw-encode.c: (alawenc_getcaps), (alawenc_setcaps),
+       (gst_alawenc_init), (gst_alawenc_chain):
+       * gst/law/mulaw-decode.c: (mulawdec_getcaps), (mulawdec_setcaps),
+       (gst_mulawdec_init), (gst_mulawdec_chain):
+       * gst/law/mulaw-encode.c: (mulawenc_getcaps), (mulawenc_setcaps),
+       (gst_mulawenc_init), (gst_mulawenc_chain):
+       Ported alaw and mulaw plugins to 0.9, fixed the negotiation as
+       well.
+
+2005-05-06  Christian Schaller  <uraeus@gnome.org>
+
+       * ext/alsa: removed plugins that are now in gst-plugins-base
+       * ext/gnomevfs:
+       * ext/theora:
+       * ext/vorbis:
+       * gst/adder:
+       * gst/audioconvert:
+       * gst/ffmpegcolorspace:
+       * gst/typefind:
+       * gst/videofilter: comment out videoflip and gamma plugins
+
+2005-05-06  Christian Schaller  <uraeus@gnome.org>
+
+       * gst-libs: Remove all files as this is in gst-plugins-base now
+       * gst-libs/README: add a remove informing of this move
+
+2005-05-06  Christian Schaller <uraeus@gnome.org> 
+
+       * PORTED_09: update to add videofilter
+       * configure.ac: re-add videofilter
+       * gst/videofilter/Makefile.am: remove videobalance (not ported yet)
+       * gst/videofilter/gstgamma.c: (gst_gamma_class_init):
+       * gst/videofilter/gstvideobalance.c: (gst_videobalance_class_init):
+       * gst/videofilter/gstvideofilter.c: (gst_videofilter_getcaps),
+       (gst_videofilter_setcaps), (gst_videofilter_init),
+       (gst_videofilter_chain), (gst_videofilter_set_output_size):
+       * gst/videofilter/gstvideoflip.c: (gst_videoflip_class_init):
+
+2005-05-06  Christian Schaller <uraeus@gnome.org>
+
+       * ext/mad: ported plugin from threaded branch
+       * gst/effectv: ported plugins from threaded branch
+       * gst/law: enable law plugin as it compiles (Wim will fixor)
+
+2005-05-06  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * configure.ac:
+       fix typo
+
+2005-05-05  Christian Schaller <uraeus@gnome.org>
+
+       * Update configure.ac and Makefiles to only build what is actually
+       ported and not moved into gst-plugins-base
+
+2005-02-22  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+         hunting season on 0.9 is now OPEN
+
+2005-02-22  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/oss/gstosselement.c: (gst_osselement_class_probe_devices):
+         Kick the hell out of gcc for not warning me about a symbol conflict.
+
+2005-02-22  Luca Ognibene  <luogni@tin.it>
+
+       Reviewed by: Tim-Philipp Müller  <tim at centricular dot net>
+
+       * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_link):
+         Don't leak caps string (fixes #168134)
+
+       * ext/jpeg/gstjpegenc.c: (gst_jpegenc_class_init),
+       (gst_jpegenc_init), (gst_jpegenc_finalize),
+       (gst_jpegenc_change_state):
+         Don't leak line buffers and context struct (fixes #168133).
+
+2005-02-21  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * configure.ac:
+       * ext/dirac/gstdiracdec.cc:
+       (gst_diracdec_chain):
+         Since dirac 0.5.0 the framerate in dirac is expressed as a
+         rational number. Fix build and up requirement to 0.5.0, and
+         also pass parameters to gst_diracdec_link in the right order
+         (fixes #167959).
+
+2005-02-21  Maciej Katafiasz  <mathrick@freedesktop.org>
+
+       * ext/faad/gstfaad.c: (gst_faad_sinkconnect), (gst_faad_chain):
+       * ext/faad/gstfaad.h:
+       TEH LONGEST DEBUGGING SESSION EVAR is over. Fix interaction with 
+       certain invalid muxed streams, where some packets will contain 
+       junk after decoder data. Partially fixes #149158.
+
+2005-02-21  Jan Schmidt <thaytan@mad.scientist.com>
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain):
+          Make sure we only write to writable buffers
+
+2005-02-20  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * gst-libs/gst/riff/riff-media.c:
+       (gst_riff_create_audio_caps_with_data):
+         Do actually fix invalid RIFF fmt header values for alaw
+         and mulaw audio instead of just saying so.
+
+       * gst/wavparse/gstwavparse.c: (gst_wavparse_fmt):
+         Give gst_riff_create_audio_caps_with_data() a chance to
+         fix up broken format header fields before extracting any
+         parameters from the header. (fixes #167633)
+
+2005-02-19  Martin Holters  <martin.holters@gmx.de>
+
+       Reviewed by: Tim-Philipp Müller  <tim at centricular dot net>
+
+       * gst/audioconvert/bufferframesconvert.c:
+       (buffer_frames_convert_link):
+         Don't leak othercaps. (fixes #167878)
+
+2005-02-19  Arwed v. Merkatz  <v.merkatz@gmx.net>>
+
+       * configure.ac:
+       * ext/libvisual/visual.c: (gst_visual_srclink),
+       (gst_visual_change_state):
+         Support libvisual 0.2.0.
+
+2005-02-18  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * ext/jpeg/gstjpegdec.c: (gst_jpegdec_chain):
+       * ext/jpeg/gstjpegenc.c: (gst_jpegenc_resync), (gst_jpegenc_chain):
+         Use same rowstrides for I420 as used everywhere else.
+
+2005-02-17  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_invert):
+         Declare variables at beginning of block and make gcc-2.95 happy
+         (fixes # 167482, patch by Gergely Nagy).
+         
+       * gst/tcp/gsttcpclientsrc.c:
+       * gst/tcp/gsttcpclientsrc.h:
+         Move some includes into the header, so that struct sockaddr_in is
+         defined when it should be defined on FreeBSD as well (fixes
+         #167483).
+         
+       * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_init_receive):
+         Don't pass uninitialised values to setsockopt() here either.
+
+2005-02-17  Luca Ognibene  <luogni at tin dot it>
+
+       Reviewed by: Tim-Philipp Müller  <tim at centricular dot net>
+
+       * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_init_send):
+         Don't pass uninitialised values to setsockopt(). (fixes #167704)
+
+2005-02-16  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybin.c: (add_sink):
+         Invert bin_add/link order to workaround deadlock in opt.
+
+2005-02-15  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/modplug/gstmodplug.cc:
+         Add missing break causing position queries to fail.
+
+2005-02-15  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_populate):
+         Granpos can apparently be -1, which screws up calculations...
+
+2005-02-16  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_chain),
+       (gst_ximagesink_send_pending_navigation),
+       (gst_ximagesink_navigation_send_event), (gst_ximagesink_finalize),
+       (gst_ximagesink_init):
+       * sys/ximage/ximagesink.h:
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain),
+       (gst_xvimagesink_send_pending_navigation),
+       (gst_xvimagesink_navigation_send_event),
+       (gst_xvimagesink_finalize), (gst_xvimagesink_init):
+       * sys/xvimage/xvimagesink.h:
+         Use a mutex protected list to marshal navigation
+         events into the stream thread from whichever thread
+         sends them.
+
+2005-02-15  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * gst/speed/demo-mp3.c: (time_tick_cb), (main):
+         Display current position and track length; misc. clean-ups.
+         
+       * gst/speed/gstspeed.c: (speed_get_query_types), (speed_src_query),
+       (speed_init), (speed_chain):
+         Add query function, so that the stream length and current position
+         get adjusted when queried (note that current position queries may
+         still be wrong if the audio sink returns values based on buffer
+         timestamps instead of passing on the query).
+
+2005-02-13  Benjamin Otte  <otte@gnome.org>
+
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link),
+       (gst_audio_convert_channels):
+         create channel conversion matrix when linking
+       * gst/audioconvert/.cvsignore:
+       * gst/audioconvert/Makefile.am:
+       * gst/audioconvert/channelmixtest.c: (main):
+         add (ugly) test that ensures stereo <=> mono conversion works
+         correctly
+
+2005-02-13  Benjamin Otte  <otte@gnome.org>
+
+       * gst/audioconvert/gstchannelmix.h:
+         include missing header file
+       * gst/audioconvert/gstchannelmix.c:
+       (gst_audio_convert_fill_compatible):
+         use same sign for both channels when converting to/from compatible
+         channel. Previously used different signs made the signals cancel
+         each other out and appear like silence. (fixes #167269)
+
+2005-02-12  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * gst/ffmpegcolorspace/avcodec.h:
+       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+       (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_caps_to_pixfmt),
+       (gst_ffmpegcsp_avpicture_fill):
+       * gst/ffmpegcolorspace/imgconvert.c:
+         Convert to and from YV12 (fixes #156379).
+
+2005-02-12  Julien MOUTTE  <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_new),
+       (gst_ximagesink_sink_link), (gst_ximagesink_change_state),
+       (gst_ximagesink_chain), (gst_ximagesink_set_xwindow_id),
+       (gst_ximagesink_expose), (gst_ximagesink_set_property),
+       (gst_ximagesink_finalize), (gst_ximagesink_init): Protect interface
+        methods from chain and negotiation and vice versa (Fixes #166142).
+       * sys/ximage/ximagesink.h: Add stream_lock.
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_sink_link),
+       (gst_xvimagesink_chain), (gst_xvimagesink_buffer_free),
+       (gst_xvimagesink_buffer_alloc), (gst_xvimagesink_set_xwindow_id),
+       (gst_xvimagesink_expose): Check for xcontext before trying to link.
+
+2005-02-12  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_open):
+         Don't send "Hey! You gave me a NULL pointer you naughty person" as
+         error message when we can't open the DVD device (when dvdnav_open()
+         fails, src->dvdnav is NULL, so dvdnav_err_to_string() will return
+         the above). Send something more useful instead (fixes #167117).
+
+2005-02-11  Julien MOUTTE  <julien@moutte.net>
+
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_put),
+       (gst_xvimagesink_sink_link), (gst_xvimagesink_change_state),
+       (gst_xvimagesink_chain), (gst_xvimagesink_buffer_free),
+       (gst_xvimagesink_buffer_alloc), (gst_xvimagesink_set_xwindow_id),
+       (gst_xvimagesink_expose), (gst_xvimagesink_set_property),
+       (gst_xvimagesink_finalize), (gst_xvimagesink_init): Protect interface
+       methods from chain and negotiation and vice versa (Fixes #166142).
+       Fix a possible bug of images in the buffer pool being discarded because
+       we are looking at the wrong geometry.
+       * sys/xvimage/xvimagesink.h: Add stream_lock.
+
+2005-02-11  David Schleef  <ds@schleef.org>
+
+       * ext/mpeg2dec/gstmpeg2dec.c: (crop_buffer): Change uint to
+       unsigned int. (fixes #167128)
+
+2005-02-11  David Schleef  <ds@schleef.org>
+
+       * gst/librfb/Makefile.am: Testing stuff before committing is
+         for wimps... and people with fast machines.  Fix stupid
+         mistake.
+
+2005-02-11  David Schleef  <ds@schleef.org>
+
+       * configure.ac: Pull in librfb from my CVS tree, because it is
+         too small and annoying to be separate.  Move rfbsrc plugin
+         to gst/.
+       * ext/Makefile.am:
+       * ext/librfb/Makefile.am:
+       * ext/librfb/gstrfbsrc.c:
+       * gst/librfb/Makefile.am:
+       * gst/librfb/gstrfbsrc.c:
+       * gst/librfb/rfb.c:
+       * gst/librfb/rfb.h:
+       * gst/librfb/rfbbuffer.c:
+       * gst/librfb/rfbbuffer.h:
+       * gst/librfb/rfbbytestream.c:
+       * gst/librfb/rfbbytestream.h:
+       * gst/librfb/rfbcontext.h:
+       * gst/librfb/rfbdecoder.c:
+       * gst/librfb/rfbdecoder.h:
+       * gst/librfb/rfbutil.h:
+
+2005-02-10  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * gst/speed/Makefile.am:
+       * gst/speed/demo-mp3.c: (main):
+       * gst/speed/filter.func:
+       * gst/speed/gstspeed.c: (speed_link), (speed_parse_caps),
+       (speed_class_init), (speed_init), (speed_chain_int16),
+       (speed_chain_float32), (speed_chain), (speed_set_property),
+       (speed_get_property), (speed_change_state):
+       * gst/speed/gstspeed.h:
+         Fix speed element and make it chain-based (fixes #156467),
+         and make it handle more than one channel.
+
+2005-02-10  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * ext/dts/gstdtsdec.c: (gst_dtsdec_init), (gst_dtsdec_channels),
+       (gst_dtsdec_handle_event), (gst_dtsdec_handle_frame),
+       (gst_dtsdec_chain), (gst_dtsdec_change_state):
+       * ext/dts/gstdtsdec.h:
+          Don't clobber the stack constructing the channels array.
+         Make the element chain-based. DTS tracks can now be played.
+         
+2005-02-09  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * gst-libs/gst/audio/multichannel.h:
+       * gst-libs/gst/gconf/gconf.h:
+       * gst-libs/gst/idct/idct.h:
+       * gst-libs/gst/media-info/media-info-priv.h:
+       * gst-libs/gst/play/play.h:
+       * gst-libs/gst/resample/private.h:
+       * gst-libs/gst/resample/resample.h:
+       * gst-libs/gst/riff/riff-ids.h:
+       * gst-libs/gst/video/video.h:
+       * gst-libs/gst/video/videosink.h:
+         Add G_BEGIN_DECLS and G_END_DECLS around headers where
+         missing, so that they work when included from C++ code.
+
+2005-02-09  David Schleef  <ds@schleef.org>
+
+       * testsuite/gst-lint: Check for non-statically scoped
+         parent_class variables.  This won't be a problem once
+         plugins are loaded with RTLD_LOCAL.
+
+2005-02-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/mplex/gstmplexibitstream.cc:
+         gcc madness.
+
+2005-02-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstogmparse.c:
+       * gst/debug/gstnavigationtest.c:
+         Die, thou faulty symbol pollutors (non-static parent_class).
+
+2005-02-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/mplex/gstmplexibitstream.cc:
+         Fix event handling (#165525).
+
+2005-02-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/mikmod/gstmikmod.c:
+       * gst/modplug/gstmodplug.cc:
+         Add missing endianness to template (fixes #165509).
+
+2005-02-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_data):
+         Fix wrong order of reading of optional bytes (#165290).
+
+2005-02-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
+         Implement FILLER event awareness.
+
+2005-02-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_convert):
+         Fix track calculations (#166208).
+
+2005-02-08  Gergely Nagy  <algernon@bonehunter.rulez.org>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/libpng/gstpngdec.c: (gst_pngdec_init), (gst_pngdec_chain):
+       * ext/libpng/gstpngenc.c:
+         Fix byte-order, use proper fixed caps. Fixes #164197.
+
+2005-02-08  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * configure.ac:
+         Add dvdlpcmdec 
+
+       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_reset),
+       (free_all_buffers), (gst_mpeg2dec_alloc_buffer):
+         Don't push buffers if the src pad isn't negotiated yet.
+         
+       * gst/audioconvert/gstaudioconvert.c:
+       (gst_audio_convert_buffer_to_default_format),
+       (gst_audio_convert_buffer_from_default_format):
+         Add support for 24-bit width.
+
+       * gst/dvdlpcmdec/.cvsignore:
+       * gst/dvdlpcmdec/Makefile.am:
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_get_type),
+       (gst_dvdlpcmdec_base_init), (gst_dvdlpcmdec_class_init),
+       (gst_dvdlpcm_reset), (gst_dvdlpcmdec_init), (gst_dvdlpcmdec_link),
+       (gst_dvdlpcmdec_chain), (gst_dvdlpcmdec_change_state),
+       (plugin_init):
+       * gst/dvdlpcmdec/gstdvdlpcmdec.h:
+         New decoder for rearranging DVD LPCM into our audio/x-raw-int
+         format. Needs support for the channels maps if someone can find 
+         a DVD LPCM track with > 2 channels.
+
+       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_handle_dvd_event),
+       (gst_dvd_demux_send_discont), (gst_dvd_demux_handle_discont),
+       (gst_dvd_demux_get_audio_stream), (gst_dvd_demux_process_private):
+       * gst/mpegstream/gstdvddemux.h:
+       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_discont),
+       (gst_mpeg_demux_new_output_pad), (gst_mpeg_demux_init_stream),
+       (gst_mpeg_demux_send_subbuffer), (gst_mpeg_demux_handle_src_query):
+       * gst/mpegstream/gstmpegdemux.h:
+       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_reset),
+       (gst_mpeg_parse_parse_packhead), (gst_mpeg_parse_loop),
+       (gst_mpeg_parse_get_rate), (gst_mpeg_parse_convert_src),
+       (gst_mpeg_parse_handle_src_query),
+       (gst_mpeg_parse_handle_src_event):
+         Use audio/x-dvd-lpcm for LPCM output.
+         Add DTS output.
+
+2005-02-08  Gergely Nagy  <algernon@bonehunter.rulez.org>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/alpha/gstalphacolor.c: (gst_alpha_color_sink_link),
+       (transform_rgb), (transform_bgr), (gst_alpha_color_chain):
+         Add BGRA handling (#165736).
+
+2005-02-08  Francis Labonte  <francis_labonte@hotmail.com>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/law/alaw-decode.c: (alawdec_link):
+       * gst/law/alaw-encode.c: (alawenc_link):
+       * gst/law/mulaw-decode.c: (mulawdec_link):
+       * gst/law/mulaw-encode.c: (mulawenc_link):
+         Fix caps memleaks (#166600).
+
+2005-02-08  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * ext/tarkin/mem.h:
+       * ext/tarkin/wavelet.h:
+       * ext/tarkin/yuv.h:
+       * gst/ffmpegcolorspace/avcodec.h:
+         Include "_stdint.h" instead of <stdint.h>. Fixes build on
+         systems that don't have stdint.h, like Solaris9 (fixes #166631).
+
+2005-02-05  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_change_state):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_clear),
+       (gst_xvimagesink_change_state):
+         Clear window on PAUSED->READY instead of READY->PAUSED. Stop
+         Xv video (and thereby regenerate Xv colourkey) in clear() so
+         that PLAY -> READY -> PLAY works (fixes #162504).
+
+2005-02-05  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_getcaps):
+         Switch to list instead of range, since MJPEG-devices really just
+         support decimations, not any size.
+
+2005-02-05  Jan Schmidt  <thaytan@mad.scientist.com>
+       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_open_decoder),
+       (gst_mpeg2dec_reset), (free_all_buffers),
+       (gst_mpeg2dec_alloc_buffer), (handle_sequence):
+       * ext/mpeg2dec/gstmpeg2dec.h:
+         The libmpeg2 user-allocated buffer management is awkward, 
+         to say the least. Hopefully this fixes things.
+
+2005-02-04  Andy Wingo  <wingo@pobox.com>
+
+       * gst/audioconvert/bufferframesconvert.c
+       (buffer_frames_convert_fixate): New function, fixates to 256
+       frames per buffer by default. (Much better than 1.)
+       (buffer_frames_convert_init): Set the fixate function for both src
+       and sink pad.
+       (buffer_frames_convert_link): After success setting nonfixed caps,
+       get the negotiated caps so we can know how many buffer-frames it
+       will be. No idea how this worked at all before.
+
+2005-02-05  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
+       (gst_mpeg2dec_close_decoder), (put_buffer), (check_buffer),
+       (free_buffer), (free_all_buffers), (gst_mpeg2dec_alloc_buffer),
+       (handle_sequence), (handle_picture):
+       * ext/mpeg2dec/gstmpeg2dec.h:
+         Rearrange buffer tracking and refcounting and refactor
+         a little for readability. 
+
+2005-02-04  Jan Schmidt  <thaytan@mad.scientist.com>
+       * sys/v4l/gstv4l.c: (plugin_init):
+       * sys/v4l/gstv4ljpegsrc.c: (gst_v4ljpegsrc_get_type),
+       (gst_v4ljpegsrc_base_init), (gst_v4ljpegsrc_class_init),
+       (gst_v4ljpegsrc_init), (gst_v4ljpegsrc_src_link),
+       (gst_v4ljpegsrc_getcaps), (gst_v4ljpegsrc_get):
+       * sys/v4l/gstv4ljpegsrc.h:
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_open), (gst_v4lsrc_src_link):
+       * sys/v4l/v4l_calls.h:
+       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_palette_name),
+       (gst_v4lsrc_get_fps):
+       * sys/v4l/v4lsrc_calls.h:
+         Add new v4ljpegsrc for handling the ov51x hacky "I'll give
+         you jpeg inside rgb frames" driver.
+         Don't error in the v4lsrc link function, just return 
+         REFUSED.
+
+2005-02-03  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/qcam/gstqcamsrc.c: (gst_qcamsrc_change_state),
+       (gst_qcamsrc_open):
+         Use GST_ELEMENT_ERROR, not g_warning, if open failed.
+
+2005-02-02  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/qtdemux/qtdemux.c: (qtdemux_video_caps):
+         Change caps on MJPEG-B so it doesn't interfere with MJPEG/JPEG.
+
+2005-02-02  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/raw1394/gstdv1394src.c: (gst_dv1394src_change_state):
+         Reset negotiated state on PAUSED->READY.
+
+2005-02-02  David Schleef  <ds@schleef.org>
+
+       * configure.ac: Put DEFAULT_AUDIOSINK in config.h and use
+       whereever possible.  (Fixes #165997)
+       * examples/capsfilter/capsfilter1.c: (main):
+       * examples/dynparams/filter.c: (create_ui):
+       * examples/seeking/cdparanoia.c: (get_track_info), (main):
+       * examples/seeking/chained.c: (main):
+       * examples/seeking/seek.c: (make_mod_pipeline), (make_dv_pipeline),
+       (make_wav_pipeline), (make_flac_pipeline), (make_sid_pipeline),
+       (make_vorbis_pipeline), (make_mp3_pipeline), (make_avi_pipeline),
+       (make_mpeg_pipeline), (make_mpegnt_pipeline):
+       * examples/seeking/spider_seek.c: (make_spider_pipeline):
+       * examples/switch/switcher.c: (main):
+       * ext/dv/demo-play.c: (main):
+       * ext/faad/gstfaad.c: (gst_faad_change_state):
+       * ext/mad/gstmad.c: (gst_mad_chain):
+       * ext/smoothwave/demo-osssrc.c: (main):
+       * gst-libs/gst/gconf/gconf.c: (gst_gconf_set_string),
+       (gst_gconf_render_bin_from_description),
+       (gst_gconf_get_default_audio_sink),
+       (gst_gconf_get_default_video_sink),
+       (gst_gconf_get_default_audio_src),
+       (gst_gconf_get_default_video_src),
+       (gst_gconf_get_default_visualization_element):
+       * gst/level/demo.c: (main):
+       * gst/level/plot.c: (main):
+       * gst/playback/gstplaybin.c: (gen_video_element),
+       (gen_audio_element):
+       * gst/playback/test.c: (gen_video_element), (gen_audio_element):
+       * gst/playondemand/demo-mp3.c: (setup_pipeline):
+       * gst/sine/demo-dparams.c: (main):
+       * gst/spectrum/demo-osssrc.c: (main):
+       * gst/speed/demo-mp3.c: (main):
+       * gst/volume/demo.c: (main):
+       * testsuite/embed/embed.c: (main):
+
+2005-02-02  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * gst/tcp/gsttcpclientsink.c: (gst_tcpclientsink_class_init),
+       (gst_tcpclientsink_finalize):
+       * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_class_init),
+       (gst_tcpclientsrc_finalize):
+       * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init),
+       (gst_tcpserversink_init), (gst_tcpserversink_finalize):
+       * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_class_init),
+       (gst_tcpserversrc_init), (gst_tcpserversrc_finalize):
+         Don't leak the hostname when shutting down.
+         In tcpserversrc, take a copy of the default hostname.
+
+2005-02-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/raw1394/gstdv1394src.c: (gst_dv1394src_iso_receive):
+         Set caps to systemstream=TRUE.
+
+2005-02-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * testsuite/Makefile.am:
+         Fix more OSX buildbots.
+
+2005-02-02  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         Don't send things to NULL PAD_PEERs
+
+       * gst/deinterlace/gstdeinterlace.c: (gst_deinterlace_chain):
+         Copy-on-write the incoming buffer.
+
+       * gst/mpegstream/gstdvddemux.h:
+       * gst/mpegstream/gstmpegclock.h:
+       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead),
+       (normal_seek), (gst_mpeg_demux_handle_src_event):
+       * gst/mpegstream/gstmpegdemux.h:
+       * gst/mpegstream/gstmpegpacketize.h:
+       * gst/mpegstream/gstmpegparse.c:
+       (gst_mpeg_parse_update_streaminfo), (gst_mpeg_parse_reset),
+       (gst_mpeg_parse_handle_discont), (gst_mpeg_parse_parse_packhead),
+       (gst_mpeg_parse_loop), (gst_mpeg_parse_get_rate),
+       (gst_mpeg_parse_convert_src), (gst_mpeg_parse_handle_src_query),
+       (gst_mpeg_parse_handle_src_event), (gst_mpeg_parse_change_state):
+       * gst/mpegstream/gstmpegparse.h:
+       * gst/mpegstream/gstrfc2250enc.h:
+          Various changes to the way time is computed that make seeking and
+         total time estimation much better here.
+         Use G_BEGIN/END_DECLS instead of __cplusplus
+
+       * gst/videocrop/gstvideocrop.c: (gst_video_crop_chain):
+         Use gst_buffer_stamp instead of only copying the TIMESTAMP
+
+2005-02-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/subparse/gstsubparse.c:
+         Fix OSX buildbot.
+
+2005-01-31  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * ext/theora/theoraenc.c: (theora_buffer_from_packet),
+       (theora_enc_chain), (theora_enc_change_state):
+       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_init),
+       (gst_vorbisenc_buffer_from_packet), (gst_vorbisenc_chain),
+       (gst_vorbisenc_change_state):
+       * ext/vorbis/vorbisenc.h:
+         Set granulepos and timestamp correctly for streams not
+         starting at 0, taking into account the initial delay.
+
+2005-01-31  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * gst/mpegstream/gstdvddemux.c:
+         Add audio/x-dts to audio pad template caps
+
+2005-01-30  David Schleef  <ds@schleef.org>
+
+       * ext/polyp/polypsink.c: (gst_polypsink_base_init),
+       (create_context), (gst_polypsink_link): Fix silly endianness
+       bug.  Add some debugging.  Remove float from caps; it doesn't
+       work.  Attempt to get remote audio working.
+
+2005-01-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/qtdemux/qtdemux.c: (qtdemux_video_caps):
+         Add 3IV2 fourcc.
+
+2005-01-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_add_stream), (swap_line),
+       (gst_avi_demux_invert), (gst_avi_demux_process_next_entry),
+       (gst_avi_demux_stream_data):
+       * gst/avi/gstavidemux.h:
+         Invert DIB images. Fixes #132341.
+
+2005-01-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+       (gst_ffmpegcsp_chain):
+         D'oh, reference the palette data, not the palette structure.
+         Fixes color distortion in #132341.
+
+2005-01-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/videoscale/gstvideoscale.c: (gst_videoscale_link):
+         PAR can be non-fixed when not provided as argument (#162626).
+
+2005-01-29  David Moore  <dcm@acm.org>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
+       (gst_qtdemux_loop_header):
+         Re-apply patch from #142272 that allows non-seekable sources,
+         re-proposed by Daniel Drake <dsd@gentoo.org>.
+
+2005-01-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/rtp/gstrtpgsmenc.c: (gst_rtpgsmenc_init):
+         Use the src template for creating the src pad (#162330).
+
+2005-01-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * configure.ac:
+       * ext/musepack/Makefile.am:
+       * ext/musepack/gstmusepackdec.c: (gst_musepackdec_class_init),
+       (gst_musepackdec_init), (gst_musepackdec_dispose),
+       (gst_musepackdec_src_query), (gst_musepackdec_src_convert),
+       (gst_musepack_stream_init), (gst_musepackdec_loop),
+       (gst_musepackdec_change_state):
+       * ext/musepack/gstmusepackdec.cpp:
+       * ext/musepack/gstmusepackdec.h:
+       * ext/musepack/gstmusepackreader.c: (gst_musepack_reader_peek),
+       (gst_musepack_reader_read), (gst_musepack_reader_seek),
+       (gst_musepack_reader_tell), (gst_musepack_reader_get_size),
+       (gst_musepack_reader_canseek), (gst_musepack_init_reader):
+       * ext/musepack/gstmusepackreader.cpp:
+       * ext/musepack/gstmusepackreader.h:
+         Update to 1.1 API (#165446).
+
+2005-01-28  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/Makefile.am:
+         Unbreak buildbot.
+
+2005-01-28  Andy Wingo  <wingo@pobox.com>
+
+       * ext/dv/gstdvdec.c: Change the pixel aspect ratio of dvdec output
+       to reflect a different dubious internet source. Add a reference
+       and some commentary.
+
+2005-01-28  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gststreamselector.c: (gst_stream_selector_init),
+       (gst_stream_selector_get_caps), (gst_stream_selector_chain):
+       * gst/playback/gststreamselector.h:
+         Be more selective when we're redoing caps negotiation from
+         within the chain function on a stream change.
+
+2005-01-28  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * configure.ac:
+       * ext/Makefile.am:
+       * ext/amrnb/Makefile.am:
+       * ext/amrnb/amrnb.c: (plugin_init):
+       * ext/amrnb/amrnbdec.c: (gst_amrnbdec_get_type),
+       (gst_amrnbdec_base_init), (gst_amrnbdec_class_init),
+       (gst_amrnbdec_init), (gst_amrnbdec_link), (gst_amrnbdec_chain),
+       (gst_amrnbdec_state_change):
+       * ext/amrnb/amrnbdec.h:
+       * ext/amrnb/amrnbparse.c: (gst_amrnbparse_get_type),
+       (gst_amrnbparse_base_init), (gst_amrnbparse_class_init),
+       (gst_amrnbparse_init), (gst_amrnbparse_formats),
+       (gst_amrnbparse_querytypes), (gst_amrnbparse_query),
+       (gst_amrnbparse_handle_event), (gst_amrnbparse_reserve),
+       (gst_amrnbparse_loop), (gst_amrnbparse_state_change):
+       * ext/amrnb/amrnbparse.h:
+         Add support for AMR-NB (mobile phone audio format; #155163, #163286).
+       * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+         Add AMR-NB/-WB raw formats.
+       * ext/alsa/gstalsa.c: (gst_alsa_link):
+         Keep valid time when changing format.
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
+       (qtdemux_parse_trak):
+         Add some more format-specific options (#140141, #143555, #155163).
+
+2005-01-28  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/matroska/matroska-demux.c:
+       (gst_matroska_demux_parse_blockgroup):
+         Fix logic error in timing of subtitle stream synchronization.
+       * gst/typefind/gsttypefindfunctions.c: (qt_type_find):
+         Add skip-chunk, which is found in kodak-camera streams.
+
+2005-01-27  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * po/LINGUAS:
+       * po/vi.po:
+         Adding Vietnamese translation (submitted by Clytie Siddall)
+
+2005-01-27  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstdecodebin.c: (try_to_link_1):
+         Use realpad for signal.
+
+2005-01-27  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/mad/gstid3demuxbin.c: (gst_id3demux_bin_base_init):
+         Fix category so decodebin picks it up.
+
+2005-01-27  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/mad/Makefile.am:
+       * ext/mad/gstid3demuxbin.c: (gst_id3demux_bin_get_type),
+       (gst_id3demux_bin_base_init), (gst_id3demux_bin_class_init),
+       (gst_id3demux_bin_init), (gst_id3demux_bin_remove_pad),
+       (found_type), (gst_id3demux_bin_change_state):
+       * ext/mad/gstid3tag.c: (gst_id3_tag_add_src_pad),
+       (gst_id3_tag_init), (gst_id3_tag_handle_event),
+       (gst_id3_tag_src_link), (gst_id3_tag_chain),
+       (gst_id3_tag_change_state), (plugin_init):
+       * ext/mad/gstmad.h:
+         Add id3demuxbin (which is a simple bin consisting of id3demux
+         and typefind), take over rank from id3demux, remove typefind
+         code from id3demux. Makes all broken mp3s that I know of work,
+         and thereby fixes #152688.
+
+2005-01-27  Edward Hervey  <bilboed@bilboed.com>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/mad/gstmad.c: (gst_mad_src_event):
+       * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_event):
+         Allow seeks on audio pad, make mad forward those (#164826).
+       * gst/audioscale/gstaudioscale.c: (gst_audioscale_chain):
+         Set duration (#165335).
+
+2005-01-27  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_init),
+       (gst_asf_demux_commit_taglist), (gst_asf_demux_process_comment),
+       (gst_asf_demux_process_ext_content_desc),
+       (gst_asf_demux_change_state), (gst_asf_demux_add_audio_stream),
+       (gst_asf_demux_add_video_stream), (gst_asf_demux_setup_pad):
+       * gst/asfdemux/gstasfdemux.h:
+         Improve metadata display, e.g. if the metadata comes before the
+         streams are loaded (which is perfectly valid).
+
+2005-01-27  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * tools/gst-launch-ext-m.m:
+         Fix AVI/ASF pipelines (#165340).
+
+2005-01-26  Amaury Jacquot  <sxpert@esitcom.org>
+       * ext/cairo/gsttextoverlay.c: include  string.h and strings.h to fix
+       build failure on amd64
+
+2005-01-26  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * ext/mad/gstid3tag.c: (mad_id3_parse_latin1_string),
+       (mad_id3_parse_comment_frame), (gst_mad_id3_to_tag_list):
+         Check environment variables GST_ID3V2_TAG_ENCODING,
+         GST_ID3_TAG_ENCODING and GST_TAG_ENCODING for a colon-separated
+         list of character encodings to force interpretation of non-unicode
+         strings stored in an ID3v2 tag to a particular encoding. If none
+         is specified, try to use current locale's encoding, then fall back
+         to ISO-8859-1 (which will always succeed). (Resolves #149274)
+       * gst/tags/gstid3tag.c: (gst_tag_from_id3_tag),
+       (gst_tag_extract_id3v1_string), (gst_tag_list_new_from_id3v1):
+         Check environment variables GST_ID3V1_TAG_ENCODING,
+         GST_ID3_TAG_ENCODING and GST_TAG_ENCODING for a colon-separated
+         list of character encodings to use in case a string encountered
+         in an ID3v1 tag is not valid UTF-8 already. If no encoding is
+         specified, try to use the current locale's encoding, then fall
+         back to ISO-8859-1 (which will always succeed).
+
+2005-01-25  Benjamin Otte  <otte@gnome.org>
+
+       * ext/mad/gstmad.c: (gst_mad_check_caps_reset), (gst_mad_chain):
+         - on half framerate, compute the rate in advance so the comparisons
+           don't compare wrong values
+         - don't use mad_synth/frame_mute anymore, this mirrors mad_decoder
+           behaviour
+         - don't use mad_header_decode anymore, mad_frame_decode does that
+           automatically
+         - when getting rid of consumed bytes, reset the stream's skiplen
+         (fixes #163867)
+
+2005-01-26  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_class_init)
+         Use 1/2 a second for default max_discont, as PES streams from DVB
+         seem to have larger spacings in the SCR. 
+         Fix a typo.
+
+2005-01-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c: (group_commit):
+         Notify delayed stream-info availability.
+
+2005-01-26  Jan Schmidt  <thaytan@mad.scientist.com>
+       * ext/a52dec/gsta52dec.c: (gst_a52dec_push),
+       (gst_a52dec_handle_event), (gst_a52dec_chain):
+       Add some debug output. Check that a discont has a valid
+       time associated.
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event),
+       (gst_alsa_sink_loop):
+       Ignore TAG events. A little extra debug for broken timestamps.
+       * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_init), (dvdnavsrc_loop),
+       (dvdnavsrc_change_state):
+       Ensure we send a discont to engage the link before we send any
+       other events.
+       * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_init),
+       (dvdreadsrc_finalize), (_close), (_open), (_seek_title),
+       (_seek_chapter), (seek_sector), (dvdreadsrc_get),
+       (dvdreadsrc_uri_get_uri), (dvdreadsrc_uri_set_uri):
+       Handle URI of the form dvd://title[,chapter[,angle]]. Currently only
+       dvd://title works in totem because typefinding sends a seek that ends
+       up going back to chapter 1 regardless.
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/mpeg2dec/gstmpeg2dec.h:
+       Output correct timestamps and handle disconts.
+       * ext/ogg/gstoggdemux.c: (get_relative):
+       Small guard against a null dereference.
+       * ext/pango/gsttextoverlay.c: (gst_textoverlay_finalize),
+       (gst_textoverlay_set_property):
+       Free memory when done. Don't call gst_event_filler_get_duration on
+       EOS events. Use GST_LOG and GST_WARNING instead of g_message and
+       g_warning.
+       * ext/smoothwave/gstsmoothwave.c: (gst_smoothwave_init),
+       (draw_line), (gst_smoothwave_dispose), (gst_sw_sinklink),
+       (gst_sw_srclink), (gst_smoothwave_chain):
+       Draw solid lines, prettier colours.
+       * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_init):
+       Add a default palette that'll work for some movies.
+       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_init),
+       (gst_dvd_demux_handle_dvd_event), (gst_dvd_demux_send_discont),
+       (gst_dvd_demux_send_subbuffer), (gst_dvd_demux_reset):
+       * gst/mpegstream/gstdvddemux.h:
+       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_discont),
+       (gst_mpeg_demux_parse_syshead), (gst_mpeg_demux_parse_pes):
+       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_init),
+       (gst_mpeg_parse_handle_discont), (gst_mpeg_parse_parse_packhead):
+       * gst/mpegstream/gstmpegparse.h:
+       Use PTM/NAV events when for timestamp adjustment when connected to 
+       dvdnavsrc. Don't use many discont events where one suffices.
+       * gst/playback/gstplaybasebin.c: (group_destroy),
+       (gen_preroll_element), (gst_play_base_bin_add_element):
+       * gst/playback/gstplaybasebin.h:
+       Make sure we remove subtitles from the same bin we put them in.
+       * gst/subparse/gstsubparse.c: (convert_encoding), (parse_subrip),
+       (gst_subparse_buffer_format_autodetect),
+       (gst_subparse_change_state):
+       Fix some memleaks and invalid accesses.
+       * gst/typefind/gsttypefindfunctions.c: (ogganx_type_find),
+       (oggskel_type_find), (cmml_type_find), (plugin_init):
+       Some typefind functions for Annodex v3.0 files
+       * gst/wavparse/gstwavparse.h:
+       GstRiffReadClass is the correct parent class.
+
+2005-01-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-media.c:
+       (gst_riff_create_video_caps_with_data):
+         Add extradata to huffyuv (fixes #165013).
+       * gst-libs/gst/riff/riff-read.c:
+       (gst_riff_read_strf_vids_with_data):
+         Fix extradata extraction if it is in the chunk size.
+
+2005-01-25  Edward Hervey  <bilboed@bilboed.com>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/effectv/gstquark.c: (gst_quarktv_class_init),
+       (gst_quarktv_change_state), (gst_quarktv_dispose):
+         Memory free'ing location fix (#164708).
+
+2005-01-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c: (group_commit),
+       (gen_preroll_element), (probe_triggered), (gen_source_element),
+       (setup_source), (gst_play_base_bin_change_state),
+       (gst_play_base_bin_add_element):
+         Don't block for streams.
+       * gst/playback/gststreaminfo.c: (stream_info_change_state),
+       (gst_stream_info_set_mute):
+         Use gst_pad_set_active_recursive.
+
+2005-01-25  Andy Wingo  <wingo@pobox.com>
+
+       * sys/v4l/gstv4lelement.c (gst_v4l_iface_supported): Fix compile
+       for #ifndef HAVE_XVIDEO.
+
+2005-01-24  Jeffrey C. Ollie
+
+       reviewed by: Maciej Katafiasz  <mathrick@freedesktop.org>
+
+       * ext/gsm/gstgsmdec.c: (gst_gsmdec_init), (gst_gsmdec_chain):
+       * ext/gsm/gstgsmdec.h:
+       * ext/gsm/gstgsmenc.c: (gst_gsmenc_init), (gst_gsmenc_chain):
+       * ext/gsm/gstgsmenc.h:
+       Fix rate to 8kHz as per spec, removes obscure errors when no rate
+       was given by property. Add proper buffer timestamps and offsets.
+
+2005-01-24  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-media.c:
+       (gst_riff_create_audio_caps_with_data):
+         Audio can be <8000Hz.
+
+2005-01-22  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_change_state):
+         Explicit state change to workaround refcount bugs.
+
+2005-01-22  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavimux.c: (gst_avimux_write_tag),
+       (gst_avimux_riff_get_avi_header):
+         Fix...
+
+2005-01-19  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_element_data),
+       (gst_riff_read_element_data):
+       * gst-libs/gst/riff/riff-read.h:
+         Add _peek version (req'ed in CDXA).
+       * gst/cdxaparse/gstcdxaparse.c: (gst_cdxaparse_init),
+       (gst_cdxaparse_loop):
+         Fix parsing in playbin.
+       * gst/playback/gstdecodebin.c: (close_pad_link):
+         Ignore current_ pads, they cause major annoyance.
+
+2005-01-19  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
+         Safety guard.
+
+2005-01-19  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavimux.c: (gst_avimux_write_tag):
+         Fix padding...
+
+2005-01-19  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/matroska/ebml-read.c: (gst_ebml_read_buffer):
+         Allow for 0-sized buffers. Fixes length query problems in
+         starwars.mkv from the testsuite.
+
+2005-01-19  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * gst/videobox/gstvideobox.c: (gst_video_box_copy_plane_i420),
+       (gst_video_box_i420), (gst_video_box_chain):
+         Fix row strides for I420 (fixes #163159)
+         
+2005-01-19  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead):
+         MPEG2 has a useful rate property, so we can actually use that.
+         For MPEG-1, continue using the bytes/time properties.
+
+2005-01-19  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-media.c:
+       (gst_riff_create_video_caps_with_data),
+       (gst_riff_create_video_template_caps):
+         Add intel-h263.
+
+2005-01-19  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/mad/gstmad.c: (gst_mad_check_caps_reset), (gst_mad_chain):
+         Fail if caps negotiation fails. Should fix #162184, and should
+         definately be in there regardless of it fixing the actual bug.
+       * gst/avi/gstavimux.c: (gst_avimux_get_type), (gst_avimux_init),
+       (gst_avimux_write_tag), (gst_avimux_riff_get_avi_header),
+       (gst_avimux_riff_get_avix_header),
+       (gst_avimux_riff_get_video_header),
+       (gst_avimux_riff_get_audio_header), (gst_avimux_write_index),
+       (gst_avimux_start_file), (gst_avimux_handle_event),
+       (gst_avimux_change_state):
+       * gst/avi/gstavimux.h:
+         Refactor structure writing to use GST_WRITE_UINT macros, add
+         metadata writing support.
+
+2005-01-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gststreaminfo.c: (gst_stream_info_dispose):
+         Elements may already be destroyed when this function is called.
+
+2005-01-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
+       (gst_qtdemux_loop_header), (gst_qtdemux_handle_esds):
+         More memory leak fixes (#149162).
+
+2005-01-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
+       (gst_qtdemux_add_stream):
+         Fix two memleaks.
+
+2005-01-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/faad/gstfaad.c: (gst_faad_srcgetcaps):
+         Argh...
+
+2005-01-17  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/faad/gstfaad.c: (gst_faad_srcgetcaps):
+         Fix off-by-one bug. Fixes warnings during playback of sincity.mp4
+         when fixating to six channels in Totem.
+
+2005-01-17  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * ext/dvdread/dvdreadsrc.c: (get_next_cell_for):
+         Fix compile warnings on Solaris 10 buildbot
+
+2005-01-17  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * ext/dvdread/dvdreadsrc.c: (_read):
+         Don't read beyond the last cell in a chapter (fixes 
+         invalid memory access)
+
+2005-01-17  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * ext/dvdread/stream_labels.c:
+       (dvdreadsrc_get_audio_stream_labels):
+         Use NULL for an empty GList instead of g_list_alloc(); fix 
+         memory leaks; s/LCPM/LPCM/; use g_strdup_printf() instead 
+         of GString (easier to bulk free later)
+
+2005-01-17  Gergely Nagy  <algernon@bonehunter.rulez.org>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+       (gst_ffmpeg_pixfmt_to_caps):
+         Fix BGRA32 caps (#164209).
+
+2005-01-17  Gergely Nagy  <algernon@bonehunter.rulez.org>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+       (gst_ffmpeg_caps_to_pixfmt):
+         alpha_mask can be RGBA/ABGR. Fixes #164265.
+
+2005-01-17  Francis Labonte  <francis_labonte@hotmail.com>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/mpeg2dec/gstmpeg2dec.c: (crop_buffer),
+       (gst_mpeg2dec_alloc_buffer):
+       * ext/mpeg2dec/gstmpeg2dec.h:
+         Crop if decoding size is not the actual image size (#163676).
+
+2005-01-17  Steve Baker  <steve@stevebaker.org>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/typefind/gsttypefindfunctions.c: (aiff_type_find),
+       (svx_type_find), (sds_type_find), (ircam_type_find), (plugin_init):
+         Add libsndfile typefind functions (#163309).
+
+2005-01-17  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * tools/gst-launch-ext-m.m:
+         Add .aac, fix .m1v/.m2v (#163891).
+
+2005-01-17  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsaclock.c: (gst_alsa_clock_wait):
+         Sanity check, don't wait endlessly since the clock might not
+         actually run at this point (which is a deadlock). Fixes #164069.
+
+2005-01-16  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c: (probe_triggered):
+         Of course, only pause if group is done...
+
+2005-01-16  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c: (probe_triggered):
+         Thread safety.
+
+2005-01-16  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * ext/swfdec/gstswfdec.c: (gst_swfdec_change_state):
+         Don't return state change success when the parent
+         failed.
+
+2005-01-16  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavimux.c: (gst_avimux_handle_event):
+         Free events (fix memleak in #162905).
+
+2005-01-15  Gergely Nagy  <algernon@bonehunter.rulez.org>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+       (gst_ffmpeg_caps_to_pixfmt):
+         Fix for depth = 15. Fixes #161675.
+
+2005-01-14  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_getcaps):
+         Set FPS correctly, even for webcams and the like.
+       * sys/v4l/v4l_calls.c: (gst_v4l_set_chan_norm):
+         Don error on setting while capturing.
+
+2005-01-14  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
+
+       * ext/dv/gstdvdec.c:
+       * gst/subparse/gstsubparse.c: (parse_mdvdsub):
+       * gst/y4m/gsty4mencode.c: (gst_y4mencode_sinkconnect):
+         I'm a bad boy. using /1001. to force C to do float division
+         and not integer division (as it did in my last commit)
+         Thanks to David I. Lehn for pointing this mistake.
+
+2005-01-14  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/v4l/gstv4lelement.c: (gst_v4l_iface_supported):
+         Revert Johan´s 1.35->1.36 since it breaks compat.
+
+2005-01-14  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
+
+       * ext/dv/gstdvdec.c:
+       * ext/libfame/gstlibfame.c:
+       * gst/subparse/gstsubparse.c: (parse_mdvdsub):
+       * gst/y4m/gsty4mencode.c: (gst_y4mencode_sinkconnect):
+          replace framerate aproximations by their real value
+          (24000/1001, 30000/1001, 60000/1001)
+          Finish fixing bug #164049
+
+2005-01-13  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/ogg/gstoggmux.c:
+         eos/bos debugging
+       * gst/tcp/gstmultifdsink.c:
+       * gst/tcp/gstmultifdsink.h:
+       * gst/tcp/gsttcp.c:
+       * gst/tcp/gsttcp.h:
+       * gst/tcp/gsttcpclientsink.c:
+       * gst/tcp/gsttcpclientsrc.c:
+       * gst/tcp/gsttcpserversink.c:
+       * gst/tcp/gsttcpserversrc.c:
+         improve reusability of elements after state changes and errors
+         make multifdsink throw away streamheaders when receiving new ones
+
+2005-01-13  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_rates_probe):
+         Fix for if items are already in list...
+
+2005-01-12  Benjamin Otte  <otte@gnome.org>
+
+       * gst/adder/gstadder.c: (gst_adder_loop):
+         fix adder a bit so it doesn't screw up with events as much anymore
+
+2005-01-12  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_link),
+       (pixbufscale_scale), (gst_pixbufscale_chain):
+       * ext/gdk_pixbuf/pixbufscale.h:
+         Incorporate changes from Tim-Philipp Mueller <t.i.m@orange.net>
+         to ensure rowstrides are calculated the same way as 
+         ffmpegcolorspace
+         Use gst_buffer_stamp instead of copying TIMESTAMP manually, so
+         that we pick up duration and offset also.
+
+2005-01-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavimux.c: (gst_avimux_class_init),
+       (gst_avimux_pad_unlink), (gst_avimux_release_pad):
+         Reusability fixes.
+
+2005-01-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_update),
+       (gst_alsa_mixer_get_volume), (gst_alsa_mixer_set_volume),
+       (gst_alsa_mixer_set_mute), (gst_alsa_mixer_set_record),
+       (gst_alsa_mixer_set_option), (gst_alsa_mixer_get_option):
+         Update flags when requested.
+
+2005-01-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_rates_probe):
+         Fix dmix.
+
+2005-01-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
+       (gst_play_base_bin_init), (gst_play_base_bin_dispose),
+       (probe_triggered), (new_decoded_pad), (gen_source_element),
+       (gst_play_base_bin_set_property), (gst_play_base_bin_get_property):
+       * gst/playback/gstplaybasebin.h:
+       * gst/playback/gstplaybin.c: (gst_play_bin_class_init),
+       (gst_play_bin_init), (group_switch), (remove_sinks), (setup_sinks),
+       (gst_play_bin_change_state):
+         Implement group-switch signal for use in apps to clear metadata
+         cache, clean up subtitle, add suburi property instead of # hack,
+         some error-out fixes.
+
+2005-01-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
+         Debug.
+       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_grab_frame):
+         If we got a state change in the _get handler, don't return success.
+
+2005-01-10  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
+
+       * ext/jpeg/gstjpegdec.c: (gst_jpegdec_my_output_message),
+       (gst_jpegdec_my_emit_message), (gst_jpegdec_init):
+         Make jpegdec quiet on MJPEG decoding
+       * gst/asfdemux/README:
+         Fix mimetypes for MJPEG and H263
+
+2005-01-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/theora/theoradec.c: (theora_dec_chain):
+         Fix broken code generation by gcc by swapping arguments.
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_src_query):
+         Fix \n in debug.
+
+2005-01-10  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
+
+       * TODO:
+         delete this file, it is by far outdated
+       * ext/alsa/gstalsa.1: remove
+       * ext/alsa/gstalsa.c: (add_rates), (add_channels), (gst_alsa_caps),
+       (gst_alsa_check_sample_rates), (gst_alsa_rates_probe),
+       (gst_alsa_get_caps):
+         Add HW probing for supported sample rates. Fixes #161704
+
+2005-01-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/audioscale/gstaudioscale.c: (gst_audioscale_chain):
+         Don't crash, biatch! :).
+
+2005-01-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/musepack/gstmusepackreader.cpp:
+       * gst/apetag/apedemux.c: (gst_ape_demux_stream_data):
+         Some work on tags - still doesn't work in playbin...
+       * gst/audioscale/gstaudioscale.c: (gst_audioscale_chain):
+         Handle events...
+
+2005-01-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/qtdemux/qtdemux.c: (qtdemux_parse_tree):
+         Also shove tags on kid pads.
+
+2005-01-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_use_event):
+         Don't bail on unknown events.
+       * gst/audioscale/gstaudioscale.c: (gst_audioscale_chain):
+         Don't crash on events before negotiation.
+       * gst/avi/gstavidemux.c: (gst_avi_demux_add_stream):
+         Send tags on pads, too.
+       * gst/playback/gststreamselector.c:
+       (gst_stream_selector_request_new_pad):
+         Forward events on first pad if no input was selected yet.
+
+2005-01-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c: (setup_substreams):
+         Don't disable streamtype if the stream doesn't exist, since
+         then playing a video after audio will disable both and nothing
+         will happen. Fixes the testsuite.
+
+2005-01-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/v4l/gstv4lxoverlay.c: (gst_v4l_xoverlay_interface_init),
+       (gst_v4l_xoverlay_set_xwindow_id):
+       * sys/v4l2/gstv4l2xoverlay.c: (gst_v4l2_xoverlay_interface_init),
+       (gst_v4l2_xoverlay_set_xwindow_id):
+         Add debug categories, fix overlay disabling.
+
+2005-01-10  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_class_init), (gst_alsa_get_caps):
+       * ext/alsa/gstalsa.h:
+         Add HW probing for period_count/size and buffer_size MIX/MAX
+         Adjust default/user defined value if out of bounds
+         Should fix bug #162024
+
+2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_handle_sink_event):
+         Fix warning (#161191).
+
+2005-01-09  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
+
+       * ext/dvdread/stream_labels.c:
+       (dvdreadsrc_get_audio_stream_labels):
+         Fix warning (init the good variable in switch default)
+
+2005-01-09  Koop Mast  <kwm@rainbow-runner.nl>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/tta/gstttaparse.c: (gst_tta_src_event):
+         Fix gcc-2.95 compile (#163485).
+
+2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * configure.ac:
+       * ext/flac/gstflacenc.c: (gst_flacenc_init),
+       (gst_flacenc_seek_callback), (gst_flacenc_write_callback),
+       (gst_flacenc_tell_callback), (gst_flacenc_chain),
+       (gst_flacenc_change_state):
+       * ext/flac/gstflacenc.h:
+         Update for API change in flac-1.1.1. Update requirement in
+         configure.ac. Fixes #162974.
+
+2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c: (group_destroy):
+         Remove hack to get rid of assert and get rid of unlinked
+         signals properly.
+
+2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c: (setup_source):
+         Set source to NULL so that resources are free'ed. Fixes issues
+         with playback of CDDA and similar device-accessing things.
+
+2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * testsuite/embed/Makefile.am:
+         test->noinst, fix make test in buildbot.
+
+2005-01-09  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
+
+       * ext/dvdread/stream_labels.c: new file
+       * ext/dvdread/stream_labels.h: new file
+       * ext/dvdread/Makefile.am:
+       * ext/dvdread/dvdreadsrc.c: (_seek_title):
+         Extract audio stream label from DVD IFO files.
+         It only dump them on the console for now, still have to
+         make playbin aware of them.
+
+2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c: (setup_source):
+         Fix hanging subs.
+
+2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_init),
+       (gen_preroll_element), (remove_groups), (setup_subtitle),
+       (gen_source_element), (setup_source):
+       * gst/playback/gstplaybasebin.h:
+         Multiple .sub files is just a stupid idea... Fix some threading
+         mistakes. Interestingly, external .sub files cause playbin to
+         hang, I don't know why... Parsing fixes contributed by François
+         Kooman <fkooman@tuxed.net>.
+
+2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * testsuite/embed/Makefile.am:
+         Fix buildbot.
+
+2005-01-09  Gergely Nagy  <algernon@bonehunter.rulez.org>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/libpng/gstpngenc.c: (gst_pngenc_class_init),
+       (gst_pngenc_init), (gst_pngenc_chain), (gst_pngenc_get_property),
+       (gst_pngenc_set_property):
+       * ext/libpng/gstpngenc.h:
+         Add compression level property (#163323).
+
+2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * configure.ac:
+       * examples/capsfilter/capsfilter1.c: (main):
+       * examples/seeking/spider_seek.c: (make_spider_pipeline):
+       * ext/dvdread/Makefile.am:
+       * ext/dvdread/demo-play:
+       * ext/dvdread/demo-play.c:
+       * gconf/gstreamer.schemas.in:
+       * gst-libs/gst/gconf/gconf.c:
+       * sys/v4l/TODO:
+       * testsuite/Makefile.am:
+       * testsuite/embed/Makefile.am:
+       * testsuite/embed/embed.c: (cb_expose), (main):
+         Remove all references to xvideosink, fix examples (#140845).
+       * gst/playback/gstplaybasebin.c: (group_destroy):
+         Apparently, disposal does not unlink - so do explicitely.
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
+         Add debug.
+
+2005-01-09  Maciej Katafiasz <mathrick@freedesktop.org>
+
+       * README: fix PKG_CONFIG_PATH instructions, what was there
+       previously was breaking default search path, not nice. 
+       Fixes #163358
+
+2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/audioscale/gstaudioscale.c: (gst_audioscale_init),
+       (gst_audioscale_chain):
+         %#^@^#@^@#^#@^#@^@#^@#^@#^@#^#@^#@^#@^@#^#@ fix seeking
+         when resampling - how the ^@$^!@^! is this possible?!?
+
+2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_change_state):
+         Reset variables on READY.
+       * gst/matroska/matroska-mux.c: (gst_matroska_mux_request_new_pad),
+       (gst_matroska_mux_loop):
+         Require data before writing header.
+
+2005-01-09  Francis Labonte  <francis_labonte@hotmail.com>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/mad/gstmad.c: (gst_mad_chain):
+         Don't call mad_stream_sync() directly after recovering sync.
+         Fixes #151661.
+
+2005-01-09  Martin Eikermann  <meiker@upb.de>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/snapshot/gstsnapshot.c: (gst_snapshot_class_init),
+       (snapshot_handler), (gst_snapshot_sinkconnect),
+       (gst_snapshot_chain):
+         Allocate resources when required, fix recursive signal emission
+         and fix caps. Fixes #161667.
+
+2005-01-09  Gergely Nagy  <algernon@bonehunter.rulez.org>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/libpng/gstpngdec.c: (gst_pngdec_src_getcaps),
+       (gst_pngdec_chain):
+         Handle only 8-bppc (bits-per-pixel-component) images, better
+         error handling and correct strides. Fixes #163177.
+       * ext/libpng/gstpngenc.c: (gst_pngenc_sinklink),
+       (gst_pngenc_chain):
+         Better error handling. Fixes #163348.
+
+2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_get_type),
+       (dvdnavsrc_uri_get_type), (dvdnavsrc_uri_get_protocols),
+       (dvdnavsrc_uri_get_uri), (dvdnavsrc_uri_set_uri),
+       (dvdnavsrc_uri_handler_init):
+         Add DVD-nav URI (dvdnav://) for Totem testing purposes.
+       * gst/playback/gstplaybasebin.c: (gen_source_element):
+         Add MMS to streaming URIs.
+
+2005-01-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_navigation_send_event):
+       * sys/xvimage/xvimagesink.c:
+       (gst_xvimagesink_navigation_send_event):
+         Check for pad availability before sending event.
+
+2005-01-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-plugins.spec.in:
+         Add subparse.
+
+2005-01-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * configure.ac:
+         Since we use functions from CVS, up requirement.
+
+2005-01-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/Makefile.am:
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
+       (group_destroy), (group_commit), (group_is_muted),
+       (gen_preroll_element), (add_stream), (unknown_type),
+       (probe_triggered), (preroll_unlinked), (mute_stream),
+       (silence_stream), (new_decoded_pad), (setup_substreams),
+       (setup_source), (get_active_source), (mute_group_type),
+       (muted_group_change_state), (set_active_source),
+       (gst_play_base_bin_set_property), (gst_play_base_bin_get_property),
+       (play_base_eos), (gst_play_base_bin_change_state):
+       * gst/playback/gstplaybasebin.h:
+       * gst/playback/gstplaybin.c: (add_sink), (setup_sinks):
+       * gst/playback/gststreaminfo.c: (gst_stream_info_class_init),
+       (gst_stream_info_dispose), (stream_info_mute_pad),
+       (stream_info_change_state), (gst_stream_info_set_mute):
+       * gst/playback/gststreamselector.c: (gst_stream_selector_get_type),
+       (gst_stream_selector_base_init), (gst_stream_selector_class_init),
+       (gst_stream_selector_init), (gst_stream_selector_dispose),
+       (gst_stream_selector_get_linked_pad),
+       (gst_stream_selector_get_caps), (gst_stream_selector_link),
+       (gst_stream_selector_get_linked_pads),
+       (gst_stream_selector_request_new_pad), (gst_stream_selector_chain):
+       * gst/playback/gststreamselector.h:
+         Adding stream selection support plus required properties for
+         applications to use this. Fully fixes #100931.
+
+2005-01-08  Benjamin Otte  <otte@gnome.org>
+
+       * gst/games/gstpuzzle.c: (nav_event_handler):
+         - handle nav events differently: forward every event no matter if it
+           was handled or not.
+         - translate events
+         You can now cheat by using navigationtest ! puzzle and moving the
+         mouse close to the edge of a tile. ;)
+
+2005-01-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * configure.ac:
+       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_new):
+       * ext/ogg/gstogmparse.c: (gst_ogm_text_parse_get_type),
+       (gst_ogm_text_parse_base_init), (gst_ogm_text_parse_init),
+       (gst_ogm_parse_get_sink_querytypes), (gst_ogm_parse_sink_convert),
+       (gst_ogm_parse_sink_query), (gst_ogm_parse_chain),
+       (gst_ogm_parse_plugin_init):
+       * ext/pango/gsttextoverlay.c: (gst_textoverlay_linkedpads),
+       (gst_textoverlay_link), (gst_textoverlay_getcaps),
+       (gst_textoverlay_event), (gst_textoverlay_video_chain),
+       (gst_textoverlay_loop), (gst_textoverlay_init), (plugin_init):
+       * ext/pango/gsttextoverlay.h:
+       * gst/matroska/matroska-demux.c: (gst_matroska_demux_add_stream),
+       (gst_matroska_demux_handle_seek_event),
+       (gst_matroska_demux_sync_streams),
+       (gst_matroska_demux_parse_blockgroup),
+       (gst_matroska_demux_subtitle_caps),
+       (gst_matroska_demux_plugin_init):
+       * gst/matroska/matroska-ids.h:
+       * gst/playback/gstdecodebin.c: (close_pad_link):
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_init),
+       (gen_preroll_element), (remove_groups), (add_stream),
+       (new_decoded_pad), (setup_subtitles), (gen_source_element),
+       (setup_source):
+       * gst/playback/gstplaybasebin.h:
+       * gst/playback/gstplaybin.c: (gen_text_element), (setup_sinks):
+       * gst/subparse/Makefile.am:
+       * gst/subparse/gstsubparse.c: (gst_subparse_get_type),
+       (gst_subparse_base_init), (gst_subparse_class_init),
+       (gst_subparse_init), (gst_subparse_formats),
+       (gst_subparse_eventmask), (gst_subparse_event),
+       (gst_subparse_handle_event), (convert_encoding), (get_next_line),
+       (parse_mdvdsub), (parse_mdvdsub_init), (parse_subrip),
+       (parse_subrip_deinit), (parse_subrip_init), (parse_mpsub),
+       (parse_mpsub_deinit), (parse_mpsub_init),
+       (gst_subparse_buffer_format_autodetect),
+       (gst_subparse_format_autodetect), (gst_subparse_loop),
+       (gst_subparse_change_state), (gst_subparse_type_find),
+       (plugin_init):
+       * gst/subparse/gstsubparse.h:
+       * gst/typefind/gsttypefindfunctions.c: (ogmtext_type_find),
+       (plugin_init):
+         Add subtitle support, .sub parser (supports SRT and MPsub),
+         OGM text support, Matroska UTF-8 text support, deadlock fixes
+         all over the place, subtitle awareness in decodebin/playbin
+         and some fixes to textoverlay to handle subtitles in a stream
+         correctly. Fixes #100931.
+
+2005-01-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_src_query):
+         Check for pad availability before doing a query on it.
+
+2005-01-08  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
+
+       * ext/dv/gstdvdec.c:
+         really fix bpp24/32 dvdec caps (classic rgba indeed)
+       * gst/asfdemux/gstasfdemux.c:
+       (gst_asf_demux_process_ext_content_desc):
+         don't send text tags if they are empty (bis repetita)
+
+2005-01-08  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
+
+       * ext/dv/gstdvdec.c:
+        remove unneeded comment from dvdec
+         (related to DV 4CC codes in AVI files)
+         moved them in gstreamer/docs/random/mimetypes
+       * gst/asfdemux/gstasfdemux.c:
+       (gst_asf_demux_process_ext_content_desc):
+        don't send text tags if they are empty
+        fix mem leak on error path
+       * gst/ffmpegcolorspace/avcodec.h:
+       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+       (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_caps_to_pixfmt),
+       (gst_ffmpegcsp_avpicture_fill):
+       * gst/ffmpegcolorspace/imgconvert.c: (img_get_alpha_info):
+       * gst/ffmpegcolorspace/imgconvert_template.h:
+        adds BGR32 and BGRA32 to ffmpegcolorspace
+         (still bad colors, fixing it on next commit)
+         helps with dvdec outputing BGR32
+
+2005-01-08  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
+
+       * ext/dv/gstdvdec.c:
+        Fix audio caps i just broke (missing ',')
+       * gst/matroska/matroska-mux.c: (gst_matroska_mux_get_type),
+       (gst_matroska_mux_reset):
+        Fix typo + add FIXME about old "x-gst-metadata" crap
+
+2005-01-07  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
+
+       * ext/dv/demo-play.c: (main):
+        xvideosink -> xvimagesink
+       * ext/dv/gstdvdec.c:
+        change rgb 32/32 caps to 24/32 (no alpha)
+        change nb of channels to be a list (2 or 4, not 2)
+        change sample rate to be a list (32, 44.1, 48 kHz) not a range
+       * gst/asfdemux/gstasfdemux.c:
+       (gst_asf_demux_process_ext_content_desc):
+        Add 'date/year' to extracted metadata list
+
+2005-01-07  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_fixate):
+         The return value of fixate_to does not imply that the requested
+         value was set, so don't assume.
+
+2005-01-07  Gergely Nagy  <algernon@bonehunter.rulez.org>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/libpng/gstpngdec.c:
+       * ext/libpng/gstpngenc.c: (gst_pngenc_base_init),
+       (gst_pngenc_sinklink), (gst_pngenc_init), (gst_pngenc_chain):
+       * ext/libpng/gstpngenc.h:
+         Alpha support (encoder; #163161), mime fixage.
+
+2005-01-07  Sebastien Cote  <sc5@hermes.usherb.ca>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/faac/gstfaac.c: (gst_faac_outputformat_get_type),
+       (gst_faac_class_init), (gst_faac_init), (gst_faac_srcconnect),
+       (gst_faac_set_property), (gst_faac_get_property):
+       * ext/faac/gstfaac.h:
+         Allow for ADTS output (#153434).
+
+2005-01-07  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/v4l2/gstv4l2src.c: (gst_v4l2src_getcaps):
+         Fix against template (#150576).
+
+2005-01-06  Benjamin Otte  <otte@gnome.org>
+
+       * gst/games/gstpuzzle.c: (draw_puzzle):
+         don't draw a puzzle if either width or height of tiles would be 0.
+
+2005-01-06  Benjamin Otte  <otte@gnome.org>
+
+       * gst/games/gstpuzzle.c: (gst_puzzle_get_type),
+       (gst_puzzle_class_init), (gst_puzzle_finalize):
+         no memleaks, please
+       (gst_puzzle_create), (gst_puzzle_init),
+       (gst_puzzle_set_property), (gst_puzzle_setup):
+         change initialization code around so we don't reshuffle on resize
+       (draw_puzzle):
+         fix another stupid typo
+
+2005-01-06  Benjamin Otte  <otte@gnome.org>
+
+       * gst/games/gstvideoimage.c: (copy_hline_YUY2):
+         fix stupid typo that borked copying on YUY2
+
+2005-01-06  Benjamin Otte  <otte@gnome.org>
+
+       * gst/games/gstpuzzle.c: (draw_puzzle):
+         fix edges when image sizes aren't multiples of tile sizes
+
+2005-01-06  Benjamin Otte  <otte@gnome.org>
+
+       * gst/games/gstpuzzle.c: (gst_puzzle_base_init):
+         make RGB endianness work correctly
+       (gst_puzzle_show), (gst_puzzle_swap), (gst_puzzle_move):
+         refactor and fix race with initial shuffling
+       (nav_event_handler):
+         allow using the mouse to puzzle
+       (draw_puzzle):
+         insist on tiles having width and height as multiples of 4 to get
+         clean YUV image handling
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
+       (gst_xvimagesink_handle_xevents), (gst_xvimagesink_buffer_alloc):
+         s/DEBUG/LOG/ for common messages
+       (gst_xvimagesink_navigation_send_event):
+         fix mouse event translation to not include screen PAR
+       * sys/ximage/ximagesink.c: (gst_ximagesink_navigation_send_event):
+         fix mouse event translation to actually work
+
+2005-01-06  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
+
+       * gst/asfdemux/gstasfdemux.c:
+       (gst_asf_demux_process_ext_content_desc):
+        Extract TrackNumber metadata + clean up code
+       * gst/games/gstvideoimage.c: (gst_video_image_draw_rectangle):
+        Hope this is the good fix (var used unitialised)
+
+2005-01-06  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/faad/gstfaad.c: (gst_faad_chain):
+         Only increment timestamp if it's valid. Fixes raw AAC streams.
+
+2005-01-06  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * configure.ac:
+       * gst/games/Makefile.am:
+       * gst/games/gstpuzzle.c:
+         add a puzzle game with...
+       * gst/games/gstvideoimage.c:
+       * gst/games/gstvideoimage.h:
+         ... full colorspace support (that includes YUV9 and RGB16)) stolen
+         from videotestsrc and made into something that would be a nice
+         library for a lot of other plugins.
+
+2005-01-06  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
+
+       * configure.ac:
+        don't compile faad plugin if a RC of 2.0 is found
+        Fixes #155346 (and FC1 buildbot)
+       * gst/asfdemux/gstasfdemux.c:
+       (gst_asf_demux_process_ext_content_desc):
+        try to make Solaris compiler happier
+
+2005-01-06  Paul Jack  <pjack@sfaf.org>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/snapshot/gstsnapshot.c: (gst_snapshot_class_init):
+         Fix segfault (#161667).
+
+2005-01-05  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_getcaps):
+         Fix framerate reporting.
+
+2005-01-05  Stephane LOEUILLET  <stephane.loeuillet@tiscali.fr>
+
+       * gst-libs/gst/riff/riff-ids.h:
+       * gst/wavenc/riff.h:
+        Add AMR (VBR and CBR) ids to riff.h audio codec list
+       * gst/asfdemux/gstasfdemux.c:
+       (gst_asf_demux_process_ext_content_desc),
+       (gst_asf_demux_process_object):
+         Retrieve more tags from ASF files (Genre, AlbumTitle, Artist)
+
+2005-01-05  Martin Eikermann  <meiker@upb.de>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_class_init),
+       (gst_dvd_demux_handle_discont):
+       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_class_init),
+       (gst_mpeg_demux_handle_discont):
+         Recreate pads on new-media (#160730).
+       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_new_pad):
+         Send discont even if manager changes timestamps (#161929).
+
+2005-01-05  Sebastien Cote  <sc5@hermes.usherb.ca>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/resample/resample.c: (gst_resample_sinc_ft_s16):
+         Fix invalid memory access (#159211).
+
+2005-01-05  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * examples/gstplay/player.c: (main):
+         Don't iterate.
+       * examples/seeking/seek.c: (fixate), (make_playerbin_pipeline):
+         Add visualizations.
+       * ext/a52dec/gsta52dec.c: (gst_a52dec_push),
+       (gst_a52dec_handle_frame):
+         Set duration.
+       * ext/dvdnav/gst-dvd:
+         Add audioconvert. Fixes #161325.
+       * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_get):
+         Explicitely case to gint64. Possible valgrind error.
+       * gst-libs/gst/play/play.c: (caps_set), (setup_size),
+       (gst_play_tick_callback), (gst_play_change_state),
+       (gst_play_dispose), (gst_play_init), (gst_play_class_init),
+       (gst_play_set_location), (gst_play_get_location),
+       (gst_play_seek_to_time), (gst_play_set_data_src),
+       (gst_play_set_video_sink), (gst_play_set_audio_sink),
+       (gst_play_set_visualization), (gst_play_connect_visualization),
+       (gst_play_get_framerate), (gst_play_get_all_by_interface),
+       (gst_play_new):
+         Use playbin. Fixes #139749 and #147744.
+       * gst/apetag/apedemux.c: (gst_ape_demux_parse_tags):
+         Add genre tag.
+       * gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type),
+       (audioscale_get_type), (gst_audioscale_base_init),
+       (gst_audioscale_class_init), (gst_audioscale_expand_caps),
+       (gst_audioscale_getcaps), (gst_audioscale_fixate),
+       (gst_audioscale_link), (gst_audioscale_get_buffer),
+       (gst_audioscale_decrease_rate), (gst_audioscale_increase_rate),
+       (gst_audioscale_init), (gst_audioscale_dispose),
+       (gst_audioscale_chain), (gst_audioscale_set_property),
+       (gst_audioscale_get_property), (plugin_init):
+         Indent properly.
+       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_private):
+         Fix LPCM.
+       * gst/qtdemux/qtdemux.c: (qtdemux_parse_udta),
+       (qtdemux_tag_add_str), (qtdemux_tag_add_num),
+       (qtdemux_tag_add_gnre), (qtdemux_video_caps):
+         Add more metadata (fixes #162656).
+
+2005-01-05  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+         back to cvs
+
+=== release 0.8.7 ===
+
+2005-01-05  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+         releasing 0.8.7, "Hyperspace"
+
+2005-01-05  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       patch by: Tim-Philipp Müller  <t.i.m@zen.co.uk>
+
+       * gst/playback/gstplaybasebin.c:
+        Fix for #162924 - free caps after use, not before
+
+2005-01-04  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       patch by: Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c:
+       * gst/wavparse/gstwavparse.c:
+         Fix for #154773 - fixes playback of small .wav files
+
+2005-01-03  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       patch by: Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+       * gst/audioscale/gstaudioscale.c:
+         Fix for #162819 - make audioscale reusable
+         Fixes playback of more than one file with playbin/totem
+
+2004-12-29  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/ffmpegcolorspace/avcodec.h:
+       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+       * gst/ffmpegcolorspace/imgconvert.c:
+         clean up the mess that made me cry and avoid needless duplication
+
+2004-12-29  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/ffmpegcolorspace/imgconvert.c:
+         give some indication of why we're segfaulting
+
+2004-12-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * configure.ac:
+         Fix indentation, fix v4l2 plugin detection.
+       * ext/Makefile.am:
+         Fix libmms location (Maciej, use diff -u!).
+       * ext/alsa/gstalsa.c: (gst_alsa_init):
+         Initialize caps cache to NULL.
+       * gst/playback/gstplaybin.c: (gst_play_bin_change_state):
+         Only change state on audiosink if it exists.
+
+2004-12-28  Maciej Katafiasz  <mathrick@mathrick.org>
+
+       * gst/matroska/matroska-demux.c:
+       * gst/matroska/matroska-ids.h:
+       * gst/matroska/matroska-demux.h:
+       Fix Vorbis streams failing to decode in some files, where cluster_time
+       isn't 0, because then it doesn't send codec_priv before actual data.
+       Remove time-based test and replace it with marker set on beginning of
+       new stream
+
+2004-12-28  David Schleef  <ds@schleef.org>
+
+       Merge patch from Ronald fixing problems with streaming
+       text.
+       * ext/cairo/gstcairo.c: (plugin_init):
+       * ext/cairo/gsttextoverlay.c: (gst_textoverlay_render_text),
+       (gst_text_overlay_blit_1), (gst_text_overlay_blit_sub2x2),
+       (gst_textoverlay_video_chain), (gst_textoverlay_loop),
+       (gst_textoverlay_font_init), (gst_textoverlay_init),
+       (gst_textoverlay_set_property):
+       * ext/cairo/gsttextoverlay.h:
+
+2004-12-27  David Schleef  <ds@schleef.org>
+
+       * ext/cairo/gsttextoverlay.c: (gst_textoverlay_render_text),
+       (gst_text_overlay_blit_1), (gst_text_overlay_blit_sub2x2),
+       (gst_textoverlay_video_chain), (gst_textoverlay_loop),
+       (gst_textoverlay_font_init), (gst_textoverlay_init),
+       (gst_textoverlay_set_property): Improvements to actually
+       render text as white on black outline on video, including
+       font selection and horizontal/vertical alignment.  (Ronald's
+       christmas present)
+       * ext/cairo/gsttextoverlay.h:
+
+2004-12-26  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
+
+       * ext/ogg/gstogg.c:
+       * ext/ogg/gstogmparse.c:
+         fix ogm[audio/video]parse plugin registration
+         (riff won't load if bytestream is already loaded)
+
+2004-12-24  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/audioconvert/gstchannelmix.c:
+         fix for GLIB < 2.4
+
+2004-12-24  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * Makefile.am:
+       * configure.ac:
+         disable docs again until it actually passes make distcheck.
+
+2004-12-24  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/qtdemux/qtdemux.c: (qtdemux_type_get), (qtdemux_audio_caps):
+       * gst/typefind/gsttypefindfunctions.c: (q3gp_type_find),
+       (plugin_init):
+         Add 3GP (variables name Q3GP because they can't start with a
+         number). Add samr audio fourcc (used in .3gp files), decoder
+         is work in progress. Also do a GST_WARNING instead of ERROR
+         in case of unknown nodes, to decrease output.
+
+2004-12-24  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * Makefile.am:
+         really fix dist
+
+2004-12-23  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+       * ext/speex/gstspeexdec.h:
+       * ext/speex/gstspeexenc.h:
+         Fixes #158382.  Make speex plugin compatible with both 1.0 and 1.1.
+         Fix detection code in configure.ac
+
+2004-12-23  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/matroska/matroska-demux.c:
+       (gst_matroska_demux_parse_blockgroup):
+         Save position, so that queries give proper return values. Don't
+         know how this could ever have worked before...
+
+2004-12-23  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+         Put additional LAME check inside the conditional.  Fixes #152339
+
+2004-12-23  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index),
+       (gst_avi_demux_stream_scan):
+         Add some more debug. Fix logic error when setting movi offset
+         while reading index.
+
+2004-12-23  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index),
+       (gst_avi_demux_stream_scan), (gst_avi_demux_handle_seek),
+       (gst_avi_demux_process_next_entry):
+         Add some debugging. Better detection of broken indexes and the
+         accompanying index recovery. No infinite loops on state changes
+         when we're still in our loopfunction.
+
+2004-12-22  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * configure.ac:
+         Fix up.
+
+2004-12-22  Archana Shah  <archana.shah@wipro.com>
+
+       Reviewed by:  Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
+       * sys/sunaudio/gstsunmixer.c: (gst_sunaudiomixer_set_volume):
+         Normalizing the value before setting
+       (gst_sunaudiomixer_get_volume):
+         Normalizing the value after getting. Fixes bug# 161980
+
+2004-12-22  Christian Fredrik Kalager Schaller  <uraeus@gnome.org>
+
+       * Makefile.am: Make sure docs gets disted
+       * docs/Makefile.am: Make sure all needed files get disted
+       * gst-plugins.spec.in: latest updates
+
+2004-12-22  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_add_element):
+       Revert patch 1.38 as clock distribution over schedulers does
+       not work correcly in the core yet.
+
+2004-12-21  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
+
+       * sys/oss/README: remove this file, which predates my birth
+         (and which content is by far outdated)
+
+2004-12-20  Stefan Kost  <ensonic@users.sf.net>
+
+       * Makefile.am:
+       * configure.ac:
+       * docs/Makefile.am:
+       * docs/libs/Makefile.am:
+       * docs/libs/gst-plugins-libs-docs.sgml:
+       * docs/libs/gst-plugins-libs-sections.txt:
+       * docs/libs/tmpl/gstgconf.sgml:
+       * docs/upload.mak:
+       * docs/version.entities.in:
+         Added boilerplate gtk-doc files for plugin-libs documentation.
+
+2004-12-19  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
+
+       * gst/auparse/gstauparse.c: fix int and float audio caps
+
+2004-12-19  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/v4l/gstv4lelement.c: (gst_v4l_iface_supported):
+       * sys/v4l2/gstv4l2element.c: (gst_v4l2_iface_supported):
+         g_assert() can be a macro, don't use #ifdef inside it.
+
+2004-12-19  Edward Hervey  <bilboed@bilboed.com>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/videorate/gstvideorate.c: (gst_videorate_blank_data),
+       (gst_videorate_init), (gst_videorate_chain),
+       (gst_videorate_change_state):
+         Event handling (fixes #159986).
+
+2004-12-19  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-media.c:
+       (gst_riff_create_video_caps_with_data):
+         Add BLZ0 (Blizzard's version of DivX) fourcc.
+
+2004-12-18  David Schleef  <ds@schleef.org>
+
+       * gst/tta/gstttadec.c: (gst_tta_dec_link): And yet another
+       portability fix.
+
+2004-12-18  David Schleef  <ds@schleef.org>
+
+       * gst/tta/ttadec.h: Disable some header code that isn't used
+       and clearly isn't portable.
+
+2004-12-18  David Schleef  <ds@schleef.org>
+
+       * gst/ffmpegcolorspace/imgconvert.c: (get_pix_fmt_info),
+       (avcodec_get_chroma_sub_sample), (avcodec_get_pix_fmt_name),
+       (avcodec_get_pix_fmt), (avpicture_layout),
+       (avcodec_get_pix_fmt_loss), (avg_bits_per_pixel), (img_copy),
+       (get_convert_table_entry), (img_convert), (img_get_alpha_info):
+       Fix code to not use GCC extensions (and c99 extensions that
+       Forte does not like.)
+
+2004-12-19  Tim-Philipp Müller  <t.i.m@zen.co.uk>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/deinterlace/gstdeinterlace.c: (gst_deinterlace_link),
+       (gst_deinterlace_chain):
+         Rowstride fixes. Fixes #161039.
+       * gst/videocrop/gstvideocrop.c: (gst_video_crop_init),
+       (gst_video_crop_get_property), (gst_video_crop_add_to_struct_val),
+       (gst_video_crop_getcaps), (gst_video_crop_link),
+       (gst_video_crop_i420), (gst_video_crop_chain),
+       (gst_video_crop_change_state):
+         Rework of negotiation. Actually works now. Fixes #158650.
+
+2004-12-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/matroska/matroska-demux.c: (gst_matroska_ebmlnum_sint):
+         That was very stupid.
+
+2004-12-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/matroska/matroska-demux.c:
+       (gst_matroska_demux_parse_blockgroup):
+         Fix possible crasher.
+
+2004-12-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/matroska/matroska-demux.c: (gst_matroska_ebmlnum_uint),
+       (gst_matroska_ebmlnum_sint), (gst_matroska_demux_parse_blockgroup):
+         Lace sizes can be zero.
+
+2004-12-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/musepack/gstmusepackdec.cpp:
+         Fetch error return values. Fixes #161624.
+       * gst/apetag/apedemux.c: (gst_ape_demux_stream_data):
+         Really EOS.
+
+2004-12-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index):
+         Work for truncated (unfinished download etc.) files. Fixes #160514.
+
+2004-12-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
+         Fix for integer overflow. Makes #156001 not crash. Probably masks
+         the real bug.
+
+2004-12-17  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/ac3parse/gstac3parse.c: (plugin_init):
+         Parsers never have ranks. Fixes #159651.
+
+2004-12-17  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst/playback/gstdecodebin.c: (compare_ranks):
+         make sure the facotries are ordered the same every time even if they
+         have the same rank by using the name
+       * gst/playback/gstdecodebin.c: (find_compatibles):
+         make sure we don't add factories to the list twice
+
+2004-12-16  David Schleef  <ds@schleef.org>
+
+       * configure.ac: look for musepack headers as musepack/*.h
+       (fixes #159847)
+       * ext/musepack/gstmusepackdec.h: use <musepack/*.h>
+       * ext/musepack/gstmusepackreader.h: same
+
+2004-12-17  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-read.c:
+       (gst_riff_read_strf_auds_with_data):
+         Read extradata correctly (fixes #155879).
+
+2004-12-16  David Schleef  <ds@schleef.org>
+
+       * gst/audioscale/gstaudioscale.c: allow passthru of >2 channel
+       audio.  does _not_ attempt or allow conversion unless channels
+       is 1 or 2.
+
+2004-12-16  Christian Fredrik Kalager Schaller  <uraeus@gnome.org>
+
+       * tools/gst-launch-ext-m.m: fix mpeg and vob pipelines
+
+2004-12-16  David Schleef  <ds@schleef.org>
+
+       * gst/audioscale/gstaudioscale.c: the resample library only
+       handles 1 or 2 channels.  Change caps to compensate.
+
+2004-12-16  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/matroska/matroska-demux.c: (aac_rate_idx), (aac_profile_idx),
+       (gst_matroska_demux_audio_caps):
+         Some MPEG-AAC hacks, because else it doesn't work...
+
+2004-12-16  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-media.c:
+       (gst_riff_create_video_caps_with_data),
+       (gst_riff_create_video_template_caps):
+         Add h264.
+
+2004-12-16  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/audio/Makefile.am:
+         Try to fix buildbot.
+
+2004-12-16  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/tcp/gstmultifdsink.c:
+         Clean up and uniformize debugging.
+
+2004-12-16  Edward Hervey  <bilboed@bilboed.com>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_class_init),
+       (gst_dvd_demux_reset), (gst_dvd_demux_change_state):
+       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_reset),
+       (gst_mpeg_demux_change_state):
+         Reset on ready. Fixes 160276.
+
+2004-12-16  Sebastien Cote  <sc5@hermes.usherb.ca>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+       (gst_ffmpegcsp_pad_link):
+         Fix memleak (#154815).
+
+2004-12-16  James Bowes  <bowes@cs.dal.ca>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/musicbrainz/gsttrm.c: (gst_musicbrainz_class_init),
+       (gst_musicbrainz_init), (gst_musicbrainz_chain),
+       (gst_musicbrainz_set_property), (gst_musicbrainz_get_property):
+       * ext/musicbrainz/gsttrm.h:
+         Add support for using a proxy server when getting a trm id from
+         the MusicBrainz database (#149613).
+
+2004-12-16  Christophe Fergeau  <teuf@gnome.org>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstdecodebin.c: (new_pad), (close_link):
+       * gst/playback/gstplaybasebin.c: (new_decoded_pad):
+         Fix memleaks (#157233).
+
+2004-12-16  Sebastien Cote  <sc5@hermes.usherb.ca>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/resample/resample.c: (gst_resample_close):
+       * gst-libs/gst/resample/resample.h:
+       * gst/audioscale/gstaudioscale.c:
+         Fix memleak (#159215).
+
+2004-12-16  Toni Willberg  <toniw@iki.fi>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/oss/gstosselement.c: (gst_osselement_probe_caps):
+       * sys/oss/oss_probe.c: (main):
+         Check for mono/stereo support (similar to samplerate probing),
+         fixes #159433. Also add missing copyright header to oss_probe.c.
+
+2004-12-15  David Schleef  <ds@schleef.org>
+
+       * configure.ac: add audioresample and cairo plugins.  Remove
+       HAVE_MMX stuff, because it's not used.
+       * ext/Makefile.am: same
+       * ext/audioresample/Makefile.am: You are not ready for an
+       audio resampling element based on audioresample.
+       * ext/audioresample/gstaudioresample.c:
+       * ext/audioresample/gstaudioresample.h:
+       * ext/cairo/Makefile.am: You are not ready for overlay elements
+       based on cairo.  Don't look too closely, these elements kinda
+       suck right now.
+       * ext/cairo/gstcairo.c: new
+       * ext/cairo/gsttextoverlay.c: new
+       * ext/cairo/gsttextoverlay.h: new
+       * ext/cairo/gsttimeoverlay.c: new
+       * ext/cairo/gsttimeoverlay.h: new
+       * gst-libs/gst/media-info/media-info-priv.h: fix compile
+       problem with compilers that don't support variadic macros.
+
+2004-12-15  Balamurali Viswanathan  <balamurali.viswanathan@wipro.com>
+
+       Reviewed by:  David Schleef  <ds@schleef.org>
+
+       * sys/sunaudio/gstsunaudio.c: (plugin_init):  Apply patch from
+       Bala, registering sunaudiosrc (oops!), and cleaning up code a
+       bit.  Also ran indent-gst.
+       * sys/sunaudio/gstsunaudiosrc.c: (gst_sunaudiosrc_init),
+       (gst_sunaudiosrc_change_state), (gst_sunaudiosrc_get),
+       (gst_sunaudiosrc_setparams):
+
+2004-12-14  David Schleef  <ds@schleef.org>
+
+       * gst/festival/gstfestival.c: (gst_festival_chain): Set the
+       output rate to 16000.  Should fix #160235.
+
+2004-12-14  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * gst/typefind/gsttypefindfunctions.c: (mpeg2_sys_type_find):
+       Add typefinding for mpeg2 pes streams
+
+2004-12-13  David Schleef  <ds@schleef.org>
+
+       * configure.ac:  Applied patch from bug #143659, making default
+       sources and sinks OS-dependent (for Solaris), and added code
+       for OS/X.
+       * gconf/gstreamer.schemas.in: use OS-dependent sinks in gconf.
+
+2004-12-13  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
+
+       * gst-libs/gst/riff/riff-media.c:
+         forgot to add h2.64 to avidemux template caps
+
+2004-12-13  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
+
+       * gst/wavenc/riff.h:
+       * gst-libs/gst/riff/riff-media.c:
+       * gst-libs/gst/riff/riff-ids.h:
+       * gst/avi/gstavimux.c
+       add 4CC code for VideoSoft h264 in AVI (VSSH)
+         fixes bug #160655
+       remove s323 from riff, it's quicktime specific :(
+
+2004-12-13  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
+
+       * gst/asfdemux/README
+       * gst/wavenc/riff.h
+       * gst-libs/gst/riff/riff-ids.h
+       * gst-libs/gst/riff/riff-media.c
+       * gst/qtdemux/qtdemux.c:
+         add new 4CC codes for h263 related codecs
+         fixes partially bug #155163
+
+2004-12-12  Christian Fredrik Kalager Schaller  <christian at fluendo dot com>
+
+       * configure.ac: Update polyaudio requirement to 0.7
+       * ext/polyp/polypsink.c: (create_stream): add patch from iain (158258)
+
+2004-12-11  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * gst/interleave/deinterleave.c:
+       fix my name's spelling! :)
+
+2004-12-11  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
+
+       * AUTHORS ChangeLog
+       * gst/auparse/gstauparse.c
+       * gst/interleave/deinterleave.c
+       * gst/law/:
+               alaw-decode.c alaw-encode.c
+               mulaw-decode.c mulaw-encode.c
+       * gst/oneton/gstoneton.c
+       * sys/osxaudio/:
+               gstosxaudioelement.c gstosxaudiosink.c gstosxaudiosrc.c
+       * sys/osxvideo/:
+               cocoawindow.h cocoawindow.m
+               osxvideosink.h osxvideosink.m
+
+       put the same mail address for Zaheer Abbas Merali everywhere
+
+2004-12-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_loop):
+         Align by packetsize, and assert that we a packet available before
+         playing. The first makes webstreams work (they often include
+         trailing padding data in a packet), the second allows pausing a
+         ASF stream in totem without getting demux errors afterwards.
+
+2004-12-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggdemux.c: (get_relative):
+         Check for non-NULL before accessing member (end-of-chain).
+
+2004-12-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_class_init),
+       (cdparanoia_set_property), (cdparanoia_get_property):
+       * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_class_init),
+       (dvdnavsrc_set_property), (dvdnavsrc_get_property):
+       * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_class_init),
+       (dvdreadsrc_init), (dvdreadsrc_set_property),
+       (dvdreadsrc_get_property):
+       * sys/vcd/vcdsrc.c: (gst_vcdsrc_class_init),
+       (gst_vcdsrc_set_property), (gst_vcdsrc_get_property):
+         Synchronize property names where not yet the case. Devices are
+         now device=X, other versions are deprecated (but still exist).
+         Also use g_free() unconditionally.
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
+       (setup_source), (gst_play_base_bin_get_property):
+         Expose source.
+
+2004-12-09  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac: move GCONF macro outside conditional for the am
+         conditional. Fixes #160439
+
+2004-12-08  David Schleef  <ds@schleef.org>
+
+       * tools/gst-visualise-m.m: Switch to elements that currently
+       exist.
+
+2004-12-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstogmparse.c: (gst_ogm_parse_chain):
+         We love wrong commas.
+
+2004-12-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/matroska/matroska-demux.c:
+       (gst_matroska_demux_handle_src_query):
+         Don't set DEFAULT, unsupported - makes length display incorrectly
+         in some cases.
+
+2004-12-07  Christian Fredrik Kalager Schaller  <uraeus@gnome.org>
+
+       * gst/monoscope/README: remove blurb about files being GPL
+       * gst/monoscope/gstmonoscope.c: Change license field to LGPL
+       * gst/monoscope/monoscope.c: Change license to BSD with explanation
+         monoscope is now effectively LGPL licensed
+
+2004-12-07  Christian Fredrik Kalager Schaller  <uraeus@gnome.org>
+
+       * gst/monoscope/README: Update information to be more correct
+       * gst/monoscope/convolve.c: Relicense to LGPL
+       * gst/monoscope/convolve.h: Relicense to LGPL
+
+2004-12-06  Arwed v. Merkatz <v.merkatz@gmx.net>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
+         set BUFFER_DURATION to correct values (mpeg1 audio frame length is fixed)
+       * gst/matroska/matroska-mux.c: (gst_matroska_mux_audio_pad_link):
+         set default_duration for mpeg1 audio
+
+2004-12-06  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_get_caps), (gst_alsa_close_audio):
+       * ext/alsa/gstalsa.h:
+         refactor big chunks of the core caps negotiation code to make it
+         a lot faster, because people claim it's really slow
+         (actually, just cache the getcaps when the device is opened)
+
+2004-12-06  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/a52dec/gsta52dec.c: (gst_a52dec_init),
+       (gst_a52dec_handle_event), (gst_a52dec_update_streaminfo),
+       (gst_a52dec_handle_frame), (gst_a52dec_chain),
+       (gst_a52dec_change_state), (plugin_init):
+       * ext/a52dec/gsta52dec.h:
+         Do something useful with timestamps. Make chain-based (since
+         there's really no reason to be loopbased).
+       * gst/avi/gstavidemux.c: (gst_avi_demux_process_next_entry):
+         Update current_byte/frame correctly.
+
+2004-12-04  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/apetag/apedemux.c: (gst_ape_demux_parse_tags),
+       (gst_ape_demux_stream_init):
+         Forward tags, too.
+
+2004-12-04  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/apetag/apedemux.c: (gst_ape_demux_stream_init):
+         Let's make sure we're done typefinding when detecting tags.
+
+2004-12-03  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/matroska/ebml-read.c: (gst_ebml_read_class_init),
+       (gst_ebml_read_init), (gst_ebml_read_use_event),
+       (gst_ebml_read_element_id), (gst_ebml_peek_id),
+       (gst_ebml_read_seek), (gst_ebml_read_skip),
+       (gst_ebml_read_reserve), (gst_ebml_read_buffer),
+       (gst_ebml_read_master):
+       * gst/matroska/ebml-read.h:
+       * gst/matroska/matroska-demux.c:
+       (gst_matroska_demux_parse_contents),
+       (gst_matroska_demux_loop_stream), (gst_matroska_demux_audio_caps):
+         Disgustingly evil hack for working around INTERRUPT events and
+         their extremely annoying habit of being a pain in the ass. We
+         simply peek a cluster before reading any of it.
+
+2004-12-03  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/musepack/gstmusepackdec.cpp:
+         There's also floating point libmusepacks.
+
+2004-12-03  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/faad/gstfaad.c: (gst_faad_chanpos_from_gst),
+       (gst_faad_chanpos_to_gst), (gst_faad_chain):
+         Set DURATION even if source buffer didn't. Also use increasing
+         timestamps.
+       * gst-libs/gst/riff/riff-media.c:
+       (gst_riff_create_audio_caps_with_data):
+         Block_align can have larger values than 8192.
+
+2004-12-02  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/law/alaw-decode.c: (alawdec_getcaps), (alawdec_link):
+       * gst/law/alaw-encode.c: (alawenc_getcaps), (alawenc_link):
+       * gst/law/mulaw-decode.c: (mulawdec_getcaps), (mulawdec_link):
+       * gst/law/mulaw-encode.c: (mulawenc_getcaps), (mulawenc_link):
+         Fix caps.
+
+2004-12-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/v4l/v4l_calls.c: (gst_v4l_get_chan_names):
+         Fix logic bug.
+
+2004-12-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_type_find):
+         Yay, another one.
+
+2004-12-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/esd/esdsink.c: (gst_esdsink_chain):
+         Make error actually say something useful (fixes #156798).
+       * gst-libs/gst/riff/riff-media.c:
+       (gst_riff_create_video_caps_with_data),
+       (gst_riff_create_video_template_caps):
+         Add Intel Video 5.0 fourcc (IV50).
+
+2004-12-01  Christophe Fergeau  <teuf@gnome.org>
+
+       * ext/mad/gstmad.c: (mpg123_parse_xing_header): fix xing header
+       detection on mono and stereo mp3 files.
+
+2004-12-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_change_state):
+         Don't crash on EMPTY caps (e.g. when the demuxer didn't recognize
+         the contained stream).
+
+2004-12-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/faad/gstfaad.c: (gst_faad_srcconnect), (gst_faad_chain):
+         Oops, remove debug.
+
+2004-12-01  Sebastien Cote  <sc5@hermes.usherb.ca>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/law/alaw-decode.c: (alawdec_getcaps):
+       * gst/law/mulaw-decode.c: (mulawdec_getcaps):
+         Prevent warnings when negotiating caps (fixes #159338).
+
+2004-12-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+       (gst_ffmpegcsp_chain):
+         Remove old leftover that shouldn't be there...
+
+2004-12-01  Sebastien Cote  <sc5@hermes.usherb.ca>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_use_event):
+         Don't forward DISCONT events (fixes #159684).
+
+2004-12-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybin.c: (remove_sinks), (setup_sinks):
+         Unlink manually since sometimes bin disposal (and therefore
+         pad unlinking) is delayed, which will cause a new media file
+         to not be able to start playing instantly.
+
+2004-11-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gststreaminfo.c: (stream_info_mute_pad):
+         On mute of an unlinked stream, check for pad availability so
+         we don't crash on unlinked pad.
+
+2004-11-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index),
+       (gst_avi_demux_massage_index):
+         Fix quite humiliating bug in omitting 0-sized index chunks but
+         forgetting to count them for timestamps.
+
+2004-11-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/a52dec/gsta52dec.c: (gst_a52dec_loop):
+         Actually leave the loop if we failed to sync. Don't crash.
+
+2004-11-28  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_get_audio_stream),
+       (gst_dvd_demux_process_private):
+       * gst/mpegstream/gstdvddemux.h:
+         Fix crash (#159759). Doesn't work, though. :-(.
+
+2004-11-28  Benjamin Otte  <otte@gnome.org>
+
+       * gst/audioconvert/gstchannelmix.c: (gst_audio_convert_mix):
+         more overwriting protection due to modifying channels one by one
+         instead of all at once
+
+2004-11-28  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/audioconvert/gstchannelmix.c:
+       (gst_audio_convert_fill_normalize):
+         Normalize using absolute values.
+
+2004-11-28  Julien MOUTTE  <julien@moutte.net>
+
+       * configure.ac:
+       * ext/Makefile.am:
+       * ext/directfb/Makefile.am:
+       * ext/directfb/directfbvideosink.c: (gst_directfbvideosink_create),
+       (gst_directfbvideosink_get_pixel_format),
+       (gst_directfbvideosink_get_format_from_fourcc),
+       (gst_directfbvideosink_fixate), (gst_directfbvideosink_getcaps),
+       (gst_directfbvideosink_sink_link),
+       (gst_directfbvideosink_change_state),
+       (gst_directfbvideosink_chain), (gst_directfbvideosink_buffer_free),
+       (gst_directfbvideosink_buffer_alloc),
+       (gst_directfbvideosink_interface_supported),
+       (gst_directfbvideosink_interface_init),
+       (gst_directfbvideosink_navigation_send_event),
+       (gst_directfbvideosink_navigation_init),
+       (gst_directfbvideosink_set_property),
+       (gst_directfbvideosink_get_property),
+       (gst_directfbvideosink_finalize), (gst_directfbvideosink_init),
+       (gst_directfbvideosink_base_init),
+       (gst_directfbvideosink_class_init),
+       (gst_directfbvideosink_get_type), (plugin_init):
+       * ext/directfb/directfbvideosink.h: Adding a first version of
+       directfbvideosink.
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_init): Initializing some
+       more.
+
+2004-11-28  Benjamin Otte  <otte@gnome.org>
+
+       * gst/audioconvert/gstchannelmix.c: (gst_audio_convert_mix):
+         walk the samples backwards if out_channels > in_channels so we don't
+         overwrite data
+
+2004-11-28  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/audioconvert/Makefile.am:
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_init),
+       (gst_audio_convert_link), (gst_audio_convert_change_state),
+       (gst_audio_convert_channels):
+       * gst/audioconvert/gstchannelmix.c:
+       (gst_audio_convert_unset_matrix),
+       (gst_audio_convert_fill_identical),
+       (gst_audio_convert_fill_compatible),
+       (gst_audio_convert_detect_pos), (gst_audio_convert_fill_one_other),
+       (gst_audio_convert_fill_others),
+       (gst_audio_convert_fill_normalize),
+       (gst_audio_convert_fill_matrix), (gst_audio_convert_setup_matrix),
+       (gst_audio_convert_passthrough), (gst_audio_convert_mix):
+       * gst/audioconvert/gstchannelmix.h:
+         Implement a channel mixer.
+
+2004-11-28  Martin Soto  <martinsoto@users.sourceforge.net>
+
+       * ext/alsa/gstalsasink.c (gst_alsa_sink_loop):
+       * ext/alsa/gstalsa.h:
+       * ext/alsa/gstalsa.c (gst_alsa_set_clock):
+       Make alsasink actually honor gst_element_set_clock and use that
+       clock instead of its internal one.
+
+2004-11-27  Christophe Fergeau  <teuf@gnome.org>
+
+       * gst/playback/gstplaybasebin.c: (setup_source): fixed a caps leak
+       (gst_play_base_bin_change_state): nullify source and decoder when
+       going from READY to NULL so that we don't try to do weird stuff with
+       them when going from NULL to READY
+       * gst/playback/gstplaybin.c: (gst_play_bin_init): use gst_object_unref
+       instead of g_object_unref
+       (gen_video_element), (gen_audio_element): more refcounting fixes, now
+       it should be correct
+       (gst_play_bin_change_state): don't call remove_sinks if we are
+       currently disposing the object
+
+2004-11-27  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/a52dec/gsta52dec.c: (gst_a52dec_loop):
+         Don't forget bass if it's there. Else left channel is silent...
+
+2004-11-27  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/a52dec/gsta52dec.c: (gst_a52dec_loop),
+       (gst_a52dec_change_state):
+         Don't do sample adjusting anymore, we use float audio now.
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_fixate):
+         Don't fixate to non-existing properties.
+
+2004-11-27  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/a52dec/gsta52dec.c: (gst_a52dec_channels),
+       (gst_a52dec_change_state):
+         Advertise that we can do surround sound.
+
+2004-11-27  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/a52dec/gsta52dec.c: (gst_a52dec_reneg):
+         Add buffer-frames=0.
+       * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_get_type),
+       (dvdreadsrc_init), (dvdreadsrc_get_event_mask),
+       (dvdreadsrc_get_query_types), (dvdreadsrc_get_formats),
+       (dvdreadsrc_srcpad_event), (dvdreadsrc_srcpad_query),
+       (_seek_title), (_seek_chapter), (get_next_cell_for), (_read),
+       (seek_sector), (dvdreadsrc_get), (dvdreadsrc_open_file),
+       (dvdreadsrc_change_state), (dvdreadsrc_uri_get_type),
+       (dvdreadsrc_uri_get_protocols), (dvdreadsrc_uri_get_uri),
+       (dvdreadsrc_uri_set_uri), (dvdreadsrc_uri_handler_init):
+       * ext/dvdread/dvdreadsrc.h:
+         Add seeking, querying for bytes, sectors, title, angle and
+         chapter. Handle multiple chapters. Relicense to LGPL because
+         Billy agreed on that (thanks Billy!).
+
+2004-11-27  Christophe Fergeau  <teuf@gnome.org>
+
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_dispose):
+       call parent dispose method
+
+2004-11-27  Martin Soto  <martinsoto@users.sourceforge.net>
+
+       * gst-libs/gst/audio/audioclock.c (gst_audio_clock_set_active)
+       (gst_audio_clock_get_internal_time):
+       Fix active <-> inactive transitions: ensure time value always
+       grows and avoid abrupt value changes.
+
+2004-11-27  Arwed v. Merkatz <v.merkatz@gmx.net>
+
+       * configure.ac:
+       * gst/tta/Makefile.am:
+       * gst/tta/crc32.h:
+       * gst/tta/filters.h:
+       * gst/tta/gsttta.c:
+       * gst/tta/gstttadec.c:
+       * gst/tta/gstttadec.h:
+       * gst/tta/gstttaparse.c:
+       * gst/tta/gstttaparse.h:
+       * gst/tta/ttadec.h:
+         added TTA parser and decoder
+
+2004-11-26  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
+       (probe_triggered), (check_queue), (buffer_underrun),
+       (buffer_running), (buffer_overrun), (gen_source_element),
+       (setup_source):
+       * gst/playback/gstplaybasebin.h:
+         Implement buffering. Needs some more work.
+
+2004-11-26  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/theora/theoradec.c: (theora_dec_chain):
+         Fix ilog mask range overflow.
+
+2004-11-26  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_get_caps):
+         Don't omit the last (which in case of dmix is the only :) )
+         channel count. Don't set channels if <= 2.
+
+2004-11-26  Christophe Fergeau  <teuf@gnome.org>
+
+       * gst/playback/gstplaybin.c: (gen_video_element),
+       (gen_audio_element): Removed 2 obsolete comments
+
+2004-11-26  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+       * ext/vorbis/oggvorbisenc.c
+       * ext/vorbis/vorbisenc.c :
+         change description fields of those plugins to differentiate them
+         (pitivi show Encoders by description, they had the same one)
+
+2004-11-25  Christophe Fergeau  <teuf@gnome.org>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybin.c: (gst_play_bin_dispose),
+       (gst_play_bin_set_property), (gen_video_element),
+       (gen_audio_element):
+         Refcounting fixes for provided audio-/videosinks.
+
+2004-11-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybin.c: (gen_video_element),
+       (gen_audio_element), (setup_sinks), (gst_play_bin_change_state):
+         Don't reference all sinks, but only the video- and audiosinks.
+         The vis. element should be disposed when we're done with it.
+         We don't have any reason to keep it around. This fixes warnings
+         when reusing playbin for playing multiple audio files with
+         vis. enabled. Also release audio device on pause - idea stolen
+         from Rhythmbox.
+
+2004-11-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/a52dec/gsta52dec.c: (gst_a52dec_channels), (gst_a52dec_push),
+       (gst_a52dec_reneg), (gst_a52dec_loop), (plugin_init):
+       * ext/alsa/gstalsa.c: (gst_alsa_get_caps):
+       * ext/alsa/gstalsaplugin.c: (plugin_init):
+       * ext/dts/gstdtsdec.c: (gst_dtsdec_channels),
+       (gst_dtsdec_renegotiate), (gst_dtsdec_loop), (plugin_init):
+       * ext/faad/gstfaad.c: (gst_faad_init), (gst_faad_chanpos_from_gst),
+       (gst_faad_chanpos_to_gst), (gst_faad_sinkconnect),
+       (gst_faad_srcgetcaps), (gst_faad_srcconnect), (gst_faad_chain),
+       (gst_faad_change_state), (plugin_init):
+       * ext/faad/gstfaad.h:
+       * ext/vorbis/vorbis.c: (plugin_init):
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
+       * gst-libs/gst/audio/Makefile.am:
+       * gst-libs/gst/audio/audio.c: (plugin_init):
+       * gst-libs/gst/audio/multichannel.c:
+       (gst_audio_check_channel_positions),
+       (gst_audio_get_channel_positions),
+       (gst_audio_set_channel_positions),
+       (gst_audio_set_structure_channel_positions_list),
+       (add_list_to_struct), (gst_audio_set_caps_channel_positions_list),
+       (gst_audio_fixate_channel_positions):
+       * gst-libs/gst/audio/multichannel.h:
+       * gst-libs/gst/audio/testchannels.c: (main):
+       * gst/audioconvert/gstaudioconvert.c:
+       (gst_audio_convert_class_init), (gst_audio_convert_init),
+       (gst_audio_convert_dispose), (gst_audio_convert_getcaps),
+       (gst_audio_convert_parse_caps), (gst_audio_convert_link),
+       (gst_audio_convert_fixate), (gst_audio_convert_channels):
+       * gst/audioconvert/plugin.c: (plugin_init):
+         Surround sound support.
+
+2004-11-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_push):
+         Fix position for discont if we're close as well. Nitpicking, but
+         saves a few milliseconds of extra waiting or skipping.
+
+2004-11-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstdecodebin.c: (gst_decode_bin_factory_filter):
+         We sometimes need parsers for playback, so add those too.
+
+2004-11-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * configure.ac:
+       * gst/apetag/Makefile.am:
+       * gst/apetag/apedemux.c: (gst_ape_demux_get_type),
+       (gst_ape_demux_base_init), (gst_ape_demux_class_init),
+       (gst_ape_demux_init), (gst_ape_demux_get_src_formats),
+       (gst_ape_demux_get_src_query_types),
+       (gst_ape_demux_handle_src_query), (gst_ape_demux_get_event_mask),
+       (gst_ape_demux_handle_src_event), (gst_ape_demux_handle_event),
+       (gst_ape_demux_typefind_peek), (gst_ape_demux_typefind_get_length),
+       (gst_ape_demux_typefind_suggest), (gst_ape_demux_typefind),
+       (gst_ape_demux_parse_tags), (gst_ape_demux_stream_init),
+       (gst_ape_demux_stream_data), (gst_ape_demux_loop),
+       (gst_ape_demux_change_state):
+       * gst/apetag/apedemux.h:
+       * gst/apetag/apetag.c: (plugin_init):
+       * gst/typefind/gsttypefindfunctions.c: (apetag_type_find),
+       (plugin_init):
+         APE v1/2 tag reader plus typefind function.
+
+2004-11-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * configure.ac:
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_add_element):
+       * gst/typefind/gsttypefindfunctions.c: (mp3_type_find):
+         Remove hacks for older core. Require newer core version
+         accordingly.
+
+2004-11-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/cdxaparse/Makefile.am:
+       * gst/cdxaparse/gstcdxaparse.c: (gst_cdxaparse_get_type),
+       (gst_cdxaparse_class_init), (gst_cdxaparse_init),
+       (gst_cdxaparse_loop), (gst_cdxaparse_change_state), (plugin_init):
+       * gst/cdxaparse/gstcdxaparse.h:
+       * gst/cdxaparse/gstcdxastrip.c: (gst_cdxastrip_get_type),
+       (gst_cdxastrip_base_init), (gst_cdxastrip_class_init),
+       (gst_cdxastrip_init), (gst_cdxastrip_get_src_formats),
+       (gst_cdxastrip_get_src_query_types),
+       (gst_cdxastrip_handle_src_query), (gst_cdxastrip_get_event_mask),
+       (gst_cdxastrip_handle_src_event), (gst_cdxastrip_strip),
+       (gst_cdxastrip_sync), (gst_cdxastrip_handle_event),
+       (gst_cdxastrip_chain), (gst_cdxastrip_change_state):
+       * gst/cdxaparse/gstcdxastrip.h:
+         SVCD/VCD header stripping separated from CDXA image parsing.
+       * gst/typefind/gsttypefindfunctions.c: (mp3_type_find),
+       (plugin_init):
+         Add VCD/SVCD header typefinding for VCD/SVCD.
+       * sys/vcd/vcdsrc.c: (gst_vcdsrc_get_type), (gst_vcdsrc_base_init),
+       (gst_vcdsrc_class_init), (gst_vcdsrc_init),
+       (gst_vcdsrc_set_property), (gst_vcdsrc_get_property),
+       (gst_vcdsrc_get_event_mask), (gst_vcdsrc_get_query_types),
+       (gst_vcdsrc_get_formats), (gst_vcdsrc_srcpad_event),
+       (gst_vcdsrc_srcpad_query), (gst_vcdsrc_get),
+       (gst_vcdsrc_open_file), (gst_vcdsrc_close_file),
+       (gst_vcdsrc_change_state), (gst_vcdsrc_msf),
+       (gst_vcdsrc_recalculate), (gst_vcdsrc_uri_get_type),
+       (gst_vcdsrc_uri_get_protocols), (gst_vcdsrc_uri_get_uri),
+       (gst_vcdsrc_uri_set_uri), (gst_vcdsrc_uri_handler_init):
+       * sys/vcd/vcdsrc.h:
+         Fix up, add seeking, querying, URI interface. Works in totem now.
+
+2004-11-25  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+         back to CVS
+
+=== release 0.8.6 ===
+
+2004-11-25  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+       * po/af.po:
+       * po/az.po:
+       * po/cs.po:
+       * po/en_GB.po:
+       * po/hu.po:
+       * po/it.po:
+       * po/nb.po:
+       * po/nl.po:
+       * po/or.po:
+       * po/sq.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/uk.po:
+         releasing 0.8.6, "IOU Love"
+
+2004-11-23  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       patch by: Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c:
+         Fix unplayable files error handling.  Fixes #158365
+
+2004-11-23  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       patch by: Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+       * gst/typefind/gsttypefindfunctions.c:
+         Fix broken mp3 typefinding.  Fixes #158375
+
+2004-11-23  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       patch by: Ronald Bultje <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggdemux.c:
+         Fix sync on broken files.  Fixes #158976
+
+2004-11-23  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       patch by: Edward Hervey <bilboed@bilboed.com>
+
+       * ext/libpng/gstpngenc.c:
+         Copy over buffer properties.  Fixes #158832
+
+2004-11-23  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       patch by: Tim-Philipp Müller <t.i.m@zen.co.uk>
+
+       * ext/dvdread/dvdreadsrc.c:
+         Fixes invalid reads (#158462)
+
+2004-11-23  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/v4l/gstv4lsrc.c:
+       * sys/v4l/gstv4lsrc.h:
+       * sys/v4l/v4lsrc_calls.c:
+         Probe less and cache it.  Fixes #159187.
+
+2004-11-23  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/videorate/gstvideorate.c:
+         Handle all video formats. Fixes #159186.
+
+2004-11-16  Jan Schmidt  <thaytan@mad.scientist.com>
+       * gst/synaesthesia/gstsynaesthesia.c:
+       (gst_synaesthesia_class_init), (gst_synaesthesia_init),
+       (gst_synaesthesia_dispose), (gst_synaesthesia_finalize),
+       (gst_synaesthesia_sink_link), (gst_synaesthesia_src_getcaps),
+       (gst_synaesthesia_src_link), (gst_synaesthesia_chain),
+       (gst_synaesthesia_change_state), (plugin_init):
+       Fix up synaesthesia to work under different samplerates/ buffer sizes.
+       Force 320x200 output, as that's the only thing the underlying
+       synaesthesia implementation supports. Still needs to be made
+       re-entrant.
+
+2004-11-14  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * configure.ac:
+         Fix mpeg2enc configure check (similar to mplex check below).
+
+2004-11-14  Koop Mast  <kwm@rainbow-runner.nl>
+
+       reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+         Fix for gcc-2.95 (fixes #158221).
+
+2004-11-13  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_add_element):
+         Re-add clock distribution hack (until new core is released).
+         Fixes #158125.
+
+2004-11-13  Arwed v. Merkatz  <v.merkatz@gmx.net>
+       * configure.ac:
+         fix mplex configure check segfaulting on some systems (bug #140994)
+
+2004-11-13  Benjamin Otte  <otte@gnome.org>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_pcm_wait):
+         add debugging
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
+         do a wait when we enter the loop func with no data available to
+         write instead of getting into an 100% CPU loop by just returning and
+         being called again by the scheduler
+
+2004-11-13  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * configure.ac:
+       * ext/libvisual/visual.c: (gst_visual_get_type),
+       (libvisual_log_handler), (gst_visual_getcaps),
+       (gst_visual_srclink), (gst_visual_change_state), (make_valid_name),
+       (plugin_init):
+         Update libvisual to 0.1.7. Link in the debug handling to gstreamer
+       * ext/smoothwave/Makefile.am:
+       * ext/smoothwave/demo-osssrc.c: (main):
+       * ext/smoothwave/gstsmoothwave.c: (gst_smoothwave_class_init),
+       (gst_smoothwave_init), (gst_smoothwave_dispose), (gst_sw_sinklink),
+       (gst_sw_srclink), (gst_smoothwave_chain), (gst_sw_change_state),
+       (plugin_init):
+       * ext/smoothwave/gstsmoothwave.h:
+         Make gstsmoothwave a working element in the 20th century.
+
+       * gst/chart/gstchart.c: (gst_chart_init), (gst_chart_srcconnect):
+         Fix incorrect link function
+
+2004-11-12  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/volume/gstvolume.c:
+         Allow buffer-frames=0.
+
+2004-11-12 Iain <iaingnome@gmail.com>
+
+       * configure.ac: Check for polypaudio
+
+       * ext/Makefile.am: Build the polyp dir
+
+       * ext/polyp: The polypsink sources.
+
+2004-10-30 Iain <iaingnome@gmail.com>
+
+       * gst/interleave/interleave.c (interleave_unlink): Change the src pads
+       caps to reflect the new number of channels.
+
+2004-11-12  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
+         Fix for negotiation order problem. This would show when the
+         ALSA loopfuction was called before any other function. ALSA
+         wouldn't do anything because we're not negotiated yet, leading
+         to an infinite loop. Showed in e.g. Rhythmbox. Fixes #158006.
+
+2004-11-11  Tim-Philipp Müller  <t.i.m@zen.co.uk>
+
+       reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_src_query):
+         No warnings (#157986).
+
+2004-11-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+         Prefer apev1/2 and id3v1 (at end of file) over musepack.
+
+2004-11-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/matroska/matroska-demux.c: (gst_matroska_demux_loop_stream):
+         Signal no-more-pads (so it works in playbin).
+
+2004-11-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/musepack/gstmusepackreader.cpp:
+         Workaround for older core.
+
+2004-11-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/ffmpegcolorspace/imgconvert.c: (yuv420p_to_yuv422):
+         Actually test for odd width/height rather than testing whether
+         a temporary variable that was 0 before we subtracted 1 is now
+         not equal to zero (which it always is).
+
+2004-11-11  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * sys/v4l2/gstv4l2element.c: (gst_v4l2_iface_supported):
+       Fix compilation if HAVE_XVIDEO is not defined
+
+2004-11-11  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * sys/v4l/gstv4lelement.c: (gst_v4l_iface_supported):
+       Fix compilation if HAVE_XVIDEO is not defined
+
+2004-11-11  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * gst/goom/gstgoom.c: (gst_goom_class_init), (gst_goom_init),
+       (gst_goom_dispose), (gst_goom_sinkconnect), (gst_goom_chain),
+       (gst_goom_change_state), (plugin_init):
+       Use the bytestream adapter so goom doesn't depend on the input
+       buffer size.
+       Add a debug category
+
+2004-11-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_change_state):
+         Only set hardware parameters *after* negotiation. Before
+         negotiation, it will set ANY and that seems to cause crashes
+         (see e.g. #151288, #153227).
+
+2004-11-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_get_time):
+         This seems to be antique leftover. It needs to pass error
+         checking.
+       * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_init),
+       (gst_sdlvideosink_deinitsdl), (gst_sdlvideosink_initsdl),
+       (gst_sdlvideosink_destroy), (gst_sdlvideosink_create),
+       (gst_sdlvideosink_sinkconnect), (gst_sdlvideosink_chain):
+         Fix GstXOverlay implementation (#151059).
+
+2004-11-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_change_state):
+         Don't assert (#157853).
+
+2004-11-10  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event),
+         Fix bytes/samples confustion.
+       (gst_alsa_sink_mmap), (gst_alsa_sink_loop):
+         Fix for underrun (#144389).
+
+2004-11-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/typefind/gsttypefindfunctions.c: (mp3_type_find):
+         Disable halfway-seek for pending release (since it needs a new
+         core release).
+
+2004-11-09  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/v4l/gstv4lsrc.c:
+       * sys/v4l/gstv4lsrc.h:
+       * sys/v4l/v4lsrc_calls.c:
+         add autoprobe-fps property so we can separate autoprobing parts
+
+2004-11-09  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/v4l/gstv4lsrc.c:
+       * sys/v4l/v4lsrc_calls.c:
+       initialise fourcc to catch unset fourcc's, and debug
+
+2004-11-09  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/README:
+       * gst/playback/gstdecodebin.c: (close_pad_link), (try_to_link_1):
+       * gst/playback/gstplaybin.c: (gst_play_bin_init),
+       (gst_play_bin_dispose), (gst_play_bin_set_property),
+       (remove_sinks), (setup_sinks), (gst_play_bin_change_state),
+       (gst_play_bin_get_event_masks), (gst_play_bin_send_event),
+       (gst_play_bin_get_formats), (gst_play_bin_convert),
+       (gst_play_bin_get_query_types), (gst_play_bin_query):
+       Cleanups and some more documentation.
+
+2004-11-09  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * ext/libcaca/gstcacasink.c: (gst_cacasink_class_init),
+       (gst_cacasink_init), (gst_cacasink_chain):
+       * ext/libcaca/gstcacasink.h:
+       Cacasink inherits from VideoSink, so let that store the clock.
+
+2004-11-09  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/README:
+       * gst/playback/gstplaybasebin.c: (group_destroy), (group_is_muted),
+       (add_stream), (unknown_type), (add_element_stream), (no_more_pads),
+       (probe_triggered), (preroll_unlinked), (new_decoded_pad),
+       (gst_play_base_bin_change_state), (gst_play_base_bin_found_tag):
+       * gst/playback/gstplaybin.c: (gen_vis_element), (remove_sinks),
+       (setup_sinks):
+       * gst/playback/gststreaminfo.c: (gst_stream_info_set_mute),
+       (gst_stream_info_is_mute), (gst_stream_info_set_property):
+       * gst/playback/gststreaminfo.h:
+       Updated README.
+       Only switch groups if all streams have muted (EOSed).
+       Send Tags in sync with the stream playback instead of in
+       the playback/preroll phase.
+       Some cleanups, free the fakesrc elements.
+
+2004-11-09  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_get_caps_internal):
+         buffer-frames property was missing
+       * ext/arts/gst_arts.c:
+         rate missing from sinkcaps
+       * ext/audiofile/gstafparse.c:
+       * ext/audiofile/gstafsink.c:
+       * ext/audiofile/gstafsrc.c:
+       * ext/swfdec/gstswfdec.c:
+         int audio doesn't know buffer-frames
+       * ext/cdparanoia/gstcdparanoia.c:
+         int audio doesn't know chunksize either
+       * ext/nas/nassink.c:
+         it's endianness, not endianess
+       * gst-libs/gst/audio/audio.h:
+         make float standard pad template caps really describe float
+       * gst/law/mulaw.c: (linear_factory):
+         signed only, please
+       * gst/mpegstream/gstdvddemux.c:
+         widths of 20 are not valid
+
+2004-11-08  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       Submitted by: Luca Ferretti <elle.uca@infinito.it>
+
+       * po/LINGUAS:
+       * po/it.po:
+         Add Italian
+
+2004-11-08  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/README:
+       * gst/playback/gstdecodebin.c: (close_pad_link), (try_to_link_1):
+       * gst/playback/gstplaybasebin.c: (probe_triggered),
+       (gst_play_base_bin_change_state):
+       Updated README, added more comments for fixmes etc..
+
+2004-11-08  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_add_element):
+       We can remove this hack now.
+
+2004-11-08  Wim Taymans  <wim@fluendo.com>
+
+       * gst/videomixer/videomixer.c: (gst_videomixer_blend_ayuv_ayuv),
+       (gst_videomixer_fill_checker), (gst_videomixer_fill_color),
+       (gst_videomixer_blend_buffers), (gst_videomixer_loop):
+       Only mix AYUV for maximum quality.
+
+2004-11-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggdemux.c: (get_relative), (gst_ogg_demux_src_query),
+       (gst_ogg_demux_push), (gst_ogg_pad_push):
+         Let's act as if we're synchronized now! :).
+       * ext/theora/theoradec.c: (theora_dec_chain):
+         Add some debug.
+
+2004-11-08  Wim Taymans  <wim@fluendo.com>
+
+       * gst/alpha/gstalpha.c: (gst_alpha_method_get_type),
+       (gst_alpha_set_property), (gst_alpha_sink_link),
+       (gst_alpha_set_ayuv), (gst_alpha_set_i420),
+       (gst_alpha_chroma_key_ayuv), (gst_alpha_chroma_key_i420),
+       (gst_alpha_init_params), (gst_alpha_chain):
+       Implement alpha functions for AYUV too, this increases
+       accuracy quite a bit.
+
+2004-11-08  Wim Taymans  <wim@fluendo.com>
+
+       * gst/ffmpegcolorspace/avcodec.h:
+       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+       (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_caps_to_pixfmt),
+       (gst_ffmpegcsp_avpicture_fill):
+       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+       (gst_ffmpegcsp_caps_remove_format_info):
+       * gst/ffmpegcolorspace/imgconvert.c: (avpicture_get_size),
+       (shrink12), (img_get_alpha_info), (deinterlace_line),
+       (deinterlace_line_inplace):
+       * gst/ffmpegcolorspace/imgconvert_template.h:
+       Added AYUV colorspace and handle RGBA a bit more respectful.
+
+2004-11-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
+         Actually always send a discont (cornercase when resending the
+         same serial-tagged chain twice).
+
+2004-11-08  Julien MOUTTE  <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_clear),
+       (gst_ximagesink_finalize):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_clear),
+       (gst_xvimagesink_finalize): Some more cleanups, leaks fixed and checks.
+
+2004-11-08  Wim Taymans  <wim@fluendo.com>
+
+       * gst/typefind/gsttypefindfunctions.c: (aac_type_find):
+       Don't segfault on NULL data.
+
+2004-11-08  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/gstdecodebin.c: (unlinked):
+       * gst/playback/gstplay-marshal.list:
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
+       (gst_play_base_bin_init), (group_create), (get_active_group),
+       (get_building_group), (group_destroy), (group_commit),
+       (queue_overrun), (remove_groups), (add_stream), (unknown_type),
+       (add_element_stream), (no_more_pads), (probe_triggered),
+       (preroll_unlinked), (new_decoded_pad), (removed_decoded_pad),
+       (state_change), (setup_source), (gst_play_base_bin_get_property),
+       (gst_play_base_bin_change_state), (gst_play_base_bin_add_element),
+       (gst_play_base_bin_link_stream),
+       (gst_play_base_bin_get_streaminfo):
+       * gst/playback/gstplaybasebin.h:
+       * gst/playback/gstplaybin.c: (gst_play_bin_class_init),
+       (remove_sinks), (setup_sinks), (gst_play_bin_change_state):
+       Add support for chained ogg files. Prepare for playlist
+       support. This patch introduces the concept of pad groups, which
+       together compose one playable media file.
+
+2004-11-07  David Schleef  <ds@schleef.org>
+
+       * testsuite/gst-lint: Check for pad templates that aren't statically
+       scoped.
+
+2004-11-07  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * configure.ac:
+       * ext/Makefile.am:
+       * ext/musepack/Makefile.am:
+       * ext/musepack/gstmusepackdec.cpp:
+       * ext/musepack/gstmusepackdec.h:
+       * ext/musepack/gstmusepackreader.cpp:
+       * ext/musepack/gstmusepackreader.h:
+         Add musepack decoder.
+       * ext/faad/gstfaad.c: (gst_faad_base_init):
+         Make pad templates static.
+       * gst/typefind/gsttypefindfunctions.c: (mp3_type_find),
+       (plugin_init):
+         Add musepack typefinder, make mp3 typefinding work halfway stream,
+         which doesn't actually work yet because id3demux doesn't implement
+         _get_length().
+
+2004-11-07  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
+       (gst_ogg_mux_queue_pads), (gst_ogg_mux_loop):
+         Fix interrupt event handling (#144436).
+
+2004-11-07  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_do_typefind):
+         Hide unused glory.
+
+2004-11-06  Tim-Philipp Müller  <t.i.m@zen.co.uk>
+
+       reviewed by: Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/vorbis/vorbisenc.c: (raw_caps_factory):
+         Fix weird caps (#157548).
+
+2004-11-06  Tim-Philipp Müller  <t.i.m@zen.co.uk>
+
+       Reviewed by: Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/rtp/gstrtpgsmparse.c: (gst_rtpgsm_caps_nego):
+         Add missing NULL terminator (#157543).
+
+2004-11-05  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/tcp/gsttcp.h:
+       * gst/tcp/gsttcpclientsink.c:
+       * gst/tcp/gsttcpclientsrc.c:
+       * gst/tcp/gsttcpserversink.c:
+       * gst/tcp/gsttcpserversrc.c:
+         ports can go up to 65535.  Move common defines to gsttcp.h
+
+2004-11-05  Wim Taymans  <wim@fluendo.com>
+
+       * gst/videotestsrc/videotestsrc.c: (paint_setup_Y41B),
+       (paint_hline_Y41B), (paint_setup_Y42B), (paint_hline_Y42B):
+       Added two more colorspaces.
+
+2004-11-05  Wim Taymans  <wim@fluendo.com>
+
+       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+       (gst_ffmpegcsp_avpicture_fill):
+       * gst/ffmpegcolorspace/imgconvert.c: (avpicture_get_size),
+       (yuv422p_to_yuv422), (yuv420p_to_yuv422), (shrink12),
+       (img_convert), (deinterlace_line), (deinterlace_line_inplace):
+       More stride fixes.
+
+2004-11-05  Wim Taymans  <wim@fluendo.com>
+
+       * gst/alpha/gstalpha.c: (gst_alpha_set_property), (gst_alpha_add),
+       (gst_alpha_chroma_key), (gst_alpha_init_params), (gst_alpha_chain):
+       * gst/videomixer/videomixer.c: (gst_videomixer_blend_ayuv_i420),
+       (gst_videomixer_fill_checker), (gst_videomixer_blend_buffers),
+       (gst_videomixer_loop):
+       More stride fixes.
+
+2004-11-05  Benjamin Otte  <otte@gnome.org>
+
+       * ext/mad/gstmad.c: (gst_mad_chain):
+         don't overflow data buffer. Flush not needed sync data when syncing
+         failed.
+
+2004-11-04  Wim Taymans  <wim@fluendo.com>
+
+       * gst/alpha/gstalpha.c: (gst_alpha_method_get_type),
+       (gst_alpha_class_init), (gst_alpha_init), (gst_alpha_set_property),
+       (gst_alpha_get_property), (gst_alpha_add), (gst_alpha_chroma_key),
+       (gst_alpha_init_params), (gst_alpha_chain),
+       (gst_alpha_change_state):
+       Updated the chroma keying algorithm with something more
+       sophisticated.
+
+2004-11-03  Wim Taymans  <wim@fluendo.com>
+
+       * gst/videomixer/videomixer.c: (gst_videomixer_blend_ayuv_i420),
+       (gst_videomixer_fill_checker), (gst_videomixer_fill_color),
+       (gst_videomixer_blend_buffers), (gst_videomixer_loop):
+       Fix stride issues. Does not completely work for odd
+       heights.
+
+2004-11-03  Wim Taymans  <wim@fluendo.com>
+
+       * gst/alpha/gstalpha.c: (gst_alpha_method_get_type),
+       (gst_alpha_chroma_key), (gst_alpha_chain):
+       Fix stride issues. Does not completely work for odd
+       heights.
+
+2004-11-03  Christophe Fergeau  <teuf@gnome.org>
+
+       * gst/videoscale/gstvideoscale.c: (gst_videoscale_getcaps):
+       * gst/videoscale/videoscale.c: (videoscale_find_by_structure):
+       leak fixes
+
+2004-11-03  Wim Taymans  <wim@fluendo.com>
+
+       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+       (gst_ffmpegcsp_avpicture_fill):
+       * gst/ffmpegcolorspace/imgconvert.c: (avpicture_get_size),
+       (avpicture_alloc):
+       * gst/ffmpegcolorspace/imgconvert_template.h:
+       Use correct _fill function to get correct strides.
+
+2004-11-02  David Schleef  <ds@schleef.org>
+
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
+       (gst_qtdemux_add_stream), (qtdemux_parse), (qtdemux_parse_tree),
+       (qtdemux_parse_udta), (qtdemux_tag_add), (gst_qtdemux_handle_esds):
+       Change all g_print()s to debugging.  Add a bunch of consistency
+       checks.
+
+2004-11-02  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init),
+       (try_to_link_1), (get_our_ghost_pad), (remove_element_chain),
+       (unlinked), (no_more_pads), (close_link):
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_init),
+       (unknown_type), (add_element_stream), (new_decoded_pad),
+       (removed_decoded_pad), (setup_source):
+       * gst/playback/gststreaminfo.c: (gst_stream_info_get_type),
+       (gst_stream_info_class_init), (gst_stream_info_init),
+       (gst_stream_info_new), (gst_stream_info_dispose),
+       (stream_info_mute_pad), (gst_stream_info_set_property),
+       (gst_stream_info_get_property):
+       * gst/playback/gststreaminfo.h:
+       Fix playback of multiple files.
+       a slightly different approach to handling dynamic pad removals.
+       This one only looks at pads that we have linked.
+
+2004-11-01  Christophe Fergeau  <teuf@gnome.org>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_finalize): fix an "invalid
+       free" warning from libc.
+
+2004-11-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init),
+       (get_unconnected_element), (remove_starting_from), (pad_removed),
+       (close_link):
+         Implement support for dynamic pad changing. We listen to "live"
+         pad removals (i.e. while playing) and re-setup autoplugging
+         after that. Playbasebin/playbin need some more work for this
+         to finally work, but decodebin supports (and replugs) chained
+         ogg now.
+
+2004-11-02  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_class_init), (gst_alsa_dispose),
+       (gst_alsa_finalize):
+       * ext/cdaudio/gstcdaudio.c: (gst_cdaudio_class_init),
+       (gst_cdaudio_finalize):
+       * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_class_init),
+       (cdparanoia_finalize):
+       * ext/divx/gstdivxdec.c: (gst_divxdec_dispose):
+       * ext/divx/gstdivxenc.c: (gst_divxenc_dispose):
+       * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_class_init),
+       (dvdreadsrc_finalize):
+       * ext/flac/gstflacdec.c: (gst_flacdec_class_init),
+       (gst_flacdec_finalize):
+       * ext/flac/gstflacenc.c: (gst_flacenc_class_init),
+       (gst_flacenc_finalize):
+       * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_class_init),
+       (gst_gnomevfssink_finalize):
+       * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_class_init),
+       (gst_gnomevfssrc_finalize):
+       * ext/libfame/gstlibfame.c: (gst_fameenc_class_init),
+       (gst_fameenc_finalize):
+       * ext/nas/nassink.c: (gst_nassink_class_init),
+       (gst_nassink_finalize):
+       * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_finalize),
+       (gst_sdlvideosink_class_init):
+       * ext/sndfile/gstsf.c: (gst_sf_dispose):
+       * gst-libs/gst/mixer/mixertrack.c: (gst_mixer_track_dispose):
+       * gst-libs/gst/tuner/tunerchannel.c: (gst_tuner_channel_dispose):
+       * gst-libs/gst/tuner/tunernorm.c: (gst_tuner_norm_dispose):
+       * gst-libs/gst/xwindowlistener/xwindowlistener.c:
+       (gst_x_window_listener_dispose):
+       * gst/audioscale/gstaudioscale.c:
+       * gst/playondemand/gstplayondemand.c: (play_on_demand_class_init),
+       (play_on_demand_finalize):
+       * gst/videofilter/gstvideobalance.c: (gst_videobalance_dispose):
+       * gst/videoscale/gstvideoscale.c: (gst_videoscale_chain):
+       * sys/cdrom/gstcdplayer.c: (cdplayer_class_init),
+       (cdplayer_finalize):
+       * sys/glsink/glimagesink.c: (gst_glimagesink_finalize),
+       (gst_glimagesink_class_init):
+       * sys/oss/gstosselement.c: (gst_osselement_class_init),
+       (gst_osselement_finalize):
+       * sys/oss/gstosssink.c: (gst_osssink_dispose):
+       * sys/oss/gstosssrc.c: (gst_osssrc_dispose):
+       * sys/v4l/gstv4lelement.c: (gst_v4lelement_dispose):
+         Fixes a bunch of problems with finalize and dispose functions,
+         either assumptions that dispose is only called once, or not calling
+         the parent class dispose/finalize function
+
+2004-11-01  Stefan Kost  <ensonic@users.sf.net>
+
+       * ext/esd/esdsink.c: (gst_esdsink_init), (gst_esdsink_link):
+         added two api precondition guards
+         use g_strdup with getenv to fix crash when using ENVVAR
+
+2004-11-01  Jan Schmidt  <thaytan@mad.scientist.com>
+       * ext/esd/esdsink.c: (gst_esdsink_class_init),
+       (gst_esdsink_finalize):
+       Use a finalize function, not dispose, and more importantly,
+       call the parent class finalize function too
+
+2004-11-01  Johan Dahlin  <johan@gnome.org>
+
+       * ext/ogg/gstoggdemux.c:
+       * gst/tags/gstvorbistag.c:
+       Plug leaks.
+
+2004-10-31  Benjamin Otte  <otte@gnome.org>
+
+       * gst/tags/gstvorbistag.c: (gst_vorbis_tag_chain):
+         lotsa memleaks today. But they're all small...
+
+2004-10-31  Benjamin Otte  <otte@gnome.org>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
+         another memleak crushed
+
+2004-10-31  Benjamin Otte  <otte@gnome.org>
+
+       * gst/tags/gstvorbistag.c: (gst_tag_to_vorbis_comments):
+         fix memleak
+
+2004-10-31  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
+         Hack to prevent crash when going to READY inside signal handler
+         while this function is active.
+
+2004-10-31  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/ffmpegcolorspace/Makefile.am:
+       * gst/ffmpegcolorspace/avcodec.h:
+       * gst/ffmpegcolorspace/common.h:
+       * gst/ffmpegcolorspace/dsputil.c: (dsputil_static_init):
+       * gst/ffmpegcolorspace/dsputil.h:
+       * gst/ffmpegcolorspace/gstffmpeg.c: (plugin_init):
+       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+       (gst_ffmpeg_get_palette), (gst_ffmpeg_set_palette),
+       (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_smpfmt_to_caps),
+       (gst_ffmpegcsp_codectype_to_caps), (gst_ffmpeg_caps_to_smpfmt),
+       (gst_ffmpeg_caps_to_pixfmt), (gst_ffmpegcsp_caps_with_codectype),
+       (gst_ffmpegcsp_avpicture_fill):
+       * gst/ffmpegcolorspace/gstffmpegcodecmap.h:
+       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+       (gst_ffmpegcsp_caps_remove_format_info), (gst_ffmpegcsp_getcaps),
+       (gst_ffmpegcsp_pad_link), (gst_ffmpegcsp_get_type),
+       (gst_ffmpegcsp_base_init), (gst_ffmpegcsp_class_init),
+       (gst_ffmpegcsp_init), (gst_ffmpegcsp_chain),
+       (gst_ffmpegcsp_change_state), (gst_ffmpegcsp_set_property),
+       (gst_ffmpegcsp_get_property), (gst_ffmpegcolorspace_register):
+       * gst/ffmpegcolorspace/imgconvert.c:
+       (avcodec_get_chroma_sub_sample), (avcodec_get_pix_fmt_name),
+       (avcodec_get_pix_fmt), (avpicture_fill), (avpicture_layout),
+       (avpicture_get_size), (avcodec_get_pix_fmt_loss),
+       (avg_bits_per_pixel), (avcodec_find_best_pix_fmt1),
+       (avcodec_find_best_pix_fmt), (img_copy_plane), (img_copy),
+       (yuv422_to_yuv420p), (uyvy422_to_yuv420p), (uyvy422_to_yuv422p),
+       (yuv422_to_yuv422p), (yuv422p_to_yuv422), (yuv422p_to_uyvy422),
+       (uyvy411_to_yuv411p), (yuv420p_to_yuv422), (C_JPEG_TO_CCIR),
+       (img_convert_init), (img_apply_table), (shrink41), (shrink21),
+       (shrink12), (shrink22), (shrink44), (grow21_line), (grow41_line),
+       (grow21), (grow22), (grow41), (grow44), (conv411),
+       (gif_clut_index), (build_rgb_palette), (bitcopy_n), (mono_to_gray),
+       (monowhite_to_gray), (monoblack_to_gray), (gray_to_mono),
+       (gray_to_monowhite), (gray_to_monoblack), (avpicture_alloc),
+       (avpicture_free), (is_yuv_planar), (img_convert),
+       (get_alpha_info_pal8), (img_get_alpha_info), (deinterlace_line),
+       (deinterlace_line_inplace), (deinterlace_bottom_field),
+       (deinterlace_bottom_field_inplace), (avpicture_deinterlace):
+       * gst/ffmpegcolorspace/imgconvert_template.h:
+       * gst/ffmpegcolorspace/mem.c: (av_malloc), (av_realloc), (av_free):
+       * gst/ffmpegcolorspace/mmx.h:
+       * gst/ffmpegcolorspace/utils.c: (av_mallocz), (av_strdup),
+       (av_fast_realloc), (av_mallocz_static), (av_free_static),
+       (av_freep), (avcodec_get_context_defaults),
+       (avcodec_alloc_context), (avcodec_init):
+         Sync back from gst-ffmpeg. Deprecates ffcolorspace. Adds palette
+         handling plus update from ffmpeg CVS. Large clean-up.
+
+2004-10-31  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/Makefile.am:
+         We need the marshallers for decodebin, too.
+
+2004-10-30  David Schleef  <ds@schleef.org>
+
+       * gst/typefind/gsttypefindfunctions.c: (qt_type_find): Make
+         quicktime typefinding work with 64-bit offsets.
+
+2004-10-30  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * ext/dv/gstdvdec.c: (gst_dvdec_handle_sink_event):
+         Set EOS on the element when processing an EOS event.
+       * ext/speex/gstspeexdec.h:
+       * ext/speex/gstspeexenc.h:
+         Only keep a const ptr to the mode
+       * gst-libs/gst/riff/riff-media.c:
+       (gst_riff_create_audio_caps_with_data),
+       (gst_riff_create_audio_template_caps):
+         Allow WMAV3, with up to 6 channels.
+       * gst/asfdemux/gstasfmux.c: (gst_asfmux_request_new_pad):
+         Don't call gst_pad_set_event_function on a sink pad.
+       * gst/mpegstream/gstdvddemux.c:
+       (gst_dvd_demux_get_subpicture_stream),
+       (gst_dvd_demux_set_cur_audio), (gst_dvd_demux_set_cur_subpicture):
+         Copy the explicit caps that were set across to the cur_* pads,
+         instead of trying to use a possibly non-existent negotiated caps.
+         Reset the type of subpicture pads to UNKNOWN after calling
+         init_stream, so that the caps get set.
+
+2004-10-29  Martin Pitt  <martin.pitt@canonical.com>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_chunk):
+         Don't touch buffer if it is of size 0 (fixes #151064).
+
+2004-10-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_push), (gst_ogg_pad_push):
+         Synchronized discont handling.
+
+2004-10-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event),
+       (gst_ogg_demux_push):
+         Make seeking sort-of exact again (fixes #156387).
+
+2004-10-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c: (unknown_type),
+       (add_element_stream), (new_decoded_pad),
+       (gst_play_base_bin_change_state):
+       * gst/playback/gststreaminfo.c: (gst_stream_info_class_init),
+       (gst_stream_info_init), (gst_stream_info_new),
+       (gst_stream_info_dispose), (gst_stream_info_get_property):
+       * gst/playback/gststreaminfo.h:
+         Make caps explicitely available. Makes testing for unsupported
+         types possible. Improves error reporting.
+
+2004-10-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/audioconvert/gstaudioconvert.c:
+       (gst_audio_convert_buffer_to_default_format):
+         Really don't touch read-only buffers (#156563).
+
+2004-10-29  Sebastien Cote  <sc5@hermes.usherb.ca>
+
+       Reviewd by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/wavparse/gstwavparse.c: (gst_wavparse_fmt):
+         Fix memleak (#155223).
+
+2004-10-29  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/.cvsignore:
+       * gst/tcp/gstmultifdsink.c: (gst_sync_method_get_type),
+       (gst_multifdsink_class_init), (gst_multifdsink_init),
+       (gst_multifdsink_add), (gst_multifdsink_remove),
+       (gst_multifdsink_remove_client_link), (is_sync_frame),
+       (gst_multifdsink_new_client),
+       (gst_multifdsink_handle_client_write),
+       (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
+       (gst_multifdsink_handle_clients), (gst_multifdsink_set_property),
+       (gst_multifdsink_get_property):
+       * gst/tcp/gstmultifdsink.h:
+       Added burst on connect sync_method, deprecated sync_clients,
+       streamlined the sync code some more.
+
+2004-10-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c: (thread_error), (setup_source),
+       (gst_play_base_bin_change_state):
+         Improve error reporting.
+
+2004-10-28  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/Makefile.am:
+       * gst/tcp/fdsetstress.c: (mess_some_more), (run_test), (main):
+       * gst/tcp/gstfdset.c: (nearest_pow), (resize), (ensure_size),
+       (gst_fdset_new), (gst_fdset_free), (gst_fdset_set_mode),
+       (gst_fdset_fd_ctl_write), (gst_fdset_fd_ctl_read),
+       (gst_fdset_fd_has_closed), (gst_fdset_fd_has_error),
+       (gst_fdset_fd_can_read), (gst_fdset_fd_can_write),
+       (gst_fdset_wait):
+       Added more locks around fdset structures. Fixed/reworked
+       the poll array resizing code.
+       Added stress test for fdset.
+
+2004-10-28  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * gst-libs/gst/audio/gstaudiofilter.c: (gst_audiofilter_link):
+       fix build
+
+2004-10-28  Benjamin Otte  <otte@gnome.org>
+
+       * gst-libs/gst/audio/gstaudiofilter.c: (gst_audiofilter_link):
+         fix link function to always query channels and query width for
+         floats
+       * configure.ac:
+         add equalizer dir
+       * gst/equalizer/Makefile.am:
+       * gst/equalizer/gstiirequalizer.c: (gst_iir_equalizer_get_type),
+       (gst_iir_equalizer_base_init), (gst_iir_equalizer_class_init),
+       (gst_iir_equalizer_init), (gst_iir_equalizer_finalize),
+       (arg_to_scale), (setup_filter),
+       (gst_iir_equalizer_compute_frequencies),
+       (gst_iir_equalizer_set_property), (gst_iir_equalizer_get_property),
+       (gst_iir_equalizer_filter_inplace), (gst_iir_equalizer_setup),
+       (plugin_init):
+         add an equalizer
+
+2004-10-27  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       Submitted by: Kjartan Maraas <kmaraas@broadpark.no>
+
+       * po/LINGUAS:
+       * po/nb.po:
+         Added Norwegian Bokmaal translation
+
+2004-10-27  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
+         Don't break on options (fixes #156488).
+
+2004-10-27  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+       * ext/cdaudio/Makefile.am:
+       * sys/Makefile.am:
+         fix build on older automake
+
+2004-10-26  Wim Taymans  <wim@fluendo.com>
+
+       * ext/dv/gstdvdec.c: (gst_dvdec_video_getcaps),
+       (gst_dvdec_video_link), (gst_dvdec_push), (gst_dvdec_loop):
+       Allow a little margin when negotiating the framerate.
+
+2004-10-26  Stefan Kost  <ensonic@users.sf.net>
+
+       * gst/level/gstlevel.c:
+         synchonised naming of pads and pad-templates
+
+2004-10-26  Wim Taymans  <wim@fluendo.com>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event),
+       (gst_ogg_demux_handle_event), (_find_chain_get_unknown_part),
+       (_find_streams_check), (gst_ogg_demux_push):
+       Fix EOS again. Needs to be done in a better way. We should not
+       remove the pad if there is no new chained stream.
+
+2004-10-26 Iain <iaingnome@gmail.com>
+
+       * ext/ogg/gstoggdemux.c (gst_ogg_pad_new): Free the tag list.
+       * gst/audioscale/gstaudioscale.c (gst_audioscale_link): Free the copy
+       of the caps.
+       * gst/interleave/interleave.c (interleave_class_init): Hook up release
+       pad.
+       (interleave_release_pad): Remove the pad.
+       * gst/level/gstlevel.c: Allow the level to take 1 or 2 channels.
+       * sys/sunaudio/gstsunaudio.c (gst_sunaudio_setparams): Pay attention to
+       the set device.
+       * sys/xvimage/xvimagesink.c (gst_xvimagesink_get_xv_support): Free the
+       attrs
+       (gst_xvimagesink_xcontext_clear): Free the xcontext.
+       (gst_xvimagesink_finalize): Free the par.
+
+2004-10-26  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavimux.c: (gst_avimux_audsinkconnect),
+       (gst_avimux_stop_file):
+         First calculate the rate, and only then use it. Hdr.rate is a
+         multiple and not a derivative of hdr.scale. Scale is not the
+         same as blockalign but is solely related to rate.
+
+2004-10-26  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_init),
+       (gst_gnomevfssink_handle_event), (gst_gnomevfssink_chain):
+         Implement seeking.
+
+2004-10-25  James Henstridge  <james@jamesh.id.au>
+
+       Reviewed by:  David Schleef  <ds@schleef.org>
+
+       * examples/gstplay/player.c: (got_stream_length), (main):
+       * examples/seeking/cdplayer.c: (update_scale):
+       * examples/seeking/seek.c: (format_value), (update_scale):
+       * examples/seeking/spider_seek.c: (format_value), (update_scale),
+       (stop_seek):
+       Build fixes on AMD64.
+
+2004-10-25  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       reviewed by: Ronald Bultje <rbultje at gnome dot org>
+
+       * sys/v4l/v4l_calls.c: (gst_v4l_get_chan_names):
+       Fix for some v4l cards which hang in v4lsrc
+
+2004-10-25  Wim Taymans  <wim@fluendo.com>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_remove),
+       (gst_ogg_demux_push), (gst_ogg_chains_clear):
+       Make sure to remove the pad when a new chain is
+       encountered. Set some vars to NULL so we don't try
+       to reference freed memory.
+
+2004-10-25  Wim Taymans  <wim@fluendo.com>
+
+       * examples/seeking/Makefile.am:
+       * examples/seeking/cdplayer.c: (update_scale):
+       * examples/seeking/chained.c: (unlinked), (new_pad), (main):
+       * examples/seeking/playbin.c: (make_playerbin_pipeline),
+       (format_value), (update_scale), (iterate), (start_seek),
+       (stop_seek), (print_media_info), (play_cb), (pause_cb), (stop_cb),
+       (print_usage), (main):
+       Added some more examples, update others.
+
+2004-10-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/flac/gstflacdec.c: (gst_flacdec_update_metadata):
+       * ext/speex/gstspeexdec.c: (speex_dec_chain):
+       * ext/theora/theoradec.c: (theora_dec_chain):
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
+         Add codec-name metadata.
+
+2004-10-25  Takao Fujiwara  <Takao.Fujiwara@Sun.COM>
+
+       Reviewd by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
+       * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
+       * ext/alsa/gstalsamixertrack.h:
+       * po/POTFILES.in:
+         ALSA mixer track label internationalization (#154054).
+
+2004-10-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/theora/theoradec.c: (theora_dec_chain):
+         Export bitrate as metadata.
+
+2004-10-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
+       * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
+       * ext/alsa/gstalsamixertrack.h:
+         Fix names, fix loop.
+
+2004-10-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/speex/gstspeexdec.c: (gst_speex_dec_init),
+       (speex_dec_convert):
+         sinkconvert function so oggdemux can get the file length (totem).
+
+2004-10-25  James Morrison  <ja2morri@csclub.uwaterloo.ca>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_chunk):
+         Don't push incomplete packets.
+       * gst/typefind/gsttypefindfunctions.c: (m4a_type_find):
+         Fix MPEG-4 audio typefinding.
+
+2004-10-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/v4l/Makefile.am:
+       * sys/v4l/gstv4l.c: (plugin_init):
+       * sys/v4l/gstv4lelement.c: (gst_v4lelement_get_type),
+       (gst_v4lelement_init), (gst_v4lelement_dispose),
+       (gst_v4lelement_change_state):
+       * sys/v4l/gstv4lelement.h:
+       * sys/v4l/gstv4lxoverlay.c: (gst_v4l_xoverlay_open),
+       (gst_v4l_xoverlay_close), (idle_refresh),
+       (gst_v4l_xoverlay_set_xwindow_id):
+       * sys/v4l/gstv4lxoverlay.h:
+       * sys/v4l/v4l-overlay_calls.c:
+       * sys/v4l/v4l_calls.h:
+       * sys/v4l2/Makefile.am:
+       * sys/v4l2/gstv4l2.c: (plugin_init):
+       * sys/v4l2/gstv4l2element.c: (gst_v4l2element_get_type),
+       (gst_v4l2element_init), (gst_v4l2element_dispose),
+       (gst_v4l2element_change_state):
+       * sys/v4l2/gstv4l2element.h:
+       * sys/v4l2/gstv4l2xoverlay.c: (gst_v4l2_xoverlay_open),
+       (gst_v4l2_xoverlay_close), (idle_refresh),
+       (gst_v4l2_xoverlay_set_xwindow_id):
+       * sys/v4l2/gstv4l2xoverlay.h:
+       * sys/v4l2/v4l2-overlay_calls.c:
+       * sys/v4l2/v4l2_calls.h:
+         Remove client-side overlay handling, use the X-server v4l plugin
+         for that. Nicer overlay, less code. Also make the plugin
+         compileable without X (but then without overlay, obviously).
+         Makes xwindowlistener obsolete, should we remove that?
+
+2004-10-25  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/oss/gstosssrc.c: (gst_osssrc_get_time), (gst_osssrc_get),
+       (gst_osssrc_src_query):
+       * sys/oss/gstosssrc.h:
+         OK, so people want offset in DEFAULT. This time, actually fix all
+         cases.
+       * sys/v4l2/gstv4l2src.c: (gst_v4l2src_getcaps):
+         Add FPS properly.
+
+2004-10-24  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/asfdemux/gstasfmux.c:
+       * gst/avi/gstavimux.c:
+         Framerate.
+
+2004-10-24  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/v4l2/gstv4l2element.c: (gst_v4l2element_set_property):
+         Fix properties (channel, norm, frequency).
+
+2004-10-24  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/v4l2/gstv4l2element.c: (gst_v4l2element_get_property):
+         Flag typo.
+       * sys/v4l2/v4l2_calls.c: (gst_v4l2_set_defaults):
+         No warnings.
+
+2004-10-24  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_clear_format_list):
+         Fix hang.
+
+2004-10-24  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/v4l2/gstv4l2element.h:
+         Yet Another Hack (tm) for kernel header borkedness.
+       * sys/v4l2/gstv4l2src.c: (gst_v4l2src_init),
+       (gst_v4l2src_v4l2fourcc_to_caps), (gst_v4l2_fourcc_from_structure),
+       (gst_v4l2src_link), (gst_v4l2src_getcaps),
+       (gst_v4l2src_change_state):
+       * sys/v4l2/gstv4l2src.h:
+       * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_capture_init),
+       (gst_v4l2src_capture_start), (gst_v4l2src_capture_stop):
+         Fix caps, keep track of state, work.
+
+2004-10-24  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_getcaps):
+         Quiet.
+
+2004-10-24  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/oss/gstosssrc.c: (gst_osssrc_get):
+         Don't mix bytes and samples.
+
+2004-10-24  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggmux.c:
+         Basic pad template which accepts OGM tracks, speex, flac, vorbis
+         and theora. Any is incorrect.
+       * gst/asfdemux/gstasfmux.c: (gst_asfmux_vidsink_link):
+         Fix caps.
+       * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_base_init):
+       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_base_init),
+       (gst_v4lmjpegsrc_init), (gst_v4lmjpegsrc_srcconnect),
+       (gst_v4lmjpegsrc_getcaps), (gst_v4lmjpegsrc_change_state):
+       * sys/v4l/gstv4lmjpegsrc.h:
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_src_link), (gst_v4lsrc_getcaps),
+       (gst_v4lsrc_change_state):
+       * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_capture_start),
+       (gst_v4lmjpegsrc_capture_stop):
+         Fix caps. Keep track of internal state. Work.
+
+2004-10-23  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/Makefile.am:
+         Fix the build fixes.
+
+2004-10-23  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
+       (gst_ogg_demux_src_event), (_find_chain_seek),
+       (gst_ogg_pad_push):
+         Check for pad availability before using it.
+       * ext/ogg/gstoggdemux.c: (_find_chain_process):
+         Fix parsing of chained ogg. Needs more work on the decoder side.
+
+2004-10-22  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst/spectrum/Makefile.am:
+       * gst/spectrum/demo-osssrc.c: (spectrum_chain), (main),
+       (idle_func):
+         Fix demo and reenable it. Yes, I'm currently playing with audio
+         analysis tools
+
+2004-10-22  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
+         We love it if files that start at zero work too...
+
+2004-10-22  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_iterate):
+         Handle files with missing EOS headers.
+
+2004-10-21  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * gst/tcp/gsttcpserversink.c:
+       (gst_tcpserversink_handle_server_read),
+       (gst_tcpserversink_init_send):
+       Zero some variables first (need for accept not to return EINVAL)
+
+2004-10-20  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
+       (gst_ogg_demux_src_event), (gst_ogg_pad_push):
+       * ext/theora/theoradec.c: (theora_dec_sink_convert),
+       (theora_dec_chain):
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_get_formats),
+       (gst_vorbis_dec_init), (vorbis_dec_convert), (vorbis_dec_chain):
+         Seeking and querying finetune.
+
+2004-10-20  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+       * ext/Makefile.am:
+       * ext/raw1394/Makefile.am:
+         fix the build
+
+2004-10-20  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_iterate):
+         Wrong return.
+       * gst/playback/Makefile.am:
+       * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init):
+       * gst/playback/gstplay-marshal.list:
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init):
+         Fix marshallers.
+
+2004-10-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event):
+         Silence.
+
+2004-10-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
+       (gst_ogg_demux_src_event), (gst_ogg_pad_populate),
+       (gst_ogg_pad_push):
+         Yay for non-lineair granulepos in theora.
+
+2004-10-18  Wim Taymans  <wim@fluendo.com>
+
+       * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_video_getcaps),
+       (gst_dvdec_video_link), (gst_dvdec_push), (gst_dvdec_loop):
+       * ext/dv/gstdvdec.h:
+       Make sure we renegotiate aspect ratio when the camera switches.
+
+2004-10-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
+       (gst_ogg_demux_src_event), (gst_ogg_pad_push):
+         Start at zero.
+       * ext/theora/theoradec.c: (theora_dec_chain):
+         Skip headers. Bad idea for chained ogg, but fixes seeking.
+
+2004-10-18  Wim Taymans  <wim@fluendo.com>
+
+       * configure.ac:
+       I swear, this is the last time I touch this.
+
+2004-10-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
+       (gst_ogg_demux_src_event), (gst_ogg_pad_populate),
+       (_read_bos_process), (gst_ogg_demux_iterate), (gst_ogg_pad_new):
+         Faster seeking.
+       * ext/theora/theoradec.c: (theora_dec_sink_convert):
+         Time-to-default conversion.
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
+         Don't error on unknown packets, just skip. We should probably
+         read them if we want to support chained ogg.
+
+2004-10-18  Wim Taymans  <wim@fluendo.com>
+
+       * configure.ac:
+       Added cdaudio to wrong list.
+
+2004-10-18  Wim Taymans  <wim@fluendo.com>
+
+       * configure.ac:
+       Revive cdaudio.
+
+2004-10-18  Wim Taymans  <wim@fluendo.com>
+
+       * ext/dv/gstdvdec.c: (gst_dvdec_video_getcaps),
+       (gst_dvdec_video_link), (gst_dvdec_push):
+       * ext/jpeg/gstsmokeenc.c: (gst_smokeenc_class_init),
+       (gst_smokeenc_resync), (gst_smokeenc_chain):
+       Fix mimetype on smoke encoder.
+       Add aspect ratio to dvdec. Not sure if these
+       values are correct though....
+
+2004-10-18  Wim Taymans  <wim@fluendo.com>
+
+       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_class_init):
+       Fix vorbis property descriptions and ranges.
+
+2004-10-18  Wim Taymans  <wim@fluendo.com>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_iterate):
+       Really do nothing when no data is available.
+       Go to the playing state when the stream is not seekable
+       instead of failing.
+
+2004-10-18  Wim Taymans  <wim@fluendo.com>
+
+       * ext/cdaudio/gstcdaudio.c: (_do_init), (gst_cdaudio_base_init),
+       (gst_cdaudio_get_event_masks), (gst_cdaudio_send_event),
+       (gst_cdaudio_query), (plugin_init), (cdaudio_uri_get_type),
+       (cdaudio_uri_get_protocols), (cdaudio_uri_get_uri),
+       (cdaudio_uri_set_uri), (cdaudio_uri_handler_init):
+       Added uri handler for cd://
+       Port to new API.
+
+2004-10-18  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init),
+       (gst_decode_bin_init), (find_compatibles), (close_pad_link),
+       (try_to_link_1), (no_more_pads), (close_link), (type_found):
+       * gst/playback/gstplaybasebin.c: (gen_preroll_element),
+       (remove_prerolls), (unknown_type), (add_element_stream),
+       (new_decoded_pad), (setup_source), (gst_play_base_bin_add_element),
+       (gst_play_base_bin_remove_element),
+       (gst_play_base_bin_link_stream):
+       * gst/playback/gstplaybin.c: (gen_video_element),
+       (gen_vis_element), (remove_sinks), (setup_sinks):
+       * gst/playback/gststreaminfo.c: (gst_stream_type_get_type),
+       (gst_stream_info_get_type), (gst_stream_info_class_init),
+       (gst_stream_info_init), (gst_stream_info_new),
+       (gst_stream_info_dispose), (stream_info_mute_pad),
+       (gst_stream_info_set_property), (gst_stream_info_get_property):
+       * gst/playback/gststreaminfo.h:
+       Add sink padtemplate to decodebin.
+       Added some more comments.
+       Make queue size configurable in playbasebin.
+       Added possibility to use elements as sinks (ex cdaudio).
+
+2004-10-15  Wim Taymans  <wim@fluendo.com>
+
+       * ext/speex/gstspeexenc.c: (gst_speexenc_class_init),
+       (gst_speexenc_chain):
+       Fix speex timestamps so that it gets muxed properly.
+
+2004-10-15  Wim Taymans  <wim@fluendo.com>
+
+       * ext/raw1394/gstdv1394src.c: (gst_dv1394src_get_type),
+       (gst_dv1394src_base_init), (gst_dv1394src_class_init),
+       (gst_dv1394src_init), (gst_dv1394src_dispose),
+       (gst_dv1394src_iso_receive), (gst_dv1394src_discover_avc_node),
+       (gst_dv1394src_change_state), (gst_dv1394src_get_event_mask),
+       (gst_dv1394src_event), (gst_dv1394src_get_formats),
+       (gst_dv1394src_convert), (gst_dv1394src_get_query_types),
+       (gst_dv1394src_query), (gst_dv1394src_uri_get_type),
+       (gst_dv1394src_uri_get_protocols), (gst_dv1394src_uri_get_uri),
+       (gst_dv1394src_uri_set_uri), (gst_dv1394src_uri_handler_init):
+       * ext/raw1394/gstdv1394src.h:
+       Added conversion/query functions.
+       Update buffer timestamps,
+       Added signals.
+       Added uri dv:// so it might play from the firewire in playbin.
+       Fix a possible leak.
+       Added debugging.
+
+2004-10-15  Wim Taymans  <wim@fluendo.com>
+
+       * ext/raw1394/gstdv1394src.c: (gst_dv1394src_class_init),
+       (gst_dv1394src_init), (gst_dv1394src_set_property),
+       (gst_dv1394src_get_property), (gst_dv1394src_iso_receive),
+       (gst_dv1394src_discover_avc_node), (gst_dv1394src_change_state):
+       * ext/raw1394/gstdv1394src.h:
+       Added AV/C VTR control support needed for some cameras.
+       Added automatic port detection.
+       Added properties for selecting the channel.
+       The configure.ac script is not yet updated to reflect the
+       new libavc1394 and librom1394 dependencies.
+
+2004-10-15  Wim Taymans  <wim@fluendo.com>
+
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
+       (qtdemux_parse), (gst_qtdemux_handle_esds):
+       An esds box is not a container.
+       Fix parsing of mp4v boxes.
+       Do not try to renegotiate fps for each frame. Need to
+       find a better method. This should fix mp4 playback.
+
+2004-10-14  David Schleef  <ds@schleef.org>
+
+       * configure.ac: update for swfdec-0.3 and liboil-0.2
+       * ext/swfdec/gstswfdec.c: update for swfdec-0.3
+       * ext/swfdec/gstswfdec.h: same
+       * gst/videofilter/gstvideobalance.c: update for liboil-0.2
+       * gst/videotestsrc/videotestsrc.c: same
+
+2004-10-14  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_add),
+       (gst_multifdsink_remove), (gst_multifdsink_remove_client_link),
+       (is_sync_frame), (gst_multifdsink_new_client),
+       (gst_multifdsink_handle_client_write),
+       (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
+       (gst_multifdsink_handle_clients), (gst_multifdsink_change_state):
+       Turn warnings into info.
+       Don't allow a state change in the streaming thread.
+
+2004-10-14  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/vorbis/oggvorbisenc.c:
+       * ext/vorbis/vorbisdec.c:
+         fix template sample rate
+
+2004-10-13  Wim Taymans  <wim@fluendo.com>
+
+       * ext/mad/gstmad.c: (gst_mad_check_caps_reset), (gst_mad_chain):
+       Decoding the header first fixes some problems in resyncing
+       in more mp3s.
+
+2004-10-12  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/gstplaybin.c: (gen_video_element),
+       (gen_vis_element), (remove_sinks), (setup_sinks):
+       Added vis plugin support, need to configure the vis
+       element to activate it.
+
+2004-10-12  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_get),
+       (gst_gnomevfssrc_srcpad_query), (gst_gnomevfssrc_srcpad_event):
+         Some debug.
+       * gst/avi/gstavidemux.c: (gst_avi_demux_reset),
+       (gst_avi_demux_handle_src_event), (gst_avi_demux_read_superindex),
+       (gst_avi_demux_read_subindexes), (gst_avi_demux_add_stream),
+       (gst_avi_demux_stream_index), (gst_avi_demux_skip),
+       (gst_avi_demux_sync), (gst_avi_demux_stream_scan),
+       (gst_avi_demux_massage_index), (gst_avi_demux_stream_header):
+       * gst/avi/gstavidemux.h:
+         Support for openDML-2.0 indx/ix## chunks. Support for broken index
+         recovery (where, if part of the index is broken, we will still read
+         the rest of the index and recover the broken part by stream
+         scanning). More broken media support. EOS workarounds. General AVI
+         braindamage headache recovery. Aspirin included.
+
+2004-10-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_open),
+       (cdparanoia_event), (cdparanoia_query):
+         Get rid of hideous lead-in.
+
+2004-10-11  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/gstplaybasebin.c: (setup_source):
+       Wrong var used to get g_list_next.
+
+2004-10-11  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_class_init),
+       (cdparanoia_get), (cdparanoia_open):
+         Report discid as metadata, add duration.
+
+2004-10-11  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/gstplaybasebin.c: (setup_source):
+       Cleanup the previous pipeline a little earlier for the
+       case that a source element provides raw data.
+
+2004-10-11  Benjamin Otte  <otte@gnome.org>
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
+         reset v1 tag offset when there is no v1 tag. Fixes id3demux always
+         consuming the last 128 bytes, even though it was valid mp3 data.
+
+2004-10-10  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_palette_to_caps),
+       (gst_v4lsrc_getcaps), (gst_v4lsrc_get):
+       * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay):
+       Change g_warnings to GST_WARNING_OBJECT and fix colourspace issue
+
+2004-10-10  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_src_link), (gst_v4lsrc_getcaps):
+       Fix for webcams that support only specific width or height
+
+2004-10-09  Tim-Philipp Müller  <t.i.m@zen.co.uk>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/wavenc/gstwavenc.c: (gst_wavenc_stop_file):
+         Fix wrong discont event setup (fixes #154967).
+
+2004-10-09  Sebastien Cote  <sc5@hermes.usherb.ca>
+
+       Reviewed by:  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/auparse/gstauparse.c: (gst_auparse_chain):
+         Error out on invalid data (fixes #154807).
+
+2004-10-09  Tim-Philipp Müller  <t.i.m@zen.co.uk>
+
+       Reviewed by: Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/dvdread/dvdreadsrc.c: (_read):
+         Make titles > 0 work again (fixes #154834).
+
+2004-10-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-media.c:
+       (gst_riff_create_video_template_caps):
+         WMV3 missing in template caps.
+
+2004-10-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_massage_index):
+         OK, so the original code was too strict. It makes random AVI files
+         hang for seconds upon opening, which is unacceptable and is far
+         beyond the original goal of getting multiple chunks for one-chunk
+         sounc stream files. So now do just that.
+
+2004-10-09  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c: (setup_source),
+       (gst_play_base_bin_change_state):
+         Actually clean up streaminfo if output fails. This would trigger
+         if, for example, there was no CD in the drive. No preroll, so
+         a streaminfo structure is created, but the subsequent state change
+         of the thread fails.
+       * gst/playback/gstplaybin.c: (gst_play_bin_change_state):
+         Don't change state if parent failed.
+
+2004-10-08  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybin.c: (gst_play_bin_class_init),
+       (gst_play_bin_init), (gst_play_bin_get_property), (handoff),
+       (gen_video_element), (remove_sinks):
+         Add small bits of code for screenshot handling.
+
+2004-10-08  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/gstplaybin.c: (gst_play_bin_set_property),
+       (gen_video_element), (gen_audio_element), (setup_sinks):
+       Don't assume the user provided sinks are named "sink"...
+
+2004-10-08  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/gstplaybasebin.c: (gen_preroll_element),
+       (unknown_type), (setup_source), (gst_play_base_bin_remove_element),
+       (gst_play_base_bin_link_stream):
+       Do not try to autoplug sources that generate raw streams like
+       cdparanoia.
+       disconnect the preroll overrun signal when we don't need it anymore.
+
+2004-10-08  Milosz Derezynski  <internalerror.rez@fhtw-berlin.de>
+
+       * ext/cdparanoia/gstcdparanoia.c: (_do_init),
+       Added reworked patch from #154903 from milosz derezynski (deadchip).
+
+2004-10-08  Wim Taymans  <wim@fluendo.com>
+
+       * ext/cdparanoia/gstcdparanoia.c: (_do_init),
+       (cdparanoia_base_init), (cdparanoia_class_init), (cdparanoia_init),
+       (cdparanoia_dispose), (cdparanoia_get), (cdparanoia_change_state),
+       (cdparanoia_convert), (cdparanoia_uri_get_type),
+       (cdparanoia_uri_get_protocols), (cdparanoia_uri_get_uri),
+       (cdparanoia_uri_set_uri), (cdparanoia_uri_handler_init):
+       * ext/cdparanoia/gstcdparanoia.h:
+       This adds the cdda://<tracknum> uri.
+
+2004-10-08  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/gstdecodebin.c: (gst_decode_bin_class_init),
+       (gst_decode_bin_init), (find_compatibles), (close_pad_link),
+       (try_to_link_1), (no_more_pads), (close_link), (type_found):
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
+       (unknown_type), (gst_play_base_bin_remove_element),
+       (gst_play_base_bin_link_stream):
+       * gst/playback/gstplaybasebin.h:
+       * gst/playback/gstplaybin.c: (gst_play_bin_init),
+       (gst_play_bin_set_property), (gen_video_element),
+       (gen_audio_element), (setup_sinks):
+       * gst/playback/gststreaminfo.c: (gst_stream_type_get_type),
+       (gst_stream_info_get_type), (gst_stream_info_class_init),
+       (gst_stream_info_init), (gst_stream_info_new),
+       (gst_stream_info_dispose), (stream_info_mute_pad),
+       (gst_stream_info_set_property), (gst_stream_info_get_property):
+       * gst/playback/gststreaminfo.h:
+       Reuse the audio and video bins.
+       Some internal cleanups in the stream selection code.
+
+2004-10-08  Julien MOUTTE  <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_sink_link),
+       (gst_ximagesink_set_xwindow_id), (gst_ximagesink_init):
+       * sys/ximage/ximagesink.h:
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_sink_link),
+       (gst_xvimagesink_set_xwindow_id), (gst_xvimagesink_init):
+       * sys/xvimage/xvimagesink.h: Reverting Ronald's changes as the issue is
+       not coming from those elements. Moreover these elements should not keep
+       the xid they have been given when in NULL state.
+
+2004-10-07  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_sink_link),
+       (gst_ximagesink_set_xwindow_id), (gst_ximagesink_init):
+       * sys/ximage/ximagesink.h:
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_sink_link),
+       (gst_xvimagesink_set_xwindow_id), (gst_xvimagesink_init):
+       * sys/xvimage/xvimagesink.h:
+         Actually only create a new toplevel window if we're not gonna
+         embed it right after.
+
+2004-10-07  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/gstplaybasebin.c: (play_base_bin_mute_pad),
+       (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream):
+       * gst/playback/gstplaybin.c: (setup_sinks):
+       Implement muting/unmuting of streams, mute streams that are not
+       used.
+
+2004-10-07  Wim Taymans  <wim@fluendo.com>
+
+       * gst/typefind/gsttypefindfunctions.c: (ac3_type_find),
+       (plugin_init):
+       Added lame audio/x-ac3 typefind function.
+
+2004-10-06  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
+
+       * configure.ac:
+         bump nano to cvs
+
+=== release 0.8.5 ===
+
+2004-10-06  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
+
+       * NEWS:
+       * RELEASE:
+       * configure.ac:
+         releasing 0.8.5, "Take You On"
+
+2004-10-06  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/gstdecodebin.c: (gst_decode_bin_init),
+       (find_compatibles), (close_pad_link), (try_to_link_1), (new_pad),
+       (no_more_pads), (close_link), (type_found):
+       * gst/playback/gstplaybasebin.c: (new_decoded_pad):
+       * gst/playback/gstplaybin.c: (gen_video_element):
+       Do not signal the no_more_pads after the first pad when
+       we are plugging a non dynamic element with multiple
+       output pads (like swfdec, dvdec, ...).
+
+2004-10-06  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+         bump for prerelease
+
+2004-10-06  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
+
+       * gst/wavparse/gstwavparse.c:
+         add ATRAC3 to STATIC CAPS to fix a warning
+
+       * gst/matroska/ebml-read.c:
+       * gst-libs/gst/riff/riff-read.c:
+         fix typos
+
+2004-10-06  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
+
+       * gst-libs/gst/riff/riff-media.c:
+         generate caps for ATRAC3 audio streams
+
+       * gst/realmedia/rmdemux.c:
+         generate caps for ATRAC3 audio streams
+
+2004-10-06  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
+
+       * gst/wavparse/Makefile.am
+       * gst/wavparse/riff.h
+       * gst/wavparse/wavparse.vcproj
+         riff.h removal (unused and duplication with riff-ids.h)
+
+2004-10-06  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
+
+       * gst/wavparse/gstwavparse.h
+         remove duplicated defines for audio codec codes
+
+       * gst-libs/gst/riff/riff-ids.h
+       * gst/wavenc/riff.h:
+         add "4CC" code for ATRAC3 audio streams
+         add "4CC" code for ITU_G721_ADPCM (unused for now)
+
+2004-10-06  Wim Taymans  <wim@fluendo.com>
+
+       * gst/flx/gstflxdec.c: (gst_flxdec_init), (gst_flxdec_loop):
+       Actually _do_ negotiation. Pass gdouble as arg instead
+       of guint64 for the framerate.
+
+2004-10-06  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/gstdecodebin.c: (gst_decode_bin_init),
+       (find_compatibles), (close_pad_link), (try_to_link_1),
+       (no_more_pads), (close_link), (type_found):
+       * gst/playback/gstplaybasebin.c: (new_decoded_pad):
+       * gst/playback/gstplaybin.c: (gen_video_element),
+       (gen_audio_element):
+       Set state on newly added element to READY so that negotiation
+       can happen ASAP.
+       Addes some more debug info.
+       Do not try to plug pads with multiple caps structures or ANY
+       because it is too dangerous since we do not do dynamic
+       replugging.
+
+2004-10-06  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       written by: Gora Mohanty <gora_mohanty@yahoo.co.in>
+
+       * po/LINGUAS:
+       * po/or.po:
+         add Oriya translation
+
+2004-10-05  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_massage_index):
+         Prevent overwrite of size member. Makes audio sound crappy.
+
+2004-10-05  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
+
+       * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+       Add rmvb to the list of known RealMedia extensions
+
+2004-10-05  Wim Taymans  <wim@fluendo.com>
+
+       * ext/libmng/gstmngdec.c: (gst_mngdec_loop), (mngdec_error),
+       (mngdec_openstream), (mngdec_closestream),
+       (mngdec_handle_sink_event), (mngdec_readdata),
+       (mngdec_gettickcount), (mngdec_settimer), (mngdec_processheader),
+       (mngdec_getcanvasline), (mngdec_refresh),
+       (gst_mngdec_change_state):
+       Set the framerate correctly.
+
+2004-10-04  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_massage_index):
+         There was something wrong with the index massaging.
+
+2004-10-04  Wim Taymans  <wim@fluendo.com>
+
+       * ext/jpeg/gstjpeg.c: (smoke_type_find), (plugin_init):
+       * ext/jpeg/gstsmokedec.c: (gst_smokedec_init),
+       (gst_smokedec_chain):
+       * ext/jpeg/gstsmokedec.h:
+       * ext/jpeg/gstsmokeenc.c: (gst_smokeenc_class_init),
+       (gst_smokeenc_init), (gst_smokeenc_resync), (gst_smokeenc_chain):
+       * ext/jpeg/gstsmokeenc.h:
+       * ext/jpeg/smokecodec.c: (smokecodec_encode_new),
+       (smokecodec_decode_new), (smokecodec_info_free),
+       (smokecodec_set_quality), (smokecodec_get_quality),
+       (smokecodec_set_threshold), (smokecodec_get_threshold),
+       (smokecodec_set_bitrate), (smokecodec_get_bitrate),
+       (find_best_size), (abs_diff), (put), (smokecodec_encode_id),
+       (smokecodec_encode), (smokecodec_parse_id),
+       (smokecodec_parse_header), (smokecodec_decode):
+       * ext/jpeg/smokecodec.h:
+       * ext/jpeg/smokeformat.h:
+       Updated smoke, new bitstream, allows embedding in ogg.
+
+2004-10-04  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_event):
+         Fix seeking in some files. All this code is no longer needed (and
+         actually breaks stuff) because we now synchronize the full index
+         right when reading the header.
+
+2004-10-04  Wim Taymans  <wim@fluendo.com>
+
+       * configure.ac:
+       configure update for libmng.
+
+2004-10-04  Wim Taymans  <wim@fluendo.com>
+
+       * ext/libmng/Makefile.am:
+       * ext/libmng/gstmng.c: (plugin_init):
+       * ext/libmng/gstmng.h:
+       * ext/libmng/gstmngdec.c: (gst_mngdec_get_type),
+       (gst_mngdec_base_init), (gst_mngdec_class_init),
+       (gst_mngdec_sinklink), (gst_mngdec_init), (gst_mngdec_src_getcaps),
+       (gst_mngdec_loop), (gst_mngdec_get_property),
+       (gst_mngdec_set_property), (mngdec_error), (mngdec_openstream),
+       (mngdec_closestream), (mngdec_handle_sink_event),
+       (mngdec_readdata), (mngdec_gettickcount), (mngdec_settimer),
+       (mngdec_processheader), (mngdec_getcanvasline), (mngdec_refresh),
+       (gst_mngdec_change_state):
+       * ext/libmng/gstmngdec.h:
+       * ext/libmng/gstmngenc.c: (gst_mngenc_get_type),
+       (mng_caps_factory), (raw_caps_factory), (gst_mngenc_base_init),
+       (gst_mngenc_class_init), (gst_mngenc_sinklink), (gst_mngenc_init),
+       (gst_mngenc_chain), (gst_mngenc_get_property),
+       (gst_mngenc_set_property):
+       * ext/libmng/gstmngenc.h:
+       Added basic MNG decoder. Needs more work. The encoder does
+       not work yet.
+
+2004-10-04  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/realmedia/rmdemux.c: (gst_rmdemux_handle_sink_event),
+       (gst_rmdemux_loop), (gst_rmdemux_add_stream),
+       (gst_rmdemux_parse_mdpr), (gst_rmdemux_dump_mdpr):
+         Don't hang on length=0 chunks. Some negotiation fixes. Signal
+         no-more-pads.
+
+2004-10-04  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+         you need at least 1.0.4 of speex
+
+2004-10-04 Iain <iaingnome@gmail.com>
+
+       * ext/speex/gstspeexdec.h: Revert the includes changes.
+
+       * ext/speex/gstspeexenc.[ch]: Revert the includes changes.
+
+2004-09-30 Iain <iaingnome@gmail.com>
+
+       * sys/sunaudio/gstsunaudio.c (gst_sunaudiosink_open): Use the device
+       found during init or set as a property instead of hardcoding /dev/audio
+
+2004-10-04  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/realmedia/rmdemux.c: (gst_rmdemux_class_init),
+       (gst_rmdemux_init), (gst_rmdemux_handle_sink_event),
+       (gst_rmdemux_loop), (gst_rmdemux_add_stream), (re_hexdump_bytes),
+       (re_dump_pascal_string), (gst_rmdemux_dump__rmf),
+       (gst_rmdemux_dump_prop), (gst_rmdemux_parse_mdpr),
+       (gst_rmdemux_dump_mdpr), (gst_rmdemux_dump_indx),
+       (gst_rmdemux_dump_data):
+         Use debug category, fix EOS handling. filesrc ! rmdemux now
+         works.
+
+2004-10-04  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index),
+       (gst_avi_demux_stream_scan), (sort), (gst_avi_demux_massage_index),
+       (gst_avi_demux_stream_header), (gst_avi_demux_stream_data):
+         Improve allocation, cutting and sorting of the index. How takes a
+         few seconds instead of minutes.
+
+2004-10-03  Christophe Fergeau  <teuf@gnome.org>
+
+       * gst/realmedia/rmdemux.c: (gst_rmdemux_parse_mdpr):
+         fixed compilation
+
+2004-10-02  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-media.c:
+       (gst_riff_create_video_caps_with_data),
+       (gst_riff_create_video_template_caps):
+         Add wing commander format mimetype/fourccs.
+       * gst/avi/gstavidemux.c: (gst_avi_demux_massage_index):
+         Don't crash if some value is 0.
+
+2004-10-02  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-media.c:
+       (gst_riff_create_video_caps_with_data),
+       (gst_riff_create_video_template_caps):
+         Add DIB fourcc (raw, palettized 8-bit RGB).
+       * gst-libs/gst/riff/riff-read.c:
+       (gst_riff_read_strf_vids_with_data):
+         Oops, fix strf_data reading bug.
+       * gst/avi/gstavidemux.c: (gst_avi_demux_add_stream):
+         Use a non-NULL tag.
+       * gst/qtdemux/qtdemux.c: (qtdemux_parse_trak):
+         Time for hacks. Sorry Dave. At least one quicktime movie (a
+         trailer) that I've encountered contains multiple video tracks.
+         One of those is the actual video track, the other are one-frame
+         tracks (images). Unfortunately, the number of frames according
+         to the trak header is 1 for each, so that doesn't help. So
+         instead, I look at the duration and discard tracks with a
+         duration shorter than 20% of the length of the stream. Better
+         than nothing.
+
+2004-10-01  Christian Schaller <christian@fluendo.com>
+
+       * ext/ivorbis/vorbis.c:
+         Patch from Phil Blundell (Bug 152341)
+
+2004-10-01  Wim Taymans  <wim@fluendo.com>
+
+       * ext/speex/gstspeexdec.c: (gst_speex_dec_class_init),
+       (speex_dec_get_formats), (speex_dec_convert),
+       (speex_dec_src_query), (speex_dec_src_event), (speex_dec_event),
+       (speex_dec_chain), (gst_speexdec_get_property),
+       (gst_speexdec_set_property):
+       Small cleanups.
+
+2004-10-01  Wim Taymans  <wim@fluendo.com>
+
+       * gst/wavparse/gstwavparse.c: (gst_wavparse_class_init),
+       (gst_wavparse_stream_init), (gst_wavparse_fmt),
+       (gst_wavparse_other), (gst_wavparse_loop),
+       (gst_wavparse_pad_convert), (gst_wavparse_pad_query),
+       (gst_wavparse_srcpad_event):
+       * gst/wavparse/gstwavparse.h:
+       Added some more debugging info.
+       Fix the case where the length of the file is 0.
+       Make sure we seek to sample borders.
+
+2004-10-01  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/README:
+       * gst/playback/gstdecodebin.c: (gst_decode_bin_factory_filter),
+       (gst_decode_bin_init), (find_compatibles), (close_pad_link),
+       (try_to_link_1), (no_more_pads), (close_link), (type_found):
+       Add some debug info to decodebin, update README
+
+2004-10-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/dvdnav/dvdnavsrc.c: (dvdnav_handle_navigation_event):
+         Don't use g_print(); use GST_DEBUG().
+
+2004-10-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
+       (gst_ogg_mux_queue_pads):
+         Handle EOS properly.
+
+2004-10-01  Sebastien Cote  <sc5@hermes.usherb.ca>
+
+       Reviewed by: Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/faad/gstfaad.c: (gst_faad_init), (gst_faad_sinkconnect),
+       (gst_faad_chain), (gst_faad_change_state):
+       * ext/faad/gstfaad.h:
+         Allow playback of raw (unframed) MPEG AAC files (#148993).
+
+2004-10-01  Sebastien Cote  <sc5@hermes.usherb.ca>
+
+       Reviewed by: Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/wavparse/gstwavparse.c: (gst_wavparse_fmt):
+         Throw error if we didn't recognize the stream. Fixes #152289.
+
+2004-10-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/videoscale/gstvideoscale.c: (gst_videoscale_link):
+         Fix negotiation.
+
+2004-10-01  Francis Labonte  <francis_labonte@hotmail.com>
+
+       Reviewed by: Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/wavparse/gstwavparse.c: (gst_wavparse_fmt):
+         Fix memleak.
+
+2004-10-01  Balamurali Viswanathan  <balamurali.viswanathan@wipro.com>
+
+       Reviewed by: Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/sunaudio/gstsunaudio.c: (gst_sunaudiosink_setparams):
+         Solve #152805.
+       * sys/sunaudio/gstsunmixer.c: (gst_sunaudiomixer_set_mute):
+         Solve 152806.
+
+2004-10-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-media.c:
+       (gst_riff_create_video_caps_with_data),
+       (gst_riff_create_audio_caps_with_data):
+         Add codec_data handling (like asfdemux used to do).
+       * gst/asfdemux/gstasf.c: (plugin_init):
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init),
+       (gst_asf_demux_add_audio_stream), (gst_asf_demux_add_video_stream):
+         Use riff-media for caps creation instead of our own (mostly
+         broken) copy of its functions.
+
+2004-10-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_try_capture):
+         Don't actually error out if we get another return value than
+         -EINVAL. Opposite to what I first thought, drivers have random
+         return values for this, although -EINVAL is the expected return
+         value. Since this is not fatal, we shouldn't use
+         GST_ELEMENT_ERROR() but just GST_ERROR_OBJECT().
+
+2004-10-01  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/dvdread/dvdreadsrc.c: (dvdreadsrc_class_init),
+       (dvdreadsrc_init), (dvdreadsrc_dispose), (dvdreadsrc_set_property),
+       (dvdreadsrc_get_property), (_open), (_seek), (_read),
+       (dvdreadsrc_get), (dvdreadsrc_open_file),
+       (dvdreadsrc_change_state):
+         Fix. Don't do one big huge loop around the whole DVD, that will
+         cache all data and thus eat sizeof(dvd) (several GB) before we
+         see something.
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_seek):
+         Actually NULL'ify event after using it.
+       * gst/matroska/ebml-read.c: (gst_ebml_read_use_event),
+       (gst_ebml_read_handle_event), (gst_ebml_read_element_id),
+       (gst_ebml_read_element_length), (gst_ebml_read_element_data),
+       (gst_ebml_read_seek), (gst_ebml_read_skip):
+         Handle events.
+       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_base_init),
+       (gst_dvd_demux_init), (gst_dvd_demux_get_audio_stream),
+       (gst_dvd_demux_get_subpicture_stream), (gst_dvd_demux_plugin_init):
+         Fix timing (this will probably break if I seek using menus, but
+         I didn't get there yet). VOBs and normal DVDs should now work.
+         Add a mpeg2-only pad with high rank so this get autoplugged for
+         MPEG-2 movies.
+       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_base_init),
+       (gst_mpeg_demux_class_init), (gst_mpeg_demux_init),
+       (gst_mpeg_demux_new_output_pad), (gst_mpeg_demux_get_video_stream),
+       (gst_mpeg_demux_get_audio_stream),
+       (gst_mpeg_demux_get_private_stream), (gst_mpeg_demux_parse_packet),
+       (gst_mpeg_demux_parse_pes), (gst_mpeg_demux_plugin_init):
+         Use this as second rank for MPEG-1 and MPEG-2. Still use this for
+         MPEG-1 but use dvddemux for MPEG-2.
+       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_class_init),
+       (gst_mpeg_parse_init), (gst_mpeg_parse_new_pad),
+       (gst_mpeg_parse_parse_packhead):
+         Timing. Only add pad template if it exists. Add sink template from
+         class and not from ourselves. This means we will always use the
+         correct sink template even if it is not the one defined in this
+         file.
+
+2004-09-29  Wim Taymans  <wim@fluendo.com>
+
+       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_packet),
+       (gst_mpeg_demux_parse_pes):
+       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead):
+       Fix playback of mpeg again, timestamps where screwed up by
+       patch 1.61.
+
+2004-09-29  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/flac/gstflacdec.c: (gst_flacdec_src_query):
+         Only return true if we actually filled something in. Prevents
+         player applications from showing a random length for flac files.
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_class_init),
+       (gst_riff_read_use_event), (gst_riff_read_handle_event),
+       (gst_riff_read_seek), (gst_riff_read_skip), (gst_riff_read_strh),
+       (gst_riff_read_strf_vids_with_data),
+       (gst_riff_read_strf_auds_with_data), (gst_riff_read_strf_iavs):
+         OK, ok, so I implemented event handling. Apparently it's normal
+         that we receive random events at random points without asking
+         for it.
+       * gst/avi/gstavidemux.c: (gst_avi_demux_reset),
+       (gst_avi_demux_src_convert), (gst_avi_demux_handle_src_query),
+       (gst_avi_demux_handle_src_event), (gst_avi_demux_stream_index),
+       (gst_avi_demux_sync), (gst_avi_demux_stream_scan),
+       (gst_avi_demux_massage_index), (gst_avi_demux_stream_header),
+       (gst_avi_demux_handle_seek), (gst_avi_demux_process_next_entry),
+       (gst_avi_demux_stream_data), (gst_avi_demux_loop):
+       * gst/avi/gstavidemux.h:
+         Implement non-lineair chunk handling and subchunk processing.
+         The first solves playback of AVI files where the audio and video
+         data of individual buffers that we read are not synchronized.
+         This should not happen according to the wonderful AVI specs, but
+         of course it does happen in reality. It is also a prerequisite for
+         the second. Subchunk processing allows us to cut chunks in small
+         pieces and process each of these pieces separately. This is
+         required because I've seen several AVI files with incredibly large
+         audio chunks, even some files with only one audio chunk for the
+         whole file. This allows for proper playback including seeking.
+         This patch is supposed to fix all AVI A/V sync issues.
+       * gst/flx/gstflxdec.c: (gst_flxdec_class_init),
+       (flx_decode_chunks), (flx_decode_color), (gst_flxdec_loop):
+         Work.
+       * gst/modplug/gstmodplug.cc:
+         Proper return value setting for the query() function.
+       * gst/playback/gstplaybasebin.c: (setup_source):
+         Being in non-playing state (after, e.g., EOS) is not necessarily
+         a bad thing. Allow for that. This fixes playback of short files.
+         They don't actually playback fully now, because the clock already
+         runs. This means that small files (<500kB) with a small length
+         (<2sec) will still not or barely play. Other files, such as mod
+         or flx, will work correctly, however.
+
+2004-09-28  Wim Taymans  <wim@fluendo.com>
+
+       * ext/speex/gstspeex.c: (plugin_init):
+       * ext/speex/gstspeexdec.c: (gst_speex_dec_base_init),
+       (gst_speex_dec_class_init), (speex_dec_get_formats),
+       (speex_get_event_masks), (speex_get_query_types),
+       (gst_speex_dec_init), (speex_dec_convert), (speex_dec_src_query),
+       (speex_dec_src_event), (speex_dec_event), (speex_dec_chain),
+       (gst_speexdec_get_property), (gst_speexdec_set_property),
+       (speex_dec_change_state):
+       * ext/speex/gstspeexdec.h:
+       * ext/speex/gstspeexenc.c: (gst_speexenc_get_formats),
+       (gst_speexenc_get_type), (speex_caps_factory), (raw_caps_factory),
+       (gst_speexenc_base_init), (gst_speexenc_class_init),
+       (gst_speexenc_sinkconnect), (gst_speexenc_convert_src),
+       (gst_speexenc_convert_sink), (gst_speexenc_get_query_types),
+       (gst_speexenc_src_query), (gst_speexenc_init),
+       (gst_speexenc_get_tag_value), (comment_init), (comment_add),
+       (gst_speexenc_metadata_set1), (gst_speexenc_set_metadata),
+       (gst_speexenc_setup), (gst_speexenc_buffer_from_data),
+       (gst_speexenc_push_buffer), (gst_speexenc_set_header_on_caps),
+       (gst_speexenc_chain), (gst_speexenc_get_property),
+       (gst_speexenc_set_property), (gst_speexenc_change_state):
+       * ext/speex/gstspeexenc.h:
+       Rewrote speex encoder, make sure it can be embedded in ogg.
+       Implemented speex decoder.
+
+2004-09-28  Christian Schaller <christian@fluendo.com>
+
+       * configure.ac:
+       Remove kioslave plugin. Markey is brewing a new working one
+       * ext/Makefile.am: Remove kioslave plugin
+       * ext/kio: remove
+       * gst-plugins.spec.in: remove kio plugin from spec
+
+2004-09-27  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_add),
+       (gst_multifdsink_remove), (gst_multifdsink_remove_client_link),
+       (is_sync_frame), (gst_multifdsink_client_queue_buffer),
+       (gst_multifdsink_new_client),
+       (gst_multifdsink_handle_client_write),
+       (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
+       (gst_multifdsink_handle_clients):
+       * gst/tcp/gstmultifdsink.h:
+       Make syncing to keyframes actually work for new clients and lagging
+       clients.
+
+2004-09-26  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst/debug/gstnavigationtest.c: (gst_navigationtest_class_init),
+       (gst_navigationtest_handle_src_event), (draw_box_planar411),
+       (gst_navigationtest_planar411), (gst_navigationtest_change_state):
+       * gst/debug/gstnavigationtest.h:
+         make navigationtest display button-press and button-release events
+
+2004-09-26 Iain <iaingnome@gmail.com>
+
+       * gst/interleave/interleave.c (all_channels_new_media): Checks if all
+       the channels have received a new media event.
+       (interleave_buffered_loop): Compresses a new media event on all
+       channels into one.
+
+2004-09-26 Iain <iaingnome@gmail.com>
+
+       * gst/wavenc/gstwavenc.c (gst_wavenc_chain): Company says we need to
+       call the sinkpad's default event handler and not the srcpads. He also
+       says this is confusing :)
+       (gst_wavenc_stop_file): Company says that seek events only go upstream
+       we should send a discontinuous downstream instead.
+
+2004-09-25  Christian Schaller <christian@fluendo.com>
+
+       * Update SPEC file to be usable in conjunction with Fedora Core,
+         Fedora.us and freshrpms packages
+       * Fix typo in multifilesrc test Makefile
+
+2004-09-24  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/gstplaybasebin.c: (new_decoded_pad):
+       Only signal the no_more_pads signal when we have
+       added the stream to our list.
+
+2004-09-24  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/gstplaybasebin.c: (remove_prerolls),
+       (new_decoded_pad):
+       * gst/playback/gstplaybasebin.h:
+       * gst/playback/gstplaybin.c: (setup_sinks):
+       Don't try to preroll or decode more than one audio/video
+       track.
+
+2004-09-24  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_change_state):
+         Throw error if we failed to find a suitable output. This should
+         throw an error if we successfully set up a pipeline (e.g. because
+         we recognized a media file) but found no decodable streams in it
+         (e.g. because it contains only media stream types for which we
+         have no decoders, or because it's not a media type).
+
+2004-09-23  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/dirac/Makefile.am:
+       * ext/dirac/gstdirac.cc:
+       * ext/dirac/gstdiracdec.cc:
+       * ext/dirac/gstdiracdec.h:
+         Do something. Don't actually know if this works because I don't
+         have a demuxer yet.
+       * ext/gsm/gstgsmdec.c: (gst_gsmdec_getcaps):
+         Add channels=1 to caps returned from _getcaps().
+       * ext/ogg/gstogmparse.c: (gst_ogm_audio_parse_get_type),
+       (gst_ogm_video_parse_get_type), (gst_ogm_audio_parse_base_init),
+       (gst_ogm_video_parse_base_init), (gst_ogm_parse_init),
+       (gst_ogm_audio_parse_init), (gst_ogm_video_parse_init),
+       (gst_ogm_parse_sink_convert), (gst_ogm_parse_chain),
+       (gst_ogm_parse_change_state):
+         Separate between audio/video so ogmaudioparse actually uses the
+         audio pad templates. Both audio and video work now, including
+         autoplugging. Also use sometimes-srcpad hack.
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_seek):
+         Handle events better. Don't hang on infinite loops.
+       * gst/avi/gstavidemux.c: (gst_avi_demux_class_init),
+       (gst_avi_demux_init), (gst_avi_demux_reset),
+       (gst_avi_demux_src_convert), (gst_avi_demux_handle_src_query),
+       (gst_avi_demux_stream_header), (gst_avi_demux_stream_data),
+       (gst_avi_demux_change_state):
+       * gst/avi/gstavidemux.h:
+         Improve A/V sync. Still not perfect.
+       * gst/matroska/ebml-read.c: (gst_ebml_read_seek),
+       (gst_ebml_read_skip):
+         Handle events better.
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_handle_sink_event),
+       (gst_qtdemux_loop_header), (qtdemux_parse_trak),
+       (qtdemux_audio_caps):
+         Add IMA4. Improve event handling. Save offset after a seek when
+         the headers are at the end of the file so that we don't end up in
+         an infinite loop.
+       * gst/typefind/gsttypefindfunctions.c: (qt_type_find):
+         Add low-priority typefind support for files with no length.
+
+2004-09-23  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * testsuite/multifilesink/Makefile.am:
+       fix typo
+
+2004-09-22  Julien MOUTTE  <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_destroy):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls): Fix
+       mistakes from thaytan's patches.
+
+2004-09-23  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_destroy):
+         For completeness, XSync in the destroy function as xvimage does.
+
+2004-09-23  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_getcaps):
+          Correct caps negotiation
+       * gst/volume/gstvolume.c: (volume_chain_float),
+       (volume_chain_int16):
+          Modify debug output to be little more informative
+       * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
+       (gst_xvimagesink_xvimage_destroy):
+         Add XSync calls after detaching from the shared memory segment to
+         avoid a crash.
+
+2004-09-22  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * ext/ogg/gstoggmux.c: (gst_ogg_mux_init),
+       (gst_ogg_mux_next_buffer), (gst_ogg_mux_loop):
+       * ext/vorbis/vorbis.c: (plugin_init):
+       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_init),
+       (gst_vorbisenc_chain):
+       * ext/vorbis/vorbisenc.h:
+       remove explicit newmedia support from oggmux and vorbisenc
+       add debug category to vorbisenc
+       * gst/multifilesink/gstmultifilesink.c:
+       (gst_multifilesink_class_init), (gst_multifilesink_init),
+       (gst_multifilesink_dispose), (gst_multifilesink_set_location),
+       (gst_multifilesink_set_property), (gst_multifilesink_next_file),
+       (gst_multifilesink_handle_event), (gst_multifilesink_chain),
+       (plugin_init):
+       * gst/multifilesink/gstmultifilesink.h:
+       add support for streamheader in multifilesink
+
+2004-09-22  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/asfdemux/gstasfdemux.c: (_read_var_length), (_read_guid),
+       (gst_asf_demux_process_segment), (gst_asf_demux_handle_data),
+       (gst_asf_demux_process_chunk), (gst_asf_demux_handle_sink_event):
+         Prevent infinite loops. More correct error reporting.
+       * gst/auparse/gstauparse.c: (gst_auparse_chain):
+         Error out if negotiation fails.
+       * gst/playback/gstplaybasebin.c: (setup_source),
+       (gst_play_base_bin_change_state), (gst_play_base_bin_error),
+       (gst_play_base_bin_found_tag):
+         Error/tag forwarding. Pre-roll fixes for source errors on state
+         changes (e.g. "file does not exist") to prevent hangs.
+
+2004-09-21  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * testsuite/multifilesink/Makefile.am:
+       * testsuite/multifilesink/lame_test.c: (gst_newmedia_base_init),
+       (gst_newmedia_class_init), (gst_newmedia_init),
+       (gst_newmedia_chain), (gst_newmedia_trigger), (test_format),
+       (newfile_signal), (test_signal), (main):
+       * testsuite/multifilesink/multifilesrc_test.c: (main):
+       * testsuite/multifilesink/oggtheora_test.c:
+       (gst_newmedia_base_init), (gst_newmedia_class_init),
+       (gst_newmedia_init), (gst_newmedia_chain), (gst_newmedia_trigger),
+       (test_format), (newfile_signal), (test_signal), (main):
+       * testsuite/multifilesink/oggvorbis_test.c:
+       (gst_newmedia_base_init), (gst_newmedia_class_init),
+       (gst_newmedia_init), (gst_newmedia_chain), (gst_newmedia_trigger),
+       (test_format), (newfile_signal), (test_signal), (main):
+       * testsuite/multifilesink/wavenc_test.c: (gst_newmedia_base_init),
+       (gst_newmedia_class_init), (gst_newmedia_init),
+       (gst_newmedia_chain), (gst_newmedia_trigger), (test_format),
+       (newfile_signal), (test_signal), (main):
+       New media tests
+
+2004-09-20  Christian Schaller <christian@fluendo.com>
+
+       * Fix mikmod license to LGPL as they have relicensed
+       * Move Dirac and Effectv into LGPL section of README_license
+
+2004-09-20  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/mad/gstmad.c: (gst_mad_check_caps_reset),
+       (gst_mad_change_state):
+         Allow for mp3 rate/channels changes. However, only very
+         conservatively. Reason that we *have* to enable this is smiply
+         because the mad find_sync() function is not good enough, it will
+         regularly sync on random data as valid frames and therefore make
+         us provide random caps as *final* caps of the stream. The best fix
+         I could think of is to simply require several of the same stream
+         changes in a row before we change caps.
+         The actual testcase that works now is #
+       * ext/ogg/Makefile.am:
+       * ext/ogg/gstogg.c: (plugin_init):
+       * ext/ogg/gstogmparse.c:
+         OGM support (video only for now; I need an audio sample file).
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init),
+       (gst_asf_demux_process_stream), (gst_asf_demux_video_caps),
+       (gst_asf_demux_add_video_stream):
+         WMV extradata.
+       * gst/playback/gstplaybasebin.c: (unknown_type):
+         Don't error out on single unknown-types after all. It's wrong.
+         If we found type of video and audio but not of a subtitle stream,
+         it will still error out (which is unwanted). Will find a better fix
+         later on.
+       * gst/typefind/gsttypefindfunctions.c: (ogmvideo_type_find),
+       (ogmaudio_type_find), (plugin_init):
+         OGM support.
+
+2004-09-20  Johan Dahlin  <johan@gnome.org>
+
+       * ext/jpeg/gstjpegdec.c (gst_jpegdec_chain): Allocate the buffer
+       after setting caps.
+
+2004-09-19  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * gst/wavenc/gstwavenc.c: (gst_wavenc_init), (gst_wavenc_chain):
+       * gst/wavenc/gstwavenc.h:
+       Added newmedia support to wavenc
+
+2004-09-17  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gstfdset.c: (gst_fdset_fd_has_closed),
+       (gst_fdset_fd_has_error), (gst_fdset_fd_can_read),
+       (gst_fdset_fd_can_write), (gst_fdset_wait):
+       * gst/tcp/gstmultifdsink.c: (gst_client_status_get_type),
+       (gst_multifdsink_init), (gst_multifdsink_add),
+       (gst_multifdsink_remove), (gst_multifdsink_get_stats),
+       (gst_multifdsink_remove_client_link),
+       (gst_multifdsink_client_queue_buffer),
+       (gst_multifdsink_handle_client_write),
+       (gst_multifdsink_recover_client), (gst_multifdsink_handle_clients),
+       (gst_multifdsink_close), (gst_multifdsink_change_state):
+       * gst/tcp/gstmultifdsink.h:
+       * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init),
+       (gst_tcpserversink_removed):
+       Small cleanups in fdset.c
+       Use a hastable to map fd to the client structure for faster
+       lookup in _remove and get_stats.
+       Added virtual function to close the fds.
+       Handle clients even when the select/poll call was unblocked because
+       of a command.
+       Implement syncing to keyframe in the recovery procedure.
+
+2004-09-16 Iain <iaingnome@gmail.com>
+
+       * gst/audioconvert/gstaudioconvert.c (_fixate_caps_to_int): Free the
+       try caps.
+
+2004-09-15  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_get_audio_stream):
+         Caps are only set if the type of the stream is unknown, but this
+         is initialized in ->init_stream(), so set to UNKNOWN after calling
+         ->init_stream() so that capsnego starts.
+
+2004-09-15  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query),
+       (gst_avi_demux_stream_data):
+         Just hardcode for raw audio then. AVI audio sucks.
+
+2004-09-15  Arwed v. Merkatz  <v.merkatz@gmx.net>
+
+       * gst/matroska/matroska-demux.c: (gst_matroska_demux_audio_caps):
+       * gst/matroska/matroska-mux.c: (audiosink_templ),
+       (gst_matroska_mux_audio_pad_link):
+       * gst/typefind/gsttypefindfunctions.c: (tta_caps), (plugin_init):
+       Use audio/x-ttafile for tta files and audio/x-tta for raw tta frames.
+
+2004-09-15  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query),
+       (gst_avi_demux_stream_data):
+         Try to fix a/v sync issues.
+
+2004-09-15  David Schleef  <ds@schleef.org>
+
+       * configure.ac: remove NASM check, since we don't use it.  Update
+       dirac check to 0.4
+       * ext/dirac/gstdiracdec.cc: update to current 0.4 API
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
+       Initialized variables.
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
+       (gst_qtdemux_loop_header), (qtdemux_parse), (qtdemux_parse_trak),
+       (gst_qtdemux_handle_esds), (qtdemux_audio_caps): Fix seeking, add
+       SVQ3 format
+
+2004-09-15  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query),
+       (gst_avi_demux_add_stream), (gst_avi_demux_stream_data):
+       * gst/avi/gstavidemux.h:
+         Fix for compressed audio (mp3) timestamp generation. How did this
+         ever work?
+
+2004-09-15  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybin.c: (gst_play_bin_get_property):
+         Volume is a double not a float.
+
+2004-09-15  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_remove_client_link),
+       (gst_multifdsink_handle_clients), (gst_multifdsink_change_state):
+       Don't close the fd in multifdsink as we didn't open it in the
+       first place. Some cleanups.
+
+2004-09-15  Wim Taymans  <wim@fluendo.com>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
+       * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
+       (gst_ogg_mux_send_headers), (gst_ogg_mux_loop):
+       Fix the case where the muxer would mark pages as delta
+       frames when they are not (vorbis only ogg).
+
+2004-09-15  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c: (state_change), (setup_source),
+       (gst_play_base_bin_change_state):
+         Handle the case where we failed to setup a clear pipeline. This
+         will throw an error (or EOS, another nice case) and if you don't
+         catch that, the app will wait for the signal forever (and thus
+         hang).
+
+2004-09-15  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/gnomevfs/gstgnomevfssink.c:
+       (gst_gnomevfssink_uri_get_protocols):
+       * ext/gnomevfs/gstgnomevfssrc.c:
+       (gst_gnomevfssrc_uri_get_protocols):
+       * ext/gnomevfs/gstgnomevfsuri.c: (gst_gnomevfs_get_supported_uris):
+       * ext/gnomevfs/gstgnomevfsuri.h:
+         Use _uri_new() instead of _open(), so it doesn't take as long and
+         Christophe's computer won't hang.
+       * gst/playback/gstplaybasebin.c: (unknown_type):
+         Throw error on unknown media type, so apps actually display it.
+
+2004-09-14  Brian Cameron  <brian.cameron@sun.com
+
+       * tools/gst-launch-ext-m.m:  Changed ~ to $ENV{HOME} to allow
+         this script to work on Solaris since bash shell handles echo
+         differenly than bash.
+
+2004-09-17  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/gstplaybasebin.c: (queue_overrun), (no_more_pads),
+       (setup_source), (gst_play_base_bin_set_property),
+       (gst_play_base_bin_add_element):
+       * gst/playback/gstplaybin.c: (gst_play_bin_send_event):
+       Some more work on making sure seeking pauses the pipeline and
+       that changing the uri actually does something.
+
+2004-09-17  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gstfdset.c: (gst_fdset_wait):
+       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_close):
+       * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_init_send),
+       (gst_tcpserversink_close):
+       Be a bit more paranoid when freeing memory.
+
+2004-09-13  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_add_stream),
+       (qtdemux_parse_trak):
+         Don't crash by dividing by zero (see sample movie in #126922).
+
+2004-09-13  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/qtdemux/qtdemux.c: (qtdemux_audio_caps):
+         Don't touch non-existing data (fixes crash on file in #140147).
+
+2004-09-13  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/playback/gstplaybasebin.c:
+       (gst_play_base_bin_dispose), (gst_play_base_bin_set_property):
+         Handle double disposals, and proper change of URIs.
+
+2004-09-13  Martin Eikermann <meiker@upb.de>
+
+       * gst/mpegstream/gstmpegparse.c:
+         fix synchronistation for streams recorded from digital PCR
+         fixes bug #119376
+
+2004-09-13  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/gnomevfs/Makefile.am:
+       * ext/gnomevfs/gstgnomevfs.c: (plugin_init):
+       * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_get_type),
+       (gst_gnomevfssink_dispose), (gst_gnomevfssink_init),
+       (gst_gnomevfssink_uri_get_type),
+       (gst_gnomevfssink_uri_get_protocols),
+       (gst_gnomevfssink_uri_get_uri), (gst_gnomevfssink_uri_set_uri),
+       (gst_gnomevfssink_uri_handler_init),
+       (gst_gnomevfssink_set_property), (gst_gnomevfssink_get_property),
+       (gst_gnomevfssink_open_file), (gst_gnomevfssink_close_file):
+       * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_get_type),
+       (gst_gnomevfssrc_init), (gst_gnomevfssrc_dispose),
+       (gst_gnomevfssrc_uri_get_type),
+       (gst_gnomevfssrc_uri_get_protocols), (gst_gnomevfssrc_uri_get_uri),
+       (gst_gnomevfssrc_uri_set_uri), (gst_gnomevfssrc_uri_handler_init),
+       (gst_gnomevfssrc_set_property), (gst_gnomevfssrc_get_property),
+       (gst_gnomevfssrc_open_file), (gst_gnomevfssrc_close_file):
+       * ext/gnomevfs/gstgnomevfsuri.c: (gst_gnomevfs_get_supported_uris):
+       * ext/gnomevfs/gstgnomevfsuri.h:
+         Add URI support to Gnome-VFS plugins. Tries to load a fixed list
+         of fake URIs to see which this version of Gnome-VFS likes, and
+         uses that for the Gst-URI interface. Makes playbin support http://
+         streams. Also fix up some stupid behaviour in gnomevfssrc.
+
+2004-09-13  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_update),
+       (gst_alsa_mixer_get_volume), (gst_alsa_mixer_set_volume),
+       (gst_alsa_mixer_set_mute), (gst_alsa_mixer_set_record),
+       (gst_alsa_mixer_set_option), (gst_alsa_mixer_get_option):
+         Update mixer (to sync with other sessions) if we try to obtain
+         a new value. This makes alsamixer work accross applications.
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_get_time):
+         Only call sync functions if we're running, else alsalib asserts.
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query):
+         Sometimes fails to compile. Possibly a gcc bug.
+       * gst/playback/gstplaybin.c: (gen_video_element),
+       (gen_audio_element):
+         Add a reference to an application-provided object, because we lose
+         this same reference if we add it to the bin. If we don't do this,
+         we can only use this object once and thus crash if we go from
+         ready to playing, back to ready and back to playing again.
+         Also add an audioscale element because several cheap soundcards -
+         like mine - don't support all samplerates.
+       * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
+       (gst_ximagesink_xcontext_clear), (gst_ximagesink_change_state):
+         Fix wrong order or PAR calls. Makes automatically obtained PAR
+         from the X server atually being used.
+
+2004-09-12  David Schleef  <ds@schleef.org>
+
+       Fixes: #151879, #151881, #151882, #151883, #151884, #151886,
+       #151887, #152102, #152247.
+       * examples/indexing/indexmpeg.c: 64-bit warning fixes.
+       * examples/seeking/cdparanoia.c: same
+       * examples/seeking/cdplayer.c: same
+       * examples/seeking/seek.c: same
+       * examples/seeking/spider_seek.c: same
+       * examples/seeking/vorbisfile.c: same
+       * examples/stats/mp2ogg.c: same
+       * ext/esd/esdsink.c: (gst_esdsink_class_init),
+       (gst_esdsink_dispose): Dispose of element properly.
+       * ext/ivorbis/vorbisfile.c: (gst_ivorbisfile_seek): 64-bit warning
+       fixes.
+       * ext/nas/nassink.c: (gst_nassink_class_init),
+       (gst_nassink_dispose): Dispose of element correctly.
+       * gst/wavenc/gstwavenc.c: (gst_wavenc_chain): Fix leak.
+       * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls),
+       (gst_ximagesink_ximage_new), (gst_ximagesink_ximage_destroy):
+       Fix 64-bit warning.
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
+       (gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_destroy):
+       Fix 64-bit warning.
+
+2004-09-12  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
+
+       * configure.ac : change speex detection as 1.1.6 now uses
+         .pc/pkg-config and they changed their headers location.
+
+2004-09-09  Arwed v. Merkatz  <v.merkatz@gmx.net>
+
+       * gst/matroska/matroska-mux.h:
+       * gst/matroska/matroska-mux.c: (gst_matroska_mux_reset),
+       (gst_matroska_mux_start), (gst_matroska_mux_finish),
+       (gst_matroska_mux_write_data):
+         Write multiple blocks/frames per cluster.
+               Write meta-seek information (seek heads).
+
+2004-09-09  Scott Wheeler <wheeler@kde.org>
+
+       * gst/gstplaybin.c: (gst_play_bin_class_init), (gst_play_bin_init),
+       (gst_play_bin_set_property), (gst_play_bin_get_property),
+       (gen_audio_element), (gen_audio_element):
+         Add a volume element / property to the pipeline.
+
+2004-09-07  Wim Taymans  <wim@fluendo.com>
+
+       * gst/videomixer/videomixer.c: (gst_videomixer_blend_buffers):
+       Copy timestamps from the master pad to the output buffers.
+
+2004-09-03  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/raw1394/gstdv1394src.c:
+         throw errors when applicable
+
+2004-09-01  Arwed v. Merkatz  <v.merkatz@gmx.net>
+
+       * gst/matroska/ebml-ids.h:
+       * gst/matroska/ebml-read.c: (gst_ebml_read_date):
+       * gst/matroska/ebml-write.c: (gst_ebml_write_date):
+       * gst/matroska/matroska-mux.c: (gst_matroska_mux_finish):
+         automatically convert unix time <-> ebml time when reading/writing
+         a date, use gst_ebml_write_uint to write CUETIME,
+         not gst_ebml_write_date.
+       * gst/matroska/matroska-ids.h:
+       * gst/matroska/matroska-mux.c: (gst_matroska_mux_create_uid),
+       (gst_matroska_mux_reset), (gst_matroska_mux_audio_pad_link),
+       (gst_matroska_mux_track_header), (gst_matroska_mux_start),
+       (gst_matroska_mux_write_data):
+         Write track and segment UIDs, write muxing date, write
+         TRACKDEFAULTDURATION for TTA audio, write BLOCKDURATION if known.
+         Create cues for audio only files.
+
+2004-08-31  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
+       * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
+         Re-commit ALSA switches.
+       * gst/adder/gstadder.c: (gst_adder_loop):
+         64-bit fix (#151416).
+       * gst/debug/progressreport.c: (gst_progressreport_report):
+         64-bit fix (#151419).
+       * gst/matroska/matroska-demux.c:
+       (gst_matroska_demux_parse_contents):
+         64-bit fix (#151420).
+       * gst/playback/test3.c: (update_scale):
+         64-bit fix (#151421).
+
+2004-08-31  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+         bump nano to cvs
+
+=== release 0.8.4 ===
+
+2004-08-02  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac: releasing 0.8.4, "Alias"
+
+2004-08-31  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/theora/Makefile.am:
+         fix makefile.  Fixes #151462.
+
+2004-08-30  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gstfdset.c: (gst_fdset_free), (gst_fdset_wait):
+       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_add),
+       (gst_multifdsink_remove_client_link),
+       (gst_multifdsink_client_queue_buffer),
+       (gst_multifdsink_handle_client_write):
+       * gst/tcp/gsttcpclientsink.c: (gst_tcpclientsink_init_send):
+       * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_init_receive):
+       Fix some memory leaks.
+
+2004-08-30  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       Patch by: David Schleef
+
+       * configure.ac:
+       * sys/Makefile.am:
+         rename our detection macro for V4L2.  Fixes #151236.
+
+2004-08-30  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       Patch by: David Schleef
+
+       * configure.ac:
+         check to define LAMEPRESET.  Fixes #151232.
+
+2004-08-27  David Schleef  <ds@schleef.org>
+
+       * sys/glsink/glimagesink.c: (gst_glimagesink_ximage_put),
+       (gst_glimagesink_xwindow_new), (gst_glimagesink_xcontext_get),
+       (gst_glimagesink_fixate):  Move local variable declarations to
+       make gcc-2.95 happy.
+
+2004-08-27  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+         bump nano for prerelease
+
+2004-08-27  David Schleef  <ds@schleef.org>
+
+       * sys/sunaudio/Makefile.am: Add sunaudiosrc patch from Bala
+       * sys/sunaudio/gstsunaudiosrc.c:
+       * sys/sunaudio/gstsunaudiosrc.h:
+
+2004-08-27 Arwed v. Merkatz <v.merkatz@gmx.net>
+
+       * gst/matroska/ebml-read.c: (gst_ebml_peed_id), (gst_ebml_read_element_id),
+       handle EOS correctly
+       * gst/matroska/matroska-mux.c: (gst_matroska_mux_video_pad_link):
+       * gst/matroska/matroska-mux.h:
+       added BITMAPINFOHEADER structure, mux video/x-divx and video/x-xvid in
+       VFW compatibility mode
+
+2004-08-27  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       patch by: Zaheer Abbas Merali
+
+       * ext/ogg/gstoggmux.c:
+       * ext/vorbis/vorbisenc.c:
+       * ext/vorbis/vorbisenc.h:
+         handle NEWMEDIA
+
+2004-08-26 Arwed v. Merkatz <v.merkatz@gmx.net>
+
+       * gst/matroska/ebml-write.c: (gst_ebml_write_float),
+       fix byte order reversion on little endian machines.
+       * gst/matroska/matroska-mux.c: (audiosink_templ),
+       (gst_matroska_mux_audio_pad_link):
+       add TTA codec to the list of supported codecs.
+       * gst/matroska/matroska-mux.c: (gst_matroska_mux_init),
+       (gst_matroska_mux_start), (gst_matroska_mux_finish),
+       (gst_matroska_mux_write_data):
+       * gst/matroska/matroska-mux.h:
+       write segment duration correctly, write muxing app string, fixes bugs
+       #140897 and #140898.
+       * gst/matroska/matroska-mux.c: (gst_matroska_mux_loop),
+       wait for all pads to be negotiated before starting to mux.
+
+2004-08-26  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * ext/lame/gstlame.c: (gst_lame_init), (gst_lame_chain):
+       * ext/lame/gstlame.h:
+       Added new media support to lame
+
+2004-08-25 Arwed v. Merkatz <v.merkatz@gmx.net>
+
+       * gst/matroska/matroska-demux.c: (gst_matroska_demux_parse_blockgroup),
+       send vorbis headers at the beginning of a stream, fixes bug #141554.
+       Interpret BLOCKDURATION and set buffer duration accordingly, fixes
+       bug #148950.
+       * gst/matroska/matroska-demux.c: (gst_matroska_demux_audio_caps),
+       (gst_matroska_demux_plugin_init):
+       * gst/matroska/matroska-ids.h:
+       enable demuxing of TTA audio streams, fixes bug #148951.
+       * gst/typefind/gsttypefindfunctions.c: (tta_type_find), (plugin_init),
+       enable typefinding for TTA audio files, fixes bug #148711.
+       * ext/xvid/gstxviddec.c: (gst_xviddec_chain),
+       set XVID_LOWDELAY flag for decoding so xvid always returns an image,
+       fixes playback of packed bitstream and xvid with bframes, bug #135407.
+
+2004-08-24  Sebastien Cote  <sc5@hermes.usherb.ca>
+
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head),
+       (gst_riff_read_element_data), (gst_riff_read_seek),
+       (gst_riff_read_skip): fix infinite loop in wavparse, fixes bug
+       #144616, patch reviewed by Ronald and committed by Christophe Fergeau
+       <teuf@gnome.org>
+
+2004-08-23 Iain <iaingnome@gmail.com>
+
+       * ext/mad/gstid3tag.c (gst_mad_id3_to_tag_list): Special case COMM
+       tags. They appear to be handled differently to normal.
+       (tag_list_to_id3_tag_foreach): Ditto.
+
+2004-08-22  Wim Taymans  <wim@fluendo.com>
+
+       * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
+       (gst_ogg_mux_send_headers), (gst_ogg_mux_loop):
+       Make sure we never send -1 granulepos.
+
+2004-08-20  Wim Taymans  <wim@fluendo.com>
+
+       * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
+       (gst_ogg_mux_loop):
+       I will accept bitchslappings with non sharp objects.
+
+2004-08-20  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * configure.ac:
+       Clean up the test for lame presets
+
+2004-08-19  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * configure.ac:
+       * ext/lame/Makefile.am:
+       * ext/lame/gstlame.c: (gst_lame_class_init),
+       (gst_lame_set_property), (gst_lame_get_property), (gst_lame_setup):
+       Only enable lame presets if version of lame has presets in API
+
+2004-08-19  Jan Schmidt  <thaytan@mad.scientist.com>
+       * gst/udp/gstudpsrc.c: (gst_udpsrc_init), (gst_udpsrc_get):
+       * gst/udp/gstudpsrc.h:
+         Don't call gst_pad_push in a get function. Fixes #150449
+
+2004-08-18  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gstfdset.c: (gst_fdset_free), (gst_fdset_set_mode),
+       (gst_fdset_get_mode), (gst_fdset_add_fd), (gst_fdset_remove_fd),
+       (gst_fdset_fd_ctl_write), (gst_fdset_fd_ctl_read),
+       (gst_fdset_fd_has_closed), (gst_fdset_fd_has_error),
+       (gst_fdset_fd_can_read), (gst_fdset_fd_can_write),
+       (gst_fdset_wait):
+       * gst/tcp/gstfdset.h:
+       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_add),
+       (gst_multifdsink_client_queue_buffer),
+       (gst_multifdsink_handle_client_write):
+       * gst/tcp/gstmultifdsink.h:
+       Some extra checks in gstfdset.
+       Only use send() when the fd is a socket. Don't try to
+       read from write only fds.
+
+2004-08-18  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gstfdset.c: (gst_fdset_add_fd), (gst_fdset_remove_fd),
+       (gst_fdset_fd_ctl_write), (gst_fdset_fd_ctl_read),
+       (gst_fdset_fd_has_closed), (gst_fdset_fd_has_error),
+       (gst_fdset_fd_can_read), (gst_fdset_fd_can_write),
+       (gst_fdset_wait):
+       Add more locking and bounds checking.
+
+2004-08-18  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gstfdset.c: (ensure_size), (gst_fdset_wait):
+       Realloc test fdset in the lock and right before starting
+       the poll call. Bump the limit to 4096.
+
+2004-08-17  David Schleef  <ds@schleef.org>
+
+       * sys/sunaudio/Makefile.am:
+       * sys/sunaudio/gstsunaudio.c: Fix caps to handle full range
+       of rates and channels.  Make debugging less obnoxious.
+
+       Patch from Balamurali Viswanathan implementing a mixer for
+       Sun audio.  (bug #144091):
+       * sys/sunaudio/gstsunelement.c:
+       * sys/sunaudio/gstsunelement.h:
+       * sys/sunaudio/gstsunmixer.c:
+       * sys/sunaudio/gstsunmixer.h:
+
+2004-08-17  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * gst/audioscale/gstaudioscale.c:
+       * gst/audioscale/gstaudioscale.h:
+       made audioscale resample from any sample rate to any sample rate
+
+2004-08-17  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/libpng/gstpngdec.c:
+         error out on unsupported types
+
+2004-08-17  Iain <iaingnome@gmail.com>
+
+       * ext/flac/gstflacenc.c (gst_flacenc_update_quality): Only set the
+       mid_side and loose_mid_side properties if its a stereo stream.
+
+2004-08-17  Wim Taymans  <wim@fluendo.com>
+
+       * ext/theora/theoradec.c: (gst_theora_dec_class_init),
+       (theora_get_formats), (theora_dec_src_convert),
+       (theora_dec_sink_convert), (theora_dec_src_query),
+       (theora_dec_src_event), (theora_dec_event), (theora_dec_chain):
+       Add a debug line.
+
+2004-08-17  Wim Taymans  <wim@fluendo.com>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_iterate),
+       (gst_ogg_pad_push):
+       * ext/ogg/gstoggmux.c: (gst_ogg_mux_init),
+       (gst_ogg_mux_request_new_pad), (gst_ogg_mux_next_buffer),
+       (gst_ogg_mux_buffer_from_page), (gst_ogg_mux_push_page),
+       (gst_ogg_mux_send_headers), (gst_ogg_mux_loop):
+       Mark delta units in the muxer.
+       Try to decode the packet after an out-of-sync error from
+       libogg.
+
+2004-08-17  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
+       (gst_multifdsink_init), (gst_multifdsink_add),
+       (gst_multifdsink_client_queue_buffer),
+       (gst_multifdsink_set_property), (gst_multifdsink_get_property):
+       * gst/tcp/gstmultifdsink.h:
+       Added option to send a keyframe to clients as the first buffer.
+       Make timeout property writable.
+
+2004-08-17  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       patch by: Wim Taymans
+
+       * gst/tcp/gstfdset.c:
+       * gst/tcp/gstmultifdsink.c:
+         fix index comparison, should include 0
+
+2004-08-16  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gstfdset.c: (ensure_size), (gst_fdset_new),
+       (gst_fdset_add_fd), (gst_fdset_remove_fd),
+       (gst_fdset_fd_has_closed), (gst_fdset_fd_has_error),
+       (gst_fdset_fd_can_read), (gst_fdset_fd_can_write),
+       (gst_fdset_wait):
+         copy when reallocing for poll so the select arguments don't get
+         changed during the call
+
+2004-08-16  Wim Taymans  <wim@fluendo.com>
+
+       * ext/theora/theoraenc.c: (gst_border_mode_get_type),
+       (gst_theora_enc_class_init), (theora_enc_sink_link),
+       (theora_buffer_from_packet), (theora_enc_chain):
+       Fix bug where buffers were not marked as keyframes
+       correctly.
+
+2004-08-15  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * ext/lame/gstlame.c: (gst_lame_vbrmode_get_type),
+       (gst_lame_preset_get_type), (gst_lame_class_init):
+       describe the enum values for vbr mode and presets more verbosely
+
+2004-08-13  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * ext/lame/gstlame.c: (gst_lame_mode_get_type),
+       (gst_lame_quality_get_type), (gst_lame_padding_get_type),
+       (gst_lame_preset_get_type), (gst_lame_class_init), (gst_lame_init),
+       (gst_lame_set_property), (gst_lame_get_property), (gst_lame_setup):
+       * ext/lame/gstlame.h:
+       add preset property to lame so it can use lame presets
+
+2004-08-13  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * ext/lame/gstlame.c: (gst_lame_get_property):
+       whoops forgot break, thanks teuf
+
+2004-08-13  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * ext/lame/gstlame.c: (gst_lame_vbrmode_get_type),
+       (gst_lame_class_init), (gst_lame_src_getcaps),
+       (gst_lame_sink_link), (gst_lame_init), (gst_lame_set_property),
+       (gst_lame_get_property), (gst_lame_setup):
+       * ext/lame/gstlame.h:
+       fix lame's broken vbr stuff, allow it to resample if need be, and also
+       make xing header optional
+
+2004-08-12  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * ext/lame/gstlame.c: (gst_lame_src_getcaps), (gst_lame_init):
+       added getcaps function so samplerate doesnt get fixated to silly values
+
+2004-08-12  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * ext/lame/gstlame.c: (gst_lame_src_link):
+       revert previous fix
+
+2004-08-12  Johan Dahlin  <johan@gnome.org>
+
+       * sys/v4l/gstv4lelement.c (gst_v4l_iface_supported): Remove bogus
+       checks. Doesn't matter what state we are in. Interfaces are a
+       compile time thing, not runtime. It also broke the python bindings.
+
+2004-08-12  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * ext/lame/gstlame.c: (gst_lame_src_link):
+       made source pad link function check if sinkpad is ok..fixes the problem
+       where core fixates the output rate of lame stupidly
+
+2004-08-12  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
+
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_src_link), (gst_v4lsrc_fixate):
+       * sys/v4l/v4l_calls.c:
+       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_set_capture):
+         fix fixate function to handle nonsimple caps.
+         remove bogus check in _link
+         cleanups
+
+2004-08-12  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * ext/lame/gstlame.c: (gst_lame_class_init), (gst_lame_init):
+       set default compression ratio parameter to 0.0 so bitrate parameter
+       works :)
+
+2004-08-11  David Schleef  <ds@schleef.org>
+
+       * gst/tcp/gstfdset.c: Fix compile problem on OS/X.
+
+2004-08-11  David Schleef  <ds@schleef.org>
+
+       * gst/mpeg1sys/gstmpeg1systemencode.c: Oops, this was correct
+       before.
+
+2004-08-11  David Schleef  <ds@schleef.org>
+
+       * gst-libs/gst/video/videosink.h: Change copyright block to LGPL.
+
+2004-08-11  David Schleef  <ds@schleef.org>
+
+       * ext/pango/gsttextoverlay.c: Add copyright block and fix plugin
+         license field
+       * gst-libs/gst/idct/Makefile.am: Remove mmx/sse code
+       * gst-libs/gst/video/gstvideosink.c: Change copyright block to
+         LGPL.
+       * gst/auparse/gstauparse.c: Fix plugin license field.
+       * gst/monoscope/gstmonoscope.c: Fix plugin license field.
+       * gst/mpeg1sys/gstmpeg1systemencode.c: Fix plugin license field.
+       * gst/rtp/gstrtp.c: Fix plugin license field.
+
+2004-08-11  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/Makefile.am:
+       * gst/tcp/gstfdset.c: (gst_fdset_mode_get_type), (nearest_pow),
+       (ensure_size), (gst_fdset_new), (gst_fdset_free),
+       (gst_fdset_set_mode), (gst_fdset_get_mode), (gst_fdset_add_fd),
+       (gst_fdset_remove_fd), (gst_fdset_fd_ctl_write),
+       (gst_fdset_fd_ctl_read), (gst_fdset_fd_has_closed),
+       (gst_fdset_fd_has_error), (gst_fdset_fd_can_read),
+       (gst_fdset_fd_can_write), (gst_fdset_wait):
+       * gst/tcp/gstfdset.h:
+       * gst/tcp/gstmultifdsink.c: (gst_unit_type_get_type),
+       (gst_multifdsink_class_init), (gst_multifdsink_init),
+       (gst_multifdsink_add), (gst_multifdsink_remove),
+       (gst_multifdsink_clear), (gst_multifdsink_get_stats),
+       (gst_multifdsink_remove_client_link),
+       (gst_multifdsink_handle_client_read),
+       (gst_multifdsink_client_queue_data),
+       (gst_multifdsink_client_queue_caps),
+       (gst_multifdsink_client_queue_buffer),
+       (gst_multifdsink_handle_client_write),
+       (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
+       (gst_multifdsink_handle_clients), (gst_multifdsink_set_property),
+       (gst_multifdsink_get_property), (gst_multifdsink_init_send),
+       (gst_multifdsink_close):
+       * gst/tcp/gstmultifdsink.h:
+       * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init),
+       (gst_tcpserversink_init), (gst_tcpserversink_handle_server_read),
+       (gst_tcpserversink_handle_wait), (gst_tcpserversink_init_send),
+       (gst_tcpserversink_close):
+       * gst/tcp/gsttcpserversink.h:
+       Abstracted away the select call, implemented poll (yes we ran into
+       the 1024 limit in production).
+
+2004-08-11  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/tcp/gsttcp.c:
+       * gst/tcp/gsttcpplugin.c:
+         improve debuggging, remove assert
+
+2004-08-10  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gstmultifdsink.c: (gst_unit_type_get_type),
+       (gst_client_status_get_type), (gst_multifdsink_class_init),
+       (gst_multifdsink_init), (gst_multifdsink_remove_client_link),
+       (gst_multifdsink_handle_client_read),
+       (gst_multifdsink_handle_client_write),
+       (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
+       (gst_multifdsink_handle_clients), (gst_multifdsink_set_property),
+       (gst_multifdsink_get_property):
+       * gst/tcp/gstmultifdsink.h:
+       * gst/tcp/gsttcp-marshal.list:
+       Starting to prepare for specifying buffer time in other units
+       than buffers. Expose remove reason in signal.
+
+2004-08-10  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_add),
+       (gst_multifdsink_remove), (gst_multifdsink_clear),
+       (gst_multifdsink_remove_client_link),
+       (gst_multifdsink_handle_client_read),
+       (gst_multifdsink_client_queue_data),
+       (gst_multifdsink_client_queue_buffer),
+       (gst_multifdsink_handle_client_write),
+       (gst_multifdsink_queue_buffer), (gst_multifdsink_handle_clients),
+       (gst_multifdsink_chain), (gst_multifdsink_close):
+       * gst/tcp/gstmultifdsink.h:
+       Added more debugging info. Changed the way clients are
+       removed from the lists. Fixed a bug where a bad file descriptor
+       could cause many clients to be removed.
+
+2004-08-06  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst/videotestsrc/gstvideotestsrc.c: (generate_capslist):
+         allow all pixel-aspect-ratios, not just 1:1
+
+2004-08-09  David Schleef  <ds@schleef.org>
+
+       * sys/glsink/ARB_multitexture.h:  Remove old files.
+       * sys/glsink/EXT_paletted_texture.h:
+       * sys/glsink/NV_register_combiners.h:
+       * sys/glsink/gstgl_nvimage.c:
+       * sys/glsink/gstgl_pdrimage.c:
+       * sys/glsink/gstgl_rgbimage.c:
+       * sys/glsink/gstglsink.c:
+       * sys/glsink/gstglsink.h:
+       * sys/glsink/gstglxwindow.c:
+       * sys/glsink/regcomb_yuvrgb.c:
+
+2004-08-09  David Schleef  <ds@schleef.org>
+
+       Patch from Gernot Ziegler <gz@lysator.liu.se> rewriting the
+       GL sink plugin.  (Bug #147302)
+
+       * configure.ac: Test for OpenGL
+       * sys/Makefile.am: Use test for OpenGL
+       * sys/glsink/Makefile.am:
+       * sys/glsink/glimagesink.c: rewrite
+       * sys/glsink/glimagesink.h: rewrite
+
+2004-08-09  David Schleef  <ds@schleef.org>
+
+       * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_base_init):  Only allow
+       sane framerates.
+       * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get): same
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support): same
+       * testsuite/gst-lint: Test for G_GUINT64_FORMAT usage near gettext.
+
+2004-08-09  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
+       (gst_multifdsink_add), (gst_multifdsink_get_stats),
+       (gst_multifdsink_client_remove),
+       (gst_multifdsink_handle_client_read),
+       (gst_multifdsink_handle_client_write),
+       (gst_multifdsink_queue_buffer), (gst_multifdsink_handle_clients):
+       Do a bit more logging, make the client_read code more robust.
+
+2004-08-09  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/jpeg/gstjpegdec.c: (gst_jpegdec_init_source),
+       (gst_jpegdec_fill_input_buffer), (gst_jpegdec_skip_input_data),
+       (gst_jpegdec_resync_to_restart), (gst_jpegdec_term_source),
+       (gst_jpegdec_init), (gst_jpegdec_chain):
+       * gst/multipart/multipartdemux.c: (gst_multipart_demux_init),
+       (gst_multipart_demux_chain), (gst_multipart_demux_change_state):
+         cleanups, debugging fixes and memleak plugging
+
+2004-08-09  Wim Taymans  <wim@fluendo.com>
+
+       * ext/theora/theoradec.c: (gst_theora_dec_class_init),
+       (theora_get_formats), (theora_dec_src_convert),
+       (theora_dec_sink_convert), (theora_dec_src_query),
+       (theora_dec_src_event), (theora_dec_event), (theora_dec_chain),
+       (theora_dec_change_state):
+       Don't crash on missing header packets.
+
+2004-08-09  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * po/LINGUAS:
+       * po/sq.po:
+         Added Albanian translation (Laurent Dhima)
+       * po/cs.po:
+         updated
+
+2004-08-09  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/lame/gstlame.c:
+         fix/add debugging
+
+2004-08-09  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/ximage/ximagesink.c:
+       * sys/xvimage/xvimagesink.c:
+         assign all TOO_LAZY's to a real category.  Thanks to Warthy Warthog.
+
+2004-08-06  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
+       (gst_multifdsink_add), (gst_multifdsink_get_stats),
+       (gst_multifdsink_client_remove),
+       (gst_multifdsink_handle_client_read),
+       (gst_multifdsink_handle_client_write),
+       (gst_multifdsink_queue_buffer), (gst_multifdsink_handle_clients):
+       Make sure we don't try to read more from a client that what
+       ioctl says us or we deadlock.
+
+2004-08-05  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_src_link),
+       (gst_videotestsrc_change_state), (gst_videotestsrc_src_query),
+       (gst_videotestsrc_handle_src_event), (gst_videotestsrc_get):
+         decouple running_time and n_frames so it can handle changing
+         framerate while running
+
+2004-08-05  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * po/nl.po:
+       * po/sv.po:
+         updated translations
+
+2004-08-04  Benjamin Otte  <otte@gnome.org>
+
+       * gst/videotestsrc/gstvideotestsrc.c:
+       (gst_videotestsrc_get_capslist), (generate_capslist),
+       (plugin_init):
+         generate the list of supported caps at startup and reuse it instead
+         of always generating it
+
+2004-07-30  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst/multipart/multipartmux.c: (gst_multipart_mux_pad_link):
+         whoops, last checkin broke normal build
+
+2004-08-03  Benjamin Otte  <otte@gnome.org>
+
+       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_get_volume),
+       (gst_alsa_mixer_set_volume), (gst_alsa_mixer_set_mute),
+       (gst_alsa_mixer_set_record), (gst_alsa_mixer_set_option),
+       (gst_alsa_mixer_get_option):
+       * ext/dvdnav/dvdnavsrc.c: (dvdnav_get_event_name),
+       (dvdnavsrc_print_event):
+       * ext/ogg/gstoggdemux.c: (_find_chain_process), (gst_ogg_print):
+       * ext/ogg/gstoggmux.c: (gst_ogg_mux_pad_link),
+       (gst_ogg_mux_pad_unlink):
+       * gst/multipart/multipartmux.c: (gst_multipart_mux_pad_link),
+       (gst_multipart_mux_pad_unlink):
+       * gst/videofilter/gstvideobalance.c:
+       (gst_videobalance_colorbalance_set_value):
+       * gst/videomixer/videomixer.c: (gst_videomixer_pad_link),
+       (gst_videomixer_pad_unlink):
+       * po/uk.po:
+       * sys/oss/gstossmixer.c:
+       * sys/v4l/gstv4lcolorbalance.c:
+       * sys/v4l/gstv4ltuner.c:
+       * sys/v4l/v4lsrc_calls.c:
+       * sys/v4l2/gstv4l2colorbalance.c:
+       * sys/v4l2/gstv4l2tuner.c:
+         compile fixes for --disable-gst-debug, G_DISABLE_ASSERT and friends
+
+2004-08-03  Benjamin Otte  <otte@gnome.org>
+
+       * examples/dynparams/filter.c: (ui_control_create):
+       * examples/gstplay/player.c: (print_tag):
+       * ext/alsa/gstalsa.c: (gst_alsa_request_new_pad):
+       * ext/gdk_pixbuf/gstgdkanimation.c:
+       (gst_gdk_animation_iter_may_advance):
+       * ext/jack/gstjack.c: (gst_jack_request_new_pad):
+       * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list),
+       (tag_list_to_id3_tag_foreach), (gst_id3_tag_handle_event):
+       * ext/vorbis/oggvorbisenc.c: (gst_oggvorbisenc_get_tag_value):
+       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_get_tag_value):
+       * ext/xine/xineaudiodec.c: (gst_xine_audio_dec_chain):
+       * gst-libs/gst/media-info/media-info-test.c: (print_tag):
+       * gst/sine/demo-dparams.c: (main):
+       * gst/tags/gstvorbistag.c: (gst_tag_to_vorbis_comments):
+       * testsuite/alsa/formats.c: (create_pipeline):
+       * testsuite/alsa/sinesrc.c: (sinesrc_force_caps), (sinesrc_get):
+         fixes for G_DISABLE_ASSERT and friends
+       * gst/typefind/gsttypefindfunctions.c: (aac_type_find),
+       (mp3_type_frame_length_from_header), (mp3_type_find),
+       (plugin_init):
+         require mp3 typefinding to have at least MIN_HEADERS valid headers
+         add typefinding for AAC adts files
+
+2004-08-04  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * sys/ximage/ximagesink.c:
+       (gst_ximagesink_calculate_pixel_aspect_ratio):
+       * sys/xvimage/xvimagesink.c:
+       (gst_xvimagesink_calculate_pixel_aspect_ratio):
+       Make sure we calculate pixel-aspect-ratio using floating point maths
+
+2004-08-03  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * po/uk.po:
+         updated translation
+
+2004-08-03  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get):
+         add debugging for display PAR calculation
+
+2004-08-02  David Schleef  <ds@schleef.org>
+
+       * configure.ac: Fix mikmod CFLAGS.
+
+2004-07-27  Benjamin Otte  <otte@gnome.org>
+
+       * gst/audioscale/gstaudioscale.c:
+       - fix templates to only support S16, it's the only format that works
+       - make caps nego code use try_set_caps_nonfixed and fixation instead
+       of try_set_caps twice, which is not nice for autopluggers
+       - change rank to secondary, so autopluggers can pick it up after
+       audioconvert
+
+2004-08-02  Iain <iain@prettypeople.org>
+
+       * gst/interleave/interleave.c (interleave_init),
+       (interleave_request_new_pad),
+       (interleave_pad_removed),
+       (interleave_buffered_loop): Use the real pad count, not the artificial
+       one.
+
+2004-08-02  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac: bump nano back to development
+
+=== release 0.8.3 ===
+
+2004-08-02  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac: releasing 0.8.3, "Water"
+
+2004-08-02  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/xvimage/xvimagesink.c:
+       (gst_xvimagesink_calculate_pixel_aspect_ratio),
+       (gst_xvimagesink_xcontext_clear), (gst_xvimagesink_sink_link),
+       (gst_xvimagesink_change_state), (gst_xvimagesink_buffer_alloc),
+       (gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
+       (gst_xvimagesink_init), (gst_xvimagesink_class_init):
+       * sys/xvimage/xvimagesink.h:
+         apply similar PAR fixes as to ximagesink
+
+2004-08-02  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       patch from: Benjamin Otte
+
+       * ext/lame/gstlame.c: (gst_lame_src_link), (gst_lame_init):
+         add link function to lame.  Fixes #148986.
+
+2004-08-02  Johan Dahlin  <johan@gnome.org>
+
+       * gst/multipart/multipartmux.c (gst_multipart_mux_next_buffer):
+       fix debugging log
+
+2004-07-30  David Schleef  <ds@schleef.org>
+
+       * gst/videomixer/Makefile.am: Fix things that should have been
+       fixed in the last checkin.
+
+2004-07-30  David Schleef  <ds@schleef.org>
+
+       * gst/multipart/Makefile.am: Fix things that should have been
+       fixed in the last checkin.
+
+2004-07-30  David Schleef  <ds@schleef.org>
+
+       * testsuite/multifilesink/Makefile.am: Fix unused variable.
+
+2004-07-30  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+         bump nano for prerelease
+       * po/af.po:
+       * po/az.po:
+       * po/cs.po:
+       * po/en_GB.po:
+       * po/hu.po:
+       * po/nl.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/uk.po:
+         updates
+
+2004-07-30  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
+       (gst_multifdsink_add), (gst_multifdsink_remove),
+       (gst_multifdsink_clear), (gst_multifdsink_get_stats),
+       (gst_multifdsink_client_remove),
+       (gst_multifdsink_handle_client_write),
+       (gst_multifdsink_queue_buffer), (gst_multifdsink_handle_clients):
+       * gst/tcp/gstmultifdsink.h:
+       Recover from a select with a bad file descriptor by removing
+       the client.
+
+2004-07-30  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+         fix requirement of core
+       * gst-libs/gst/play/play.c: (gst_play_error_plugin),
+       (gst_play_pipeline_setup):
+         don't use colorspace element.  do use hermescolorspace element.
+         make macro to get a colorspace element.
+         mark strings for translation.
+       * po/POTFILES.in:
+         add play.c
+       * po/af.po:
+       * po/az.po:
+       * po/cs.po:
+       * po/en_GB.po:
+       * po/hu.po:
+       * po/nl.po:
+       * po/sr.po:
+       * po/sv.po:
+       * po/uk.po:
+         update translations
+
+2004-07-30  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * ext/libpng/gstpngenc.c: (gst_pngenc_class_init):
+       fix default for newmedia flag
+
+2004-07-30  Wim Taymans  <wim@fluendo.com>
+
+       * ext/theora/theoradec.c: (gst_theora_dec_class_init),
+       (gst_theora_dec_init), (theora_get_formats),
+       (theora_dec_src_convert), (theora_dec_sink_convert),
+       (theora_dec_src_query), (theora_dec_src_event), (theora_dec_event),
+       (theora_dec_chain), (theora_dec_set_property),
+       (theora_dec_get_property):
+       * ext/theora/theoraenc.c: (gst_border_mode_get_type),
+       (gst_theora_enc_class_init), (gst_theora_enc_init),
+       (theora_enc_sink_link), (theora_enc_chain),
+       (theora_enc_set_property), (theora_enc_get_property):
+       Added cropping option to theora decoder.
+       Added border option to theora encoder.
+
+2004-07-30  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * ext/libpng/gstpngenc.c: (gst_pngenc_class_init),
+       (gst_pngenc_init), (gst_pngenc_chain), (gst_pngenc_get_property),
+       (gst_pngenc_set_property):
+       * ext/libpng/gstpngenc.h:
+       Added newmedia support to pngenc so now gst-launch-0.8 videotestsrc ! ffmpegcolorspace ! pngenc snapshot=false newmedia=true ! multifilesink location=blah%d.png works as expected
+
+2004-07-30  Wim Taymans  <wim@fluendo.com>
+
+       * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
+       (theora_enc_sink_link), (theora_enc_chain),
+       (theora_enc_set_property), (theora_enc_get_property):
+       Fix encoding of non-multiple-of-16 video.
+
+2004-07-29  David Schleef  <ds@schleef.org>
+
+       * configure.ac: make test for audiofile more strict
+
+2004-07-25  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+         give different names to typefind functions
+
+2004-07-28  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_renegotiate_size),
+       (gst_ximagesink_calculate_pixel_aspect_ratio),
+       (gst_ximagesink_xcontext_get), (gst_ximagesink_getcaps),
+       (gst_ximagesink_sink_link), (gst_ximagesink_change_state),
+       (gst_ximagesink_set_xwindow_id), (gst_ximagesink_set_property),
+       (gst_ximagesink_get_property), (gst_ximagesink_init):
+       * sys/ximage/ximagesink.h:
+         allocate PAR's dynamically.
+         use autodetected PAR if no object-set PAR is given.
+         add workaround for directfb's X not setting physical size.
+         fix to xvimagesink will follow tomorrow.
+
+2004-07-28  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * ext/lame/gstlame.c: (gst_lame_chain): send tag events downstream
+       * ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
+       (gst_shout2send_get_type), (gst_shout2send_set_clock),
+       (gst_shout2send_class_init), (gst_shout2send_init),
+       (set_shout_metadata), (gst_shout2send_set_metadata),
+       (gst_shout2send_chain), (gst_shout2send_set_property),
+       (gst_shout2send_get_property), (gst_shout2send_connect),
+       (gst_shout2send_change_state):
+       * ext/shout2/gstshout2.h:
+       - fix for sending mp3 audio to icecast2 server, if pad link function not
+       called before PAUSED state
+       - added option to use GStreamer clock sync (as opposed to libshout's own sync)
+       - added tagging support for mp3 audio broadcasted
+       * gst/monoscope/gstmonoscope.c: (gst_monoscope_class_init):
+       debug info
+
+2004-07-28  Wim Taymans  <wim@fluendo.com>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query),
+       (gst_ogg_demux_push):
+       Return query failure when we don't know the length of
+       an ogg stream insteda of returning TRUE with a bogus value.
+
+2004-07-28  Wim Taymans  <wim@fluendo.com>
+
+       * ext/theora/theoradec.c: (theora_get_formats),
+       (theora_dec_src_convert), (theora_dec_sink_convert),
+       (theora_dec_src_query), (theora_dec_src_event), (theora_dec_event),
+       (theora_dec_chain):
+       Don't screw up the 1 Chroma for 1 luma sample situation when we
+       have an odd offset/width by adding a black border in those cases.
+
+2004-07-28  Wim Taymans  <wim@fluendo.com>
+
+       * ext/theora/theoradec.c: (theora_get_formats),
+       (theora_dec_src_convert), (theora_dec_sink_convert),
+       (theora_dec_src_query), (theora_dec_src_event), (theora_dec_event),
+       (theora_dec_chain):
+       * ext/theora/theoraenc.c: (theora_enc_sink_link):
+       Added first attempt at cropping of the image as required by the
+       theora spec. We need more properties in the caps (offset_x,
+       offset_y,stride) to implement this correctly.
+
+2004-07-28  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * ext/dvdnav/README:
+         Update the README to use dvddemux
+       * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_getcaps):
+         Ensure getcaps returns a subset of the template caps
+       * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_base_init),
+       (gst_mpeg2subt_init):
+         Ensure getcaps returns a subset of the template caps
+       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_class_init),
+       (gst_dvd_demux_init), (gst_dvd_demux_get_video_stream),
+       (gst_dvd_demux_get_subpicture_stream),
+       (gst_dvd_demux_send_subbuffer), (gst_dvd_demux_set_cur_subpicture):
+       * gst/mpegstream/gstdvddemux.h:
+         Set the explicit caps on the current_video pad before pushing
+         anything
+       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_get_video_stream),
+       (gst_mpeg_demux_get_audio_stream):
+         Free caps used to gst_pad_set_explicit_caps, which takes a const
+         GstCaps *
+
+2004-07-28  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac: update GStreamer requirement to 0.8.4 because of
+         GstFraction.
+
+2004-07-28  Wim Taymans  <wim@fluendo.com>
+
+       * gst/wavparse/gstwavparse.c: (gst_wavparse_fmt),
+       (gst_wavparse_handle_seek), (gst_wavparse_srcpad_event):
+       Add the pad to the element after setting up the caps. This
+       makes it a lot easier to autoplug.
+
+2004-07-27  Steve Lhomme  <steve.lhomme@free.fr>
+
+       * gst/median/gstmedian.c:
+       * gst/mpeg2subt/gstmpeg2subt.c:
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+       * gst/mpegstream/gstdvddemux.c:
+       * gst/mpegstream/gstmpegdemux.c:
+       * gst/mpegstream/gstmpegpacketize.c:
+       * gst/rtjpeg/gstrtjpeg.c:
+       * gst/rtjpeg/gstrtjpegdec.c:
+       * gst/rtjpeg/gstrtjpegenc.c:
+       * gst/sine/gstsinesrc.c:
+       * gst/smooth/gstsmooth.c:
+       * gst/smpte/gstsmpte.c:
+       * gst/smpte/gstsmpte.h:
+       * gst/stereo/gststereo.c:
+       * gst/videofilter/gstgamma.c:
+       * gst/videofilter/gstvideobalance.c:
+       * gst/videofilter/gstvideofilter.c:
+       * gst/videofilter/gstvideoflip.c:
+       * gst/videoscale/gstvideoscale.c:
+       * gst/videoscale/videoscale.c:
+       * gst/videotestsrc/gstvideotestsrc.c:
+       * gst/videotestsrc/videotestsrc.c:
+       * gst/wavenc/gstwavenc.c:
+       * gst/wavparse/gstwavparse.c:
+         fix local includes and 64 bits constants
+
+2004-07-27  Steve Lhomme  <steve.lhomme@free.fr>
+
+       * win32/gst.sln:
+       * gst-libs/gst/*/*.vcproj:
+       * gst/*/*.vcproj:
+         more working plugins
+
+2004-07-27  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * testsuite/alsa/Makefile.am:
+       * testsuite/alsa/srcstate.c:
+       add test for alsasrc changing state
+
+2004-07-27  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * gst/silence/gstsilence.c: (gst_silence_init), (gst_silence_link),
+       (gst_silence_get):
+       * gst/silence/gstsilence.h:
+       fix silence generation for 16bit raw audio
+
+2004-07-27  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/matroska/matroska-demux.c:
+       (gst_matroska_demux_parse_metadata),
+       (gst_matroska_demux_video_caps), (gst_matroska_demux_plugin_init):
+       * gst/mpegaudio/common.c:
+       * gst/videoscale/gstvideoscale.c: (gst_videoscale_class_init),
+       (gst_videoscale_getcaps), (gst_videoscale_link),
+       (gst_videoscale_src_fixate), (gst_videoscale_init),
+       (gst_videoscale_finalize):
+       * gst/videoscale/gstvideoscale.h:
+       * gst/videotestsrc/gstvideotestsrc.c:
+       (gst_videotestsrc_get_capslist):
+       * gst/wavenc/gstwavenc.c:
+       * sys/oss/gstossmixer.c: (fill_labels):
+       * sys/ximage/ximagesink.c: (gst_ximagesink_renegotiate_size),
+       (gst_ximagesink_handle_xevents),
+       (gst_ximagesink_calculate_pixel_aspect_ratio),
+       (gst_ximagesink_xcontext_get), (gst_ximagesink_fixate),
+       (gst_ximagesink_getcaps), (gst_ximagesink_sink_link),
+       (gst_ximagesink_chain), (gst_ximagesink_set_xwindow_id),
+       (gst_ximagesink_set_property), (gst_ximagesink_get_property),
+       (gst_ximagesink_init), (gst_ximagesink_class_init):
+       * sys/ximage/ximagesink.h:
+       * sys/xvimage/xvimagesink.c:
+       (gst_xvimagesink_calculate_pixel_aspect_ratio),
+       (gst_xvimagesink_xcontext_get), (gst_xvimagesink_sink_link),
+       (gst_xvimagesink_chain), (gst_xvimagesink_buffer_alloc),
+       (gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
+       (gst_xvimagesink_init), (gst_xvimagesink_class_init):
+       * sys/xvimage/xvimagesink.h:
+         first batch of pixel aspect ratio commits.
+
+2004-07-27  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+       (gst_ffmpegcolorspace_class_init), (gst_ffmpegcolorspace_chain):
+       * gst/ffmpegcolorspace/imgconvert.c: (avpicture_fill):
+         handle stride, needs work if we want to move stride handling
+         upstream, but works correctly for our purposes.
+
+2004-07-27  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/videoscale/README:
+         add testing examples
+       * gst/videoscale/gstvideoscale.c: (gst_videoscale_link),
+       (gst_videoscale_chain):
+       * gst/videoscale/videoscale.c: (gst_videoscale_setup),
+       (gst_videoscale_get_size):
+         add get_size function that handles stride like videotestsrc.
+         fixes conversion for YUV formats for as much as I can test them.
+
+2004-07-27  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls),
+       (gst_ximagesink_ximage_new), (gst_ximagesink_ximage_destroy):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
+       (gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_destroy),
+       (gst_xvimagesink_xvimage_put):
+         further cleanups, logging, error handling and synchronizing
+
+2004-07-27  Wim Taymans  <wim@fluendo.com>
+
+       * gst/videomixer/videomixer.c: (gst_videomixer_pad_get_type),
+       (gst_videomixer_pad_class_init), (gst_videomixer_pad_get_property),
+       (gst_videomixer_pad_set_property),
+       (gst_videomixer_pad_sinkconnect), (gst_videomixer_pad_init),
+       (gst_video_mixer_background_get_type), (gst_videomixer_get_type),
+       (gst_videomixer_class_init), (gst_videomixer_init),
+       (gst_videomixer_getcaps), (gst_videomixer_request_new_pad),
+       (gst_videomixer_blend_ayuv_i420), (pad_zorder_compare),
+       (gst_videomixer_sort_pads), (gst_videomixer_fill_checker),
+       (gst_videomixer_fill_color), (gst_videomixer_fill_queues),
+       (gst_videomixer_blend_buffers), (gst_videomixer_update_queues),
+       (gst_videomixer_loop), (plugin_init):
+       Be a nicer negotiation citizen and provide a getcaps function on
+       the srcpad. This also fixes a crash when resizing.
+
+2004-07-27  Julien MOUTTE  <julien@moutte.net>
+
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
+       (gst_xvimagesink_xvimage_new): Some fixes to image size calculation.
+
+2004-07-27  Wim Taymans  <wim@fluendo.com>
+
+       * ext/libpng/gstpngdec.c: (gst_pngdec_src_getcaps):
+       * ext/libpng/gstpngenc.c: (gst_pngenc_class_init),
+       (gst_pngenc_init), (gst_pngenc_chain), (gst_pngenc_get_property),
+       (gst_pngenc_set_property):
+       * ext/libpng/gstpngenc.h:
+       Added snapshot property to pngenc.
+       removed g_print from pngdec
+
+2004-07-27  Steve Lhomme  <steve.lhomme@free.fr>
+
+       * gst/ac3parse/ac3parse.vcproj
+       * gst/adder/adder.vcproj
+       * gst/alpha/alpha.vcproj
+       * gst/alpha/alphacolor.vcproj
+       * gst/asfdemux/asf.vcproj
+       * gst/audioconvert/audioconvert.vcproj
+       * gst/audiorate/audiorate.vcproj
+       * gst/audioscale/audioscale.vcproj
+       * gst/auparse/auparse.vcproj
+       * gst/avi/avi.vcproj
+       * gst/cdxaparse/cdxaparse.vcproj
+       * gst/chart/chart.vcproj
+       * gst/colorspace/colorspace.vcproj
+       * gst/cutter/cutter.vcproj
+       * gst/debug/debug.vcproj
+       * gst/debug/efence.vcproj
+       * gst/debug/navigationtest.vcproj
+       * gst/deinterlace/deinterlace.vcproj
+       * gst/effectv/effectv.vcproj
+       * gst/ffmpegcolorspace/ffmpegcolorspace.vcproj
+       * gst/filter/filter.vcproj
+       * gst/flx/flxdec.vcproj
+       * gst/goom/goom.vcproj
+       * gst/interleave/interleave.vcproj
+       * gst/law/alaw.vcproj
+       * gst/law/mulaw.vcproj
+       * gst/matroska/matroska.vcproj
+       * gst/median/median.vcproj
+       * gst/mixmatrix/mixmatrix.vcproj
+       * gst/mpeg1sys/mpeg1systemencode.vcproj
+       * gst/mpeg1videoparse/mp1videoparse.vcproj
+       * gst/mpeg2sub/mpeg2subt.vcproj
+       * gst/mpegaudio/mpegaudio.vcproj
+       * gst/mpegaudioparse/mpegaudioparse.vcproj
+       * gst/mpegstream/mpegstream.vcproj
+       * gst/multifilesink/multifilesink.vcproj
+       * gst/multipart/multipart.vcproj
+       * gst/oneton/oneton.vcproj
+       * gst/overlay/overlay.vcproj
+       * gst/passthrough/passthrough.vcproj
+       * gst/qtdemux/qtdemux.vcproj
+       * gst/realmedia/rmdemux.vcproj
+       * gst/rtjpeg/rtjpeg.vcproj
+       * gst/rtp/rtp.vcproj
+       * gst/silence/silence.vcproj
+       * gst/sine/sinesrc.vcproj
+       * gst/smooth/smooth.vcproj
+       * gst/smpte/smpte.vcproj
+       * gst/spectrum/spectrum.vcproj
+       * gst/speed/speed.vcproj
+       * gst/stereo/stereo.vcproj
+       * gst/switch/switch.vcproj
+       * gst/tags/tagedit.vcproj
+       * gst/tcp/tcp.vcproj
+       * gst/typefind/typefindfunctions.vcproj
+       * gst/udp/udp.vcproj
+       * gst/videobox/videobox.vcproj
+       * gst/videocrop/videocrop.vcproj
+       * gst/videodrop/videodrop.vcproj
+       * gst/videofilter/gamma.vcproj
+       * gst/videofilter/videobalance.vcproj
+       * gst/videofilter/videofilter.vcproj
+       * gst/videofilter/videoflip.vcproj
+       * gst/videoflip/videoflip.vcproj
+       * gst/videomixer/videomixer.vcproj
+       * gst/videorate/videorate.vcproj
+       * gst/videoscale/videoscale.vcproj
+       * gst/videotestsrc/videotestsrc.vcproj
+       * gst/virtualdub/virtualdub.vcproj
+       * gst/volenv/volenv.vcproj
+       * gst/volume/volume.vcproj
+       * gst/wavenc/wavenc.vcproj
+       * gst/wavparse/wavparse.vcproj
+       * gst/y4m/y4menc.vcproj
+       * gst-libs/gst/audio/audio.vcproj
+       * gst-libs/gst/audio/audiofilter.vcproj
+       * gst-libs/gst/colorbalance/colorbalance.vcproj
+       * gst-libs/gst/idct/idtc.vcproj
+       * gst-libs/gst/media-info/media-info.vcproj
+       * gst-libs/gst/mixer/mixer.vcproj
+       * gst-libs/gst/navigation/navigation.vcproj
+       * gst-libs/gst/play/play.vcproj
+       * gst-libs/gst/propertyprobe/propertyprobe.vcproj
+       * gst-libs/gst/resample/resample.vcproj
+       * gst-libs/gst/riff/riff.vcproj
+       * gst-libs/gst/tuner/tuner.vcproj
+       * gst-libs/gst/video/video.vcproj
+       * gst-libs/gst/xoverlay/xoverlay.vcproj
+         avoid problems with math.h, fix release dependancy
+         rename GStreamer-0.8.lib to libgstreamer.lib
+
+2004-07-27  Julien MOUTTE  <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_decorate):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_decorate): When
+       the atom is not available we have to unlock the mutex. Fixes #148023
+
+2004-07-26  Steve Lhomme  <steve.lhomme@free.fr>
+
+       * gst-libs/gst/media-info/media-info.h:
+         issue for a vararg macro with MSVC
+
+2004-07-26  Steve Lhomme  <steve.lhomme@free.fr>
+
+       * gst/effectv/effectv.vcproj
+       * gst-libs/gst/idct/idct.vcproj:
+       * gst-libs/gst/media-info/media-info.vcproj:
+       * gst-libs/gst/navigation/navigation.vcproj:
+       * gst-libs/gst/propertyprobe/propertyprobe.vcproj:
+       * gst-libs/gst/video/video.vcproj:
+       * gst-libs/gst/xoverlay/xoverlay.vcproj:
+         fixes for build problems
+
+2004-07-26  Steve Lhomme  <steve.lhomme@free.fr>
+
+       * gst-libs/gst/audio/audio.def:
+       * gst-libs/gst/audio/riff.def:
+         add some definitions needed by plugins
+
+2004-07-26  Steve Lhomme  <steve.lhomme@free.fr>
+
+       * gst/asfdemux/gstasfmux.c
+         Fix some 64 bits constants to be glib friendly
+
+2004-07-26  Steve Lhomme  <steve.lhomme@free.fr>
+
+       * gst/ac3parse/gstac3parse.c
+       * gst/audioscale/gstaudioscale.c
+       * gst/auparse/gstauparse.c
+       * gst/colorspace/gstcolorspace.c
+       * gst/colorspace/yuv2rgb.h
+         local include fixes
+
+2004-07-26  Steve Lhomme  <steve.lhomme@free.fr>
+
+       * win32/gst.sln
+         add more plugins to the build
+
+2004-07-26  Julien MOUTTE  <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls),
+       (gst_ximagesink_ximage_new): Some more fixes to image size calculation.
+
+2004-07-26  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/level/gstlevel.c: (gst_level_link), (gst_level_chain),
+       (gst_level_set_property), (gst_level_get_property),
+       (gst_level_base_init), (gst_level_class_init):
+         add debugging categories.  cleanups.
+
+2004-07-26  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/videoscale/videoscale.c: (gst_videoscale_setup),
+       (gst_videoscale_planar411), (gst_videoscale_planar400),
+       (gst_videoscale_packed422), (gst_videoscale_packed422rev),
+       (gst_videoscale_scale_nearest_str1),
+       (gst_videoscale_scale_nearest_str2),
+       (gst_videoscale_scale_nearest_str4),
+       (gst_videoscale_scale_nearest_16bit),
+       (gst_videoscale_scale_nearest_24bit):
+         fixed stride issues
+         tested with 320x240 -> 321, 322, 324 x240
+         tested with YV12, I420, YUY2, UYVY
+         fixed packed422rev (don't think it could have worked before)
+         by testing with UYVY
+
+2004-07-26  Benjamin Otte  <otte@gnome.org>
+
+       * ext/lame/gstlame.c: (gst_lame_sink_link), (gst_lame_init),
+       (gst_lame_chain), (gst_lame_setup), (gst_lame_change_state),
+       (plugin_init):
+         add debugging category, add error checks like checking return values
+         of setup calls, make sure it still works after
+         PLAYING=>NULL=>PLAYING, fix encoding of mono streams
+
+2004-07-26  Wim Taymans  <wim@fluendo.com>
+
+       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_get_video_stream),
+       (gst_mpeg_demux_get_audio_stream),
+       (gst_mpeg_demux_process_private):
+       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_send_data):
+       Check for error codes from the negotiation functions. Make sure
+       we really set the pad caps when a new pad is created.
+
+2004-07-26  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+       (gst_ffmpeg_caps_to_pix_fmt):
+       * gst/ffmpegcolorspace/gstffmpegcodecmap.h:
+       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+       (gst_ffmpegcolorspace_pad_link):
+         don't make function do two things at the same time without reason.
+
+2004-07-26  Steve Lhomme  <steve.lhomme@free.fr>
+
+       * gst/ac3parse/ac3parse.vcproj
+       * gst/adder/adder.vcproj
+       * gst/alpha/alpha.vcproj
+       * gst/alpha/alphacolor.vcproj
+       * gst/asfdemux/asf.vcproj
+       * gst/audioconvert/audioconvert.vcproj
+       * gst/audiorate/audiorate.vcproj
+       * gst/audioscale/audioscale.vcproj
+       * gst/auparse/auparse.vcproj
+       * gst/avi/avi.vcproj
+       * gst/cdxaparse/cdxaparse.vcproj
+       * gst/chart/chart.vcproj
+       * gst/colorspace/colorspace.vcproj
+       * gst/cutter/cutter.vcproj
+       * gst/debug/debug.vcproj
+       * gst/debug/efence.vcproj
+       * gst/debug/navigationtest.vcproj
+       * gst/deinterlace/deinterlace.vcproj
+       * gst/effectv/effectv.vcproj
+       * gst/ffmpegcolorspace/ffmpegcolorspace.vcproj
+       * gst/filter/filter.vcproj
+       * gst/flx/flxdec.vcproj
+       * gst/goom/goom.vcproj
+       * gst/interleave/interleave.vcproj
+       * gst/law/alaw.vcproj
+       * gst/law/mulaw.vcproj
+       * gst/matroska/matroska.vcproj
+       * gst/median/median.vcproj
+       * gst/mixmatrix/mixmatrix.vcproj
+       * gst/mpeg1sys/mpeg1systemencode.vcproj
+       * gst/mpeg1videoparse/mp1videoparse.vcproj
+       * gst/mpeg2sub/mpeg2subt.vcproj
+       * gst/mpegaudio/mpegaudio.vcproj
+       * gst/mpegaudioparse/mpegaudioparse.vcproj
+       * gst/mpegstream/mpegstream.vcproj
+       * gst/multifilesink/multifilesink.vcproj
+       * gst/multipart/multipart.vcproj
+       * gst/oneton/oneton.vcproj
+       * gst/overlay/overlay.vcproj
+       * gst/passthrough/passthrough.vcproj
+       * gst/qtdemux/qtdemux.vcproj
+       * gst/realmedia/rmdemux.vcproj
+       * gst/rtjpeg/rtjpeg.vcproj
+       * gst/rtp/rtp.vcproj
+       * gst/silence/silence.vcproj
+       * gst/sine/sinesrc.vcproj
+       * gst/smooth/smooth.vcproj
+       * gst/smpte/smpte.vcproj
+       * gst/spectrum/spectrum.vcproj
+       * gst/speed/speed.vcproj
+       * gst/stereo/stereo.vcproj
+       * gst/switch/switch.vcproj
+       * gst/tags/tagedit.vcproj
+       * gst/tcp/tcp.vcproj
+       * gst/typefind/typefindfunctions.vcproj
+       * gst/udp/udp.vcproj
+       * gst/videobox/videobox.vcproj
+       * gst/videocrop/videocrop.vcproj
+       * gst/videodrop/videodrop.vcproj
+       * gst/videofilter/gamma.vcproj
+       * gst/videofilter/videobalance.vcproj
+       * gst/videofilter/videofilter.vcproj
+       * gst/videofilter/videoflip.vcproj
+       * gst/videoflip/videoflip.vcproj
+       * gst/videomixer/videomixer.vcproj
+       * gst/videorate/videorate.vcproj
+       * gst/videoscale/videoscale.vcproj
+       * gst/videotestsrc/videotestsrc.vcproj
+       * gst/virtualdub/virtualdub.vcproj
+       * gst/volenv/volenv.vcproj
+       * gst/volume/volume.vcproj
+       * gst/wavenc/wavenc.vcproj
+       * gst/wavparse/wavparse.vcproj
+       * gst/y4m/y4menc.vcproj
+         more plugins supported under windows
+
+2004-07-26  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
+       (gst_ximagesink_ximage_put), (gst_ximagesink_renegotiate_size),
+       (gst_ximagesink_chain), (gst_ximagesink_buffer_alloc):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
+       (gst_xvimagesink_chain), (gst_xvimagesink_buffer_alloc):
+         Add debugging statements.  Use the sizes as returned by the
+         *CreateImage calls.
+
+2004-07-26  Johan Dahlin  <johan@gnome.org>
+
+       * gst/tcp/gsttcpclientsrc.c (gst_tcpclientsrc_get): Make sure that
+       the pad is negotiated.
+
+       * gst/ffmpegcolorspace/gstffmpegcolorspace.c (gst_ffmpegcolorspace_chain): Ditto
+
+2004-07-26  Steve Lhomme  <steve.lhomme@free.fr>
+
+       * gst-libs/gst/colorbalance/colorbalance.vcproj:
+       * gst-libs/gst/idct/idct.vcproj:
+       * gst-libs/gst/media-info/media-info.vcproj:
+       * gst-libs/gst/mixer/mixer.vcproj:
+       * gst-libs/gst/navigation/navigation.vcproj:
+       * gst-libs/gst/play/play.vcproj:
+       * gst-libs/gst/propertyprobe/propertyprobe.vcproj:
+       * gst-libs/gst/resample/resample.vcproj:
+       * gst-libs/gst/tuner/tuner.vcproj:
+       * gst-libs/gst/video/video.vcproj:
+       * gst-libs/gst/xoverlay/xoverlay.vcproj:
+         more plugins supported under windows
+
+2004-07-25 Iain <iain@prettypeople.org>
+
+       * gst/wavparse/gstwavparse.c (gst_wavparse_fmt): Set the caps on the
+       pad now rather than when the pad is created because state changes wipe
+       explicit caps (fixes #148043).
+
+2004-07-25  Sebastien Cote  <sc5@hermes.usherb.ca>
+
+       reviewed by Benjamin Otte  <otte@gnome.org>
+
+       * ext/mad/gstmad.c:
+         fix mad plugin crashing on Sun (fixes #148289)
+
+2004-07-25  Steve Lhomme  <steve.lhomme@free.fr>
+
+       * gst/avi/avi.def:
+       * gst/avi/avi.vcproj:
+       * gst/matroska/matroska.def:
+       * gst/matroska/matroska.vcproj:
+         remove unused .def files
+
+2004-07-25  Steve Lhomme  <steve.lhomme@free.fr>
+
+       * gst-libs/gst/audio/gstaudiofilter.c:
+         Clean the local include
+
+2004-07-25  Steve Lhomme  <steve.lhomme@free.fr>
+
+       * win32/gst.sln:
+       * gst-libs/gst/audio/audio.def:
+       * gst-libs/gst/audio/audio.vcproj:
+       * gst-libs/gst/audio/audiofilter.vcproj:
+       * gst-libs/gst/audio/riff.def:
+       * gst-libs/gst/audio/riff.vcproj:
+       * gst-libs/gst/gst-libs.def:
+       * gst-libs/gst/gst-libs.vcproj:
+       * gst/avi/avi.vcproj:
+       * gst/avi/avi.vcproj:
+         Copy the files where needed after building, cleaner projects
+
+2004-07-25  Steve Lhomme  <steve.lhomme@free.fr>
+
+       * gst/matroska/ebml-write.c:
+         Fix some 64 bits constants to be glib friendly
+
+2004-07-24  Steve Lhomme  <steve.lhomme@free.fr>
+
+       * win32/gst.sln:
+       * gst-libs/gst/gst-libs.def:
+       * gst-libs/gst/gst-libs.vcproj:
+       * gst/matroska/matroska.def:
+       * gst/matroska/matroska.vcproj:
+         Add the preliminary canvas to build plugins on Win32
+
+2004-07-23  Benjamin Otte  <otte@gnome.org>
+
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
+         don't enfore negotiation from source side, it breaks
+         sinesrc ! audioconvert ! osssink
+
+2004-07-22  David Schleef  <ds@schleef.org>
+
+       * gst/typefind/gsttypefindfunctions.c: (plugin_init): Add typefind
+       for ELF files, since they can easily be recognized as audio/mpeg.
+       (bug #147441)
+
+2004-07-22  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/videoscale/videoscale.c: (gst_videoscale_setup),
+       (gst_videoscale_planar411), (gst_videoscale_scale_nearest_32bit),
+       (gst_videoscale_scale_nearest_24bit),
+       (gst_videoscale_scale_nearest_16bit):
+         fix 16bit and 24bit for stride (24bit might need testing)
+         don't pretend we do more than one algorithm
+
+2004-07-22  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * configure.ac:
+       * gst/Makefile.am:
+       * gst/multifilesink/Makefile.am:
+       * gst/multifilesink/gstmultifilesink.c:
+       (gst_multifilesink_get_formats),
+       (gst_multifilesink_get_query_types), (_do_init),
+       (gst_multifilesink_base_init), (gst_multifilesink_class_init),
+       (gst_multifilesink_init), (gst_multifilesink_dispose),
+       (gst_multifilesink_set_location), (gst_multifilesink_set_property),
+       (gst_multifilesink_get_property), (gst_multifilesink_open_file),
+       (gst_multifilesink_close_file), (gst_multifilesink_next_file),
+       (gst_multifilesink_pad_query), (gst_multifilesink_handle_event),
+       (gst_multifilesink_chain), (gst_multifilesink_change_state),
+       (gst_multifilesink_uri_get_type),
+       (gst_multifilesink_uri_get_protocols),
+       (gst_multifilesink_uri_get_uri), (gst_multifilesink_uri_set_uri),
+       (gst_multifilesink_uri_handler_init), (plugin_init):
+       * gst/multifilesink/gstmultifilesink.h:
+       * testsuite/Makefile.am:
+       * testsuite/multifilesink/Makefile.am:
+       * testsuite/multifilesink/fakesrc_test.c: (gst_newmedia_base_init),
+       (gst_newmedia_class_init), (gst_newmedia_init),
+       (gst_newmedia_chain), (gst_newmedia_trigger), (test_format),
+       (newfile_signal), (test_signal), (main):
+       multifilesink plugin for creating new files every time a new media
+       discontinuity event occurs
+
+2004-07-22  Wim Taymans  <wim@fluendo.com>
+
+       * gst/alpha/Makefile.am:
+       * gst/alpha/gstalphacolor.c: (gst_alpha_color_get_type),
+       (gst_alpha_color_base_init), (gst_alpha_color_class_init),
+       (gst_alpha_color_init), (gst_alpha_color_set_property),
+       (gst_alpha_color_get_property), (gst_alpha_color_sink_link),
+       (transform), (gst_alpha_color_chain),
+       (gst_alpha_color_change_state), (plugin_init):
+       Stupid plugin to to RGBA to AYUV conversion because none of
+       the colorspace plugins can handle that yet.
+
+2004-07-22  Wim Taymans  <wim@fluendo.com>
+
+       * examples/seeking/seek.c: (update_scale), (main):
+       * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
+       (gst_decode_bin_class_init), (gst_decode_bin_is_dynamic),
+       (gst_decode_bin_factory_filter), (compare_ranks), (print_feature),
+       (gst_decode_bin_init), (gst_decode_bin_dispose),
+       (find_compatibles), (close_pad_link), (try_to_link_1), (new_pad),
+       (no_more_pads), (close_link), (type_found),
+       (gst_decode_bin_set_property), (gst_decode_bin_get_property),
+       (plugin_init):
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type),
+       (gst_play_base_bin_class_init), (gst_play_base_bin_init),
+       (gst_play_base_bin_dispose), (queue_overrun),
+       (gen_preroll_element), (remove_prerolls), (unknown_type),
+       (no_more_pads), (new_stream), (setup_source),
+       (gst_play_base_bin_set_property), (gst_play_base_bin_get_property),
+       (play_base_eos), (gst_play_base_bin_change_state),
+       (gst_play_base_bin_add_element),
+       (gst_play_base_bin_remove_element),
+       (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream),
+       (gst_play_base_bin_unlink_stream),
+       (gst_play_base_bin_get_streaminfo):
+       * gst/playback/gstplaybin.c: (gen_video_element),
+       (gen_audio_element):
+       * gst/playback/gststreaminfo.h:
+       More playback updates, attempt to fix things after the state change
+       breakage.
+
+2004-07-22  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/videoscale/videoscale.c: (gst_videoscale_planar411),
+       (gst_videoscale_scale_nearest_16bit):
+         comment algorithm
+
+2004-07-22  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/videotestsrc/gstvideotestsrc.c:
+       (gst_videotestsrc_class_init), (gst_videotestsrc_src_link),
+       (gst_videotestsrc_init), (gst_videotestsrc_get),
+       (gst_videotestsrc_set_pattern), (gst_videotestsrc_set_property),
+       (gst_videotestsrc_get_property):
+       * gst/videotestsrc/gstvideotestsrc.h:
+       * gst/videotestsrc/videotestsrc.c:
+       * gst/videotestsrc/videotestsrc.h:
+         cleanup and commenting
+
+2004-07-21  Wim Taymans  <wim@fluendo.com>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_init),
+       (gst_ogg_demux_get_formats), (gst_ogg_demux_src_query),
+       (gst_ogg_demux_src_event), (gst_ogg_demux_src_convert),
+       (gst_ogg_demux_handle_event), (gst_ogg_demux_seek_before),
+       (_find_chain_get_unknown_part), (_find_streams_check),
+       (gst_ogg_demux_push), (gst_ogg_pad_push):
+       * ext/theora/theoradec.c: (theora_get_formats),
+       (theora_dec_src_convert), (theora_dec_sink_convert),
+       (theora_dec_src_query), (theora_dec_src_event), (theora_dec_event),
+       (theora_dec_chain):
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_get_formats),
+       (vorbis_dec_convert), (vorbis_dec_src_query),
+       (vorbis_dec_src_event), (vorbis_dec_event):
+       More seeking fixes, oggdemux now supports seeking to time and
+       uses the downstream element to convert granulepos to time.
+       Seeking in theora-only ogg files now works.
+
+2004-07-21  Wim Taymans  <wim@fluendo.com>
+
+       * ext/theora/theoradec.c: (gst_theora_dec_init),
+       (theora_get_formats), (theora_get_event_masks),
+       (theora_get_query_types), (theora_dec_src_convert),
+       (theora_dec_sink_convert), (theora_dec_src_query),
+       (theora_dec_src_event), (theora_dec_event), (theora_dec_chain):
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_get_formats),
+       (vorbis_get_event_masks), (vorbis_get_query_types),
+       (gst_vorbis_dec_init), (vorbis_dec_convert),
+       (vorbis_dec_src_query), (vorbis_dec_src_event), (vorbis_dec_event):
+       Added query/convert/formats functions to vorbis and theora decoders
+       so that the outside world can use them too. Fixed seeking on an
+       ogg/theora/vorbis file by disabling the seeking seeking on the
+       theora srcpad.
+
+2004-07-21  Julien MOUTTE  <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
+       (gst_ximagesink_renegotiate_size), (gst_ximagesink_sink_link),
+       (gst_ximagesink_chain), (gst_ximagesink_set_xwindow_id): Optimize
+       images creation for both elements. We don't create the image on caps
+       nego or renego, we just destroy the internal one if present if it does
+       not match the needs. The chain function takes care of creating a new
+       image when needed.
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
+       (gst_xvimagesink_xwindow_decorate), (gst_xvimagesink_sink_link),
+       (gst_xvimagesink_chain), (gst_xvimagesink_buffer_alloc),
+       (gst_xvimagesink_set_xwindow_id): Additionally xvimage now contains
+       the image format information. The buffer pool checks for the context
+       image format and discard images with different formats.
+       * sys/xvimage/xvimagesink.h: Adding im_format in the xvimage structure.
+
+2004-07-21  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+       (gst_ffmpegcolorspace_chain):
+         no point in doing any chaining if the pad we want to push from
+         isn't usable.
+
+2004-07-20  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-media.c:
+       (gst_riff_create_audio_caps_with_data):
+         Fix double end-to-native symbol conversion (#148021).
+
+2004-07-20  David Schleef  <ds@schleef.org>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_decorate):
+       Don't use an Atom that doesn't exist.
+
+2004-07-20  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
+       (gst_multifdsink_add), (gst_multifdsink_get_stats),
+       (gst_multifdsink_client_remove),
+       (gst_multifdsink_handle_client_write),
+       (gst_multifdsink_queue_buffer):
+       * gst/tcp/gstmultifdsink.h:
+       More multifdsink stats. Avoid deadlock by releasing locks
+       before sending out a signal.
+
+2004-07-20  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * po/LINGUAS:
+       * po/hu.po:
+         added Hungarian translation (Laszlo Dvornik)
+
+2004-07-20  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
+       (gst_multifdsink_add), (gst_multifdsink_client_remove),
+       (gst_multifdsink_handle_client_write),
+       (gst_multifdsink_queue_buffer):
+       * gst/tcp/gsttcp-marshal.list:
+       Fixed the stupid marshal definition.
+
+2004-07-20  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
+       (gst_multifdsink_init), (gst_multifdsink_add),
+       (gst_multifdsink_client_remove),
+       (gst_multifdsink_handle_client_write),
+       (gst_multifdsink_queue_buffer), (gst_multifdsink_chain),
+       (gst_multifdsink_set_property), (gst_multifdsink_get_property),
+       (gst_multifdsink_init_send):
+       * gst/tcp/gstmultifdsink.h:
+       Added more stats, added timeout for a client, fixed some typos
+       and added some comments.
+
+2004-07-20  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_class_init),
+       (gst_multifdsink_add), (gst_multifdsink_get_stats),
+       (gst_multifdsink_client_remove),
+       (gst_multifdsink_handle_client_write):
+       * gst/tcp/gstmultifdsink.h:
+       * gst/tcp/gsttcp-marshal.list:
+       Added get_stats method that returns a GValueArray of
+       stats values.
+
+2004-07-19  Benjamin Otte  <otte@gnome.org>
+
+       * ext/ladspa/gstladspa.c: (gst_ladspa_base_init):
+         make sure longname, description and author are valid UTF-8
+
+2004-07-19  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_change_state),
+       (gst_ximagesink_set_property):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_change_state),
+       (gst_xvimagesink_set_property):
+         make sure SYNCHRONOUS is respected after getting the X context
+
+2004-07-18  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/matroska/matroska-demux.c:
+       (gst_matroska_demux_handle_src_event),
+       (gst_matroska_demux_parse_blockgroup):
+       * gst/matroska/matroska-ids.h:
+         add BlockReference tag and ignore it to clear out log.
+         ignore NAVIGATION events to clear out log.
+
+2004-07-18  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/matroska/matroska-demux.c: (gst_matroska_demux_class_init),
+       (gst_matroska_demux_add_stream):
+       * gst/matroska/matroska-mux.c: (gst_matroska_mux_class_init):
+         add debug categories
+
+2004-07-16  Wim Taymans  <wim@fluendo.com>
+
+       * ext/libpng/Makefile.am:
+       * ext/libpng/gstpng.c: (plugin_init):
+       * ext/libpng/gstpngdec.c: (user_error_fn), (user_warning_fn),
+       (gst_pngdec_get_type), (gst_pngdec_base_init),
+       (gst_pngdec_class_init), (gst_pngdec_sinklink), (gst_pngdec_init),
+       (gst_pngdec_src_getcaps), (user_read_data), (gst_pngdec_chain):
+       * ext/libpng/gstpngdec.h:
+       Added png decoder.
+
+2004-07-16  Julien MOUTTE  <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xerror),
+       (gst_ximagesink_check_xshm_calls), (gst_ximagesink_ximage_new),
+       (gst_ximagesink_ximage_destroy), (gst_ximagesink_sink_link),
+       (gst_ximagesink_chain), (gst_ximagesink_buffer_free),
+       (gst_ximagesink_buffer_alloc):
+       * sys/ximage/ximagesink.h:
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
+       (gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_destroy),
+       (gst_xvimagesink_chain), (gst_xvimagesink_buffer_free),
+       (gst_xvimagesink_buffer_alloc):
+       * sys/xvimage/xvimagesink.h: Getting the 2 video sinks synchronized
+       again. Using internal data pointer of the x(v)image to store image's
+       data to be coherent with the buffer alloc mechanism. Investigated the
+       image destruction code to be sure that everything gets freed correctly.
+
+2004-07-16  Wim Taymans  <wim@fluendo.com>
+
+       * gst-libs/gst/riff/riff-read.c:
+       (gst_riff_read_strf_vids_with_data),
+       (gst_riff_read_strf_auds_with_data):
+       * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query),
+       (gst_avi_demux_add_stream), (gst_avi_demux_stream_header):
+       Make sure we don't create 0 sized subbuffers in riff-read.
+       Signal the no more pads signal after reading the avi header.
+
+2004-07-16  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
+       (gst_decode_bin_class_init), (gst_decode_bin_is_dynamic),
+       (gst_decode_bin_factory_filter), (compare_ranks), (print_feature),
+       (gst_decode_bin_init), (gst_decode_bin_dispose),
+       (find_compatibles), (close_pad_link), (try_to_link_1), (new_pad),
+       (no_more_pads), (close_link), (type_found),
+       (gst_decode_bin_set_property), (gst_decode_bin_get_property),
+       (gst_decode_bin_change_state), (plugin_init):
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type),
+       (gst_play_base_bin_class_init), (gst_play_base_bin_init),
+       (gst_play_base_bin_dispose), (queue_overrun),
+       (gen_preroll_element), (remove_prerolls), (unknown_type),
+       (no_more_pads), (new_stream), (setup_source),
+       (gst_play_base_bin_set_property), (gst_play_base_bin_get_property),
+       (play_base_eos), (gst_play_base_bin_change_state),
+       (gst_play_base_bin_add_element),
+       (gst_play_base_bin_remove_element),
+       (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream),
+       (gst_play_base_bin_unlink_stream),
+       (gst_play_base_bin_get_streaminfo):
+       * gst/playback/gstplaybasebin.h:
+       Better error recovery. Added configurable preroll queue size. Faster
+       detection of no-more-pads.
+
+2004-07-16  Wim Taymans  <wim@fluendo.com>
+
+       * gst-libs/gst/video/video.h:
+       Added 32 bits RGBA. Not sure if we should use another mime-type
+       for alpha rgb. Currently the presence of the alpha_mask property
+       signals an alpha channel.
+
+2004-07-16  Wim Taymans  <wim@fluendo.com>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support):
+       FPS seems to be 0.0 to MAX everywhere else.
+
+2004-07-15  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-media.c:
+       (gst_riff_create_video_caps_with_data):
+         mp42/mp43 (no caps) exist too.
+       * gst/matroska/matroska-demux.c: (gst_matroska_demux_video_caps):
+         Set pixel_width/height; we've got them in-caps.
+       * gst/typefind/gsttypefindfunctions.c: (plugin_init):
+       * gst/wavparse/gstwavparse.c: (plugin_init):
+         Both are valid primary.
+       * sys/oss/gstossmixer.c:
+         Remove i18n hack and enable translations.
+
+2004-07-15  Benjamin Otte  <otte@gnome.org>
+
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
+       (gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_destroy):
+         fix for non-shm xv. Original patch by Tim Ringenbach (fixes #147248)
+
+2004-07-15  Benjamin Otte  <otte@gnome.org>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_open_audio),
+       (gst_alsa_sw_params_dump), (gst_alsa_hw_params_dump),
+       (gst_alsa_close_audio):
+         disable some of the debugging code for now. Writing debugging to a
+         buffer is broken in current alsalib releases.
+
+2004-07-12  Benjamin Otte  <otte@gnome.org>
+
+       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_alloc_buffer):
+         use bufferpools
+
+2004-07-14  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/theora/theoradec.c: (gst_theora_dec_class_init),
+       (theora_dec_src_query), (theora_dec_event):
+       * ext/theora/theoraenc.c: (gst_theora_enc_class_init):
+         add debugging categories.  Remove \n's.
+
+2004-07-13  Johan Dahlin  <johan@gnome.org>
+
+       * gst/playback/gstplaybin.c (gst_play_bin_set_property)
+       (gst_play_bin_get_property): Impl.
+
+2004-07-13  Wim Taymans  <wim@fluendo.com>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_seek_before):
+       When trying to find the stream length, seek back N pages
+       instead of just one, where N is the number of streams in
+       the current chain.
+
+2004-07-13  Wim Taymans  <wim@fluendo.com>
+
+       * gst-libs/gst/riff/riff-media.c:
+       (gst_riff_create_audio_caps_with_data),
+       (gst_riff_create_audio_caps),
+       (gst_riff_create_audio_template_caps):
+       * gst-libs/gst/riff/riff-media.h:
+       * gst-libs/gst/riff/riff-read.c:
+       (gst_riff_read_strf_vids_with_data),
+       (gst_riff_read_strf_auds_with_data), (gst_riff_read_strf_auds):
+       * gst-libs/gst/riff/riff-read.h:
+       * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query),
+       (gst_avi_demux_add_stream):
+       Set codec_data on caps for avidemuxer.
+
+2004-07-12  David Schleef  <ds@schleef.org>
+
+       * configure.ac: Fix test for Objective C
+
+2004-07-12  Jan Schmidt  <thaytan@mad.scientist.com>
+       * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_get_capslist),
+       (gst_gdk_pixbuf_chain):
+         Add svg and pcx to template caps, and ensure that getcaps returns a
+         subset of the template caps.
+         Copy each row manually for output, as gdkpixbuf may pad the
+         rowstride to a 32-bit word boundary.
+
+2004-07-12  Wim Taymans  <wim@fluendo.com>
+
+       * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps),
+       (gst_riff_create_video_template_caps):
+       Fix the template caps to include some more media types.
+
+2004-07-12  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
+       (gst_decode_bin_class_init), (gst_decode_bin_factory_filter),
+       (compare_ranks), (print_feature), (gst_decode_bin_init),
+       (gst_decode_bin_dispose), (find_compatibles), (close_pad_link),
+       (try_to_link_1), (new_pad), (close_link), (type_found),
+       (gst_decode_bin_set_property), (gst_decode_bin_get_property),
+       (gst_decode_bin_change_state), (plugin_init):
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type),
+       (gst_play_base_bin_class_init), (gst_play_base_bin_init),
+       (gst_play_base_bin_dispose), (queue_overrun),
+       (gen_preroll_element), (remove_prerolls), (no_more_pads),
+       (new_stream), (setup_source), (gst_play_base_bin_set_property),
+       (gst_play_base_bin_get_property), (play_base_eos),
+       (gst_play_base_bin_change_state), (gst_play_base_bin_add_element),
+       (gst_play_base_bin_remove_element),
+       (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream),
+       (gst_play_base_bin_unlink_stream),
+       (gst_play_base_bin_get_streaminfo):
+       * gst/playback/gstplaybasebin.h:
+       * gst/playback/gstplaybin.c: (gst_play_bin_get_type),
+       (gst_play_bin_class_init), (gst_play_bin_init),
+       (gst_play_bin_dispose), (gst_play_bin_set_property),
+       (gst_play_bin_get_property), (gen_video_element),
+       (gen_audio_element), (remove_sinks), (setup_sinks),
+       (gst_play_bin_change_state), (gst_play_bin_get_event_masks),
+       (gst_play_bin_send_event), (gst_play_bin_get_formats),
+       (gst_play_bin_convert), (gst_play_bin_get_query_types),
+       (gst_play_bin_query), (plugin_init):
+       * gst/playback/test4.c: (main):
+       More fixes on reusing of the element.
+
+2004-07-11  Benjamin Otte  <otte@gnome.org>
+
+       * ext/mad/gstmad.c: (normal_seek):
+         allow seeking for other methods than just SET
+
+2004-07-11  Andy Wingo  <wingo@pobox.com>
+
+       * gst/audioconvert/gstaudioconvert.c (gst_audio_convert_link): For
+       float, "any" caps -> buffer_frames=[0,MAX].
+
+       * gst/interleave/interleave.c (interleave_getcaps): Seems the core
+       doesn't intersect our caps with the template any more. Do it
+       ourselves.
+       (interleave_buffered_loop): Use g_newa instead of malloc/free.
+
+2004-07-09  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
+       (gst_decode_bin_class_init), (gst_decode_bin_factory_filter),
+       (compare_ranks), (print_feature), (gst_decode_bin_init),
+       (gst_decode_bin_dispose), (find_compatibles), (close_pad_link),
+       (try_to_link_1), (new_pad), (close_link), (type_found),
+       (gst_decode_bin_set_property), (gst_decode_bin_get_property),
+       (gst_decode_bin_change_state), (plugin_init):
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type),
+       (gst_play_base_bin_class_init), (gst_play_base_bin_init),
+       (gst_play_base_bin_dispose), (queue_overrun),
+       (gen_preroll_element), (remove_prerolls), (no_more_pads),
+       (new_stream), (setup_source), (gst_play_base_bin_set_property),
+       (gst_play_base_bin_get_property), (play_base_eos),
+       (gst_play_base_bin_change_state), (gst_play_base_bin_add_element),
+       (gst_play_base_bin_remove_element),
+       (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream),
+       (gst_play_base_bin_unlink_stream),
+       (gst_play_base_bin_get_streaminfo):
+       * gst/playback/gstplaybasebin.h:
+       * gst/playback/gstplaybin.c: (gst_play_bin_get_type),
+       (gst_play_bin_class_init), (gst_play_bin_init),
+       (gst_play_bin_dispose), (gst_play_bin_set_property),
+       (gst_play_bin_get_property), (gen_video_element),
+       (gen_audio_element), (remove_sinks), (setup_sinks),
+       (gst_play_bin_change_state), (gst_play_bin_get_event_masks),
+       (gst_play_bin_send_event), (gst_play_bin_get_formats),
+       (gst_play_bin_convert), (gst_play_bin_get_query_types),
+       (gst_play_bin_query), (plugin_init):
+       * gst/playback/test4.c: (main):
+       Work on object reuse and seeking.
+
+2004-07-09  Wim Taymans  <wim@fluendo.com>
+
+       * examples/seeking/seek.c: (iterate):
+       Don't consume all CPU in the idle loop.
+
+2004-07-09  Wim Taymans  <wim@fluendo.com>
+
+       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_new_output_pad),
+       (gst_mpeg_demux_parse_packet), (gst_mpeg_demux_process_private):
+       Add pad to element *after* setting the pad functions so that
+       the scheduler can use the correct ones.
+
+2004-07-09  Wim Taymans  <wim@fluendo.com>
+
+       * ext/theora/theoradec.c: (theora_dec_from_granulepos),
+       (theora_dec_src_query), (theora_dec_src_event), (theora_dec_chain):
+       Sync to keyframe after seek
+
+2004-07-09  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_change_state):
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event),
+       (gst_alsa_sink_loop), (gst_alsa_sink_change_state):
+       * ext/alsa/gstalsasrc.c: (gst_alsa_src_change_state):
+       * ext/libvisual/visual.c: (gst_visual_change_state):
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_change_state):
+       * ext/theora/theoradec.c: (theora_dec_change_state):
+       * ext/theora/theoraenc.c: (theora_enc_change_state):
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_change_state):
+       * gst-libs/gst/navigation/navigation.c:
+       * gst/adder/gstadder.c: (gst_adder_change_state):
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_chain),
+       (gst_audio_convert_get_buffer):
+       * gst/multipart/multipartdemux.c:
+       (gst_multipart_demux_change_state):
+       * gst/playback/gstdecodebin.c: (gst_decode_bin_change_state):
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_change_state):
+       * gst/playback/gstplaybin.c: (gst_play_bin_change_state):
+       * gst/videoscale/gstvideoscale.c:
+       (gst_videoscale_handle_src_event):
+       * gst/volume/gstvolume.c: (volume_chain_int16):
+         don't assert in state change, this should be done by the base
+         GstElement class.
+         various debugging fixes.
+
+2004-07-08  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
+
+       * configure.ac:
+       * gst-libs/gst/play/play.c: (gst_play_pipeline_setup),
+       (gst_play_dispose), (gst_play_set_location),
+       (gst_play_set_data_src), (gst_play_set_video_sink),
+       (gst_play_set_audio_sink), (gst_play_set_visualization),
+       (gst_play_connect_visualization), (gst_play_get_sink_element),
+       (gst_play_get_all_by_interface):
+       * gst-libs/gst/play/play.h:
+         add new method to get elements implementing an interface.
+         add various error logging
+
+2004-07-08  Wim Taymans  <wim@fluendo.com>
+
+       * examples/seeking/seek.c: (make_dv_pipeline), (make_avi_pipeline),
+       (make_mpeg_pipeline), (make_mpegnt_pipeline),
+       (make_playerbin_pipeline), (query_durations_elems),
+       (query_durations_pads), (query_positions_elems),
+       (query_positions_pads), (update_scale), (iterate), (stop_seek),
+       (main):
+       Added playbin seeking example.
+
+2004-07-08  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
+
+       * gst-libs/gst/play/play.c: (gst_play_set_location),
+       (gst_play_set_data_src), (gst_play_set_video_sink),
+       (gst_play_set_audio_sink), (gst_play_set_visualization),
+       (gst_play_connect_visualization), (gst_play_get_framerate):
+         use a macro to look up elements from hash table
+
+2004-07-08  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
+
+       * gst-libs/gst/play/play.c: (gst_play_pipeline_setup),
+       (gst_play_get_length_callback), (gst_play_set_location),
+       (gst_play_seek_to_time), (gst_play_set_data_src),
+       (gst_play_set_video_sink), (gst_play_set_audio_sink),
+       (gst_play_set_visualization), (gst_play_connect_visualization),
+       (gst_play_get_sink_element):
+       - add debugging info
+       - fix looking up sink elements by iterating over complete caps
+       - put everything except for source and autoplugger in a complete bin
+
+2004-07-08  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_drain_audio):
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_flush_one_pad),
+       (gst_alsa_sink_check_event), (gst_alsa_sink_mmap),
+       (gst_alsa_sink_write), (gst_alsa_sink_loop):
+       * ext/alsa/gstalsasink.h:
+       - add debugging info
+       - clean up schizophrenia of data/buffer/event
+       - fix double event unref error
+
+2004-07-08  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/Makefile.am:
+       Add headers to noinst
+
+2004-07-08  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
+
+       * tools/gst-launch-ext-m.m:
+       * tools/gst-launch-ext.1.in:
+         convert to the third millenium
+
+2004-07-07  David Schleef  <ds@schleef.org>
+
+       * sys/dxr3/Makefile.am: noinst_SOURCES should be nodist_SOURCES
+
+2004-07-07  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/Makefile.am:
+       * gst/playback/README:
+       * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
+       (gst_decode_bin_class_init), (gst_decode_bin_factory_filter),
+       (compare_ranks), (print_feature), (gst_decode_bin_init),
+       (gst_decode_bin_dispose), (find_compatibles), (close_pad_link),
+       (try_to_link_1), (new_pad), (close_link), (type_found),
+       (gst_decode_bin_set_property), (gst_decode_bin_get_property),
+       (plugin_init):
+       * gst/playback/gstplaybasebin.c: (gst_play_base_bin_get_type),
+       (gst_play_base_bin_class_init), (gst_play_base_bin_init),
+       (gst_play_base_bin_dispose), (rebuild_pipeline), (queue_overrun),
+       (gen_preroll_element), (no_more_pads), (new_stream),
+       (setup_source), (gst_play_base_bin_set_property),
+       (gst_play_base_bin_get_property), (gst_play_base_bin_change_state),
+       (gst_play_base_bin_add_element),
+       (gst_play_base_bin_remove_element),
+       (gst_play_base_bin_mute_stream), (gst_play_base_bin_link_stream),
+       (gst_play_base_bin_unlink_stream),
+       (gst_play_base_bin_get_streaminfo):
+       * gst/playback/gstplaybasebin.h:
+       * gst/playback/gstplaybin.c: (gst_play_bin_get_type),
+       (gst_play_bin_class_init), (gst_play_bin_init),
+       (gst_play_bin_dispose), (gst_play_bin_set_property),
+       (gst_play_bin_get_property), (gen_video_element),
+       (gen_audio_element), (setup_sinks), (gst_play_bin_change_state),
+       (gst_play_bin_get_event_masks), (gst_play_bin_send_event),
+       (gst_play_bin_get_formats), (gst_play_bin_convert),
+       (gst_play_bin_get_query_types), (gst_play_bin_query),
+       (plugin_init):
+       * gst/playback/gststreaminfo.c: (gst_stream_type_get_type),
+       (gst_stream_info_get_type), (gst_stream_info_class_init),
+       (gst_stream_info_init), (gst_stream_info_new),
+       (gst_stream_info_dispose), (gst_stream_info_set_property),
+       (gst_stream_info_get_property):
+       * gst/playback/gststreaminfo.h:
+       * gst/playback/test.c: (gen_video_element), (gen_audio_element),
+       (main):
+       * gst/playback/test2.c: (main):
+       * gst/playback/test3.c: (update_scale), (main):
+       More playbin fixes. Added README. Do better element filtering.
+       Added base class to preroll media. Added test apps.
+
+2004-07-07  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
+
+       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_flush_decoder):
+       * ext/mpeg2dec/gstmpeg2dec.h:
+         various debugging improvements.  Reset stream to next picture
+         instead of sequence header, otherwise seeks cannot work.
+
+2004-07-07  Wim Taymans  <wim@fluendo.com>
+
+       * gst/videobox/gstvideobox.c: (gst_video_box_fill_get_type),
+       (gst_video_box_class_init), (gst_video_box_set_property),
+       (gst_video_box_i420), (gst_video_box_ayuv), (gst_video_box_chain):
+       Use pad_alloc where possible.
+
+2004-07-07  Wim Taymans  <wim@fluendo.com>
+
+       * sys/oss/gstosselement.c: (gst_osselement_reset),
+       (gst_osselement_parse_caps):
+       * sys/oss/gstosselement.h:
+       * sys/oss/gstosssrc.c: (gst_osssrc_get):
+       Fix offset on osssrc.
+
+2004-07-07  Wim Taymans  <wim@fluendo.com>
+
+       * ext/theora/theora.c: (plugin_init):
+       * ext/theora/theoradec.c: (theora_dec_from_granulepos),
+       (theora_dec_src_query), (theora_dec_chain):
+       * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
+       (theora_enc_sink_link), (theora_buffer_from_packet),
+       (theora_push_packet), (theora_enc_chain):
+       Fix theora granulepos calculation.
+       Fix overflow in duration/position calculation.
+       Bump rank to PRIMARY for theoradec.
+       Use granulepos of last packet to calculate position.
+       Set keyframe flag on buffers when needed.
+
+2004-07-06  David Schleef  <ds@schleef.org>
+
+       * gst/playback/Makefile.am: 'test' in bin_PROGRAMS?  Are you
+       serious?  (Fixed, obviously.)
+
+2004-07-06  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * po/LINGUAS:
+       * po/cs.po:
+         added Czech translation (Miloslav Trmac)
+
+2004-07-05  Wim Taymans  <wim@fluendo.com>
+
+       * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
+       (gst_decode_bin_class_init), (gst_decode_bin_factory_filter),
+       (compare_ranks), (gst_decode_bin_init), (gst_decode_bin_dispose),
+       (find_compatibles), (close_pad_link), (try_to_link_1), (new_pad),
+       (close_link), (type_found), (gst_decode_bin_set_property),
+       (gst_decode_bin_get_property), (gst_decode_bin_get_event_masks),
+       (gst_decode_bin_send_event), (gst_decode_bin_get_formats),
+       (gst_decode_bin_convert), (gst_decode_bin_get_query_types),
+       (gst_decode_bin_query), (plugin_init):
+       * gst/playback/gstplaybin.c: (gst_play_bin_get_type),
+       (gst_play_bin_class_init), (gst_play_bin_init),
+       (gst_play_bin_dispose), (rebuild_pipeline), (get_audio_element),
+       (get_video_element), (new_pad), (setup_source),
+       (gst_play_bin_set_property), (gst_play_bin_get_property),
+       (gst_play_bin_change_state), (gst_play_bin_add_element),
+       (gst_play_bin_remove_element), (gst_play_bin_get_event_masks),
+       (gst_play_bin_send_event), (gst_play_bin_get_formats),
+       (gst_play_bin_convert), (gst_play_bin_get_query_types),
+       (gst_play_bin_query), (gst_play_bin_get_clock), (plugin_init):
+       * gst/playback/test.c: (main):
+       More fixes, cleaned up playbin, make it use decodebin. Added
+       threaded property to playbin.
+
+2004-07-05  Wim Taymans  <wim@fluendo.com>
+
+       * configure.ac:
+       * gst/playback/Makefile.am:
+       * gst/playback/decodetest.c: (main):
+       * gst/playback/gstdecodebin.c: (gst_decode_bin_get_type),
+       (gst_decode_bin_class_init), (gst_decode_bin_factory_filter),
+       (compare_ranks), (gst_decode_bin_init), (gst_decode_bin_dispose),
+       (find_compatibles), (close_pad_link), (try_to_link_1), (new_pad),
+       (close_link), (type_found), (gst_decode_bin_set_property),
+       (gst_decode_bin_get_property), (gst_decode_bin_change_state),
+       (gst_decode_bin_get_event_masks), (gst_decode_bin_send_event),
+       (gst_decode_bin_get_formats), (gst_decode_bin_convert),
+       (gst_decode_bin_get_query_types), (gst_decode_bin_query),
+       (plugin_init):
+       * gst/playback/gstplaybin.c: (gst_play_bin_get_type),
+       (gst_play_bin_class_init), (gst_play_bin_init),
+       (gst_play_bin_dispose), (gen_default_output), (rebuild_pipeline),
+       (collect_sink_pads), (find_compatibles), (close_pad_link),
+       (try_to_link_1), (new_pad), (close_link), (type_found),
+       (setup_source), (gst_play_bin_set_property),
+       (gst_play_bin_get_property), (gst_play_bin_factory_filter),
+       (compare_ranks), (gst_play_bin_collect_factories),
+       (gst_play_bin_change_state), (gst_play_bin_add_element),
+       (gst_play_bin_remove_element), (gst_play_bin_get_event_masks),
+       (gst_play_bin_send_event), (gst_play_bin_get_formats),
+       (gst_play_bin_convert), (gst_play_bin_get_query_types),
+       (gst_play_bin_query), (gst_play_bin_get_clock), (plugin_init):
+       * gst/playback/test.c: (main):
+       Added some playback helper elements and some test apps, very alpha
+       still.
+
+2004-07-04  Benjamin Otte  <otte@gnome.org>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_xrun_recovery):
+         only restart audio when we indeed have an xrun to fix repeated
+         xruns. Fix suggested by Giuliano Pochini.
+
+2004-07-03  David Schleef  <ds@schleef.org>
+
+       * ext/alsa/gstalsaplugin.c: (gst_alsa_error_wrapper): Disable
+       call to gst_debug_log() if debugging is disabled (bug #145118)
+
+2004-07-03  Benjamin Otte  <otte@gnome.org>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_xrun_recovery):
+         use our own functions for restarting the alsa device.
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
+         I should apply patches myself - use MIN for the third argument, not
+         the second, this fixes seeking
+
+2004-07-02  David Schleef  <ds@schleef.org>
+
+       * ext/flac/gstflacdec.c: (gst_flacdec_class_init),
+       (gst_flacdec_write):  Actually, GST_PAD_CAPS() has nothing to
+       do with the logic.
+
+2004-07-02  David Schleef  <ds@schleef.org>
+
+       * ext/flac/gstflacdec.c: (gst_flacdec_write):  Set duration on
+       output buffers.  Fix logic mistake.  (bug #144866)
+
+2004-07-02  David Schleef  <ds@schleef.org>
+
+       * gst-libs/gst/xoverlay/Makefile.am: xoverlay no longer depends
+       on X.  (bug #144753)
+
+2004-07-02  David Schleef  <ds@schleef.org>
+
+       * gst/wavenc/gstwavenc.c: (gst_wavenc_setup),
+       (gst_wavenc_stop_file): Switch to GST_WRITE_UINT32_LE macros
+       (bug #144624)
+       * sys/oss/gstosselement.c: (gst_osselement_probe_caps),
+       (gst_osselement_rate_probe_check): Add another workaround for
+       buggy drivers (bug #145336)
+
+2004-07-02  David Schleef  <ds@schleef.org>
+
+       * gst/tcp/gstmultifdsink.c: (gst_multifdsink_handle_client_write):
+       Most systems don't have MSG_NOSIGNAL.
+
+2004-07-02  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * Makefile.am:
+       * gst-libs/gst/colorbalance/Makefile.am:
+       * gst-libs/gst/mixer/Makefile.am:
+       * gst-libs/gst/play/Makefile.am:
+       * gst-libs/gst/tuner/Makefile.am:
+         (hopefully) fix both install and dist and make error message useful.
+         needs testing across automakes.
+
+2004-07-02  Benjamin Otte  <otte@gnome.org>
+
+       * ext/ogg/gstogg.c: (plugin_init):
+         we require bytestream now
+       * ext/ogg/gstoggdemux.c:
+         huge diff to implement chain setup in a fast and generic way. This
+         improves tag reading and startup of huge files (read: Theora videos)
+         quite a bit. It probably contains bugs, too, so please test.
+         Seeking is not improved to the fast method.
+
+2004-06-29  Wim Taymans  <wim@fluendo.com>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
+       * ext/ogg/gstoggmux.c:
+       Fix memleak in oggdemux when running unconnected pads.
+       doc update in mux, start working on keyframe mode.
+
+2004-06-29  Benjamin Otte  <otte@gnome.org>
+
+       * sys/oss/gstosssink.c:
+       * sys/oss/gstosssrc.c:
+         advertise correct template caps - we indeed do non-native endianness
+         and 8bit audio has no endianness
+       * sys/ximage/ximagesink.c: (gst_ximagesink_getcaps):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_getcaps):
+         avoid (wrong) duplications in getcaps function and return
+         template caps
+
+2004-06-29  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gstmultifdsink.c: (gst_recover_policy_get_type),
+       (gst_multifdsink_class_init), (gst_multifdsink_add),
+       (gst_multifdsink_remove), (gst_multifdsink_clear),
+       (gst_multifdsink_client_remove),
+       (gst_multifdsink_handle_client_read),
+       (gst_multifdsink_client_queue_data),
+       (gst_multifdsink_client_queue_caps),
+       (gst_multifdsink_client_queue_buffer),
+       (gst_multifdsink_handle_client_write),
+       (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
+       (gst_multifdsink_handle_clients), (gst_multifdsink_thread),
+       (gst_multifdsink_init_send), (gst_multifdsink_close):
+       Fix wrong GList iteration that could crash the server when
+       more then 2 clients disconnect at the same time. Read all the
+       pending commands in one batch to recover from command storms under
+       very heavy load.
+
+2004-06-28  Wim Taymans  <wim@fluendo.com>
+
+       * gst/videomixer/videomixer.c: (gst_videomixer_pad_get_type),
+       (gst_videomixer_pad_class_init), (gst_videomixer_pad_get_property),
+       (gst_videomixer_pad_set_property),
+       (gst_videomixer_pad_sinkconnect), (gst_videomixer_pad_init),
+       (gst_video_mixer_background_get_type), (gst_videomixer_get_type),
+       (gst_videomixer_class_init), (gst_videomixer_init),
+       (gst_videomixer_request_new_pad), (gst_videomixer_blend_ayuv_i420),
+       (pad_zorder_compare), (gst_videomixer_sort_pads),
+       (gst_videomixer_fill_checker), (gst_videomixer_fill_color),
+       (gst_videomixer_fill_queues), (gst_videomixer_blend_buffers),
+       (gst_videomixer_update_queues), (gst_videomixer_loop),
+       (plugin_init):
+       Avoid divide by zero, choose masterpad as the pad with the highest
+       framerate.
+
+2004-06-27  Julien Moutte  <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_decorate),
+       (gst_ximagesink_xwindow_new):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_decorate),
+       (gst_xvimagesink_xwindow_new): I prefer locking the mutex in the
+       function directly. We might want to call it from somewhere else one day.
+
+2004-06-27  Julien Moutte  <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_decorate),
+       (gst_ximagesink_xwindow_new):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_decorate),
+       (gst_xvimagesink_xwindow_new): Trying to fix the random behaviour of
+       window decorations.
+
+2004-06-27  Wim Taymans  <wim@fluendo.com>
+
+       * ext/dv/gstdvdec.c: (gst_dvdec_class_init), (gst_dvdec_init),
+       (gst_dvdec_video_getcaps), (gst_dvdec_video_link),
+       (gst_dvdec_push), (gst_dvdec_loop), (gst_dvdec_change_state),
+       (gst_dvdec_set_property), (gst_dvdec_get_property):
+       * ext/dv/gstdvdec.h:
+       Implement drop_factor property to lower the framerate with
+       a factor.
+
+2004-06-27  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-libs/gst/colorbalance/Makefile.am:
+       * gst-libs/gst/mixer/Makefile.am:
+       * gst-libs/gst/play/Makefile.am:
+       * gst-libs/gst/tuner/Makefile.am:
+         unbreak Company's fix that didn't install the -enum.h files
+
+2004-06-27  Wim Taymans  <wim@fluendo.com>
+
+       * ext/dv/gstdvdec.c: (gst_dvdec_push), (gst_dvdec_loop),
+       (gst_dvdec_change_state):
+       * ext/dv/gstdvdec.h:
+       Fix timestamp, duration and offset of the buffers.
+
+2004-06-27  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gstmultifdsink.c: (gst_recover_policy_get_type),
+       (gst_multifdsink_class_init), (gst_multifdsink_add),
+       (gst_multifdsink_remove), (gst_multifdsink_clear),
+       (gst_multifdsink_client_remove),
+       (gst_multifdsink_handle_client_read),
+       (gst_multifdsink_client_queue_data),
+       (gst_multifdsink_client_queue_caps),
+       (gst_multifdsink_client_queue_buffer),
+       (gst_multifdsink_handle_client_write),
+       (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
+       (gst_multifdsink_handle_clients), (gst_multifdsink_thread),
+       (gst_multifdsink_init_send), (gst_multifdsink_close):
+       * gst/tcp/gstmultifdsink.h:
+       * gst/tcp/gsttcpserversink.c:
+       (gst_tcpserversink_handle_server_read),
+       (gst_tcpserversink_handle_select), (gst_tcpserversink_close):
+       More multifdsink fixes, more recovery policy fixes.
+       Removed stupid g_print
+
+2004-06-26  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/Makefile.am:
+       * gst/tcp/gstmultifdsink.c: (gst_recover_policy_get_type),
+       (gst_multifdsink_get_type), (gst_multifdsink_base_init),
+       (gst_multifdsink_class_init), (gst_multifdsink_init),
+       (gst_multifdsink_debug_fdset), (gst_multifdsink_client_remove),
+       (gst_multifdsink_handle_client_read),
+       (gst_multifdsink_client_queue_data),
+       (gst_multifdsink_client_queue_caps),
+       (gst_multifdsink_client_queue_buffer),
+       (gst_multifdsink_handle_client_write),
+       (gst_multifdsink_recover_client), (gst_multifdsink_queue_buffer),
+       (gst_multifdsink_handle_clients), (gst_multifdsink_thread),
+       (gst_multifdsink_chain), (gst_multifdsink_set_property),
+       (gst_multifdsink_get_property), (gst_multifdsink_init_send),
+       (gst_multifdsink_close), (gst_multifdsink_change_state):
+       * gst/tcp/gstmultifdsink.h:
+       * gst/tcp/gsttcpplugin.c: (plugin_init):
+       * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_get_type),
+       (gst_tcpserversink_class_init), (gst_tcpserversink_init),
+       (gst_tcpserversink_handle_server_read),
+       (gst_tcpserversink_handle_select),
+       (gst_tcpserversink_set_property), (gst_tcpserversink_get_property),
+       (gst_tcpserversink_init_send), (gst_tcpserversink_close):
+       * gst/tcp/gsttcpserversink.h:
+       Added multifdsink, made tcpserversink a subclass of fdsink, removed
+       one of the locks, added recovery policy to multifdsink.
+
+2004-06-26  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/videorate/gstvideorate.c: (gst_videorate_chain):
+         fix decision for when getting frames with same timestamp
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_class_init), (gst_v4lsrc_init),
+       (gst_v4lsrc_get), (gst_v4lsrc_set_property),
+       (gst_v4lsrc_get_property):
+       * sys/v4l/gstv4lsrc.h:
+         add latency offset property
+
+2004-06-26  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/videorate/gstvideorate.c: (gst_videorate_chain),
+       (plugin_init):
+         fix debugging. add category.
+
+2004-06-25  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/sine/gstsinesrc.c: (gst_sinesrc_get):
+          fix wrong offsets
+
+2004-06-25  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/alsa/gstalsasrc.c: (gst_alsa_src_init),
+       (gst_alsa_src_get_time), (gst_alsa_src_loop),
+       (gst_alsa_src_change_state):
+         return a time that is in sync with the element's processing
+
+2004-06-25  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init),
+       (gst_tcpserversink_init), (gst_tcpserversink_handle_server_read),
+       (gst_tcpserversink_client_remove),
+       (gst_tcpserversink_handle_client_read),
+       (gst_tcpserversink_client_queue_data),
+       (gst_tcpserversink_client_queue_caps),
+       (gst_tcpserversink_client_queue_buffer),
+       (gst_tcpserversink_handle_client_write),
+       (gst_tcpserversink_queue_buffer),
+       (gst_tcpserversink_handle_clients), (gst_tcpserversink_thread),
+       (gst_tcpserversink_chain), (gst_tcpserversink_set_property),
+       (gst_tcpserversink_get_property), (gst_tcpserversink_init_send),
+       (gst_tcpserversink_close):
+       * gst/tcp/gsttcpserversink.h:
+       Serversink rewrite. Really do non blocking writes to clients and
+       maintain an internal queue to handle slower clients while not
+       disturbing fast clients.
+
+2004-06-25  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_get):
+         better debug, don't override OFFSET and OFFSET_END
+
+2004-06-25  Iain <iain@prettypeople.org>
+
+       * gst-libs/gst/media-info/media-info-priv.c (gmi_set_mime): Add
+       name=source for the wavparse pipeline.
+
+2004-06-24  Johan Dahlin  <johan@gnome.org>
+
+       * ext/theora/theoraenc.c (theora_enc_chain): Call
+       gst_pad_try_set_caps instead of gst_pad_set_explicit_caps so the
+       streamheader caps are set correctly.
+
+2004-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/vorbis/vorbisenc.c: (raw_caps_factory),
+       (gst_vorbisenc_setup), (gst_vorbisenc_set_property):
+         respect minimum bitrate; same could be done for max bitrate
+
+2004-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/vorbis/vorbisenc.c: (raw_caps_factory),
+       (gst_vorbisenc_setup):
+         fix sample rate range
+
+2004-06-24  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/vorbis/oggvorbisenc.c: (gst_oggvorbisenc_class_init),
+       (gst_oggvorbisenc_setup):
+       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_class_init),
+       (gst_vorbisenc_setup):
+         resolve ambiguities in code and description
+
+2004-06-24  Wim Taymans  <wim@fluendo.com>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_start), (gst_alsa_xrun_recovery):
+       * ext/alsa/gstalsa.h:
+       * ext/alsa/gstalsasrc.c: (gst_alsa_src_init),
+       (gst_alsa_src_update_avail), (gst_alsa_src_loop):
+       Use alsa trigger_tstamp to get the timestamp of the first
+       sample in the buffer for more precise sync. Some cleanups.
+
+2004-06-24  Wim Taymans  <wim@fluendo.com>
+
+       * gst/audiorate/gstaudiorate.c: (gst_audiorate_link),
+       (gst_audiorate_init), (gst_audiorate_chain),
+       (gst_audiorate_set_property), (gst_audiorate_get_property):
+       * gst/videorate/gstvideorate.c: (gst_videorate_class_init),
+       (gst_videorate_chain):
+       Added some logging, fixed an overflow bug in videorate.
+
+2004-06-24  Benjamin Otte  <otte@gnome.org>
+
+       * ext/kio/Makefile.am:
+         fix for builddir != srcdir and distcheck
+
+2004-06-24  Benjamin Otte  <otte@gnome.org>
+
+       * gst-libs/gst/colorbalance/Makefile.am:
+       * gst-libs/gst/mixer/Makefile.am:
+       * gst-libs/gst/play/Makefile.am:
+       * gst-libs/gst/tuner/Makefile.am:
+       * gst/tcp/Makefile.am:
+       * sys/dxr3/Makefile.am:
+         don't include -enumtypes.[ch] or -marshal.[ch] files in the disted
+         tarball.
+         Also add all *.list files that were missing.
+       * Makefile.am:
+         add a distcheck hook to ensure the above doesn't happen again.
+
+2004-06-23  David I. Lehn  <dlehn@users.sourceforge.net>
+
+       * ext/Makefile.am: s/DTS_DIR=dvdread/DTS_DIR=dts/
+
+2004-06-23  Colin Walters  <walters@redhat.com>
+
+       * m4/Makefile.am: Distribute gst-fionread.m4.
+
+2004-06-23  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac: back to dev
+
+2004-06-23  Wim Taymans  <wim@fluendo.com>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_change_state), (gst_alsa_start),
+       (gst_alsa_xrun_recovery):
+       * ext/alsa/gstalsa.h:
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event),
+       (gst_alsa_sink_loop), (gst_alsa_sink_get_time):
+       * ext/alsa/gstalsasrc.c: (gst_alsa_src_init),
+       (gst_alsa_src_get_time), (gst_alsa_src_update_avail),
+       (gst_alsa_src_loop):
+       Add clock to alsasrc. Take new capture timestamp when
+       restarting after an overrun. Split up some functions between
+       alsasrc and alsasink.
+
+=== release 0.8.2 ===
+
+2004-06-23  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_init), (gst_alsa_dispose),
+       (gst_alsa_change_state), (gst_alsa_update_avail),
+       (gst_alsa_xrun_recovery):
+       * ext/alsa/gstalsa.h:
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
+         merge back changes from release
+
+2004-06-23  Wim Taymans  <wim@fluendo.com>
+
+       * gst/audiorate/gstaudiorate.c: (gst_audiorate_class_init),
+       (gst_audiorate_init), (gst_audiorate_chain),
+       (gst_audiorate_set_property), (gst_audiorate_get_property):
+       Implement sample dropping and notify
+
+2004-06-22  Wim Taymans  <wim@fluendo.com>
+
+       * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
+       (theora_enc_sink_link), (theora_buffer_from_packet),
+       (theora_push_packet), (theora_enc_chain):
+       Some cleanups, make sure the timestamps are correct.
+
+2004-06-22  Wim Taymans  <wim@fluendo.com>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_get_time), (gst_alsa_clock_update),
+       (gst_alsa_change_state), (gst_alsa_update_avail),
+       (gst_alsa_xrun_recovery):
+       * ext/alsa/gstalsa.h:
+       * ext/alsa/gstalsasrc.c: (gst_alsa_src_loop):
+       Cleanups, take queued samples into account when reporting
+       the time.
+
+2004-06-22  Wim Taymans  <wim@fluendo.com>
+
+       * gst/videorate/gstvideorate.c: (gst_videorate_class_init),
+       (gst_videorate_init):
+       Initialize the property as well.
+
+2004-06-22  Wim Taymans  <wim@fluendo.com>
+
+       * gst/videorate/gstvideorate.c: (gst_videorate_class_init),
+       (gst_videorate_init), (gst_videorate_chain),
+       (gst_videorate_set_property), (gst_videorate_get_property):
+       Add property to make videorate silent.
+       Add property to prefer new frames over old ones.
+
+2004-06-22  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * sys/osxvideo/Makefile.am:
+        Workaround so that the osxvideo .so file gets linked with the
+        Cocoa, OpenGL and QuickTime frameworks
+
+2004-06-22  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * sys/osxaudio/Makefile.am:
+        Workaround so that the osxaudio .so file gets linked with the
+        CoreAudio framework
+
+2004-06-22  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * configure.ac:
+       Whoops, my fault...fixed build issues
+
+2004-06-22  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * configure.ac:
+        Add objective-c support if running in Darwin/Mac OS X
+       * sys/Makefile.am:
+        * sys/osxvideo:
+        * sys/osxvideo/Makefile.am:
+        * sys/osxvideo/osxvideosink.h:
+        * sys/osxvideo/osxvideosink.m:
+        * sys/osxvideo/cocoawindow.h:
+        * sys/osxvideo/cocoawindow.m:
+        Add osxvideosink, a cocoa-based osx video sink
+
+
+2004-06-19  Jan Schmidt  <thaytan@mad.scientist.com>
+       * ext/dvdnav/gst-dvd:
+       Grab the gconf key from the right spot
+       * gst/debug/gstnavseek.c: (gst_navseek_init),
+       (gst_navseek_segseek), (gst_navseek_handle_src_event),
+       (gst_navseek_chain):
+       * gst/debug/gstnavseek.h:
+         Add 's', 'e' and 'l' keypresses to navseek to define the start,end
+         and loop parameters of a segment seek.
+       * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_init),
+       (gst_videotestsrc_get_event_masks),
+       (gst_videotestsrc_handle_src_event), (gst_videotestsrc_get):
+       * gst/videotestsrc/gstvideotestsrc.h:
+         Add seeking support to videotestsrc
+         Initialise the timestamp_offset variable.
+
+2004-06-18  Wim Taymans  <wim@fluendo.com>
+
+       * ext/sidplay/gstsiddec.cc:
+       Fix negotiation and set correct end offset.
+
+2004-06-18  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac: branch and prerelease
+
+2004-06-17  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_init),
+       (gst_tcpclientsrc_getcaps), (gst_tcpclientsrc_get),
+       (gst_tcpclientsrc_init_receive):
+       * gst/tcp/gsttcpclientsrc.h:
+          read caps when connecting to server for GDP so we set them correctly
+
+2004-06-17  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/videorate/gstvideorate.c: (gst_videorate_chain):
+         notify drops and duplicates
+       * gst/videoscale/videoscale.c: (videoscale_get_structure):
+         no good reason to limit ourselves to 100x100
+
+2004-06-17  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_class_init), (gst_v4lsrc_init),
+       (gst_v4lsrc_open), (gst_v4lsrc_src_link), (gst_v4lsrc_getcaps),
+       (gst_v4lsrc_get), (gst_v4lsrc_set_property),
+       (gst_v4lsrc_get_property):
+       * sys/v4l/gstv4lsrc.h:
+       * sys/v4l/v4l_calls.c: (gst_v4l_set_window_properties),
+       (gst_v4l_open), (gst_v4l_get_picture), (gst_v4l_get_audio),
+       (gst_v4l_set_audio):
+       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_grab_frame),
+       (gst_v4lsrc_try_capture):
+       * sys/v4l/v4lsrc_calls.h:
+         change try_palette to more general try_capture
+         add autoprobe option so we can turn off autoprobing
+         various fixes
+
+2004-06-17  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+         add videorate
+       * sys/ximage/ximagesink.c: (gst_ximagesink_finalize),
+       (gst_ximagesink_class_init):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_finalize),
+       (gst_xvimagesink_class_init):
+          run them as finalize, not dispose, since dispose can be invoked
+          multiple times
+
+2004-06-17  Wim Taymans  <wim@fluendo.com>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_init), (gst_alsa_dispose),
+       (gst_alsa_get_time), (gst_alsa_xrun_recovery):
+       * ext/alsa/gstalsa.h:
+       * ext/alsa/gstalsaclock.c: (gst_alsa_clock_get_type):
+       * ext/alsa/gstalsasrc.c: (gst_alsa_src_init), (gst_alsa_src_loop),
+       (gst_alsa_src_change_state):
+       * ext/alsa/gstalsasrc.h:
+       Make the xrun code timestamp and offset the buffers correctly.
+       moved the clock to the base class, use alsa methods to get time.
+       Do correct timestamping on outgoing buffers.
+
+2004-06-17  Wim Taymans  <wim@fluendo.com>
+
+       * gst/audiorate/Makefile.am:
+       * gst/audiorate/gstaudiorate.c: (gst_audiorate_get_type),
+       (gst_audiorate_base_init), (gst_audiorate_class_init),
+       (gst_audiorate_link), (gst_audiorate_init), (gst_audiorate_chain),
+       (gst_audiorate_set_property), (gst_audiorate_get_property),
+       (gst_audiorate_change_state), (plugin_init):
+       Added an audiorate converter that fills in gaps.
+
+2004-06-17  Johan Dahlin  <johan@gnome.org>
+
+       * ext/tcp/*: Revert Zaheer changes, to make things actually work again.
+
+2004-06-16  Wim Taymans  <wim@fluendo.com>
+
+       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get):
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_sync_mode_get_type),
+       (gst_v4lsrc_class_init), (gst_v4lsrc_init), (gst_v4lsrc_get_fps),
+       (gst_v4lsrc_get), (gst_v4lsrc_set_property),
+       (gst_v4lsrc_get_property):
+       * sys/v4l/gstv4lsrc.h:
+       Added a copy mode to v4lsrc where it will output a copied version
+       of its internal hardware buffer.
+       Fix the wrong FLAG_SET usage. The flags are integers, not bits, you
+       can't | them.
+
+2004-06-16  Wim Taymans  <wim@fluendo.com>
+
+       * sys/oss/gstosssrc.c: (gst_osssrc_get):
+       Timestamp fixes.
+
+2004-06-16  Wim Taymans  <wim@fluendo.com>
+
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_sync_mode_get_type),
+       (gst_v4lsrc_class_init), (gst_v4lsrc_init), (gst_v4lsrc_get_fps),
+       (gst_v4lsrc_get), (gst_v4lsrc_set_property),
+       (gst_v4lsrc_get_property):
+       * sys/v4l/gstv4lsrc.h:
+       * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay):
+       Added a sync mode enum property to control v4lsrc timestamp method
+       Removed the use-fixed-fps property and moved functionality in
+       the enum.
+       Don't error on an error value from v4l-conf, it might not always
+       be a real error.
+
+2004-06-16  Wim Taymans  <wim@fluendo.com>
+
+       * gst/videorate/Makefile.am:
+       * gst/videorate/gstvideorate.c: (gst_videorate_get_type),
+       (gst_videorate_base_init), (gst_videorate_class_init),
+       (gst_videorate_getcaps), (gst_videorate_link),
+       (gst_videorate_init), (gst_videorate_chain),
+       (gst_videorate_set_property), (gst_videorate_get_property),
+       (gst_videorate_change_state), (plugin_init):
+       Added a video timestamp corrector.
+
+2004-06-15  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       fixed a potential leak with previous commit
+
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head):
+
+2004-06-15  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head):
+       Added missing refcount, fixes bug #144425
+       Cheers Tim for finding the bug
+
+2004-06-15  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/v4l/gstv4l.c: (plugin_init):
+       * sys/v4l/gstv4lcolorbalance.c:
+       * sys/v4l/gstv4lcolorbalance.h:
+       * sys/v4l/gstv4lelement.c:
+       * sys/v4l/gstv4lelement.h:
+       * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_class_init):
+       * sys/v4l/gstv4lmjpegsink.h:
+       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_class_init):
+       * sys/v4l/gstv4lmjpegsrc.h:
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get_fps_list),
+       (gst_v4lsrc_get_fps), (gst_v4lsrc_srcconnect),
+       (gst_v4lsrc_getcaps), (gst_v4lsrc_get):
+       * sys/v4l/gstv4lsrc.h:
+       * sys/v4l/gstv4ltuner.c:
+       * sys/v4l/gstv4ltuner.h:
+       * sys/v4l/gstv4lxoverlay.c:
+       * sys/v4l/gstv4lxoverlay.h:
+       * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay),
+       (gst_v4l_set_window), (gst_v4l_enable_overlay):
+       * sys/v4l/v4l_calls.c: (gst_v4l_set_window_properties),
+       (gst_v4l_open), (gst_v4l_get_picture), (gst_v4l_get_audio),
+       (gst_v4l_set_audio):
+       * sys/v4l/v4l_calls.h:
+       * sys/v4l/v4lmjpegsink_calls.c: (gst_v4lmjpegsink_sync_thread),
+       (gst_v4lmjpegsink_queue_frame), (gst_v4lmjpegsink_sync_frame),
+       (gst_v4lmjpegsink_set_buffer), (gst_v4lmjpegsink_set_playback),
+       (gst_v4lmjpegsink_playback_init),
+       (gst_v4lmjpegsink_playback_start), (gst_v4lmjpegsink_get_buffer),
+       (gst_v4lmjpegsink_play_frame), (gst_v4lmjpegsink_wait_frame),
+       (gst_v4lmjpegsink_playback_stop),
+       (gst_v4lmjpegsink_playback_deinit):
+       * sys/v4l/v4lmjpegsink_calls.h:
+       * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_queue_frame),
+       (gst_v4lmjpegsrc_sync_next_frame), (gst_v4lmjpegsrc_set_buffer),
+       (gst_v4lmjpegsrc_set_capture), (gst_v4lmjpegsrc_set_capture_m),
+       (gst_v4lmjpegsrc_capture_init), (gst_v4lmjpegsrc_capture_start),
+       (gst_v4lmjpegsrc_grab_frame), (gst_v4lmjpegsrc_requeue_frame),
+       (gst_v4lmjpegsrc_capture_stop), (gst_v4lmjpegsrc_capture_deinit):
+       * sys/v4l/v4lmjpegsrc_calls.h:
+       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_queue_frame),
+       (gst_v4lsrc_sync_frame), (gst_v4lsrc_set_capture),
+       (gst_v4lsrc_capture_init), (gst_v4lsrc_capture_start),
+       (gst_v4lsrc_grab_frame), (gst_v4lsrc_requeue_frame),
+       (gst_v4lsrc_capture_stop), (gst_v4lsrc_capture_deinit),
+       (gst_v4lsrc_try_palette):
+       * sys/v4l/v4lsrc_calls.h:
+         bunch of paranoia cleanups
+
+2004-06-14  David Schleef  <ds@schleef.org>
+
+       * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_init),
+       (cdparanoia_get), (cdparanoia_open), (cdparanoia_change_state):
+       Send discont events and change timestamps appropriately when
+       we get a seek event.  (bug #144240)
+       * ext/cdparanoia/gstcdparanoia.h:
+
+2004-06-14  Benjamin Otte  <otte@gnome.org>
+
+       * ext/alsa/gstalsa.c: Use snd_pcm_hw_params_set_rate _near instead of
+         snd_pcm_hw_params_set_rate  since the latter fails for no good
+         reason on some setups.
+
+2004-06-14  David Schleef  <ds@schleef.org>
+
+       * gst/volume/demo.c: (value_changed_callback): exp10() is not
+       standard.  Thank you for playing.
+
+2004-06-14  Wim Taymans  <wim@fluendo.com>
+
+       * gst/ffmpegcolorspace/imgconvert.c: (img_convert):
+       Patch 1.3 broke the ordering of the colorspace info and
+       made the plugin basically work by coincidence, reordered
+       the info.
+
+2004-06-14  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/lame/gstlame.c:
+       * ext/mad/gstmad.c:
+         sync caps.  Make sure mad can only output a list of rates, not
+         a full range.  In the future, have three caps lists for each of the
+         mpeg versions.  Change mpegversion to a double as well.
+
+2004-06-14  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/volume/.cvsignore:
+       * gst/volume/Makefile.am:
+       * gst/volume/demo.c: (value_changed_callback), (idler),
+       (setup_gui), (main):
+         added small demo app
+
+2004-06-13  Jan Schmidt  <thaytan@mad.scientist.com>
+       * ext/esd/esdsink.c: (gst_esdsink_change_state):
+       * ext/esd/esdsink.h:
+       Close the esd connection on pause, because esd will just wait -
+       blocking all other esd clients indefinitely.
+
+2004-06-12  Christophe Fergeau  <teuf@gnome.org>
+
+       * gst/tags/gstvorbistag.c: replaced a g_warning which I added in my
+         previous commit with GST_DEBUG
+
+2004-06-12  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+         add a header check for a dvdread header in dvdnav.  Fixes #133002
+
+2004-06-12  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * gst/tcp/gsttcpclientsink.c: (gst_tcpclientsink_init_send):
+       * gst/tcp/gsttcpclientsink.h:
+       * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_init_receive):
+       * gst/tcp/gsttcpclientsrc.h:
+       * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_init),
+       (gst_tcpserversink_handle_server_read),
+       (gst_tcpserversink_init_send):
+       * gst/tcp/gsttcpserversink.h:
+       * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_init_receive):
+       * gst/tcp/gsttcpserversrc.h:
+       Modified the tcp plugins so they are portable (IPv4,IPv6, any future
+        version of IP)
+
+2004-06-12  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * configure.ac:
+       Added ogg library so that OSX detects libtheora properly
+
+2004-06-11  Wim Taymans  <wim@fluendo.com>
+
+       * ext/theora/theoradec.c: (theora_dec_chain),
+       (theora_dec_change_state):
+       Don't try to decode frames before we received a keyframe.
+
+2004-06-11  Wim Taymans  <wim@fluendo.com>
+
+       * ext/ogg/gstoggmux.c: (gst_ogg_mux_class_init),
+       (gst_ogg_mux_init), (gst_ogg_mux_next_buffer),
+       (gst_ogg_mux_get_headers), (gst_ogg_mux_set_header_on_caps),
+       (gst_ogg_mux_send_headers), (gst_ogg_mux_loop),
+       (gst_ogg_mux_get_property), (gst_ogg_mux_set_property):
+       Added property to set the maximum delay of a page.
+
+2004-06-10  Wim Taymans  <wim@fluendo.com>
+
+       * ext/ogg/gstoggmux.c: (gst_ogg_mux_class_init),
+       (gst_ogg_mux_init), (gst_ogg_mux_next_buffer),
+       (gst_ogg_mux_get_headers), (gst_ogg_mux_set_header_on_caps),
+       (gst_ogg_mux_send_headers), (gst_ogg_mux_loop),
+       (gst_ogg_mux_get_property), (gst_ogg_mux_set_property):
+       Added max-delay property to control the maximum amount
+       of data to put in one page.
+
+2004-06-10  Wim Taymans  <wim@fluendo.com>
+
+       * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
+       (gst_theora_enc_init), (theora_enc_sink_link),
+       (theora_buffer_from_packet), (theora_enc_set_property),
+       (theora_enc_get_property):
+       Set duration on encoded buffer, added some more properties
+
+2004-06-10  Wim Taymans  <wim@fluendo.com>
+
+       * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer),
+       (gst_ogg_mux_get_headers), (gst_ogg_mux_set_header_on_caps),
+       (gst_ogg_mux_send_headers), (gst_ogg_mux_loop):
+       * ext/theora/theoraenc.c: (theora_enc_chain):
+       Fix refcounting bugs
+
+2004-06-10  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_init),
+       (gst_asf_demux_loop), (gst_asf_demux_process_file),
+       (gst_asf_demux_process_data), (gst_asf_demux_handle_data),
+       (gst_asf_demux_process_object), (gst_asf_demux_get_stream),
+       (gst_asf_demux_process_chunk), (gst_asf_demux_handle_sink_event),
+       (gst_asf_demux_handle_src_event), (gst_asf_demux_handle_src_query),
+       (gst_asf_demux_change_state):
+       * gst/asfdemux/gstasfdemux.h:
+         You know Chimaira? "I - HATE - EVERYTHING". Yeah, that's what this
+         feels like. I think we should set a new requirement for demuxers
+         from now on to implement sane loop functions, data loops, query
+         and seek functions before first commit into CVS. And this commit
+         fixes all of the above.
+
+2004-06-10  Christophe Fergeau  <teuf@gnome.org>
+
+       * gst/tags/gstvorbistag.c: (gst_vorbis_tag_add): make sure parsed
+         vorbis comments are properly encoded in UTF-8 before adding them
+         to a GstTagList
+
+2004-06-09  Benjamin Otte  <otte@gnome.org>
+
+       * ext/alsa/gstalsa.c: (add_channels):
+         handle min <= max correctly
+       * ext/alsa/gstalsa.c: (gst_alsa_fixate_to_mimetype),
+       (gst_alsa_fixate_field_nearest_int), (gst_alsa_fixate):
+         add fixation functions so we fixate correctly. No preferring of alaw
+         anymore because it's the first structure.
+       * ext/alsa/gstalsa.h:
+       * ext/alsa/gstalsa.c: (gst_alsa_sw_params_dump),
+       (gst_alsa_hw_params_dump):
+         add functions to ease debugging in alsalib
+       * ext/alsa/gstalsa.c: (gst_alsa_probe_hw_params),
+       (gst_alsa_set_hw_params), (gst_alsa_set_sw_params),
+       (gst_alsa_start_audio):
+         only specify hw params if we really setup a format (fixes #134007 -
+         or at least works around it)
+
+2004-06-09  Wim Taymans  <wim@fluendo.com>
+
+       * ext/ogg/gstoggmux.c: (gst_ogg_mux_init),
+       (gst_ogg_mux_next_buffer), (gst_ogg_mux_buffer_from_page),
+       (gst_ogg_mux_push_page), (gst_ogg_mux_get_headers),
+       (gst_ogg_mux_set_header_on_caps), (gst_ogg_mux_send_headers),
+       (gst_ogg_mux_loop):
+       Use stream caps to setup the initial pages in the ogg stream.
+       Correctly set the streamheader caps on the srcpad.
+
+2004-06-09  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get_fps_list),
+       (gst_v4lsrc_get_fps), (gst_v4lsrc_srcconnect),
+       (gst_v4lsrc_getcaps):
+       * sys/v4l/v4l_calls.c: (gst_v4l_set_window_properties),
+       (gst_v4l_get_picture), (gst_v4l_get_audio), (gst_v4l_set_audio):
+         add querying of fps lists for webcams.  Negotiating to a framerate
+         now works.
+
+2004-06-08  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/theora/theoraenc.c: (theora_buffer_from_packet),
+       (theora_push_buffer), (theora_push_packet),
+       (theora_set_header_on_caps), (theora_enc_chain):
+         mark buffers and put on streamheader, raw theora streaming
+         now works too, whee
+
+2004-06-08  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/tcp/gsttcp.c: (gst_tcp_gdp_read_header),
+       (gst_tcp_gdp_read_caps):
+          do a looping read for caps and GDP headers too
+
+2004-06-08  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_get):
+       * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_get):
+          return EOS instead of NULL in _get
+
+2004-06-08  Wim Taymans  <wim@fluendo.com>
+
+       * gst/tcp/gsttcp.c: (gst_tcp_gdp_read_header),
+       (gst_tcp_gdp_read_caps), (gst_tcp_gdp_write_header),
+       (gst_tcp_gdp_write_caps):
+       * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_get):
+       * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_gdp_read_caps),
+       (gst_tcpserversrc_gdp_read_header), (gst_tcpserversrc_get):
+       Memory leak fixes
+
+2004-06-08  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/vorbis/Makefile.am:
+       * ext/vorbis/vorbis.c: (plugin_init):
+       * ext/vorbis/vorbisparse.c: (gst_vorbis_parse_base_init),
+       (gst_vorbis_parse_class_init), (gst_vorbis_parse_init),
+       (vorbis_parse_set_header_on_caps), (vorbis_parse_chain),
+       (vorbis_parse_change_state):
+       * ext/vorbis/vorbisparse.h:
+          adding a vorbisparse element that marks the buffers, streaming
+          raw vorbis using GDP now works, whee
+
+2004-06-08  Wim Taymans  <wim@fluendo.com>
+
+       * ext/jpeg/Makefile.am:
+       * ext/jpeg/README:
+       * ext/jpeg/gstjpeg.c: (plugin_init):
+       * ext/jpeg/gstsmokedec.c: (gst_smokedec_get_type),
+       (gst_smokedec_base_init), (gst_smokedec_class_init),
+       (gst_smokedec_init), (gst_smokedec_link), (gst_smokedec_chain):
+       * ext/jpeg/gstsmokedec.h:
+       * ext/jpeg/gstsmokeenc.c: (gst_smokeenc_get_type),
+       (gst_smokeenc_base_init), (gst_smokeenc_class_init),
+       (gst_smokeenc_init), (gst_smokeenc_getcaps), (gst_smokeenc_link),
+       (gst_smokeenc_resync), (gst_smokeenc_chain),
+       (gst_smokeenc_set_property), (gst_smokeenc_get_property):
+       * ext/jpeg/gstsmokeenc.h:
+       * ext/jpeg/smokecodec.c: (smokecodec_init_destination),
+       (smokecodec_flush_destination), (smokecodec_term_destination),
+       (smokecodec_init_source), (smokecodec_fill_input_buffer),
+       (smokecodec_skip_input_data), (smokecodec_resync_to_restart),
+       (smokecodec_term_source), (smokecodec_encode_new),
+       (smokecodec_decode_new), (smokecodec_info_free),
+       (smokecodec_set_quality), (smokecodec_get_quality),
+       (smokecodec_set_threshold), (smokecodec_get_threshold),
+       (smokecodec_set_bitrate), (smokecodec_get_bitrate),
+       (find_best_size), (abs_diff), (put), (smokecodec_encode),
+       (smokecodec_parse_header), (smokecodec_decode):
+       * ext/jpeg/smokecodec.h:
+       Added a new simple jpeg based codec
+
+2004-06-08  Wim Taymans  <wim@fluendo.com>
+
+       * gst/multipart/multipartmux.c: (gst_multipart_mux_class_init),
+       (gst_multipart_mux_loop):
+       Fix memory leak
+
+2004-06-08  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_get):
+       * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_client_remove),
+       (gst_tcpserversink_handle_client_read), (gst_tcp_buffer_write),
+       (gst_tcpserversink_handle_client_write), (gst_tcpserversink_chain),
+       (gst_tcpserversink_init_send), (gst_tcpserversink_close):
+       * gst/tcp/gsttcpserversink.h:
+          take streamheader into account
+
+2004-06-08  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/level/Makefile.am:
+       * gst/level/gstlevel.c: (gst_level_class_init):
+         clean up marshal generation
+
+2004-06-08  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/tcp/Makefile.am:
+       * gst/tcp/gsttcpclientsink.c: (gst_tcpclientsink_get_type),
+       (gst_tcpclientsink_class_init), (gst_tcpclientsink_init),
+       (gst_tcpclientsink_set_property), (gst_tcpclientsink_get_property):
+       * gst/tcp/gsttcpclientsrc.c: (gst_tcpclientsrc_class_init),
+       (gst_tcpclientsrc_init), (gst_tcpclientsrc_set_property),
+       (gst_tcpclientsrc_get_property):
+       * gst/tcp/gsttcpserversink.c: (gst_tcpserversink_class_init),
+       (gst_tcpserversink_init), (gst_tcpserversink_handle_server_read),
+       (gst_tcpserversink_handle_client_read),
+       (gst_tcpserversink_handle_client_write),
+       (gst_tcpserversink_set_property), (gst_tcpserversink_get_property):
+       * gst/tcp/gsttcpserversink.h:
+         add signals client-added and client-removed
+       * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_class_init),
+       (gst_tcpserversrc_init), (gst_tcpserversrc_set_property),
+       (gst_tcpserversrc_get_property):
+       uniformized, change default protocol to NONE
+       * gst/tcp/gsttcp-marshal.list: added
+2004-06-07  Benjamin Otte  <otte@gnome.org>
+
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
+         handle discont events if they happen before caps nego
+
+2004-06-07  Wim Taymans  <wim@fluendo.com>
+
+       * gst/multipart/multipartdemux.c: (gst_multipart_demux_base_init),
+       (gst_multipart_find_pad_by_mime), (gst_multipart_demux_chain),
+       (gst_multipart_demux_plugin_init):
+       * gst/multipart/multipartmux.c: (gst_multipart_mux_class_init),
+       (gst_multipart_mux_init), (gst_multipart_mux_loop),
+       (gst_multipart_mux_change_state):
+       Small updates, fix a memleak
+
+2004-06-07  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
+
+       * configure.ac: OSS portability
+       * ext/arts/gst_arts.c: idem
+       * sys/oss/gstosselement.c: idem
+       * sys/oss/gstossmixer.c: idem
+       * sys/oss/gstosssink.c: idem
+       * sys/oss/gstosssrc.c: idem
+       * sys/oss/oss_probe.c: idem
+         - check for soundcard.h in different places for some BSD
+
+2004-06-07  Jan Schmidt <thaytan@mad.scientist.com>
+
+       * AUTHORS:
+       Add me to the authors file
+       * configure.ac:
+       Increase the libdv requirement to >= version 0.100
+       * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_src_convert),
+       (gst_dvdec_src_query), (gst_dvdec_handle_sink_event),
+       (gst_dvdec_push), (gst_dvdec_loop), (gst_dvdec_change_state):
+       * ext/dv/gstdvdec.h:
+       Add support for the new_media flag when sending DISCONT events
+       Make the querying work when video pad is not linked
+
+2004-06-07  Tim-Philipp Müller  <t.i.m@zen.co.uk>
+
+       reviewed by Benjamin Otte  <otte@gnome.org>
+
+       * gst/mixmatrix/mixmatrix.c: (gst_mixmatrix_init):
+         create a NULL-initialized array of pads, so we don't think they
+         exist already. (fixes #143130)
+
+2004-06-07  Benjamin Otte  <otte@gnome.org>
+
+       * gst/mixmatrix/mixmatrix.c: (gst_mixmatrix_init),
+       (mixmatrix_resize), (gst_mixmatrix_set_all_caps),
+       (gst_mixmatrix_request_new_pad), (gst_mixmatrix_loop):
+         don't use // coments
+
+2004-06-07  Benjamin Otte  <otte@gnome.org>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_samples_to_timestamp):
+         cast to GstClockTime to get higher granularity
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
+         use gst_element_set_time_delay to get the exact time
+       * ext/mad/gstmad.c: (gst_mad_chain):
+         use the negotiated rate instead of the current frame's rate which
+         might be wrong because of bit errors. This avoids emitting totally
+         bogus timestamps and screwing sync.
+       (fixes #143454)
+
+2004-06-07  Tim-Philipp Müller  <t.i.m@zen.co.uk>
+
+       reviewed by Benjamin Otte  <otte@gnome.org>
+
+       * gst/adder/gstadder.c: (gst_adder_loop):
+         properly error out when no negotiation has happened yet. (fixes
+         #143032)
+
+2004-06-06  Benjamin Otte  <otte@gnome.org>
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event):
+         forward correctly transformed offset in discont events. Based on
+         patch by Arwed v. Merkatz. (fixes #142851)
+
+2004-06-06  David Schleef  <ds@schleef.org>
+
+       * gst/ffmpegcolorspace/gstffmpegcodecmap.c: that's
+       G_HAVE_GNUC_VARARGS, not G_HAVE_GNU_VARARGS.  Should fix compile
+       problems on several systems.
+
+2004-06-06  Benjamin Otte  <otte@gnome.org>
+
+       * ext/vorbis/vorbisdec.c: (gst_vorbis_dec_init):
+         use explicit caps on the srcpad
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
+         properly error out if caps couldn't be set (fixes #142764)
+
+2004-06-06  Benjamin Otte  <otte@gnome.org>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_probe_hw_params),
+       (gst_alsa_set_hw_params), (gst_alsa_set_sw_params),
+       (gst_alsa_start_audio):
+         - don't call set_periods_integer anymore, it breaks the
+         configuration randomly
+         - call snd_pcm_hw_params_set_access directly instead of using masks
+         - don't fail if the sw_params can't be set, just use the default
+         params and hope it works. Alsalib has weird issues when you touch
+         sw_params and does no proper error reporting about what failed.
+       * ext/alsa/gstalsa.c: (gst_alsa_open_audio),
+       (gst_alsa_close_audio):
+         make our alsa debugging go via gst debugging and not conditionally
+         defined
+       * ext/alsa/gstalsa.h:
+         add ALSA_DEBUG_FLUSH macro
+       * ext/alsa/gstalsaplugin.c: (gst_alsa_error_wrapper),
+       (plugin_init):
+         wrap alsa errors to be printed via the gst debugging system and not
+         spammed to stderr
+
+2004-06-04  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_init),
+       (gst_qtdemux_handle_src_query), (gst_qtdemux_handle_src_event),
+       (gst_qtdemux_handle_sink_event), (gst_qtdemux_change_state),
+       (gst_qtdemux_loop_header), (qtdemux_dump_mvhd),
+       (qtdemux_parse_trak):
+       * gst/qtdemux/qtdemux.h:
+         Bitch. Also known as seeking, querying & co.
+       * sys/oss/gstosssink.c: (gst_osssink_init), (gst_osssink_chain),
+       (gst_osssink_change_state):
+       * sys/oss/gstosssink.h:
+         Resyncing is for weenies, this hack is no longer needed and was
+         broken anyway (since it - unintendedly - always leaves resync to
+         TRUE).
+
+2004-06-05  Andrew Turner <zxombie@hotpop.com>
+
+       * gst/tcp/gsttcp.c: portability (Solaris 10/FreeBSD)
+       * gst/tcp/gsttcpclientsrc.h: idem
+         - define MSG_NOSIGNAL if not done
+         - include unistd.h for off_t
+          (fixes #143749)
+
+2004-06-05  Benjamin Otte  <otte@gnome.org>
+
+       * configure.ac:
+       * ext/kio/Makefile.am:
+         check for qt's moc preprocessor explicitly and use it
+
+2004-06-03  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
+
+       * gst/tcp/gsttcp.c: (gst_tcp_socket_write):
+         don't get a signal for EPIPE on socket writes
+         (somebody check if this works on other platforms)
+
+2004-06-02  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/alsa/gstalsaclock.c: (gst_alsa_clock_get_type):
+       * ext/alsa/gstalsasrc.c: (gst_alsa_src_loop):
+          check error condition on available samples correctly
+
+2004-06-02  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/alsa/gstalsasrc.c: (gst_alsa_src_get_time):
+          avoid a segfault
+       * gst/tcp/gsttcp.c: (gst_tcp_socket_write), (gst_tcp_socket_read),
+       (gst_tcp_gdp_read_header), (gst_tcp_gdp_read_caps):
+       * gst/tcp/gsttcpserversrc.c: (gst_tcpserversrc_gdp_read_caps),
+       (gst_tcpserversrc_gdp_read_header):
+         use ssize_t over size_t since the former is signed and thus the
+         check for error codes can work
+
+2004-06-02  Wim Taymans  <wim@fluendo.com>
+
+       reviewed by: Johan
+
+       * gst/multipart/multipartmux.c: (gst_multipart_mux_class_init),
+       (gst_multipart_mux_loop):
+       Oops
+
+2004-06-02  Wim Taymans  <wim@fluendo.com>
+
+       * gst/multipart/multipartmux.c: (gst_multipart_mux_class_init),
+       (gst_multipart_mux_init), (gst_multipart_mux_loop),
+       (gst_multipart_mux_get_property), (gst_multipart_mux_set_property),
+       (gst_multipart_mux_change_state):
+       Added configurable boundary specifier, added the value as a
+       caps field as well.
+
+2004-06-02  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * gst/tcp/gsttcp.c:
+       * gst/tcp/gsttcpclientsrc.c:
+       * gst/tcp/gsttcpclientsrc.h:
+       * gst/tcp/gsttcpserversrc.c:
+         - portability fix, to compile on OSX
+            (fixes #143146)
+
+       * sys/osxaudio/gstosxaudioelement.c:
+       * sys/osxaudio/gstosxaudiosink.c:
+       * sys/osxaudio/gstosxaudiosrc.c:
+         - compilation warnings on OSX
+            (fixes #143153)
+
+2004-06-02  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+       * ext/vorbis/vorbisdec.c : sign warning fixes
+
+       * gst-libs/gst/mixer/mixertrack.c :
+         do no use defines which are glib 2.4 specific
+
+2004-06-01  Christophe Fergeau  <teuf@gnome.org>
+
+       * ext/flac/gstflactag.c: strip ending framing bit from vorbiscomment
+         buffer since libflac doesn't expect it (reports a sync error when
+         it encounters that)
+
+
+2004-06-01  Owen Fraser-Green  <owen@discobabe.net>
+
+       * gst-libs/gst/mixer/mixertrack.h: Changed struct syntax
+       * gst-libs/gst/mixer/mixertrack.c:
+       (gst_mixer_track_get_property), (get_mixer_track_init),
+       (get_mixer_track_get_property): Added property accessors
+       * gst-libs/gst/mixer/mixeroptions.h: Changed struct syntax
+       * gst-libs/gst/mixer/mixeroptions.c:
+       (gst_mixer_options_get_values): Added
+       * gst-libs/gst/mixer/mixer.h: Changed GstMixerClass syntax
+       * gst-libs/gst/mixer/mixer.c: Fixed comment
+
+
+2004-06-01  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_open_audio):
+          improve error messages on open
+
+
+2004-06-01  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay):
+          check if v4l-conf is in path
+
+2004-06-01  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-libs/gst/media-info/media-info-priv.c: (gmi_set_mime):
+          change assert to a more readable error message
+
+2004-05-31  Stephane Loeuillet  <stephane.loeuillet@tiscali.fr>
+
+       * gst-libs/gst/tuner/tunerchannel.h:
+         - add a freq_multiplicator field to make the conversion
+           between internal frequency unit and Hz
+       * sys/v4l/gstv4lelement.c:
+       * sys/v4l2/gstv4l2element.c:
+         - change default video device to /dev/video0
+       * sys/v4l/v4l_calls.c:
+       * sys/v4l2/v4l2_calls.c:
+         - we only expose frequency to the user in Hz instead of
+           bastard v4lX unit (either 62.5kHz or 62.5Hz)
+
+2004-05-31  Jan Schmidt  <thaytan@mad.scientist.com>
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
+         Initialise b_o_s and e_o_s variables
+       * gst-libs/gst/riff/riff-media.c:
+       (gst_riff_create_video_caps_with_data):
+         Add some unusual fourcc's from mplayer avi's
+       * gst/multipart/multipartmux.c: (gst_multipart_mux_plugin_init):
+         Make the muxer have rank GST_RANK_NONE, so it doesn't mess up
+         autoplugging.
+
+2004-05-28  Wim Taymans  <wim@fluendo.com>
+
+       * configure.ac:
+       * gst/alpha/Makefile.am:
+       * gst/alpha/gstalpha.c: (gst_alpha_method_get_type),
+       (gst_alpha_get_type), (gst_alpha_base_init),
+       (gst_alpha_class_init), (gst_alpha_init), (gst_alpha_set_property),
+       (gst_alpha_get_property), (gst_alpha_sink_link), (gst_alpha_add),
+       (gst_alpha_chroma_key), (gst_alpha_chain),
+       (gst_alpha_change_state), (plugin_init):
+       A plugin to add an alpha channel to I420 video. Can optionally do
+       chroma keying.
+       * gst/multipart/Makefile.am:
+       * gst/multipart/multipart.c: (plugin_init):
+       * gst/multipart/multipartdemux.c: (gst_multipart_demux_base_init),
+       (gst_multipart_demux_class_init), (gst_multipart_demux_init),
+       (gst_multipart_demux_finalize), (gst_multipart_demux_handle_event),
+       (gst_multipart_find_pad_by_mime), (gst_multipart_demux_chain),
+       (gst_multipart_demux_change_state),
+       (gst_multipart_demux_plugin_init):
+       * gst/multipart/multipartmux.c: (gst_multipart_mux_get_type),
+       (gst_multipart_mux_base_init), (gst_multipart_mux_class_init),
+       (gst_multipart_mux_get_sink_event_masks), (gst_multipart_mux_init),
+       (gst_multipart_mux_sinkconnect), (gst_multipart_mux_pad_link),
+       (gst_multipart_mux_pad_unlink),
+       (gst_multipart_mux_request_new_pad),
+       (gst_multipart_mux_handle_src_event),
+       (gst_multipart_mux_next_buffer), (gst_multipart_mux_compare_pads),
+       (gst_multipart_mux_queue_pads), (gst_multipart_mux_loop),
+       (gst_multipart_mux_get_property), (gst_multipart_mux_set_property),
+       (gst_multipart_mux_change_state), (gst_multipart_mux_plugin_init):
+       A Multipart demuxer/muxer. Not sure if it violates specs. Used to
+       send multipart jpeg images to a browser.
+       * gst/videobox/Makefile.am:
+       * gst/videobox/README:
+       * gst/videobox/gstvideobox.c: (gst_video_box_fill_get_type),
+       (gst_video_box_get_type), (gst_video_box_base_init),
+       (gst_video_box_class_init), (gst_video_box_init),
+       (gst_video_box_set_property), (gst_video_box_get_property),
+       (gst_video_box_sink_link), (gst_video_box_i420),
+       (gst_video_box_ayuv), (gst_video_box_chain),
+       (gst_video_box_change_state), (plugin_init):
+       Crops or adds borders around an image. can do alpha channel
+       borders as well.
+       * gst/videomixer/Makefile.am:
+       * gst/videomixer/README:
+       * gst/videomixer/videomixer.c: (gst_videomixer_pad_get_type),
+       (gst_videomixer_pad_base_init), (gst_videomixer_pad_class_init),
+       (gst_videomixer_pad_get_sink_event_masks),
+       (gst_videomixer_pad_get_property),
+       (gst_videomixer_pad_set_property),
+       (gst_videomixer_pad_sinkconnect), (gst_videomixer_pad_link),
+       (gst_videomixer_pad_unlink), (gst_videomixer_pad_init),
+       (gst_video_mixer_background_get_type), (gst_videomixer_get_type),
+       (gst_videomixer_base_init), (gst_videomixer_class_init),
+       (gst_videomixer_init), (gst_videomixer_request_new_pad),
+       (gst_videomixer_handle_src_event),
+       (gst_videomixer_blend_ayuv_i420), (gst_videomixer_fill_checker),
+       (gst_videomixer_fill_color), (gst_videomixer_fill_queues),
+       (gst_videomixer_blend_buffers), (gst_videomixer_update_queues),
+       (gst_videomixer_loop), (gst_videomixer_get_property),
+       (gst_videomixer_set_property), (gst_videomixer_change_state),
+       (plugin_init):
+       Generic video mixer plugin, can handle multiple inputs all with
+       different framerates and video sizes. Is fully alpha channel
+       aware.
+
+2004-05-27  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
+         Select first track as master track. Not sure how else to handle
+         that...
+       * ext/ogg/gstoggmux.c: (gst_ogg_mux_next_buffer):
+         Discard discont events. Should fix #142962.
+
+2004-05-26  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/Makefile.am:
+       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_interface_init),
+       (gst_alsa_mixer_build_list), (gst_alsa_mixer_get_volume),
+       (gst_alsa_mixer_set_volume), (gst_alsa_mixer_set_mute),
+       (gst_alsa_mixer_set_record), (gst_alsa_mixer_set_option),
+       (gst_alsa_mixer_get_option):
+       * ext/alsa/gstalsamixer.h:
+       * ext/alsa/gstalsamixeroptions.c:
+       (gst_alsa_mixer_options_get_type),
+       (gst_alsa_mixer_options_class_init), (gst_alsa_mixer_options_init),
+       (gst_alsa_mixer_options_new):
+       * ext/alsa/gstalsamixeroptions.h:
+       * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_new):
+       * ext/alsa/gstalsamixertrack.h:
+         Add enumerations (as GstMixerOptions). Make correct distinction
+         between input/output tracks. Add capture/playback private flag.
+         Use flag to decide on whether to set capture or playback volumes
+         or switches. Use playback and record switches.
+       * gst-libs/gst/mixer/Makefile.am:
+       * gst-libs/gst/mixer/mixer-marshal.list:
+       * gst-libs/gst/mixer/mixer.c: (gst_mixer_class_init),
+       (gst_mixer_set_option), (gst_mixer_get_option),
+       (gst_mixer_mute_toggled), (gst_mixer_record_toggled),
+       (gst_mixer_volume_changed), (gst_mixer_option_changed):
+       * gst-libs/gst/mixer/mixer.h:
+       * gst-libs/gst/mixer/mixeroptions.c: (gst_mixer_options_get_type),
+       (gst_mixer_options_class_init), (gst_mixer_options_init),
+       (gst_mixer_options_dispose):
+       * gst-libs/gst/mixer/mixeroptions.h:
+         Add GstMixerOptions.
+       * sys/oss/gstosselement.c: (gst_osselement_class_probe_devices):
+         Rename Audio Mixer to OSS Mixer (similar to Alsa Mixer). Fix
+         broken device detection on computers with multiple OSS sound
+         cards.
+
+2004-05-26  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_fixate):
+         fixate nicely even when the peer is not negotiating
+
+2004-05-25  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst/audioconvert/gstaudioconvert.c:
+       (gst_audio_convert_parse_caps):
+         make sure we don't allow depth > width
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_fixate):
+         fixate endianness to G_BYTE_ORDER as default
+       * gst/audioscale/gstaudioscale.c:
+         we don't handle another endianness as host-endianness
+
+2004-05-25  David Schleef  <ds@schleef.org>
+
+       * gst/ffmpegcolorspace/mem.c:  malloc() is in stdlib.h, not malloc.h
+
+2004-05-24  Benjamin Otte  <otte@gnome.org>
+
+       * ext/vorbis/oggvorbisenc.c: (gst_oggvorbisenc_sinkconnect),
+       (gst_oggvorbisenc_setup):
+         properly fail when we can't setup the vorbis encoder due to
+         unsupported settings
+       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_sinkconnect),
+       (gst_vorbisenc_setup):
+         same
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
+         fix case where warnings occured when one pad was unlinked while the
+         other's link function was called
+
+2004-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/tcp/Makefile.am:
+          use GST_ENABLE_NEW
+
+2004-05-24  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst-libs/gst/resample/private.h:
+         don't use optimizations that are #if 0'ed
+
+2004-05-24  Wim Taymans  <wim@fluendo.com>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query):
+       Fix potential division by zero error and hopefully get
+       the position query right to get correct timestamps on avi
+       audio.
+
+2004-05-24  Wim Taymans  <wim@fluendo.com>
+
+       * gst/videoscale/videoscale.c: (gst_videoscale_scale_nearest),
+       (gst_videoscale_scale_nearest_str2),
+       (gst_videoscale_scale_nearest_str4),
+       (gst_videoscale_scale_nearest_32bit),
+       (gst_videoscale_scale_nearest_24bit),
+       (gst_videoscale_scale_nearest_16bit):
+       Fix the scaling algorithm and avoid a buffer overflow.
+        removed the while loop in the scaling function as it
+       was used for point sampling only.
+
+2004-05-24  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_get_type),
+       (gst_id3_tag_class_init), (gst_id3_tag_init),
+       (gst_id3_tag_set_property), (gst_id3_tag_get_tag_to_render),
+       (gst_id3_tag_handle_event), (gst_id3_tag_do_caps_nego),
+       (gst_id3_tag_send_tag_event):
+         lots of fixes to make id3mux work and id3demux work correctly
+
+2004-05-24  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+       * ext/Makefile.am:
+         add rules to build shout2send (was removed by accident
+         when this module was no more marked experimental/broken)
+
+2004-05-24  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * ext/shout2/gstshout2.c:
+       * ext/shout2/gstshout2.h:
+         adding a "connection problem" signal to shout2send
+         (fixes #142954)
+
+2004-05-21  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/kio/kioreceiver.cpp:
+       * ext/kio/kioreceiver.h:
+          fix sign comparison issues
+
+2004-05-21  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+       * gst/cdxaparse/gstcdxaparse.c:
+       * gst/cdxaparse/gstcdxaparse.h:
+         some renaming
+         add some checks/sanity
+         prepare for seek addition
+
+       * sys/sunaudio/gstsunaudio.c:
+         remove exported dupe init function
+
+2004-05-21  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_get_formats),
+       (gst_dvdec_src_convert), (gst_dvdec_sink_convert):
+         Fix format conversion and position querying.
+       * gst/debug/progressreport.c: (gst_progressreport_report):
+         Don't output a bogus total value that we didn't query.
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support):
+         Always set XV_AUTOPAINT_COLORKEY to true. Fixes xvimagesink showing
+         only a blank window after xine has been used.
+
+2004-05-21  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
+
+       * m4/as-arts.m4:
+         sync with upstream version to fix test on FC2
+         readd with -ko to preserve Id header
+
+2004-05-20  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+       * configure.ac:
+         test for FIONREAD ioctl in sys/filio.h for Solaris compat.
+       * gst/tcp/gsttcpclientsrc.c: idem
+       * gst/tcp/gsttcpserversink.c: idem
+       * gst/tcp/gsttcpserversrc.c: idem
+       * m4/gst-fionread.m4: idem
+
+       * sys/sunaudio/gstsunaudio.c: change category to Sink/Audio
+
+       * configure.ac: enable speex plugin for speex 1.1.5+
+       * ext/speex/gstspeexenc.c: fix cast warning
+
+       * ext/esd/README: fix typo
+
+2004-05-20  David Schleef  <ds@schleef.org>
+
+       * configure.ac: Minor cosmetic change to convince the buildbot to
+       reautogen.
+       * sys/sunaudio/gstsunaudio.c: (gst_sunaudiosink_class_init),
+       (gst_sunaudiosink_init), (gst_sunaudiosink_getcaps),
+       (gst_sunaudiosink_pad_link), (gst_sunaudiosink_chain),
+       (gst_sunaudiosink_setparams), (gst_sunaudiosink_open),
+       (gst_sunaudiosink_close), (gst_sunaudiosink_change_state),
+       (gst_sunaudiosink_set_property), (gst_sunaudiosink_get_property):
+       More hacking.  Plays audio now.
+
+2004-05-20  David Schleef  <ds@schleef.org>
+
+       * configure.ac:
+       * sys/Makefile.am:
+
+2004-05-20  David Schleef  <ds@schleef.org>
+
+       * sys/osxaudio/Makefile.am:  New OS X audio plugin by Zaheer Abbas Merali
+       * sys/osxaudio/gstosxaudio.c:
+       * sys/osxaudio/gstosxaudioelement.c:
+       * sys/osxaudio/gstosxaudioelement.h:
+       * sys/osxaudio/gstosxaudiosink.c:
+       * sys/osxaudio/gstosxaudiosink.h:
+       * sys/osxaudio/gstosxaudiosrc.c:
+       * sys/osxaudio/gstosxaudiosrc.h:
+
+2004-05-20  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_set_header_on_caps),
+       (gst_vorbisenc_chain):
+          put the codec headers on the caps as streamheader as well as
+          pushing them out
+
+2004-05-20  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/vorbis/vorbisenc.c: (vorbis_granule_time_copy),
+       (gst_vorbisenc_buffer_from_packet), (gst_vorbisenc_push_buffer),
+       (gst_vorbisenc_push_packet), (gst_vorbisenc_chain):
+        split up push_packet into two functions
+
+2004-05-20  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/tcp/.cvsignore:
+         ignore enums
+       * gst/tcp/Makefile.am:
+       * gst/tcp/README:
+       * gst/tcp/gsttcp.c:
+       * gst/tcp/gsttcp.h:
+       * gst/tcp/gsttcpclientsink.c:
+       * gst/tcp/gsttcpclientsink.h:
+       * gst/tcp/gsttcpclientsrc.c:
+       * gst/tcp/gsttcpclientsrc.h:
+       * gst/tcp/gsttcpplugin.c:
+       * gst/tcp/gsttcpserversink.c:
+       * gst/tcp/gsttcpserversink.h:
+       * gst/tcp/gsttcpserversrc.c:
+       * gst/tcp/gsttcpserversrc.h:
+          add new tcp elements
+
+2004-05-19  Wim Taymans  <wim@fluendo.com>
+
+       * gst/law/mulaw-conversion.c: (mulaw_encode):
+       Fix overflow bug in ulaw encoding.
+
+2004-05-19  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/mad/gstmad.c: (gst_mad_handle_event):
+         don't unref the event twice
+
+2004-05-19  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * configure.ac:
+         remove -Wno-sign-compare
+
+2004-05-19  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * configure.ac:
+         remove -DG_DISABLE_DEPRECATED. It's not usable without workarounds
+         if you want to work against glib 2.2 and 2.4
+
+2004-05-19  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/tcp/Makefile.am:
+       * gst/tcp/gsttcp.c:
+       * gst/tcp/gsttcp.h:
+       * gst/tcp/gsttcpsink.h:
+       * gst/tcp/gsttcpsrc.h:
+          gsttcp -> gsttcpplugin + CVS surgery in preparation for tcp merge
+
+2004-05-19  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst/debug/tests.c: (md5_get_value):
+         fix segfault on gst-inspect
+
+2004-05-19  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst/debug/testplugin.c:
+       * gst/debug/tests.c:
+       * gst/debug/tests.h:
+         add new extensible and configurable testing element. Current tests
+         include buffer count, stream length, timestamp/duration matching and
+         md5.
+       * gst/debug/Makefile.am:
+       * gst/debug/gstdebug.c: (plugin_init):
+         add infrastructure for new element
+
+2004-05-19  Johan Dahlin  <johan@gnome.org>
+
+       * ext/dv/gstdvdec.c (gst_dvdec_quality_get_type): Add proper
+       ending of the array. Fixes gst-inspect segfault on ppc.
+
+2004-05-19  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+       * ext/dirac/gstdiracdec.cc : change category to Codec/Decoder/Video
+
+       * m4/a52.m4 : don't fix a test that should fail with current a52dec lib
+
+2004-05-18  David Schleef  <ds@schleef.org>
+
+       * gst/ffmpegcolorspace/imgconvert.c: (img_convert): Fixes for
+       warnings (bugs, actually) noticed by gcc but not forte.
+
+2004-05-18  David Schleef  <ds@schleef.org>
+
+       * sys/sunaudio/Makefile.am:
+       * sys/sunaudio/gstsunaudio.c: New sunaudiosink
+
+2004-05-18  David Schleef  <ds@schleef.org>
+
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
+       (gst_qtdemux_loop_header):  Patch from dcm@acm.org (David Moore)
+       to allow qtdemux to use non-seekable streams. (bug #142272)
+
+2004-05-18  David Schleef  <ds@schleef.org>
+
+       * gst-libs/gst/resample/resample.c: (gst_resample_sinc_ft_s16),
+       (gst_resample_sinc_ft_float): Remove use of static temporary
+       buffer.  This code was obviously not supposed to last long, but
+       it's stuck in our ABI, so it required a little hack to make it
+       ABI-compatible.  Fixes #142585.
+       * gst-libs/gst/resample/resample.h: same.
+
+2004-05-18  David Schleef  <ds@schleef.org>
+
+       * configure.ac: Add sunaudio
+       * examples/Makefile.am: make gstplay depend on gconf
+       * gst/ffmpegcolorspace/gstffmpegcodecmap.c: Remove c99-isms
+       * gst/ffmpegcolorspace/imgconvert.c: (build_rgb_palette),
+       (convert_table_lookup), (img_convert): remove c99-isms
+       * gst/ffmpegcolorspace/imgconvert_template.h: make a constant
+          unsigned, to fix a warning on Solaris
+       * gst/mpeg1sys/systems.c: bcopy->memcpy
+       * gst/rtjpeg/RTjpeg.c: (RTjpeg_yuvrgb8): bcopy->memcpy
+       * sys/Makefile.am: Add sunaudio
+
+2004-05-18  Wim Taymans  <wim@fluendo.com>
+
+       * ext/ogg/gstoggmux.c: (gst_ogg_mux_get_type), (gst_ogg_mux_init),
+       (gst_ogg_mux_sinkconnect), (gst_ogg_mux_request_new_pad),
+       (gst_ogg_mux_next_buffer), (gst_ogg_mux_push_page),
+       (gst_ogg_mux_compare_pads), (gst_ogg_mux_queue_pads),
+       (gst_ogg_mux_loop):
+       Fix an ugly memleak where the muxer didn't flush enough ogg
+       pages. This also resulted in badly muxed ogg files.
+
+2004-05-18  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+       * gst/asfdemux/asfheaders.c :
+       * gst/asfdemux/asfheaders.h :
+       * gst/asfdemux/gstasfdemux.c :
+         - fix ASF_OBJ_PADDING guid
+         - add 3 new object guids (language list, metadata,
+            extended stream properties)
+          - add a function to parse extended header objects
+
+2004-05-18  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * sys/oss/gstosselement.c: (gst_osselement_sync_parms):
+         remove leftover debugging g_print
+
+2004-05-17  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/mad/gstmad.c: (gst_mad_handle_event):
+         Fix for when the first format in a discont event is not a
+         byte-based one. Should fix #137710.
+
+2004-05-18  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+       * m4/a52.m4 : fix compilation with -Wall -Werror
+       * m4/libfame.m4 : idem
+       * m4/libmikmod.m4 : idem
+
+2004-05-17  Benjamin Otte  <otte@gnome.org>
+
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_comment):
+         signal the new tags before giving up the reference
+
+2004-05-17  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/shout2/gstshout2.c:
+         use application/ogg instead of application/x-ogg (patch by Patrick
+         Guimond, fixes #142432)
+       * sys/oss/gstosselement.c: (gst_osselement_reset),
+       (gst_osselement_sync_parms):
+         don't set fragment size unless specified (fixes #142493)
+
+2004-05-17  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+       * configure.ac : fix compilation of v4l2src with "-Wall -Werror"
+         fixes #142664
+
+2004-05-17  Benjamin Otte  <otte@gnome.org>
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
+         compute offsets correctly for internal buffers so timestamps are set
+         correctly when we can't seek. Also handle cases where there are no
+         offsets. (based on a patch by David Moore, fixes #142507)
+
+2004-05-17  Benjamin Otte  <otte@gnome.org>
+
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
+         use correct variable when determining amount of data to skip so we
+         don't skip into the void and segfault
+
+2004-05-16  Benjamin Otte  <otte@gnome.org>
+
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_audio_caps):
+         Hi, I'm a memleak
+
+2004-05-16  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+       * gst/asfdemux/gstasfdemux.c:
+         - fix a mem leak and always propagate tags
+         - add WMV3 to known video codecs (but no decoder yet)
+         - replace "surplus data" at end of audio header for what
+           it is : codec specific data
+         - fix a typo
+
+2004-05-16  Arwed v. Merkatz  <v.merkatz@gmx.net>
+
+       reviewed by: Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/audio/audioclock.c:
+         Fix wrong return type (#142205).
+
+2004-05-16  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/mad/gstmad.c: (gst_mad_class_init), (gst_mad_init):
+         Ignore CRCs by default (fixes #142566).
+
+2004-05-16  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_open),
+       (gst_alsa_mixer_close), (gst_alsa_mixer_supported),
+       (gst_alsa_mixer_build_list), (gst_alsa_mixer_free_list),
+       (gst_alsa_mixer_change_state), (gst_alsa_mixer_list_tracks),
+       (gst_alsa_mixer_get_volume), (gst_alsa_mixer_set_volume),
+       (gst_alsa_mixer_set_mute), (gst_alsa_mixer_set_record):
+         Fix for cases where we fail to attach to a mixer.
+
+2004-05-16  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_seek):
+         Don't touch events after not owning them anymore.
+       * gst/wavparse/gstwavparse.c: (gst_wavparse_base_init),
+       (gst_wavparse_fmt), (gst_wavparse_other),
+       (gst_wavparse_handle_seek), (gst_wavparse_loop),
+       (gst_wavparse_pad_convert), (gst_wavparse_pad_query),
+       (gst_wavparse_srcpad_event):
+       * gst/wavparse/gstwavparse.h:
+         Add seeking, fix querying.
+
+2004-05-16  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_comment):
+         - process comments even if they don't end with \0\0
+            g_convert would ignore them if present and works well without them
+
+2004-05-16  Benjamin Otte  <otte@gnome.org>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_caps), (gst_alsa_get_caps):
+         simplify caps
+
+2004-05-16  Benjamin Otte  <otte@gnome.org>
+
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_comment):
+         don't write to memory we might not write to - g_convert does that
+         for us anyway (fixes #142613)
+       (gst_asf_demux_audio_caps):
+         comment out gst_util_dump_mem
+
+2004-05-16  Benjamin Otte  <otte@gnome.org>
+
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
+         compute correct expected timestamps after seek (broken since
+         last commit)
+       * ext/gdk_pixbuf/pixbufscale.c: (pixbufscale_init):
+         rename element and debugging category to gdkpixbufscale
+
+2004-05-16  Benjamin Otte  <otte@gnome.org>
+
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
+         add error checking to snd_pcm_delay and remove duplicate call to
+         snd_pcm_delay that caused issues (see inline code comments)
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_get_time):
+         make more readable and fix return value when snd_pcm_delay fails
+       (fixes #142586)
+
+2004-05-15  Jan Schmidt  <thaytan@mad.scientisti.com>
+       * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_method_get_type),
+       (gst_pixbufscale_get_type), (gst_pixbufscale_base_init),
+       (gst_pixbufscale_class_init), (gst_pixbufscale_getcaps),
+       (gst_pixbufscale_link), (gst_pixbufscale_init),
+       (gst_pixbufscale_handle_src_event), (pixbufscale_scale),
+       (gst_pixbufscale_chain), (gst_pixbufscale_set_property),
+       (gst_pixbufscale_get_property), (pixbufscale_init):
+       * ext/gdk_pixbuf/pixbufscale.h:
+       Add these files I forgot earlier
+
+2004-05-15  Jan Schmidt  <thaytan@mad.scientist.com>
+       * ext/gdk_pixbuf/Makefile.am:
+       * ext/gdk_pixbuf/gstgdkpixbuf.c: (plugin_init):
+       * ext/gdk_pixbuf/gstgdkpixbuf.h:
+       Add new pixbufscale element to scale RGB video
+       using gdk_pixbuf, because gdk_pixbuf does BILINEAR
+       and HYPER interpolation correctly.
+       * ext/theora/theoraenc.c: (theora_enc_chain),
+       Discard buffer and return if explicit caps could not be set
+       (theora_enc_get_property):
+       Make _get return kbps for the bitrate consistent with
+       the _set function.
+
+
+2004-05-14  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/libvisual/visual.c: (gst_visual_chain):
+         add missing visual_audio_analyze
+
+2004-05-14  David Schleef  <ds@schleef.org>
+
+       * ext/esd/esdsink.c: (gst_esdsink_chain): Fix crash when ESD
+       is killed while we're playing.
+       * gst/qtdemux/qtdemux.c: (qtdemux_parse): call
+       gst_element_no_more_pads().
+
+2004-05-14  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+       * gst-libs/gst/riff/riff-read.c :
+         - fix INFO tag extraction in RIFF/AVI files
+            because gst_event_unref (event) also freed taglist
+          - avoid a mem leak
+
+2004-05-13  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+       * ext/mad/gstid3tag.c : move from "Codec/(Dem/M)uxer" to "Codec/(Dem/M)uxer/Audio"
+       * gst/wavenc/gstwavenc.c : move from "Codec/Encoder/Audio" to "Codec/Muxer/Audio"
+
+       * gst/auparse/gstauparse.c :
+         - add code (commented for now) to support audio/x-adpcm on src pad
+           (we have no decoder for those layout yet)
+
+       * gst/cdxaparse/gstcdxaparse.c :
+       * gst/cdxaparse/gstcdxaparse.h :
+         - partial rewrite using RiffRead (ripped iain's wavparse code)
+
+       * gst/rtp/gstrtpL16enc.c : typo
+       * gst/rtp/gstrtpgsmenc.c : typo
+
+2004-05-13  Benjamin Otte  <otte@gnome.org>
+
+       * configure.ac:
+         check for exact version of libvisual, it's not supposed to be
+         API/ABI stable yet
+
+2004-05-13  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_push):
+         signal no-more-pads
+
+2004-05-13  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * ext/dv/gstdvdec.c: (gst_dvdec_src_convert)
+       Report which format was used for GST_FORMAT_DEFAULT
+       * gst/debug/Makefile.am:
+       * gst/debug/gstdebug.c: (plugin_init):
+       * gst/debug/progressreport.c: (gst_progressreport_base_init),
+       (gst_progressreport_class_init), (gst_progressreport_init),
+       (gst_progressreport_report), (gst_progressreport_set_property),
+       (gst_progressreport_get_property), (gst_progressreport_chain),
+       (gst_progressreport_plugin_init):
+       Add progressreport element for testing.
+
+2004-05-13  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get), (gst_v4lsrc_change_state):
+       * sys/v4l/gstv4lsrc.h:
+       * sys/v4l/v4lmjpegsink_calls.c: (gst_v4lmjpegsink_playback_init):
+       * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_capture_init):
+       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_capture_init),
+       (gst_v4lsrc_grab_frame):
+          add more debugging
+          send a discont at start
+
+2004-05-12  Colin Walters  <walters@redhat.com>
+
+       * gst/asfdemux/gstasfdemux.c (gst_asf_demux_process_segment): Avoid
+       inflooping if we can't find a chunk.  Or in other words, don't blow
+       chunks if we don't have a chunk to blow.
+
+2004-05-13  Jan Schmidt  <thaytan@mad.scientist.com>
+       * ext/audiofile/gstafsrc.c: (gst_afsrc_get):
+       Remove old debug output
+       * ext/dv/gstdvdec.c: (gst_dvdec_quality_get_type),
+       (gst_dvdec_class_init), (gst_dvdec_loop), (gst_dvdec_change_state),
+       (gst_dvdec_set_property), (gst_dvdec_get_property):
+       Change the quality setting to an enum, so it works from gst-launch
+       Don't renegotiate a non-linked pad. Allows audio only decoding.
+       * gst/deinterlace/gstdeinterlace.c: (gst_deinterlace_getcaps),
+       (gst_deinterlace_link), (gst_deinterlace_init):
+       * gst/videodrop/gstvideodrop.c: (gst_videodrop_getcaps),
+       (gst_videodrop_link):
+       Some caps negotiation fixes
+
+2004-05-12  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+       * ext/tarkin/gsttarkin.c :
+         - Change RANK from NONE to PRIMARY
+       * ext/gdk_pixbuf/gstgdkpixbuf.c :
+         - Change RANK from NONE to MARGINAL
+       * ext/divx/gstdivxenc.c :
+         - Change RANK from PRIMARY to NONE (encoder/spider issue)
+
+2004-05-12  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/vorbis/vorbisenc.c: (vorbis_granule_time_copy),
+       (gst_vorbisenc_push_packet):
+          copy a function that was added between 1.0 and 1.0.1 until we
+          depend on worthwhile features of post-1.0
+
+2004-05-12  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * configure.ac:
+         enable shout2 by default
+       * ext/shout2/gstshout2.c: (gst_shout2send_protocol_get_type),
+       (gst_shout2send_base_init), (gst_shout2send_init),
+       (gst_shout2send_connect), (gst_shout2send_change_state):
+       * ext/shout2/gstshout2.h:
+         make this work again. Based on a patch by Zaheer Abbas Merali (fixes
+         #142262)
+       * ext/theora/theora.c: (plugin_init):
+         don't set rank on encoders
+
+2004-05-11  Jeremy Simon  <jesimon@libertysurf.fr>
+
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_audio_caps):
+         Use codec_data property instead of flag1 and flag2 for wma
+
+2004-05-11  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+       * gst/cdxaparse/gstcdxaparse.c :
+         - Add mpegversion to CAPS to make it link
+         - Rank is as GST_RANK_SECONDARY instead of NONE
+       * gst/auparse/gstauparse.c :
+         - Document all audio encoding we can encounter from Solaris 9
+           headers and libsndfile information.
+         - Increase max. rate from 48000 to 192000 (to match other elements)
+         - Don't try to play junk data between header and samples
+
+2004-05-11  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/libvisual/visual.c: (gst_visual_getcaps):
+         use the right caps depending on endianness (I hope)
+       * ext/ogg/gstoggmux.c: (gst_ogg_mux_plugin_init):
+         use GST_RANK_NONE for all non-decoding elements or spider gets
+         mighty confused
+
+2004-05-11  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_comment):
+         Fix some odd cases and fix BE metadata parsing of unicode16 text.
+
+2004-05-11  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst/switch/gstswitch.c: (gst_switch_release_pad),
+       (gst_switch_request_new_pad), (gst_switch_poll_sinkpads),
+       (gst_switch_loop), (gst_switch_get_type):
+         whoever that was: DO NOT IMPORT PRIVATE SYMBOLS THAT ARE NOT IN
+         HEADERS. Had to be said.
+
+2004-05-10  David Schleef  <ds@schleef.org>
+
+       * configure.ac: Add prototype Dirac support.
+       * ext/Makefile.am:
+       * ext/dirac/Makefile.am:
+       * ext/dirac/gstdirac.cc:
+       * ext/dirac/gstdiracdec.cc:
+
+2004-05-10  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/auparse/gstauparse.c: (gst_auparse_class_init),
+       (gst_auparse_init), (gst_auparse_chain),
+       (gst_auparse_change_state):
+         Hack around spider. Remove me some day please.
+
+2004-05-10  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/auparse/gstauparse.c: (gst_auparse_chain):
+         Fix for some uninitialized variables in previous patch, also
+         makes it work. Fixes #142286 while we're at it.
+
+2004-05-11  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+       * gst/auparse/gstauparse.c:
+               fixes a-law, adds mu-law, linear pcm (8,16,24,32), ieee (32, 64)
+               only unsupported formats are ADPCM/CCITT G.72x
+               reviewed by Ronald
+       * gst-libs/gst/audio/audio.h: adds 24bit depth to PCM (x-raw-int)
+
+2004-05-10  Wim Taymans  <wim@fluendo.com>
+
+       * ext/vorbis/Makefile.am:
+       * ext/vorbis/README:
+       * ext/vorbis/oggvorbisenc.c: (gst_oggvorbisenc_get_formats),
+       (oggvorbisenc_get_type), (vorbis_caps_factory), (raw_caps_factory),
+       (gst_oggvorbisenc_base_init), (gst_oggvorbisenc_class_init),
+       (gst_oggvorbisenc_sinkconnect), (gst_oggvorbisenc_convert_src),
+       (gst_oggvorbisenc_convert_sink),
+       (gst_oggvorbisenc_get_query_types), (gst_oggvorbisenc_src_query),
+       (gst_oggvorbisenc_init), (gst_oggvorbisenc_get_tag_value),
+       (gst_oggvorbisenc_metadata_set1), (gst_oggvorbisenc_set_metadata),
+       (get_constraints_string), (update_start_message),
+       (gst_oggvorbisenc_setup), (gst_oggvorbisenc_write_page),
+       (gst_oggvorbisenc_chain), (gst_oggvorbisenc_get_property),
+       (gst_oggvorbisenc_set_property), (gst_oggvorbisenc_change_state):
+       * ext/vorbis/oggvorbisenc.h:
+       * ext/vorbis/vorbis.c: (plugin_init):
+       * ext/vorbis/vorbisenc.c: (vorbis_caps_factory),
+       (raw_caps_factory), (gst_vorbisenc_class_init),
+       (gst_vorbisenc_init), (gst_vorbisenc_setup),
+       (gst_vorbisenc_push_packet), (gst_vorbisenc_chain),
+       (gst_vorbisenc_get_property), (gst_vorbisenc_set_property):
+       * ext/vorbis/vorbisenc.h:
+       Added a raw vorbis encoder to be used with the oggmuxer.
+       We still need the old encoder for some gnome applications,
+       read the README to find out how that works.
+       The raw encoder is called "rawvorbisenc" until 0.9.
+
+2004-05-10  Wim Taymans  <wim@fluendo.com>
+
+       * ext/ogg/gstogg.c: (plugin_init):
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_plugin_init),
+       (gst_ogg_print):
+       * ext/ogg/gstoggmux.c: (gst_ogg_mux_get_type),
+       (gst_ogg_mux_base_init), (gst_ogg_mux_class_init),
+       (gst_ogg_mux_get_sink_event_masks), (gst_ogg_mux_init),
+       (gst_ogg_mux_sinkconnect), (gst_ogg_mux_pad_link),
+       (gst_ogg_mux_pad_unlink), (gst_ogg_mux_request_new_pad),
+       (gst_ogg_mux_handle_src_event), (gst_ogg_mux_next_buffer),
+       (gst_ogg_mux_push_page), (gst_ogg_mux_compare_pads),
+       (gst_ogg_mux_queue_pads), (gst_ogg_mux_loop),
+       (gst_ogg_mux_get_property), (gst_ogg_mux_set_property),
+       (gst_ogg_mux_change_state), (gst_ogg_mux_plugin_init):
+       Added an ogg muxer.
+       Small typo fixes in the demuxer.
+
+2004-05-10  Wim Taymans  <wim@fluendo.com>
+
+       * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
+       (theora_enc_sink_link), (theora_push_packet), (theora_enc_chain),
+       (theora_enc_change_state), (theora_enc_set_property),
+       (theora_enc_get_property):
+       Mark the last packet with an EOS flag which is not really needed
+       in gstreamer.
+       Do some better video framerate initialisation.
+       Update the buffer timestamp.
+
+2004-05-10  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * ext/dv/gstdvdec.c: (gst_dvdec_change_state):
+       Return the result of the parent state change call
+
+2004-05-10  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+       * gst/law/alaw.c : alawdec should be registered with type ALAWDEC, not ALAWENC
+       * gst/law/alaw-decode.c : put audio/x-alaw on pads, instead of audio/x-mulaw
+       * gst/law/alaw-encode.c : (idem)
+       * ext/a52dec/gsta52dec.c : mark audio/a52, audio/ac3 as deprecated in a comment
+       * gst/ac3parse/gstac3parse.c : audio/ac3 => audio/x-ac3
+       * gst/realmedia/rmdemux.c : audio/a52 => audio/x-ac3
+
+2004-05-09  Benjamin Otte  <otte@gnome.org>
+
+       * ext/alsa/gstalsasrc.c: (gst_alsa_src_loop):
+         don't use a fixed buffer size when writing variable length data to
+         it. Fixes memory corruption and makes alsasrc work
+
+2004-05-09  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/gnomevfs/gstgnomevfssink.c:
+       (_gst_boolean_allow_overwrite_accumulator),
+       (gst_gnomevfssink_class_init), (gst_gnomevfssink_open_file):
+         Run glib's default signal handler (??) in RUN_CLEANUP rather than
+         RUN_LAST, and don't use that to set the accumulator value because
+         then it's always FALSE.
+
+2004-05-09  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-media.c:
+       (gst_riff_create_video_caps_with_data),
+       (gst_riff_create_audio_caps),
+       (gst_riff_create_audio_template_caps):
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head):
+         Fix for unaligned RIFF files (i.e. where all the chunks together
+         in a LIST chunk are not of the same size as the size given in
+         the LIST chunk header). Fixes several odd WAVE files. Also fix
+         ADPCM (block_align property) in audio, so that wavparse based
+         on this works now as it used to stand-alone.
+
+2004-05-09  Edward Hervey  <bilboed@bilboed.com>
+
+       reviewed by Benjamin Otte  <otte@gnome.org>
+
+       * ext/a52dec/gsta52dec.c:
+       * ext/divx/gstdivxdec.c:
+       * ext/divx/gstdivxenc.c:
+       * ext/dts/gstdtsdec.c: (gst_dtsdec_base_init):
+       * ext/faac/gstfaac.c: (gst_faac_base_init):
+       * ext/faad/gstfaad.c: (gst_faad_base_init):
+       * ext/ivorbis/vorbisfile.c:
+       * ext/lame/gstlame.c:
+       * ext/libfame/gstlibfame.c:
+       * ext/mpeg2enc/gstmpeg2enc.cc:
+       * ext/musicbrainz/gsttrm.c: (gst_musicbrainz_base_init):
+       * ext/sidplay/gstsiddec.cc:
+       * ext/speex/gstspeexdec.c:
+       * ext/speex/gstspeexenc.c:
+       * ext/xvid/gstxviddec.c:
+       * ext/xvid/gstxvidenc.c:
+         correct klasses. Mostly s,Codec/(Audio|Video),\1/Codec,
+         (fixes #142193)
+
+2004-05-08  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsa.c: (device_list),
+       (gst_alsa_class_probe_devices):
+       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_open):
+         Fix alsa oddness in mixer after the combination of using mixer
+         in source/sink elements and using hw:x,y instead of just hw:x.
+
+2004-05-09  Benjamin Otte  <otte@gnome.org>
+
+       * gst/wavparse/gstwavparse.c: (gst_wavparse_destroy_sourcepad),
+       (gst_wavparse_create_sourcepad):
+         make PAUSED=>READY=>PAUSED=READY work by not destroying NULL
+         sourcepads
+
+2004-05-09  Benjamin Otte  <otte@gnome.org>
+
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
+         allow discont events before caps nego
+
+2004-05-08  Benjamin Otte  <otte@gnome.org>
+
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_event):
+         don't leak events
+
+2004-05-08  Benjamin Otte  <otte@gnome.org>
+
+       * gst/level/gstlevel.c: (gst_level_link), (gst_level_chain),
+       (gst_level_change_state), (gst_level_init):
+       * gst/level/gstlevel.h:
+         figure out if we're initialized directly instead of keeping a
+         variable that's wrong in 90% of cases
+         don't initialize pads and then leak them and use a new unitialized
+         pad. (fixes #142084)
+         these were bugs so n00bish I didn't find them for an hour :/
+
+2004-05-08 Iain <iain@prettypeople.org>
+
+       * gst/wavparse/gstwavparse.[ch]: Rewrote to use RiffRead instead.
+       * gst-libs/gst/riff/riff-read.c (gst_riff_read_peek_head): Unstatic it
+       (gst_riff_read_element_data): Ditto, and added a got_bytes argument to
+       return the length that was read.
+       (gst_riff_read_strf_auds): Allow fmt tags as well.
+
+2004-05-07  David Schleef  <ds@schleef.org>
+
+       * ext/faad/gstfaad.c: (gst_faad_sinkconnect): HACK to correct
+       signed char assumption in faad.h.
+
+2004-05-07  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/v4l2/gstv4l2src.c: (gst_v4l2src_v4l2fourcc_to_caps):
+         Missing break, detected by Daniel Gazard <daniel.gazard@free.fr>.
+
+2004-05-07  Colin Walters  <walters@redhat.com>
+
+       * gst/volume/gstvolume.c (gst_volume_dispose): Unref dpman.
+       * ext/flac/gstflacdec.c (gst_flacdec_dispose): Add dispose
+       function.
+       * gst/audioscale/gstaudioscale.c (gst_audioscale_dispose):
+       Add dispose function.
+
+2004-05-08  Jan Schmidt  <thaytan@mad.scientist.com>
+       * ext/dv/gstdvdec.c: (gst_dvdec_video_link):
+         Fix caps nego and pad templates. RGB mode caps should
+         work now.
+       * ext/dvdnav/gst-dvd:
+         Move mpeg2dec inside the thread because otherwise the
+         queue rejects cap changes mid-stream
+       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_get_type),
+       (gst_mpeg2dec_flush_decoder):
+         For mpeg2dec > 0.4.0, call the flush function instead of
+         manually extracting all in-flight frames.
+       * ext/raw1394/gstdv1394src.c: (gst_dv1394src_factory),
+       (gst_dv1394src_init), (gst_dv1394src_iso_receive):
+         Change mime type video/dv go video/x-dv to match the
+         rest of gst-plugins
+
+2004-05-07  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_build_list):
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_get_type),
+       (gst_alsa_sink_class_init):
+       * ext/alsa/gstalsasink.h:
+       * ext/alsa/gstalsasrc.c: (gst_alsa_src_get_type),
+       (gst_alsa_src_class_init):
+       * ext/alsa/gstalsasrc.h:
+         Make alsasink/src a subclass of alsamixer so that mixer stuff
+         shows up in gst-rec. Needs some finetuning.
+
+2004-05-05  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/lame/gstlame.c: (gst_lame_chain):
+         simplify
+       * ext/mad/gstmad.c: (gst_mad_handle_event):
+         fix event leak
+       * gst/typefind/gsttypefindfunctions.c: (mp3_type_find):
+         be able to detect mp3 files < 4096 bytes
+
+2004-05-06  Wim Taymans  <wim@fluendo.com>
+
+       * ext/theora/theoraenc.c: (gst_theora_enc_class_init),
+       (theora_enc_sink_link), (theora_push_packet), (theora_enc_chain),
+       (theora_enc_set_property), (theora_enc_get_property):
+       Also encode the first frame, cleanup some code.
+
+2004-05-06  Wim Taymans  <wim@fluendo.com>
+
+       * ext/mpeg2enc/gstmpeg2enc.cc:
+       Forward events first before deciding that negotiation was
+       not performed.
+
+2004-05-06  Wim Taymans  <wim@fluendo.com>
+
+       * gst/wavenc/gstwavenc.c: (gst_wavenc_chain):
+       First process the events before deciding that negotiation
+       was not performed.
+
+2004-05-06  Wim Taymans  <wim@fluendo.com>
+
+       * ext/theora/Makefile.am:
+       * ext/theora/theora.c: (plugin_init):
+       * ext/theora/theoradec.c: (theora_dec_change_state):
+       * ext/theora/theoraenc.c: (gst_theora_enc_base_init),
+       (gst_theora_enc_class_init), (gst_theora_enc_init),
+       (theora_enc_sink_link), (theora_enc_event), (theora_push_packet),
+       (theora_enc_chain), (theora_enc_change_state),
+       (theora_enc_set_property), (theora_enc_get_property):
+       Added a theora encoder, grouped the encoder and decoder into the
+       same plugin.
+
+2004-05-05  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/jpeg/gstjpegenc.c: (gst_jpegenc_get_type),
+       (gst_jpegenc_chain):
+        fix DURATION on outgoing buffers
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_sink_event):
+        debug using time formats
+       * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
+       (gst_xvimagesink_sink_link):
+        windows with width/height 0 generate X errors, so don't allow them
+
+2004-05-05  Wim Taymans  <wim@fluendo.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c: (src_templ),
+       (gst_mpeg2dec_base_init), (gst_mpeg2dec_init),
+       (gst_mpeg2dec_negotiate_format):
+       * ext/mpeg2dec/gstmpeg2dec.h:
+         removed the static pad template so that we can add the
+         more accurate framerate value to the caps.
+
+
+2004-05-04  Benjamin Otte  <otte@gnome.org>
+
+       * configure.ac:
+         check for kdemacros.h, too (should fix #141821)
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_event), (vorbis_dec_chain):
+         don't crash if no header was sent, but nicely error out (fixes part
+         of #141554)
+
+2004-05-04  Wim Taymans  <wim@fluendo.com>
+
+       * ext/mpeg2enc/gstmpeg2enc.cc: (gst_mpeg2enc_dispose): call the
+       parent dispose function to avoid segfault on destroy.
+
+2004-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_sink_link),
+       (plugin_init):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
+       (gst_xvimagesink_sink_link):
+        clean up debugging caps
+        also recreate xvimage when format has changed
+
+2004-05-04  Benjamin Otte  <otte@gnome.org>
+
+       * ext/libvisual/Makefile.am:
+       * ext/libvisual/visual.c: (gst_visual_class_init),
+       (gst_visual_init), (gst_visual_dispose), (gst_visual_getcaps),
+       (gst_visual_srclink), (gst_visual_chain),
+       (gst_visual_change_state), (plugin_init):
+         use a GstAdapter to correctly adapt buffer sizes - allows using a
+         framerate
+
+2004-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/v4l/gstv4lelement.h:
+       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_class_init):
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get_fps), (gst_v4lsrc_getcaps),
+       (gst_v4lsrc_buffer_free):
+       * sys/v4l/v4l_calls.c: (gst_v4l_get_capabilities):
+       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_queue_frame),
+       (gst_v4lsrc_sync_frame), (gst_v4lsrc_grab_frame),
+       (gst_v4lsrc_requeue_frame):
+        move some debugging categories around
+        query for fps index and set accordingly if found
+
+2004-05-03  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+       * ext/lame/gstlame.c:
+       correct defaults that lame_init puts out of range
+
+2004-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/divx/gstdivxenc.c: (gst_divxenc_get_type),
+       (gst_divxenc_class_init):
+        fix range since -1 is the default
+       * gst/mpeg1sys/gstmpeg1systemencode.c:
+       (gst_mpeg1_system_encode_get_type), (gst_system_encode_multiplex):
+       * gst/rtjpeg/gstrtjpegdec.c: (gst_rtjpegdec_get_type),
+       (gst_rtjpegdec_chain):
+       * gst/rtjpeg/gstrtjpegenc.c: (gst_rtjpegenc_get_type),
+       (gst_rtjpegenc_chain):
+       * sys/qcam/gstqcamsrc.c: (gst_autoexp_mode_get_type),
+       (gst_qcamsrc_get_type), (gst_qcamsrc_change_state):
+       * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_get_type):
+       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get_type):
+       * sys/v4l/gstv4lsrc.c:
+       * sys/v4l/v4l_calls.c: (gst_v4l_open):
+       * sys/v4l/v4lmjpegsink_calls.c: (gst_v4lmjpegsink_playback_init):
+       * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_capture_init):
+       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_capture_init):
+       * sys/vcd/vcdsrc.c: (vcdsrc_get_type), (vcdsrc_get):
+          remove gst_info calls
+
+2004-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * Makefile.am:
+       * po/af.po:
+       * po/az.po:
+       * po/en_GB.po:
+       * po/nl.po:
+       * po/sr.po:
+       * po/sv.po:
+          Updated translations
+
+2004-05-03  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/audioconvert/gstaudioconvert.c: (_fixate_caps_to_int):
+          refactor/comment code
+
+2004-05-02  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/asfdemux/Makefile.am:
+       * gst/asfdemux/asfheaders.c:
+       * gst/asfdemux/asfheaders.h:
+       * gst/asfdemux/gstasf.c: (plugin_init):
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_get_type),
+       (gst_asf_demux_base_init), (gst_asf_demux_process_comment),
+       (gst_asf_demux_setup_pad):
+       * gst/asfdemux/gstasfdemux.h:
+       * gst/asfdemux/gstasfmux.c:
+       * gst/asfdemux/gstasfmux.h:
+         Add tagging support to demuxer, split out registration in its own
+         file instead of in demux (hacky), and prevent having some tables
+         in our memory multiple times (in asfheaders.h).
+
+2004-05-01  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/matroska/matroska-demux.c:
+       (gst_matroska_demux_parse_metadata):
+       * gst/matroska/matroska-ids.h:
+         Basic tag reading support.
+
+2004-04-30  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/matroska/matroska-demux.c: (gst_matroska_demux_audio_caps):
+         Really detect ac-3 audio.
+       * gst/typefind/gsttypefindfunctions.c: (matroska_type_find):
+         really detect matroska files (off-by-1).
+
+2004-04-30  David Schleef  <ds@schleef.org>
+
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
+       (gst_qtdemux_add_stream), (qtdemux_parse), (qtdemux_type_get),
+       (qtdemux_dump_stsz), (qtdemux_dump_stco), (qtdemux_dump_co64),
+       (qtdemux_dump_unknown), (qtdemux_parse_tree), (qtdemux_parse_udta),
+       (qtdemux_tag_add), (get_size), (gst_qtdemux_handle_esds): More qtdemux
+       hackage -- parse a lot more atoms, extract a few tags.  One might even
+       mistake this for tag support.  Maybe it is.
+       * gst/qtdemux/qtdemux.h:
+
+2004-04-30  Colin Walters  <walters@verbum.org>
+
+       * ext/alsa/gstalsasink.c (gst_alsa_sink_mmap): Plug a memleak.
+
+2004-04-30  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+       (gst_ffmpegcolorspace_getcaps):
+          remove broken nego fix
+
+2004-04-30  Benjamin Otte  <otte@gnome.org>
+
+       * configure.ac:
+       * ext/Makefile.am:
+       * ext/libvisual/Makefile.am:
+       * ext/libvisual/visual.c:
+         add initial support for libvisual (http://libvisual.sourceforge.net)
+         libvisual is still quite alpha, so expect crashes in there :)
+
+2004-04-29  David Schleef  <ds@schleef.org>
+
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_add_stream), (qtdemux_parse),
+       (qtdemux_parse_trak), (get_size), (gst_qtdemux_handle_esds): Hacked
+       up qtdemux to make it spit out codec_data.  Do _not_ look at this
+       code; you will no longer respect me.
+
+2004-04-29  Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
+
+       * ext/alsa/gstalsa.c : (gst_alsa_class_probe_devices)
+       * ext/alsa/gstalsa.h :
+       change alsa pcm device discovery to find more than 1 device
+       per card. code review by Ronald.
+
+2004-04-29  David Schleef  <ds@schleef.org>
+
+       * sys/oss/gstosselement.c: (gst_osselement_rate_probe_check):
+       Add a check for a driver bug on FreeBSD.  (bug #140565)
+
+2004-04-29  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/jpeg/gstjpegdec.c: (gst_jpegdec_get_type):
+       * ext/jpeg/gstjpegenc.c: (gst_jpegenc_get_type),
+       (gst_jpegenc_getcaps):
+          move format setting to inner loop
+       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+       (gst_ffmpegcolorspace_getcaps):
+          use GST_PAD_CAPS if available so that we use already negotiated
+          caps
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
+       (qtdemux_parse_moov), (qtdemux_parse):
+          extra debugging
+       * sys/qcam/qcam-Linux.c: (qc_lock_wait), (qc_unlock):
+       * sys/qcam/qcam-os.c: (qc_lock_wait), (qc_unlock):
+          move hardcoded path to DEFINE
+
+2004-04-28  David Schleef  <ds@schleef.org>
+
+       * gst/speed/gstspeed.c: (speed_parse_caps):  Fix caps parsing.
+       (bug #140064)
+
+2004-04-28  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_class_probe_devices):
+         Don't probe for playback device if we're a source element. Fixes
+         #139658.
+
+2004-04-29  Benjamin Otte  <otte@gnome.org>
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event),
+       (gst_id3_tag_chain):
+         rewrite buffer offset
+
+2004-04-28  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * configure.ac:
+       * ext/Makefile.am:
+       * ext/dts/Makefile.am:
+       * ext/dts/gstdtsdec.c: (gst_dtsdec_get_type),
+       (gst_dtsdec_base_init), (gst_dtsdec_class_init), (gst_dtsdec_init),
+       (gst_dtsdec_channels), (gst_dtsdec_renegotiate),
+       (gst_dtsdec_handle_event), (gst_dtsdec_update_streaminfo),
+       (gst_dtsdec_loop), (gst_dtsdec_change_state),
+       (gst_dtsdec_set_property), (gst_dtsdec_get_property),
+       (plugin_init):
+       * ext/dts/gstdtsdec.h:
+         New DTS decoder.
+       * ext/faad/gstfaad.c: (gst_faad_sinkconnect),
+       (gst_faad_srcconnect):
+         Add ESDS atom handling (.m4a).
+
+2004-04-27  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/divx/gstdivxdec.c: (plugin_init):
+         Remove comment that makes no sense.
+       * ext/mad/gstid3tag.c: (gst_id3_tag_set_property):
+         Fix for obvious typo that resulted in warnings during gst-register.
+       * ext/xvid/gstxviddec.c: (gst_xviddec_src_link),
+       (gst_xviddec_sink_link):
+         Fix caps negotiation a bit better.
+       * gst/qtdemux/qtdemux.c: (qtdemux_parse_trak):
+         We call this 'codec_data', not 'esds'.
+
+2004-04-27  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst/monoscope/gstmonoscope.c:
+         make sure we only provide 256x128
+       * gst/monoscope/monoscope.c: (monoscope_init):
+         assert size of 256x128
+
+2004-04-27  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * Makefile.am:
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_init), (gst_v4lsrc_fixate),
+       (gst_v4lsrc_getcaps), (gst_v4lsrc_buffer_free):
+          fixate to max width and height of device
+
+2004-04-27  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * Makefile.am:
+       * sys/v4l/gstv4l.c:
+       * sys/v4l/gstv4lsrc.c:
+       * sys/v4l/v4l_calls.c:
+       * sys/v4l/v4lsrc_calls.c:
+          fix for qc-usb driver which fakes having more than one buffer
+          by handing the same buffer twice, which confused GStreamer's/v4lsrc
+          buffer_free override
+          add debugging
+
+2004-04-27  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * Makefile.am:
+       * gst/videotestsrc/gstvideotestsrc.c:
+       (gst_videotestsrc_class_init), (gst_videotestsrc_change_state),
+       (gst_videotestsrc_init), (gst_videotestsrc_get),
+       (gst_videotestsrc_set_property), (gst_videotestsrc_get_property):
+       * gst/videotestsrc/gstvideotestsrc.h:
+          add num-buffers property
+
+       2004-04-26  Benjamin Otte  <otte@gnome.org>
+
+       * ext/mad/gstid3tag.c: (plugin_init):
+         set id3mux rank to NONE so it doesn't confuse spider
+         require audio/mpeg,mpegversion=1 in id3mux
+
+2004-04-26  Benjamin Otte  <otte@gnome.org>
+
+       * configure.ac:
+         detect faad correctly as non-working if it's indeed non-working
+
+2004-04-26  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * Makefile.am:
+       * ext/jpeg/gstjpegenc.c: (gst_jpegenc_get_type),
+       (gst_jpegenc_class_init), (gst_jpegenc_getcaps):
+        fix _getcaps so it only negotiates to its supported format
+
+2004-04-25  Benjamin Otte  <otte@gnome.org>
+
+       * gst/audioconvert/gstaudioconvert.c: (_fixate_caps_to_int):
+         fix memleak
+
+2004-04-23  Benjamin Otte  <otte@gnome.org>
+
+       * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+         audio/x-raw-int with height rules! not. Now it's depth.
+
+2004-04-22  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/wavparse/gstwavparse.c: (gst_wavparse_create_sourcepad),
+       (gst_wavparse_parse_fmt), (gst_wavparse_handle_sink_event),
+       (gst_wavparse_loop):
+         Missing variable initialization. Add handling of DVI ADPCM. Fix
+         mis-parsing of LIST chunks. This works around a bug where we mis-
+         parse non-aligning LIST chunks (so LIST chunks where the contents
+         don't align with the actual LIST size). The correct fix is to use
+         rifflib, I'm not going to fix wavparse - too much work. All this
+         fixes #104878.
+
+2004-04-22  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       reviewed by Benjamin Otte  <otte@gnome.org>
+
+       * ext/shout/gstshout.c: (gst_icecastsend_change_state):
+         fix shoutcast not working (fixes #140844)
+
+2004-04-22  Benjamin Otte  <otte@gnome.org>
+
+       * ext/hermes/gsthermescolorspace.c:
+       (gst_hermes_colorspace_caps_remove_format_info):
+       * gst/colorspace/gstcolorspace.c:
+       (gst_colorspace_caps_remove_format_info):
+       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+       (gst_ffmpegcolorspace_caps_remove_format_info):
+         s/gst_caps_simplify/gst_caps_do_simplify/
+
+2004-04-22  Benjamin Otte  <otte@gnome.org>
+
+       * gst-libs/gst/riff/riff-media.c:
+       (gst_riff_create_video_caps_with_data):
+         mpegversion is an int
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_base_init):
+         don't try to create pad templates with NULL caps, use any caps
+         instead.
+
+2004-04-20  David Schleef  <ds@schleef.org>
+
+       * ext/sdl/Makefile.am: Link against libgstinterfaces, not
+       libgstxoverlay.  jmmv@menta.net (Julio M. Merino Vidal)
+       (bug #140384)
+
+2004-04-20  Daniel Gazard  <daniel.gazard@epita.fr>
+
+       reviewed by David Schleef
+
+       * ext/mad/gstid3tag.c: Add stdlib.h
+       * gst/rtp/gstrtpgsmenc.c: same
+       * gst/tags/gstid3tag.c: same
+       * gst/udp/gstudpsrc.c: (gst_udpsrc_get): Fix GST_DISABLE_LOADSAVE
+       * gst/tcp/gsttcpsink.c: (gst_tcpsink_sink_link): Adjust
+       GST_DISABLE_LOADSAVE use.
+       * gst/udp/gstudpsink.c: (gst_udpsink_sink_link): Likewise.
+       * gst/tcp/gsttcpsrc.c: (gst_tcpsrc_get): Likewise.
+       * ext/gnomevfs/gstgnomevfssrc.c: Include <stdlib.h> (needed by
+       atol(3)).
+       * sys/oss/gstosselement.h: Include <sys/types.h> (needed for dev_t).
+       * gst/tags/gstvorbistag.c: Include <stdlib.h> (needed by
+       strtoul(3)).
+       * gst/rtp/gstrtpL16enc.c: Include <stdlib.h> (needed by random(3)).
+       * ext/mad/Makefile.am: (libgstmad_la_CFLAGS): Add $(MAD_CFLAGS)
+       $(ID3_CFLAGS).
+       * ext/libfame/Makefile.am: (libgstlibfame_la_CFLAGS): Add
+       $(LIBFAME_CFLAGS).
+
+2004-04-20  David Schleef  <ds@schleef.org>
+
+       * gst/realmedia/rmdemux.c:  This was supposed to part of the
+       last checkin.  Same idea.
+
+2004-04-20  Daniel Gazard  <daniel.gazard@epita.fr>
+
+       reviewed by David Schleef
+
+       * configure.ac: bump required gstreamer version to 0.8.1.1
+       because of following changes [--ds]
+
+       * gst-libs/gst/riff/riff-read.c:  Include gst/gstutils.h.
+       (gst_riff_peek_head, gst_riff_peek_list, gst_riff_read_list)
+       (gst_riff_read_header):  Use GST_READ_UINT*
+       macros to access possibly unaligned memory.
+
+       * gst/typefind/gsttypefindfunctions.c: Include gst/gstutils.h.
+       (mp3_type_find):  Use GST_READ_UINT*
+       macros to access possibly unaligned memory.
+       (mp3_type_find, mpeg1_parse_header, qt_type_find)
+       (speex_type_find): Likewise
+
+       * gst/tags/gstvorbistag.c: (ADVANCE): Likewise
+
+       * gst/qtdemux/qtdemux.c: Include stdlib.h (needed by realloc).
+       (QTDEMUX_GUINT32_GET, QTDEMUX_GUINT16_GET, QTDEMUX_FP32_GET)
+       (QTDEMUX_FP16_GET, QTDEMUX_FOURCC_GET)
+       (gst_qtdemux_loop_header, gst_qtdemux_loop_header)
+       (qtdemux_node_dump_foreach, qtdemux_tree_get_child_by_type)
+       (qtdemux_tree_get_sibling_by_type):  Use GST_READ_UINT*
+       macros to access possibly unaligned memory.
+
+       * gst/mpegstream/gstmpegpacketize.c: (parse_generic, parse_chunk):
+       Likewise.
+
+       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead)
+       (gst_mpeg_demux_parse_packet, gst_mpeg_demux_parse_pes): Likewise.
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
+       Likewise.
+
+       * gst/mpeg2sub/gstmpeg2subt.c: (GST_BUFFER_DATA)
+       (gst_mpeg2subt_chain_subtitle): Likewise.
+
+       * gst/mpeg1videoparse/gstmp1videoparse.c: (mp1videoparse_parse_seq)
+       (gst_mp1videoparse_time_code, gst_mp1videoparse_real_chain):
+       Likewise.
+
+       * gst/mpeg1sys/buffer.c: (mpeg1mux_buffer_update_audio_info):
+       Likewise.
+
+       * gst/cdxaparse/gstcdxaparse.c: (gst_bytestream_peek_bytes):
+       Likewise.
+
+       * gst/asfdemux/gstasfdemux.c: (_read_var_length, _read_uint):
+       Likewise.
+
+2004-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+          update required version of GStreamer because of GST_TIME_FORMAT
+
+2004-04-20  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_init):
+         remove leftover g_print
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
+         don't try setting only a subset of the caps. We don't want to kill
+         autoplugging on purpose
+
+2004-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/ximage/ximagesink.c: (plugin_init):
+       * sys/xvimage/xvimagesink.c: (plugin_init):
+          add debugging categories
+
+2004-04-20  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * po/en_GB.po:
+        * po/LINGUAS:
+          Adding en_GB translation (Gareth Owen)
+
+2004-04-20  David Schleef  <ds@schleef.org>
+
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_handle_sink_event),
+       (qtdemux_parse), (qtdemux_type_get), (qtdemux_dump_mvhd),
+       (qtdemux_dump_tkhd), (qtdemux_dump_stsd), (qtdemux_dump_unknown),
+       (qtdemux_parse_trak), (qtdemux_video_caps), (qtdemux_audio_caps):
+       A number of new features and hacks to extract the esds atom and
+       put it into the caps.  (bug #137724)
+
+2004-04-19  David Schleef  <ds@schleef.org>
+
+       * gconf/Makefile.am: Fix for non-GNU make
+       * gst-libs/gst/Makefile.am: Change directory order to handle
+       GstPlay linking with gstinterfaces
+       * gst-libs/gst/audio/make_filter: make use of tr portable
+       * gst-libs/gst/play/Makefile.am: Add intended \
+       * gst-libs/gst/xwindowlistener/xwindowlistener.c:
+       (gst_xwin_set_clips): Switch to ISO variadic macro. Use a
+       function prototype instead of void *.
+       * gst/ffmpegcolorspace/gstffmpegcodecmap.c: Switch to ISO variadic
+       macro.
+       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+       (gst_ffmpegcolorspace_chain): wrap NULL in GST_ELEMENT_ERROR call
+       * gst/videofilter/make_filter: make use of tr portable
+       * pkgconfig/Makefile.am: Remove GNU extension in Makefile target
+
+2004-04-19  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * po/LINGUAS:
+       * po/uk.po:
+          Added Ukrainian translation (Maxim V. Dziumanenko)
+
+2004-04-18  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/gsm/gstgsmdec.c: (gst_gsmdec_init), (gst_gsmdec_getcaps),
+       (gst_gsmdec_link), (gst_gsmdec_chain):
+         Fix capsnego, simplify chain function slightly.
+       * gst/qtdemux/qtdemux.c: (qtdemux_audio_caps):
+         Add GSM.
+
+2004-04-18  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/wavparse/gstwavparse.c: (gst_wavparse_init),
+       (gst_wavparse_destroy_sourcepad), (gst_wavparse_create_sourcepad),
+       (gst_wavparse_parse_fmt), (gst_wavparse_change_state):
+         Hack to make wavparse work with spider (always -> sometimes pad).
+         Fixes #135862 && #140411.
+
+2004-04-18  Benjamin Otte  <otte@gnome.org>
+
+       * sys/oss/gstosselement.c: (gst_osselement_sync_parms),
+       (gst_osselement_rate_probe_check),
+       (gst_osselement_rate_check_rate), (gst_osselement_rate_add_rate):
+         get rid of \n in debug output
+
+2004-04-17  Iain <iain@prettypeople.org>
+
+       * gst/wavparse/gstwavparse.c (gst_wavparse_loop): Allow all events,
+       not just EOS.
+
+2004-04-17  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_get_type),
+       (gst_id3_tag_class_init), (gst_id3_tag_get_caps),
+       (gst_id3_tag_add_src_pad), (gst_id3_tag_init),
+       (gst_id3_tag_set_property), (gst_id3_tag_do_caps_nego),
+       (gst_id3_tag_src_link), (gst_id3_tag_chain),
+       (gst_id3_tag_change_state), (plugin_init):
+         deprecate id3tag element and replace with id3demux/id3mux.
+         great side effect: this ugly file is now even uglier, yay!
+       * ext/mad/gstmad.h:
+         remove non-available function
+         update for new get_type
+
+2004-04-17  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * configure.ac:
+         require mpeg2dec >= 0.4.0
+
+2004-04-17  Benjamin Otte  <otte@gnome.org>
+
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
+       (gst_xvimagesink_xcontext_get), (gst_xvimagesink_change_state),
+       (gst_xvimagesink_set_xwindow_id):
+         call GST_ELEMENT_ERROR whenever get_xcontext fails. Includes
+         assorted cleanup fixes.
+
+2004-04-16  David Schleef  <ds@schleef.org>
+
+       * sys/ximage/ximagesink.h: Compile fix for FreeBSD. (bug #140268)
+       * sys/xvimage/xvimagesink.h: same
+
+2004-04-16  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_open_file):
+          Fix GST_ELEMENT_ERROR with (NULL)
+
+2004-04-15  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-media.c:
+       (gst_riff_create_video_caps_with_data):
+         Add div[3456] as fourccs for DivX 3 (fixes #140137).
+
+2004-04-15  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-media.c:
+       (gst_riff_create_video_caps_with_data),
+       (gst_riff_create_video_caps), (gst_riff_create_audio_caps),
+       (gst_riff_create_video_template_caps),
+       (gst_riff_create_audio_template_caps):
+       * gst-libs/gst/riff/riff-media.h:
+       * gst-libs/gst/riff/riff-read.c:
+       (gst_riff_read_strf_vids_with_data), (gst_riff_read_strf_vids):
+       * gst-libs/gst/riff/riff-read.h:
+       * gst/avi/gstavidemux.c: (gst_avi_demux_add_stream):
+         Add MS RLE support. I added some functions to read out strf chunks
+         into strf chunks and the data behind it. This is usually color
+         palettes (as in RLE, but also in 8-bit RGB). Also use those during
+         caps creation. Lastly, add ADPCM (similar to wavparse - which
+         should eventually be rifflib based).
+       * gst/matroska/matroska-demux.c: (gst_matroska_demux_class_init),
+       (gst_matroska_demux_init), (gst_matroska_demux_reset):
+       * gst/matroska/matroska-demux.h:
+         Remove placeholders for some prehistoric tagging system. Didn't add
+         support for any tag system really anyway.
+       * gst/qtdemux/qtdemux.c:
+         Add support for audio/x-m4a (MPEG-4) through spider.
+       * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt),
+       (gst_wavparse_loop):
+         ADPCM support (#135862). Increase max. buffer size because we
+         cannot split buffers for ADPCM (screws references) and I've seen
+         files with 2048 byte chunks. 4096 seems safe for now.
+
+2004-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac: bump nano to 1
+
+=== release 0.8.1 ===
+
+2004-04-15  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac: releasing 0.8.1, "Comforting Sounds"
+
+2004-04-14  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+         Fix typo in divxversion (3 instead of 4 for "DIVX" fourcc).
+         Fixes #140058
+
+2004-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_plugin_init):
+          lower rank of dvddemux so that it's not used for mpeg playback.
+
+2004-04-14  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * configure.ac:
+         save libs correctly when checking mad
+
+2004-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/mad/gstid3tag.c: (plugin_init):
+          lower rank of id3tag as proposed by Benjamin.  Fixes #139926.
+
+2004-04-13  David Schleef  <ds@schleef.org>
+
+       * common/m4/gst-feature.m4: Call -config scripts with
+       --plugin-libs if it is supported.
+       * gst/avi/gstavimux.c: (gst_avimux_vidsinkconnect): sequences of
+       JPEG images are image/jpeg.
+       * gst/debug/Makefile.am:
+       * gst/debug/negotiation.c: (gst_negotiation_class_init),
+       (gst_negotiation_getcaps), (gst_negotiation_pad_link),
+       (gst_negotiation_update_caps), (gst_negotiation_get_property),
+       (gst_negotiation_plugin_init): Add a property that acts like
+       filter caps.
+       * testsuite/gst-lint:  Move license checking to be a standard
+       test.
+
+2004-04-13  David Schleef  <ds@schleef.org>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_reset): Fix memleak.
+       patch from Sebastien Cote (bug #139958)
+
+2004-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * examples/gstplay/Makefile.am:
+       * examples/gstplay/player.c: (main):
+          make the commandline player example use gconf settings
+
+2004-04-13  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/libcaca/gstcacasink.c: (gst_cacasink_class_init),
+       (gst_cacasink_sinkconnect), (gst_cacasink_init),
+       (gst_cacasink_chain), (gst_cacasink_open), (gst_cacasink_close):
+          init/end library during state transition, not object
+          creation/disposal.  get rid of custom dispose handler.
+
+
+2004-04-12  Christian Schaller <Uraeus@gnome.org>
+
+       * sys/oss/gstosselement.c: s/lstat/stat/ from freeBSD, since it can
+       be a symlink
+
+2004-04-11  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_data):
+         Handle JUNK chunks inside data section. Prevents warnings.
+
+2004-04-11  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps),
+       (gst_riff_create_video_template_caps):
+         Add MS video v1.
+       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_index),
+       (gst_avi_demux_stream_data):
+         Add support for "rec-list" chunks.
+
+2004-04-11  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps):
+         Fix another codecname mismatch.
+
+2004-04-11  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+         Fix divx caps mismatch and move from video/x-jpeg to image/jpeg
+         so that MJPEG plays back.
+
+2004-04-10  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/mpeg1videoparse/gstmp1videoparse.c: (gst_mp1videoparse_init),
+       (gst_mp1videoparse_real_chain), (gst_mp1videoparse_change_state):
+       * gst/mpeg1videoparse/gstmp1videoparse.h:
+         Fix for some slight mis-cuts in buffer parsing, and for some
+         potential overflows or faults-causers. Adds disconts. Also fixes
+         #139105 while we're at it.
+
+2004-04-10  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * configure.ac:
+       * sys/v4l2/gstv4l2element.h:
+         Workaround for missing struct v4l2_buffer declaration in Suse 9
+         and Mandrake 10 linux/videodev2.h header file (#135919).
+
+2004-04-10  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_open_file):
+         Bail out if no filename was given.
+
+2004-04-10  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/v4l2/gstv4l2src.c: (gst_v4l2src_v4l2fourcc_to_caps),
+       (gst_v4l2_fourcc_from_structure):
+         Add Y41B/Y42B YUV formats (see #125732), fix Y41P (was typo'ed to
+         Y41B somewhere).
+
+2004-04-09  Benjamin Otte  <otte@gnome.org>
+
+       * ext/gnomevfs/gstgnomevfssink.c:
+       (_gst_boolean_allow_overwrite_accumulator),
+       (gst_gnomevfssink_class_init):
+         fix erase signal - if any handler returns false the file will not be
+         overwritten. If no handler is connected, the file will not be
+         overwritten either.
+         renamed signal to "allow-overwrite"
+       * ext/mad/gstid3tag.c: (tag_list_to_id3_tag_foreach):
+         free string when adding it to ID3 failed
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_event):
+         unref event when done
+       * gst/audioconvert/gstaudioconvert.c: (_fixate_caps_to_int):
+         free caps
+       * gst/typefind/gsttypefindfunctions.c:
+       (mpeg_video_stream_type_find):
+         fix invalid read
+
+2004-04-08  David Schleef  <ds@schleef.org>
+
+       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+       (gst_ffmpegcolorspace_register): Change rank to PRIMARY.
+
+2004-04-08  David Schleef  <ds@schleef.org>
+
+       * gst/colorspace/gstcolorspace.c: Don't advertise a conversion
+       we don't support (bug #139532)
+
+2004-04-07  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/mad/gstmad.c: (gst_mad_handle_event),
+       (gst_mad_check_caps_reset), (gst_mad_chain),
+       (gst_mad_change_state):
+          only set explicit caps if they haven't been set before for
+          this stream.  MPEG-audio sample rate/channels aren't allowed
+          to change in-stream.
+          Fixes #139382
+
+2004-04-06  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_base_init),
+       (_gst_boolean_did_something_accumulator),
+       (gst_gnomevfssink_class_init), (gst_gnomevfssink_dispose),
+       (gst_gnomevfssink_init), (gst_gnomevfssink_set_property),
+       (gst_gnomevfssink_get_property), (gst_gnomevfssink_open_file),
+       (gst_gnomevfssink_close_file), (gst_gnomevfssink_chain),
+       (gst_gnomevfssink_change_state):
+         Fix erase signal. Don't erase by default. Remove handoff signal.
+         Remove erase property. Don't segfault. General cleanup.
+
+2004-04-07  Benjamin Otte  <otte@gnome.org>
+
+       * gst-libs/gst/gconf/test-gconf.c: (main):
+         add missing gst_init
+
+2004-04-07  Benjamin Otte  <otte@gnome.org>
+
+       * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_dispose):
+         free the mutexes, too
+
+2004-04-07  Benjamin Otte  <otte@gnome.org>
+
+       * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_dispose):
+         actually free the URI string
+       * ext/mad/gstid3tag.c: (gst_id3_tag_src_event):
+         compute offset correctly when passing discont events
+       * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event):
+         don't leak discont events
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_video_caps):
+         add some missing breaks so caps aren't copied randomly
+       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_get_video_stream):
+         if we realloc memory, we better use it
+
+2004-04-06  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/mad/gstmad.c: (normal_seek):
+         fix GST_FORMAT_TIME usage
+
+2004-04-05  David Schleef  <ds@schleef.org>
+
+       * ext/kio/kiosrc.cpp:  Undefine KDE_DEPRECATED so we can use
+       a deprecated function (hack!)
+
+2004-04-05  Benjamin Otte  <otte@gnome.org>
+
+       * ext/esd/esdmon.c: (gst_esdmon_get):
+         fix nonterminated vararg and memleak
+
+2004-04-05  Benjamin Otte  <otte@gnome.org>
+
+       * ext/ladspa/gstladspa.c: (gst_ladspa_class_init),
+       (gst_ladspa_init), (gst_ladspa_force_src_caps),
+       (gst_ladspa_set_property), (gst_ladspa_get_property),
+       (gst_ladspa_instantiate), (gst_ladspa_activate),
+       (gst_ladspa_deactivate), (gst_ladspa_loop), (gst_ladspa_chain):
+         clean up debugging
+
+2004-04-05  Stefan Kost <kost@imn.htwk-leipzig.de>
+
+       reviewed by Benjamin Otte  <otte@gnome.org>
+
+       * ext/ladspa/gstladspa.c: (gst_ladspa_class_init):
+         check for broken LADSPA parameters (fixes #138635)
+
+2004-04-05  Benjamin Otte  <otte@gnome.org>
+
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_getcaps):
+         advertise buffer-frames correctly on sinkpads
+
+2004-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/mad/gstmad.c: (gst_mad_get_type), (gst_mad_layer_get_type),
+       (gst_mad_mode_get_type), (gst_mad_emphasis_get_type),
+       (gst_mad_get_event_masks), (gst_mad_get_query_types), (index_seek),
+       (normal_seek), (gst_mad_src_event), (gst_mad_handle_event),
+       (gst_mad_check_caps_reset), (gst_mad_chain):
+        add more debugging, only reset caps when we're not in error state
+
+2004-04-05  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/mad/gstmad.c: add debugging category, comment + cleanups
+
+2004-04-05  Julio M. Merino Vidal  <jmmv@menta.net>
+
+       reviewed by Benjamin Otte  <otte@gnome.org>
+
+       * configure.ac:
+         fix == in test(1) operator
+
+2004-04-05  Julio M. Merino Vidal  <jmmv@menta.net>
+
+       reviewed by Benjamin Otte  <otte@gnome.org>
+
+       * configure.ac:
+         fix --export-symblos-regex to a working regex.
+
+2004-04-04  Benjamin Otte  <otte@gnome.org>
+
+       * sys/oss/.cvsignore:
+         add for oss_probe
+
+2004-04-03  Tim-Phillip Müller <t.i.m@zen.co.uk>
+
+       reviewed by Benjamin Otte  <otte@gnome.org>
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event):
+         add missing 'new_media' argument (fixes #138168)
+       * gst/matroska/matroska-demux.c:
+       (gst_matroska_demux_handle_seek_event):
+         add vararg terminator (fixes #138169)
+
+2004-04-02  David Schleef  <ds@schleef.org>
+
+       * ext/gdk_pixbuf/Makefile.am:  Make sure gstgdkanimation.h is
+       disted (bug #138914)
+
+2004-04-01  Benjamin Otte  <otte@gnome.org>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_change_state),
+       (gst_alsa_close_audio):
+         handle case better where a soundcard can't pause
+       * ext/ogg/gstoggdemux.c:
+         don't crash when we get events but don't have pads yet
+
+2004-04-01  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/oss/gstosselement.c: (gst_osselement_probe_caps):
+          throw an error if we couldn't probe any caps.
+
+2004-04-01  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * ext/dvdnav/gst-dvd:
+       Add a really simple sample DVD player
+
+2004-04-01  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * ext/a52dec/gsta52dec.c: (gst_a52dec_get_type), (gst_a52dec_init),
+       (gst_a52dec_push), (gst_a52dec_handle_event),
+       (gst_a52dec_update_streaminfo), (gst_a52dec_loop),
+       (gst_a52dec_change_state):
+       * ext/a52dec/gsta52dec.h:
+         Use a debug category, Output timestamps correctly
+         Emit tag info, Handle events, tell liba52dec about cpu
+         capabilities so it can use MMX etc.
+       * ext/dv/gstdvdec.c: (gst_dvdec_loop), (gst_dvdec_change_state):
+         Fix a crasher accessing invalid memory
+       * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_init),
+       (dvdnavsrc_update_highlight), (dvdnavsrc_loop),
+       (dvdnavsrc_get_event_mask), (dvdnav_handle_navigation_event),
+       (dvdnavsrc_event), (dvdnavsrc_get_formats), (dvdnavsrc_convert),
+       (dvdnavsrc_query):
+         Some support for byte-format seeking.
+         Small fixes for still frames and menu button overlays
+       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_get_type),
+       (gst_mpeg2dec_alloc_buffer):
+         Use a debug category. Adjust the report level of several items to
+         LOG. Call mpeg2_custom_fbuf to mark our buffers as 'custom buffers'
+         so it doesn't lose the GstBuffer pointer
+       * gst/debug/Makefile.am:
+       * gst/debug/gstdebug.c: (plugin_init):
+       * gst/debug/gstnavseek.c: (gst_navseek_get_type),
+       (gst_navseek_base_init), (gst_navseek_class_init),
+       (gst_navseek_init), (gst_navseek_seek),
+       (gst_navseek_handle_src_event), (gst_navseek_set_property),
+       (gst_navseek_get_property), (gst_navseek_chain),
+       (gst_navseek_plugin_init):
+       * gst/debug/gstnavseek.h:
+         Add the navseek debug element for seeking back and forth in a
+         video stream using arrow keys.
+       * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_get_type),
+       (gst_mpeg2subt_base_init), (gst_mpeg2subt_class_init),
+       (gst_mpeg2subt_init), (gst_mpeg2subt_finalize),
+       (gst_mpeg2subt_getcaps_video), (gst_mpeg2subt_link_video),
+       (gst_mpeg2subt_handle_video), (gst_mpeg2subt_src_event),
+       (gst_mpeg2subt_parse_header), (gst_get_nibble),
+       (gst_setup_palette), (gst_get_rle_code), (gst_draw_rle_line),
+       (gst_merge_uv_data), (gst_mpeg2subt_merge_title),
+       (gst_update_still_frame), (gst_mpeg2subt_handle_subtitle),
+       (gst_mpeg2subt_handle_dvd_event), (gst_mpeg2subt_loop):
+       * gst/mpeg2sub/gstmpeg2subt.h:
+         Pretty much a complete rewrite. Now a loopbased element. May still
+         require work to properly synchronise subtitle buffers.
+       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_private),
+       (gst_dvd_demux_send_subbuffer):
+       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_send_subbuffer):
+         Don't attempt to create subbuffers of size 0
+         Reduce a couple of error outputs to warnings.
+       * gst/y4m/gsty4mencode.c: (gst_y4mencode_sinkconnect),
+       (gst_y4mencode_chain):
+       Output the y4m frame header correctly.
+
+2004-04-01  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/adder/gstadder.c: (gst_adder_get_type), (gst_adder_loop):
+          throw errors instead of allowing SIGFPE
+
+2004-04-01  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-libs/gst/gconf/gconf.c: (gst_gconf_get_string),
+       (gst_gconf_render_bin_from_key):
+          leak plugging and style fixing
+
+2004-03-31  David Schleef  <ds@schleef.org>
+
+       * gst/audioscale/gstaudioscale.c: (gst_audioscale_expand_value),
+       (gst_audioscale_getcaps): Fix getcaps to expand and union lists.
+       (bug #138225)
+       * gst/debug/Makefile.am:
+       * gst/debug/breakmydata.c: (gst_break_my_data_plugin_init):
+       * gst/debug/gstdebug.c: (plugin_init):  Merge elements into one
+       plugin.
+       * gst/debug/negotiation.c: (gst_gst_negotiation_get_type),
+       (gst_negotiation_base_init), (gst_negotiation_class_init),
+       (gst_negotiation_init), (gst_negotiation_getcaps),
+       (gst_negotiation_pad_link), (gst_negotiation_chain),
+       (gst_negotiation_set_property), (gst_negotiation_get_property),
+       (gst_negotiation_plugin_init):  New element to talk about random
+       negotiation things happening in a pipeline.
+
+2004-03-31  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/adder/gstadder.c: (gst_adder_get_type), (gst_adder_loop):
+          fix integer addition with help of Stefan Kost
+
+2004-03-31  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * po/nl.po: updated Dutch translation (Elros Cyriatan)
+
+2004-03-30  David Schleef  <ds@schleef.org>
+
+       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_alloc_buffer),
+       (gst_mpeg2dec_negotiate_format):  Handle Y42B-format MPEG
+       video, patch from Matthew.Spencer@eu.sony.com (Matthew Spencer)
+       (bug #137504)
+       * ext/mpeg2dec/gstmpeg2dec.h:
+
+2004-03-30  David Schleef  <ds@schleef.org>
+
+       * ext/gdk_pixbuf/Makefile.am: Remove spurious rules. (bug #136527)
+
+2004-03-30  David Schleef  <ds@schleef.org>
+
+       * tools/gst-launch-ext-m.m:  Applied patch from gnome@flyn.org (W.
+       Michael Petullo) to handle .mov
+
+2004-03-30  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * sys/oss/gstosselement.c: (gst_osselement_probe_caps),
+       (gst_osselement_rate_check_rate):
+         probe caps correctly for sound cards that only support one format
+
+2004-03-30  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/kio/kiosrc.cpp: (process_events):
+         update handling event processing if inside KDE - untested
+
+2004-03-29  David Schleef  <ds@schleef.org>
+
+       * ext/hermes/gsthermescolorspace.c: (plugin_init): decrease rank
+       by 2 to not interfere with other colorspaces.
+       * ext/pango/gsttextoverlay.c: (plugin_init): change rank to NONE
+       * gst/colorspace/gstcolorspace.c: (plugin_init): decrease rank by
+       one to not interfere with ffmpeg_colorspace.
+
+2004-03-29  David Schleef  <ds@schleef.org>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_fixate): Don't fixate fields that
+       aren't in the caps.
+       * gst/sine/gstsinesrc.c: change rate caps to [1,MAX]
+       * gst/videocrop/gstvideocrop.c: (plugin_init): Change rank to NONE.
+
+2004-03-30  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst-libs/gst/riff/riff-media.c:
+         fail on error, don't try to set stuff on NULL caps
+
+2004-03-30  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * configure.ac:
+       * ext/Makefile.am:
+       * ext/kio/Makefile.am:
+       * ext/kio/kioreceiver.cpp:
+       * ext/kio/kioreceiver.h:
+       * ext/kio/kiosrc.cpp:
+       * ext/kio/kiosrc.h:
+         add experimental kiosrc plugin
+       * ext/alsa/gstalsaplugin.c: (plugin_init):
+         initialize debugging category only when we're sure registering the
+         plugins worked.
+
+2004-03-29  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * examples/gstplay/player.c: (main):
+       * gst-libs/gst/play/play.c: (gst_play_class_init),
+       (gst_play_set_location), (gst_play_set_data_src),
+       (gst_play_set_video_sink), (gst_play_set_audio_sink),
+       (gst_play_set_visualization), (gst_play_connect_visualization):
+          check return values of element_set_state and return FALSE where
+          failed
+
+2004-03-29  Benjamin Otte  <otte@gnome.org>
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event):
+         try harder to check if an event is really a discont
+
+2004-03-29  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * po/LINGUAS: adding Azerbaijani (Mətin Əmirov)
+       * po/az.po:
+
+2004-03-28  Benjamin Otte  <otte@gnome.org>
+
+       * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_private):
+       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead),
+       (gst_mpeg_demux_parse_packet), (gst_mpeg_demux_parse_pes):
+         get rid of non-standard "..." ranges in case statements.
+
+2004-03-27  Martin Soto  <martinsoto@users.sourceforge.net>
+
+       * gst/mpegstream/gstmpegdemux.c:
+       * gst/mpegstream/gstmpegdemux.h: Complete overhaul. All DVD
+       specific functionality split to the new dvddemux element.
+       * gst/mpegstream/gstdvddemux.c:
+       * gst/mpegstream/gstdvddemux.h: New demultiplexer for DVD (VOB)
+       streams, derived from mpegdemux.
+       * gst/mpegstream/gstmpegparse.c: Discontinuity handling cleaned
+       up. SCR based timestamp rewriting can be turned off (will probably
+       completely disappear soon).
+       * ext/dvdnav/dvdnavsrc.c: Changes resulting from a few months
+       hacking. General cleanup. All printf statements replaced by
+       debugging messages. Almost complete libdvdnav support.
+       (dvdnavsrc_class_init): Got rid of unnecessary signals (replaced
+       by events. New properties for audio and subpicture languages.
+       (dvdnavsrc_update_highlight): Now uses events.
+       (dvdnavsrc_user_op): Cleaned up.
+       (dvdnavsrc_get): Renamed to dvdnavsrc_loop (element is now loop
+       based). Lots of cleanup, and propper support for most libdvdnav
+       events.
+       (dvdnavsrc_make_dvd_event): New function.
+       (dvdnavsrc_make_dvd_nav_packet_event): New function.
+       (dvdnavsrc_make_clut_change_event): New function.
+
+2004-03-26  Benjamin Otte  <otte@gnome.org>
+
+       * gst/typefind/gsttypefindfunctions.c: (theora_type_find):
+         fix bug where typefinding would claim it's theora whenever less then
+         7 bytes of data were available
+
+2004-03-25  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/law/alaw-decode.c: (alawdec_getcaps), (alawdec_link),
+       (gst_alawdec_base_init), (gst_alawdec_class_init),
+       (gst_alawdec_init), (gst_alawdec_chain):
+       * gst/law/alaw-encode.c: (alawenc_getcaps), (alawenc_link),
+       (gst_alawenc_base_init), (gst_alawenc_class_init),
+       (gst_alawenc_init), (gst_alawenc_chain):
+       * gst/law/mulaw-decode.c: (mulawdec_getcaps), (mulawdec_link),
+       (gst_mulawdec_base_init), (gst_mulawdec_class_init),
+       (gst_mulawdec_init), (gst_mulawdec_chain):
+       * gst/law/mulaw-encode.c: (mulawenc_getcaps), (mulawenc_link),
+       (gst_mulawenc_base_init), (gst_mulawenc_class_init),
+       (gst_mulawenc_init), (gst_mulawenc_chain):
+         Fix capsnego in all four, remove the unused property functions and
+         simplify the chain functions slightly. I guess we could use macros
+         or something similar for those, since the code is so similar, but
+         I'm currently too lazy...
+
+2004-03-24  David Schleef  <ds@schleef.org>
+
+       * sys/oss/gstosselement.c: (gst_osselement_sync_parms),
+       (gst_osselement_close_audio), (gst_osselement_probe_caps),
+       (gst_osselement_get_format_structure),
+       (gst_osselement_rate_probe_check), (gst_osselement_rate_add_range),
+       (gst_osselement_rate_check_rate), (gst_osselement_rate_add_rate),
+       (gst_osselement_rate_int_compare): Add code to handle rate probing
+       (bug #120883)
+       * sys/oss/gstosselement.h: same
+       * sys/oss/gstosssink.c: (gst_osssink_init), (gst_osssink_getcaps):
+       Use rate probing provided by osselement.
+       * sys/oss/gstosssrc.c: (gst_osssrc_init), (gst_osssrc_getcaps): same
+
+2004-03-24  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/xvid/gstxvidenc.c: (gst_xvidenc_set_property),
+       (gst_xvidenc_get_property):
+         ulong/int mess-up.
+
+2004-03-24  David Schleef  <ds@schleef.org>
+
+       * ext/speex/gstspeexdec.c: (gst_speexdec_base_init),
+       (gst_speexdec_init):
+       * ext/speex/gstspeexenc.c: (gst_speexenc_base_init),
+       (gst_speexenc_init):  Create the pad template correctly (from
+       the static pad template, not a NULL pointer.)
+
+2004-03-25  Benjamin Otte  <otte@gnome.org>
+
+       * gst/debug/Makefile.am:
+       * gst/debug/breakmydata.c:
+         add element that quasi-randomly changes bytes in the stream.
+         Intended use is robustness checking of demuxers and decoders in
+         media tests.
+
+2004-03-24  Benjamin Otte  <otte@gnome.org>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_open_audio),
+       (gst_alsa_probe_hw_params):
+       * ext/alsa/gstalsa.h:
+         debugging output fixes
+
+2004-03-24  Benjamin Otte  <otte@gnome.org>
+
+       * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_set_property):
+         don't g_return_if_fail if element is PLAYING, fail silently as every
+         other element.
+       * gst/effectv/gstquark.c: (gst_quarktv_chain):
+         only fix needed for cast lvalue issues in gst-plugins
+       * gst/volenv/gstvolenv.c: (gst_volenv_init):
+         add proxy_getcaps
+
+2004-03-24  Benjamin Otte  <otte@gnome.org>
+
+       * gst/level/gstlevel.c: (gst_level_init):
+         add proxying getcaps function, so level doesn't advertise impossible
+         caps
+
+2004-03-24  David Schleef  <ds@schleef.org>
+
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_handle_sink_event),
+       (gst_qtdemux_loop_header), (qtdemux_parse_moov), (qtdemux_parse),
+       (qtdemux_node_dump_foreach), (qtdemux_dump_mvhd),
+       (qtdemux_dump_tkhd), (qtdemux_dump_elst), (qtdemux_dump_mdhd),
+       (qtdemux_dump_hdlr), (qtdemux_dump_vmhd), (qtdemux_dump_dref),
+       (qtdemux_dump_stsd), (qtdemux_dump_stts), (qtdemux_dump_stss),
+       (qtdemux_dump_stsc), (qtdemux_dump_stsz), (qtdemux_dump_stco),
+       (qtdemux_dump_co64), (qtdemux_dump_dcom), (qtdemux_dump_cmvd),
+       (qtdemux_parse_tree), (qtdemux_parse_trak):  Fix debugging
+       messages.  Divide the chunk size by the compression ratio
+       (needed for MACE audio)
+
+2004-03-23  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
+         Fix buffer overflow read error.
+
+2004-03-23  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsa.h:
+         Remove unused entry.
+       * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
+         Add cinepak.
+       * gst/videodrop/gstvideodrop.c: (gst_videodrop_getcaps),
+       (gst_videodrop_link), (gst_videodrop_chain):
+         Fix, sort of. Was horribly broken with new capsnego. Bah...
+
+2004-03-23  Jeremy Simon  <jesimon@libertysurf.fr>
+
+       * gst/typefind/gsttypefindfunctions.c: (ape_type_find),
+       (plugin_init):
+       Add a monkeysaudio typefind function
+
+2004-03-23  Johan Dahlin  <johan@gnome.org>
+
+       * gst-libs/gst/play/play.c (gst_play_audio_fixate)
+       (gst_play_video_fixate): Check so the structure has the field
+       before trying to fixate them, this makes it possible to have
+       fakesinks for video and audio output without printing errors on
+       the output console.
+
+2004-03-22  David Schleef  <ds@schleef.org>
+
+       * sys/oss/Makefile.am:
+       * sys/oss/oss_probe.c: (main), (probe_check), (add_range),
+       (check_rate), (add_rate):  Rate probing test app.
+
+2004-03-21  Benjamin Otte  <otte@gnome.org>
+
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link),
+       (_fixate_caps_to_int), (gst_audio_convert_fixate):
+         add a fixation function that pretty much does the right thing (fixes
+         #137556)
+
+2004-03-20  David I. Lehn  <dlehn@users.sourceforge.net>
+
+       * configure.ac: GST_PACKAGE default: s/GStreamer/GStreamer Plugins/
+
+2004-03-20  Tim-Phillip Müller <t.i.m@zen.co.uk>
+
+       reviewed by: Benjamin Otte  <otte@gnome.org>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
+         terminate gst_event_new_discontinuous correctly (fixes parts of
+         #137711)
+
+2004-03-19  David Schleef  <ds@schleef.org>
+
+       * gst-libs/gst/Makefile.am:  Enable xoverlay unconditionally,
+       since it doesn't depend on X, and it's part of our ABI.
+
+2004-03-19  Iain <iain@prettypeople.org>
+
+       * gst/interleave/deinterleave.c (deinterleave_sink_link): Use the
+       is_int in the structure, not the local variable.
+
+2004-03-19  David Schleef  <ds@schleef.org>
+
+       * ext/librfb/gstrfbsrc.c: (gst_rfbsrc_change_state),
+       (gst_rfbsrc_init), (gst_rfbsrc_getcaps), (gst_rfbsrc_fixate),
+       (gst_rfbsrc_link), (gst_rfbsrc_paint_rect), (gst_rfbsrc_get):
+       Improvements in caps negotiation.
+
+2004-03-18  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * po/LINGUAS:
+       * po/af.po:
+          adding Afrikaans (Petri Jooste)
+
+2004-03-18  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+       (gst_ffmpegcolorspace_chain):
+        throw error instead of g_critical (#137588)
+
+2004-03-18  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * Makefile.am:
+       * configure.ac:
+          dist common and m4 correctly
+       * po/sv.po:
+
+2004-03-17  David Schleef  <ds@schleef.org>
+
+       * pkgconfig/gstreamer-media-info.pc.in:  Add Version.
+       (bug #137348)
+
+2004-03-17  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * po/LINGUAS:
+       * po/sv.po:
+          adding Swedish translation (Christian Rose)
+
+2004-03-17  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * Makefile.am: use release.mak
+
+2004-03-16  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * common/ChangeLog:
+       * common/gst-autogen.sh:
+          add some explanation about the version detection
+       * configure.ac:
+          fix X check
+
+2004-03-16  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac: bump nano to 1
+
+=== release 0.8.0 ===
+
+2004-03-16  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac: release 0.8.0, "Pharmaceutical Itch"
+
+2004-03-16  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+          update libtool version
+       * gst-libs/gst/media-info/Makefile.am:
+          actually use libtool version
+
+2004-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac: fix speex detection to work with 1.0 but not 1.1
+
+2004-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+       * gst-plugins.spec.in:
+       * pkgconfig/Makefile.am:
+       * pkgconfig/gstreamer-gconf-uninstalled.pc.in:
+       * pkgconfig/gstreamer-interfaces-uninstalled.pc.in:
+       * pkgconfig/gstreamer-libs-uninstalled.pc.in:
+       * pkgconfig/gstreamer-libs.pc.in:
+       * pkgconfig/gstreamer-media-info-uninstalled.pc.in:
+       * pkgconfig/gstreamer-play-uninstalled.pc.in:
+       * pkgconfig/gstreamer-plugins-uninstalled.pc.in:
+       * pkgconfig/gstreamer-plugins.pc.in:
+          remove @VERSION@ from some of the pc files since core and plugins
+          are decoupled.
+          created gstreamer-plugins.pc as it's a better name, but keeping
+          -libs around for now to get fixes upstream done first.
+
+2004-03-15  Julien MOUTTE <julien@moutte.net>
+
+       * gst-libs/gst/play/play.c: (gst_play_get_framerate),
+       (gst_play_get_sink_element): First draft of gst_play_get_framerate.
+       * gst-libs/gst/play/play.h:
+
+2004-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * *.c, *.cc: don't mix tabs and spaces
+
+2004-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-libs/gst/play/play.c: (gst_play_pipeline_setup):
+          use the new ffmpegcolorspace
+       * gst-plugins.spec.in:
+          package new colorspace and media-info
+       * configure.ac:
+       * pkgconfig/Makefile.am:
+          fix some more disting issues
+       * pkgconfig/gstreamer-media-info-uninstalled.pc.in:
+       * pkgconfig/gstreamer-media-info.pc.in:
+          generate media-info pc files
+
+2004-03-15  Johan Dahlin  <johan@gnome.org>
+
+       * *.h: Revert indenting
+
+2004-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+          adding ffmpegcolorspace element
+       * gst/ffmpegcolorspace/Makefile.am:
+       * gst/ffmpegcolorspace/avcodec.h:
+       * gst/ffmpegcolorspace/common.h:
+       * gst/ffmpegcolorspace/dsputil.c: (dsputil_static_init):
+       * gst/ffmpegcolorspace/dsputil.h:
+       * gst/ffmpegcolorspace/gstffmpeg.c: (plugin_init):
+       * gst/ffmpegcolorspace/gstffmpegcodecmap.c:
+       (gst_ffmpeg_pixfmt_to_caps), (gst_ffmpeg_pix_fmt_to_caps),
+       (gst_ffmpeg_caps_to_pix_fmt):
+       * gst/ffmpegcolorspace/gstffmpegcodecmap.h:
+       * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+       (gst_ffmpegcolorspace_caps_remove_format_info),
+       (gst_ffmpegcolorspace_getcaps), (gst_ffmpegcolorspace_pad_link),
+       (gst_ffmpegcolorspace_get_type), (gst_ffmpegcolorspace_base_init),
+       (gst_ffmpegcolorspace_class_init), (gst_ffmpegcolorspace_init),
+       (gst_ffmpegcolorspace_chain), (gst_ffmpegcolorspace_change_state),
+       (gst_ffmpegcolorspace_set_property),
+       (gst_ffmpegcolorspace_get_property),
+       (gst_ffmpegcolorspace_register):
+       * gst/ffmpegcolorspace/imgconvert.c:
+       (avcodec_get_chroma_sub_sample), (avcodec_get_pix_fmt_name),
+       (avcodec_get_pix_fmt), (avpicture_fill), (avpicture_layout),
+       (avpicture_get_size), (avcodec_get_pix_fmt_loss),
+       (avg_bits_per_pixel), (avcodec_find_best_pix_fmt1),
+       (avcodec_find_best_pix_fmt), (img_copy_plane), (img_copy),
+       (yuv422_to_yuv420p), (yuv422_to_yuv422p), (yuv422p_to_yuv422),
+       (C_JPEG_TO_CCIR), (img_convert_init), (img_apply_table),
+       (shrink41), (shrink21), (shrink12), (shrink22), (shrink44),
+       (grow21_line), (grow41_line), (grow21), (grow22), (grow41),
+       (grow44), (conv411), (gif_clut_index), (build_rgb_palette),
+       (bitcopy_n), (mono_to_gray), (monowhite_to_gray),
+       (monoblack_to_gray), (gray_to_mono), (gray_to_monowhite),
+       (gray_to_monoblack), (avpicture_alloc), (avpicture_free),
+       (is_yuv_planar), (img_convert), (get_alpha_info_pal8),
+       (img_get_alpha_info), (deinterlace_line),
+       (deinterlace_line_inplace), (deinterlace_bottom_field),
+       (deinterlace_bottom_field_inplace), (avpicture_deinterlace):
+       * gst/ffmpegcolorspace/imgconvert_template.h:
+       * gst/ffmpegcolorspace/mem.c: (av_malloc), (av_realloc), (av_free):
+       * gst/ffmpegcolorspace/mmx.h:
+       * gst/ffmpegcolorspace/utils.c: (avcodec_init):
+          adding ffmpegcolorspace element supplied by Ronald after cleaning
+          up and pulling in the right bits of upstream source.
+          I'm sure a better C/compiler wizard could do some cleaning up (for
+          example use GLIB's malloc stuff), but as a first pass this
+          works very well
+
+2004-03-15  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/alsa/gstalsa.h:
+         I assume Ronald forgot to commit the change to have cardname
+          as a struct member.  Expect some public spanking at the next
+          opportunity.
+
+2004-03-15  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_get_property),
+       (gst_alsa_open_audio), (gst_alsa_close_audio):
+       * ext/alsa/gstalsa.c:
+         Don't open the device if we're a mixer (= padless).
+       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_class_init),
+       (gst_alsa_mixer_init), (gst_alsa_mixer_open),
+       (gst_alsa_mixer_close), (gst_alsa_mixer_change_state):
+         Open mixer during state change rather than during object
+         initialization. Also, get a device name. Currently in a somewhat
+         hackish fashion, but I didn't really find something better.
+
+2004-03-14  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * *.c, *.h: run gst-indent
+
+2004-03-14  Benjamin Otte  <otte@gnome.org>
+
+       * gst/modplug/gstmodplug.cc:
+       * gst/modplug/gstmodplug.h:
+         set correct timestamps on outgoing buffers
+
+2004-03-14  Benjamin Otte  <otte@gnome.org>
+
+       * gst/modplug/gstmodplug.cc:
+         handle events - don't do crap when a discont arrives that's not
+         necessary
+         This allows correct loading and playback of mods in Rhythmbox
+
+2004-03-14  Benjamin Otte  <otte@gnome.org>
+
+       * configure.ac:
+       * gst-libs/gst/gconf/Makefile.am:
+       * pkgconfig/Makefile.am:
+         move gstreamer-gconf pkgconfig files to pkgconfig/ dir. Make sure
+         they get rebuilt properly
+       * configure.ac:
+         when checking for vorbis, try pkgconfig first.
+       * gst/modplug/gstmodplug.cc:
+         add fixate function
+
+2004-03-14  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/qtdemux/qtdemux.c: (qtdemux_parse_trak):
+         Fix for obvious mistake, where we first shift the offset and then
+         read a samplesize element assuming the old offset. Note that this
+         part still has something weird, i.e. my movies containing those
+         don't actually play well, but at least there's something that looks
+         like sound now.
+
+2004-03-14  Jan Schmidt  <thaytan@mad.scientist.com>
+       * gst/typefind/gsttypefindfunctions.c: (speex_type_find),
+       (plugin_init):
+       Add a typefind function for speex format
+
+2004-03-13  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_video_caps),
+       (gst_asf_demux_setup_pad):
+         Use 25fps as our "fake" fps value (marked for fixage in 0.9.x)
+         instead of 0. Reason is simple: some elements have a fps range
+         of 1-max instead of 0-max. So now ASF video actually works.
+
+2004-03-13  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * po/LINGUAS:
+       * po/sr.po:
+         adding serbian as a language
+
+2004-03-13  Benjamin Otte  <otte@gnome.org>
+
+       * gst/sine/gstsinesrc.c: (gst_sinesrc_get):
+         return taglist correctly from _get function, don't gst_pad_push it.
+         (fixes #137042)
+
+2004-03-13  Jan Schmidt  <thaytan@mad.scientist.com>
+       * ext/alsa/gstalsa.c: (gst_alsa_class_probe_devices):
+
+2004-03-13  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_free_list):
+       * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_class_init),
+       (gst_alsa_mixer_track_new):
+       * ext/alsa/gstalsamixertrack.h:
+         Fix ancient leftovers... MixerTrack is a GObject.
+
+2004-03-13  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_class_probe_devices):
+       * sys/oss/gstosselement.c: (gst_osselement_class_probe_devices):
+         Don't block during probing...
+
+2004-03-12  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_get_type), (gst_alsa_class_init),
+       (gst_alsa_get_property), (gst_alsa_probe_get_properties),
+       (gst_alsa_class_probe_devices), (gst_alsa_class_list_devices),
+       (gst_alsa_probe_probe_property), (gst_alsa_probe_needs_probe),
+       (gst_alsa_probe_get_values), (gst_alsa_probe_interface_init),
+       (gst_alsa_open_audio), (gst_alsa_close_audio):
+       * ext/alsa/gstalsa.h:
+         Add propertyprobe interface implementation, add some device-name
+         property, all this so that it looks good in gnome-volume-control.
+
+2004-03-12  David Schleef  <ds@schleef.org>
+
+       * configure.ac: the Hermes library controls hermescolorspace, not
+       colorspace.
+       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_base_init),
+       (gst_mpeg2dec_init): minor pet peeve: disable code with #ifdef,
+       not /* */
+       * ext/sdl/sdlvideosink.c: Change XID to unsigned long.
+       * ext/sdl/sdlvideosink.h: ditto.
+       * gst/colorspace/gstcolorspace.c: Fix old comments about Hermes
+
+2004-03-12  Benjamin Otte  <otte@gnome.org>
+
+       * gst-libs/gst/xoverlay/xoverlay.c: (gst_x_overlay_set_xwindow_id),
+       (gst_x_overlay_got_xwindow_id):
+       * gst-libs/gst/xoverlay/xoverlay.h:
+         replace XID with unsigned long to get rid of the xlibs dependency in
+         XOverlay (fixes #137004)
+
+2004-03-13  Jan Schmidt  <thaytan@mad.scientist.com>
+       * gst/effectv/gstaging.c: (gst_agingtv_base_init),
+       (gst_agingtv_setup):
+       * gst/effectv/gstdice.c: (gst_dicetv_get_type),
+       (gst_dicetv_base_init), (gst_dicetv_class_init),
+       (gst_dicetv_setup), (gst_dicetv_init), (gst_dicetv_draw):
+       * gst/effectv/gstedge.c: (gst_edgetv_get_type),
+       (gst_edgetv_base_init), (gst_edgetv_class_init), (gst_edgetv_init),
+       (gst_edgetv_setup), (gst_edgetv_rgb32):
+       * gst/effectv/gsteffectv.c:
+       * gst/effectv/gstquark.c: (gst_quarktv_link), (gst_quarktv_init),
+       (gst_quarktv_set_property):
+       * gst/effectv/gstrev.c: (gst_revtv_get_type),
+       (gst_revtv_base_init), (gst_revtv_class_init), (gst_revtv_init),
+       (gst_revtv_setup), (gst_revtv_rgb32):
+       * gst/effectv/gstshagadelic.c: (gst_shagadelictv_get_type),
+       (gst_shagadelictv_base_init), (gst_shagadelictv_class_init),
+       (gst_shagadelictv_init), (gst_shagadelictv_setup),
+       (gst_shagadelictv_rgb32):
+       * gst/effectv/gstvertigo.c: (gst_vertigotv_get_type),
+       (gst_vertigotv_base_init), (gst_vertigotv_class_init),
+       (gst_vertigotv_setup), (gst_vertigotv_init), (gst_vertigotv_rgb32):
+       * gst/effectv/gstwarp.c:
+       Port everything that can be ported to videofilter and fix up the caps.
+       Can someone with a big-endian machine please check these?
+
+2004-03-10  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/oss/gstosssink.c: (gst_osssink_init), (gst_osssink_get_time),
+       (gst_osssink_chain), (gst_osssink_change_state):
+         Latest fixes for A/V sync, audio playback and such. This is about
+         all... MPEG playback issues are mostly related to the async build-
+         up of MPEG files, I cannot fix that. Use basicgthread to solve it.
+
+2004-03-10  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       patch from: Stephane Loeuillet
+
+       * configure.ac:
+         use pkg-config for some libraries, falling back to the old .m4 way
+          (fixes #131270)
+       * m4/libdv.m4:
+          removed
+
+2004-03-10  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+       * tools/Makefile.am:
+       * tools/Makefile.in:
+       * tools/gst-launch-ext-m.m:
+       * tools/gst-launch-ext.1.in:
+       * tools/gst-visualise-m.m:
+       * tools/gst-visualise.1:
+       * tools/gst-visualise.1.in:
+          reorganizing generation of script tools
+
+2004-03-10  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/divx/gstdivxdec.c:
+         Downgrade priority. We prefer ffdec_mpeg4.
+       * ext/faad/gstfaad.c: (gst_faad_srcgetcaps), (gst_faad_srcconnect),
+       (gst_faad_chain), (gst_faad_change_state):
+         Fix capsnego. Doesn't work for some sounds because we don't have
+         a 5:1 to stereo element.
+       * ext/xvid/gstxvid.c: (plugin_init):
+         Add priority.
+       * sys/oss/gstosssink.c: (gst_osssink_init), (gst_osssink_chain),
+       (gst_osssink_change_state):
+         Add discont handling.
+
+2004-03-09  Colin Walters  <walters@verbum.org>
+
+       * gst/audioconvert/gstaudioconvert.c: Fix typo in width 8
+       conversion.
+
+2004-03-09  Benjamin Otte  <otte@gnome.org>
+
+       * gst-libs/gst/mixer/mixer.c: (gst_mixer_class_init):
+         the signals take 2 arguments
+
+2004-03-09  David Schleef  <ds@schleef.org>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_request_new_pad),
+       (gst_alsa_fixate): Add fixate function.  (bug #136686)
+       * ext/alsa/gstalsa.h:
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_init):
+
+2004-03-09  Benjamin Otte  <otte@gnome.org>
+
+       * ext/mikmod/gstmikmod.c: (gst_mikmod_init), (gst_mikmod_loop),
+       (gst_mikmod_change_state):
+       * ext/mikmod/gstmikmod.h:
+         make mikmod's loop function not loop infinitely and call
+         gst_element_yield anymore
+       * gst/modplug/gstmodplug.cc:
+         fix pad negotiation (fixes #136590)
+
+2004-03-09  David Schleef  <ds@schleef.org>
+
+       * ext/lcs/Makefile.am:  Fix so that the lcs colorspace plugin
+       doesn't conflict with the internal colorspace plugin.
+       * gst-libs/gst/audio/make_filter:  Use `` instead of $() to
+       satisfy the crappy-ass shell shipped by a certain vendor.
+       * gst/videofilter/make_filter: same (bug #135299)
+
+2004-03-09  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac: bump nano to 1
+
+=== release 0.7.6 ===
+
+2004-03-09  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.in: releasing 0.7.6, "There"
+
+2004-03-09  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * pkgconfig/gstreamer-play-uninstalled.pc.in:
+       * pkgconfig/gstreamer-play.pc.in:
+          synchronize the two
+
+2004-03-09  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_base_init),
+       (cdparanoia_open), (cdparanoia_event):
+         fix/add error handling
+       * po/POTFILES.in:
+         add cdparanoia source
+       * tools/Makefile.am:
+         make scripts executable
+
+2004-03-09  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+       * ext/vorbis/Makefile.am:
+       * sys/Makefile.am:
+         remove id3types, vorbisfile and xvideosink from the build (#133783)
+
+2004-03-08  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_info):
+         Fix metadata read crash (#136537).
+
+2004-03-08  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-libs/gst/media-info/media-info-priv.c: (gmi_set_mime):
+       * gst-libs/gst/media-info/media-info.c: (gst_media_info_read):
+          adding mime types, fixing the one-stop function
+
+2004-03-08  Christian Schaller <Uraeus@gnome.org>
+
+       * ext/nas/nassink.c and /ext/nas/nassink.h:
+       More NAS love from Arwed von Merkatz
+       So lets all sing 'Can you feel the NAS tonight'
+
+2004-03-08  Christian Schaller <Uraeus@gnome.org>
+
+       * tools/gst-launch-ext.in:
+       Replace vorbisfile with oggdemux/vorbisdec/audioconvert
+
+2004-03-08  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_base_init),
+       (gst_mpeg2dec_init):
+        remove the user_data pad for now, because it is being used in
+        fixating causing MPEG playback to fixate on 1000 Hz for playback.
+        If someone knows how to fix this properly, please do.
+
+2004-03-08  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/oss/gstosssink.c: (gst_osssink_get_delay),
+       (gst_osssink_get_time):
+        add a warning, IMO this won't get triggered anymore, remove later
+
+2004-03-07  David Schleef  <ds@schleef.org>
+
+       * gst/qtdemux/qtdemux.c: (qtdemux_video_caps):  Added Cinepak
+       format (bug #136470)
+
+2004-03-07  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-libs/Makefile.am:
+       * gst-libs/gst/media-info/Makefile.am:
+       * gst-libs/gst/media-info/media-info-priv.c: (found_tag_callback),
+       (error_callback), (gst_media_info_error_create),
+       (gst_media_info_error_element), (gmip_init), (gmip_reset),
+       (gmi_clear_decoder), (gmip_find_type_pre), (gmip_find_type):
+       * gst-libs/gst/media-info/media-info-priv.h:
+       * gst-libs/gst/media-info/media-info-test.c: (main):
+       * gst-libs/gst/media-info/media-info.c: (gst_media_info_init),
+       (gst_media_info_class_init), (gst_media_info_instance_init),
+       (gst_media_info_set_source), (gst_media_info_read_with_idler),
+       (gst_media_info_read_idler), (gst_media_info_read):
+       * gst-libs/gst/media-info/media-info.h:
+       fixed, should work now
+
+2004-03-07  Christian Schaller <Uraeus@gnome.org>
+
+       * ext/nas/nassink.c:
+       A bunch of NAS fixes from Arwed von Merkatz
+
+2004-03-06  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_add_stream),
+       (qtdemux_parse_trak):
+         Fix crash (j might be greater than n_samples, in which case we're
+         writing outside the allocated space for the array) and memleak.
+
+2004-03-06  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/oss/gstosssink.c: (gst_osssink_chain):
+         And another caller that couldn't handle delay < 0 (unsigned
+         integer overflow). Video now continues playing on an audio
+         buffer underrun, and the clock continues working. Audio still
+         stalls.
+
+2004-03-06  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/oss/gstosssink.c: (gst_osssink_get_delay),
+       (gst_osssink_get_time):
+         get_delay() may return values lower than 0. In those cases, we
+         should not actually cast to *unsigned* int64, that will break
+         stuff horribly. In my case, it screwed up A/V sync in movies
+         in totem rather badly.
+
+2004-03-06  Christophe Fergeau  <teuf@gnome.org>
+
+       * ext/faac/gstfaac.c: (gst_faac_chain):
+       * ext/flac/gstflactag.c: (gst_flac_tag_chain):
+       * ext/libpng/gstpngenc.c: (user_write_data):
+       * ext/mikmod/gstmikmod.c: (gst_mikmod_loop):
+       * gst/ac3parse/gstac3parse.c: (gst_ac3parse_chain):
+       * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_chain_subtitle):
+       * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_add_slice):
+       Fix several misuse of gst_buffer_merge (it doesn't take ownership
+       of any buffer), should fix some leaks. I hope I didn't unref buffers
+       that shouldn't be...
+
+2004-03-06  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-libs/gst/media-info/media-info-priv.c: (have_type_callback),
+       (deep_notify_callback), (tag_flag_score), (found_tag_callback),
+       (error_callback), (gmi_reset), (gmi_seek_to_track),
+       (gmi_get_decoder), (gmi_set_mime), (gmip_find_type_pre),
+       (gmip_find_type_post), (gmip_find_stream_post),
+       (gmip_find_track_streaminfo_post):
+       * gst-libs/gst/media-info/media-info-priv.h:
+       * gst-libs/gst/media-info/media-info-test.c: (print_tag),
+       (info_print), (main):
+       * gst-libs/gst/media-info/media-info.c:
+       (gst_media_info_error_create), (gst_media_info_error_element),
+       (gst_media_info_instance_init), (gst_media_info_get_property),
+       (gst_media_info_new), (gst_media_info_set_source),
+       (gst_media_info_read_idler), (gst_media_info_read):
+       * gst-libs/gst/media-info/media-info.h:
+          first pass at making this work again.  This seems to work on
+          tagged ogg/vorbis and mp3 files.
+
+2004-03-06  Benjamin Otte  <otte@gnome.org>
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
+         fix huge leak: gst_buffer_merge doesn't unref the first argument
+         itself.
+
+2004-03-06  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/mad/gstmad.c: (gst_mad_class_init), (gst_mad_update_info):
+          report layer/mode/emphasis
+
+2004-03-06  Christophe Fergeau  <teuf@gnome.org>
+
+       * ext/mad/gstmad.c: (gst_mad_chain): fixed caps leak
+
+2004-03-06  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_new):
+          signal serial
+
+2004-03-06  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/vorbis/vorbis.c: (plugin_init):
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_get_formats),
+       (gst_vorbis_dec_init), (vorbis_dec_event):
+        add debug category
+        make vorbisdec handle _BYTE and _TIME queries
+
+2004-03-06  Christophe Fergeau  <teuf@gnome.org>
+
+       * ext/mad/gstmad.c: (gst_mad_chain): send the average bitrate read
+         from the xing header
+
+2004-03-06  Benjamin Otte  <otte@gnome.org>
+
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_getcaps),
+       (gst_audio_convert_link), (gst_audio_convert_change_state),
+       (gst_audio_convert_buffer_from_default_format):
+         do conversions from/to float correctly, fix some caps nego errors,
+         export correct supported caps in template and getcaps, use correct
+         caps in try_set_caps functions
+
+2004-03-06  Christophe Fergeau  <teuf@gnome.org>
+
+       For some reason, I only committed a ChangeLog entry yesterday and
+       not the corresponding code...
+       * ext/mad/gstmad.c: Fix detection of Xing headers
+       * gst/tags/gstid3tag.c: Changes to support TLEN tags
+
+2004-03-06  Benjamin Otte  <otte@gnome.org>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_get_pad_by_pad),
+       (gst_ogg_demux_src_query):
+         make sure to handle the case where there's no current chain
+         gracefully.
+
+2004-03-05  David Schleef  <ds@schleef.org>
+
+       * ext/aalib/gstaasink.c: (gst_aasink_fixate), (gst_aasink_init):
+       Add fixate function. (bug #131128)
+       * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_init),
+       (gst_sdlvideosink_fixate):  Add fixate function.
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
+       Fix attempt to print a non-pointer using GST_PTR_FORMAT.
+       * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt):
+       Fix missing break that was causing ulaw to be interpreted as
+       raw int.
+
+2004-03-05  David Schleef  <ds@schleef.org>
+
+       * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_add_slice):
+       Fix code that ignores return value of gst_buffer_merge().
+       (bug #114560)
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_descramble_segment):
+       * gst/mpegstream/gstrfc2250enc.c: (gst_rfc2250_enc_add_slice): same
+       * testsuite/gst-lint:  Check for above.
+
+2004-03-05  David Schleef  <ds@schleef.org>
+
+       * gst/udp/gstudpsrc.c: (gst_udpsrc_get):  Check for unfixed
+       caps and throw an element error.  (bug #136334)
+
+2004-03-05  David Schleef  <ds@schleef.org>
+
+       * ext/faad/gstfaad.c: (gst_faad_init), (gst_faad_srcgetcaps),
+       (gst_faad_chain): Fix negotiation.
+       * ext/librfb/gstrfbsrc.c: (gst_rfbsrc_handle_src_event): Add
+       key and button events.
+       * gst-libs/gst/floatcast/floatcast.h: Fix a minor bug in this
+       dung heap of code.
+       * gst-libs/gst/gconf/gstreamer-gconf-uninstalled.pc.in: gstgconf
+       depends on gconf
+       * gst-libs/gst/gconf/gstreamer-gconf.pc.in: same
+       * gst-libs/gst/play/play.c: (gst_play_pipeline_setup),
+       (gst_play_video_fixate), (gst_play_audio_fixate): Add a fixate
+       function to encourage better negotiation, particularly between
+       audioconvert and osssink.
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_chain):
+       * gst/qtdemux/qtdemux.c: (qtdemux_parse_trak):  Make some debugging
+       more important.
+       * gst/typefind/gsttypefindfunctions.c:  Fix mistake in flash
+       typefinding.
+       * gst/vbidec/vbiscreen.c:  Add glib header
+       * pkgconfig/gstreamer-play.pc.in:  Depends on gst-interfaces.
+
+2004-03-06  Christophe Fergeau  <teuf@users.sourceforge.net>
+
+       * ext/mad/gstmad.c: Fix detection of Xing headers
+       * gst/tags/gstid3tag.c: Changes to support TLEN tags
+
+2004-03-06  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt),
+       (gst_wavparse_pad_convert), (gst_wavparse_pad_query):
+          debug updates
+
+2004-03-06  Christophe Fergeau  <teuf@gnome.org>
+
+       * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
+       * ext/mad/gstmad.c: (gst_mad_init), (is_xhead),
+       (mpg123_parse_xing_header), (gst_mad_chain): parse Xing header in vbr
+       files, and report the parsed length as a GST_TAG_DURATION tag.
+       * gst/tags/gstid3tag.c: support TLEN (duration) tag
+
+2004-03-05  Benjamin Otte  <otte@gnome.org>
+
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_channels):
+         convert channels correctly. convert correctly to unsigned.
+
+2004-03-05  Julien MOUTTE <julien@moutte.net>
+
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_change_state): Check if
+       we have a window before clearing it.
+
+2004-03-05  Julien MOUTTE <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_change_state): Check if we
+       have a window before clearing it.
+
+2004-03-05  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gconf/gstreamer.schemas.in:
+       * gst-libs/gst/gconf/Makefile.am:
+          version installation path the same way as for 0.6
+       * pkgconfig/gstreamer-interfaces-uninstalled.pc.in:
+       * pkgconfig/gstreamer-libs-uninstalled.pc.in:
+       * pkgconfig/gstreamer-play-uninstalled.pc.in:
+          remove comment that was fixed
+
+2004-03-05  David Schleef  <ds@schleef.org>
+
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_get_src_formats),
+       (gst_qtdemux_src_convert), (gst_qtdemux_get_src_query_types),
+       (gst_qtdemux_get_event_mask), (gst_qtdemux_handle_src_query),
+       (gst_qtdemux_handle_src_event), (gst_qtdemux_add_stream):
+       Add prototype code for handling seeking and querying.
+
+2004-03-04  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * examples/gstplay/player.c: (main):
+         Initialize variables to NULL. Prevents a segfault because the
+         (uninitialized) variable is not NULL, resulting in a crash on
+         trying to reach error->message.
+
+2004-03-05  Benjamin Otte  <otte@gnome.org>
+
+       * gst/audioconvert/gstaudioconvert.c:
+       (gst_audio_convert_buffer_to_default_format):
+       make float=>int conversion work correctly even in cornercases.
+
+2004-03-04  David I. Lehn  <dlehn@users.sourceforge.net>
+
+       * debian/README.Debian:
+       * debian/build-deps:
+       * debian/changelog:
+       * debian/control:
+       * debian/control.in:
+       * debian/copyright:
+       * debian/gstreamer-a52dec.files:
+       * debian/gstreamer-aa.files:
+       * debian/gstreamer-alsa.files:
+       * debian/gstreamer-alsa.manpages:
+       * debian/gstreamer-arts.files:
+       * debian/gstreamer-artsd.files:
+       * debian/gstreamer-audiofile.files:
+       * debian/gstreamer-avifile.files:
+       * debian/gstreamer-cdparanoia.files:
+       * debian/gstreamer-colorspace.files:
+       * debian/gstreamer-doc.files:
+       * debian/gstreamer-dv.files:
+       * debian/gstreamer-dvd.files:
+       * debian/gstreamer-esd.files:
+       * debian/gstreamer-festival.files:
+       * debian/gstreamer-flac.files:
+       * debian/gstreamer-gconf.conffiles:
+       * debian/gstreamer-gconf.files:
+       * debian/gstreamer-gconf.postinst:
+       * debian/gstreamer-gnomevfs.files:
+       * debian/gstreamer-gsm.files:
+       * debian/gstreamer-http.files:
+       * debian/gstreamer-jack.files:
+       * debian/gstreamer-jpeg.files:
+       * debian/gstreamer-mad.files:
+       * debian/gstreamer-mikmod.files:
+       * debian/gstreamer-misc.files:
+       * debian/gstreamer-mpeg2dec.files:
+       * debian/gstreamer-oss.files:
+       * debian/gstreamer-plugin-apps.files:
+       * debian/gstreamer-plugin-apps.manpages:
+       * debian/gstreamer-plugin-libs-dev.files:
+       * debian/gstreamer-plugin-libs.files:
+       * debian/gstreamer-plugin-template.postinst:
+       * debian/gstreamer-plugin-template.postrm:
+       * debian/gstreamer-sdl.files:
+       * debian/gstreamer-sid.files:
+       * debian/gstreamer-vorbis.files:
+       * debian/gstreamer-x.files:
+       * debian/mk.control:
+       * debian/rules:
+       Debian package info not maintained here.
+
+2004-03-04  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/aalib/gstaasink.c: (gst_aasink_class_init):
+       * ext/cdaudio/gstcdaudio.c: (gst_cdaudio_class_init):
+       * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_class_init):
+       * ext/divx/gstdivxenc.c: (gst_divxenc_class_init):
+       * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_class_init):
+       * ext/gsm/gstgsmenc.c: (gst_gsmenc_class_init):
+       * ext/jpeg/gstjpegenc.c: (gst_jpegenc_class_init):
+       * ext/musicbrainz/gsttrm.c: (gst_musicbrainz_class_init):
+       * ext/speex/gstspeexenc.c: (gst_speexenc_class_init):
+       * ext/xvid/gstxvidenc.c: (gst_xvidenc_class_init):
+       * gst-libs/gst/colorbalance/colorbalance.c:
+       (gst_color_balance_class_init):
+       * gst-libs/gst/colorbalance/colorbalancechannel.c:
+       (gst_color_balance_channel_class_init):
+       * gst-libs/gst/mixer/mixer.c: (gst_mixer_class_init):
+       * gst-libs/gst/play/play.c: (gst_play_class_init):
+       * gst-libs/gst/propertyprobe/propertyprobe.c:
+       (gst_property_probe_iface_init):
+       * gst-libs/gst/tuner/tuner.c: (gst_tuner_class_init):
+       * gst-libs/gst/tuner/tunerchannel.c:
+       (gst_tuner_channel_class_init):
+       * gst-libs/gst/xoverlay/xoverlay.c: (gst_x_overlay_base_init):
+       * gst/cutter/gstcutter.c: (gst_cutter_class_init):
+       * gst/effectv/gstvertigo.c: (gst_vertigotv_class_init):
+       * sys/cdrom/gstcdplayer.c: (cdplayer_class_init):
+       * sys/dxr3/dxr3spusink.c: (dxr3spusink_class_init):
+       * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_class_init):
+       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_class_init):
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_class_init):
+       * sys/v4l2/gstv4l2src.c: (gst_v4l2src_class_init):
+          fix signals to use - instead of _
+       * ext/libcaca/gstcacasink.h:
+       * ext/sdl/sdlvideosink.h:
+          fix header rename
+
+2004-03-04  David Schleef  <ds@schleef.org>
+
+       * testsuite/gst-lint:  Add a check for bad signal names.
+
+2004-03-04  <kost@imn.htwk-leipzig.de>
+
+       reviewed by David Schleef
+
+       * gst/videofilter/gstgamma.c: (gst_gamma_rgb32): Fix typo that
+       modified the alpha channel and caused a warning. (bug #136192)
+
+2004-04-03  Christian Schaller <Uraeus@gnome.org>
+
+       * gst-plugins.spec.in:
+       Change names of plugins to actually be correct. Try to keep things
+       alphabetical to avoid getting beat up by Thomas
+
+2004-03-03  Julien MOUTTE <julien@moutte.net>
+
+       * gst-libs/gst/gconf/gconf.c: (gst_gconf_get_default_video_sink):
+       Using ximagesink as a default if no gconf key found. We should
+       probably consider using alsasink instead of osssink for the audio
+       part.
+
+2004-03-02  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+         fix --with-plugins, don't think it ever worked before
+       * gst-plugins.spec.in:
+          even more updates
+
+2004-03-01  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/sdl/sdlvideosink.h:
+       * sys/ximage/ximagesink.h:
+       * sys/xvideo/xvideosink.h:
+       * sys/xvimage/xvimagesink.h:
+         Fix for move of gstvideosink.h -> videosink.h.
+
+2004-03-02  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-libs/gst/xwindowlistener/Makefile.am:
+         this is a plugin library, not a library
+
+2004-03-01  David Schleef  <ds@schleef.org>
+
+       * AUTHORS:  Added some names.  Add yourself if you're still
+       missing.
+
+2004-03-01  David Schleef  <ds@schleef.org>
+
+       * MAINTAINERS: Add
+
+2004-03-01  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-plugins.spec.in: clean up spec file
+
+2004-03-01  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-libs/gst/video/Makefile.am:
+       * gst-libs/gst/video/gstvideosink.c:
+       * gst-libs/gst/video/gstvideosink.h:
+          rename gstvideosink.h to videosink.h to match other headers
+       * gst/mixmatrix/Makefile.am:
+          fix plugin filename
+       * gst/tags/Makefile.am: fix plugin filename
+
+2004-03-01  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/tags/Makefile.am: fix plugin filename
+
+2004-03-01  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * examples/gstplay/player.c: (got_time_tick), (main):
+         add error handler
+          display time_tick more readably
+       * gst/mixmatrix/Makefile.am:
+          fix plugin file name
+
+2004-02-29  Christophe Fergeau  <teuf@gnome.org>
+
+       * sys/oss/gstosselement.c: (gst_osselement_probe),
+       (device_combination_append), (gst_osselement_class_probe_devices):
+       * sys/oss/gstosselement.h:
+         Reworked enumeration of oss dsps and mixers so that gst-mixer works
+         on my system using alsa oss emulation, fixes bug #135597
+
+2004-02-29  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/videodrop/gstvideodrop.c: (gst_videodrop_init),
+       (gst_videodrop_chain), (gst_videodrop_change_state):
+       * gst/videodrop/gstvideodrop.h:
+         Work based on timestamp of input data, not based on the expected
+         framerate from the input. The consequence is that this element now
+         not only scales framerates, but also functions as a framerate
+         corrector or framerate stabilizer/constantizer.
+
+2004-02-27  David Schleef  <ds@schleef.org>
+
+       patches from jmmv@menta.net (Julio M. Merino Vidal)
+
+       * gst/interleave/deinterleave.c: (deinterleave_chain): Fix
+       GST_ELEMENT_ERROR call (bug #135634)
+       * gst/interleave/interleave.c: (interleave_buffered_loop),
+       (interleave_bytestream_loop): Don't use alloca() (bug #135640)
+       * sys/cdrom/gstcdplayer_ioctl_bsd.h: Fix ioctls on NetBSD (bug #135645)
+       * sys/oss/gstosssink.c: (gst_osssink_get_delay),
+       (gst_osssink_chain): Fix ioctls on NetBSD. (bug #135644)
+       * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_sync_next_frame),
+       (gst_v4lmjpegsrc_set_capture), (gst_v4lmjpegsrc_set_capture_m),
+       (gst_v4lmjpegsrc_capture_init), (gst_v4lmjpegsrc_requeue_frame):
+       Fix GST_ELEMENT_ERROR call.
+       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_try_palette): Fix
+       GST_ELEMENT_ERROR call.
+
+2004-02-27  Benjamin Otte  <otte@gnome.org>
+
+       * gst-libs/gst/audio/audio.h:
+         add macro to make sure header isn't included twice
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_chunk):
+         don't use gst_buffer_free
+       * gst/playondemand/filter.func:
+         don't use gst_data_free. Free data only once.
+
+2004-02-26  David Schleef  <ds@schleef.org>
+
+       * gst-libs/gst/colorbalance/Makefile.am:
+       * gst-libs/gst/mixer/Makefile.am:
+       * gst-libs/gst/tuner/Makefile.am:
+       * gst/level/Makefile.am: -marshal.[ch] and -enum.[ch] files
+       should not be disted, -marshal.h files should not be installed,
+       and -enum.h files _should_ be installed.  Fix to make this the
+       case.
+
+=== release 0.7.5 ===
+
+2004-02-26  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac: release 0.7.5, "Under The Sea"
+
+2004-02-25  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link),
+       (gst_audio_convert_change_state), (gst_audio_convert_get_buffer):
+       * gst/videoscale/gstvideoscale.c:
+       * sys/oss/gstosselement.c: (gst_osselement_sync_parms):
+          assorted debug/warning fixes
+
+2004-02-25  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/videoscale/gstvideoscale.c: (gst_videoscale_getcaps),
+       (gst_videoscale_init), (gst_videoscale_chain),
+       (gst_videoscale_set_property), (plugin_init):
+       * gst/videoscale/gstvideoscale.h:
+       * gst/videoscale/videoscale.c: (gst_videoscale_setup),
+       (gst_videoscale_scale_rgb), (gst_videoscale_planar411),
+       (gst_videoscale_planar400), (gst_videoscale_packed422),
+       (gst_videoscale_packed422rev), (gst_videoscale_32bit),
+       (gst_videoscale_24bit), (gst_videoscale_16bit),
+       (gst_videoscale_bilinear), (gst_videoscale_bicubic),
+       (gst_videoscale_scale_plane_slow),
+       (gst_videoscale_scale_point_sample),
+       (gst_videoscale_scale_nearest),
+       (gst_videoscale_scale_nearest_str2),
+       (gst_videoscale_scale_nearest_str4),
+       (gst_videoscale_scale_nearest_32bit),
+       (gst_videoscale_scale_nearest_24bit),
+       (gst_videoscale_scale_nearest_16bit):
+        add debugging category and use it properly
+        fix use of GST_PTR_FORMAT
+
+2004-02-25  Andy Wingo  <wingo@pobox.com>
+
+       * gst/interleave/interleave.c (interleave_buffered_loop): Always
+       push only when channel->buffer is NULL. Prevents segfaults doing
+       the state change after a nonlocal exit, like a scheme exception.
+
+       * gst/audioconvert/gstaudioconvert.c (gst_audio_convert_getcaps):
+       Handle the case where the intersected caps is empty.
+
+2004-02-25  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/law/mulaw-decode.c: (mulawdec_link):
+       * gst/law/mulaw.c: (plugin_init):
+          fix mulawdec so it actually works again
+
+2004-02-24  Arwed v. Merkatz  <v.merkatz@gmx.net>
+
+       reviewed by: David Schleef  <ds@schleef.org>
+
+       * gst/videofilter/gstgamma.c: (gst_gamma_class_init),
+       (gst_gamma_init), (gst_gamma_set_property),
+       (gst_gamma_get_property), (gst_gamma_calculate_tables),
+       (gst_gamma_rgb24), (gst_gamma_rgb32):  Adds gamma correction
+       for RGB, with separate r g and b correction factors. (#131167)
+
+2004-02-24  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_chain):
+          only signal tags for bitrate if they're > 0 (#134894)
+
+2004-02-24  David Schleef  <ds@schleef.org>
+
+       * gst/qtdemux/qtdemux.c: (plugin_init), (gst_qtdemux_loop_header),
+       (qtdemux_parse_moov), (qtdemux_parse), (qtdemux_node_dump_foreach),
+       (qtdemux_dump_mvhd), (qtdemux_dump_tkhd), (qtdemux_dump_elst),
+       (qtdemux_dump_mdhd), (qtdemux_dump_hdlr), (qtdemux_dump_vmhd),
+       (qtdemux_dump_dref), (qtdemux_dump_stsd), (qtdemux_dump_stts),
+       (qtdemux_dump_stss), (qtdemux_dump_stsc), (qtdemux_dump_stsz),
+       (qtdemux_dump_stco), (qtdemux_dump_co64), (qtdemux_dump_dcom),
+       (qtdemux_dump_cmvd), (qtdemux_parse_tree), (qtdemux_parse_trak):
+       Cleanups.  Convert g_prints to GST_LOGs.  Add qtdemux debug
+       category.  Attempt to fix timestamp calculation.
+
+2004-02-24  Johan Dahlin  <johan@gnome.org>
+
+       * gst-libs/gst/gconf/gconf.c: Add \n to g_print error messages
+
+2004-02-23  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+       * gconf/Makefile.am:
+       * gconf/gstreamer.schemas:
+       * gst-libs/gst/gconf/Makefile.am:
+       * gst-libs/gst/gconf/gconf.c:
+          version gconf schemas and install locations
+
+2004-02-23  Benjamin Otte  <otte@gnome.org>
+
+       * ext/xine/xineinput.c: (gst_xine_input_dispose):
+       (gst_xine_input_subclass_init):
+         call parent dispose.
+         change pad template for CD reader correctly
+       * ext/xine/Makefile.am:
+       * ext/xine/gstxine.h:
+       * ext/xine/xine.c: (plugin_init):
+       * ext/xine/xineaudiosink.c:
+         wrap audio sinks, too
+       * gst-libs/gst/resample/private.h:
+       * gst-libs/gst/resample/resample.c: (gst_resample_init),
+       (gst_resample_reinit), (gst_resample_scale),
+       (gst_resample_nearest_s16), (gst_resample_bilinear_s16),
+       (gst_resample_sinc_slow_s16), (gst_resample_sinc_s16),
+       (gst_resample_sinc_ft_s16), (gst_resample_nearest_float),
+       (gst_resample_bilinear_float), (gst_resample_sinc_slow_float),
+       (gst_resample_sinc_float), (gst_resample_sinc_ft_float):
+       * gst-libs/gst/resample/resample.h:
+       * gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type),
+       (gst_audioscale_class_init), (gst_audioscale_link),
+       (gst_audioscale_get_buffer), (gst_audioscale_init),
+       (gst_audioscale_chain), (gst_audioscale_set_property),
+       (gst_audioscale_get_property):
+       * gst/audioscale/gstaudioscale.h:
+         s/resample_*/gst_resample_*/i to not clobber namespaces
+
+2004-02-23  Julien MOUTTE  <julien@moutte.net>
+
+       * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps),
+       (gst_riff_create_audio_caps), (gst_riff_create_iavs_caps),
+       (gst_riff_create_video_template_caps),
+       (gst_riff_create_audio_template_caps),
+       (gst_riff_create_iavs_template_caps):
+       * gst-libs/gst/riff/riff-media.h:
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_base_init),
+       (gst_asf_demux_audio_caps), (gst_asf_demux_add_audio_stream),
+       (gst_asf_demux_video_caps), (gst_asf_demux_add_video_stream):
+       * gst/avi/gstavidemux.c: (gst_avi_demux_add_stream):
+       * gst/matroska/matroska-demux.c: (gst_matroska_demux_add_stream),
+       (gst_matroska_demux_video_caps), (gst_matroska_demux_audio_caps),
+       (gst_matroska_demux_plugin_init): First batch implementing audio and
+       video codec tags in demuxers.
+
+2004-02-22  Benjamin Otte  <otte@gnome.org>
+
+       * ext/xine/Makefile.am:
+       * ext/xine/gstxine.h:
+       * ext/xine/xine.c: (plugin_init):
+       * ext/xine/xineinput.c:
+         add input plugin wrapper. Playback from files, http, mms and cdda
+         works.
+       * ext/xine/xineaudiodec.c: (gst_xine_audio_dec_chain):
+         remove leftover G_GNUC_UNUSED
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_stream),
+       (gst_asf_demux_identify_guid):
+         improve debugging output
+
+2004-02-22  Benjamin Otte  <otte@gnome.org>
+
+       reported by: Padraig O'Briain <padraig.obriain@sun.com>
+
+       * autogen.sh:
+         replace test -e with test -x for mkinstalldirs to be more portable.
+         (fixes #134816)
+
+2004-02-22  Benjamin Otte  <otte@gnome.org>
+
+       reported by: Stefan Kost <kost@imn.htwk-leipzig.de>
+
+       * gst/audioconvert/gstaudioconvert.c: (plugin_init):
+         set rank to PRIMARY
+       * gst/volume/gstvolume.c: (plugin_init):
+         set rank to NONE
+       fixes #134960
+
+2004-02-22   Julio M. Merino Vidal <jmmv@menta.net>
+
+       reviewed by Benjamin Otte  <otte@gnome.org>
+
+       * ext/flac/gstflacenc.c: (gst_flacenc_chain):
+         escape NULL strings in GST_ELEMENT_ERROR properly (fixes #135116)
+
+2004-02-22  Benjamin Otte  <otte@gnome.org>
+
+       * configure.ac:
+         export [_]*{gst,Gst,GST}.* symbols from plugins
+
+2004-02-22  Christophe Fergeau <teuf@gnome.org>
+
+       reviewed by: Benjamin Otte  <otte@gnome.org>
+
+       * ext/lame/gstlame.c: (add_one_tag):
+       * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
+       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_get_tag_value),
+       (gst_vorbisenc_metadata_set1):
+       * gst/tags/gstid3tag.c:
+       * gst/tags/gstvorbistag.c: (gst_vorbis_tag_add):
+         apply fixes from bugs #135042 (lame can't write tags) and #133817
+         (add GST_ALBUM_VOLUME_{COUNT,NUMBER} tags)
+
+2004-02-22 Ramon Garcia <ramon_garcia_f@yahoo.com>
+
+       * configure.ac: Export only gst_plugin_desc from plugins.
+         Note that this change only makes any effect with Linux using libtool
+        1.5.2 or higher. Otherwise it is silently ignored, but it would build
+         fine. And don't try to have several versions of libtool in different
+         directories.
+
+2004-02-20  Andy Wingo  <wingo@pobox.com>
+
+       * gst/intfloat/, gst/oneton: Removed, replaced by audioconvert and
+       interleave respectively.
+
+       * gst/interleave/deinterleave.c: New plugin: deinterleave
+       (replaces on oneton).
+       * gst/interleave/interleave.c: New plugin: interleave.
+       * gst/interleave/plugin.h: Support file.
+       * gst/interleave/plugin.c: Support file.
+
+       * configure.ac: Remove intfloat and oneton, add interleave.
+
+       * ext/sndfile/gstsf.c: Handle events better.
+
+       * gst/audioconvert/gstaudioconvert.c: Change to support int2float
+       and float2int operation. int2float has scheduling problems as
+       noted in in2float_chain.
+
+2004-02-20  Benjamin Otte  <otte@gnome.org>
+
+       * ext/xine/Makefile.am:
+       * ext/xine/gstxine.h:
+       * ext/xine/xine.c:
+       * ext/xine/xineaudiodec.c:
+       * ext/xine/xinecaps.c:
+         add first version of xine plugin wrapper. Currently only wraps the
+         QDM2 win32 DLL, and even that only in proof-of-concept quality.
+       * configure.ac:
+       * ext/Makefile.am:
+         add xine plugin wrapper, disabled by default. Use --enable-xine to
+         build. Note that it'll segfault on gst-register if you don't remove
+         the goom and tvtime post plugins from xine.
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_handle_sink_event),
+       (qtdemux_parse), (qtdemux_parse_trak), (qtdemux_audio_caps):
+         add extradata parsing for QDM2.
+         change around debugging prints.
+
+2004-02-19  Benjamin Otte  <otte@gnome.org>
+
+       * ext/lame/gstlame.c: (gst_lame_chain):
+       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_chain):
+         use gst_tag_list_insert when you want to insert tags
+
+2004-02-18  David Schleef  <ds@schleef.org>
+
+       * configure.ac:  Move massink to gst-rotten
+       * ext/Makefile.am:
+       * ext/mas/Makefile.am:
+       * ext/mas/massink.c:
+       * ext/mas/massink.h:
+
+2004-02-18  David Schleef  <ds@schleef.org>
+
+       * ext/gdk_pixbuf/gstgdkpixbuf.c: (plugin_init): Disable gdk_pixbuf
+       typefinding, since it seems to be worse than nothing.
+       * gst/typefind/gsttypefindfunctions.c: (qt_type_find):  Add ftyp
+       atom to recognize .mp4 and .m4a files as video/quicktime.
+
+2004-02-18  David Schleef  <ds@schleef.org>
+
+       * gst/sine/demo-dparams.c: (quit_live),
+       (dynparm_log_value_changed), (dynparm_value_changed), (main):
+       Use double dparams, not float.
+       * gst/sine/gstsinesrc.c: (gst_sinesrc_class_init),
+       (gst_sinesrc_init): Change sync default to FALSE, since multiple
+       sync'd elements don't really work correctly.
+       * gst/volume/gstvolume.c: (volume_class_init), (volume_init),
+       (volume_update_volume), (volume_get_property):  Change dparam
+       to double.
+
+2004-02-18  Julien MOUTTE  <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c:
+       (gst_ximagesink_xwindow_update_geometry),
+       (gst_ximagesink_renegotiate_size), (gst_ximagesink_handle_xevents),
+       (gst_ximagesink_change_state), (gst_ximagesink_expose),
+       (gst_ximagesink_init): Rework the way software video scaling works. So
+       now we check on each chain call if the video frames are feeling the
+       window. If not we try to renegotiate caps. On failure we memorize that
+       and we won't try again for that PLAYING sessions.
+       * sys/ximage/ximagesink.h: Adding a boolean to store the caps renego
+       failure.
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_init): initialize the
+       synchronous flag.
+
+2004-02-18  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-libs/gst/play/play.c: (gst_play_pipeline_setup):
+          break up _link so we can give a better debug message for errors
+
+2004-02-18  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/gdk_pixbuf/gstgdkpixbuf.c: (plugin_init):
+          set up debug category
+
+2004-02-18  Julien MOUTTE <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_renegotiate_size),
+       (gst_ximagesink_handle_xevents), (gst_ximagesink_expose): Reorganizing
+       the way renegotiation work. The event handling function is not taking
+       care of external windows and renegotiate method check for pad flags
+       NEGOTIATING. Should fix : #133209
+
+2004-02-17  Julien MOUTTE  <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_expose): Checking if the
+       pad is negotiating before trying renegotiation.
+
+2004-02-17  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_type_find):
+          pass on all possible mime types as typefind hints
+
+2004-02-17  Julien MOUTTE <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new): Fix a
+       possible SHM leak if we crash. All other apps using XShm are doing
+       that.
+
+2004-02-17  Julien MOUTTE  <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_renegotiate_size),
+       (gst_ximagesink_expose): Renegotiate size on expose.
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_expose): Update window
+       size on expose.
+
+2004-02-16  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * testsuite/alsa/sinesrc.c:
+         cosmetic fix to fix compile issue with gcc 2.95.4
+
+2004-02-16  Julien MOUTTE <julien@moutte.net>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_open_audio),
+       (gst_alsa_timestamp_to_bytes): Alsa should trigger an error if it
+       failed opening the audio device.
+       * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
+       (gst_ximagesink_ximage_destroy), (gst_ximagesink_ximage_put),
+       (gst_ximagesink_xwindow_new), (gst_ximagesink_xwindow_destroy),
+       (gst_ximagesink_xwindow_resize), (gst_ximagesink_xwindow_clear),
+       (gst_ximagesink_renegotiate_size), (gst_ximagesink_handle_xevents),
+       (gst_ximagesink_xcontext_get), (gst_ximagesink_xcontext_clear),
+       (gst_ximagesink_change_state), (gst_ximagesink_chain),
+       (gst_ximagesink_set_xwindow_id): Clearing window in READY TO PAUSED.
+       Removing some useless g_return_if_fail like wingo suggested.
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
+       (gst_xvimagesink_xvimage_destroy), (gst_xvimagesink_xvimage_put),
+       (gst_xvimagesink_xwindow_new), (gst_xvimagesink_xwindow_destroy),
+       (gst_xvimagesink_xwindow_resize), (gst_xvimagesink_xwindow_clear),
+       (gst_xvimagesink_update_colorbalance),
+       (gst_xvimagesink_handle_xevents), (gst_xvimagesink_xcontext_get),
+       (gst_xvimagesink_xcontext_clear),
+       (gst_xvimagesink_get_fourcc_from_caps),
+       (gst_xvimagesink_change_state), (gst_xvimagesink_chain),
+       (gst_xvimagesink_set_xwindow_id),
+       (gst_xvimagesink_colorbalance_list_channels),
+       (gst_xvimagesink_colorbalance_set_value),
+       (gst_xvimagesink_colorbalance_get_value): Clearing window in READY TO
+       PAUSED. Removing some useless g_return_if_fail like wingo suggested.
+
+2004-02-16  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_chain):
+          throw error when not negotiated instead of asserting
+
+2004-02-15  Julien MOUTTE  <julien@moutte.net>
+
+       * gst/switch/gstswitch.c: (gst_switch_loop): More fixes for
+       correct data refcounting.
+
+2004-02-15  Julien MOUTTE  <julien@moutte.net>
+
+       * gst/switch/gstswitch.c: (gst_switch_change_state),
+       (gst_switch_class_init): Cleaning the sinkpads correctly on state
+       change, mostly the EOS flag.
+
+2004-02-15  Julien MOUTTE  <julien@moutte.net>
+
+       * examples/gstplay/player.c: (got_eos), (main): Adding some
+       output for debugging.
+       * gst-libs/gst/play/play.c: (gst_play_state_change): Stop our
+       timeouts if we go to any state different from PLAYING.
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_seek): Fix some
+       more EOS bugs in riff lib.
+
+2004-02-14  Julien MOUTTE  <julien@moutte.net>
+
+       * gst-libs/gst/play/play.c: (gst_play_connect_visualization): Disable
+       visualization until i find a way to fix switch correctly.
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head): Fix a bug when
+       EOS arrives.
+       * gst/switch/gstswitch.c: (gst_switch_release_pad),
+       (gst_switch_request_new_pad), (gst_switch_poll_sinkpads),
+       (gst_switch_loop), (gst_switch_dispose), (gst_switch_class_init):
+       Reworked switch to get a more correct behaviour with events and refing
+       of data stored in sinkpads.
+       * gst/switch/gstswitch.h: Adding an eos flag for every sinkpad so that
+       we don't pull from a pad in EOS.
+
+2004-02-14  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
+         remove v1 tag even if we can't read it (makes sure we don't detect
+         it again)
+
+2004-02-14  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_pcm_wait),
+       (gst_alsa_xrun_recovery):
+       * ext/alsa/gstalsa.h:
+         try xrun recovery when wait failed. Make xrun recovery function
+         return TRUE/FALSE to indicate success. (might fix #134354)
+
+2004-02-13  David Schleef  <ds@schleef.org>
+
+       * gst/sine/demo-dparams.c: (dynparm_log_value_changed),
+       (dynparm_value_changed), (main): Convert from float to double.
+       * gst/sine/gstsinesrc.c: (gst_sinesrc_init): same.
+
+2004-02-13  David Schleef  <ds@schleef.org>
+
+       * gst/silence/gstsilence.c: (gst_silence_class_init),
+       (gst_silence_set_clock), (gst_silence_get),
+       (gst_silence_set_property), (gst_silence_get_property):
+       * gst/silence/gstsilence.h: Add sync property.
+       * gst/sine/gstsinesrc.c: (gst_sinesrc_class_init),
+       (gst_sinesrc_init), (gst_sinesrc_set_clock), (gst_sinesrc_get),
+       (gst_sinesrc_set_property), (gst_sinesrc_get_property):
+       * gst/sine/gstsinesrc.h: Add sync property.
+
+2004-02-13  David Schleef  <ds@schleef.org>
+
+       * gst/intfloat/gstint2float.c: (conv_f32_s16),
+       (gst_int2float_chain_gint16):  Change stdint usage to glib types.
+
+2004-02-13  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+       * ext/Makefile.am:
+       * gst-libs/ext/Makefile.am:
+          move ffmpeg plugin to gst-ffmpeg module
+
+2004-02-13  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac: use GST_ARCH to detect architecture
+
+2004-02-12  Julien MOUTTE  <julien@moutte.net>
+
+       * gst/vbidec/vbiscreen.c: Fixing thomasvs fixes. Missing header.
+
+2004-02-12  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/ladspa/gstladspa.c: (gst_ladspa_base_init):
+          classify LADSPA plugins based on number of src/sink pads
+         (#133663, Stefan Kost)
+       * gst/sine/gstsinesrc.c: (gst_sinesrc_init):
+          fix dparams registration
+         (#133528, Stefan Kost)
+       * gst/vbidec/vbiscreen.c: (vbiscreen_set_current_cell):
+          fix use of isprint and use g_ascii_isprint instead
+         (#133316, Stefan Kost)
+
+2004-02-11  David Schleef  <ds@schleef.org>
+
+       Convert a few inner loops to use liboil.  This is currently
+       optional, and is only enabled if liboil is present (duh!).
+       * configure.ac: Check for liboil-0.1
+       * gst/intfloat/Makefile.am:
+       * gst/intfloat/gstint2float.c: (conv_f32_s16), (scalarmult_f32),
+       (gst_int2float_chain_gint16):
+       * gst/videofilter/Makefile.am:
+       * gst/videofilter/gstvideobalance.c: (gst_videobalance_class_init),
+       (tablelookup_u8), (gst_videobalance_planar411):
+       * gst/videotestsrc/Makefile.am:
+       * gst/videotestsrc/gstvideotestsrc.c: (plugin_init):
+       * gst/videotestsrc/videotestsrc.c: (splat_u8), (paint_hline_YUY2),
+       (paint_hline_IYU2), (paint_hline_str4), (paint_hline_str3),
+       (paint_hline_RGB565), (paint_hline_xRGB1555):
+
+2004-02-11  David Schleef  <ds@schleef.org>
+
+       * ext/lcs/gstcolorspace.c: (colorspace_find_lcs_format),
+       (gst_colorspace_caps_get_fourcc), (colorspace_setup_converter),
+       (gst_colorspace_getcaps), (gst_colorspace_link),
+       (gst_colorspace_base_init), (gst_colorspace_init),
+       (gst_colorspace_chain), (gst_colorspace_change_state),
+       (plugin_init): Merge Ronald's patch (bug #117897) and update
+       for new caps and negotiation.  Seems to work, although it
+       shows off bugs in lcs.
+
+2004-02-11  David Schleef  <ds@schleef.org>
+
+       * ext/alsa/Makefile.am: Fix linking against libgstinterfaces.
+       (bug #133886)  Noticed by bugs@leroutier.net (Stephane LOEUILLET)
+
+2004-02-11  David Schleef  <ds@schleef.org>
+
+       * ext/librfb/gstrfbsrc.c: (gst_rfbsrc_class_init),
+       (gst_rfbsrc_change_state), (gst_rfbsrc_init),
+       (gst_rfbsrc_set_property), (gst_rfbsrc_get_property):
+       Add server and port properties
+
+2004-02-11  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * m4/a52.m4:
+       * m4/aalib.m4:
+       * m4/as-ffmpeg.m4:
+       * m4/as-liblame.m4:
+       * m4/as-slurp-ffmpeg.m4:
+       * m4/check-libheader.m4:
+       * m4/esd.m4:
+       * m4/freetype2.m4:
+       * m4/gconf-2.m4:
+       * m4/glib.m4:
+       * m4/gst-alsa.m4:
+       * m4/gst-artsc.m4:
+       * m4/gst-ivorbis.m4:
+       * m4/gst-matroska.m4:
+       * m4/gst-sdl.m4:
+       * m4/gst-shout2.m4:
+       * m4/gst-sid.m4:
+       * m4/gtk.m4:
+       * m4/libdv.m4:
+       * m4/libfame.m4:
+       * m4/libmikmod.m4:
+       * m4/ogg.m4:
+       * m4/vorbis.m4:
+          fix underquotedness of macros (#133800)
+       * m4/as-avifile.m4:
+       * m4/xmms.m4:
+          removed because no longer used
+
+2004-02-11  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+          require gettext 0.11.5 so ulonglong.m4 gets checked out and copied
+          by autopoint (fixes #132996)
+
+2004-02-11  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_base_init):
+       * ext/ffmpeg/gstffmpegdemux.c: (gst_ffmpegdemux_base_init):
+       * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_base_init):
+       * ext/ffmpeg/gstffmpegmux.c: (gst_ffmpegmux_base_init):
+         fix memleaks
+
+2004-02-11  David Schleef  <ds@schleef.org>
+
+       * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_sink_link),
+       (gst_gdk_pixbuf_chain): Fix logic bug causing spurious errors.
+       * ext/jpeg/gstjpegdec.c: (gst_jpegdec_base_init),
+       (gst_jpegdec_init), (gst_jpegdec_chain): Fix negotiation.
+       * ext/jpeg/gstjpegenc.c: (gst_jpegenc_base_init),
+       (gst_jpegenc_class_init), (gst_jpegenc_init),
+       (gst_jpegenc_getcaps), (gst_jpegenc_link), (gst_jpegenc_resync),
+       (gst_jpegenc_chain), (gst_jpegenc_set_property),
+       (gst_jpegenc_get_property):  Fix negotiation.  Add some properties.
+       * ext/jpeg/gstjpegenc.h: Fix negotiation.
+
+2004-02-10  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/mikmod/gstmikmod.c: (gst_mikmod_init),
+       (gst_mikmod_srcfixate), (gst_mikmod_srclink), (gst_mikmod_loop):
+       * ext/mikmod/gstmikmod.h:
+         fix caps negotiation in mikmod
+       * ext/ogg/gstoggdemux.c: (gst_ogg_print):
+         output debug information
+
+2004-02-08  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst-libs/gst/colorbalance/Makefile.am:
+       * gst-libs/gst/navigation/Makefile.am:
+       * gst-libs/gst/xoverlay/Makefile.am:
+         remove unused GST_OPT_CFLAGS from Makefiles
+         include X_CFLAGS and X_LIBS in xoverlay. (#131948)
+
+2004-02-07  David Schleef  <ds@schleef.org>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_handle_event): Don't
+       push events to pads that haven't been created (#133508)
+
+2004-02-07  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_src_convert),
+       (gst_dvdec_sink_convert), (gst_dvdec_handle_sink_event),
+       (gst_dvdec_video_getcaps), (gst_dvdec_video_link),
+       (gst_dvdec_loop), (gst_dvdec_change_state):
+       Second attempt at committing a working dvdec element.
+
+2004-02-06  David Schleef  <ds@schleef.org>
+
+       Build fixes for OS X: (see #129600)
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_strh),
+       (gst_riff_read_strf_vids), (gst_riff_read_strf_auds),
+       (gst_riff_read_strf_iavs):
+       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_avih),
+       (gst_avi_demux_stream_odml):
+       * gst/playondemand/Makefile.am:
+       * gst/rtp/rtp-packet.c:
+
+2004-02-05  David Schleef  <ds@schleef.org>
+
+       * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_loop): Revert
+       last change, because it Just Doesn't Compile.
+
+2004-02-05  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_chain):
+         skip undecodable id3v2 tag instead of keeping it
+
+2004-02-05  David Schleef  <ds@schleef.org>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain):
+       Unref leaked buffer.  (Noticed by Ronald)
+
+2004-02-05  David I. Lehn  <dlehn@users.sourceforge.net>
+
+       * pkgconfig/gstreamer-libs-uninstalled.pc.in:
+       Sync requires with other checks.  >= vs =.
+
+2004-02-06  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * ext/dv/gstdvdec.c: (gst_dvdec_init), (gst_dvdec_video_getcaps),
+       (gst_dvdec_video_link), (gst_dvdec_loop):
+       * ext/dv/gstdvdec.h:
+         rework the caps negotiation so that dvdec works again instead
+         of just segfaulting.
+
+=== release 0.7.4 ===
+
+2004-02-06  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * NEWS: GStreamer Plugins 0.7.4 "For Great Justice" released
+       * configure.ac: changed for release
+
+2004-02-05  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-libs/gst/gconf/gstreamer-gconf-uninstalled.pc.in:
+       * pkgconfig/gstreamer-interfaces-uninstalled.pc.in:
+       * pkgconfig/gstreamer-libs-uninstalled.pc.in:
+       * pkgconfig/gstreamer-play-uninstalled.pc.in:
+          reworked patch by David Lehn to fix libdir and includedir for
+          uninstalled libraries
+          removed play and gconf from gstreamer-libs since they have their
+          own pkgconfig files
+
+2004-02-04  David Schleef  <ds@schleef.org>
+
+       * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt): Fix a caps
+       memleak.
+
+2004-02-05  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_info):
+         use correct GST_TAG_ENCODER tag
+
+2004-02-05  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_change_state):
+         be sure to stop the clock when going to paused
+       * sys/oss/gstosssink.c: (gst_osssink_change_state):
+         reset number of transmitted when going to ready.
+       fixes #132935
+
+2004-02-05  Charles Schmidt <cschmidt2@emich.edu>
+
+       reviewed by Benjamin Otte
+
+       * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
+         extract track count (fixes #133410)
+
+2004-02-04  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_do_caps_nego):
+         that should be !=, not == (fixes #132519)
+
+2004-02-04  David Schleef  <ds@schleef.org>
+
+       Make sure set_explicit_caps() is called before adding pad.
+       * ext/ffmpeg/gstffmpegdemux.c: (gst_ffmpegdemux_loop):
+       * gst/id3/gstid3types.c: (gst_id3types_loop):
+       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead):
+       * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream):
+
+2004-02-04  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+          bump nano to 2, first prerelease
+          put back AM_PROG_LIBTOOL
+
+2004-02-04  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * testsuite/alsa/Makefile.am:
+          these are user test apps, not automatic testsuite tests
+
+2004-02-04  David Schleef  <ds@schleef.org>
+
+       Convert GST_DEBUG_CAPS() to GST_DEBUG():
+       * gst/mpeg1videoparse/gstmp1videoparse.c:
+       (mp1videoparse_parse_seq):
+       * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream):
+       * gst/videoscale/gstvideoscale.c: (gst_videoscale_getcaps):
+       * sys/xvideo/gstxwindow.c: (_gst_xwindow_new):
+       * sys/xvideo/xvideosink.c: (gst_xvideosink_sinkconnect),
+       (gst_xvideosink_getcaps):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support):
+       * testsuite/gst-lint: more tests
+
+2004-02-04  David Schleef  <ds@schleef.org>
+
+       Replace use of GST_PAD_FORMATS_FUNCTION() and similar macros
+       with the code that they would expand to.
+       * ext/flac/gstflacdec.c: (gst_flacdec_get_src_formats),
+       (gst_flacdec_get_src_query_types),
+       (gst_flacdec_get_src_event_masks):
+       * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_get_formats),
+       (gst_gnomevfssrc_get_query_types),
+       (gst_gnomevfssrc_get_event_mask):
+
+2004-02-04  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst/sine/gstsinesrc.c: (gst_sinesrc_class_init),
+       (gst_sinesrc_dispose):
+         fix memleak by properly disposing sinesrc
+
+2004-02-04  Julien MOUTTE  <julien@moutte.net>
+
+       * gst-libs/gst/xoverlay/xoverlay.c: (gst_x_overlay_expose):
+       * gst-libs/gst/xoverlay/xoverlay.h: Adding the _expose method to tell
+       an overlay to redraw the image because it has been exposed.
+       * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_destroy),
+       (gst_ximagesink_ximage_put), (gst_ximagesink_expose),
+       (gst_ximagesink_xoverlay_init), (gst_ximagesink_init):
+       * sys/ximage/ximagesink.h: Implement expose method from XOverlay
+       interface
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_destroy),
+       (gst_xvimagesink_xvimage_put), (gst_xvimagesink_expose),
+       (gst_xvimagesink_xoverlay_init), (gst_xvimagesink_init):
+       * sys/xvimage/xvimagesink.h: Implement expose method from XOverlay
+       interface
+
+2004-02-03  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_type_find):
+         more memleak fixage
+
+2004-02-03  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/gdk_pixbuf/gstgdkpixbuf.c: (plugin_init):
+       * gst/typefind/gsttypefindfunctions.c:
+         fix memleaks shown by gst-typefind
+
+2004-02-03  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * common/glib-gen.mak:
+          add hack rule to touch .Plo files
+       * gst-libs/gst/colorbalance/Makefile.am:
+       * gst-libs/gst/mixer/Makefile.am:
+       * gst-libs/gst/play/Makefile.am:
+       * gst-libs/gst/tuner/Makefile.am:
+          remove glib_root variable
+
+2004-02-03  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_add_stream):
+         set explicit caps before adding the element, so the autopluggers can
+         plug correctly.
+       * gst/typefind/gsttypefindfunctions.c: (mp3_type_find),
+       (mpeg2_sys_type_find), (mpeg1_sys_type_find),
+       (mpeg_video_type_find), (mpeg_video_stream_type_find),
+       (dv_type_find):
+         fix memleaks in typefind functions. gst_type_find_suggest takes a const
+         argument.
+
+2004-02-03  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-libs/gst/colorbalance/Makefile.am:
+       * gst-libs/gst/colorbalance/colorbalance-marshal.list:
+       * gst-libs/gst/colorbalance/colorbalance.c:
+       * gst-libs/gst/colorbalance/colorbalance.h:
+       * gst-libs/gst/colorbalance/colorbalancemarshal.list:
+       * gst-libs/gst/mixer/Makefile.am:
+       * gst-libs/gst/mixer/mixer-marshal.list:
+       * gst-libs/gst/mixer/mixer.c:
+       * gst-libs/gst/mixer/mixer.h:
+       * gst-libs/gst/mixer/mixermarshal.list:
+       * gst-libs/gst/play/Makefile.am:
+       * gst-libs/gst/play/play.h:
+       * gst-libs/gst/tuner/Makefile.am:
+       * gst-libs/gst/tuner/tuner-marshal.list:
+       * gst-libs/gst/tuner/tuner.c:
+       * gst-libs/gst/tuner/tuner.h:
+       * gst-libs/gst/tuner/tunermarshal.list:
+          use new glib-gen.mak snippet to clean up Makefile.am
+          fix various bugs in Makefile.am's
+
+2004-02-03  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain):
+         handle chain parsing correctly in the multichain case
+       * ext/theora/theoradec.c: (gst_theora_dec_init), (_theora_ilog),
+       (theora_dec_from_granulepos), (theora_dec_to_granulepos),
+       (theora_dec_src_query), (theora_dec_src_event), (theora_dec_event),
+       (theora_dec_chain):
+         handle events and queries correctly
+
+2004-02-03  David I. Lehn  <dlehn@users.sourceforge.net>
+
+       * .cvsignore:
+       Ignore generated file _stdint.h.
+
+2004-02-03  David I. Lehn  <dlehn@users.sourceforge.net>
+
+       * gst-libs/gst/colorbalance/Makefile.am:
+       * gst-libs/gst/colorbalance/colorbalance.h:
+       * gst-libs/gst/mixer/Makefile.am:
+       * gst-libs/gst/mixer/mixer.h:
+       * gst-libs/gst/play/Makefile.am:
+       * gst-libs/gst/play/play.h:
+       * gst-libs/gst/tuner/Makefile.am:
+       * gst-libs/gst/tuner/tuner.h:
+       Generate enum type code with glib-mkenums.
+       * gst-libs/gst/colorbalance/.cvsignore:
+       * gst-libs/gst/mixer/.cvsignore:
+       * gst-libs/gst/play/.cvsignore:
+       * gst-libs/gst/tuner/.cvsignore:
+       Ignore generated files.
+
+2004-02-03  David I. Lehn  <dlehn@users.sourceforge.net>
+
+       * gst-libs/gst/audio/.cvsignore:
+       Ignore generated file.
+       * gst-libs/gst/audio/Makefile.am:
+       Do not install example filter.
+
+2004-02-03  David I. Lehn  <dlehn@users.sourceforge.net>
+
+       * examples/switch/.cvsignore:
+       Ignore generated file.
+
+2004-02-03  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * common/m4/ax_create_stdint_h.m4:
+       * configure.ac:
+         add AX_CREATE_STDINT_H to get correct type definitions for a52dec in
+         _stdint.h.
+       * Makefile.am:
+         remove generated _stdint.h in DISTCLEANFILES
+       * ext/a52dec/gsta52dec.c:
+         include _stdint.h for a52dec. (should fix #133064)
+
+2004-02-02  Jeremy Simon  <jesimon@libertysurf.fr>
+
+       * gst/tags/gstvorbistag.c: (gst_vorbis_tag_add),
+       (gst_tag_to_vorbis_comments):
+       Add replaygain support to vorbistag
+
+2004-02-02  Jeremy Simon  <jesimon@libertysurf.fr>
+       * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps),
+       (gst_ffmpeg_caps_to_extradata):
+         Fix SVQ3 caps flag properties
+         Use glib macro for bytes swap
+
+2004-02-02  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/audiofile/gstafsink.c: (gst_afsink_plugin_init):
+       * ext/audiofile/gstafsrc.c: (gst_afsrc_plugin_init):
+       * ext/gnomevfs/gstgnomevfs.c: (plugin_init):
+       * ext/sndfile/gstsf.c: (plugin_init):
+       * gst/avi/gstavi.c: (plugin_init):
+       * sys/dxr3/dxr3init.c: (plugin_init):
+       * sys/oss/gstossaudio.c: (plugin_init):
+       * sys/v4l/gstv4l.c: (plugin_init):
+       * sys/v4l2/gstv4l2.c: (plugin_init):
+          remove textdomain calls
+       * po/nl.po:
+          update Dutch translation
+
+2004-02-02  Julien MOUTTE  <julien@moutte.net>
+
+       * gst-libs/gst/play/play.c: (gst_play_pipeline_setup),
+       (gst_play_set_audio_sink): Moving volume in the audio thread for
+       instantaneous volume change. Maybe i will add another volume in front
+       of visualization later, not sure yet though.
+
+2004-02-02  Julien MOUTTE  <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_renegotiate_size),
+       (gst_ximagesink_handle_xevents): Better X events handling, only take
+       the latest events for configure and motion.
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xevents): same.
+
+2004-02-02  Jon Trowbridge  <trow@gnu.org>
+
+       reviewed by: David Schleef  <ds@schleef.org>
+
+       Fix memory leaks:
+       * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_register):
+       * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_register):
+
+2004-02-02  David Schleef  <ds@schleef.org>
+
+       code cleanup.  Change bzero() to memset().  Remove duplicate ; at ends
+       of lines.
+       * ext/cdparanoia/gstcdparanoia.c: (cdparanoia_event):
+       * ext/flac/gstflactag.c: (gst_flac_tag_chain):
+       * ext/xvid/gstxviddec.c: (gst_xviddec_src_link):
+       * gst-libs/gst/play/play.c: (gst_play_get_sink_element):
+       * gst/ac3parse/gstac3parse.c: (gst_ac3parse_chain):
+       * gst/effectv/gstedge.c: (gst_edgetv_sinkconnect):
+       * gst/effectv/gstvertigo.c: (gst_vertigotv_sinkconnect):
+       * gst/intfloat/float22int.c: (gst_float2_2_int_getcaps),
+       (gst_float2_2_int_link):
+       * gst/mpeg2sub/gstmpeg2subt.c: (gst_mpeg2subt_chain_subtitle):
+       * gst/rtjpeg/RTjpeg.c: (RTjpeg_init_mcompress):
+       * gst/tcp/gsttcpsink.c: (gst_tcpsink_init_send):
+       * gst/tcp/gsttcpsrc.c: (gst_tcpsrc_init_receive):
+       * gst/udp/gstudpsink.c: (gst_udpsink_init_send):
+       * gst/udp/gstudpsrc.c: (gst_udpsrc_init_receive):
+       * sys/v4l/gstv4lelement.c: (gst_v4lelement_init):
+       * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_set_capture):
+       * testsuite/gst-lint: Add tests for bzero and ;;
+
+2004-02-02  David Schleef  <ds@schleef.org>
+
+       * gst/debug/efence.c: Add fallback if MAP_ANONYMOUS isn't defined.
+
+2004-02-02  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/aalib/gstaasink.c: (gst_aasink_open):
+       * ext/alsa/gstalsa.c: (gst_alsa_link), (gst_alsa_xrun_recovery):
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
+       * ext/alsa/gstalsasrc.c: (gst_alsa_src_loop):
+       * ext/audiofile/gstafsink.c: (gst_afsink_open_file),
+       (gst_afsink_close_file):
+       * ext/audiofile/gstafsrc.c: (gst_afsrc_open_file),
+       (gst_afsrc_close_file):
+       * ext/divx/gstdivxdec.c: (gst_divxdec_setup), (gst_divxdec_chain):
+       * ext/divx/gstdivxenc.c: (gst_divxenc_setup), (gst_divxenc_chain):
+       * ext/dv/gstdvdec.c: (gst_dvdec_loop):
+       * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_user_op), (dvdnavsrc_get):
+       * ext/esd/esdmon.c: (gst_esdmon_get):
+       * ext/esd/esdsink.c: (gst_esdsink_chain), (gst_esdsink_open_audio):
+       * ext/faac/gstfaac.c: (gst_faac_chain):
+       * ext/faad/gstfaad.c: (gst_faad_chain):
+       * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_chain):
+       * ext/ffmpeg/gstffmpegdemux.c: (gst_ffmpegdemux_loop):
+       * ext/ffmpeg/gstffmpegmux.c: (gst_ffmpegmux_loop):
+       * ext/flac/gstflacdec.c: (gst_flacdec_error_callback),
+       (gst_flacdec_loop):
+       * ext/flac/gstflacenc.c: (gst_flacenc_chain):
+       * ext/flac/gstflactag.c: (gst_flac_tag_chain):
+       * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_chain):
+       * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_open_file),
+       (gst_gnomevfssink_close_file):
+       * ext/gnomevfs/gstgnomevfssrc.c: (audiocast_init),
+       (gst_gnomevfssrc_open_file):
+       * ext/ivorbis/vorbisfile.c: (gst_ivorbisfile_loop):
+       * ext/lame/gstlame.c: (gst_lame_sink_link), (gst_lame_chain):
+       * ext/lcs/gstcolorspace.c: (gst_colorspace_srcconnect_func):
+       * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event),
+       (gst_id3_tag_do_typefind), (gst_id3_tag_chain):
+       * ext/mad/gstmad.c: (gst_mad_chain):
+       * ext/mikmod/gstmikmod.c: (gst_mikmod_loop):
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/mpeg2enc/gstmpeg2enc.cc:
+       * ext/mplex/gstmplex.cc:
+       * ext/mplex/gstmplexibitstream.cc:
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain),
+       (gst_ogg_demux_push):
+       * ext/raw1394/gstdv1394src.c:
+       * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_lock),
+       (gst_sdlvideosink_initsdl), (gst_sdlvideosink_create):
+       * ext/sndfile/gstsf.c: (gst_sf_open_file), (gst_sf_close_file),
+       (gst_sf_loop):
+       * ext/speex/gstspeexenc.c: (gst_speexenc_chain):
+       * ext/swfdec/gstswfdec.c: (gst_swfdec_loop):
+       * ext/tarkin/gsttarkindec.c: (gst_tarkindec_chain):
+       * ext/tarkin/gsttarkinenc.c: (gst_tarkinenc_chain):
+       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_chain):
+       * ext/vorbis/vorbisfile.c: (gst_vorbisfile_loop):
+       * ext/xvid/gstxviddec.c: (gst_xviddec_setup), (gst_xviddec_chain):
+       * ext/xvid/gstxvidenc.c: (gst_xvidenc_setup), (gst_xvidenc_chain):
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head),
+       (gst_riff_read_element_data), (gst_riff_read_seek),
+       (gst_riff_peek_list), (gst_riff_read_list), (gst_riff_read_header):
+       * gst/adder/gstadder.c: (gst_adder_loop):
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_segment),
+       (gst_asf_demux_process_stream), (gst_asf_demux_get_stream):
+       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_init),
+       (gst_avi_demux_add_stream), (gst_avi_demux_stream_header):
+       * gst/avi/gstavimux.c: (gst_avimux_stop_file):
+       * gst/flx/gstflxdec.c: (gst_flxdec_loop):
+       * gst/goom/gstgoom.c: (gst_goom_chain):
+       * gst/id3/gstid3types.c: (gst_id3types_loop):
+       * gst/intfloat/float22int.c: (gst_float2_2_int_chain):
+       * gst/intfloat/gstfloat2int.c: (gst_float2int_loop):
+       * gst/intfloat/gstint2float.c: (gst_int2float_chain_gint16):
+       * gst/matroska/ebml-read.c: (gst_ebml_read_element_id),
+       (gst_ebml_read_element_length), (gst_ebml_read_element_data),
+       (gst_ebml_read_seek), (gst_ebml_read_uint), (gst_ebml_read_sint),
+       (gst_ebml_read_float), (gst_ebml_read_header):
+       * gst/matroska/matroska-demux.c: (gst_matroska_demux_init_stream),
+       (gst_matroska_demux_parse_blockgroup):
+       * gst/monoscope/gstmonoscope.c: (gst_monoscope_chain):
+       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_loop):
+       * gst/oneton/gstoneton.c: (gst_oneton_chain):
+       * gst/silence/gstsilence.c: (gst_silence_get):
+       * gst/sine/gstsinesrc.c: (gst_sinesrc_get):
+       * gst/smpte/gstsmpte.c: (gst_smpte_loop):
+       * gst/speed/gstspeed.c: (speed_loop):
+       * gst/tags/gstvorbistag.c: (gst_vorbis_tag_chain):
+       * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get):
+       * gst/volenv/gstvolenv.c: (gst_volenv_chain):
+       * gst/wavenc/gstwavenc.c: (gst_wavenc_chain):
+       * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt),
+       (gst_wavparse_loop):
+       * sys/dxr3/dxr3audiosink.c: (dxr3audiosink_open),
+       (dxr3audiosink_set_mode_pcm), (dxr3audiosink_set_mode_ac3),
+       (dxr3audiosink_close):
+       * sys/dxr3/dxr3spusink.c: (dxr3spusink_open), (dxr3spusink_close):
+       * sys/dxr3/dxr3videosink.c: (dxr3videosink_open),
+       (dxr3videosink_close), (dxr3videosink_write_data):
+       * sys/oss/gstosselement.c: (gst_osselement_open_audio):
+       * sys/oss/gstosssink.c: (gst_osssink_chain):
+       * sys/oss/gstosssrc.c: (gst_osssrc_get):
+       * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_chain):
+       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_buffer_free):
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_buffer_free):
+       * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay),
+       (gst_v4l_set_window), (gst_v4l_enable_overlay):
+       * sys/v4l/v4l_calls.c: (gst_v4l_get_capabilities), (gst_v4l_open),
+       (gst_v4l_set_chan_norm), (gst_v4l_get_signal),
+       (gst_v4l_get_frequency), (gst_v4l_set_frequency),
+       (gst_v4l_get_picture), (gst_v4l_set_picture), (gst_v4l_get_audio),
+       (gst_v4l_set_audio):
+       * sys/v4l/v4l_calls.h:
+       * sys/v4l/v4lmjpegsink_calls.c: (gst_v4lmjpegsink_sync_thread),
+       (gst_v4lmjpegsink_queue_frame), (gst_v4lmjpegsink_set_playback),
+       (gst_v4lmjpegsink_playback_init),
+       (gst_v4lmjpegsink_playback_start):
+       * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_queue_frame):
+       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_queue_frame),
+       (gst_v4lsrc_sync_frame), (gst_v4lsrc_capture_init),
+       (gst_v4lsrc_requeue_frame), (gst_v4lsrc_try_palette):
+       * sys/v4l2/gstv4l2src.c: (gst_v4l2src_get):
+       * sys/v4l2/v4l2-overlay_calls.c: (gst_v4l2_set_display),
+       (gst_v4l2_set_window), (gst_v4l2_enable_overlay):
+       * sys/v4l2/v4l2_calls.c: (gst_v4l2_get_capabilities),
+       (gst_v4l2_fill_lists), (gst_v4l2_open), (gst_v4l2_get_norm),
+       (gst_v4l2_set_norm), (gst_v4l2_get_input), (gst_v4l2_set_input),
+       (gst_v4l2_get_output), (gst_v4l2_set_output),
+       (gst_v4l2_get_frequency), (gst_v4l2_set_frequency),
+       (gst_v4l2_signal_strength), (gst_v4l2_get_attribute),
+       (gst_v4l2_set_attribute):
+       * sys/v4l2/v4l2_calls.h:
+       * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_fill_format_list),
+       (gst_v4l2src_queue_frame), (gst_v4l2src_grab_frame),
+       (gst_v4l2src_get_capture), (gst_v4l2src_set_capture),
+       (gst_v4l2src_capture_init), (gst_v4l2src_capture_start),
+       (gst_v4l2src_capture_stop):
+       * sys/vcd/vcdsrc.c: (vcdsrc_open_file):
+       * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
+       (gst_ximagesink_chain):
+       * sys/xvideo/xvideosink.c: (gst_xvideosink_buffer_new),
+       (gst_xvideosink_sinkconnect), (gst_xvideosink_chain),
+       (gst_xvideosink_xwindow_new):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
+       (gst_xvimagesink_chain):
+
+2004-02-02  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/volume/gstvolume.c: (gst_volume_set_volume),
+       (gst_volume_get_volume), (volume_class_init), (volume_init),
+       (volume_chain_int16), (volume_update_volume):
+       * gst/volume/gstvolume.h:
+          make code more readable by removing magic numbers
+          make mixer interface export 0-100 range
+          make it internally map to 0.0-1.0 range so users don't distort
+          output by putting the sliders at full volume
+
+2004-02-02  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-libs/gst/play/play.c: (gst_play_tick_callback),
+       (gst_play_state_change), (gst_play_seek_to_time):
+        block the tick callback for 0.5 secs after doing a seek
+
+2004-02-02  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-libs/gst/play/play.c: (gst_play_new):
+          check for GError
+
+2004-02-01  Julien MOUTTE  <julien@moutte.net>
+
+       * gst-libs/gst/play/play.c: (gst_play_seek_to_time),
+       (gst_play_new): Accepting NULL GError, blocking time tick while seeking.
+       * sys/ximage/ximagesink.c: (gst_ximagesink_sink_link),
+       (gst_ximagesink_chain), (gst_ximagesink_init): s/sinkconnect/sink_link
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_sink_link),
+       (gst_xvimagesink_chain), (gst_xvimagesink_init): s/sinkconnect/sink_link
+
+2004-02-01  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * configure.ac:
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_event):
+          check for a function added in vorbis 1.1
+
+2004-01-31  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_change_state), (gst_alsa_start),
+       (gst_alsa_drain_audio), (gst_alsa_stop_audio):
+         really start/stop clock only on PLAYING <=> PAUSED
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
+         remove \n from debugging lines
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain):
+         make it work when seeking does not
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_event):
+         reset on DISCONT
+
+2004-01-31  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_change_state), (gst_alsa_start):
+         start clock on PAUSED=>PLAYING, not later
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
+         extract correct time for different discont formats
+       (gst_alsa_sink_get_time):
+         don't segfault when no format is negotiated yet, just return 0
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event),
+       (gst_ogg_demux_handle_event), (gst_ogg_demux_push),
+       (gst_ogg_pad_push):
+         handle flush and discont events correctly
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_event), (vorbis_dec_chain):
+         handle discont events correctly
+
+2004-01-31  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-libs/gst/play/play.c: (gst_play_error_quark),
+       (gst_play_error_create), (gst_play_error_plugin),
+       (gst_play_pipeline_setup), (gst_play_init), (gst_play_new):
+       * gst-libs/gst/play/play.h:
+          add error handling during creation
+       * examples/gstplay/player.c: (main):
+          use new gst_play_new
+
+
+2004-01-31  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/theora/theoradec.c: (theora_dec_chain):
+         make comments work
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_src_query),
+       (vorbis_dec_src_event), (vorbis_dec_chain):
+         add encoder tag, fix tag reading to be more error tolerant, change
+         BITRATE to NOMINAL_BITRATE, add debugging, don't unref events after
+         gst_pad_event_default.
+       * gst/tags/gstvorbistag.c:
+       (gst_tag_list_from_vorbiscomment_buffer):
+         undefine function specific define at end of function
+
+2004-01-31  Jeremy Simon  <jesimon@libertysurf.fr>
+
+       * ext/flac/gstflac.c: (plugin_init):
+       * ext/flac/gstflacdec.c: (gst_flacdec_class_init):
+       * ext/flac/gstflacdec.h:
+       * ext/flac/gstflacenc.h:
+         Fix typos
+
+2004-01-30  David I. Lehn  <dlehn@users.sourceforge.net>
+
+       * examples/gstplay/player.c: s/gstplay.h/play.h/
+
+2004-01-30  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-libs/gst/play/Makefile.am:
+       * gst-libs/gst/play/gstplay.c:
+       * gst-libs/gst/play/gstplay.h:
+       * gst-libs/gst/play/play.c:
+          more surgery, operation complete
+
+2004-01-30  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-libs/gst/play/play.old.c:
+       * gst-libs/gst/play/play.old.h:
+          after CVS surgery by moving, remove
+       * gst-libs/gst/play/playpipelines.c:
+          remove
+
+       * gst/intfloat/float22int.c: (gst_float2_2_int_chain):
+          add negotiation error
+
+2004-01-30  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_event),
+       (gst_ogg_demux_push):
+          add some seeking debug info
+          send a flush when seeking
+
+2004-01-30  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * configure.ac:
+         use AC_C_INLINE
+       * configure.ac:
+       * ext/Makefile.am:
+       * ext/theora/Makefile.am:
+       * ext/theora/theoradec.c:
+         add theora video decoder. Does just do simple decoding for now and
+         has been tested against Theora cvs only. It only works when theora
+         is compiled with --enable-static.
+       * ext/vorbis/vorbisdec.c: (vorbis_dec_event):
+         always reset packetno on DISCONT
+
+2004-01-30  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead):
+         Fix audio.
+
+2004-01-30  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/mpegaudioparse/gstmpegaudioparse.c:
+       (mp3_type_frame_length_from_header):
+         Fix header parsing - stolen from ffmpeg (thank you! :) ).
+
+2004-01-30  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/esd/esdsink.c: (gst_esdsink_init):
+         Since we have static pad template caps, we don't need to negotiate;
+         either the core errors out or we know the format.
+
+2004-01-30  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head),
+       (gst_riff_read_seek):
+       * gst/matroska/ebml-read.c: (gst_ebml_read_element_id),
+       (gst_ebml_read_seek):
+         Fix event handling.
+
+2004-01-30  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps):
+         removee video/x-theora from vp3 decoder, it doesn't handle raw
+         theora streams
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_init):
+         fix bug with finalizing element that never went to PAUSED
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_src_query):
+         length and position queries were swapped
+       * ext/vorbis/vorbisdec.c: (gst_vorbis_dec_init),
+       (vorbis_dec_from_granulepos), (vorbis_dec_src_query),
+       (vorbis_dec_src_event):
+         implement querying time and bytes
+
+2004-01-30  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+        * just about every source file:
+          gst_element_error -> GST_ELEMENT_ERROR
+
+2004-01-29  Julien MOUTTE  <julien@moutte.net>
+
+       * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_get): Fixing seeking
+       emiting FLUSH and even before DISCONT.
+       * gst-libs/gst/play/gstplay.c: (gst_play_seek_to_time): Fix seeking to
+       get the best instant seeking as possible yay!
+
+2004-01-29  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/mpeg1videoparse/gstmp1videoparse.c:
+       (gst_mp1videoparse_real_chain):
+         Committed wrong version last week... Grr... Didn't notice until now.
+
+2004-01-29  Julien MOUTTE <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_new):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_new): Emit the
+       have_xwindow_id signal in xwindow_create.
+
+2004-01-29  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/ogg/gstoggdemux.c:
+         lots of changes - mainly support for chained bitstreams, seeking,
+         querying and bugfixes of course
+       * ext/vorbis/Makefile.am:
+       * ext/vorbis/vorbisdec.c:
+       * ext/vorbis/vorbisdec.h:
+         add vorbisdec raw vorbis decoder
+       * ext/vorbis/vorbis.c: (plugin_init):
+         register vorbisdec as PRIMARY, vorbisfile as SECONDARY
+       * gst/intfloat/Makefile.am:
+       * gst/intfloat/float22int.c:
+       * gst/intfloat/float22int.h:
+       * gst/intfloat/gstintfloatconvert.c: (plugin_init):
+         add float2intnew plugin. It converts multichannel interleaved float to
+         multichannel interleaved int. The name should probably be changed.
+       * gst/typefind/gsttypefindfunctions.c: (theora_type_find),
+       (plugin_init):
+         add typefinding for raw theora video so oggdemux can detect it.
+
+2004-01-28  Julien MOUTTE  <julien@moutte.net>
+
+       * gst-libs/gst/play/gstplay.c: (gst_play_seek_to_time): seek on video
+       sink element first.
+       * gst/videoscale/gstvideoscale.c:
+       (gst_videoscale_handle_src_event): Fixing src event handler.
+
+2004-01-28  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_class_init), (gst_v4lsrc_init),
+       (gst_v4lsrc_open), (gst_v4lsrc_close),
+       (gst_v4lsrc_palette_to_caps), (gst_v4lsrc_srcconnect),
+       (gst_v4lsrc_getcaps), (gst_v4lsrc_set_clock):
+       * sys/v4l/gstv4lsrc.h:
+       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_capture_start),
+       (gst_v4lsrc_grab_frame), (gst_v4lsrc_capture_stop):
+         Implement resizing... Hack. But that's why v4l is b0rked...
+
+2004-01-28  Julien MOUTTE <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls),
+       (gst_ximagesink_ximage_new), (gst_ximagesink_ximage_destroy),
+       (gst_ximagesink_ximage_put), (gst_ximagesink_xwindow_new),
+       (gst_ximagesink_xwindow_destroy):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
+       (gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_destroy),
+       (gst_xvimagesink_xwindow_new), (gst_xvimagesink_xwindow_destroy),
+       (gst_xvimagesink_xwindow_resize), (gst_xvimagesink_get_xv_support),
+       (gst_xvimagesink_xcontext_get): Removing some useless debugs messages,
+       correctly cleaning the image created to check xshm calls on succes,
+       added a lot of XSync calls in X11 functions, and fixed a segfault when
+       no image format was defined before negotiation happened.
+
+2004-01-28  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_query_func):
+         use gst_element_get_time to get correct time
+
+2004-01-28  Julien MOUTTE  <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xerror),
+       (gst_ximagesink_check_xshm_calls), (gst_ximagesink_ximage_destroy),
+       (gst_ximagesink_xcontext_get), (gst_ximagesink_class_init):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xerror),
+       (gst_xvimagesink_check_xshm_calls),
+       (gst_xvimagesink_xvimage_destroy), (gst_xvimagesink_xcontext_get): Our
+       X plugins are now able to detect that XShm calls will fail even if the
+       server claims that it has XShm support (remote displays most of the
+       time). We then log the error as a GST_DEBUG and set use_shm to FALSE
+       so that we use non XShm functions. This feature is almost useless for
+       xvimagesink as Xv is not supported on remote displays anyway, but
+       it might happen than even on the local display XShm calls fail.
+
+2004-01-27  David Schleef  <ds@schleef.org>
+
+       * ext/esd/esdsink.c: (gst_esdsink_class_init), (gst_esdsink_init),
+       (gst_esdsink_link), (gst_esdsink_get_time), (gst_esdsink_chain),
+       (gst_esdsink_change_state):  Fix sync issues in esdsink.  Also
+       changed esdsink to only use 44100,16,2, since esd sucks at rate
+       conversion and esdsink has had difficulty negotiating.
+
+2004-01-27  Julien MOUTTE <julien@moutte.net>
+
+       * gst-libs/gst/play/gstplay.c: (gst_play_tick_callback),
+       (gst_play_seek_to_time): Fixing the way to get current position.
+
+2004-01-27  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * sys/oss/gstosssink.c: (gst_osssink_sink_query):
+         use gst_element_get_time to get correct time
+
+2004-01-27  Julien MOUTTE <julien@moutte.net>
+
+       * gst-libs/gst/play/gstplay.c: (gst_play_set_location): The easiest
+       fix ever... Inverting 2 lines of code make spider autoplug correctly
+       tagged mp3 !
+
+2004-01-27  David Schleef  <ds@schleef.org>
+
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
+       Use gst_pad_try_set_caps_nonfixed().
+
+2004-01-27  David Schleef  <ds@schleef.org>
+
+       * gst/ac3parse/gstac3parse.c: update to checklist 5
+       * gst/adder/gstadder.c: rewrite negotiation.  update to checklist 5
+       * gst/audioconvert/gstaudioconvert.c: update to checklist 5
+       * gst/audioscale/gstaudioscale.c: same
+       * gst/auparse/gstauparse.c: same
+       * gst/avi/gstavidemux.c: same
+
+2004-01-27  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_handle_sink_event):
+         stop processing after EOS
+
+2004-01-27  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst/asfdemux/asfheaders.h:
+       * gst/asfdemux/gstasfdemux.c:
+       * gst/asfdemux/gstasfmux.c: (gst_asfmux_put_guid),
+       (gst_asfmux_put_string), (gst_asfmux_put_wav_header),
+       (gst_asfmux_put_vid_header), (gst_asfmux_put_bmp_header):
+         lot's of fixes to make data extraction simpler and get the code
+         architecture and compiler independant. Add debugging category
+       * gst/goom/gstgoom.c: (gst_goom_change_state):
+         reset channel count on PAUSED=>READY, not READY=>PAUSED
+
+2004-01-26  Colin Walters  <walters@verbum.org>
+
+       * ext/gnomevfs/gstgnomevfssrc.c (gst_gnomevfssrc_get): Remove ugly
+       code to pull a bigger buffer in iradio mode.  This as a side effect
+       makes typefinding work.
+
+2004-01-26  Jeremy Simon  <jesimon@libertysurf.fr>
+
+       * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_caps_to_extradata):
+       Fix SVQ3 decoding on PPC
+
+2004-01-26  Julien MOUTTE <julien@moutte.net>
+
+       * gst/videoscale/gstvideoscale.c: (gst_videoscale_chain): Dunno how
+       that one managed to stay there... Fixed.
+
+2004-01-26  Jeremy Simon  <jesimon@libertysurf.fr>
+
+       * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps),
+       (gst_ffmpeg_caps_to_extradata), (gst_ffmpeg_caps_to_pixfmt):
+       * gst/qtdemux/qtdemux.c: (plugin_init), (qtdemux_parse_trak),
+       (qtdemux_video_caps):
+       * gst/qtdemux/qtdemux.h:
+       Add SVQ3 specific flags to qtdemux and ffmpeg
+
+2004-01-26  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst-libs/gst/audio/audio.h:
+         remove buffer-frames from audio caps
+       * gst/audioconvert/gstaudioconvert.c:
+         fix plugin to really work.
+
+2004-01-25  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/mixer/mixer.c:
+       * gst-libs/gst/propertyprobe/propertyprobe.c:
+       * gst-libs/gst/tuner/tuner.c: (gst_tuner_find_norm_by_name),
+       (gst_tuner_find_channel_by_name):
+       * gst-libs/gst/tuner/tuner.h:
+         Add gtk-doc style comments. Also fix a function name.
+
+2004-01-25  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/divx/gstdivxdec.c: (gst_divxdec_init),
+       (gst_divxdec_negotiate):
+         Fix for new capsnego - also fixes gst-player with divxdec.
+
+2004-01-25  Julien MOUTTE  <julien@moutte.net>
+
+       * gst-libs/gst/play/gstplay.c: (gst_play_pipeline_setup),
+       (gst_play_identity_handoff), (gst_play_set_location),
+       (gst_play_set_visualization), (gst_play_connect_visualization): Another
+       try in visualization implementation. Still have an issue with switch
+       blocking when pulling from video_queue and only audio comes out of
+       spider.
+       * gst/switch/gstswitch.c: (gst_switch_release_pad),
+       (gst_switch_poll_sinkpads), (gst_switch_class_init): Implementing pad
+       release method. And check if the pad is usable before pulling.
+
+2004-01-25  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/videofilter/gstvideobalance.c: (gst_videobalance_dispose),
+       (gst_videobalance_init),
+       (gst_videobalance_colorbalance_list_channels),
+       (gst_videobalance_colorbalance_set_value),
+       (gst_videobalance_colorbalance_get_value),
+       (gst_videobalance_update_properties),
+       (gst_videobalance_update_tables_planar411),
+       (gst_videobalance_planar411):
+       * gst/videofilter/gstvideobalance.h:
+         Implement lookup-tables. +/- 10x faster.
+
+2004-01-25  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_avih),
+       (gst_avi_demux_stream_odml), (gst_avi_demux_stream_index):
+         The index reading was broken. The rest worked fine, but the whole
+         goal of my rewrite was to make avidemux readable, and this was
+         not at all readable. Please use typed variables.
+
+2004-01-25  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_info):
+         Additional pad usability check.
+       * gst/mpeg1videoparse/gstmp1videoparse.c: (gst_mp1videoparse_init),
+       (mp1videoparse_find_next_gop), (gst_mp1videoparse_time_code),
+       (gst_mp1videoparse_real_chain):
+         Fix MPEG video stream parsing. The original plugin had several
+         issues, including not timestamping streams where the source was
+         not timestamped (this happens with PTS values in mpeg system
+         streams, but MPEG video is also a valid stream on its own so
+         that needs timestamps too). We use the display time code for that
+         for now. Also, if one incoming buffer contains multiple valid
+         frames, we push them all on correctly now, including proper EOS
+         handling. Lastly, several potential segfaults were fixed, and we
+         properly sync on new sequence/gop headers to include them in next,
+         not previous frames (since they're header for the next frame, not
+         the previous). Also see #119206.
+       * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_chain),
+       (bpf_from_header):
+         Move caps setting so we only do it after finding several valid
+         MPEG-1 fraes sequentially, not right after the first one (which
+         might be coincidental).
+       * gst/typefind/gsttypefindfunctions.c: (mpeg1_sys_type_find),
+       (mpeg_video_type_find), (mpeg_video_stream_type_find),
+       (plugin_init):
+         Add unsynced MPEG video stream typefinding, and change some
+         probability values so we detect streams rightly. The idea is as
+         follows: I can have an unsynced system stream which contains
+         video. In the current code, I would randomly get a type for either
+         system or video stream type found, because the probabilities are
+         being calculated rather randomly. I now use fixed values, so we
+         always prefer system stream if that was found (and that is how it
+         should be). If no system stream was found, we can still identity                the stream as video-only.
+
+2004-01-23  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_avih),
+       (gst_avi_demux_stream_odml), (gst_avi_demux_stream_index):
+         don't write to buffer. Extract data without the need of
+         __attribute__ ((packed))
+
+2004-01-23  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/typefind/gsttypefindfunctions.c: (mpeg1_parse_header),
+       (mpeg1_sys_type_find):
+         Fix MPEG-1 stream typefinding.
+
+2004-01-23  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/typefind/gsttypefindfunctions.c: (mpeg2_sys_type_find):
+         Fix typefinding for MPEG-1 system streams, similar to MPEG-2.
+
+2004-01-23  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/esd/esdsink.c: (gst_esdsink_open_audio):
+       * ext/esd/gstesd.c: (plugin_init):
+          private debugging, better error reporting
+
+2004-01-23  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_class_init),
+       (gst_riff_read_init), (gst_riff_read_change_state):
+       * gst-libs/gst/riff/riff-read.h:
+         Remove stuff fromold metadata system.
+
+2004-01-23  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ogg/gstoggdemux.c:
+         Fix wrong file comment.
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_info):
+       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_header):
+         Add metadata reading properly.
+
+2004-01-23  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/Makefile.am:
+          Fix nas DIST_SUBDIRS
+          Uraeus:
+          Fix bug where make distcheck doesn't get run on adding stuff to
+          the build.
+
+2004-01-23  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/divx/gstdivxdec.c: (gst_divxdec_init), (gst_divxdec_setup):
+       * ext/divx/gstdivxdec.h:
+         Fix divx3 ("msmpeg4") playback using divxdec.
+
+2004-01-23  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst/typefind/gsttypefindfunctions.c:
+       (mp3_type_frame_length_from_header): fix bug in length computation
+       (mp3_type_find): improve debugging output
+
+2004-01-23  Julien MOUTTE  <julien@moutte.net>
+
+       * gst-libs/gst/play/gstplay.c: (gst_play_pipeline_setup),
+       (gst_play_set_location), (gst_play_seek_to_time),
+       (gst_play_set_audio_sink), (gst_play_set_visualization),
+       (gst_play_connect_visualization), (gst_play_get_sink_element): Reworked
+       the pipeline from scratch. Visualization is back and switch went out as
+       i realized it was not possible to use the way i wanted.
+       * sys/ximage/ximagesink.c: (gst_ximagesink_imagepool_clear),
+       (gst_ximagesink_change_state), (gst_ximagesink_dispose): Move xcontext
+       clearing in state change from READY to NULL. So that one can clean the
+       X ressources keeping the element.
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
+       (gst_xvimagesink_imagepool_clear), (gst_xvimagesink_change_state),
+       (gst_xvimagesink_colorbalance_set_value),
+       (gst_xvimagesink_colorbalance_get_value),
+       (gst_xvimagesink_set_property), (gst_xvimagesink_dispose),
+       (gst_xvimagesink_init): Same xcontext cleaning than ximagesink in state
+       change from READY to NULL and fixed some stupid bugs in colorbalance
+       get/set values. Also added the following feature : when nobody tries to
+       set some values to the colorbalance levels before the xcontext is
+       grabbed, then when creating channels list from Xv attributes we set the
+       internal values to the Xv defaults. This way we handle buggy Xv drivers
+       that set default hue values far from the middle of the range (Thanks
+       to Jon Trowbridge for pointing that issue).
+       * sys/xvimage/xvimagesink.h: Adding a cb_changed boolean to know if
+       colorbalance levels have been set before xcontext is grabbed.
+
+2004-01-22  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/oss/gstosselement.c: (gst_osselement_class_probe_devices):
+         Fix the ossmixer case where we shouldn't open /dev/dsp* because
+         it might block operations (which is bad for a mixer).
+
+2004-01-22  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-libs/gst/media-info/media-info-priv.c: (have_type_callback),
+       (deep_notify_callback), (gmi_set_decoder), (gmi_clear_decoder),
+       (gmip_find_type_pre):
+       * gst-libs/gst/media-info/media-info-priv.h:
+       * gst-libs/gst/media-info/media-info.c:
+       (gst_media_info_instance_init), (gst_media_info_read_idler):
+        add fakesink to get caps on decoder src pad again
+        fix callback prototype to match new have_type signal signature
+
+2004-01-22  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/adder/gstadder.c: (gst_adder_link):
+          fix non-compile and cut-n-paste code
+
+2004-01-21  David Schleef  <ds@schleef.org>
+
+       * ext/swfdec/gstswfdec.c: (gst_swfdec_video_getcaps),
+       (gst_swfdec_video_link), (copy_image), (gst_swfdec_loop),
+       (gst_swfdec_init), (gst_swfdec_change_state):
+       * ext/swfdec/gstswfdec.h:
+       Fix negotiation.
+       * gst/adder/gstadder.c: (gst_adder_link), (gst_adder_init),
+       (gst_adder_request_new_pad): Fix negotiation.
+       * gst/goom/gstgoom.c: (gst_goom_init), (gst_goom_src_fixate):
+       Add a fixate function.
+       * gst/intfloat/gstfloat2int.c:
+       * gst/intfloat/gstfloat2int.h:
+       * gst/intfloat/gstint2float.c:
+       * gst/intfloat/gstint2float.h:
+       Completely rewrite the negotiation.  Doesn't quite work yet,
+       due to some buffer-frames problem.
+
+2004-01-21  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/gnomevfs/gstgnomevfssrc.c:
+       * sys/v4l2/v4l2_calls.h:
+          fix includes for distcheck
+
+2004-01-21  Christian Schaller <uraeus@gnome.org>
+
+       * ext/nas/
+       Add libnas (network audio system) plugin, patch from Arwed von Merkatz
+       based on earlier patch from Laurent Vivier
+
+2004-01-20  Jeremy Simon  <jesimon@libertysurf.fr>
+
+       * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_caps_to_extradata):
+       Fix wma caps property
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_audio_caps):
+       Fix typo (flags1 and flags2)
+
+2004-01-20  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-libs/gst/media-info/media-info-priv.c:
+       (deep_notify_callback), (gmi_seek_to_track), (gmi_get_decoder),
+       (gmip_find_type_pre), (gmip_find_type), (gmip_find_stream_post),
+       (gmip_find_stream), (gmip_find_track_metadata),
+       (gmip_find_track_streaminfo_post), (gmip_find_track_streaminfo),
+       (gmip_find_track_format):
+       * gst-libs/gst/media-info/media-info-priv.h:
+       * gst-libs/gst/media-info/media-info-test.c: (main):
+       * gst-libs/gst/media-info/media-info.c: (gst_media_info_init),
+       (gst_media_info_read_idler), (gst_media_info_read):
+       * gst-libs/gst/media-info/media-info.h:
+          register debugging category and use it for debugging
+
+2004-01-20  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/vorbis/vorbisfile.c: (gst_vorbisfile_update_streaminfo),
+       (gst_vorbisfile_new_link):
+          signal streaminfo through tags
+
+2004-01-20  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/mplex/gstmplex.cc:
+       * ext/mplex/gstmplexibitstream.cc:
+         g++ doesn't like NULL in our i18n/error macros, should be
+         either (NULL) or ("").
+
+2004-01-20  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/dxr3/dxr3audiosink.c:
+       * sys/dxr3/dxr3init.c:
+       * sys/dxr3/dxr3spusink.c: (dxr3spusink_close):
+       * sys/dxr3/dxr3videosink.c: (dxr3videosink_close):
+         Fix more error error error errors (missing includes here).
+
+2004-01-20  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/mpeg2enc/gstmpeg2encpicturereader.cc:
+         fix thomas' error errors.
+
+2004-01-20  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/mpeg2enc/gstmpeg2enc.cc:
+          fix error errors.
+
+2004-01-20  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/divx/gstdivxdec.c: (gst_divxdec_setup), (gst_divxdec_chain):
+       * ext/divx/gstdivxenc.c: (gst_divxenc_setup), (gst_divxenc_chain):
+         Fix for new error system.
+
+2004-01-20  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/divx/gstdivxenc.c: (gst_divxenc_setup), (gst_divxenc_chain):
+          fix for new error reporting
+
+2004-01-20  David Schleef  <ds@schleef.org>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents),
+       (gst_ximagesink_xcontext_get), (gst_ximagesink_getcaps),
+       (gst_ximagesink_set_xwindow_id): Change to using a framerate
+       of [1,100] instead of [0,MAX], since 0 isn't handled correctly,
+       and neither is 100+, most likely.
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
+       (gst_xvimagesink_getcaps): same
+
+2004-01-19  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * configure.ac:
+         Up version requirement to 2.0.3 (not yet released) to avoid symbol
+         clashes with ffmpeg.
+
+2004-01-20  Julien MOUTTE  <julien@moutte.net>
+
+       * gst/switch/gstswitch.c: (gst_switch_request_new_pad),
+       (gst_switch_init): Fixed switch element : proxying link and setting
+       caps from src to sink on request.
+
+2004-01-19  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_overlay):
+       * sys/v4l2/v4l2-overlay_calls.c: (gst_v4l2_set_display),
+       (gst_v4l2_set_window), (gst_v4l2_enable_overlay):
+        fix element_error
+
+2004-01-19  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/v4l/v4l_calls.h:
+       * sys/v4l2/v4l2_calls.h:
+          element_error fixes
+
+2004-01-19  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-libs/gst/gst-i18n-plugin.h:
+          add locale.h
+          remove config.h inclusion
+
+2004-01-19  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * autogen.sh:
+          adding autopoint invocation
+       * Makefile.am:
+       * configure.ac:
+       * gst-libs/gst/gettext.h:
+          adding gettext bits
+       * ext/audiofile/gstafsink.c: (gst_afsink_plugin_init):
+       * ext/audiofile/gstafsrc.c: (gst_afsrc_plugin_init):
+       * ext/gnomevfs/gstgnomevfs.c: (plugin_init):
+       * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_open_file),
+       (gst_gnomevfssink_close_file):
+       * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnomevfssrc_open_file):
+       * ext/sndfile/gstsf.c: (gst_sf_loop), (plugin_init):
+       * gst-libs/gst/gst-i18n-plugin.h:
+       * gst/avi/gstavi.c: (plugin_init):
+       * sys/dxr3/dxr3init.c: (plugin_init):
+       * sys/dxr3/dxr3videosink.c: (dxr3videosink_write_data):
+       * sys/oss/gstossaudio.c: (plugin_init):
+       * sys/oss/gstosselement.c: (gst_osselement_open_audio):
+       * sys/v4l/gstv4l.c: (plugin_init):
+       * sys/v4l/v4l_calls.c: (gst_v4l_open):
+       * sys/v4l2/gstv4l2.c: (plugin_init):
+       * sys/v4l2/v4l2_calls.c: (gst_v4l2_get_capabilities),
+       (gst_v4l2_fill_lists), (gst_v4l2_get_norm), (gst_v4l2_set_norm),
+       (gst_v4l2_get_input), (gst_v4l2_set_input), (gst_v4l2_get_output),
+       (gst_v4l2_set_output), (gst_v4l2_get_frequency),
+       (gst_v4l2_set_frequency), (gst_v4l2_signal_strength),
+       (gst_v4l2_get_attribute), (gst_v4l2_set_attribute):
+         make sure locale and translation domain are set
+          fix translated strings
+       * po/.cvsignore:
+       * po/LINGUAS:
+       * po/Makevars:
+       * po/POTFILES.in:
+       * po/nl.po:
+          put translation files into place
+       * sys/xvideo/imagetest.c: (main):
+       * ext/dv/demo-play.c: (main):
+          fix unnecessary translations
+
+2004-01-19  Thomas Vander Stichele  <thomas (at) apestaart (dot) org>
+
+       * ext/sndfile/gstsf.c:
+       * gst/avi/gstavimux.c:
+       * ext/audiofile/gstafsink.c:
+       * ext/audiofile/gstafsrc.c:
+       * ext/gnomevfs/gstgnomevfssink.c:
+       * ext/gnomevfs/gstgnomevfssrc.c:
+       * sys/oss/gstosselement.c:
+       * sys/v4l/v4l_calls.h:
+          fix i18n include
+
+2004-01-19  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/v4l2/v4l2_calls.c: (gst_v4l2_get_capabilities),
+       (gst_v4l2_fill_lists), (gst_v4l2_open), (gst_v4l2_get_norm),
+       (gst_v4l2_set_norm), (gst_v4l2_get_input), (gst_v4l2_set_input),
+       (gst_v4l2_get_output), (gst_v4l2_set_output),
+       (gst_v4l2_get_frequency), (gst_v4l2_set_frequency),
+       (gst_v4l2_signal_strength), (gst_v4l2_get_attribute),
+       (gst_v4l2_set_attribute):
+        update to new error handling
+
+2004-01-19  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ext/sidplay/gstsiddec.cc:
+       * gst/modplug/gstmodplug.cc:
+          parenthese NULL because C++ seems angry about it
+
+2004-01-19  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-libs/gst/gst-i18n-plugin.h:
+          add skeleton i18n stuff, but needs to be further implemented
+
+2004-01-18  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * examples/gstplay/player.c: (main):
+       * ext/aalib/gstaasink.c: (gst_aasink_open):
+       * ext/alsa/gstalsa.c: (gst_alsa_link), (gst_alsa_xrun_recovery):
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_loop):
+       * ext/alsa/gstalsasrc.c: (gst_alsa_src_loop):
+       * ext/audiofile/gstafsink.c: (gst_afsink_open_file),
+       (gst_afsink_close_file):
+       * ext/audiofile/gstafsrc.c: (gst_afsrc_open_file),
+       (gst_afsrc_close_file):
+       * ext/divx/gstdivxdec.c: (gst_divxdec_setup), (gst_divxdec_chain):
+       * ext/dv/gstdvdec.c: (gst_dvdec_loop):
+       * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_user_op), (dvdnavsrc_get):
+       * ext/esd/esdmon.c: (gst_esdmon_get):
+       * ext/esd/esdsink.c: (gst_esdsink_chain):
+       * ext/faac/gstfaac.c: (gst_faac_chain):
+       * ext/faad/gstfaad.c: (gst_faad_chain):
+       * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_chain):
+       * ext/ffmpeg/gstffmpegdemux.c: (gst_ffmpegdemux_loop):
+       * ext/ffmpeg/gstffmpegmux.c: (gst_ffmpegmux_loop):
+       * ext/flac/gstflacdec.c: (gst_flacdec_error_callback),
+       (gst_flacdec_loop):
+       * ext/flac/gstflacenc.c: (gst_flacenc_chain):
+       * ext/flac/gstflactag.c: (gst_flac_tag_chain):
+       * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_chain):
+       * ext/gnomevfs/gstgnomevfssink.c: (gst_gnomevfssink_open_file),
+       (gst_gnomevfssink_close_file):
+       * ext/gnomevfs/gstgnomevfssrc.c: (audiocast_init),
+       (gst_gnomevfssrc_open_file):
+       * ext/ivorbis/vorbisfile.c: (gst_ivorbisfile_loop):
+       * ext/lame/gstlame.c: (gst_lame_sink_link), (gst_lame_chain):
+       * ext/lcs/gstcolorspace.c: (gst_colorspace_srcconnect_func):
+       * ext/mad/gstid3tag.c: (gst_id3_tag_handle_event),
+       (gst_id3_tag_do_typefind), (gst_id3_tag_chain):
+       * ext/mad/gstmad.c: (gst_mad_chain):
+       * ext/mikmod/gstmikmod.c: (gst_mikmod_loop):
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * ext/mpeg2enc/gstmpeg2enc.cc:
+       * ext/mpeg2enc/gstmpeg2encpicturereader.cc:
+       * ext/mplex/gstmplex.cc:
+       * ext/mplex/gstmplexibitstream.cc:
+       * ext/ogg/gstoggdemux.c: (gst_ogg_demux_chain),
+       (gst_ogg_demux_push), (gst_ogg_pad_push):
+       * ext/raw1394/gstdv1394src.c:
+       * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_lock),
+       (gst_sdlvideosink_initsdl), (gst_sdlvideosink_create):
+       * ext/sidplay/gstsiddec.cc:
+       * ext/sndfile/gstsf.c: (gst_sf_open_file), (gst_sf_close_file),
+       (gst_sf_loop):
+       * ext/speex/gstspeexenc.c: (gst_speexenc_chain):
+       * ext/tarkin/gsttarkindec.c: (gst_tarkindec_chain):
+       * ext/tarkin/gsttarkinenc.c: (gst_tarkinenc_chain):
+       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_chain):
+       * ext/vorbis/vorbisfile.c: (gst_vorbisfile_loop):
+       * ext/xvid/gstxviddec.c: (gst_xviddec_setup), (gst_xviddec_chain):
+       * ext/xvid/gstxvidenc.c: (gst_xvidenc_setup), (gst_xvidenc_chain):
+       * gst-libs/gst/Makefile.am:
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_peek_head),
+       (gst_riff_read_element_data), (gst_riff_read_seek),
+       (gst_riff_peek_list), (gst_riff_read_list), (gst_riff_read_header):
+       * gst/adder/gstadder.c: (gst_adder_parse_caps), (gst_adder_loop):
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_segment),
+       (gst_asf_demux_process_stream), (gst_asf_demux_get_stream):
+       * gst/avi/gstavidemux.c: (gst_avi_demux_stream_init),
+       (gst_avi_demux_add_stream), (gst_avi_demux_stream_header):
+       * gst/avi/gstavimux.c: (gst_avimux_stop_file):
+       * gst/flx/gstflxdec.c: (gst_flxdec_loop):
+       * gst/goom/gstgoom.c: (gst_goom_chain):
+       * gst/id3/gstid3types.c: (gst_id3types_loop):
+       * gst/intfloat/gstfloat2int.c: (gst_float2int_loop):
+       * gst/intfloat/gstint2float.c: (gst_int2float_chain_gint16):
+       * gst/matroska/ebml-read.c: (gst_ebml_read_element_id),
+       (gst_ebml_read_element_length), (gst_ebml_read_element_data),
+       (gst_ebml_read_seek), (gst_ebml_read_uint), (gst_ebml_read_sint),
+       (gst_ebml_read_float), (gst_ebml_read_header):
+       * gst/matroska/matroska-demux.c: (gst_matroska_demux_init_stream),
+       (gst_matroska_demux_parse_blockgroup):
+       * gst/modplug/gstmodplug.cc:
+       * gst/monoscope/gstmonoscope.c: (gst_monoscope_chain):
+       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_loop):
+       * gst/oneton/gstoneton.c: (gst_oneton_chain):
+       * gst/silence/gstsilence.c: (gst_silence_get):
+       * gst/sine/gstsinesrc.c: (gst_sinesrc_get):
+       * gst/smpte/gstsmpte.c: (gst_smpte_loop):
+       * gst/speed/gstspeed.c: (speed_loop):
+       * gst/tags/gstvorbistag.c: (gst_vorbis_tag_chain):
+       * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get):
+       * gst/volenv/gstvolenv.c: (gst_volenv_chain):
+       * gst/wavenc/gstwavenc.c: (gst_wavenc_chain):
+       * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt),
+       (gst_wavparse_loop):
+       * sys/dxr3/dxr3audiosink.c: (dxr3audiosink_open),
+       (dxr3audiosink_set_mode_pcm), (dxr3audiosink_set_mode_ac3),
+       (dxr3audiosink_close):
+       * sys/dxr3/dxr3spusink.c: (dxr3spusink_open), (dxr3spusink_close):
+       * sys/dxr3/dxr3videosink.c: (dxr3videosink_open),
+       (dxr3videosink_close), (dxr3videosink_write_data):
+       * sys/oss/gstosselement.c: (gst_osselement_open_audio):
+       * sys/oss/gstosselement.h:
+       * sys/oss/gstosssink.c: (gst_osssink_get_type), (gst_osssink_init),
+       (gst_osssink_chain):
+       * sys/oss/gstosssrc.c: (gst_osssrc_get):
+       * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_chain):
+       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_buffer_free):
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_buffer_free):
+       * sys/v4l/v4l-overlay_calls.c: (gst_v4l_set_window),
+       (gst_v4l_enable_overlay):
+       * sys/v4l/v4l_calls.c: (gst_v4l_get_capabilities), (gst_v4l_open),
+       (gst_v4l_set_chan_norm), (gst_v4l_get_signal),
+       (gst_v4l_get_frequency), (gst_v4l_set_frequency),
+       (gst_v4l_get_picture), (gst_v4l_set_picture), (gst_v4l_get_audio),
+       (gst_v4l_set_audio):
+       * sys/v4l/v4l_calls.h:
+       * sys/v4l/v4lmjpegsink_calls.c: (gst_v4lmjpegsink_sync_thread),
+       (gst_v4lmjpegsink_queue_frame), (gst_v4lmjpegsink_set_playback),
+       (gst_v4lmjpegsink_playback_init),
+       (gst_v4lmjpegsink_playback_start):
+       * sys/v4l/v4lmjpegsrc_calls.c: (gst_v4lmjpegsrc_queue_frame),
+       (gst_v4lmjpegsrc_sync_next_frame), (gst_v4lmjpegsrc_set_capture),
+       (gst_v4lmjpegsrc_set_capture_m), (gst_v4lmjpegsrc_capture_init),
+       (gst_v4lmjpegsrc_requeue_frame):
+       * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_queue_frame),
+       (gst_v4lsrc_sync_frame), (gst_v4lsrc_capture_init),
+       (gst_v4lsrc_requeue_frame), (gst_v4lsrc_try_palette):
+       * sys/v4l2/gstv4l2src.c: (gst_v4l2src_get):
+       * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_fill_format_list),
+       (gst_v4l2src_queue_frame), (gst_v4l2src_grab_frame),
+       (gst_v4l2src_get_capture), (gst_v4l2src_set_capture),
+       (gst_v4l2src_capture_init), (gst_v4l2src_capture_start),
+       (gst_v4l2src_capture_stop):
+       * sys/vcd/vcdsrc.c: (vcdsrc_open_file):
+       * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
+       (gst_ximagesink_chain):
+       * sys/xvideo/xvideosink.c: (gst_xvideosink_buffer_new),
+       (gst_xvideosink_sinkconnect), (gst_xvideosink_chain),
+       (gst_xvideosink_xwindow_new):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
+       (gst_xvimagesink_chain):
+        use new error signal, function and categories
+
+2004-01-18  Jeremy Simon <jesimon@libertysurf.fr>
+
+       * configure.ac:
+       * ext/Makefile.am:
+       * ext/musicbrainz/gsttrm.c:
+       * ext/musicbrainz/gsttrm.h:
+       * ext/musicbrainz/Makefile.am:
+       Add a trm plugin
+
+2004-01-18  Julien MOUTTE  <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_set_property),
+       (gst_ximagesink_get_property), (gst_ximagesink_class_init): Adding
+       synchronous property for debugging.
+       * sys/ximage/ximagesink.h: Adding the synchronous boolean flag.
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
+       (gst_xvimagesink_set_property): Moving a pointer declaration to a
+       smaller block, fixing indent.
+
+2004-01-16  David Schleef  <ds@schleef.org>
+
+       * gst/videofilter/gstvideobalance.c: Fix regression; changing a
+       property affects the video stream.
+       * sys/xvimage/xvimagesink.c:
+       * sys/xvimage/xvimagesink.h:
+       Add synchronous property for debugging.  Should probably be
+       disabled in non-CVS builds.  Make sure that the Xv attribute
+       exists before we set it (crash!).  Fix a silly float bug that
+       caused colorbalance to just not work.
+
+2004-01-17  Christian Schaller <Uraeus@gnome.org>
+
+       * tools/gst-launch-ext.in - update for new plugins
+
+2004-01-16  David Schleef  <ds@schleef.org>
+
+       * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_connect): Fix use of
+       already-freed caps.
+
+2994-01-16  Christian Schaller <Uraeus@gnome.org>
+
+       * Update spec for new colorspace plugin and libcaca plugin
+       * Fix compilation of libcaca plugin (clock -> id)
+
+2004-01-16  Julien MOUTTE <julien@moutte.net>
+
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_update_colorbalance),
+       (gst_xvimagesink_xcontext_get), (gst_xvimagesink_change_state),
+       (gst_xvimagesink_set_xwindow_id),
+       (gst_xvimagesink_colorbalance_set_value),
+       (gst_xvimagesink_colorbalance_get_value),
+       (gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
+       (gst_xvimagesink_init), (gst_xvimagesink_class_init): Implementing
+       correct colorbalance properties. They can now be set when the element
+       is still in NULL state. The values will be committed to the Xv Port
+       when xcontext is initialized.
+       * sys/xvimage/xvimagesink.h: Added hue, saturation, contrast,
+       brightness int values in the GstXvImagesink structure.
+
+2004-01-16  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst-libs/gst/Makefile.am:
+         restructure so having local patches works easier.
+
+2004-01-16  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/mpeg2enc/Makefile.am:
+       * ext/mpeg2enc/gstmpeg2enc.cc:
+       * ext/mpeg2enc/gstmpeg2encpicturereader.cc:
+         Bugfix with respect to EOS handling.
+
+2004-01-16  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_connect):
+         Link with right caps (else, it segfaults).
+       * ext/mplex/gstmplexjob.cc:
+         Fix for slight API change in 1.6.1.93 release of mjpegtools.
+
+2004-01-15  David Schleef  <ds@schleef.org>
+
+       * gst-libs/gst/audio/Makefile.am:
+       Add gstaudiofiltertemplate.c and building of gstaudiofilterexample.c
+       from the template.
+       * gst-libs/gst/audio/gstaudiofilter.c:
+       * gst-libs/gst/audio/gstaudiofilter.h:
+       Add bytes_per_sample and size and n_samples calculation.
+       * gst-libs/gst/audio/gstaudiofilterexample.c:
+       Remove, now autogenerated.
+       * gst-libs/gst/audio/gstaudiofiltertemplate.c:
+       Moved from gstaudiofilterexample, object name changed, code added
+       so that it actually works.
+       * gst-libs/gst/audio/make_filter:
+       Script to build an audiofilter subclass from the template.
+       * gst/colorspace/Makefile.am:
+       * gst/colorspace/yuv2yuv.c:
+       Remove file, since it's GPL, and we don't use it.
+
+2004-01-15  Julien MOUTTE  <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_chain):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain): Making both of
+       them use the buffer free function to test how the buffer was allocated.
+
+2004-01-15  David Schleef  <ds@schleef.org>
+
+       * ext/esd/esdsink.c: (gst_esdsink_class_init): Remove property
+       that handles osssink fallback.
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_init),
+       (gst_audio_convert_getcaps):
+       * gst/qtdemux/qtdemux.c: (qtdemux_audio_caps):
+       Add audio/x-qdm2 for QDM2 audio.
+       * gst/sine/gstsinesrc.c: (gst_sinesrc_get):
+       * gst/sine/gstsinesrc.h: Add example of how to implement tags.
+       * gst/videoscale/gstvideoscale.c: (gst_videoscale_getcaps):
+       Decrease minimum size to 16x16.
+       * gst/wavparse/gstwavparse.c:
+       Convert disabled pad template caps to new caps.
+       * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
+       (gst_xvimagesink_chain): Throw element error when display cannot
+       be opened.  Increase minimum framerate to 1.0.  Check the data
+       free function on a buffer to make sure it is the type we expect
+       before manipulating it.
+
+2004-01-15  Julien MOUTTE <julien@moutte.net>
+
+       * gst/videofilter/gstvideobalance.c: (gst_videobalance_init),
+       (gst_videobalance_colorbalance_set_value): Implement passthru if
+       settings are in the middle.
+       * tools/gst-launch-ext.in: Stop using xvideosink, use ximagesink.
+
+2004-01-15  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/videofilter/Makefile.am:
+       * gst/volume/Makefile.am:
+         Since we use videofilter symbols, link to it.
+
+2004-01-15  Julien MOUTTE <julien@moutte.net>
+
+       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_interface_init): Setting
+       mixer interface type to HARDWARE.
+       * gst-libs/gst/mixer/mixer.c: (gst_mixer_class_init): Adding a default
+       type to SOFTWARE.
+       * gst-libs/gst/mixer/mixer.h: Adding mixer interface type and macro.
+       * gst-libs/gst/mixer/mixertrack.h: Adding mixertrack flag SOFTWARE.
+       * gst/volume/gstvolume.c: (gst_volume_interface_supported),
+       (gst_volume_interface_init), (gst_volume_list_tracks),
+       (gst_volume_set_volume), (gst_volume_get_volume),
+       (gst_volume_set_mute), (gst_volume_mixer_init),
+       (gst_volume_dispose), (gst_volume_get_type), (volume_class_init),
+       (volume_init): Implementing mixer interface.
+       * gst/volume/gstvolume.h: Adding tracklist for mixer interface.
+       * sys/oss/gstosselement.c: (gst_osselement_get_type),
+       (gst_osselement_change_state): Removing some trailing commas in
+       structures.
+       * sys/oss/gstossmixer.c: (gst_ossmixer_interface_init): Setting mixer
+       interface type to HARDWARE.
+       * sys/v4l/gstv4lcolorbalance.c:
+       (gst_v4l_color_balance_interface_init): Setting colorbalance interface
+       type to HARDWARE.
+       * sys/v4l2/gstv4l2colorbalance.c:
+       (gst_v4l2_color_balance_interface_init): Setting colorbalance
+       interface type to HARDWARE.
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain): use exactly the
+       same code than ximagesink for event handling.
+
+2004-01-15  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/snapshot/Makefile.am:
+       * ext/snapshot/gstsnapshot.c: (gst_snapshot_sinkconnect),
+       (gst_snapshot_chain):
+       * ext/snapshot/gstsnapshot.h:
+         This has to be a joke... Snapshot should be connected to a tee,
+         colorspace element before it and EOS after that, where the other
+         src of the tee receives normal data.
+         The current way is *wrong*.
+
+2004-01-15  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/hermes/gsthermescolorspace.c:
+         Fix another compile error. Same as below.
+
+2004-01-15  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/colorspace/gstcolorspace.c:
+       * gst/colorspace/yuv2yuv.c: (gst_colorspace_yuy2_to_i420),
+       (gst_colorspace_i420_to_yv12):
+         Fix compiling... Didn't test if it actually works.
+
+2004-01-15  David Schleef  <ds@schleef.org>
+
+       * configure.ac:
+       * gst/colorspace/Makefile.am:
+       * gst/colorspace/gstcolorspace.c:
+       * gst/colorspace/gstcolorspace.h:
+       * gst/colorspace/yuv2rgb.c:
+       * gst/colorspace/yuv2rgb.h:
+       Duplicate the ext/hermes colorspace plugin, and remove Hermes
+       code and GPL code.  Fix for new caps negotiation.  Rewrite
+       much of the format handling code, and some of the conversion
+       code.  Basically, rewrote almost everything.  This element
+       handles I420, YV12 to RGB conversions.
+       * ext/hermes/Makefile.am:
+       * ext/hermes/gsthermescolorspace.c:
+       Rename colorspace to hermescolorspace.  Fix negotiation issues.
+       Remove non-Hermes related code.  This element handles lots of
+       RGB to RGB conversions, but no YUV.
+       * ext/hermes/gstcolorspace.c:
+       * ext/hermes/gstcolorspace.h:
+       * ext/hermes/rgb2yuv.c:
+       * ext/hermes/yuv2rgb.c:
+       * ext/hermes/yuv2rgb.h:
+       * ext/hermes/yuv2rgb_mmx16.s:
+       * ext/hermes/yuv2yuv.c:
+       * ext/hermes/yuv2yuv.h:
+       Remove old code.
+
+2004-01-14  Colin Walters  <walters@verbum.org>
+
+       * ext/mad/gstid3tag.c (gst_id3_tag_chain): Don't nego caps if
+       they've already been.
+
+2004-01-15  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_do_caps_nego):
+         assume tag mode when pad is not connected
+
+2004-01-15  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
+         Don't update the time of the clock
+       (gst_alsa_sink_loop):
+         sync to the clock given to alsasink, not the own clock
+       * sys/oss/gstosssink.c: (gst_osssink_chain):
+         sync to the clock
+       (gst_osssink_change_state):
+         activate the clock
+       * sys/ximage/ximagesink.c: (gst_ximagesink_chain):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain):
+         remove bogus code that made DISCONT events unhandled
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_video_caps):
+         explicitly case to double in _set_simple. (fixes 2nd warning in bug
+         #131502)
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_read_object_header),
+       (gst_asf_demux_handle_sink_event), (gst_asf_demux_audio_caps),
+       (gst_asf_demux_add_audio_stream), (gst_asf_demux_video_caps):
+         convert g_warning because of wrong asf data to GST_WARNINGs (fixes
+         2nd warning in bug #131502)
+
+2004-01-14  Julien MOUTTE  <julien@moutte.net>
+
+       * gst/videofilter/gstvideobalance.c: (gst_videobalance_init),
+       (gst_videobalance_colorbalance_set_value),
+       (gst_videobalance_colorbalance_get_value): Fixing videobalance ranges
+       for colorbalance interface implementation.
+       * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
+       (gst_ximagesink_set_property), (gst_ximagesink_get_property),
+       (gst_ximagesink_dispose), (gst_ximagesink_init),
+       (gst_ximagesink_class_init): Adding DISPLAY property.
+       * sys/ximage/ximagesink.h: Adding display_name to store display.
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
+       (gst_xvimagesink_set_property), (gst_xvimagesink_get_property),
+       (gst_xvimagesink_dispose), (gst_xvimagesink_init),
+       (gst_xvimagesink_class_init): Adding DISPLAY property and colorbalance
+       properties (they still need polishing though for gst-launch use : no
+       xcontext yet, i ll do that tomorrow).
+       * sys/xvimage/xvimagesink.h: Adding display_name to store display.
+
+2004-01-14  Julien MOUTTE  <julien@moutte.net>
+
+       * gst-libs/gst/play/gstplay.c: (gst_play_pipeline_setup),
+       (gst_play_set_location), (gst_play_set_visualization): Preparing
+       switch integration, adding videobalance in the pipeline.
+
+2004-01-14  Julien MOUTTE <julien@moutte.net>
+
+       * gst-libs/gst/colorbalance/colorbalance.c:
+       (gst_color_balance_class_init): Adding a default type.
+       * gst-libs/gst/colorbalance/colorbalance.h: Adding a macro to access
+       the type.
+       * gst/videofilter/gstvideobalance.c: (gst_videobalance_get_type),
+       (gst_videobalance_dispose), (gst_videobalance_class_init),
+       (gst_videobalance_init), (gst_videobalance_interface_supported),
+       (gst_videobalance_interface_init),
+       (gst_videobalance_colorbalance_list_channels),
+       (gst_videobalance_colorbalance_set_value),
+       (gst_videobalance_colorbalance_get_value),
+       (gst_videobalance_colorbalance_init): Implementing colorbalance
+       interface.
+       * gst/videofilter/gstvideobalance.h: Adding colorbalance channels
+       list.
+       * sys/ximage/ximagesink.c: (gst_ximagesink_set_xwindow_id): Fixing a
+       bug which was triggering a BadAccess X error when setting an overlay
+       before pad was really negotiated.
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_colorbalance_init):
+       Using the colorbalance type macro.
+
+2004-01-14  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/flac/gstflacenc.c: (gst_flacenc_set_metadata),
+       (gst_flacenc_chain):
+         handle tags correctly
+       * gst/tags/gstid3tag.c: (gst_tag_list_new_from_id3v1):
+         extract ID3v1 tags correctly
+
+2004-01-14  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/typefind/gsttypefindfunctions.c: (matroska_type_find),
+       (plugin_init):
+         Improve matroska typefinding for odd-typed headers...
+
+2004-01-14  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/matroska/matroska-demux.c: (gst_matroska_demux_add_stream):
+         Fix for using incremental number on padnames.
+
+2004-01-14  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/divx/gstdivxdec.c:
+       * ext/divx/gstdivxenc.c:
+         Set category to divx4linux instead of divx (too generic).
+       * gst/wavparse/gstwavparse.c: (gst_wavparse_init),
+       (gst_wavparse_parse_fmt), (gst_wavparse_handle_sink_event),
+       (gst_wavparse_loop), (gst_wavparse_change_state):
+       * gst/wavparse/gstwavparse.h:
+         fix parsing of WAV files with non-standard fmt-tag size and fix
+         skipping of unrecognized chunks... Someone please fix this thing
+         to use rifflib so all this is automated.
+       * sys/v4l/Makefile.am:
+       * sys/v4l2/Makefile.am:
+         Add X_CFLAGS because we depend on X (for overlay).
+
+2004-01-14  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         Don't issue a timestamp unless we tagged the frame
+         with a PTS.
+
+2004-01-14  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst-libs/gst/play/gstplay.c: (gst_play_tick_callback):
+         Query the audio element to get the time, not the clock. We're
+         interested in the element's time here.
+
+2004-01-14  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/aalib/gstaasink.c: (gst_aasink_chain):
+       * ext/alsa/gstalsasink.c: (gst_alsa_sink_check_event):
+       * ext/esd/esdsink.c: (gst_esdsink_chain):
+       * ext/libcaca/gstcacasink.c: (gst_cacasink_chain):
+       * ext/mas/massink.c: (gst_massink_chain):
+       * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_chain):
+       * gst/matroska/matroska-demux.c: (gst_matroska_demux_parse_index),
+       (gst_matroska_demux_parse_metadata):
+       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_loop),
+       (gst_mpeg_parse_release_locks):
+       * gst/tcp/gsttcpsink.c: (gst_tcpsink_chain):
+       * gst/udp/gstudpsink.c: (gst_udpsink_chain):
+       * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get):
+       * sys/oss/gstosssink.c: (gst_osssink_init), (gst_osssink_chain),
+       (gst_osssink_change_state):
+       * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_chain):
+       * sys/ximage/ximagesink.c: (gst_ximagesink_chain):
+       * sys/xvideo/xvideosink.c: (gst_xvideosink_chain),
+       (gst_xvideosink_release_locks):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain):
+         use element time.
+       * ext/alsa/gstalsaclock.c: (gst_alsa_clock_start),
+       (gst_alsa_clock_stop):
+       * gst-libs/gst/audio/audioclock.c: (gst_audio_clock_set_active),
+       (gst_audio_clock_get_internal_time):
+         simplify for use with new clocking code.
+       * testsuite/alsa/Makefile.am:
+       * testsuite/alsa/sinesrc.c: (sinesrc_init), (sinesrc_force_caps):
+         fix testsuite for new caps system
+
+2004-01-14  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/flac/gstflacdec.c: (gst_flacdec_update_metadata):
+       * ext/flac/gstflacenc.c: (add_one_tag):
+         length is already host endian, no need to convert. Fixes playback of
+         tagged files on PPC. (bug #128384)
+
+2004-01-13  Julien MOUTTE <julien@moutte.net>
+
+       * gst-libs/gst/colorbalance/colorbalance.h: Adding a type to the
+       colorbalance interface stating if it is hardware based or software
+       based.
+       * gst/videofilter/gstvideobalance.c: (gst_videobalance_planar411):
+       Removing a trailing comma.
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
+       (gst_xvimagesink_colorbalance_init): Integrating a patch from Jon
+       Trowbridge <trow@ximian.com> querying Xv adaptor for min/max value as
+       the documentation seems to be wrong on the -1000 to 1000 interval.
+
+2004-01-12  David Schleef  <ds@schleef.org>
+
+       * gst/debug/efence.c: (gst_efence_init), (gst_efence_chain),
+       (gst_efence_buffer_alloc), (gst_fenced_buffer_new),
+       (gst_fenced_buffer_default_free), (gst_fenced_buffer_default_copy):
+       Fix negotiation.  Add a bufferalloc function for the sink pad,
+       and generally clean up some of the code.
+
+2004-01-12  Julien MOUTTE <julien@moutte.net>
+
+       * gst-libs/gst/colorbalance/colorbalancechannel.c:
+       (gst_color_balance_channel_dispose): Adding safety check in dispose
+       method.
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xcontext_get),
+       (gst_xvimagesink_xcontext_clear),
+       (gst_xvimagesink_interface_supported),
+       (gst_xvimagesink_colorbalance_list_channels),
+       (gst_xvimagesink_colorbalance_set_value),
+       (gst_xvimagesink_colorbalance_get_value),
+       (gst_xvimagesink_colorbalance_init), (gst_xvimagesink_get_type):
+       Adding colorbalance interface support to set XV parameters such as
+       HUE, BRIGHTNESS, CONTRAST, SATURATION.
+       * sys/xvimage/xvimagesink.h: Adding the channels list for colorbalance
+       interface.
+
+2004-01-12  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_get_type),
+       (gst_audio_convert_class_init), (gst_audioconvert_getcaps),
+       (gst_audio_convert_init), (gst_audio_convert_set_property),
+       (gst_audio_convert_get_property), (gst_audio_convert_chain),
+       (gst_audio_convert_link),
+       (gst_audio_convert_buffer_to_default_format),
+       (gst_audio_convert_buffer_from_default_format), (plugin_init):
+          - implement _getcaps and use it
+          - improve linking
+          - remove float caps since no float conversion is actually done
+          - remove properties and arguments that were to be used for rate
+            conversion
+
+2004-01-12  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst-libs/gst/audio/audio.c: (_gst_audio_structure_set_list),
+       (gst_audio_structure_set_int):
+       * gst-libs/gst/audio/audio.h:
+          add helper functions for _getcaps matching the standard audio
+          templates
+
+2004-01-12  David Schleef  <ds@schleef.org>
+
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
+       Test that pad is negotiated before getting its caps.
+
+2004-01-12  Julien MOUTTE <julien@moutte.net>
+
+       * gst-libs/gst/play/gstplay.c: (gst_play_get_sink_element): When
+       analyzing the pads of an element the bin is mostly in READY state so
+       no caps were negotiated. This helper function needs to work with
+       _get_caps directly then. I was not freeing them though, added that to
+       fix the mem leak.
+
+2004-01-12  Julien MOUTTE <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_chain):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain): Fixing the
+       direct put buffers detection. I prefer checking GST_BUFFER_PRIVATE
+       than the free_func.
+
+2004-01-12  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * sys/oss/gstossaudio.c: (plugin_init):
+       * sys/oss/gstosselement.c: (gst_osselement_sync_parms):
+       * sys/oss/gstosselement.h:
+          make an oss debugging category
+          make failure more descriptive
+
+2004-01-11  David Schleef  <ds@schleef.org>
+
+       * ext/ffmpeg/gstffmpeg.c:
+       * ext/ffmpeg/gstffmpegcodecmap.c:
+       * ext/ffmpeg/gstffmpegdec.c:
+       * ext/ffmpeg/gstffmpegenc.c:
+       * ext/ffmpeg/gstffmpegprotocol.c:
+       * ext/gdk_pixbuf/gstgdkanimation.c:
+       * ext/jpeg/gstjpeg.c:
+       * ext/libpng/gstpng.c:
+       * ext/mpeg2dec/perftest.c:
+       * ext/speex/gstspeex.c:
+       * gst-libs/gst/resample/dtos.c:
+       * gst/intfloat/gstintfloatconvert.c:
+       * gst/oneton/gstoneton.c:
+       * gst/rtjpeg/RTjpeg.c:
+       * gst/rtp/gstrtp.c:
+       * sys/dxr3/dxr3init.c:
+       * sys/glsink/gstgl_nvimage.c:
+       * sys/glsink/gstgl_pdrimage.c:
+       * sys/glsink/gstglsink.c:
+       * testsuite/gst-lint:
+       Make sure everybody wraps #include "config.h" in #ifdef HAVE_CONFIG_H
+
+2004-01-11  David Schleef  <ds@schleef.org>
+
+       * ext/alsa/gstalsasrc.c: (gst_alsa_src_set_caps):
+       * ext/faac/gstfaac.c: (gst_faac_sinkconnect):
+       * ext/gdk_pixbuf/gstgdkanimation.c:
+       (gst_gdk_animation_iter_create_pixbuf):
+       * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_sink_link),
+       (gst_gdk_pixbuf_chain):
+       * ext/gdk_pixbuf/gstgdkpixbuf.h:
+       * ext/jack/gstjack.c: (gst_jack_change_state):
+       * ext/xvid/gstxviddec.c: (gst_xviddec_sink_link):
+       * gst-libs/gst/play/gstplay.c: (gst_play_get_sink_element):
+       * gst-libs/gst/play/play.c: (gst_play_get_sink_element):
+       * gst/videofilter/gstvideofilter.c:
+       (gst_videofilter_set_output_size):
+       Remove all usage of gst_pad_get_caps(), and replace it with
+       gst_pad_get_allowed_caps() or gst_pad_get_negotiated_cap().
+
+2004-01-11  David Schleef  <ds@schleef.org>
+
+       * configure.ac:
+       * ext/Makefile.am: Fixes to make ext/libcaca compile.
+       * ext/divx/gstdivxdec.c:
+       * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_sink_link),
+       (gst_gdk_pixbuf_init), (gst_gdk_pixbuf_chain): Make gdkpixbufdec
+       handle images that span multiple buffers.  Now work with both
+       filesrc ! gdkpixbufdec and qtdemux ! gdkpixbufdec.
+       * ext/gdk_pixbuf/gstgdkpixbuf.h:
+       * ext/libcaca/gstcacasink.h: Fixes needed due to recent
+       video/video.h changes
+       * ext/xvid/gstxvid.c: (gst_xvid_csp_to_caps): same
+       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get),
+       (gst_v4lmjpegsrc_buffer_free): Use buffer free function instead
+       of GstData free function.
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get), (gst_v4lsrc_buffer_free):
+       same.
+
+2004-01-12  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * sys/v4l2/gstv4l2element.c: (gst_v4l2element_class_init),
+       (gst_v4l2element_dispose), (gst_v4l2element_set_property),
+       (gst_v4l2element_get_property):
+       * sys/v4l2/v4l2_calls.c: (gst_v4l2_set_defaults), (gst_v4l2_open):
+         add norm, channel and frequency properties.
+       * sys/v4l2/gstv4l2tuner.c:
+         fixes for tuner interface changes
+       * sys/v4l2/gstv4l2element.h:
+       * sys/v4l2/gstv4l2src.c:
+       * sys/v4l2/gstv4l2src.h:
+       * sys/v4l2/v4l2src_calls.c:
+       * sys/v4l2/v4l2src_calls.h:
+         rework v4l2src to work with saa1734 cards and allow mmaped buffers.
+
+2004-01-12  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst-libs/gst/tuner/tuner.c: (gst_tuner_class_init),
+       (gst_tuner_find_norm_by_name), (gst_v4l2_find_channel_by_name),
+       (gst_tuner_channel_changed), (gst_tuner_norm_changed),
+       (gst_tuner_frequency_changed), (gst_tuner_signal_changed):
+       * gst-libs/gst/tuner/tuner.h:
+         GObjects aren't const.
+         Add find_by_name functions.
+         Add checks to _changed functions.
+       * sys/v4l/gstv4ltuner.c: (gst_v4l_tuner_get_channel),
+       (gst_v4l_tuner_get_norm):
+         Fixes for above.
+
+2004-01-12  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst-libs/gst/video/video.h:
+         Fix caps template names to be understandable.
+         Prefix everything with GST_VIDEO.
+       * ext/aalib/gstaasink.c:
+       * ext/divx/gstdivxdec.c:
+       * ext/divx/gstdivxenc.c:
+       * ext/gdk_pixbuf/gstgdkpixbuf.c:
+       * ext/hermes/gstcolorspace.c: (gst_colorspace_base_init):
+       * ext/jpeg/gstjpegdec.c: (raw_caps_factory):
+       * ext/jpeg/gstjpegenc.c: (raw_caps_factory):
+       * ext/libcaca/gstcacasink.c:
+       * ext/libpng/gstpngenc.c: (raw_caps_factory):
+       * ext/snapshot/gstsnapshot.c:
+       * ext/swfdec/gstswfdec.c:
+       * ext/xvid/gstxviddec.c:
+       * ext/xvid/gstxvidenc.c:
+       * gst/chart/gstchart.c:
+       * gst/deinterlace/gstdeinterlace.c:
+       * gst/effectv/gsteffectv.c:
+       * gst/flx/gstflxdec.c: (gst_flxdec_loop):
+       * gst/goom/gstgoom.c:
+       * gst/median/gstmedian.c:
+       * gst/monoscope/gstmonoscope.c: (gst_monoscope_init),
+       (gst_monoscope_srcconnect), (gst_monoscope_chain):
+       * gst/overlay/gstoverlay.c:
+       * gst/smooth/gstsmooth.c:
+       * gst/smpte/gstsmpte.c:
+       * gst/synaesthesia/gstsynaesthesia.c:
+       * gst/videocrop/gstvideocrop.c:
+       * gst/videodrop/gstvideodrop.c:
+       * gst/y4m/gsty4mencode.c:
+       * sys/qcam/gstqcamsrc.c:
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_palette_to_caps):
+         Make them work with new video.h file.
+       * sys/ximage/ximagesink.c: (gst_ximagesink_chain),
+       (gst_ximagesink_buffer_free), (gst_ximagesink_buffer_alloc):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain),
+       (gst_xvimagesink_buffer_free), (gst_xvimagesink_buffer_alloc):
+         Make it work with new buffer allocation system.
+
+2004-01-11  Julien MOUTTE  <julien@moutte.net>
+
+       * ext/ffmpeg/gstffmpegcolorspace.c: (gst_ffmpegcsp_chain): Fixing the
+       pad_alloc_buffer implementation to use ->srcpad
+       * ext/hermes/gstcolorspace.c: (gst_colorspace_chain): Fixing the
+        pad_alloc_buffer implementation to use ->srcpad
+       * gst/videoscale/gstvideoscale.c: (gst_videoscale_chain):  Fixing the
+        pad_alloc_buffer implementation to use ->srcpad
+       * sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
+       (gst_ximagesink_chain), (gst_ximagesink_buffer_free),
+       (gst_ximagesink_buffer_alloc): Now only use GST_BUFFER_PRIVATE to keep
+       a reference to everything we need.
+       * sys/ximage/ximagesink.h: adding a reference to the sink in the image.
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
+       (gst_xvimagesink_chain), (gst_xvimagesink_buffer_free),
+       (gst_xvimagesink_buffer_alloc): Now only use GST_BUFFER_PRIVATE to keep
+        a reference to everything we need.
+       * sys/xvimage/xvimagesink.h: adding a reference to the sink in the image
+
+2004-01-11  David Schleef  <ds@schleef.org>
+
+       * ext/divx/gstdivxenc.c: remove bogus gst_caps_is_fixed() test
+       * gst/debug/efence.c: (gst_efence_chain), (gst_fenced_buffer_new),
+       (gst_fenced_buffer_default_copy): Fix for rename of buffer private
+       structure members.
+       * gst/effectv/gstwarp.c: (gst_warptv_setup): Don't reset the time
+       value during a resize/renegotiation.
+       * gst/videofilter/gstvideofilter.c: (gst_videofilter_chain): use
+       gst_pad_alloc_buffer();
+       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get),
+       (gst_v4lmjpegsrc_buffer_free): Fix for rename of buffer private
+       structure members.
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get), (gst_v4lsrc_buffer_free):
+       Fix for rename of buffer private structure members.
+       * sys/ximage/ximagesink.c: (gst_ximagesink_chain),
+       (gst_ximagesink_buffer_free), (gst_ximagesink_buffer_alloc):
+       Fix for rename of buffer private structure members.
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain),
+       (gst_xvimagesink_buffer_free), (gst_xvimagesink_buffer_alloc):
+       Fix for rename of buffer private structure members.
+
+2004-01-11  Arwed v. Merkatz <v.merkatz@gmx.net>
+
+       reviewed by: David Schleef <ds@schleef.org>
+
+       * gst/videofilter/Makefile.am:
+       * gst/videofilter/gstgamma.c: Gamma correction filter.  Modified
+       from the patch by ds to fit in with recent make_filter changes.
+
+2004-01-11  Julien MOUTTE  <julien@moutte.net>
+
+       * configure.ac: Adding examples/switch/Makefile
+       * examples/Makefile.am: Adding examples/switch
+       * examples/switch/Makefile.am: Adding switcher example.
+       * examples/switch/switcher.c: (got_eos), (idle_iterate),
+       (switch_timer), (main): Adding an example demonstrating switch usage
+       with 2 videotestsrc showing different patterns.
+       * gst/switch/gstswitch.c: (gst_switch_request_new_pad),
+       (gst_switch_init): Fixing switch with the new caps system.
+
+2004-01-11  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst-libs/gst/video/video.h:
+         Fix 32bit caps. Issue remaining: The macro names are chosen poorly.
+         They should probably be like
+         GST_VIDEO_PAD_TEMPLATE_CAPS_{RGB,BGR,RGBx,BGRx}.
+
+2004-01-11  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
+       (qtdemux_parse_trak):
+         fix audio chunk size/timestamp calculation
+
+2004-01-11  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps):
+         fix SVQ3 caps
+
+2004-01-11  Steve Baker  <steve@stevebaker.org>
+
+       * gst/effectv/gstaging.c: (gst_agingtv_get_type),
+       (gst_agingtv_base_init), (gst_agingtv_class_init),
+       (gst_agingtv_init), (gst_agingtv_setup), (gst_agingtv_rgb32),
+       (gst_agingtv_set_property), (gst_agingtv_get_property):
+        Port agingTV to videofilter
+
+2004-01-09  Julien MOUTTE <julien@moutte.net>
+
+       * ext/hermes/gstcolorspace.c: (gst_colorspace_chain):
+       Implementing gst_pad_alloc_buffer to use optimized buffer allocation.
+
+2004-01-09  Julien MOUTTE <julien@moutte.net>
+
+       * ext/ffmpeg/gstffmpegcolorspace.c: (gst_ffmpegcsp_chain):
+       Implementing gst_pad_alloc_buffer to use optimized buffer allocation.
+       * gst-libs/gst/xoverlay/xoverlay.c:
+       (gst_x_overlay_got_desired_size): Updating doc for the xid being 0.
+       * gst/videoscale/gstvideoscale.c: (gst_videoscale_chain):
+       Implementing gst_pad_alloc_buffer to use optimized buffer allocation.
+       * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get):
+       Implementing gst_pad_alloc_buffer to use optimized buffer allocation.
+       * sys/ximage/ximagesink.c: (gst_ximagesink_chain),
+       (gst_ximagesink_buffer_free), (gst_ximagesink_buffer_alloc),
+       (gst_ximagesink_set_xwindow_id), (gst_ximagesink_init): Implementing
+       the bufferalloc_function to replace bufferpools, fixing the XOverlay
+       interface implementation to handle xid being 0 and fix some bugs
+       triggered by Benjamin's testcase.
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain),
+       (gst_xvimagesink_buffer_free), (gst_xvimagesink_buffer_alloc),
+       (gst_xvimagesink_set_xwindow_id), (gst_xvimagesink_init): Implementing
+       the bufferalloc_function to replace bufferpools, fixing the XOverlay
+       interface implementation to handle xid being 0 and fix some bugs
+       triggered by Benjamin's testcase.
+
+2004-01-09  David Schleef  <ds@schleef.org>
+
+       * ext/librfb/gstrfbsrc.c:  Hacking.  Added actual decoding and
+       mouse pointer events.  It works.
+
+2004-01-09  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/divx/gstdivxenc.c: (gst_divxenc_init):
+         Use explicit caps - fix capsnego.
+       * ext/xvid/gstxviddec.c:
+       * ext/xvid/gstxvidenc.c:
+         Remove macro-inside-macro which caused compile errors.
+       * gst-libs/gst/riff/riff-read.c: (gst_riff_read_header):
+         Error out if it's not a RIFF file. Else we error out without
+         gst_element_error() which is not good...
+
+2004-01-08  David Schleef  <ds@schleef.org>
+
+       * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_connect):
+       Fix pad_link function to handle formats that ffmpeg returns
+       as multiple caps structures.
+       * gst/videofilter/gstvideofilter.c: (gst_videofilter_chain):
+       Only complain if source buffer is _smaller_ than expected.
+       * gst/videoscale/gstvideoscale.c: (gst_videoscale_init),
+       (gst_videoscale_handle_src_event): Resize navigation events
+       when passing them upstream.
+       * gst/videotestsrc/gstvideotestsrc.c:
+       * gst/videotestsrc/gstvideotestsrc.h:
+       * gst/videotestsrc/videotestsrc.c:
+       * gst/videotestsrc/videotestsrc.h:
+       Rewrite many of the buffer painting functions to handle odd
+       sizes (for many formats, size%4!=0 or size%8!=0).  Most have
+       been verified to work with my video card.
+       * testsuite/gst-lint:  Add check for elements calling
+       gst_pad_get_caps() instead of gst_pad_get_allowed_caps().
+
+2004-01-08  David Schleef  <ds@schleef.org>
+
+       * gst/videodrop/gstvideodrop.c: (gst_videodrop_getcaps),
+       (gst_videodrop_link), (gst_videodrop_init): Fix negotiation.
+
+2004-01-08  Julien MOUTTE  <julien@moutte.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents): A
+       configure event is not emiting the desired size signal. That fixes
+       aspect ratio issues with gst-player.
+
+2004-01-08  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/median/gstmedian.c: (gst_median_link), (gst_median_init):
+         Fix capsnego.
+
+2004-01-08  Julien MOUTTE  <julien@moutte.net>
+
+       * ext/sdl/sdlvideosink.c: (gst_sdlvideosink_create): Using XOverlay
+       public method to fire size signal.
+
+2004-01-07  Julien MOUTTE  <julien@moutte.net>
+
+       * examples/gstplay/Makefile.am: Adding the interface library.
+       * gst-libs/gst/play/Makefile.am: Adding the interface library.
+       * gst-libs/gst/play/gstplay.c: (gst_play_set_video_sink): Connecting to         the XOverlay size signal instead of GstVideoSink.
+       * gst-libs/gst/play/gstplay.h: Including the XOverlay interface to check
+       GST_IS_X_OVERLAY before signal connect.
+       * gst-libs/gst/video/gstvideosink.c: (gst_videosink_class_init):
+       Removing the have_video_size signal.
+       * gst-libs/gst/video/gstvideosink.h: Removing the have_video_size signal
+       and associated public method.
+       * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents),
+       (gst_ximagesink_sinkconnect): Using XOverlay public method to fire size
+       signal.
+       * sys/xvideo/xvideosink.c: (gst_xvideosink_sinkconnect),
+       (gst_xvideosink_xwindow_new): Using XOverlay public method to fire size
+        signal.
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_sinkconnect):
+       Using XOverlay public method to fire size signal.
+
+2004-01-07  David Schleef  <ds@schleef.org>
+
+       * gst/videofilter/Makefile.am:
+       * gst/videofilter/gstvideotemplate.c:
+       * gst/videofilter/make_filter:
+       Create gstvideoexample.c in a srcdir!=builddir friendly way.
+       Convert make_filter to /bin/sh script.
+
+2004-01-07  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * gst/modplug/gstmodplug.cc: fix element description
+
+2004-01-07  Julien MOUTTE  <julien@moutte.net>
+
+       * examples/gstplay/player.c: (got_time_tick), (got_stream_length),
+       (got_video_size): Adding some new lines in g_print calls.
+       * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_new),
+       (gst_ximagesink_xwindow_destroy), (gst_ximagesink_xwindow_resize),
+       (gst_ximagesink_handle_xevents), (gst_ximagesink_fixate),
+       (gst_ximagesink_sinkconnect), (gst_ximagesink_change_state),
+       (gst_ximagesink_chain), (gst_ximagesink_buffer_new),
+       (gst_ximagesink_set_xwindow_id), (gst_ximagesink_get_desired_size):
+       Complete code review, reverting some stuff i disagree with, adding
+       some fixes : time synchronization on invalid timestamps, renegotiation
+       of private window.
+       * sys/ximage/ximagesink.h:
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_xwindow_destroy),
+       (gst_xvimagesink_xwindow_resize), (gst_xvimagesink_handle_xevents),
+       (gst_xvimagesink_get_xv_support), (gst_xvimagesink_xcontext_get),
+       (gst_xvimagesink_fixate), (gst_xvimagesink_sinkconnect),
+       (gst_xvimagesink_change_state), (gst_xvimagesink_chain),
+       (gst_xvimagesink_buffer_new),
+       (gst_xvimagesink_navigation_send_event),
+       (gst_xvimagesink_set_xwindow_id),
+       (gst_xvimagesink_get_desired_size),
+       (gst_xvimagesink_xoverlay_init): Complete code review, reverting some
+       stuff i disagree with, adding some fixes : Renegotiation of private
+       window, implementing get_desired_size.
+
+2004-01-07  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/audiofile/gstafsink.c: (gst_afsink_init), (gst_afsink_chain),
+       (gst_afsink_handle_event):
+       * ext/jpeg/gstjpegenc.c: (gst_jpegenc_init):
+       * gst/avi/gstavimux.c: (gst_avimux_request_new_pad):
+       * sys/dxr3/dxr3audiosink.c: (dxr3audiosink_init):
+       * sys/dxr3/dxr3spusink.c: (dxr3spusink_init):
+       * sys/dxr3/dxr3videosink.c: (dxr3videosink_init):
+         Fix for instantiate-test (see core). Also remove dead code from
+         jpegenc (which still needs fixing, but that's lower on my TODO
+         list...).
+       * sys/v4l2/gstv4l2src.c: (gst_v4l2src_getcaps):
+         Never return NULL as caps.
+
+2004-01-07  David Schleef  <ds@schleef.org>
+
+       * configure.ac:
+       * ext/Makefile.am:
+       * ext/librfb/Makefile.am:
+       * ext/librfb/gstrfbsrc.c:
+       New source plugin based on librfb-0.1.  RFB (remote framebuffer)
+       is the protocol used by VNC.
+
+2004-01-07  David Schleef  <ds@schleef.org>
+
+       * gst/videofilter/gstvideotemplate.c:
+       * gst/videofilter/gstvideotemplate.h:
+       * gst/videofilter/make_filter:
+       Merge videotemplate header into source file.
+       * gst/effectv/Makefile.am:
+       * gst/effectv/gsteffectv.c: (plugin_init):
+       * gst/effectv/gstwarp.c:
+       Make warpTV a subclass of videofilter.
+
+2004-01-07  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/mad/gstid3tag.c: (gst_mad_id3_to_tag_list):
+         Add guard against invalid utf-8 conversions in mad. Just in case.
+
+2004-01-07  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * sys/oss/gstosssink.c: (gst_osssink_sink_fixate):
+         Fix for bug shown by poisoning
+
+2004-01-06  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get),
+       (gst_v4lmjpegsrc_buffer_free):
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_palette_to_caps),
+       (gst_v4lsrc_srcconnect), (gst_v4lsrc_getcaps), (gst_v4lsrc_get),
+       (gst_v4lsrc_buffer_free):
+         Fix for removed bufferpools.
+
+2004-01-07  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * ext/dv/gstdvdec.c: (gst_dvdec_loop):
+       Fix caps negotiation.
+
+       * ext/dvdnav/dvdnavsrc.c: (dvdnavsrc_class_init),
+       (dvdnavsrc_update_buttoninfo), (dvdnavsrc_get),
+       (dvdnavsrc_get_event_mask), (dvdnav_handle_navigation_event),
+       (dvdnavsrc_event):
+       * ext/mpeg2dec/gstmpeg2dec.c:
+       * gst-libs/gst/navigation/navigation.c:
+       (gst_navigation_send_key_event), (gst_navigation_send_mouse_event):
+       * gst-libs/gst/navigation/navigation.h:
+       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_handle_src_event):
+       * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_handle_xevents):
+       Super-simple first version of mouse and keyboard events. Clicking
+       on a DVD menu now works, although it may not take you where you
+       expected.
+
+       * gst/sine/gstsinesrc.c: (gst_sinesrc_src_fixate):
+       * gst/videotestsrc/gstvideotestsrc.c:
+       (gst_videotestsrc_src_fixate):
+       These fixate functions were broken - they never actually
+       fixated :)
+
+2004-01-06  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/shout/gstshout.c: (gst_icecastsend_base_init),
+       (gst_icecastsend_init):
+         fix for new caps system.
+       * gst-libs/gst/mixer/mixertrack.h:
+       * sys/oss/gstossmixer.c: (gst_ossmixer_build_list):
+         Add 'master track' flag (for tools like ACME that only want to
+         change the main volume).
+
+2004-01-07  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * ext/xvid/gstxvid.c: (gst_xvid_structure_to_csp),
+       (gst_xvid_csp_to_caps):
+       * ext/xvid/gstxviddec.c: (gst_xviddec_src_getcaps):
+       * ext/xvid/gstxvidenc.c:
+       ifdef out ARGB type when it isn't available
+       in xvidcore 1.0.0beta2
+
+2004-01-06  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_loop):
+         When we have received a new SCR right in the first buffer after
+         a seek (so in the same cycle that handles the discont), we should
+         handle the buffer instead of unreffing it, else we lose data.
+
+2004-01-06  Iain <iain@prettypeople.org>
+
+       * gst/intfloat/gstint2float.c (gst_int2float_link): Set the
+         buffer-frames caps too.
+
+       * gst/oneton/gstoneton.c (gst_oneton_sink_connect): Only create the new
+         caps that we need, don't destroy them all and rebuild them. And when
+         creating src pads, use the src pad template rather than the sink...
+
+2004-01-05  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead):
+         Add pad to element *after* setting functions such as event handler.
+         Without this, the scheduler (opt) will link pads, set the event
+         handler from the default event function (dispatcher in gstpad.c)
+         and *after* that, we will set our own event function, which will
+         thus never be used (and thus mpegdemux doesn't handle events).
+
+2004-01-04  David Schleef  <ds@schleef.org>
+
+       Fix the fixate functions to handle new prototype:
+       * gst/sine/gstsinesrc.c: (gst_sinesrc_src_fixate):
+       * gst/videotestsrc/gstvideotestsrc.c:
+       (gst_videotestsrc_src_fixate):
+       * sys/oss/gstosssink.c: (gst_osssink_sink_fixate):
+       * sys/ximage/ximagesink.c: (gst_ximagesink_fixate):
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_fixate):
+
+2004-01-04  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * sys/ximage/ximagesink.h:
+       * sys/ximage/ximagesink.c: (gst_ximagesink_xwindow_new),
+       (gst_ximagesink_xwindow_destroy), (gst_ximagesink_sinkconnect),
+       (gst_ximagesink_change_state), (gst_ximagesink_set_xwindow_id),
+       (gst_ximagesink_xoverlay_init):
+         assorted fixes to make (re)embedding work
+       * sys/ximage/ximagesink.c: (gst_ximagesink_sinkconnect),
+       (gst_ximagesink_get_desired_size):
+         implement desired size additions to XOverlay
+
+2004-01-04  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst-libs/gst/xoverlay/xoverlay.c: (gst_x_overlay_base_init),
+       (gst_x_overlay_got_xwindow_id), (gst_x_overlay_get_desired_size),
+       (gst_x_overlay_got_desired_size):
+       * gst-libs/gst/xoverlay/xoverlay.h:
+         Add optional "desired size" signal and querying.
+
+2004-01-04  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/matroska/matroska-demux.c:
+       (gst_matroska_demux_parse_blockgroup):
+         Fix EBML-laced block parsing. Diffs are relative to previous
+         lace, not the first lace. Thanks to Mosu from the Matroska
+         team for detecting this.
+       * gst/wavparse/gstwavparse.c: (gst_wavparse_init),
+       (gst_wavparse_parse_fmt), (gst_wavparse_getcaps),
+       (gst_wavparse_handle_sink_event), (gst_wavparse_loop),
+       (gst_wavparse_change_state):
+       * gst/wavparse/gstwavparse.h:
+         Quickfix for capsnego.
+
+2004-01-04  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/wavenc/gstwavenc.c: (set_property), (gst_wavenc_init):
+         Fix indenting, fix pad creation.
+
+2004-01-04  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/xvid/gstxviddec.c: (gst_xviddec_init),
+       (gst_xviddec_src_getcaps), (gst_xviddec_src_link),
+       (gst_xviddec_sink_link):
+         Implement src_getcaps() so proper size caps is negotiated.
+
+2004-01-04  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/flac/gstflacdec.c: (gst_flacdec_loop):
+         Finish flac decoder on EOS. See #116178.
+
+2004-01-04  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/matroska/matroska-demux.c: (gst_matroska_demux_src_getcaps),
+       (gst_matroska_demux_add_stream):
+       * gst/matroska/matroska-ids.h:
+         Add getcaps() function to fix capsnego...
+
+2004-01-04  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead),
+       (gst_mpeg_demux_parse_packet), (gst_mpeg_demux_parse_pes):
+       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_parse_packhead):
+         Fix more integer overflows. Again, see #126967.
+
+2004-01-03  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/mpeg2dec/gstmpeg2dec.c:
+         Add support for mpeg2dec-0.4.0 (released two weeks ago). See
+         #130416.
+
+2004-01-03  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * configure.ac:
+       * ext/xvid/gstxvid.c: (gst_xvid_init), (gst_xvid_error),
+       (gst_xvid_structure_to_csp), (gst_xvid_csp_to_caps):
+       * ext/xvid/gstxvid.h:
+       * ext/xvid/gstxviddec.c: (gst_xviddec_class_init),
+       (gst_xviddec_init), (gst_xviddec_setup), (gst_xviddec_chain),
+       (gst_xviddec_src_link), (gst_xviddec_sink_link),
+       (gst_xviddec_change_state):
+       * ext/xvid/gstxviddec.h:
+       * ext/xvid/gstxvidenc.c: (gst_xvidenc_profile_get_type),
+       (gst_xvidenc_base_init), (gst_xvidenc_class_init),
+       (gst_xvidenc_init), (gst_xvidenc_setup), (gst_xvidenc_chain),
+       (gst_xvidenc_link), (gst_xvidenc_set_property),
+       (gst_xvidenc_get_property), (gst_xvidenc_change_state):
+       * ext/xvid/gstxvidenc.h:
+         Update xvid plugin to latest xvid (1.0.0-beta3) API.
+
+2004-01-03  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/rtp/rtp-packet.c:
+         Add sys/types.h include, since OS X doesn't define in_addr_t
+         in netinet/in.h, like it does on Linux (see #129600).
+
+2004-01-03  Thomas Canty <tommydal@optushome.com.au>
+
+       reviewed by: Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_dispose):
+         Correct logic of dispose function (see #129306).
+
+2004-01-03  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_pes):
+       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_class_init),
+       (gst_mpeg_parse_init):
+       * gst/mpegstream/gstmpegparse.h:
+         Remove clock (which was never provided, i.e. dead code), and
+         also fix integer overflows at high PTS values (see #126967).
+
+2004-01-03  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/flac/gstflacdec.c:
+       * ext/libpng/gstpngenc.h:
+       * ext/mikmod/gstmikmod.h:
+         OS X fixes (see #126628).
+
+2004-01-02  David Schleef  <ds@schleef.org>
+
+       * ext/alsa/gstalsasrc.c: (gst_alsa_src_pad_factory),
+       (gst_alsa_src_base_init): Remove bogus "src" request pad.
+       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_base_init),
+       (gst_mpeg_parse_class_init): Move pad template registration
+       to class_init, since the derived class (mpegdemux) doesn't
+       want them.
+
+2004-01-03  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/ximage/Makefile.am:
+       * sys/xvideo/Makefile.am:
+       * sys/xvimage/Makefile.am:
+         Move interface libs from LDFLAGS to LIBADD, fix relocation errors
+         after installation (see #127664).
+
+2004-01-02  David Schleef  <ds@schleef.org>
+
+       * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_init),
+       (gst_ffmpegenc_connect):  Negotiation fixes.
+       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_negotiate_format):
+       Remove inappropriate gst_caps_free().
+       * sys/ximage/ximagesink.c: (gst_ximagesink_sinkconnect):
+       Reenable Ronald's internal resize code, since the core handles
+       it correctly now.
+
+2004-01-02  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_init):
+       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_init):
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_base_init), (gst_v4lsrc_init):
+         Fix pad template stuff.
+
+2004-01-02  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/matroska/ebml-read.c: (gst_ebml_read_sint):
+       * gst/matroska/ebml-write.c: (gst_ebml_write_sint):
+         fix signed integer reading/writing.
+
+2004-01-02  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/alsa/README:
+         Remove outdated document
+
+2004-01-03  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * gst/cutter/gstcutter.c: (gst_cutter_init):
+         src pad was being created twice - oops.
+
+2004-01-02  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_sinkconnect):
+         Comment out internal resize. It doesn't handle the resulting
+         XEvent internally, does another try_set_caps() which leads to
+         a really nice loop.
+         Real fix will come when Julien and Dave are awake. ;).
+
+2004-01-02  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/mpeg2enc/gstmpeg2enc.cc:
+         fix const/nonconst compile issue.
+
+2004-01-02  David Schleef  <ds@schleef.org>
+
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_fixate),
+       (gst_xvimagesink_sinkconnect), (gst_xvimagesink_init):
+       Add fixate function and a check for bad formats.
+
+2004-01-01  David Schleef  <ds@schleef.org>
+
+       Negotiation fixes:
+       * gst-libs/gst/audio/gstaudiofilter.c: (gst_audiofilter_link),
+       (gst_audiofilter_init):
+       * gst/debug/efence.c: (gst_efence_init):
+       * gst/deinterlace/gstdeinterlace.c: (gst_deinterlace_link),
+       (gst_deinterlace_init):
+       * gst/volume/gstvolume.c: (volume_connect):
+
+2004-01-01  David Schleef  <ds@schleef.org>
+
+       Convert elements to use gst_pad_use_explicit_caps() where
+       appropriate:
+       * ext/a52dec/gsta52dec.c: (gst_a52dec_init), (gst_a52dec_reneg):
+       * ext/audiofile/gstafparse.c: (gst_afparse_init),
+       (gst_afparse_open_file):
+       * ext/audiofile/gstafsrc.c: (gst_afsrc_init),
+       (gst_afsrc_open_file):
+       * ext/esd/esdmon.c: (gst_esdmon_init), (gst_esdmon_get):
+       * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_init),
+       (gst_ffmpegdec_chain):
+       * ext/ffmpeg/gstffmpegdemux.c: (gst_ffmpegdemux_loop):
+       * ext/flac/gstflacdec.c: (gst_flacdec_init), (gst_flacdec_write):
+       * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_init),
+       (gst_gdk_pixbuf_chain):
+       * ext/jpeg/gstjpegdec.c: (gst_jpegdec_init), (gst_jpegdec_link),
+       (gst_jpegdec_chain):
+       * ext/mad/gstmad.c: (gst_mad_init), (gst_mad_chain):
+       * ext/mikmod/gstmikmod.c: (gst_mikmod_init),
+       (gst_mikmod_negotiate):
+       * ext/mpeg2dec/gstmpeg2dec.c: (gst_mpeg2dec_init),
+       (gst_mpeg2dec_negotiate_format):
+       * ext/mpeg2enc/gstmpeg2enc.cc:
+       * ext/ogg/gstoggdemux.c: (gst_ogg_pad_push):
+       * ext/speex/gstspeexdec.c: (gst_speexdec_init),
+       (gst_speexdec_sinkconnect):
+       * ext/swfdec/gstswfdec.c: (gst_swfdec_loop), (gst_swfdec_init):
+       * ext/vorbis/vorbisfile.c: (gst_vorbisfile_init),
+       (gst_vorbisfile_new_link):
+       * gst/ac3parse/gstac3parse.c: (gst_ac3parse_init),
+       (gst_ac3parse_chain):
+       * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_audio_stream),
+       (gst_asf_demux_setup_pad):
+       * gst/auparse/gstauparse.c: (gst_auparse_init),
+       (gst_auparse_chain):
+       * gst/id3/gstid3types.c: (gst_id3types_loop):
+       * gst/matroska/matroska-demux.c: (gst_matroska_demux_add_stream):
+       * gst/mpeg1videoparse/gstmp1videoparse.c: (gst_mp1videoparse_init),
+       (mp1videoparse_parse_seq):
+       * gst/mpegaudioparse/gstmpegaudioparse.c: (gst_mp3parse_init),
+       (bpf_from_header):
+       * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_parse_syshead),
+       (gst_mpeg_demux_parse_pes), (gst_mpeg_demux_lpcm_set_caps):
+       * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_init),
+       (gst_mpeg_parse_send_data):
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header),
+       (gst_qtdemux_add_stream):
+       * gst/realmedia/rmdemux.c: (gst_rmdemux_add_stream):
+       * gst/wavparse/gstwavparse.c: (gst_wavparse_init),
+       (gst_wavparse_parse_fmt):
+
+2004-01-01  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * configure.ac:
+         Fix configure check for mpeg2enc. We need 1.6.1.93 instead of
+         1.6.1.92, since the pkg-config file of 1.6.1.92 is borked and
+         it therefore uses the wrong include paths. Too bad... Note
+         that 1.6.1.93 is not release yet. ;).
+         Also add a check for mplex, which is now using the lib'ified
+         mplex from mjpegtools, too.
+       * ext/ffmpeg/gstffmpegcodecmap.c:
+         Add codec_tag for 3ivx/xvid. For xvid, this should fix playback
+         issues. I don't think ffmpeg handles 3ivx correctly, so this
+         probably won't work. But it won't hurt either.
+       * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_connect),
+       (gst_ffmpegdec_chain):
+       * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_connect),
+       (gst_ffmpegenc_chain_audio):
+         Fix memleak in audio encoding. Close codec if open fails, this
+         calls the cleanup routines so we can re-use the context.
+       * ext/mpeg2enc/gstmpeg2enc.cc:
+         Fix pad template names/types, fix memory issue with getcaps().
+       * ext/mpeg2enc/gstmpeg2encoder.cc:
+       * ext/mpeg2enc/gstmpeg2encoder.hh:
+         Fix compile issue with new caps system (const thingy).
+       * ext/mpeg2enc/gstmpeg2encpicturereader.cc:
+       * ext/mpeg2enc/gstmpeg2encpicturereader.hh:
+         We read a first frame right on initing, so that we have a caps
+         when we init the output. This caps is cached in padprivate and
+         read as first frame.
+       * ext/mplex/Makefile.am:
+       * ext/mplex/gstmplex.cc:
+       * ext/mplex/gstmplex.h:
+       * ext/mplex/gstmplex.hh:
+       * ext/mplex/gstmplexibitstream.cc:
+       * ext/mplex/gstmplexibitstream.hh:
+       * ext/mplex/gstmplexjob.cc:
+       * ext/mplex/gstmplexjob.hh:
+       * ext/mplex/gstmplexoutputstream.cc:
+       * ext/mplex/gstmplexoutputstream.hh:
+         We wrap mjpegtools mplex. So I rewrote the plugin. The old plugin
+         had issues, didn't do capsnego, supported only a subset of the
+         mplex features and required a mplex fork in our local CVS. Plus
+         that it worked agaist a very old mplex version. Rewriting was
+         faster than updating it.
+       * gst-libs/ext/Makefile.am:
+       * gst-libs/ext/mplex/INSTRUCT:
+       * gst-libs/ext/mplex/Makefile.am:
+       * gst-libs/ext/mplex/README:
+       * gst-libs/ext/mplex/TODO:
+       * gst-libs/ext/mplex/ac3strm_in.cc:
+       * gst-libs/ext/mplex/audiostrm.hh:
+       * gst-libs/ext/mplex/audiostrm_out.cc:
+       * gst-libs/ext/mplex/aunit.hh:
+       * gst-libs/ext/mplex/bits.cc:
+       * gst-libs/ext/mplex/bits.hh:
+       * gst-libs/ext/mplex/buffer.cc:
+       * gst-libs/ext/mplex/buffer.hh:
+       * gst-libs/ext/mplex/fastintfns.h:
+       * gst-libs/ext/mplex/format_codes.h:
+       * gst-libs/ext/mplex/inputstrm.cc:
+       * gst-libs/ext/mplex/inputstrm.hh:
+       * gst-libs/ext/mplex/lpcmstrm_in.cc:
+       * gst-libs/ext/mplex/mjpeg_logging.cc:
+       * gst-libs/ext/mplex/mjpeg_logging.h:
+       * gst-libs/ext/mplex/mjpeg_types.h:
+       * gst-libs/ext/mplex/mpastrm_in.cc:
+       * gst-libs/ext/mplex/mpegconsts.cc:
+       * gst-libs/ext/mplex/mpegconsts.h:
+       * gst-libs/ext/mplex/mplexconsts.hh:
+       * gst-libs/ext/mplex/multplex.cc:
+       * gst-libs/ext/mplex/outputstream.hh:
+       * gst-libs/ext/mplex/padstrm.cc:
+       * gst-libs/ext/mplex/padstrm.hh:
+       * gst-libs/ext/mplex/stillsstream.cc:
+       * gst-libs/ext/mplex/stillsstream.hh:
+       * gst-libs/ext/mplex/systems.cc:
+       * gst-libs/ext/mplex/systems.hh:
+       * gst-libs/ext/mplex/vector.cc:
+       * gst-libs/ext/mplex/vector.hh:
+       * gst-libs/ext/mplex/videostrm.hh:
+       * gst-libs/ext/mplex/videostrm_in.cc:
+       * gst-libs/ext/mplex/videostrm_out.cc:
+       * gst-libs/ext/mplex/yuv4mpeg.cc:
+       * gst-libs/ext/mplex/yuv4mpeg.h:
+       * gst-libs/ext/mplex/yuv4mpeg_intern.h:
+       * gst-libs/ext/mplex/yuv4mpeg_ratio.cc:
+         We don't fork mjpegtools' mplex in our CVS anymore.
+       * gst/avi/gstavidemux.c: (gst_avi_demux_src_getcaps),
+       (gst_avi_demux_add_stream):
+       * gst/avi/gstavidemux.h:
+         Add getcaps() function for proper caps nego. This makes some
+         parts of AVI playback/reading work.
+       * sys/ximage/ximagesink.c: (gst_ximagesink_sinkconnect):
+         Resize window on new capsnego. This is probably wrong, but
+         I'm still committing it because with current capsnego, the
+         first successfull capsnego is auto-fixated, therefore rounded
+         down to the lowest values in the caps. this results in a 16x16
+         XWindow that is not reized when real capsnego finishes.
+         Dave, I see more cases of this, do you know a proper solution?
+       * tools/gst-launch-ext.in:
+         Fix MPEG-4 AAC (Apple iPod/iTunes) file commandline.
+
+2003-12-31  David Schleef  <ds@schleef.org>
+
+       * gst/tcp/gsttcpsrc.c: (gst_tcpsrc_get):
+       * gst/udp/gstudpsrc.c: (gst_udpsrc_get):
+         Change gst_pad_proxy_link() to gst_pad_try_set_caps()
+
+2003-12-30  David Schleef  <ds@schleef.org>
+
+       * ext/ffmpeg/gstffmpegcolorspace.c:
+       (gst_ffmpegcsp_caps_remove_format_info), (gst_ffmpegcsp_getcaps),
+       (gst_ffmpegcsp_pad_link), (gst_ffmpegcsp_init),
+       (gst_ffmpegcsp_chain): Negotiation fixes
+       * ext/mad/gstmad.c: (gst_mad_chain): Negotiation fixes
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_chain),
+       (gst_audio_convert_link), (gst_audio_convert_channels):
+       * gst/audioscale/gstaudioscale.c: (gst_audioscale_getcaps),
+       (gst_audioscale_link), (gst_audioscale_get_buffer),
+       (gst_audioscale_chain): Negotiation fixes
+       * gst/audioscale/gstaudioscale.h:
+       * gst/videofilter/gstvideofilter.c:
+       (gst_videofilter_format_get_structure), (gst_videofilter_getcaps),
+       (gst_videofilter_link), (gst_videofilter_init),
+       (gst_videofilter_set_output_size), (gst_videofilter_setup),
+       (gst_videofilter_find_format_by_structure):
+       * gst/videofilter/gstvideofilter.h: Negotiation fixes
+       * gst/videoscale/gstvideoscale.c: (gst_videoscale_getcaps),
+       (gst_videoscale_link):
+       * gst/videoscale/videoscale.c: (videoscale_get_structure),
+       (videoscale_find_by_structure), (gst_videoscale_setup):
+       * gst/videoscale/videoscale.h: Negotiation fixes
+       * sys/ximage/ximagesink.c: (gst_ximagesink_handle_xevents),
+       (gst_ximagesink_fixate), (gst_ximagesink_init): Add a fixate
+       function, restrict resizing to a multiple of 4 (hack until
+       everyone supports odd sizes correctly).
+
+2003-12-29  Colin Walters  <walters@verbum.org>
+
+       * ext/esd/esdsink.c (gst_esdsink_link): Fix typo; get depth instead of
+       signed.
+
+2003-12-30  Jan Schmidt <thaytan@mad.scientist.com>
+
+       * ext/sndfile/gstsf.c: (gst_sf_loop):
+         Fix warning about discarding const qualifier
+
+2003-12-27  Jeremy Simon   <jesimon@libertysurf.fr>
+
+       * gst/cutter/gstcutter.c:
+       * gst/videoscale/gstvideoscale.c:
+       * gst/volenv/gstvolenv.c:
+       * gst-libs/gst/audio/audio.c:
+       * gst-libs/gst/video/video.c:
+         Fix warnings
+
+2003-12-27  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_open_audio):
+         Don't send ALSA debugging to stderr.
+       * ext/alsa/gstalsa.h:
+         Use GST_WARNING instead of g_warning when ALSA functions fail.
+
+2003-12-27  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support):
+         Free XVAdapterInfo correctly.
+
+2003-12-27  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/mad/gstid3tag.c: (gst_id3_tag_add_src_pad),
+       (gst_id3_tag_do_caps_nego), (gst_id3_tag_src_link):
+         Make id3tag use correct caps nego.
+
+2003-12-27  Amaury Jacquot <sxpert@esitcom.org>
+
+       * ext/ivorbis/vorbis.c:
+       * ext/ivorbis/vorbisenc.h:
+       * ext/ivorbis/vorbisfile.c:
+         Modify so that it uses the new caps things
+
+2003-12-27  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * testsuite/spider/spider1.c: (main):
+       * testsuite/spider/spider2.c: (main):
+       * testsuite/spider/spider3.c: (main):
+         Make tests compile again. They probably don't work.
+
+2003-12-24  Colin Walters  <walters@verbum.org>
+
+       * sys/oss/gstosssink.c (gst_osssink_sink_fixate): Return NULL if
+       we can't fixate the caps anymore.
+
+2003-12-23  David Schleef  <ds@schleef.org>
+
+       * gst/volume/gstvolume.c: (volume_init): Proxy getcaps.
+       * sys/oss/gstosssink.c: (gst_osssink_init),
+       (gst_osssink_sink_fixate): Add fixate function.
+
+2003-12-24  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/ffmpeg/gstffmpegcodecmap.c:
+       * ext/ffmpeg/gstffmpegcolorspace.c: (gst_ffmpegcsp_getcaps),
+       (gst_ffmpegcsp_srcconnect_func), (gst_ffmpegcsp_sinkconnect),
+       (gst_ffmpegcsp_srcconnect), (gst_ffmpegcsp_get_type),
+       (gst_ffmpegcsp_base_init), (gst_ffmpegcsp_class_init),
+       (gst_ffmpegcsp_init), (gst_ffmpegcsp_chain),
+       (gst_ffmpegcsp_change_state), (gst_ffmpegcsp_set_property),
+       (gst_ffmpegcsp_get_property), (gst_ffmpegcsp_register):
+         fix typo in RGB masks, and move back to "old" colorspace
+         capsnego code until whoever wrote this new crap has actually
+         tested it so that it works.
+         And yes, this works, keep it that way please.
+
+2003-12-23  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * ext/divx/gstdivxdec.c: (gst_divxdec_base_init),
+       (gst_divxdec_init), (gst_divxdec_negotiate):
+       * ext/divx/gstdivxdec.h:
+       * ext/divx/gstdivxenc.c: (gst_divxenc_base_init),
+       (gst_divxenc_init):
+       * ext/faac/gstfaac.c: (gst_faac_base_init), (gst_faac_init),
+       (gst_faac_sinkconnect), (gst_faac_srcconnect):
+       * ext/mpeg2enc/gstmpeg2enc.cc:
+       * ext/mpeg2enc/gstmpeg2encoder.cc:
+       * ext/mpeg2enc/gstmpeg2encpicturereader.cc:
+       * sys/dxr3/dxr3audiosink.c: (dxr3audiosink_base_init),
+       (dxr3audiosink_init), (dxr3audiosink_pcm_sinklink):
+       * sys/dxr3/dxr3spusink.c: (dxr3spusink_base_init),
+       (dxr3spusink_init):
+       * sys/dxr3/dxr3videosink.c: (dxr3videosink_base_init),
+       (dxr3videosink_init):
+         Fix caps breakage after Dave's caps branch merge.
+
+2003-12-23  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get):
+         Fix for 24bpp display.
+
+2003-12-23  Colin Walters  <walters@verbum.org>
+
+       * ext/gnomevfs/gstgnomevfssink.c: Add ARG_HANDLE property that takes
+       a GnomeVFSHandle directly.
+
+2003-12-22  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst/volume/Makefile.am:
+       * gst/volume/gstvolume.c: (volume_connect), (volume_parse_caps),
+       (volume_base_init), (volume_init):
+         Reenable volume element and fix to work with new caps stuff.
+         Rhythmbox needs this.
+
+2003-12-22  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * gst/qtdemux/qtdemux.c: (plugin_init):
+         qtdemux requires bytestream
+
+2003-12-22  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/alsa/gstalsa.c: (gst_alsa_get_caps), (gst_alsa_link):
+         Fix remaining caps handling errors due to CAPS merge.
+
+2003-12-22  Benjamin Otte  <in7y118@public.uni-hamburg.de>
+
+       * ext/faad/gstfaad.c: (gst_faad_base_init), (gst_faad_init),
+       (gst_faad_sinkconnect), (gst_faad_srcgetcaps),
+       (gst_faad_srcconnect):
+         Port to new caps system.
+
+2003-12-21  Julien MOUTTE  <julien@moutte.net>
+
+       * examples/gstplay/player.c: (got_time_tick), (got_stream_length),
+       (got_video_size), (main): using g_print instead of g_message.
+       * gst-libs/gst/play/gstplay.c: (gst_play_pipeline_setup): Fixing EOS
+       signal which was not emitted because of "switch" element added to the
+       bin but not connected. (Removing from the bin temporarily)
+
+2003-12-21  Julien MOUTTE  <julien@moutte.net>
+
+       * configure.ac: X_DISPLAY_MISSING is set to 1 if AC_PATH_XTRA fails to
+       find X development files. I don't understand the previous tests and
+       they fail on my debian/ppc unstable. This one works.
+       * examples/gstplay/player.c: (main): Set the pipeline to READY before
+       exiting.
+       * gst-libs/gst/play/gstplay.c: (gst_play_get_length_callback),
+       (gst_play_set_video_sink), (gst_play_set_audio_sink),
+       (gst_play_set_visualization): Add some safety checks in set_ methods
+       and state_change. This was throwing some ugly CRITICAL messages when
+       pipeline was getting disposed and casts were failing.
+
+2003-12-21  Ronald Bultje  <rbultje@ronald.bitfreak.net>
+
+       * configure.ac:
+         Improve mpeg2enc detection. This is for distributions that do
+         ship mjpegtools, but without mpeg2enc. Also does object check
+         for might there ever be ABI incompatibility.
+       * ext/mpeg2enc/gstmpeg2enc.cc:
+         Add Andrew as second maintainer (he's helping me), and also add
+         an error if no caps was set. This happens if I pull before capsnego
+         and that's something I should solve sometime else.
+       * gst/matroska/matroska-demux.c:
+       (gst_matroska_demux_parse_blockgroup):
+         Fix time parsing.
+       * gst/matroska/matroska-mux.c: (gst_matroska_mux_audio_pad_link),
+       (gst_matroska_mux_track_header):
+         Add caps to templates.
+       * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3_sink_factory):
+         Add mpegversion=1 to prevent confusion with MPEG/AAC.
+       * gst/mpegstream/gstmpegdemux.c:
+         Remove layer since it causes warnings about unfixed caps.
+       * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get):
+         Fix obvious typo (we error out if caps were set, we should of
+         course error out if *no* caps were set).
+       * sys/oss/gstosselement.c: (gst_osselement_convert):
+         Fix format conversion, we confused bits/bytes.
+       * sys/oss/gstosselement.h:
+         Improve documentation for 'bps'.
+       * sys/v4l/TODO:
+         Remove stuff about plugins that need removing - this was done
+         ages ago.
+       * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_init),
+       (gst_v4lmjpegsrc_src_convert), (gst_v4lmjpegsrc_src_query):
+       * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_init), (gst_v4lsrc_src_convert),
+       (gst_v4lsrc_src_query):
+       * sys/v4l2/gstv4l2src.c: (gst_v4l2src_init),
+       (gst_v4l2src_src_convert), (gst_v4l2src_src_query):
+         Add get_query_types(), get_formats() and query() functions.
+
+2003-12-21  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+       * ChangeLog: moved to gstreamer/docs/random/old/ChangeLog.gst-plugins
+        * moved CVS to freedesktop.org
+
diff --git a/subprojects/gst-plugins-ugly/docs/random/LICENSE b/subprojects/gst-plugins-ugly/docs/random/LICENSE
new file mode 100644 (file)
index 0000000..696b1c1
--- /dev/null
@@ -0,0 +1,18 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * 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.
+ */
diff --git a/subprojects/gst-plugins-ugly/docs/random/PORTED_09 b/subprojects/gst-plugins-ugly/docs/random/PORTED_09
new file mode 100644 (file)
index 0000000..92c40fa
--- /dev/null
@@ -0,0 +1,17 @@
+When porting a plugin start with 0.8 CVS head, not the old code in this module. There are many bugfixes which have gone into 0.8 which you want to keep.
+
+List of ported plugins (update when you commit a ported plugin):
+effectv (wim)
+mad    (wim)
+videofilter (wim)
+aalib  (wim)
+libcaca        (zeeshan)
+law    (wim)
+shout2  (zaheer) - not fully tested
+esdsink (arwed)
+
+osssink is partially done in the threaded branch (wim)
+
+- Remember that some plugins are already ported and now in the gst-plugins-base module.
+
+When you have ported a plugin remember to copy the relevant parts from configure.ac.orig into configure.ac and re-enable it in the Makefile.am files.
diff --git a/subprojects/gst-plugins-ugly/docs/sitemap.txt b/subprojects/gst-plugins-ugly/docs/sitemap.txt
new file mode 100644 (file)
index 0000000..058a271
--- /dev/null
@@ -0,0 +1 @@
+gst-index
diff --git a/subprojects/gst-plugins-ugly/ext/a52dec/gsta52dec.c b/subprojects/gst-plugins-ugly/ext/a52dec/gsta52dec.c
new file mode 100644 (file)
index 0000000..5beba90
--- /dev/null
@@ -0,0 +1,848 @@
+/* GStreamer
+ * Copyright (C) <2001> David I. Lehn <dlehn@users.sourceforge.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-a52dec
+ * @title: a52dec
+ *
+ * Dolby Digital (AC-3) audio decoder.
+ *
+ * ## Example launch line
+ * |[
+ * gst-launch-1.0 dvdreadsrc title=1 ! mpegpsdemux ! a52dec ! audioconvert ! audioresample ! autoaudiosink
+ * ]| Play audio part of a dvd title.
+ * |[
+ * gst-launch-1.0 filesrc location=abc.ac3 ! ac3parse ! a52dec ! audioconvert ! audioresample ! autoaudiosink
+ * ]| Decode and play a stand alone AC-3 file.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+#include <gst/gst.h>
+
+#include <a52dec/a52.h>
+#if !defined(A52_ACCEL_DETECT)
+#  include <a52dec/mm_accel.h>
+#endif
+#include "gsta52dec.h"
+
+#if HAVE_ORC
+#include <orc/orc.h>
+#endif
+
+#ifdef LIBA52_DOUBLE
+#define SAMPLE_WIDTH 64
+#define SAMPLE_FORMAT GST_AUDIO_NE(F64)
+#define SAMPLE_TYPE GST_AUDIO_FORMAT_F64
+#else
+#define SAMPLE_WIDTH 32
+#define SAMPLE_FORMAT GST_AUDIO_NE(F32)
+#define SAMPLE_TYPE GST_AUDIO_FORMAT_F32
+#endif
+
+GST_DEBUG_CATEGORY_STATIC (a52dec_debug);
+#define GST_CAT_DEFAULT (a52dec_debug)
+
+/* A52Dec args */
+enum
+{
+  ARG_0,
+  ARG_DRC,
+  ARG_MODE,
+  ARG_LFE,
+};
+
+static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-ac3; audio/ac3; audio/x-private1-ac3")
+    );
+
+static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-raw, "
+        "format = (string) " SAMPLE_FORMAT ", "
+        "layout = (string) interleaved, "
+        "rate = (int) [ 4000, 96000 ], " "channels = (int) [ 1, 6 ]")
+    );
+
+static gboolean a52_element_init (GstPlugin * plugin);
+
+#define gst_a52dec_parent_class parent_class
+G_DEFINE_TYPE (GstA52Dec, gst_a52dec, GST_TYPE_AUDIO_DECODER);
+GST_ELEMENT_REGISTER_DEFINE_CUSTOM (a52dec, a52_element_init);
+
+static gboolean gst_a52dec_start (GstAudioDecoder * dec);
+static gboolean gst_a52dec_stop (GstAudioDecoder * dec);
+static gboolean gst_a52dec_set_format (GstAudioDecoder * bdec, GstCaps * caps);
+static GstFlowReturn gst_a52dec_parse (GstAudioDecoder * dec,
+    GstAdapter * adapter, gint * offset, gint * length);
+static GstFlowReturn gst_a52dec_handle_frame (GstAudioDecoder * dec,
+    GstBuffer * buffer);
+
+static GstFlowReturn gst_a52dec_chain (GstPad * pad, GstObject * parent,
+    GstBuffer * buffer);
+static void gst_a52dec_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_a52dec_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+#define GST_TYPE_A52DEC_MODE (gst_a52dec_mode_get_type())
+static GType
+gst_a52dec_mode_get_type (void)
+{
+  static GType a52dec_mode_type = 0;
+  static const GEnumValue a52dec_modes[] = {
+    {A52_MONO, "Mono", "mono"},
+    {A52_STEREO, "Stereo", "stereo"},
+    {A52_3F, "3 Front", "3f"},
+    {A52_2F1R, "2 Front, 1 Rear", "2f1r"},
+    {A52_3F1R, "3 Front, 1 Rear", "3f1r"},
+    {A52_2F2R, "2 Front, 2 Rear", "2f2r"},
+    {A52_3F2R, "3 Front, 2 Rear", "3f2r"},
+    {A52_DOLBY, "Dolby", "dolby"},
+    {0, NULL, NULL},
+  };
+
+  if (!a52dec_mode_type) {
+    a52dec_mode_type = g_enum_register_static ("GstA52DecMode", a52dec_modes);
+  }
+  return a52dec_mode_type;
+}
+
+static void
+gst_a52dec_class_init (GstA52DecClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstAudioDecoderClass *gstbase_class;
+  guint cpuflags = 0;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+  gstbase_class = (GstAudioDecoderClass *) klass;
+
+  gobject_class->set_property = gst_a52dec_set_property;
+  gobject_class->get_property = gst_a52dec_get_property;
+
+  gstbase_class->start = GST_DEBUG_FUNCPTR (gst_a52dec_start);
+  gstbase_class->stop = GST_DEBUG_FUNCPTR (gst_a52dec_stop);
+  gstbase_class->set_format = GST_DEBUG_FUNCPTR (gst_a52dec_set_format);
+  gstbase_class->parse = GST_DEBUG_FUNCPTR (gst_a52dec_parse);
+  gstbase_class->handle_frame = GST_DEBUG_FUNCPTR (gst_a52dec_handle_frame);
+
+  /**
+   * GstA52Dec::drc
+   *
+   * Set to true to apply the recommended Dolby Digital dynamic range compression
+   * to the audio stream. Dynamic range compression makes loud sounds
+   * softer and soft sounds louder, so you can more easily listen
+   * to the stream without disturbing other people.
+   */
+  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_DRC,
+      g_param_spec_boolean ("drc", "Dynamic Range Compression",
+          "Use Dynamic Range Compression", FALSE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstA52Dec::mode
+   *
+   * Force a particular output channel configuration from the decoder. By default,
+   * the channel downmix (if any) is chosen automatically based on the downstream
+   * capabilities of the pipeline.
+   */
+  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_MODE,
+      g_param_spec_enum ("mode", "Decoder Mode", "Decoding Mode (default 3f2r)",
+          GST_TYPE_A52DEC_MODE, A52_3F2R,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstA52Dec::lfe
+   *
+   * Whether to output the LFE (Low Frequency Emitter) channel of the audio stream.
+   */
+  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_LFE,
+      g_param_spec_boolean ("lfe", "LFE", "LFE", TRUE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_add_static_pad_template (gstelement_class, &sink_factory);
+  gst_element_class_add_static_pad_template (gstelement_class, &src_factory);
+  gst_element_class_set_static_metadata (gstelement_class,
+      "ATSC A/52 audio decoder", "Codec/Decoder/Audio/Converter",
+      "Decodes ATSC A/52 encoded audio streams",
+      "David I. Lehn <dlehn@users.sourceforge.net>");
+
+  GST_DEBUG_CATEGORY_INIT (a52dec_debug, "a52dec", 0,
+      "AC3/A52 software decoder");
+
+  /* If no CPU instruction based acceleration is available, end up using the
+   * generic software djbfft based one when available in the used liba52 */
+#ifdef MM_ACCEL_DJBFFT
+  klass->a52_cpuflags = MM_ACCEL_DJBFFT;
+#elif defined(A52_ACCEL_DETECT)
+  klass->a52_cpuflags = A52_ACCEL_DETECT;
+#else
+  klass->a52_cpuflags = 0;
+#endif
+
+#if HAVE_ORC && !defined(A52_ACCEL_DETECT)
+  cpuflags = orc_target_get_default_flags (orc_target_get_by_name ("mmx"));
+  if (cpuflags & ORC_TARGET_MMX_MMX)
+    klass->a52_cpuflags |= MM_ACCEL_X86_MMX;
+  if (cpuflags & ORC_TARGET_MMX_3DNOW)
+    klass->a52_cpuflags |= MM_ACCEL_X86_3DNOW;
+  if (cpuflags & ORC_TARGET_MMX_MMXEXT)
+    klass->a52_cpuflags |= MM_ACCEL_X86_MMXEXT;
+#endif
+
+  GST_LOG ("CPU flags: a52=%08x, orc=%08x", klass->a52_cpuflags, cpuflags);
+
+  gst_type_mark_as_plugin_api (GST_TYPE_A52DEC_MODE, 0);
+}
+
+static void
+gst_a52dec_init (GstA52Dec * a52dec)
+{
+  a52dec->request_channels = A52_CHANNEL;
+  a52dec->dynamic_range_compression = FALSE;
+
+  a52dec->state = NULL;
+  a52dec->samples = NULL;
+
+  gst_audio_decoder_set_use_default_pad_acceptcaps (GST_AUDIO_DECODER_CAST
+      (a52dec), TRUE);
+  GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_DECODER_SINK_PAD (a52dec));
+
+  /* retrieve and intercept base class chain.
+   * Quite HACKish, but that's dvd specs/caps for you,
+   * since one buffer needs to be split into 2 frames */
+  a52dec->base_chain = GST_PAD_CHAINFUNC (GST_AUDIO_DECODER_SINK_PAD (a52dec));
+  gst_pad_set_chain_function (GST_AUDIO_DECODER_SINK_PAD (a52dec),
+      GST_DEBUG_FUNCPTR (gst_a52dec_chain));
+}
+
+static gboolean
+gst_a52dec_start (GstAudioDecoder * dec)
+{
+  GstA52Dec *a52dec = GST_A52DEC (dec);
+  GstA52DecClass *klass;
+  static GMutex init_mutex;
+
+  GST_DEBUG_OBJECT (dec, "start");
+
+  klass = GST_A52DEC_CLASS (G_OBJECT_GET_CLASS (a52dec));
+  g_mutex_lock (&init_mutex);
+#if defined(A52_ACCEL_DETECT)
+  a52dec->state = a52_init ();
+  /* This line is just to avoid being accused of not using klass */
+  a52_accel (klass->a52_cpuflags & A52_ACCEL_DETECT);
+#else
+  a52dec->state = a52_init (klass->a52_cpuflags);
+#endif
+  g_mutex_unlock (&init_mutex);
+
+  if (!a52dec->state) {
+    GST_ELEMENT_ERROR (GST_ELEMENT (a52dec), LIBRARY, INIT, (NULL),
+        ("failed to initialize a52 state"));
+    return FALSE;
+  }
+
+  a52dec->samples = a52_samples (a52dec->state);
+  a52dec->bit_rate = -1;
+  a52dec->sample_rate = -1;
+  a52dec->stream_channels = A52_CHANNEL;
+  a52dec->using_channels = A52_CHANNEL;
+  a52dec->level = 1;
+  a52dec->bias = 0;
+  a52dec->flag_update = TRUE;
+
+  /* call upon legacy upstream byte support (e.g. seeking) */
+  gst_audio_decoder_set_estimate_rate (dec, TRUE);
+
+  return TRUE;
+}
+
+static gboolean
+gst_a52dec_stop (GstAudioDecoder * dec)
+{
+  GstA52Dec *a52dec = GST_A52DEC (dec);
+
+  GST_DEBUG_OBJECT (dec, "stop");
+
+  a52dec->samples = NULL;
+  if (a52dec->state) {
+    a52_free (a52dec->state);
+    a52dec->state = NULL;
+  }
+
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_a52dec_parse (GstAudioDecoder * bdec, GstAdapter * adapter,
+    gint * _offset, gint * len)
+{
+  GstA52Dec *a52dec;
+  const guint8 *data;
+  gint av, size;
+  gint length = 0, flags, sample_rate, bit_rate;
+  GstFlowReturn result = GST_FLOW_EOS;
+
+  a52dec = GST_A52DEC (bdec);
+
+  size = av = gst_adapter_available (adapter);
+  data = (const guint8 *) gst_adapter_map (adapter, av);
+
+  /* find and read header */
+  bit_rate = a52dec->bit_rate;
+  sample_rate = a52dec->sample_rate;
+  flags = 0;
+  while (size >= 7) {
+    length = a52_syncinfo ((guint8 *) data, &flags, &sample_rate, &bit_rate);
+
+    if (length == 0) {
+      /* shift window to re-find sync */
+      data++;
+      size--;
+    } else if (length <= size) {
+      GST_LOG_OBJECT (a52dec, "Sync: frame size %d", length);
+      result = GST_FLOW_OK;
+      break;
+    } else {
+      GST_LOG_OBJECT (a52dec, "Not enough data available (needed %d had %d)",
+          length, size);
+      break;
+    }
+  }
+  gst_adapter_unmap (adapter);
+
+  *_offset = av - size;
+  *len = length;
+
+  return result;
+}
+
+static gint
+gst_a52dec_channels (int flags, GstAudioChannelPosition * pos)
+{
+  gint chans = 0;
+
+  if (flags & A52_LFE) {
+    chans += 1;
+    if (pos) {
+      pos[0] = GST_AUDIO_CHANNEL_POSITION_LFE1;
+    }
+  }
+  flags &= A52_CHANNEL_MASK;
+  switch (flags) {
+    case A52_3F2R:
+      if (pos) {
+        pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
+        pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER;
+        pos[2 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
+        pos[3 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_LEFT;
+        pos[4 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT;
+      }
+      chans += 5;
+      break;
+    case A52_2F2R:
+      if (pos) {
+        pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
+        pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
+        pos[2 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_LEFT;
+        pos[3 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT;
+      }
+      chans += 4;
+      break;
+    case A52_3F1R:
+      if (pos) {
+        pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
+        pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER;
+        pos[2 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
+        pos[3 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_CENTER;
+      }
+      chans += 4;
+      break;
+    case A52_2F1R:
+      if (pos) {
+        pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
+        pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
+        pos[2 + chans] = GST_AUDIO_CHANNEL_POSITION_REAR_CENTER;
+      }
+      chans += 3;
+      break;
+    case A52_3F:
+      if (pos) {
+        pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
+        pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER;
+        pos[2 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
+      }
+      chans += 3;
+      break;
+    case A52_CHANNEL:          /* Dual mono. Should really be handled as 2 src pads */
+    case A52_STEREO:
+    case A52_DOLBY:
+      if (pos) {
+        pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
+        pos[1 + chans] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
+      }
+      chans += 2;
+      break;
+    case A52_MONO:
+      if (pos) {
+        pos[0 + chans] = GST_AUDIO_CHANNEL_POSITION_MONO;
+      }
+      chans += 1;
+      break;
+    default:
+      /* error, caller should post error message */
+      return 0;
+  }
+
+  return chans;
+}
+
+static gboolean
+gst_a52dec_reneg (GstA52Dec * a52dec)
+{
+  gint channels;
+  gboolean result = FALSE;
+  GstAudioChannelPosition from[6], to[6];
+  GstAudioInfo info;
+
+  channels = gst_a52dec_channels (a52dec->using_channels, from);
+
+  if (!channels)
+    goto done;
+
+  GST_INFO_OBJECT (a52dec, "reneg channels:%d rate:%d",
+      channels, a52dec->sample_rate);
+
+  memcpy (to, from, sizeof (GstAudioChannelPosition) * channels);
+  gst_audio_channel_positions_to_valid_order (to, channels);
+  gst_audio_get_channel_reorder_map (channels, from, to,
+      a52dec->channel_reorder_map);
+
+  gst_audio_info_init (&info);
+  gst_audio_info_set_format (&info,
+      SAMPLE_TYPE, a52dec->sample_rate, channels, (channels > 1 ? to : NULL));
+
+  if (!gst_audio_decoder_set_output_format (GST_AUDIO_DECODER (a52dec), &info))
+    goto done;
+
+  result = TRUE;
+
+done:
+  return result;
+}
+
+static void
+gst_a52dec_update_streaminfo (GstA52Dec * a52dec)
+{
+  GstTagList *taglist;
+
+  taglist = gst_tag_list_new_empty ();
+  gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_BITRATE,
+      (guint) a52dec->bit_rate, NULL);
+
+  gst_audio_decoder_merge_tags (GST_AUDIO_DECODER (a52dec), taglist,
+      GST_TAG_MERGE_REPLACE);
+  gst_tag_list_unref (taglist);
+}
+
+static GstFlowReturn
+gst_a52dec_handle_frame (GstAudioDecoder * bdec, GstBuffer * buffer)
+{
+  GstA52Dec *a52dec;
+  gint channels, i;
+  gboolean need_reneg = FALSE;
+  gint chans;
+  gint length = 0, flags, sample_rate, bit_rate;
+  GstMapInfo map;
+  GstFlowReturn result = GST_FLOW_OK;
+  GstBuffer *outbuf;
+  const gint num_blocks = 6;
+
+  a52dec = GST_A52DEC (bdec);
+
+  /* no fancy draining */
+  if (G_UNLIKELY (!buffer))
+    return GST_FLOW_OK;
+
+  /* parsed stuff already, so this should work out fine */
+  gst_buffer_map (buffer, &map, GST_MAP_READ);
+  g_assert (map.size >= 7);
+
+  /* re-obtain some sync header info,
+   * should be same as during _parse and could also be cached there,
+   * but anyway ... */
+  bit_rate = a52dec->bit_rate;
+  sample_rate = a52dec->sample_rate;
+  flags = 0;
+  length = a52_syncinfo (map.data, &flags, &sample_rate, &bit_rate);
+  g_assert (length == map.size);
+
+  /* update stream information, renegotiate or re-streaminfo if needed */
+  need_reneg = FALSE;
+  if (a52dec->sample_rate != sample_rate) {
+    GST_DEBUG_OBJECT (a52dec, "sample rate changed");
+    need_reneg = TRUE;
+    a52dec->sample_rate = sample_rate;
+  }
+
+  if (flags) {
+    if (a52dec->stream_channels != (flags & (A52_CHANNEL_MASK | A52_LFE))) {
+      GST_DEBUG_OBJECT (a52dec, "stream channel flags changed, marking update");
+      a52dec->flag_update = TRUE;
+    }
+    a52dec->stream_channels = flags & (A52_CHANNEL_MASK | A52_LFE);
+  }
+
+  if (bit_rate != a52dec->bit_rate) {
+    a52dec->bit_rate = bit_rate;
+    gst_a52dec_update_streaminfo (a52dec);
+  }
+
+  /* If we haven't had an explicit number of channels chosen through properties
+   * at this point, choose what to downmix to now, based on what the peer will
+   * accept - this allows a52dec to do downmixing in preference to a
+   * downstream element such as audioconvert.
+   */
+  if (a52dec->request_channels != A52_CHANNEL) {
+    flags = a52dec->request_channels;
+  } else if (a52dec->flag_update) {
+    GstCaps *caps;
+
+    a52dec->flag_update = FALSE;
+
+    caps = gst_pad_get_allowed_caps (GST_AUDIO_DECODER_SRC_PAD (a52dec));
+    if (caps && gst_caps_get_size (caps) > 0) {
+      GstCaps *copy = gst_caps_copy_nth (caps, 0);
+      GstStructure *structure = gst_caps_get_structure (copy, 0);
+      gint orig_channels = flags ? gst_a52dec_channels (flags, NULL) : 6;
+      gint fixed_channels = 0;
+      const int a52_channels[6] = {
+        A52_MONO,
+        A52_STEREO,
+        A52_STEREO | A52_LFE,
+        A52_2F2R,
+        A52_2F2R | A52_LFE,
+        A52_3F2R | A52_LFE,
+      };
+
+      /* Prefer the original number of channels, but fixate to something
+       * preferred (first in the caps) downstream if possible.
+       */
+      gst_structure_fixate_field_nearest_int (structure, "channels",
+          orig_channels);
+
+      if (gst_structure_get_int (structure, "channels", &fixed_channels)
+          && fixed_channels <= 6) {
+        if (fixed_channels < orig_channels)
+          flags = a52_channels[fixed_channels - 1];
+      } else {
+        flags = a52_channels[5];
+      }
+
+      gst_caps_unref (copy);
+    } else if (flags)
+      flags = a52dec->stream_channels;
+    else
+      flags = A52_3F2R | A52_LFE;
+
+    if (caps)
+      gst_caps_unref (caps);
+  } else {
+    flags = a52dec->using_channels;
+  }
+
+  /* process */
+  flags |= A52_ADJUST_LEVEL;
+  a52dec->level = 1;
+  if (a52_frame (a52dec->state, map.data, &flags, &a52dec->level, a52dec->bias)) {
+    gst_buffer_unmap (buffer, &map);
+    GST_AUDIO_DECODER_ERROR (a52dec, 1, STREAM, DECODE, (NULL),
+        ("a52_frame error"), result);
+    goto exit;
+  }
+  gst_buffer_unmap (buffer, &map);
+
+  channels = flags & (A52_CHANNEL_MASK | A52_LFE);
+  if (a52dec->using_channels != channels) {
+    need_reneg = TRUE;
+    a52dec->using_channels = channels;
+  }
+
+  /* negotiate if required */
+  if (need_reneg) {
+    GST_DEBUG_OBJECT (a52dec,
+        "a52dec reneg: sample_rate:%d stream_chans:%d using_chans:%d",
+        a52dec->sample_rate, a52dec->stream_channels, a52dec->using_channels);
+    if (!gst_a52dec_reneg (a52dec))
+      goto failed_negotiation;
+  }
+
+  if (a52dec->dynamic_range_compression == FALSE) {
+    a52_dynrng (a52dec->state, NULL, NULL);
+  }
+
+  flags &= (A52_CHANNEL_MASK | A52_LFE);
+  chans = gst_a52dec_channels (flags, NULL);
+  if (!chans)
+    goto invalid_flags;
+
+  /* handle decoded data;
+   * each frame has 6 blocks, one block is 256 samples, ea */
+  outbuf =
+      gst_buffer_new_and_alloc (256 * chans * (SAMPLE_WIDTH / 8) * num_blocks);
+
+  gst_buffer_map (outbuf, &map, GST_MAP_WRITE);
+  {
+    guint8 *ptr = map.data;
+    for (i = 0; i < num_blocks; i++) {
+      if (a52_block (a52dec->state)) {
+        /* also marks discont */
+        GST_AUDIO_DECODER_ERROR (a52dec, 1, STREAM, DECODE, (NULL),
+            ("error decoding block %d", i), result);
+        if (result != GST_FLOW_OK) {
+          gst_buffer_unmap (outbuf, &map);
+          gst_buffer_unref (outbuf);
+          goto exit;
+        }
+      } else {
+        gint n, c;
+        gint *reorder_map = a52dec->channel_reorder_map;
+
+        for (n = 0; n < 256; n++) {
+          for (c = 0; c < chans; c++) {
+            ((sample_t *) ptr)[n * chans + reorder_map[c]] =
+                a52dec->samples[c * 256 + n];
+          }
+        }
+      }
+      ptr += 256 * chans * (SAMPLE_WIDTH / 8);
+    }
+  }
+  gst_buffer_unmap (outbuf, &map);
+
+  result = gst_audio_decoder_finish_frame (bdec, outbuf, 1);
+
+exit:
+  return result;
+
+  /* ERRORS */
+failed_negotiation:
+  {
+    GST_ELEMENT_ERROR (a52dec, CORE, NEGOTIATION, (NULL), (NULL));
+    return GST_FLOW_ERROR;
+  }
+invalid_flags:
+  {
+    GST_ELEMENT_ERROR (GST_ELEMENT (a52dec), STREAM, DECODE, (NULL),
+        ("Invalid channel flags: %d", flags));
+    return GST_FLOW_ERROR;
+  }
+}
+
+static gboolean
+gst_a52dec_set_format (GstAudioDecoder * bdec, GstCaps * caps)
+{
+  GstA52Dec *a52dec = GST_A52DEC (bdec);
+  GstStructure *structure;
+
+  structure = gst_caps_get_structure (caps, 0);
+
+  if (structure && gst_structure_has_name (structure, "audio/x-private1-ac3"))
+    a52dec->dvdmode = TRUE;
+  else
+    a52dec->dvdmode = FALSE;
+
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_a52dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+{
+  GstA52Dec *a52dec = GST_A52DEC (parent);
+  GstFlowReturn ret = GST_FLOW_OK;
+  gint first_access;
+
+  if (a52dec->dvdmode) {
+    gsize size;
+    guint8 data[2];
+    gint offset;
+    gint len;
+    GstBuffer *subbuf;
+
+    size = gst_buffer_get_size (buf);
+    if (size < 2)
+      goto not_enough_data;
+
+    gst_buffer_extract (buf, 0, data, 2);
+    first_access = (data[0] << 8) | data[1];
+
+    /* Skip the first_access header */
+    offset = 2;
+
+    if (first_access > 1) {
+      /* Length of data before first_access */
+      len = first_access - 1;
+
+      if (len <= 0 || offset + len > size)
+        goto bad_first_access_parameter;
+
+      subbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, offset, len);
+      GST_BUFFER_TIMESTAMP (subbuf) = GST_CLOCK_TIME_NONE;
+      ret = a52dec->base_chain (pad, parent, subbuf);
+      if (ret != GST_FLOW_OK) {
+        gst_buffer_unref (buf);
+        goto done;
+      }
+
+      offset += len;
+      len = size - offset;
+
+      if (len > 0) {
+        subbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, offset, len);
+        GST_BUFFER_TIMESTAMP (subbuf) = GST_BUFFER_TIMESTAMP (buf);
+
+        ret = a52dec->base_chain (pad, parent, subbuf);
+      }
+      gst_buffer_unref (buf);
+    } else {
+      /* first_access = 0 or 1, so if there's a timestamp it applies to the first byte */
+      subbuf =
+          gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, offset,
+          size - offset);
+      GST_BUFFER_TIMESTAMP (subbuf) = GST_BUFFER_TIMESTAMP (buf);
+      gst_buffer_unref (buf);
+      ret = a52dec->base_chain (pad, parent, subbuf);
+    }
+  } else {
+    ret = a52dec->base_chain (pad, parent, buf);
+  }
+
+done:
+  return ret;
+
+/* ERRORS */
+not_enough_data:
+  {
+    GST_ELEMENT_ERROR (GST_ELEMENT (a52dec), STREAM, DECODE, (NULL),
+        ("Insufficient data in buffer. Can't determine first_acess"));
+    gst_buffer_unref (buf);
+    return GST_FLOW_ERROR;
+  }
+bad_first_access_parameter:
+  {
+    GST_ELEMENT_ERROR (GST_ELEMENT (a52dec), STREAM, DECODE, (NULL),
+        ("Bad first_access parameter (%d) in buffer", first_access));
+    gst_buffer_unref (buf);
+    return GST_FLOW_ERROR;
+  }
+}
+
+static void
+gst_a52dec_set_property (GObject * object, guint prop_id, const GValue * value,
+    GParamSpec * pspec)
+{
+  GstA52Dec *src = GST_A52DEC (object);
+
+  switch (prop_id) {
+    case ARG_DRC:
+      GST_OBJECT_LOCK (src);
+      src->dynamic_range_compression = g_value_get_boolean (value);
+      GST_OBJECT_UNLOCK (src);
+      break;
+    case ARG_MODE:
+      GST_OBJECT_LOCK (src);
+      src->request_channels &= ~A52_CHANNEL_MASK;
+      src->request_channels |= g_value_get_enum (value);
+      GST_OBJECT_UNLOCK (src);
+      break;
+    case ARG_LFE:
+      GST_OBJECT_LOCK (src);
+      src->request_channels &= ~A52_LFE;
+      src->request_channels |= g_value_get_boolean (value) ? A52_LFE : 0;
+      GST_OBJECT_UNLOCK (src);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_a52dec_get_property (GObject * object, guint prop_id, GValue * value,
+    GParamSpec * pspec)
+{
+  GstA52Dec *src = GST_A52DEC (object);
+
+  switch (prop_id) {
+    case ARG_DRC:
+      GST_OBJECT_LOCK (src);
+      g_value_set_boolean (value, src->dynamic_range_compression);
+      GST_OBJECT_UNLOCK (src);
+      break;
+    case ARG_MODE:
+      GST_OBJECT_LOCK (src);
+      g_value_set_enum (value, src->request_channels & A52_CHANNEL_MASK);
+      GST_OBJECT_UNLOCK (src);
+      break;
+    case ARG_LFE:
+      GST_OBJECT_LOCK (src);
+      g_value_set_boolean (value, src->request_channels & A52_LFE);
+      GST_OBJECT_UNLOCK (src);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static gboolean
+a52_element_init (GstPlugin * plugin)
+{
+#if HAVE_ORC
+  orc_init ();
+#endif
+
+  return gst_element_register (plugin, "a52dec", GST_RANK_SECONDARY,
+      GST_TYPE_A52DEC);
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  return GST_ELEMENT_REGISTER (a52dec, plugin);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    a52dec,
+    "Decodes ATSC A/52 encoded audio streams",
+    plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
diff --git a/subprojects/gst-plugins-ugly/ext/a52dec/gsta52dec.h b/subprojects/gst-plugins-ugly/ext/a52dec/gsta52dec.h
new file mode 100644 (file)
index 0000000..c50450e
--- /dev/null
@@ -0,0 +1,105 @@
+/* GStreamer
+ * Copyright (C) <2001> David I. Lehn <dlehn@users.sourceforge.net>
+ *
+ * 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_A52DEC_H__
+#define __GST_A52DEC_H__
+
+#include <gst/gst.h>
+#include <gst/audio/audio.h>
+#include <gst/audio/gstaudiodecoder.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_A52DEC \
+  (gst_a52dec_get_type())
+#define GST_A52DEC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_A52DEC,GstA52Dec))
+#define GST_A52DEC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_A52DEC,GstA52DecClass))
+#define GST_IS_A52DEC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_A52DEC))
+#define GST_IS_A52DEC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_A52DEC))
+
+typedef struct _GstA52Dec GstA52Dec;
+typedef struct _GstA52DecClass GstA52DecClass;
+
+struct _GstA52Dec {
+  GstAudioDecoder element;
+
+  GstPadChainFunction base_chain;
+
+  gboolean       dvdmode;
+  gboolean       flag_update;
+  int            prev_flags;
+
+  /* stream properties */
+  int            bit_rate;
+  int            sample_rate;
+  int            stream_channels;
+  int            request_channels;
+  int            using_channels;
+
+  gint           channel_reorder_map[6];
+
+  sample_t       level;
+  sample_t       bias;
+  gboolean       dynamic_range_compression;
+  sample_t      *samples;
+  a52_state_t   *state;
+};
+
+struct _GstA52DecClass {
+  GstAudioDecoderClass parent_class;
+
+  guint32 a52_cpuflags;
+};
+
+GType gst_a52dec_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (a52dec);
+
+#ifndef A52_MONO
+#define A52_MONO 1
+#endif
+#ifndef A52_STEREO
+#define A52_STEREO 2
+#endif
+#ifndef A52_3F
+#define A52_3F 3
+#endif
+#ifndef A52_2F1R
+#define A52_2F1R 4
+#endif
+#ifndef A52_3F1R
+#define A52_3F1R 5
+#endif
+#ifndef A52_2F2R
+#define A52_2F2R 6
+#endif
+#ifndef A52_3F2R
+#define A52_3F2R 7
+#endif
+#ifndef A52_DOLBY
+#define A52_DOLBY 10
+#endif
+
+G_END_DECLS
+
+#endif /* __GST_A52DEC_H__ */
diff --git a/subprojects/gst-plugins-ugly/ext/a52dec/meson.build b/subprojects/gst-plugins-ugly/ext/a52dec/meson.build
new file mode 100644 (file)
index 0000000..843bef0
--- /dev/null
@@ -0,0 +1,22 @@
+if get_option('a52dec').disabled()
+  subdir_done()
+endif
+
+a52_dep = cc.find_library('a52', required : get_option('a52dec'))
+have_a52_h = cc.has_header_symbol('a52dec/a52.h', 'a52_init', prefix : '#include <stdint.h>')
+if not have_a52_h and get_option('a52dec').enabled()
+  error('a52dec plugin enabled but a52.h not found')
+endif
+
+if a52_dep.found() and have_a52_h
+  a52dec = library('gsta52dec',
+    'gsta52dec.c',
+    c_args : ugly_args,
+    include_directories : [configinc],
+    dependencies : [gstaudio_dep, orc_dep, a52_dep],
+    install : true,
+    install_dir : plugins_install_dir,
+  )
+  pkgconfig.generate(a52dec, install_dir : plugins_pkgconfig_install_dir)
+  plugins += [a52dec]
+endif
diff --git a/subprojects/gst-plugins-ugly/ext/amrnb/GstAmrnbEnc.prs b/subprojects/gst-plugins-ugly/ext/amrnb/GstAmrnbEnc.prs
new file mode 100644 (file)
index 0000000..69e3719
--- /dev/null
@@ -0,0 +1,11 @@
+[_presets_]
+version=0.10
+element-name=GstAmrnbEnc
+
+[enhance-size]
+_meta/comment=Maximize compression, lowest bitrate
+band-mode=0
+
+[enhance-quality]
+_meta/comment=Maximize quality, highest bitrate
+band-mode=7
diff --git a/subprojects/gst-plugins-ugly/ext/amrnb/README b/subprojects/gst-plugins-ugly/ext/amrnb/README
new file mode 100644 (file)
index 0000000..879dbe7
--- /dev/null
@@ -0,0 +1,6 @@
+Compiling AMRNB:
+================
+
+To compile the amrnb plugin, you need the opencore-amrnb development package.
+If your distribution does not provide this package, you can download the 
+source code from "http://sourceforge.net/projects/opencore-amr".
diff --git a/subprojects/gst-plugins-ugly/ext/amrnb/amrnb.c b/subprojects/gst-plugins-ugly/ext/amrnb/amrnb.c
new file mode 100644 (file)
index 0000000..3fe3a00
--- /dev/null
@@ -0,0 +1,44 @@
+/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
+ * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * 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 "amrnbdec.h"
+#include "amrnbenc.h"
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  gboolean ret = FALSE;
+
+  ret |= GST_ELEMENT_REGISTER (amrnbdec, plugin);
+  ret |= GST_ELEMENT_REGISTER (amrnbenc, plugin);
+
+  return ret;
+}
+
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    amrnb,
+    "Adaptive Multi-Rate Narrow-Band",
+    plugin_init, VERSION, GST_LICENSE_UNKNOWN, GST_PACKAGE_NAME,
+    GST_PACKAGE_ORIGIN);
diff --git a/subprojects/gst-plugins-ugly/ext/amrnb/amrnbdec.c b/subprojects/gst-plugins-ugly/ext/amrnb/amrnbdec.c
new file mode 100644 (file)
index 0000000..e984fb8
--- /dev/null
@@ -0,0 +1,309 @@
+/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
+ * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-amrnbdec
+ * @title: amrnbdec
+ * @see_also: #GstAmrnbEnc, #GstAmrParse
+ *
+ * AMR narrowband decoder based on the
+ * [opencore codec implementation](http://sourceforge.net/projects/opencore-amr).
+ *
+ * ## Example launch line
+ * |[
+ * gst-launch-1.0 filesrc location=abc.amr ! amrparse ! amrnbdec ! audioconvert ! audioresample ! autoaudiosink
+ * ]|
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "amrnbdec.h"
+
+static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/AMR, " "rate = (int) 8000, " "channels = (int) 1")
+    );
+
+static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-raw, format = (string) " GST_AUDIO_NE (S16) ", "
+        "layout = (string) interleaved, "
+        "rate = (int) 8000," "channels = (int) 1")
+    );
+
+GST_DEBUG_CATEGORY_STATIC (gst_amrnbdec_debug);
+#define GST_CAT_DEFAULT gst_amrnbdec_debug
+
+static const gint block_size_if1[16] = { 12, 13, 15, 17, 19, 20, 26, 31, 5,
+  0, 0, 0, 0, 0, 0, 0
+};
+
+static const gint block_size_if2[16] = { 12, 13, 15, 17, 18, 20, 25, 30, 5,
+  0, 0, 0, 0, 0, 0, 0
+};
+
+static GType
+gst_amrnb_variant_get_type (void)
+{
+  static GType gst_amrnb_variant_type = 0;
+  static const GEnumValue gst_amrnb_variant[] = {
+    {GST_AMRNB_VARIANT_IF1, "IF1", "IF1"},
+    {GST_AMRNB_VARIANT_IF2, "IF2", "IF2"},
+    {0, NULL, NULL},
+  };
+  if (!gst_amrnb_variant_type) {
+    gst_amrnb_variant_type =
+        g_enum_register_static ("GstAmrnbVariant", gst_amrnb_variant);
+  }
+  return gst_amrnb_variant_type;
+}
+
+#define GST_AMRNB_VARIANT_TYPE (gst_amrnb_variant_get_type())
+
+#define VARIANT_DEFAULT GST_AMRNB_VARIANT_IF1
+enum
+{
+  PROP_0,
+  PROP_VARIANT
+};
+
+static void gst_amrnbdec_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_amrnbdec_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+static gboolean gst_amrnbdec_start (GstAudioDecoder * dec);
+static gboolean gst_amrnbdec_stop (GstAudioDecoder * dec);
+static gboolean gst_amrnbdec_set_format (GstAudioDecoder * dec, GstCaps * caps);
+static GstFlowReturn gst_amrnbdec_parse (GstAudioDecoder * dec,
+    GstAdapter * adapter, gint * offset, gint * length);
+static GstFlowReturn gst_amrnbdec_handle_frame (GstAudioDecoder * dec,
+    GstBuffer * buffer);
+
+#define gst_amrnbdec_parent_class parent_class
+G_DEFINE_TYPE (GstAmrnbDec, gst_amrnbdec, GST_TYPE_AUDIO_DECODER);
+GST_ELEMENT_REGISTER_DEFINE (amrnbdec, "amrnbdec", GST_RANK_PRIMARY,
+    GST_TYPE_AMRNBDEC);
+
+static void
+gst_amrnbdec_class_init (GstAmrnbDecClass * klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  GstAudioDecoderClass *base_class = GST_AUDIO_DECODER_CLASS (klass);
+
+  object_class->set_property = gst_amrnbdec_set_property;
+  object_class->get_property = gst_amrnbdec_get_property;
+
+  gst_element_class_add_static_pad_template (element_class, &sink_template);
+  gst_element_class_add_static_pad_template (element_class, &src_template);
+
+  gst_element_class_set_static_metadata (element_class, "AMR-NB audio decoder",
+      "Codec/Decoder/Audio",
+      "Adaptive Multi-Rate Narrow-Band audio decoder",
+      "GStreamer maintainers <gstreamer-devel@lists.freedesktop.org>");
+
+  base_class->start = GST_DEBUG_FUNCPTR (gst_amrnbdec_start);
+  base_class->stop = GST_DEBUG_FUNCPTR (gst_amrnbdec_stop);
+  base_class->set_format = GST_DEBUG_FUNCPTR (gst_amrnbdec_set_format);
+  base_class->parse = GST_DEBUG_FUNCPTR (gst_amrnbdec_parse);
+  base_class->handle_frame = GST_DEBUG_FUNCPTR (gst_amrnbdec_handle_frame);
+
+  g_object_class_install_property (object_class, PROP_VARIANT,
+      g_param_spec_enum ("variant", "Variant",
+          "The decoder variant", GST_AMRNB_VARIANT_TYPE,
+          VARIANT_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+
+  GST_DEBUG_CATEGORY_INIT (gst_amrnbdec_debug, "amrnbdec", 0,
+      "AMR-NB audio decoder");
+
+  gst_type_mark_as_plugin_api (GST_AMRNB_VARIANT_TYPE, 0);
+}
+
+static void
+gst_amrnbdec_init (GstAmrnbDec * amrnbdec)
+{
+  gst_audio_decoder_set_needs_format (GST_AUDIO_DECODER (amrnbdec), TRUE);
+  gst_audio_decoder_set_use_default_pad_acceptcaps (GST_AUDIO_DECODER_CAST
+      (amrnbdec), TRUE);
+  GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_DECODER_SINK_PAD (amrnbdec));
+}
+
+static gboolean
+gst_amrnbdec_start (GstAudioDecoder * dec)
+{
+  GstAmrnbDec *amrnbdec = GST_AMRNBDEC (dec);
+
+  GST_DEBUG_OBJECT (dec, "start");
+  if (!(amrnbdec->handle = Decoder_Interface_init ()))
+    return FALSE;
+
+  amrnbdec->rate = 0;
+  amrnbdec->channels = 0;
+
+  return TRUE;
+}
+
+static gboolean
+gst_amrnbdec_stop (GstAudioDecoder * dec)
+{
+  GstAmrnbDec *amrnbdec = GST_AMRNBDEC (dec);
+
+  GST_DEBUG_OBJECT (dec, "stop");
+  Decoder_Interface_exit (amrnbdec->handle);
+
+  return TRUE;
+}
+
+static void
+gst_amrnbdec_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstAmrnbDec *self = GST_AMRNBDEC (object);
+
+  switch (prop_id) {
+    case PROP_VARIANT:
+      self->variant = g_value_get_enum (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+  return;
+}
+
+static void
+gst_amrnbdec_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstAmrnbDec *self = GST_AMRNBDEC (object);
+
+  switch (prop_id) {
+    case PROP_VARIANT:
+      g_value_set_enum (value, self->variant);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+  return;
+}
+
+static gboolean
+gst_amrnbdec_set_format (GstAudioDecoder * dec, GstCaps * caps)
+{
+  GstStructure *structure;
+  GstAmrnbDec *amrnbdec;
+  GstAudioInfo info;
+
+  amrnbdec = GST_AMRNBDEC (dec);
+
+  structure = gst_caps_get_structure (caps, 0);
+
+  /* get channel count */
+  gst_structure_get_int (structure, "channels", &amrnbdec->channels);
+  gst_structure_get_int (structure, "rate", &amrnbdec->rate);
+
+  /* create reverse caps */
+  gst_audio_info_init (&info);
+  gst_audio_info_set_format (&info,
+      GST_AUDIO_FORMAT_S16, amrnbdec->rate, amrnbdec->channels, NULL);
+
+  return gst_audio_decoder_set_output_format (dec, &info);
+}
+
+static GstFlowReturn
+gst_amrnbdec_parse (GstAudioDecoder * dec, GstAdapter * adapter,
+    gint * offset, gint * length)
+{
+  GstAmrnbDec *amrnbdec = GST_AMRNBDEC (dec);
+  guint8 head[1];
+  guint size;
+  gboolean sync, eos;
+  gint block, mode;
+
+  size = gst_adapter_available (adapter);
+  if (size < 1)
+    return GST_FLOW_ERROR;
+
+  gst_audio_decoder_get_parse_state (dec, &sync, &eos);
+
+  /* need to peek data to get the size */
+  gst_adapter_copy (adapter, head, 0, 1);
+
+  /* get size */
+  switch (amrnbdec->variant) {
+    case GST_AMRNB_VARIANT_IF1:
+      mode = (head[0] >> 3) & 0x0F;
+      block = block_size_if1[mode] + 1;
+      break;
+    case GST_AMRNB_VARIANT_IF2:
+      mode = head[0] & 0x0F;
+      block = block_size_if2[mode] + 1;
+      break;
+    default:
+      g_assert_not_reached ();
+      return GST_FLOW_ERROR;
+      break;
+  }
+
+  GST_DEBUG_OBJECT (amrnbdec, "mode %d, block %d", mode, block);
+
+  if (block > size)
+    return GST_FLOW_EOS;
+
+  *offset = 0;
+  *length = block;
+
+  return GST_FLOW_OK;
+}
+
+static GstFlowReturn
+gst_amrnbdec_handle_frame (GstAudioDecoder * dec, GstBuffer * buffer)
+{
+  GstAmrnbDec *amrnbdec;
+  GstMapInfo inmap, outmap;
+  GstBuffer *out;
+
+  amrnbdec = GST_AMRNBDEC (dec);
+
+  /* no fancy flushing */
+  if (!buffer || !gst_buffer_get_size (buffer))
+    return GST_FLOW_OK;
+
+  gst_buffer_map (buffer, &inmap, GST_MAP_READ);
+
+  /* get output */
+  out = gst_buffer_new_and_alloc (160 * 2);
+  /* decode */
+  gst_buffer_map (out, &outmap, GST_MAP_WRITE);
+  Decoder_Interface_Decode (amrnbdec->handle, inmap.data,
+      (gint16 *) outmap.data, 0);
+  gst_buffer_unmap (out, &outmap);
+
+  gst_buffer_unmap (buffer, &inmap);
+
+  return gst_audio_decoder_finish_frame (dec, out, 1);
+}
diff --git a/subprojects/gst-plugins-ugly/ext/amrnb/amrnbdec.h b/subprojects/gst-plugins-ugly/ext/amrnb/amrnbdec.h
new file mode 100644 (file)
index 0000000..25b3db2
--- /dev/null
@@ -0,0 +1,71 @@
+/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
+ * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * 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_AMRNBDEC_H__
+#define __GST_AMRNBDEC_H__
+
+#include <gst/gst.h>
+#include <gst/audio/gstaudiodecoder.h>
+
+#include <opencore-amrnb/interf_dec.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_AMRNBDEC \
+  (gst_amrnbdec_get_type())
+#define GST_AMRNBDEC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_AMRNBDEC, GstAmrnbDec))
+#define GST_AMRNBDEC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_AMRNBDEC, GstAmrnbDecClass))
+#define GST_IS_AMRNBDEC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_AMRNBDEC))
+#define GST_IS_AMRNBDEC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_AMRNBDEC))
+
+typedef struct _GstAmrnbDec GstAmrnbDec;
+typedef struct _GstAmrnbDecClass GstAmrnbDecClass;
+
+typedef enum
+{
+  GST_AMRNB_VARIANT_IF1,
+  GST_AMRNB_VARIANT_IF2
+} GstAmrnbVariant;
+
+struct _GstAmrnbDec {
+  GstAudioDecoder element;
+
+  GstAmrnbVariant variant;
+
+  /* library handle */
+  void *handle;
+
+  /* output settings */
+  gint channels, rate;
+};
+
+struct _GstAmrnbDecClass {
+  GstAudioDecoderClass parent_class;
+};
+
+GType gst_amrnbdec_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (amrnbdec);
+
+G_END_DECLS
+
+#endif /* __GST_AMRNBDEC_H__ */
diff --git a/subprojects/gst-plugins-ugly/ext/amrnb/amrnbenc.c b/subprojects/gst-plugins-ugly/ext/amrnb/amrnbenc.c
new file mode 100644 (file)
index 0000000..8417326
--- /dev/null
@@ -0,0 +1,295 @@
+/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
+ * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-amrnbenc
+ * @title: amrnbenc
+ * @see_also: #GstAmrnbDec, #GstAmrnbParse
+ *
+ * AMR narrowband encoder based on the
+ * [opencore codec implementation](http://sourceforge.net/projects/opencore-amr).
+ *
+ * ## Example launch line
+ * |[
+ * gst-launch-1.0 filesrc location=abc.wav ! wavparse ! audioconvert ! audioresample ! amrnbenc ! filesink location=abc.amr
+ * ]|
+ * Please note that the above stream misses the header, that is needed to play
+ * the stream.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "amrnbenc.h"
+
+static GType
+gst_amrnbenc_bandmode_get_type (void)
+{
+  static GType gst_amrnbenc_bandmode_type = 0;
+  static const GEnumValue gst_amrnbenc_bandmode[] = {
+    {MR475, "MR475", "MR475"},
+    {MR515, "MR515", "MR515"},
+    {MR59, "MR59", "MR59"},
+    {MR67, "MR67", "MR67"},
+    {MR74, "MR74", "MR74"},
+    {MR795, "MR795", "MR795"},
+    {MR102, "MR102", "MR102"},
+    {MR122, "MR122", "MR122"},
+    {MRDTX, "MRDTX", "MRDTX"},
+    {0, NULL, NULL},
+  };
+  if (!gst_amrnbenc_bandmode_type) {
+    gst_amrnbenc_bandmode_type =
+        g_enum_register_static ("GstAmrnbEncBandMode", gst_amrnbenc_bandmode);
+  }
+  return gst_amrnbenc_bandmode_type;
+}
+
+#define GST_AMRNBENC_BANDMODE_TYPE (gst_amrnbenc_bandmode_get_type())
+
+#define BANDMODE_DEFAULT MR122
+enum
+{
+  PROP_0,
+  PROP_BANDMODE
+};
+
+static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-raw, format = (string) " GST_AUDIO_NE (S16) ", "
+        "layout = (string) interleaved, "
+        "rate = (int) 8000," "channels = (int) 1")
+    );
+
+static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/AMR, " "rate = (int) 8000, " "channels = (int) 1")
+    );
+
+GST_DEBUG_CATEGORY_STATIC (gst_amrnbenc_debug);
+#define GST_CAT_DEFAULT gst_amrnbenc_debug
+
+static gboolean gst_amrnbenc_start (GstAudioEncoder * enc);
+static gboolean gst_amrnbenc_stop (GstAudioEncoder * enc);
+static gboolean gst_amrnbenc_set_format (GstAudioEncoder * enc,
+    GstAudioInfo * info);
+static GstFlowReturn gst_amrnbenc_handle_frame (GstAudioEncoder * enc,
+    GstBuffer * in_buf);
+
+#define gst_amrnbenc_parent_class parent_class
+G_DEFINE_TYPE (GstAmrnbEnc, gst_amrnbenc, GST_TYPE_AUDIO_ENCODER);
+GST_ELEMENT_REGISTER_DEFINE (amrnbenc, "amrnbenc", GST_RANK_SECONDARY,
+    GST_TYPE_AMRNBENC);
+
+static void
+gst_amrnbenc_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstAmrnbEnc *self = GST_AMRNBENC (object);
+
+  switch (prop_id) {
+    case PROP_BANDMODE:
+      self->bandmode = g_value_get_enum (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+  return;
+}
+
+static void
+gst_amrnbenc_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstAmrnbEnc *self = GST_AMRNBENC (object);
+
+  switch (prop_id) {
+    case PROP_BANDMODE:
+      g_value_set_enum (value, self->bandmode);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+  return;
+}
+
+static void
+gst_amrnbenc_class_init (GstAmrnbEncClass * klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  GstAudioEncoderClass *base_class = GST_AUDIO_ENCODER_CLASS (klass);
+
+  object_class->set_property = gst_amrnbenc_set_property;
+  object_class->get_property = gst_amrnbenc_get_property;
+
+  base_class->start = GST_DEBUG_FUNCPTR (gst_amrnbenc_start);
+  base_class->stop = GST_DEBUG_FUNCPTR (gst_amrnbenc_stop);
+  base_class->set_format = GST_DEBUG_FUNCPTR (gst_amrnbenc_set_format);
+  base_class->handle_frame = GST_DEBUG_FUNCPTR (gst_amrnbenc_handle_frame);
+
+  g_object_class_install_property (object_class, PROP_BANDMODE,
+      g_param_spec_enum ("band-mode", "Band Mode",
+          "Encoding Band Mode (Kbps)", GST_AMRNBENC_BANDMODE_TYPE,
+          BANDMODE_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_add_static_pad_template (element_class, &sink_template);
+  gst_element_class_add_static_pad_template (element_class, &src_template);
+
+  gst_element_class_set_static_metadata (element_class, "AMR-NB audio encoder",
+      "Codec/Encoder/Audio",
+      "Adaptive Multi-Rate Narrow-Band audio encoder",
+      "Wim Taymans <wim.taymans@gmail.com>");
+
+  GST_DEBUG_CATEGORY_INIT (gst_amrnbenc_debug, "amrnbenc", 0,
+      "AMR-NB audio encoder");
+
+  gst_type_mark_as_plugin_api (GST_AMRNBENC_BANDMODE_TYPE, 0);
+}
+
+static void
+gst_amrnbenc_init (GstAmrnbEnc * amrnbenc)
+{
+  GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_ENCODER_SINK_PAD (amrnbenc));
+}
+
+static gboolean
+gst_amrnbenc_start (GstAudioEncoder * enc)
+{
+  GstAmrnbEnc *amrnbenc = GST_AMRNBENC (enc);
+
+  GST_DEBUG_OBJECT (amrnbenc, "start");
+
+  if (!(amrnbenc->handle = Encoder_Interface_init (0)))
+    return FALSE;
+
+  return TRUE;
+}
+
+static gboolean
+gst_amrnbenc_stop (GstAudioEncoder * enc)
+{
+  GstAmrnbEnc *amrnbenc = GST_AMRNBENC (enc);
+
+  GST_DEBUG_OBJECT (amrnbenc, "stop");
+
+  Encoder_Interface_exit (amrnbenc->handle);
+
+  return TRUE;
+}
+
+static gboolean
+gst_amrnbenc_set_format (GstAudioEncoder * enc, GstAudioInfo * info)
+{
+  GstAmrnbEnc *amrnbenc;
+  GstCaps *copy;
+
+  amrnbenc = GST_AMRNBENC (enc);
+
+  /* parameters already parsed for us */
+  amrnbenc->rate = GST_AUDIO_INFO_RATE (info);
+  amrnbenc->channels = GST_AUDIO_INFO_CHANNELS (info);
+
+  /* we do not really accept other input, but anyway ... */
+  /* this is not wrong but will sound bad */
+  if (amrnbenc->channels != 1) {
+    g_warning ("amrnbdec is only optimized for mono channels");
+  }
+  if (amrnbenc->rate != 8000) {
+    g_warning ("amrnbdec is only optimized for 8000 Hz samplerate");
+  }
+
+  /* create reverse caps */
+  copy = gst_caps_new_simple ("audio/AMR",
+      "channels", G_TYPE_INT, amrnbenc->channels,
+      "rate", G_TYPE_INT, amrnbenc->rate, NULL);
+
+  gst_audio_encoder_set_output_format (GST_AUDIO_ENCODER (amrnbenc), copy);
+  gst_caps_unref (copy);
+
+  /* report needs to base class: hand one frame at a time */
+  gst_audio_encoder_set_frame_samples_min (enc, 160);
+  gst_audio_encoder_set_frame_samples_max (enc, 160);
+  gst_audio_encoder_set_frame_max (enc, 1);
+
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_amrnbenc_handle_frame (GstAudioEncoder * enc, GstBuffer * buffer)
+{
+  GstAmrnbEnc *amrnbenc;
+  GstFlowReturn ret;
+  GstBuffer *out;
+  GstMapInfo in_map, out_map;
+  gsize out_size;
+
+  amrnbenc = GST_AMRNBENC (enc);
+
+  g_return_val_if_fail (amrnbenc->handle, GST_FLOW_FLUSHING);
+
+  /* we don't deal with squeezing remnants, so simply discard those */
+  if (G_UNLIKELY (buffer == NULL)) {
+    GST_DEBUG_OBJECT (amrnbenc, "no data");
+    return GST_FLOW_OK;
+  }
+
+  gst_buffer_map (buffer, &in_map, GST_MAP_READ);
+
+  if (G_UNLIKELY (in_map.size < 320)) {
+    gst_buffer_unmap (buffer, &in_map);
+    GST_DEBUG_OBJECT (amrnbenc, "discarding trailing data of %" G_GSIZE_FORMAT
+        " bytes", in_map.size);
+    return gst_audio_encoder_finish_frame (enc, NULL, -1);
+  }
+
+  /* get output, max size is 32 */
+  out = gst_buffer_new_and_alloc (32);
+  /* AMR encoder actually writes into the source data buffers it gets */
+  /* should be able to handle that with what we are given */
+
+  gst_buffer_map (out, &out_map, GST_MAP_WRITE);
+  /* encode */
+  out_size =
+      Encoder_Interface_Encode (amrnbenc->handle, amrnbenc->bandmode,
+      (short *) in_map.data, out_map.data, 0);
+  gst_buffer_unmap (out, &out_map);
+  gst_buffer_resize (out, 0, out_size);
+  gst_buffer_unmap (buffer, &in_map);
+
+  GST_LOG_OBJECT (amrnbenc, "output data size %" G_GSIZE_FORMAT, out_size);
+
+  if (out_size) {
+    ret = gst_audio_encoder_finish_frame (enc, out, 160);
+  } else {
+    /* should not happen (without dtx or so at least) */
+    GST_WARNING_OBJECT (amrnbenc, "no encoded data; discarding input");
+    gst_buffer_unref (out);
+    ret = gst_audio_encoder_finish_frame (enc, NULL, -1);
+  }
+
+  return ret;
+}
diff --git a/subprojects/gst-plugins-ugly/ext/amrnb/amrnbenc.h b/subprojects/gst-plugins-ugly/ext/amrnb/amrnbenc.h
new file mode 100644 (file)
index 0000000..83262e4
--- /dev/null
@@ -0,0 +1,67 @@
+/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
+ * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * 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_AMRNBENC_H__
+#define __GST_AMRNBENC_H__
+
+#include <gst/gst.h>
+#include <gst/audio/gstaudioencoder.h>
+
+#include <opencore-amrnb/interf_enc.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_AMRNBENC \
+  (gst_amrnbenc_get_type())
+#define GST_AMRNBENC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_AMRNBENC, GstAmrnbEnc))
+#define GST_AMRNBENC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_AMRNBENC, GstAmrnbEncClass))
+#define GST_IS_AMRNBENC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_AMRNBENC))
+#define GST_IS_AMRNBENC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_AMRNBENC))
+
+typedef struct _GstAmrnbEnc GstAmrnbEnc;
+typedef struct _GstAmrnbEncClass GstAmrnbEncClass;
+
+struct _GstAmrnbEnc {
+  GstAudioEncoder element;
+
+  /* library handle */
+  void *handle;
+
+  /* input settings */
+  gint channels, rate;
+  gint duration;
+
+  /* property */
+  enum Mode bandmode;
+};
+
+struct _GstAmrnbEncClass {
+  GstAudioEncoderClass parent_class;
+};
+
+GType gst_amrnbenc_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (amrnbenc);
+
+G_END_DECLS
+
+#endif /* __GST_AMRNBENC_H__ */
diff --git a/subprojects/gst-plugins-ugly/ext/amrnb/meson.build b/subprojects/gst-plugins-ugly/ext/amrnb/meson.build
new file mode 100644 (file)
index 0000000..fcddb58
--- /dev/null
@@ -0,0 +1,15 @@
+amrnb_dep = dependency('opencore-amrnb', version : '>= 0.1.3', required : get_option('amrnb'))
+
+if amrnb_dep.found()
+  amrnb = library('gstamrnb',
+    ['amrnb.c', 'amrnbdec.c', 'amrnbenc.c'],
+    c_args : ugly_args,
+    include_directories : [configinc],
+    dependencies : [gstaudio_dep, amrnb_dep],
+    install : true,
+    install_dir : plugins_install_dir,
+  )
+  pkgconfig.generate(amrnb, install_dir : plugins_pkgconfig_install_dir)
+  plugins += [amrnb]
+  install_data(sources: 'GstAmrnbEnc.prs', install_dir: presetdir)
+endif
diff --git a/subprojects/gst-plugins-ugly/ext/amrwbdec/README b/subprojects/gst-plugins-ugly/ext/amrwbdec/README
new file mode 100644 (file)
index 0000000..835adef
--- /dev/null
@@ -0,0 +1,6 @@
+Compiling AMRWB decoder:
+========================
+
+To compile the amrwbdec plugin, you need the opencore-amrwb development
+package. If your distribution does not provide this package, you can
+download the source code from "http://sourceforge.net/projects/opencore-amr".
diff --git a/subprojects/gst-plugins-ugly/ext/amrwbdec/amrwb.c b/subprojects/gst-plugins-ugly/ext/amrwbdec/amrwb.c
new file mode 100644 (file)
index 0000000..e3a028e
--- /dev/null
@@ -0,0 +1,38 @@
+/* GStreamer Adaptive Multi-Rate Wide-Band (AMR-WB) Decoder plugin
+ * Copyright (C) 2006 Edgard Lima <edgard.lima@gmail.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 "amrwbdec.h"
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  return GST_ELEMENT_REGISTER (amrwbdec, plugin);
+}
+
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    amrwbdec,
+    "Adaptive Multi-Rate Wide-Band Decoder",
+    plugin_init, VERSION, GST_LICENSE_UNKNOWN, GST_PACKAGE_NAME,
+    GST_PACKAGE_ORIGIN);
diff --git a/subprojects/gst-plugins-ugly/ext/amrwbdec/amrwbdec.c b/subprojects/gst-plugins-ugly/ext/amrwbdec/amrwbdec.c
new file mode 100644 (file)
index 0000000..3d84f64
--- /dev/null
@@ -0,0 +1,234 @@
+/* GStreamer Adaptive Multi-Rate Narrow-Band (AMR-NB) plugin
+ * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-amrwbdec
+ * @title: amrwbdec
+ * @see_also: #GstAmrwbEnc
+ *
+ * AMR wideband decoder based on the
+ * [opencore codec implementation](http://sourceforge.net/projects/opencore-amr).
+ *
+ * ## Example launch line
+ * |[
+ * gst-launch-1.0 filesrc location=abc.amr ! amrparse ! amrwbdec ! audioconvert ! audioresample ! autoaudiosink
+ * ]|
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/audio/audio.h>
+
+#include "amrwbdec.h"
+
+static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/AMR-WB, "
+        "rate = (int) 16000, " "channels = (int) 1")
+    );
+
+static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-raw, "
+        "format = (string) " GST_AUDIO_NE (S16) ", "
+        "layout = (string) interleaved, "
+        "rate = (int) 16000, " "channels = (int) 1")
+    );
+
+GST_DEBUG_CATEGORY_STATIC (gst_amrwbdec_debug);
+#define GST_CAT_DEFAULT gst_amrwbdec_debug
+
+#define L_FRAME16k      320     /* Frame size at 16kHz  */
+
+static const unsigned char block_size[16] =
+    { 18, 24, 33, 37, 41, 47, 51, 59, 61,
+  6, 0, 0, 0, 0, 1, 1
+};
+
+static gboolean gst_amrwbdec_start (GstAudioDecoder * dec);
+static gboolean gst_amrwbdec_stop (GstAudioDecoder * dec);
+static gboolean gst_amrwbdec_set_format (GstAudioDecoder * dec, GstCaps * caps);
+static GstFlowReturn gst_amrwbdec_parse (GstAudioDecoder * dec,
+    GstAdapter * adapter, gint * offset, gint * length);
+static GstFlowReturn gst_amrwbdec_handle_frame (GstAudioDecoder * dec,
+    GstBuffer * buffer);
+
+#define gst_amrwbdec_parent_class parent_class
+G_DEFINE_TYPE (GstAmrwbDec, gst_amrwbdec, GST_TYPE_AUDIO_DECODER);
+GST_ELEMENT_REGISTER_DEFINE (amrwbdec, "amrwbdec",
+    GST_RANK_PRIMARY, GST_TYPE_AMRWBDEC);
+
+static void
+gst_amrwbdec_class_init (GstAmrwbDecClass * klass)
+{
+  GstAudioDecoderClass *base_class = GST_AUDIO_DECODER_CLASS (klass);
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+
+  gst_element_class_add_static_pad_template (element_class, &sink_template);
+  gst_element_class_add_static_pad_template (element_class, &src_template);
+
+  gst_element_class_set_static_metadata (element_class, "AMR-WB audio decoder",
+      "Codec/Decoder/Audio",
+      "Adaptive Multi-Rate Wideband audio decoder",
+      "Renato Araujo <renato.filho@indt.org.br>");
+
+  base_class->start = GST_DEBUG_FUNCPTR (gst_amrwbdec_start);
+  base_class->stop = GST_DEBUG_FUNCPTR (gst_amrwbdec_stop);
+  base_class->set_format = GST_DEBUG_FUNCPTR (gst_amrwbdec_set_format);
+  base_class->parse = GST_DEBUG_FUNCPTR (gst_amrwbdec_parse);
+  base_class->handle_frame = GST_DEBUG_FUNCPTR (gst_amrwbdec_handle_frame);
+
+  GST_DEBUG_CATEGORY_INIT (gst_amrwbdec_debug, "amrwbdec", 0,
+      "AMR-WB audio decoder");
+}
+
+static void
+gst_amrwbdec_init (GstAmrwbDec * amrwbdec)
+{
+  gst_audio_decoder_set_needs_format (GST_AUDIO_DECODER (amrwbdec), TRUE);
+  gst_audio_decoder_set_use_default_pad_acceptcaps (GST_AUDIO_DECODER_CAST
+      (amrwbdec), TRUE);
+  GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_DECODER_SINK_PAD (amrwbdec));
+}
+
+static gboolean
+gst_amrwbdec_start (GstAudioDecoder * dec)
+{
+  GstAmrwbDec *amrwbdec = GST_AMRWBDEC (dec);
+
+  GST_DEBUG_OBJECT (dec, "start");
+  if (!(amrwbdec->handle = D_IF_init ()))
+    return FALSE;
+
+  amrwbdec->rate = 0;
+  amrwbdec->channels = 0;
+
+  return TRUE;
+}
+
+static gboolean
+gst_amrwbdec_stop (GstAudioDecoder * dec)
+{
+  GstAmrwbDec *amrwbdec = GST_AMRWBDEC (dec);
+
+  GST_DEBUG_OBJECT (dec, "stop");
+  D_IF_exit (amrwbdec->handle);
+
+  return TRUE;
+}
+
+static gboolean
+gst_amrwbdec_set_format (GstAudioDecoder * dec, GstCaps * caps)
+{
+  GstStructure *structure;
+  GstAmrwbDec *amrwbdec;
+  GstAudioInfo info;
+
+  amrwbdec = GST_AMRWBDEC (dec);
+
+  structure = gst_caps_get_structure (caps, 0);
+
+  /* get channel count */
+  gst_structure_get_int (structure, "channels", &amrwbdec->channels);
+  gst_structure_get_int (structure, "rate", &amrwbdec->rate);
+
+  /* create reverse caps */
+  gst_audio_info_init (&info);
+  gst_audio_info_set_format (&info,
+      GST_AUDIO_FORMAT_S16, amrwbdec->rate, amrwbdec->channels, NULL);
+
+  gst_audio_decoder_set_output_format (dec, &info);
+
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_amrwbdec_parse (GstAudioDecoder * dec, GstAdapter * adapter,
+    gint * offset, gint * length)
+{
+  GstAmrwbDec *amrwbdec = GST_AMRWBDEC (dec);
+  guint8 header[1];
+  guint size;
+  gboolean sync, eos;
+  gint block, mode;
+
+  size = gst_adapter_available (adapter);
+  if (size < 1)
+    return GST_FLOW_ERROR;
+
+  gst_audio_decoder_get_parse_state (dec, &sync, &eos);
+
+  /* need to peek data to get the size */
+  gst_adapter_copy (adapter, header, 0, 1);
+  mode = (header[0] >> 3) & 0x0F;
+  block = block_size[mode];
+
+  GST_DEBUG_OBJECT (amrwbdec, "mode %d, block %d", mode, block);
+
+  if (block) {
+    if (block > size)
+      return GST_FLOW_EOS;
+    *offset = 0;
+    *length = block;
+  } else {
+    /* no frame yet, skip one byte */
+    GST_LOG_OBJECT (amrwbdec, "skipping byte");
+    *offset = 1;
+    return GST_FLOW_EOS;
+  }
+
+  return GST_FLOW_OK;
+}
+
+static GstFlowReturn
+gst_amrwbdec_handle_frame (GstAudioDecoder * dec, GstBuffer * buffer)
+{
+  GstAmrwbDec *amrwbdec;
+  GstBuffer *out;
+  GstMapInfo inmap, outmap;
+
+  amrwbdec = GST_AMRWBDEC (dec);
+
+  /* no fancy flushing */
+  if (!buffer || !gst_buffer_get_size (buffer))
+    return GST_FLOW_OK;
+
+  /* the library seems to write into the source data, hence the copy. */
+  /* should be no problem */
+  gst_buffer_map (buffer, &inmap, GST_MAP_READ);
+
+  /* get output */
+  out = gst_buffer_new_and_alloc (sizeof (gint16) * L_FRAME16k);
+  gst_buffer_map (out, &outmap, GST_MAP_WRITE);
+
+  /* decode */
+  D_IF_decode (amrwbdec->handle, (unsigned char *) inmap.data,
+      (short int *) outmap.data, _good_frame);
+
+  gst_buffer_unmap (out, &outmap);
+  gst_buffer_unmap (buffer, &inmap);
+
+  /* send out */
+  return gst_audio_decoder_finish_frame (dec, out, 1);
+}
diff --git a/subprojects/gst-plugins-ugly/ext/amrwbdec/amrwbdec.h b/subprojects/gst-plugins-ugly/ext/amrwbdec/amrwbdec.h
new file mode 100644 (file)
index 0000000..601b943
--- /dev/null
@@ -0,0 +1,69 @@
+/* GStreamer Adaptive Multi-Rate Wide-Band (AMR-WB) plugin
+ * Copyright (C) 2006 Edgard Lima <edgard.lima@gmail.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_AMRWBDEC_H__
+#define __GST_AMRWBDEC_H__
+
+#include <gst/gst.h>
+#include <gst/audio/gstaudiodecoder.h>
+
+#include <opencore-amrwb/dec_if.h>
+#include <opencore-amrwb/if_rom.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_AMRWBDEC                      \
+  (gst_amrwbdec_get_type())
+#define GST_AMRWBDEC(obj)                                              \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_AMRWBDEC, GstAmrwbDec))
+#define GST_AMRWBDEC_CLASS(klass)                                      \
+  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_AMRWBDEC, GstAmrwbDecClass))
+#define GST_IS_AMRWBDEC(obj)                                   \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_AMRWBDEC))
+#define GST_IS_AMRWBDEC_CLASS(klass)                   \
+  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_AMRWBDEC))
+
+typedef struct _GstAmrwbDec GstAmrwbDec;
+typedef struct _GstAmrwbDecClass GstAmrwbDecClass;
+
+/**
+ * GstAmrwbDec:
+ *
+ * Opaque data structure.
+ */
+struct _GstAmrwbDec {
+  GstAudioDecoder element;
+
+  /* library handle */
+  void *handle;
+
+  /* output settings */
+  gint channels, rate;
+};
+
+struct _GstAmrwbDecClass {
+  GstAudioDecoderClass parent_class;
+};
+
+GType gst_amrwbdec_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (amrwbdec);
+
+G_END_DECLS
+
+#endif /* __GST_AMRWBDEC_H__ */
diff --git a/subprojects/gst-plugins-ugly/ext/amrwbdec/meson.build b/subprojects/gst-plugins-ugly/ext/amrwbdec/meson.build
new file mode 100644 (file)
index 0000000..734c371
--- /dev/null
@@ -0,0 +1,14 @@
+amrwb_dep = dependency('opencore-amrwb', version : '>= 0.1.3', required : get_option('amrwbdec'))
+
+if amrwb_dep.found()
+  amrwbdec = library('gstamrwbdec',
+    ['amrwb.c', 'amrwbdec.c'],
+    c_args : ugly_args,
+    include_directories : [configinc],
+    dependencies : [gstaudio_dep, amrwb_dep],
+    install : true,
+    install_dir : plugins_install_dir,
+  )
+  pkgconfig.generate(amrwbdec, install_dir : plugins_pkgconfig_install_dir)
+  plugins += [amrwbdec]
+endif
diff --git a/subprojects/gst-plugins-ugly/ext/cdio/gstcdio.c b/subprojects/gst-plugins-ugly/ext/cdio/gstcdio.c
new file mode 100644 (file)
index 0000000..f091f5b
--- /dev/null
@@ -0,0 +1,150 @@
+/* GStreamer
+ * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include <gst/tag/tag.h>
+
+GST_DEBUG_CATEGORY_EXTERN (gst_cdio_debug);
+#define GST_CAT_DEFAULT gst_cdio_debug
+
+static gboolean plugin_init (GstPlugin * plugin);
+
+/* cdio headers redefine VERSION etc., so do this here before including them */
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    cdio,
+    "Read audio from audio CDs",
+    plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
+
+#include "gstcdio.h"
+#include "gstcdiocddasrc.h"
+
+void
+gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext, track_t track,
+    cdtext_field_t field, const gchar * gst_tag, GstTagList ** p_tags)
+{
+  const gchar *vars[] = { "GST_CDTEXT_TAG_ENCODING", "GST_TAG_ENCODING", NULL };
+  const gchar *txt;
+  gchar *txt_utf8;
+
+#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
+  txt = cdtext_get_const (cdtext, field, track);
+#else
+  txt = cdtext_get_const (field, cdtext);
+#endif
+  if (txt == NULL || *txt == '\0') {
+    GST_DEBUG_OBJECT (src, "empty CD-TEXT field %u (%s)", field, gst_tag);
+    return;
+  }
+
+  /* The character encoding is not specified, and there is no provision
+   * for indicating in the CD-Text data which encoding is in use.. */
+  txt_utf8 = gst_tag_freeform_string_to_utf8 (txt, -1, vars);
+
+  if (txt_utf8 == NULL) {
+    GST_WARNING_OBJECT (src, "CD-TEXT %s could not be converted to UTF-8, "
+        "try setting the GST_CDTEXT_TAG_ENCODING or GST_TAG_ENCODING "
+        "environment variable", gst_tag);
+    return;
+  }
+
+  /* FIXME: beautify strings (they might be all uppercase for example)? */
+
+  if (*p_tags == NULL)
+    *p_tags = gst_tag_list_new_empty ();
+
+  gst_tag_list_add (*p_tags, GST_TAG_MERGE_REPLACE, gst_tag, txt_utf8, NULL);
+
+  GST_DEBUG_OBJECT (src, "CD-TEXT: %s = %s", gst_tag, txt_utf8);
+  g_free (txt_utf8);
+}
+
+GstTagList *
+#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
+gst_cdio_get_cdtext (GstObject * src, cdtext_t * t, track_t track)
+{
+  GstTagList *tags = NULL;
+
+#else
+gst_cdio_get_cdtext (GstObject * src, CdIo * cdio, track_t track)
+{
+  GstTagList *tags = NULL;
+  cdtext_t *t;
+
+  t = cdio_get_cdtext (cdio, track);
+  if (t == NULL) {
+    GST_DEBUG_OBJECT (src, "no CD-TEXT for track %u", track);
+    return NULL;
+  }
+#endif
+
+  gst_cdio_add_cdtext_field (src, t, track, CDTEXT_FIELD_PERFORMER,
+      GST_TAG_ARTIST, &tags);
+  gst_cdio_add_cdtext_field (src, t, track, CDTEXT_FIELD_TITLE, GST_TAG_TITLE,
+      &tags);
+
+  return tags;
+}
+
+void
+#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
+gst_cdio_add_cdtext_album_tags (GstObject * src, cdtext_t * t,
+    GstTagList * tags)
+{
+#else
+gst_cdio_add_cdtext_album_tags (GstObject * src, CdIo * cdio, GstTagList * tags)
+{
+  cdtext_t *t;
+
+  t = cdio_get_cdtext (cdio, 0);
+  if (t == NULL) {
+    GST_DEBUG_OBJECT (src, "no CD-TEXT for album");
+    return;
+  }
+#endif
+
+  gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_PERFORMER,
+      GST_TAG_ALBUM_ARTIST, &tags);
+  gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_TITLE, GST_TAG_ALBUM,
+      &tags);
+  gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_GENRE, GST_TAG_GENRE,
+      &tags);
+  GST_DEBUG ("CD-TEXT album tags: %" GST_PTR_FORMAT, tags);
+}
+
+void
+gst_cdio_log_handler (cdio_log_level_t level, const char *msg)
+{
+  const gchar *level_str[] = { "DEBUG", "INFO", "WARN", "ERROR", "ASSERT" };
+  const gchar *s;
+
+  s = level_str[CLAMP (level, 1, G_N_ELEMENTS (level_str)) - 1];
+  GST_DEBUG ("CDIO-%s: %s", s, GST_STR_NULL (msg));
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  return GST_ELEMENT_REGISTER (cdiocddasrc, plugin);
+}
diff --git a/subprojects/gst-plugins-ugly/ext/cdio/gstcdio.h b/subprojects/gst-plugins-ugly/ext/cdio/gstcdio.h
new file mode 100644 (file)
index 0000000..8571d27
--- /dev/null
@@ -0,0 +1,61 @@
+/* GStreamer
+ * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * 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_CDIO_H__
+#define __GST_CDIO_H__
+
+#include <gst/gst.h>
+#include <cdio/cdio.h>
+#include <cdio/cdtext.h>
+#include <cdio/logging.h>
+
+#if LIBCDIO_VERSION_NUM <= 83 && LIBCDIO_VERSION_NUM >= 76
+  #define CDTEXT_FIELD_PERFORMER CDTEXT_PERFORMER
+  #define CDTEXT_FIELD_GENRE     CDTEXT_GENRE
+  #define CDTEXT_FIELD_TITLE     CDTEXT_TITLE
+#endif
+
+
+void     gst_cdio_add_cdtext_field (GstObject      * src,
+                                    cdtext_t       * cdtext,
+                                    track_t          track,
+                                    cdtext_field_t   field,
+                                    const gchar    * gst_tag,
+                                    GstTagList    ** p_tags);
+
+GstTagList  * gst_cdio_get_cdtext  (GstObject      * src,
+#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
+                                    cdtext_t       * t,
+#else
+                                    CdIo           * cdio,
+#endif
+                                    track_t          track);
+
+void      gst_cdio_add_cdtext_album_tags (GstObject  * src,
+#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
+                                          cdtext_t   * t,
+#else
+                                          CdIo       * cdio,
+#endif
+                                          GstTagList * tags);
+void gst_cdio_log_handler (cdio_log_level_t level, const char *msg);
+
+#endif /* __GST_CDIO_H__ */
+
diff --git a/subprojects/gst-plugins-ugly/ext/cdio/gstcdiocddasrc.c b/subprojects/gst-plugins-ugly/ext/cdio/gstcdiocddasrc.c
new file mode 100644 (file)
index 0000000..15b044c
--- /dev/null
@@ -0,0 +1,518 @@
+/* GStreamer
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-cdiocddasrc
+ * @title: cdiocddasrc
+ * @see_also: GstCdParanoiaSrc, GstAudioCdSrc
+ *
+ * cdiocddasrc reads and extracts raw audio from Audio CDs. It can operate
+ * in one of two modes:
+ *
+ *  * treat each track as a separate stream, counting time from the start
+ *    of the track to the end of the track and posting EOS at the end of
+ *    a track, or
+ *  * treat the entire disc as one stream, counting time from the start of
+ *    the first track to the end of the last track, posting EOS only at
+ *    the end of the last track.
+ *
+ * With a recent-enough version of libcdio, the element will extract
+ * CD-TEXT if this is supported by the CD-drive and CD-TEXT information
+ * is available on the CD. The information will be posted on the bus in
+ * form of a tag message.
+ *
+ * When opened, the element will also calculate a CDDB disc ID and a
+ * MusicBrainz disc ID, which applications can use to query online
+ * databases for artist/title information. These disc IDs will also be
+ * posted on the bus as part of the tag messages.
+ *
+ * cdiocddasrc supports the GstUriHandler interface, so applications can use
+ * playbin with cdda://&lt;track-number&gt; URIs for playback (they will have
+ * to connect to playbin's notify::source signal and set the device on the
+ * cd source in the notify callback if they want to set the device property).
+ * Applications should use seeks in "track" format to switch between different
+ * tracks of the same CD (passing a new cdda:// URI to playbin involves opening
+ * and closing the CD device, which is much slower).
+ *
+ * ## Example launch line
+ *
+ * |[
+ * gst-launch-1.0 cdiocddasrc track=5 device=/dev/cdrom ! audioconvert ! vorbisenc ! oggmux ! filesink location=track5.ogg
+ * ]|
+ * This pipeline extracts track 5 of the audio CD and encodes it into an
+ * Ogg/Vorbis file.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstcdio.h"
+#include "gstcdiocddasrc.h"
+
+#include <gst/gst.h>
+#include "gst/gst-i18n-plugin.h"
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#define SAMPLES_PER_SECTOR (CDIO_CD_FRAMESIZE_RAW / sizeof (gint16))
+
+#define DEFAULT_READ_SPEED   -1
+
+enum
+{
+  PROP_0 = 0,
+  PROP_READ_SPEED
+};
+
+GST_DEBUG_CATEGORY (gst_cdio_debug);
+
+
+G_DEFINE_TYPE (GstCdioCddaSrc, gst_cdio_cdda_src, GST_TYPE_AUDIO_CD_SRC);
+#define _do_init \
+    GST_DEBUG_CATEGORY_INIT (gst_cdio_debug, "cdio", 0, "libcdio elements"); \
+    cdio_log_set_handler (gst_cdio_log_handler);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (cdiocddasrc, "cdiocddasrc",
+    GST_RANK_SECONDARY - 1, GST_TYPE_CDIO_CDDA_SRC, _do_init);
+
+static void gst_cdio_cdda_src_finalize (GObject * obj);
+static void gst_cdio_cdda_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_cdio_cdda_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static GstBuffer *gst_cdio_cdda_src_read_sector (GstAudioCdSrc * src,
+    gint sector);
+static gboolean gst_cdio_cdda_src_open (GstAudioCdSrc * src,
+    const gchar * device);
+static void gst_cdio_cdda_src_close (GstAudioCdSrc * src);
+
+#if 0
+static gchar *
+gst_cdio_cdda_src_get_default_device (GstAudioCdSrc * audiocdsrc)
+{
+  GstCdioCddaSrc *src;
+  gchar *default_device, *ret;
+
+  src = GST_CDIO_CDDA_SRC (audiocdsrc);
+
+  /* src->cdio may be NULL here */
+  default_device = cdio_get_default_device (src->cdio);
+
+  ret = g_strdup (default_device);
+  free (default_device);
+
+  GST_LOG_OBJECT (src, "returning default device: %s", GST_STR_NULL (ret));
+
+  return ret;
+}
+
+static gchar **
+gst_cdio_cdda_src_probe_devices (GstAudioCdSrc * audiocdsrc)
+{
+  char **devices, **ret, **d;
+
+  /* FIXME: might return the same hardware device twice, e.g.
+   * as /dev/cdrom and /dev/dvd - gotta do something more sophisticated */
+  devices = cdio_get_devices (DRIVER_DEVICE);
+
+  if (devices == NULL)
+    goto no_devices;
+
+  if (*devices == NULL)
+    goto empty_devices;
+
+  ret = g_strdupv (devices);
+  for (d = devices; *d != NULL; ++d) {
+    GST_DEBUG_OBJECT (audiocdsrc, "device: %s", GST_STR_NULL (*d));
+    free (*d);
+  }
+  free (devices);
+
+  return ret;
+
+  /* ERRORS */
+no_devices:
+  {
+    GST_DEBUG_OBJECT (audiocdsrc, "no devices found");
+    return NULL;
+  }
+empty_devices:
+  {
+    GST_DEBUG_OBJECT (audiocdsrc, "empty device list found");
+    free (devices);
+    return NULL;
+  }
+}
+#endif
+
+static GstBuffer *
+gst_cdio_cdda_src_read_sector (GstAudioCdSrc * audiocdsrc, gint sector)
+{
+  GstCdioCddaSrc *src;
+  guint8 *data;
+
+  src = GST_CDIO_CDDA_SRC (audiocdsrc);
+
+  data = g_malloc (CDIO_CD_FRAMESIZE_RAW);
+
+  /* can't use pad_alloc because we can't return the GstFlowReturn (FIXME 0.11) */
+  if (cdio_read_audio_sector (src->cdio, data, sector) != 0)
+    goto read_failed;
+
+  if (src->swap_le_be) {
+    gint16 *pcm_data = (gint16 *) data;
+    gint i;
+
+    for (i = 0; i < SAMPLES_PER_SECTOR; ++i)
+      pcm_data[i] = GUINT16_SWAP_LE_BE (pcm_data[i]);
+  }
+
+  return gst_buffer_new_wrapped (data, CDIO_CD_FRAMESIZE_RAW);
+
+  /* ERRORS */
+read_failed:
+  {
+    GST_WARNING_OBJECT (src, "read at sector %d failed!", sector);
+    GST_ELEMENT_ERROR (src, RESOURCE, READ,
+        (_("Could not read from CD.")),
+        ("cdio_read_audio_sector at %d failed: %s", sector,
+            g_strerror (errno)));
+    g_free (data);
+    return NULL;
+  }
+}
+
+static gboolean
+gst_cdio_cdda_src_do_detect_drive_endianness (GstCdioCddaSrc * src, gint from,
+    gint to)
+{
+  gint16 pcm_data[SAMPLES_PER_SECTOR], last_pcm_ne, last_pcm_oe;
+  gdouble ne_sumd0, ne_sumd1, ne_factor;
+  gdouble oe_sumd0, oe_sumd1, oe_factor;
+  gdouble diff;
+  gint sector;
+  gint i;
+
+  ne_sumd0 = ne_sumd1 = 0.0;
+  oe_sumd0 = oe_sumd1 = 0.0;
+  last_pcm_ne = 0;
+  last_pcm_oe = 0;
+
+  GST_LOG_OBJECT (src, "checking sector %d to %d", from, to);
+
+  for (sector = from; sector < to; ++sector) {
+    if (cdio_read_audio_sector (src->cdio, pcm_data, sector) != 0)
+      goto read_failed;
+
+    /* only evaluate samples for left channel */
+    for (i = 0; i < SAMPLES_PER_SECTOR; i += 2) {
+      gint16 pcm;
+
+      /* Native endianness first */
+      pcm = pcm_data[i];
+      ne_sumd0 += abs (pcm);
+      ne_sumd1 += abs (pcm - last_pcm_ne);
+      last_pcm_ne = pcm;
+
+      /* other endianness next */
+      pcm = GUINT16_SWAP_LE_BE (pcm);
+      oe_sumd0 += abs (pcm);
+      oe_sumd1 += abs (pcm - last_pcm_oe);
+      last_pcm_oe = pcm;
+    }
+
+  }
+
+  ne_factor = (ne_sumd1 / ne_sumd0);
+  oe_factor = (oe_sumd1 / oe_sumd0);
+  diff = ne_factor - oe_factor;
+
+  GST_DEBUG_OBJECT (src, "Native: %.2f, Other: %.2f, diff: %.2f",
+      ne_factor, oe_factor, diff);
+
+  if (diff > 0.5) {
+    GST_INFO_OBJECT (src, "Drive produces samples in other endianness");
+    src->swap_le_be = TRUE;
+    return TRUE;
+  } else if (diff < -0.5) {
+    GST_INFO_OBJECT (src, "Drive produces samples in host endianness");
+    src->swap_le_be = FALSE;
+    return TRUE;
+  } else {
+    GST_INFO_OBJECT (src, "Inconclusive, assuming host endianness");
+    src->swap_le_be = FALSE;
+    return FALSE;
+  }
+
+/* ERRORS */
+read_failed:
+  {
+    GST_WARNING_OBJECT (src, "could not read sector %d", sector);
+    src->swap_le_be = FALSE;
+    return FALSE;
+  }
+}
+
+static void
+gst_cdio_cdda_src_detect_drive_endianness (GstCdioCddaSrc * src, gint first,
+    gint last)
+{
+  gint from, to;
+
+  GST_INFO ("Detecting drive endianness");
+
+  /* try middle of disc first */
+  from = (first + last) / 2;
+  to = MIN (from + 10, last);
+  if (gst_cdio_cdda_src_do_detect_drive_endianness (src, from, to))
+    return;
+
+  /* if that was inconclusive, try other places */
+  from = (first + last) / 4;
+  to = MIN (from + 10, last);
+  if (gst_cdio_cdda_src_do_detect_drive_endianness (src, from, to))
+    return;
+
+  from = (first + last) * 3 / 4;
+  to = MIN (from + 10, last);
+  if (gst_cdio_cdda_src_do_detect_drive_endianness (src, from, to))
+    return;
+
+  /* if that's still inconclusive, we give up and assume host endianness */
+  return;
+}
+
+static gboolean
+notcdio_track_is_audio_track (const CdIo * p_cdio, track_t i_track)
+{
+  return (cdio_get_track_format (p_cdio, i_track) == TRACK_FORMAT_AUDIO);
+}
+
+static gboolean
+gst_cdio_cdda_src_open (GstAudioCdSrc * audiocdsrc, const gchar * device)
+{
+  GstCdioCddaSrc *src;
+  discmode_t discmode;
+  gint first_track, num_tracks, i;
+  gint first_audio_sector = 0, last_audio_sector = 0;
+#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
+  cdtext_t *cdtext;
+#endif
+
+  src = GST_CDIO_CDDA_SRC (audiocdsrc);
+
+  g_assert (device != NULL);
+  g_assert (src->cdio == NULL);
+
+  GST_LOG_OBJECT (src, "trying to open device %s", device);
+
+  if (!(src->cdio = cdio_open (device, DRIVER_UNKNOWN)))
+    goto open_failed;
+
+  discmode = cdio_get_discmode (src->cdio);
+  GST_LOG_OBJECT (src, "discmode: %d", (gint) discmode);
+
+  if (discmode != CDIO_DISC_MODE_CD_DA && discmode != CDIO_DISC_MODE_CD_MIXED)
+    goto not_audio;
+
+  first_track = cdio_get_first_track_num (src->cdio);
+  num_tracks = cdio_get_num_tracks (src->cdio);
+
+  if (num_tracks <= 0 || first_track < 0)
+    return TRUE;                /* base class will generate 'has no tracks' error */
+
+  if (src->read_speed != -1)
+    cdio_set_speed (src->cdio, src->read_speed);
+
+#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
+  cdtext = cdio_get_cdtext (src->cdio);
+
+  if (NULL == cdtext)
+    GST_DEBUG_OBJECT (src, "no CD-TEXT on disc");
+  else
+    gst_cdio_add_cdtext_album_tags (GST_OBJECT_CAST (src), cdtext,
+        audiocdsrc->tags);
+#else
+  gst_cdio_add_cdtext_album_tags (GST_OBJECT_CAST (src), src->cdio,
+      audiocdsrc->tags);
+#endif
+
+  GST_LOG_OBJECT (src, "%u tracks, first track: %d", num_tracks, first_track);
+
+  for (i = 0; i < num_tracks; ++i) {
+    GstAudioCdSrcTrack track = { 0, };
+    gint len_sectors;
+
+    len_sectors = cdio_get_track_sec_count (src->cdio, i + first_track);
+
+    track.num = i + first_track;
+    track.is_audio = notcdio_track_is_audio_track (src->cdio, i + first_track);
+
+    /* Note: LSN/LBA confusion all around us; in any case, this does
+     * the right thing here (for cddb id calculations etc. as well) */
+    track.start = cdio_get_track_lsn (src->cdio, i + first_track);
+    track.end = track.start + len_sectors - 1;  /* -1? */
+
+    if (track.is_audio) {
+      first_audio_sector = MIN (first_audio_sector, track.start);
+      last_audio_sector = MAX (last_audio_sector, track.end);
+    }
+#if LIBCDIO_VERSION_NUM > 83 || LIBCDIO_VERSION_NUM < 76
+    if (NULL != cdtext)
+      track.tags = gst_cdio_get_cdtext (GST_OBJECT (src), cdtext,
+          i + first_track);
+#else
+    track.tags = gst_cdio_get_cdtext (GST_OBJECT (src), src->cdio,
+        i + first_track);
+#endif
+
+    gst_audio_cd_src_add_track (GST_AUDIO_CD_SRC (src), &track);
+  }
+
+  /* Try to detect if we need to byte-order swap the samples coming from the
+   * drive, which might be the case if the CD drive operates in a different
+   * endianness than the host CPU's endianness (happens on e.g. Powerbook G4) */
+  gst_cdio_cdda_src_detect_drive_endianness (src, first_audio_sector,
+      last_audio_sector);
+
+  return TRUE;
+
+  /* ERRORS */
+open_failed:
+  {
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+        (_("Could not open CD device for reading.")),
+        ("cdio_open() failed: %s", g_strerror (errno)));
+    return FALSE;
+  }
+not_audio:
+  {
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+        (_("Disc is not an Audio CD.")), ("discmode: %d", (gint) discmode));
+
+    cdio_destroy (src->cdio);
+    src->cdio = NULL;
+    return FALSE;
+  }
+}
+
+static void
+gst_cdio_cdda_src_close (GstAudioCdSrc * audiocdsrc)
+{
+  GstCdioCddaSrc *src = GST_CDIO_CDDA_SRC (audiocdsrc);
+
+  if (src->cdio) {
+    cdio_destroy (src->cdio);
+    src->cdio = NULL;
+  }
+}
+
+static void
+gst_cdio_cdda_src_init (GstCdioCddaSrc * src)
+{
+  src->read_speed = DEFAULT_READ_SPEED; /* don't need atomic access here */
+  src->cdio = NULL;
+}
+
+static void
+gst_cdio_cdda_src_finalize (GObject * obj)
+{
+  GstCdioCddaSrc *src = GST_CDIO_CDDA_SRC (obj);
+
+  if (src->cdio) {
+    cdio_destroy (src->cdio);
+    src->cdio = NULL;
+  }
+
+  G_OBJECT_CLASS (gst_cdio_cdda_src_parent_class)->finalize (obj);
+}
+
+static void
+gst_cdio_cdda_src_class_init (GstCdioCddaSrcClass * klass)
+{
+  GstAudioCdSrcClass *audiocdsrc_class = GST_AUDIO_CD_SRC_CLASS (klass);
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  gobject_class->set_property = gst_cdio_cdda_src_set_property;
+  gobject_class->get_property = gst_cdio_cdda_src_get_property;
+  gobject_class->finalize = gst_cdio_cdda_src_finalize;
+
+  audiocdsrc_class->open = gst_cdio_cdda_src_open;
+  audiocdsrc_class->close = gst_cdio_cdda_src_close;
+  audiocdsrc_class->read_sector = gst_cdio_cdda_src_read_sector;
+#if 0
+  audiocdsrc_class->probe_devices = gst_cdio_cdda_src_probe_devices;
+  audiocdsrc_class->get_default_device = gst_cdio_cdda_src_get_default_device;
+#endif
+
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_READ_SPEED,
+      g_param_spec_int ("read-speed", "Read speed",
+          "Read from device at the specified speed (-1 = default)", -1, 100,
+          DEFAULT_READ_SPEED, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_set_static_metadata (element_class,
+      "CD audio source (CDDA)", "Source/File",
+      "Read audio from CD using libcdio",
+      "Tim-Philipp Müller <tim centricular net>");
+}
+
+static void
+gst_cdio_cdda_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstCdioCddaSrc *src = GST_CDIO_CDDA_SRC (object);
+
+  switch (prop_id) {
+    case PROP_READ_SPEED:{
+      gint speed;
+
+      speed = g_value_get_int (value);
+      g_atomic_int_set (&src->read_speed, speed);
+      break;
+    }
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_cdio_cdda_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstCdioCddaSrc *src = GST_CDIO_CDDA_SRC (object);
+
+  switch (prop_id) {
+    case PROP_READ_SPEED:{
+      gint speed;
+
+      speed = g_atomic_int_get (&src->read_speed);
+      g_value_set_int (value, speed);
+      break;
+    }
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
diff --git a/subprojects/gst-plugins-ugly/ext/cdio/gstcdiocddasrc.h b/subprojects/gst-plugins-ugly/ext/cdio/gstcdiocddasrc.h
new file mode 100644 (file)
index 0000000..478aa5f
--- /dev/null
@@ -0,0 +1,55 @@
+/* GStreamer
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * 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_CDIO_CDDA_SRC_H__
+#define __GST_CDIO_CDDA_SRC_H__
+
+#include <gst/audio/gstaudiocdsrc.h>
+#include <cdio/cdio.h>
+
+#define GST_TYPE_CDIO_CDDA_SRC            (gst_cdio_cdda_src_get_type ())
+#define GST_CDIO_CDDA_SRC(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_CDIO_CDDA_SRC, GstCdioCddaSrc))
+#define GST_CDIO_CDDA_SRC_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),  GST_TYPE_CDIO_CDDA_SRC, GstCdioCddaSrcClass))
+#define GST_IS_CDIO_CDDA_SRC(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_CDIO_CDDA_SRC))
+#define GST_IS_CDIO_CDDA_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),  GST_TYPE_CDIO_CDDA_SRC))
+
+typedef struct _GstCdioCddaSrc GstCdioCddaSrc;
+typedef struct _GstCdioCddaSrcClass GstCdioCddaSrcClass;
+
+struct _GstCdioCddaSrc
+{
+  GstAudioCdSrc  audiocdsrc;
+
+  gint           read_speed;    /* ATOMIC */
+
+  gboolean       swap_le_be;    /* Drive produces samples in other endianness */
+
+  CdIo          *cdio;          /* NULL if not open */
+};
+
+struct _GstCdioCddaSrcClass
+{
+  GstAudioCdSrcClass  audiocdsrc_class;
+};
+
+GType   gst_cdio_cdda_src_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (cdiocddasrc);
+
+#endif /* __GST_CDIO_CDDA_SRC_H__ */
+
diff --git a/subprojects/gst-plugins-ugly/ext/cdio/meson.build b/subprojects/gst-plugins-ugly/ext/cdio/meson.build
new file mode 100644 (file)
index 0000000..054d026
--- /dev/null
@@ -0,0 +1,14 @@
+cdio_dep = dependency('libcdio', version : '>= 0.76', required : get_option('cdio'))
+
+if cdio_dep.found()
+  cdio = library('gstcdio',
+    ['gstcdio.c', 'gstcdiocddasrc.c'],
+    c_args : ugly_args,
+    include_directories : [configinc, libsinc],
+    dependencies : [gstaudio_dep, gsttag_dep, cdio_dep],
+    install : true,
+    install_dir : plugins_install_dir,
+  )
+  pkgconfig.generate(cdio, install_dir : plugins_pkgconfig_install_dir)
+  plugins += [cdio]
+endif
diff --git a/subprojects/gst-plugins-ugly/ext/dvdread/README b/subprojects/gst-plugins-ugly/ext/dvdread/README
new file mode 100644 (file)
index 0000000..4594f65
--- /dev/null
@@ -0,0 +1,4 @@
+Various Info
+============
+
+http://dvd.sourceforge.net/
diff --git a/subprojects/gst-plugins-ugly/ext/dvdread/demo-play b/subprojects/gst-plugins-ugly/ext/dvdread/demo-play
new file mode 100755 (executable)
index 0000000..ed9d4d8
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/sh
+AUDIOSINK=`gconftool-2 -g /system/gstreamer/0.8/default/audiosink`
+VIDEOSINK=`gconftool-2 -g /system/gstreamer/0.8/default/videosink`
+gst-launch dvdreadsrc ! dvddemux name=demux .video_00 ! \
+       { queue ! mpeg2dec ! videoconvert ! videoscale ! $VIDEOSINK } \
+       { demux.audio_00 ! queue ! a52dec ! audioconvert ! audioscale ! $AUDIOSINK }
diff --git a/subprojects/gst-plugins-ugly/ext/dvdread/dvdreadsrc.c b/subprojects/gst-plugins-ugly/ext/dvdread/dvdreadsrc.c
new file mode 100644 (file)
index 0000000..cfd72ad
--- /dev/null
@@ -0,0 +1,1819 @@
+/* GStreamer DVD title source
+ * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) 2001 Billy Biggs <vektor@dumbterm.net>.
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#include "dvdreadsrc.h"
+
+#include <gmodule.h>
+
+#include <gst/gst-i18n-plugin.h>
+
+GST_DEBUG_CATEGORY_STATIC (gstgst_dvd_read_src_debug);
+#define GST_CAT_DEFAULT (gstgst_dvd_read_src_debug)
+
+enum
+{
+  ARG_0,
+  ARG_DEVICE,
+  ARG_TITLE,
+  ARG_CHAPTER,
+  ARG_ANGLE
+};
+
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/mpeg, mpegversion=2, systemstream=(boolean)true"));
+
+static GstFormat title_format;
+static GstFormat angle_format;
+static GstFormat sector_format;
+static GstFormat chapter_format;
+
+static gboolean gst_dvd_read_src_start (GstBaseSrc * basesrc);
+static gboolean gst_dvd_read_src_stop (GstBaseSrc * basesrc);
+static GstFlowReturn gst_dvd_read_src_create (GstPushSrc * pushsrc,
+    GstBuffer ** buf);
+static gboolean gst_dvd_read_src_src_query (GstBaseSrc * basesrc,
+    GstQuery * query);
+static gboolean gst_dvd_read_src_src_event (GstBaseSrc * basesrc,
+    GstEvent * event);
+static gboolean gst_dvd_read_src_goto_title (GstDvdReadSrc * src, gint title,
+    gint angle);
+static gboolean gst_dvd_read_src_goto_chapter (GstDvdReadSrc * src,
+    gint chapter);
+static gboolean gst_dvd_read_src_goto_sector (GstDvdReadSrc * src, gint angle);
+static void gst_dvd_read_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_dvd_read_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static GstEvent *gst_dvd_read_src_make_clut_change_event (GstDvdReadSrc * src,
+    const guint32 * clut);
+static gboolean gst_dvd_read_src_get_size (GstDvdReadSrc * src, gint64 * size);
+static gboolean gst_dvd_read_src_do_seek (GstBaseSrc * src, GstSegment * s);
+static gint64 gst_dvd_read_src_convert_timecode (dvd_time_t * time);
+static gint gst_dvd_read_src_get_next_cell (GstDvdReadSrc * src,
+    pgc_t * pgc, gint cell);
+static GstClockTime gst_dvd_read_src_get_time_for_sector (GstDvdReadSrc * src,
+    guint sector);
+static gint gst_dvd_read_src_get_sector_from_time (GstDvdReadSrc * src,
+    GstClockTime ts);
+
+static void gst_dvd_read_src_uri_handler_init (gpointer g_iface,
+    gpointer iface_data);
+static gboolean dvdread_element_init (GstPlugin * plugin);
+
+#define gst_dvd_read_src_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstDvdReadSrc, gst_dvd_read_src, GST_TYPE_PUSH_SRC,
+    G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER,
+        gst_dvd_read_src_uri_handler_init));
+GST_ELEMENT_REGISTER_DEFINE_CUSTOM (dvdreadsrc, dvdread_element_init);
+
+static void
+gst_dvd_read_src_finalize (GObject * object)
+{
+  GstDvdReadSrc *src = GST_DVD_READ_SRC (object);
+
+  g_free (src->location);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_dvd_read_src_init (GstDvdReadSrc * src)
+{
+  src->dvd = NULL;
+  src->vts_file = NULL;
+  src->vmg_file = NULL;
+  src->dvd_title = NULL;
+
+  src->location = g_strdup ("/dev/dvd");
+  src->first_seek = TRUE;
+  src->new_seek = TRUE;
+  src->new_cell = TRUE;
+  src->change_cell = FALSE;
+  src->uri_title = 1;
+  src->uri_chapter = 1;
+  src->uri_angle = 1;
+
+  src->title_lang_event_pending = NULL;
+  src->pending_clut_event = NULL;
+
+  gst_pad_use_fixed_caps (GST_BASE_SRC_PAD (src));
+  gst_pad_set_caps (GST_BASE_SRC_PAD (src),
+      gst_static_pad_template_get_caps (&srctemplate));
+}
+
+static gboolean
+gst_dvd_read_src_is_seekable (GstBaseSrc * src)
+{
+  return TRUE;
+}
+
+static void
+gst_dvd_read_src_class_init (GstDvdReadSrcClass * klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
+  GstPushSrcClass *gstpushsrc_class = GST_PUSH_SRC_CLASS (klass);
+  GstBaseSrcClass *gstbasesrc_class = GST_BASE_SRC_CLASS (klass);
+
+  gobject_class->finalize = gst_dvd_read_src_finalize;
+  gobject_class->set_property = gst_dvd_read_src_set_property;
+  gobject_class->get_property = gst_dvd_read_src_get_property;
+
+  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_DEVICE,
+      g_param_spec_string ("device", "Device",
+          "DVD device location", NULL,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_TITLE,
+      g_param_spec_int ("title", "title", "title",
+          1, 999, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_CHAPTER,
+      g_param_spec_int ("chapter", "chapter", "chapter",
+          1, 999, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_ANGLE,
+      g_param_spec_int ("angle", "angle", "angle",
+          1, 999, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_add_static_pad_template (gstelement_class, &srctemplate);
+
+  gst_element_class_set_static_metadata (gstelement_class, "DVD Source",
+      "Source/File/DVD",
+      "Access a DVD title/chapter/angle using libdvdread",
+      "Erik Walthinsen <omega@cse.ogi.edu>");
+
+  gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_dvd_read_src_start);
+  gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_dvd_read_src_stop);
+  gstbasesrc_class->query = GST_DEBUG_FUNCPTR (gst_dvd_read_src_src_query);
+  gstbasesrc_class->event = GST_DEBUG_FUNCPTR (gst_dvd_read_src_src_event);
+  gstbasesrc_class->do_seek = GST_DEBUG_FUNCPTR (gst_dvd_read_src_do_seek);
+  gstbasesrc_class->is_seekable =
+      GST_DEBUG_FUNCPTR (gst_dvd_read_src_is_seekable);
+
+  gstpushsrc_class->create = GST_DEBUG_FUNCPTR (gst_dvd_read_src_create);
+
+  title_format = gst_format_register ("title", "DVD title");
+  angle_format = gst_format_register ("angle", "DVD angle");
+  sector_format = gst_format_register ("sector", "DVD sector");
+  chapter_format = gst_format_register ("chapter", "DVD chapter");
+}
+
+static gboolean
+gst_dvd_read_src_start (GstBaseSrc * basesrc)
+{
+  GstDvdReadSrc *src = GST_DVD_READ_SRC (basesrc);
+
+  g_return_val_if_fail (src->location != NULL, FALSE);
+
+  GST_DEBUG_OBJECT (src, "Opening DVD '%s'", src->location);
+
+  if ((src->dvd = DVDOpen (src->location)) == NULL)
+    goto open_failed;
+
+  /* Load the video manager to find out the information about the titles */
+  GST_DEBUG_OBJECT (src, "Loading VMG info");
+
+  if (!(src->vmg_file = ifoOpen (src->dvd, 0)))
+    goto ifo_open_failed;
+
+  src->tt_srpt = src->vmg_file->tt_srpt;
+
+  src->title = src->uri_title - 1;
+  src->chapter = src->uri_chapter - 1;
+  src->angle = src->uri_angle - 1;
+
+  if (!gst_dvd_read_src_goto_title (src, src->title, src->angle))
+    goto title_open_failed;
+
+  if (!gst_dvd_read_src_goto_chapter (src, src->chapter))
+    goto chapter_open_failed;
+
+  src->new_seek = FALSE;
+  src->change_cell = TRUE;
+
+  src->first_seek = TRUE;
+
+  return TRUE;
+
+  /* ERRORS */
+open_failed:
+  {
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+        (_("Could not open DVD")),
+        ("DVDOpen(%s) failed: %s", src->location, g_strerror (errno)));
+    return FALSE;
+  }
+ifo_open_failed:
+  {
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+        (_("Could not open DVD")),
+        ("ifoOpen() failed: %s", g_strerror (errno)));
+    return FALSE;
+  }
+title_open_failed:
+  {
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+        (_("Could not open DVD title %d"), src->uri_title), (NULL));
+    return FALSE;
+  }
+chapter_open_failed:
+  {
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+        (_("Failed to go to chapter %d of DVD title %d"),
+            src->uri_chapter, src->uri_title), (NULL));
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_dvd_read_src_stop (GstBaseSrc * basesrc)
+{
+  GstDvdReadSrc *src = GST_DVD_READ_SRC (basesrc);
+
+  if (src->vts_file) {
+    ifoClose (src->vts_file);
+    src->vts_file = NULL;
+  }
+  if (src->vmg_file) {
+    ifoClose (src->vmg_file);
+    src->vmg_file = NULL;
+  }
+  if (src->dvd_title) {
+    DVDCloseFile (src->dvd_title);
+    src->dvd_title = NULL;
+  }
+  if (src->dvd) {
+    DVDClose (src->dvd);
+    src->dvd = NULL;
+  }
+  src->new_cell = TRUE;
+  src->new_seek = TRUE;
+  src->change_cell = FALSE;
+  src->chapter = 0;
+  src->title = 0;
+  src->need_newsegment = TRUE;
+  src->vts_tmapt = NULL;
+  if (src->title_lang_event_pending) {
+    gst_event_unref (src->title_lang_event_pending);
+    src->title_lang_event_pending = NULL;
+  }
+  if (src->pending_clut_event) {
+    gst_event_unref (src->pending_clut_event);
+    src->pending_clut_event = NULL;
+  }
+  if (src->chapter_starts) {
+    g_free (src->chapter_starts);
+    src->chapter_starts = NULL;
+  }
+
+  GST_LOG_OBJECT (src, "closed DVD");
+
+  return TRUE;
+}
+
+static void
+cur_title_get_chapter_pgc (GstDvdReadSrc * src, gint chapter, gint * p_pgn,
+    gint * p_pgc_id, pgc_t ** p_pgc)
+{
+  pgc_t *pgc;
+  gint pgn, pgc_id;
+
+  g_assert (chapter >= 0 && chapter < src->num_chapters);
+
+  pgc_id = src->vts_ptt_srpt->title[src->ttn - 1].ptt[chapter].pgcn;
+  pgn = src->vts_ptt_srpt->title[src->ttn - 1].ptt[chapter].pgn;
+  pgc = src->vts_file->vts_pgcit->pgci_srp[pgc_id - 1].pgc;
+
+  *p_pgn = pgn;
+  *p_pgc_id = pgc_id;
+  *p_pgc = pgc;
+}
+
+static void
+cur_title_get_chapter_bounds (GstDvdReadSrc * src, gint chapter,
+    gint * p_first_cell, gint * p_last_cell)
+{
+  pgc_t *pgc;
+  gint pgn, pgc_id, pgn_next_ch;
+
+  g_assert (chapter >= 0 && chapter < src->num_chapters);
+
+  cur_title_get_chapter_pgc (src, chapter, &pgn, &pgc_id, &pgc);
+
+  *p_first_cell = pgc->program_map[pgn - 1] - 1;
+
+  /* last cell is used as a 'up to boundary', not 'up to and including',
+   * i.e. it is the first cell not included in the chapter range */
+  if (chapter == (src->num_chapters - 1)) {
+    *p_last_cell = pgc->nr_of_cells;
+  } else {
+    pgn_next_ch = src->vts_ptt_srpt->title[src->ttn - 1].ptt[chapter + 1].pgn;
+    *p_last_cell = pgc->program_map[pgn_next_ch - 1] - 1;
+  }
+
+  GST_DEBUG_OBJECT (src, "Chapter %d bounds: %d %d (within %d cells)",
+      chapter, *p_first_cell, *p_last_cell, pgc->nr_of_cells);
+}
+
+static gboolean
+gst_dvd_read_src_goto_chapter (GstDvdReadSrc * src, gint chapter)
+{
+  gint i;
+  const guint8 *palette;
+
+  /* make sure the chapter number is valid for this title */
+  if (chapter < 0 || chapter >= src->num_chapters) {
+    GST_WARNING_OBJECT (src, "invalid chapter %d (only %d available)",
+        chapter, src->num_chapters);
+    chapter = CLAMP (chapter, 0, src->num_chapters - 1);
+  }
+
+  /* determine which program chain we want to watch. This is
+   * based on the chapter number */
+  cur_title_get_chapter_pgc (src, chapter, &src->pgn, &src->pgc_id,
+      &src->cur_pgc);
+  cur_title_get_chapter_bounds (src, chapter, &src->start_cell,
+      &src->last_cell);
+
+  GST_LOG_OBJECT (src, "Opened chapter %d - cell %d-%d", chapter + 1,
+      src->start_cell, src->last_cell);
+
+  /* retrieve position */
+  src->cur_pack = 0;
+  for (i = 0; i < chapter; i++) {
+    gint c1, c2;
+
+    cur_title_get_chapter_bounds (src, i, &c1, &c2);
+
+    while (c1 < c2) {
+      src->cur_pack +=
+          src->cur_pgc->cell_playback[c1].last_sector -
+          src->cur_pgc->cell_playback[c1].first_sector;
+      ++c1;
+    }
+  }
+
+  /* prepare reading for new cell */
+  src->new_cell = TRUE;
+  src->next_cell = src->start_cell;
+
+  src->chapter = chapter;
+
+  if (src->pending_clut_event)
+    gst_event_unref (src->pending_clut_event);
+
+  /* Work around GCC 9 compiler warning here about taking address of packed
+   * member, which may result in an unaligned pointer access */
+  palette = (const guint8 *) src->cur_pgc->palette;
+  src->pending_clut_event =
+      gst_dvd_read_src_make_clut_change_event (src, (const guint32 *) palette);
+
+  return TRUE;
+}
+
+static void
+gst_dvd_read_src_get_chapter_starts (GstDvdReadSrc * src)
+{
+  GstClockTime uptohere;
+  guint c;
+
+  g_free (src->chapter_starts);
+  src->chapter_starts = g_new (GstClockTime, src->num_chapters);
+
+  uptohere = (GstClockTime) 0;
+  for (c = 0; c < src->num_chapters; ++c) {
+    GstClockTime chapter_duration = 0;
+    gint cell_start, cell_end, cell;
+    gint pgn, pgc_id;
+    pgc_t *pgc;
+
+    cur_title_get_chapter_pgc (src, c, &pgn, &pgc_id, &pgc);
+    cur_title_get_chapter_bounds (src, c, &cell_start, &cell_end);
+
+    cell = cell_start;
+    while (cell < cell_end) {
+      dvd_time_t *cell_duration;
+
+      cell_duration = &pgc->cell_playback[cell].playback_time;
+      chapter_duration += gst_dvd_read_src_convert_timecode (cell_duration);
+      cell = gst_dvd_read_src_get_next_cell (src, pgc, cell);
+    }
+
+    src->chapter_starts[c] = uptohere;
+
+    GST_INFO_OBJECT (src, "[%02u] Chapter %02u starts at %" GST_TIME_FORMAT
+        ", dur = %" GST_TIME_FORMAT ", cells %d-%d", src->title + 1, c + 1,
+        GST_TIME_ARGS (uptohere), GST_TIME_ARGS (chapter_duration),
+        cell_start, cell_end);
+
+    uptohere += chapter_duration;
+  }
+}
+
+static gboolean
+gst_dvd_read_src_goto_title (GstDvdReadSrc * src, gint title, gint angle)
+{
+  GstStructure *s;
+  gchar lang_code[3] = { '\0', '\0', '\0' }, *t;
+  pgc_t *pgc0;
+  gint title_set_nr;
+  gint num_titles;
+  gint pgn0, pgc0_id;
+  gint i;
+
+  /* make sure our title number is valid */
+  num_titles = src->tt_srpt->nr_of_srpts;
+  GST_INFO_OBJECT (src, "There are %d titles on this DVD", num_titles);
+  if (title < 0 || title >= num_titles)
+    goto invalid_title;
+
+  src->num_chapters = src->tt_srpt->title[title].nr_of_ptts;
+  GST_INFO_OBJECT (src, "Title %d has %d chapters", title + 1,
+      src->num_chapters);
+
+  /* make sure the angle number is valid for this title */
+  src->num_angles = src->tt_srpt->title[title].nr_of_angles;
+  GST_LOG_OBJECT (src, "Title %d has %d angles", title + 1, src->num_angles);
+  if (angle < 0 || angle >= src->num_angles) {
+    GST_WARNING_OBJECT (src, "Invalid angle %d (only %d available)",
+        angle, src->num_angles);
+    angle = CLAMP (angle, 0, src->num_angles - 1);
+  }
+
+  /* load the VTS information for the title set our title is in */
+  title_set_nr = src->tt_srpt->title[title].title_set_nr;
+  src->vts_file = ifoOpen (src->dvd, title_set_nr);
+  if (src->vts_file == NULL)
+    goto ifo_open_failed;
+
+  src->ttn = src->tt_srpt->title[title].vts_ttn;
+  src->vts_ptt_srpt = src->vts_file->vts_ptt_srpt;
+
+  /* interactive title? */
+  if (src->num_chapters > 0 &&
+      src->vts_ptt_srpt->title[src->ttn - 1].ptt[0].pgn == 0) {
+    goto commands_only_pgc;
+  }
+
+  /* we've got enough info, time to open the title set data */
+  src->dvd_title = DVDOpenFile (src->dvd, title_set_nr, DVD_READ_TITLE_VOBS);
+  if (src->dvd_title == NULL)
+    goto title_open_failed;
+
+  GST_INFO_OBJECT (src, "Opened title %d, angle %d", title + 1, angle);
+  src->title = title;
+  src->angle = angle;
+
+  /* build event */
+
+  if (src->title_lang_event_pending) {
+    gst_event_unref (src->title_lang_event_pending);
+    src->title_lang_event_pending = NULL;
+  }
+
+  s = gst_structure_new ("application/x-gst-dvd",
+      "event", G_TYPE_STRING, "dvd-lang-codes", NULL);
+
+  /* so we can filter out invalid/unused streams (same for all chapters) */
+  cur_title_get_chapter_pgc (src, 0, &pgn0, &pgc0_id, &pgc0);
+
+  /* audio */
+  for (i = 0; i < src->vts_file->vtsi_mat->nr_of_vts_audio_streams; i++) {
+    const audio_attr_t *a;
+
+    /* audio stream present? */
+    if (pgc0 != NULL && (pgc0->audio_control[i] & 0x8000) == 0)
+      continue;
+
+    a = &src->vts_file->vtsi_mat->vts_audio_attr[i];
+
+    t = g_strdup_printf ("audio-%d-format", i);
+    gst_structure_set (s, t, G_TYPE_INT, (int) a->audio_format, NULL);
+    g_free (t);
+    t = g_strdup_printf ("audio-%d-stream", i);
+    gst_structure_set (s, t, G_TYPE_INT, (int) i, NULL);
+    g_free (t);
+
+    if (a->lang_type) {
+      t = g_strdup_printf ("audio-%d-language", i);
+      lang_code[0] = (a->lang_code >> 8) & 0xff;
+      lang_code[1] = a->lang_code & 0xff;
+      gst_structure_set (s, t, G_TYPE_STRING, lang_code, NULL);
+      g_free (t);
+    } else {
+      lang_code[0] = '\0';
+    }
+
+    GST_INFO_OBJECT (src, "[%02d] Audio    %02d: lang='%s', format=%d",
+        src->title + 1, i, lang_code, (gint) a->audio_format);
+  }
+
+  /* subtitle */
+  for (i = 0; i < src->vts_file->vtsi_mat->nr_of_vts_subp_streams; i++) {
+    const subp_attr_t *u;
+    const video_attr_t *v;
+    gint sid;
+
+    /* subpicture stream present? */
+    if (pgc0 != NULL && (pgc0->subp_control[i] & 0x80000000) == 0)
+      continue;
+
+    u = &src->vts_file->vtsi_mat->vts_subp_attr[i];
+    v = &src->vts_file->vtsi_mat->vts_video_attr;
+
+    sid = i;
+    if (pgc0 != NULL) {
+      if (v->display_aspect_ratio == 0) /* 4:3 */
+        sid = (pgc0->subp_control[i] >> 24) & 0x1f;
+      else if (v->display_aspect_ratio == 3)    /* 16:9 */
+        sid = (pgc0->subp_control[i] >> 8) & 0x1f;
+    }
+
+    if (u->type) {
+      t = g_strdup_printf ("subpicture-%d-language", i);
+      lang_code[0] = (u->lang_code >> 8) & 0xff;
+      lang_code[1] = u->lang_code & 0xff;
+      gst_structure_set (s, t, G_TYPE_STRING, lang_code, NULL);
+      g_free (t);
+      t = g_strdup_printf ("subpicture-%d-stream", i);
+      gst_structure_set (s, t, G_TYPE_INT, (int) sid, NULL);
+      g_free (t);
+      t = g_strdup_printf ("subpicture-%d-format", i);
+      gst_structure_set (s, t, G_TYPE_INT, (int) 0, NULL);
+      g_free (t);
+    } else {
+      lang_code[0] = '\0';
+    }
+
+    GST_INFO_OBJECT (src, "[%02d] Subtitle %02d: lang='%s', type=%d",
+        src->title + 1, sid, lang_code, u->type);
+  }
+
+  src->title_lang_event_pending =
+      gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM, s);
+
+  /* dump seek tables */
+  src->vts_tmapt = src->vts_file->vts_tmapt;
+  if (src->vts_tmapt) {
+    gint i, j;
+
+    GST_LOG_OBJECT (src, "nr_of_tmaps = %d", src->vts_tmapt->nr_of_tmaps);
+    for (i = 0; i < src->vts_tmapt->nr_of_tmaps; ++i) {
+      GST_LOG_OBJECT (src, "======= Table %d ===================", i);
+      GST_LOG_OBJECT (src, "Offset relative to VTS_TMAPTI: %d",
+          src->vts_tmapt->tmap_offset[i]);
+      GST_LOG_OBJECT (src, "Time unit (seconds)          : %d",
+          src->vts_tmapt->tmap[i].tmu);
+      GST_LOG_OBJECT (src, "Number of entries            : %d",
+          src->vts_tmapt->tmap[i].nr_of_entries);
+      for (j = 0; j < src->vts_tmapt->tmap[i].nr_of_entries; j++) {
+        guint64 time;
+
+        time = (guint64) src->vts_tmapt->tmap[i].tmu * (j + 1) * GST_SECOND;
+        GST_LOG_OBJECT (src, "Time: %" GST_TIME_FORMAT " VOBU "
+            "Sector: 0x%08x %s", GST_TIME_ARGS (time),
+            src->vts_tmapt->tmap[i].map_ent[j] & 0x7fffffff,
+            (src->vts_tmapt->tmap[i].map_ent[j] >> 31) ? "discontinuity" : "");
+      }
+    }
+  } else {
+    GST_WARNING_OBJECT (src, "no vts_tmapt - seeking will suck");
+  }
+
+  gst_dvd_read_src_get_chapter_starts (src);
+
+  return TRUE;
+
+  /* ERRORS */
+invalid_title:
+  {
+    GST_WARNING_OBJECT (src, "Invalid title %d (only %d available)",
+        title, num_titles);
+    return FALSE;
+  }
+ifo_open_failed:
+  {
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+        (_("Could not open DVD title %d"), title_set_nr),
+        ("ifoOpen(%d) failed: %s", title_set_nr, g_strerror (errno)));
+    return FALSE;
+  }
+title_open_failed:
+  {
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+        (_("Could not open DVD title %d"), title_set_nr),
+        ("Can't open title VOBS (VTS_%02d_1.VOB)", title_set_nr));
+    return FALSE;
+  }
+commands_only_pgc:
+  {
+    GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+        (_("Could not open DVD title %d. Interactive titles are not supported "
+                "by this element"), title_set_nr),
+        ("Commands-only PGC, not supported, use rsndvdbin"));
+    return FALSE;
+  }
+}
+
+/* FIXME: double-check this function, compare against original */
+static gint
+gst_dvd_read_src_get_next_cell (GstDvdReadSrc * src, pgc_t * pgc, gint cell)
+{
+  /* Check if we're entering an angle block. */
+  if (pgc->cell_playback[cell].block_type != BLOCK_TYPE_ANGLE_BLOCK)
+    return (cell + 1);
+
+  while (pgc->cell_playback[cell].block_mode != BLOCK_MODE_LAST_CELL)
+    ++cell;
+
+  return cell + 1;
+}
+
+/* Returns true if the pack is a NAV pack */
+static gboolean
+gst_dvd_read_src_is_nav_pack (const guint8 * data, gint lbn, dsi_t * dsi_pack)
+{
+  if (GST_READ_UINT32_BE (data + 0x26) != 0x000001BF)
+    return FALSE;
+
+  /* Check that this is substream 0 (PCI) */
+  if (data[0x2c] != 0)
+    return FALSE;
+
+  if (GST_READ_UINT32_BE (data + 0x400) != 0x000001BF)
+    return FALSE;
+
+  /* Check that this is substream 1 (DSI) */
+  if (data[0x406] != 1)
+    return FALSE;
+
+  /* Check sizes of PCI and DSI packets */
+  if (GST_READ_UINT16_BE (data + 0x2a) != 0x03d4)
+    return FALSE;
+
+  if (GST_READ_UINT16_BE (data + 0x404) != 0x03fa)
+    return FALSE;
+
+  /* Read the DSI packet into the provided struct and check it */
+  navRead_DSI (dsi_pack, (unsigned char *) data + DSI_START_BYTE);
+  if (lbn != dsi_pack->dsi_gi.nv_pck_lbn)
+    return FALSE;
+
+  return TRUE;
+}
+
+/* find time for sector from index, returns NONE if there is no exact match */
+static GstClockTime
+gst_dvd_read_src_get_time_for_sector (GstDvdReadSrc * src, guint sector)
+{
+  gint i, j;
+
+  if (src->vts_tmapt == NULL || src->vts_tmapt->nr_of_tmaps == 0)
+    return GST_CLOCK_TIME_NONE;
+
+  for (i = 0; i < src->vts_tmapt->nr_of_tmaps; ++i) {
+    for (j = 0; j < src->vts_tmapt->tmap[i].nr_of_entries; ++j) {
+      if ((src->vts_tmapt->tmap[i].map_ent[j] & 0x7fffffff) == sector)
+        return (guint64) src->vts_tmapt->tmap[i].tmu * (j + 1) * GST_SECOND;
+    }
+  }
+
+  if (sector == 0)
+    return (GstClockTime) 0;
+
+  return GST_CLOCK_TIME_NONE;
+}
+
+/* returns the sector in the index at (or before) the given time, or -1 */
+static gint
+gst_dvd_read_src_get_sector_from_time (GstDvdReadSrc * src, GstClockTime ts)
+{
+  gint sector, j;
+
+  if (src->vts_tmapt == NULL || src->vts_tmapt->nr_of_tmaps < src->ttn)
+    return -1;
+
+  sector = src->vts_tmapt->tmap[src->ttn - 1].map_ent[0] & 0x7fffffff;
+
+  for (j = 0; j < src->vts_tmapt->tmap[src->ttn - 1].nr_of_entries; ++j) {
+    GstClockTime entry_time;
+
+    entry_time =
+        (guint64) src->vts_tmapt->tmap[src->ttn - 1].tmu * (j + 1) * GST_SECOND;
+    if (entry_time <= ts) {
+      sector = src->vts_tmapt->tmap[src->ttn - 1].map_ent[j] & 0x7fffffff;
+    }
+    if (entry_time >= ts) {
+      return sector;
+    }
+  }
+
+  if (ts == 0)
+    return 0;
+
+  return -1;
+}
+
+typedef enum
+{
+  GST_DVD_READ_OK = 0,
+  GST_DVD_READ_ERROR = -1,
+  GST_DVD_READ_EOS = -2,
+  GST_DVD_READ_AGAIN = -3
+} GstDvdReadReturn;
+
+static GstDvdReadReturn
+gst_dvd_read_src_read (GstDvdReadSrc * src, gint angle, gint new_seek,
+    GstBuffer ** p_buf)
+{
+  GstBuffer *buf;
+  GstSegment *seg;
+  guint8 oneblock[DVD_VIDEO_LB_LEN];
+  dsi_t dsi_pack;
+  guint next_vobu, cur_output_size;
+  gint len;
+  gint retries;
+  gint64 next_time;
+  GstMapInfo map;
+
+  seg = &(GST_BASE_SRC (src)->segment);
+
+  /* playback by cell in this pgc, starting at the cell for our chapter */
+  if (new_seek)
+    src->cur_cell = src->start_cell;
+
+again:
+
+  if (src->cur_cell >= src->last_cell) {
+    /* advance to next chapter */
+    if (src->chapter == (src->num_chapters - 1) ||
+        (seg->format == chapter_format && seg->stop != -1 &&
+            src->chapter == (seg->stop - 1))) {
+      GST_DEBUG_OBJECT (src, "end of chapter segment");
+      goto eos;
+    }
+
+    GST_INFO_OBJECT (src, "end of chapter %d, switch to next",
+        src->chapter + 1);
+
+    ++src->chapter;
+    gst_dvd_read_src_goto_chapter (src, src->chapter);
+
+    return GST_DVD_READ_AGAIN;
+  }
+
+  if (src->new_cell || new_seek) {
+    if (!new_seek) {
+      src->cur_cell = src->next_cell;
+      if (src->cur_cell >= src->last_cell) {
+        GST_LOG_OBJECT (src, "last cell in chapter");
+        goto again;
+      }
+    }
+
+    /* take angle into account */
+    if (src->cur_pgc->cell_playback[src->cur_cell].block_type
+        == BLOCK_TYPE_ANGLE_BLOCK)
+      src->cur_cell += angle;
+
+    /* calculate next cell */
+    src->next_cell =
+        gst_dvd_read_src_get_next_cell (src, src->cur_pgc, src->cur_cell);
+
+    /* we loop until we're out of this cell */
+    src->cur_pack = src->cur_pgc->cell_playback[src->cur_cell].first_sector;
+    src->new_cell = FALSE;
+    GST_DEBUG_OBJECT (src, "Starting new cell %d @ pack %d", src->cur_cell,
+        src->cur_pack);
+  }
+
+  if (src->cur_pack >= src->cur_pgc->cell_playback[src->cur_cell].last_sector) {
+    src->new_cell = TRUE;
+    GST_LOG_OBJECT (src, "Beyond last sector for cell %d, going to next cell",
+        src->cur_cell);
+    return GST_DVD_READ_AGAIN;
+  }
+
+  /* read NAV packet */
+  retries = 0;
+nav_retry:
+  retries++;
+
+  len = DVDReadBlocks (src->dvd_title, src->cur_pack, 1, oneblock);
+  if (len != 1)
+    goto read_error;
+
+  if (!gst_dvd_read_src_is_nav_pack (oneblock, src->cur_pack, &dsi_pack)) {
+    GST_LOG_OBJECT (src, "Skipping nav packet @ pack %d", src->cur_pack);
+    src->cur_pack++;
+
+    if (retries < 2000) {
+      goto nav_retry;
+    } else {
+      GST_LOG_OBJECT (src, "No nav packet @ pack %d after 2000 blocks",
+          src->cur_pack);
+      goto read_error;
+    }
+  }
+
+  /* determine where we go next. These values are the ones we
+   * mostly care about */
+  cur_output_size = dsi_pack.dsi_gi.vobu_ea + 1;
+
+  /* If we're not at the end of this cell, we can determine the next
+   * VOBU to display using the VOBU_SRI information section of the
+   * DSI.  Using this value correctly follows the current angle,
+   * avoiding the doubled scenes in The Matrix, and makes our life
+   * really happy.
+   *
+   * Otherwise, we set our next address past the end of this cell to
+   * force the code above to go to the next cell in the program. */
+  if (dsi_pack.vobu_sri.next_vobu != SRI_END_OF_CELL) {
+    next_vobu = src->cur_pack + (dsi_pack.vobu_sri.next_vobu & 0x7fffffff);
+  } else {
+    next_vobu = src->cur_pgc->cell_playback[src->cur_cell].last_sector + 1;
+  }
+
+  g_assert (cur_output_size < 1024);
+
+  /* create the buffer (TODO: use buffer pool?) */
+  buf =
+      gst_buffer_new_allocate (NULL, cur_output_size * DVD_VIDEO_LB_LEN, NULL);
+
+  GST_LOG_OBJECT (src, "Going to read %u sectors @ pack %d", cur_output_size,
+      src->cur_pack);
+
+  gst_buffer_map (buf, &map, GST_MAP_WRITE);
+  /* read in and output cursize packs */
+  len =
+      DVDReadBlocks (src->dvd_title, src->cur_pack, cur_output_size, map.data);
+
+  if (len != cur_output_size)
+    goto block_read_error;
+
+  gst_buffer_unmap (buf, &map);
+  gst_buffer_resize (buf, 0, cur_output_size * DVD_VIDEO_LB_LEN);
+  /* GST_BUFFER_OFFSET (buf) = priv->cur_pack * DVD_VIDEO_LB_LEN; */
+  GST_BUFFER_TIMESTAMP (buf) =
+      gst_dvd_read_src_get_time_for_sector (src, src->cur_pack);
+
+  *p_buf = buf;
+
+  GST_LOG_OBJECT (src, "Read %u sectors", cur_output_size);
+
+  src->cur_pack = next_vobu;
+
+  next_time = GST_BUFFER_TIMESTAMP (buf);
+  if (GST_CLOCK_TIME_IS_VALID (next_time) && seg->format == GST_FORMAT_TIME &&
+      GST_CLOCK_TIME_IS_VALID (seg->stop) &&
+      next_time > seg->stop + 5 * GST_SECOND) {
+    GST_DEBUG_OBJECT (src, "end of TIME segment");
+    goto eos;
+  }
+
+  return GST_DVD_READ_OK;
+
+  /* ERRORS */
+eos:
+  {
+    GST_INFO_OBJECT (src, "Reached end-of-segment/stream - EOS");
+    return GST_DVD_READ_EOS;
+  }
+read_error:
+  {
+    GST_ERROR_OBJECT (src, "Read failed for block %d", src->cur_pack);
+    return GST_DVD_READ_ERROR;
+  }
+block_read_error:
+  {
+    GST_ERROR_OBJECT (src, "Read failed for %d blocks at %d",
+        cur_output_size, src->cur_pack);
+    gst_buffer_unmap (buf, &map);
+    gst_buffer_unref (buf);
+    return GST_DVD_READ_ERROR;
+  }
+}
+
+/* we don't cache the result on purpose */
+static gboolean
+gst_dvd_read_descrambler_available (void)
+{
+  GModule *module;
+  gpointer sym;
+  gsize res;
+
+  module = g_module_open ("libdvdcss", 0);
+  if (module != NULL) {
+    res = g_module_symbol (module, "dvdcss_open", &sym);
+    g_module_close (module);
+  } else {
+    res = FALSE;
+  }
+
+  return res;
+}
+
+static GstFlowReturn
+gst_dvd_read_src_create (GstPushSrc * pushsrc, GstBuffer ** p_buf)
+{
+  GstDvdReadSrc *src = GST_DVD_READ_SRC (pushsrc);
+  GstPad *srcpad;
+  gint res;
+
+  g_return_val_if_fail (src->dvd != NULL, GST_FLOW_ERROR);
+
+  srcpad = GST_BASE_SRC (src)->srcpad;
+
+  if (src->need_newsegment) {
+    GstSegment seg;
+
+    gst_segment_init (&seg, GST_FORMAT_BYTES);
+    seg.start = src->cur_pack * DVD_VIDEO_LB_LEN;
+    seg.stop = -1;
+    seg.time = 0;
+    gst_pad_push_event (srcpad, gst_event_new_segment (&seg));
+    src->need_newsegment = FALSE;
+  }
+
+  if (src->new_seek) {
+    gst_dvd_read_src_goto_title (src, src->title, src->angle);
+    gst_dvd_read_src_goto_chapter (src, src->chapter);
+
+    src->new_seek = FALSE;
+    src->change_cell = TRUE;
+  }
+
+  if (src->title_lang_event_pending) {
+    gst_pad_push_event (srcpad, src->title_lang_event_pending);
+    src->title_lang_event_pending = NULL;
+  }
+
+  if (src->pending_clut_event) {
+    gst_pad_push_event (srcpad, src->pending_clut_event);
+    src->pending_clut_event = NULL;
+  }
+
+  /* read it in */
+  do {
+    res = gst_dvd_read_src_read (src, src->angle, src->change_cell, p_buf);
+  } while (res == GST_DVD_READ_AGAIN);
+
+  switch (res) {
+    case GST_DVD_READ_ERROR:{
+      /* FIXME: figure out a way to detect if scrambling is the problem */
+      if (!gst_dvd_read_descrambler_available ()) {
+        GST_ELEMENT_ERROR (src, RESOURCE, READ,
+            (_("Could not read DVD. This may be because the DVD is encrypted "
+                    "and a DVD decryption library is not installed.")), (NULL));
+      } else {
+        GST_ELEMENT_ERROR (src, RESOURCE, READ, (_("Could not read DVD.")),
+            (NULL));
+      }
+      return GST_FLOW_ERROR;
+    }
+    case GST_DVD_READ_EOS:{
+      return GST_FLOW_EOS;
+    }
+    case GST_DVD_READ_OK:{
+      src->change_cell = FALSE;
+      return GST_FLOW_OK;
+    }
+    default:
+      break;
+  }
+
+  g_return_val_if_reached (GST_FLOW_EOS);
+}
+
+static void
+gst_dvd_read_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstDvdReadSrc *src = GST_DVD_READ_SRC (object);
+  gboolean started;
+
+  GST_OBJECT_LOCK (src);
+  started = GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED);
+
+  switch (prop_id) {
+    case ARG_DEVICE:{
+      if (started) {
+        g_warning ("%s: property '%s' needs to be set before the device is "
+            "opened", GST_ELEMENT_NAME (src), pspec->name);
+        break;
+      }
+
+      g_free (src->location);
+      /* clear the filename if we get a NULL (is that possible?) */
+      if (g_value_get_string (value) == NULL) {
+        src->location = g_strdup ("/dev/dvd");
+      } else {
+        src->location = g_value_dup_string (value);
+      }
+      break;
+    }
+    case ARG_TITLE:
+      src->uri_title = g_value_get_int (value);
+      if (started) {
+        src->title = src->uri_title - 1;
+        src->new_seek = TRUE;
+      }
+      break;
+    case ARG_CHAPTER:
+      src->uri_chapter = g_value_get_int (value);
+      if (started) {
+        src->chapter = src->uri_chapter - 1;
+        src->new_seek = TRUE;
+      }
+      break;
+    case ARG_ANGLE:
+      src->uri_angle = g_value_get_int (value);
+      if (started) {
+        src->angle = src->uri_angle - 1;
+      }
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+
+  GST_OBJECT_UNLOCK (src);
+}
+
+static void
+gst_dvd_read_src_get_property (GObject * object, guint prop_id, GValue * value,
+    GParamSpec * pspec)
+{
+  GstDvdReadSrc *src = GST_DVD_READ_SRC (object);
+
+  GST_OBJECT_LOCK (src);
+
+  switch (prop_id) {
+    case ARG_DEVICE:
+      g_value_set_string (value, src->location);
+      break;
+    case ARG_TITLE:
+      g_value_set_int (value, src->uri_title);
+      break;
+    case ARG_CHAPTER:
+      g_value_set_int (value, src->uri_chapter);
+      break;
+    case ARG_ANGLE:
+      g_value_set_int (value, src->uri_angle);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+
+  GST_OBJECT_UNLOCK (src);
+}
+
+static gboolean
+gst_dvd_read_src_get_size (GstDvdReadSrc * src, gint64 * size)
+{
+  gboolean ret = FALSE;
+
+  if (src->dvd_title) {
+    gssize blocks;
+
+    blocks = DVDFileSize (src->dvd_title);
+    if (blocks >= 0) {
+      *size = (gint64) blocks *DVD_VIDEO_LB_LEN;
+
+      ret = TRUE;
+    } else {
+      GST_WARNING_OBJECT (src, "DVDFileSize(%p) failed!", src->dvd_title);
+    }
+  }
+
+  return ret;
+}
+
+/*** Querying and seeking ***/
+
+static gboolean
+gst_dvd_read_src_handle_seek_event (GstDvdReadSrc * src, GstEvent * event)
+{
+  GstSeekFlags flags;
+  GstSeekType cur_type, end_type;
+  gint64 new_off, total;
+  GstFormat format;
+  GstPad *srcpad;
+  gboolean query_ok;
+  gdouble rate;
+
+  gst_event_parse_seek (event, &rate, &format, &flags, &cur_type, &new_off,
+      &end_type, NULL);
+
+  if (rate <= 0.0) {
+    GST_DEBUG_OBJECT (src, "cannot do backwards playback yet");
+    return FALSE;
+  }
+
+  if (end_type != GST_SEEK_TYPE_NONE) {
+    if ((format != chapter_format && format != GST_FORMAT_TIME) ||
+        end_type != GST_SEEK_TYPE_SET) {
+      GST_DEBUG_OBJECT (src, "end seek type not supported");
+      return FALSE;
+    }
+  }
+
+  if (cur_type != GST_SEEK_TYPE_SET) {
+    GST_DEBUG_OBJECT (src, "only SEEK_TYPE_SET is supported");
+    return FALSE;
+  }
+
+  if (format == angle_format) {
+    GST_OBJECT_LOCK (src);
+    if (new_off < 0 || new_off >= src->num_angles) {
+      GST_OBJECT_UNLOCK (src);
+      GST_DEBUG_OBJECT (src, "invalid angle %d, only %d available",
+          src->num_angles, src->num_angles);
+      return FALSE;
+    }
+    src->angle = (gint) new_off;
+    GST_OBJECT_UNLOCK (src);
+    GST_DEBUG_OBJECT (src, "switched to angle %d", (gint) new_off + 1);
+    return TRUE;
+  }
+
+  if (format != chapter_format && format != title_format &&
+      format != GST_FORMAT_BYTES && format != GST_FORMAT_TIME) {
+    GST_DEBUG_OBJECT (src, "unsupported seek format %d (%s)", format,
+        gst_format_get_name (format));
+    return FALSE;
+  }
+
+  if (format == GST_FORMAT_BYTES) {
+    GST_DEBUG_OBJECT (src, "Requested seek to byte %" G_GUINT64_FORMAT,
+        new_off);
+  } else if (format == GST_FORMAT_TIME) {
+    GST_DEBUG_OBJECT (src, "Requested seek to time %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (new_off));
+    if (gst_dvd_read_src_get_sector_from_time (src, new_off) < 0) {
+      GST_DEBUG_OBJECT (src, "Can't find sector for requested time");
+      return FALSE;
+    }
+  }
+
+  srcpad = GST_BASE_SRC_PAD (src);
+
+  /* check whether the seek looks reasonable (ie within possible range) */
+  if (format == GST_FORMAT_BYTES) {
+    GST_OBJECT_LOCK (src);
+    query_ok = gst_dvd_read_src_get_size (src, &total);
+    GST_OBJECT_UNLOCK (src);
+  } else {
+    query_ok = gst_pad_query_duration (srcpad, format, &total);
+  }
+
+  if (!query_ok) {
+    GST_DEBUG_OBJECT (src, "Failed to query duration in format %s",
+        gst_format_get_name (format));
+    return FALSE;
+  }
+
+  GST_DEBUG_OBJECT (src, "Total      %s: %12" G_GINT64_FORMAT,
+      gst_format_get_name (format), total);
+  GST_DEBUG_OBJECT (src, "Seek to    %s: %12" G_GINT64_FORMAT,
+      gst_format_get_name (format), new_off);
+
+  if (new_off >= total) {
+    GST_DEBUG_OBJECT (src, "Seek position out of range");
+    return FALSE;
+  }
+
+  /* set segment to seek format; this allows us to use the do_seek
+   * virtual function and let the base source handle all the tricky
+   * stuff for us. We don't use the segment internally anyway */
+  /* FIXME: can't take the stream lock here - what to do? */
+  GST_OBJECT_LOCK (src);
+  GST_BASE_SRC (src)->segment.format = format;
+  GST_BASE_SRC (src)->segment.start = 0;
+  GST_BASE_SRC (src)->segment.stop = total;
+  GST_BASE_SRC (src)->segment.duration = total;
+  GST_OBJECT_UNLOCK (src);
+
+  return GST_BASE_SRC_CLASS (parent_class)->event (GST_BASE_SRC (src), event);
+}
+
+static void
+gst_dvd_read_src_get_sector_bounds (GstDvdReadSrc * src, gint * first,
+    gint * last)
+{
+  gint c1, c2, tmp;
+  cur_title_get_chapter_bounds (src, 0, &c1, &tmp);
+  cur_title_get_chapter_bounds (src, src->num_chapters - 1, &tmp, &c2);
+  *first = src->cur_pgc->cell_playback[c1].first_sector;
+  *last = src->cur_pgc->cell_playback[c2].last_sector;
+}
+
+static gboolean
+gst_dvd_read_src_do_seek (GstBaseSrc * basesrc, GstSegment * s)
+{
+  GstDvdReadSrc *src;
+
+  src = GST_DVD_READ_SRC (basesrc);
+
+  GST_DEBUG_OBJECT (src, "Seeking to %s: %12" G_GINT64_FORMAT,
+      gst_format_get_name (s->format), s->position);
+
+  /* Ignore the first seek to 0, as it breaks starting playback
+   * from another chapter by seeking back to sector 0 */
+  if (src->first_seek && s->format == GST_FORMAT_BYTES && s->start == 0) {
+    src->first_seek = FALSE;
+    return TRUE;
+  }
+
+  if (s->format == sector_format || s->format == GST_FORMAT_BYTES
+      || s->format == GST_FORMAT_TIME) {
+    guint old;
+
+    old = src->cur_pack;
+
+    if (s->format == sector_format) {
+      gint first, last;
+      gst_dvd_read_src_get_sector_bounds (src, &first, &last);
+      GST_DEBUG_OBJECT (src, "Format is sector, seeking to %" G_GINT64_FORMAT,
+          s->position);
+      src->cur_pack = s->position;
+      if (src->cur_pack < first)
+        src->cur_pack = first;
+      if (src->cur_pack > last)
+        src->cur_pack = last;
+    } else if (s->format == GST_FORMAT_TIME) {
+      gint sector;
+      GST_DEBUG_OBJECT (src, "Format is time");
+
+      sector = gst_dvd_read_src_get_sector_from_time (src, s->position);
+
+      GST_DEBUG_OBJECT (src, "Time %" GST_TIME_FORMAT " => sector %d",
+          GST_TIME_ARGS (s->position), sector);
+
+      /* really shouldn't happen, we've checked this earlier ... */
+      g_return_val_if_fail (sector >= 0, FALSE);
+
+      src->cur_pack = sector;
+    } else {
+      /* byte format */
+      gint first, last;
+      gst_dvd_read_src_get_sector_bounds (src, &first, &last);
+      GST_DEBUG_OBJECT (src, "Format is byte");
+      src->cur_pack = s->position / DVD_VIDEO_LB_LEN;
+      if (((gint64) src->cur_pack * DVD_VIDEO_LB_LEN) != s->position) {
+        GST_LOG_OBJECT (src, "rounded down offset %" G_GINT64_FORMAT " => %"
+            G_GINT64_FORMAT, s->position,
+            (gint64) src->cur_pack * DVD_VIDEO_LB_LEN);
+      }
+      src->cur_pack += first;
+    }
+
+    if (!gst_dvd_read_src_goto_sector (src, src->angle)) {
+      GST_DEBUG_OBJECT (src, "seek to sector 0x%08x failed", src->cur_pack);
+      src->cur_pack = old;
+      return FALSE;
+    }
+
+    GST_LOG_OBJECT (src, "seek to sector 0x%08x ok", src->cur_pack);
+  } else if (s->format == chapter_format) {
+    if (!gst_dvd_read_src_goto_chapter (src, (gint) s->position)) {
+      GST_DEBUG_OBJECT (src, "seek to chapter %d failed",
+          (gint) s->position + 1);
+      return FALSE;
+    }
+    GST_INFO_OBJECT (src, "seek to chapter %d ok", (gint) s->position + 1);
+    src->chapter = s->position;
+  } else if (s->format == title_format) {
+    if (!gst_dvd_read_src_goto_title (src, (gint) s->position, src->angle) ||
+        !gst_dvd_read_src_goto_chapter (src, 0)) {
+      GST_DEBUG_OBJECT (src, "seek to title %d failed", (gint) s->position);
+      return FALSE;
+    }
+    src->title = (gint) s->position;
+    src->chapter = 0;
+    GST_INFO_OBJECT (src, "seek to title %d ok", src->title + 1);
+  } else {
+    g_return_val_if_reached (FALSE);
+  }
+
+  src->need_newsegment = TRUE;
+  return TRUE;
+}
+
+static gboolean
+gst_dvd_read_src_src_event (GstBaseSrc * basesrc, GstEvent * event)
+{
+  GstDvdReadSrc *src = GST_DVD_READ_SRC (basesrc);
+  gboolean res;
+
+  GST_LOG_OBJECT (src, "handling %s event", GST_EVENT_TYPE_NAME (event));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEEK:
+      res = gst_dvd_read_src_handle_seek_event (src, event);
+      break;
+    default:
+      res = GST_BASE_SRC_CLASS (parent_class)->event (basesrc, event);
+      break;
+  }
+
+  return res;
+}
+
+static GstEvent *
+gst_dvd_read_src_make_clut_change_event (GstDvdReadSrc * src,
+    const guint32 * clut)
+{
+  GstStructure *structure;
+  gchar name[16];
+  gint i;
+
+  structure = gst_structure_new ("application/x-gst-dvd",
+      "event", G_TYPE_STRING, "dvd-spu-clut-change", NULL);
+
+  /* Create a separate field for each value in the table. */
+  for (i = 0; i < 16; i++) {
+    g_snprintf (name, sizeof (name), "clut%02d", i);
+    gst_structure_set (structure, name, G_TYPE_INT, (int) clut[i], NULL);
+  }
+
+  /* Create the DVD event and put the structure into it. */
+  return gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM_STICKY, structure);
+}
+
+static gint64
+gst_dvd_read_src_convert_timecode (dvd_time_t * time)
+{
+  gint64 ret_time;
+  const gint64 one_hour = 3600 * GST_SECOND;
+  const gint64 one_min = 60 * GST_SECOND;
+
+  g_return_val_if_fail ((time->hour >> 4) < 0xa
+      && (time->hour & 0xf) < 0xa, -1);
+  g_return_val_if_fail ((time->minute >> 4) < 0x7
+      && (time->minute & 0xf) < 0xa, -1);
+  g_return_val_if_fail ((time->second >> 4) < 0x7
+      && (time->second & 0xf) < 0xa, -1);
+
+  ret_time = ((time->hour >> 4) * 10 + (time->hour & 0xf)) * one_hour;
+  ret_time += ((time->minute >> 4) * 10 + (time->minute & 0xf)) * one_min;
+  ret_time += ((time->second >> 4) * 10 + (time->second & 0xf)) * GST_SECOND;
+
+  return ret_time;
+}
+
+static gboolean
+gst_dvd_read_src_do_duration_query (GstDvdReadSrc * src, GstQuery * query)
+{
+  GstFormat format;
+  gint64 val = 0;
+
+  gst_query_parse_duration (query, &format, NULL);
+
+  switch (format) {
+    case GST_FORMAT_TIME:{
+      if (src->cur_pgc == NULL)
+        return FALSE;
+      val = gst_dvd_read_src_convert_timecode (&src->cur_pgc->playback_time);
+      if (val < 0)
+        return FALSE;
+      break;
+    }
+    case GST_FORMAT_BYTES:{
+      if (!gst_dvd_read_src_get_size (src, &val))
+        return FALSE;
+      break;
+    }
+    default:{
+      if (format == sector_format) {
+        val = DVDFileSize (src->dvd_title);
+      } else if (format == title_format) {
+        val = src->tt_srpt->nr_of_srpts;
+      } else if (format == chapter_format) {
+        val = src->num_chapters;
+      } else if (format == angle_format) {
+        val = src->tt_srpt->title[src->title].nr_of_angles;
+      } else {
+        GST_DEBUG_OBJECT (src, "Don't know how to handle format %d (%s)",
+            format, gst_format_get_name (format));
+        return FALSE;
+      }
+      break;
+    }
+  }
+
+  GST_LOG_OBJECT (src, "duration = %" G_GINT64_FORMAT " %s", val,
+      gst_format_get_name (format));
+
+  gst_query_set_duration (query, format, val);
+  return TRUE;
+}
+
+static gboolean
+gst_dvd_read_src_do_position_query (GstDvdReadSrc * src, GstQuery * query)
+{
+  GstFormat format;
+  gint64 val;
+
+  gst_query_parse_position (query, &format, NULL);
+
+  switch (format) {
+    case GST_FORMAT_BYTES:{
+      val = (gint64) src->cur_pack * DVD_VIDEO_LB_LEN;
+      break;
+    }
+    default:{
+      if (format == sector_format) {
+        val = src->cur_pack;
+      } else if (format == title_format) {
+        val = src->title;
+      } else if (format == chapter_format) {
+        val = src->chapter;
+      } else if (format == angle_format) {
+        val = src->angle;
+      } else {
+        GST_DEBUG_OBJECT (src, "Don't know how to handle format %d (%s)",
+            format, gst_format_get_name (format));
+        return FALSE;
+      }
+      break;
+    }
+  }
+
+  GST_LOG_OBJECT (src, "position = %" G_GINT64_FORMAT " %s", val,
+      gst_format_get_name (format));
+
+  gst_query_set_position (query, format, val);
+  return TRUE;
+}
+
+static gboolean
+gst_dvd_read_src_do_convert_query (GstDvdReadSrc * src, GstQuery * query)
+{
+  GstFormat src_format, dest_format;
+  gboolean ret = FALSE;
+  gint64 src_val, dest_val = -1;
+
+  gst_query_parse_convert (query, &src_format, &src_val, &dest_format, NULL);
+
+  if (src_format == dest_format) {
+    dest_val = src_val;
+    ret = TRUE;
+    goto done;
+  }
+
+  /* Formats to consider: TIME, DEFAULT, BYTES, title, chapter, sector.
+   * Note: title and chapter are counted as starting from 0 here, just like
+   * in the context of seek events. Another note: DEFAULT format is undefined */
+
+  if (src_format == GST_FORMAT_BYTES) {
+    src_format = sector_format;
+    src_val /= DVD_VIDEO_LB_LEN;
+  }
+
+  if (src_format == sector_format) {
+    /* SECTOR => xyz */
+    if (dest_format == GST_FORMAT_TIME && src_val < G_MAXUINT) {
+      dest_val = gst_dvd_read_src_get_time_for_sector (src, (guint) src_val);
+      ret = (dest_val >= 0);
+    } else if (dest_format == GST_FORMAT_BYTES) {
+      dest_val = src_val * DVD_VIDEO_LB_LEN;
+      ret = TRUE;
+    } else {
+      ret = FALSE;
+    }
+  } else if (src_format == title_format) {
+    /* TITLE => xyz */
+    if (dest_format == GST_FORMAT_TIME) {
+      /* not really true, but we use this to trick the base source into
+       * handling seeks in title-format for us (the source won't know that
+       * we changed the title in this case) (changing titles should really
+       * be done with an interface rather than a seek, but for now we're
+       * stuck with this mechanism. Fix in 0.11) */
+      dest_val = (GstClockTime) 0;
+      ret = TRUE;
+    } else {
+      ret = FALSE;
+    }
+  } else if (src_format == chapter_format) {
+    /* CHAPTER => xyz */
+    if (dest_format == GST_FORMAT_TIME) {
+      if (src->num_chapters >= 0 && src_val < src->num_chapters) {
+        dest_val = src->chapter_starts[src_val];
+        ret = TRUE;
+      }
+    } else if (dest_format == sector_format) {
+    } else {
+      ret = FALSE;
+    }
+  } else if (src_format == GST_FORMAT_TIME) {
+    /* TIME => xyz */
+    if (dest_format == sector_format || dest_format == GST_FORMAT_BYTES) {
+      dest_val = gst_dvd_read_src_get_sector_from_time (src, src_val);
+      ret = (dest_val >= 0);
+      if (dest_format == GST_FORMAT_BYTES)
+        dest_val *= DVD_VIDEO_LB_LEN;
+    } else if (dest_format == chapter_format) {
+      if (src->chapter_starts != NULL) {
+        gint i;
+
+        for (i = src->num_chapters - 1; i >= 0; --i) {
+          if (src->chapter_starts && src->chapter_starts[i] >= src_val) {
+            dest_val = i;
+            ret = TRUE;
+            break;
+          }
+        }
+      } else {
+        ret = FALSE;
+      }
+    } else {
+      ret = FALSE;
+    }
+  } else {
+    ret = FALSE;
+  }
+
+done:
+
+  if (ret) {
+    gst_query_set_convert (query, src_format, src_val, dest_format, dest_val);
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_dvd_read_src_src_query (GstBaseSrc * basesrc, GstQuery * query)
+{
+  GstDvdReadSrc *src = GST_DVD_READ_SRC (basesrc);
+  gboolean res = TRUE;
+
+  GST_LOG_OBJECT (src, "handling %s query", GST_QUERY_TYPE_NAME (query));
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_DURATION:
+      GST_OBJECT_LOCK (src);
+      if (GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED)) {
+        res = gst_dvd_read_src_do_duration_query (src, query);
+      } else {
+        GST_DEBUG_OBJECT (src, "query failed: not started");
+        res = FALSE;
+      }
+      GST_OBJECT_UNLOCK (src);
+      break;
+    case GST_QUERY_POSITION:
+      GST_OBJECT_LOCK (src);
+      if (GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED)) {
+        res = gst_dvd_read_src_do_position_query (src, query);
+      } else {
+        GST_DEBUG_OBJECT (src, "query failed: not started");
+        res = FALSE;
+      }
+      GST_OBJECT_UNLOCK (src);
+      break;
+    case GST_QUERY_CONVERT:
+      GST_OBJECT_LOCK (src);
+      if (GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED)) {
+        res = gst_dvd_read_src_do_convert_query (src, query);
+      } else {
+        GST_DEBUG_OBJECT (src, "query failed: not started");
+        res = FALSE;
+      }
+      GST_OBJECT_UNLOCK (src);
+      break;
+    default:
+      res = GST_BASE_SRC_CLASS (parent_class)->query (basesrc, query);
+      break;
+  }
+
+  return res;
+}
+
+static gboolean
+gst_dvd_read_src_goto_sector (GstDvdReadSrc * src, int angle)
+{
+  gint seek_to = src->cur_pack;
+  gint chapter, next, cur, i;
+
+  /* retrieve position */
+  src->cur_pack = 0;
+  GST_DEBUG_OBJECT (src, "Goto sector %d, angle %d, within %d chapters",
+      seek_to, angle, src->num_chapters);
+
+  for (i = 0; i < src->num_chapters; i++) {
+    gint c1, c2;
+
+    cur_title_get_chapter_bounds (src, i, &c1, &c2);
+    GST_DEBUG_OBJECT (src, " Looking in chapter %d, bounds: %d %d", i, c1, c2);
+
+    for (next = cur = c1; cur < c2;) {
+      gint first = src->cur_pgc->cell_playback[cur].first_sector;
+      gint last = src->cur_pgc->cell_playback[cur].last_sector;
+      GST_DEBUG_OBJECT (src, "Cell %d sector bounds: %d %d", cur, first, last);
+      cur = next;
+      if (src->cur_pgc->cell_playback[cur].block_type == BLOCK_TYPE_ANGLE_BLOCK)
+        cur += angle;
+      next = gst_dvd_read_src_get_next_cell (src, src->cur_pgc, cur);
+      /* seeking to 0 should end up at first chapter in any case */
+      if ((seek_to >= first && seek_to <= last) || (seek_to == 0 && i == 0)) {
+        GST_DEBUG_OBJECT (src, "Seek target found in chapter %d", i);
+        chapter = i;
+        goto done;
+      }
+    }
+  }
+
+  GST_DEBUG_OBJECT (src, "Seek to sector %u failed", seek_to);
+
+  return FALSE;
+
+done:
+  {
+    /* so chapter $chapter and cell $cur contain our sector
+     * of interest. Let's go there! */
+    GST_INFO_OBJECT (src, "Seek succeeded, going to chapter %u, cell %u",
+        chapter + 1, cur);
+
+    gst_dvd_read_src_goto_chapter (src, chapter);
+    src->cur_cell = cur;
+    src->next_cell = next;
+    src->new_cell = FALSE;
+    src->cur_pack = seek_to;
+
+    return TRUE;
+  }
+}
+
+
+/*** URI interface ***/
+
+static GstURIType
+gst_dvd_read_src_uri_get_type (GType type)
+{
+  return GST_URI_SRC;
+}
+
+static const gchar *const *
+gst_dvd_read_src_uri_get_protocols (GType type)
+{
+  static const gchar *protocols[] = { "dvd", NULL };
+
+  return protocols;
+}
+
+static gchar *
+gst_dvd_read_src_uri_get_uri (GstURIHandler * handler)
+{
+  GstDvdReadSrc *src = GST_DVD_READ_SRC (handler);
+  gchar *uri;
+
+  GST_OBJECT_LOCK (src);
+  uri = g_strdup_printf ("dvd://%d,%d,%d", src->uri_title, src->uri_chapter,
+      src->uri_angle);
+  GST_OBJECT_UNLOCK (src);
+
+  return uri;
+}
+
+static gboolean
+gst_dvd_read_src_uri_set_uri (GstURIHandler * handler, const gchar * uri,
+    GError ** error)
+{
+  GstDvdReadSrc *src = GST_DVD_READ_SRC (handler);
+
+  /* parse out the new t/c/a and seek to them */
+  {
+    gchar *location = NULL;
+    gchar **strs;
+    gchar **strcur;
+    gint pos = 0;
+
+    location = gst_uri_get_location (uri);
+
+    GST_OBJECT_LOCK (src);
+
+    src->uri_title = 1;
+    src->uri_chapter = 1;
+    src->uri_angle = 1;
+
+    if (!location)
+      goto empty_location;
+
+    strcur = strs = g_strsplit (location, ",", 0);
+    while (strcur && *strcur) {
+      gint val;
+
+      if (!sscanf (*strcur, "%d", &val))
+        break;
+
+      if (val <= 0) {
+        g_warning ("Invalid value %d in URI '%s'. Must be 1 or greater",
+            val, location);
+        break;
+      }
+
+      switch (pos) {
+        case 0:
+          src->uri_title = val;
+          break;
+        case 1:
+          src->uri_chapter = val;
+          break;
+        case 2:
+          src->uri_angle = val;
+          break;
+      }
+
+      strcur++;
+      pos++;
+    }
+
+    if (pos > 0 && GST_OBJECT_FLAG_IS_SET (src, GST_BASE_SRC_FLAG_STARTED)) {
+      src->title = src->uri_title - 1;
+      src->chapter = src->uri_chapter - 1;
+      src->angle = src->uri_angle - 1;
+      src->new_seek = TRUE;
+    }
+
+    g_strfreev (strs);
+    g_free (location);
+
+  empty_location:
+
+    GST_OBJECT_UNLOCK (src);
+  }
+
+  return TRUE;
+}
+
+static void
+gst_dvd_read_src_uri_handler_init (gpointer g_iface, gpointer iface_data)
+{
+  GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface;
+
+  iface->get_type = gst_dvd_read_src_uri_get_type;
+  iface->get_protocols = gst_dvd_read_src_uri_get_protocols;
+  iface->get_uri = gst_dvd_read_src_uri_get_uri;
+  iface->set_uri = gst_dvd_read_src_uri_set_uri;
+}
+
+static gboolean
+dvdread_element_init (GstPlugin * plugin)
+{
+  GST_DEBUG_CATEGORY_INIT (gstgst_dvd_read_src_debug, "dvdreadsrc", 0,
+      "DVD reader element based on dvdreadsrc");
+
+#ifdef ENABLE_NLS
+  GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE,
+      LOCALEDIR);
+  bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+#endif /* ENABLE_NLS */
+  return gst_element_register (plugin, "dvdreadsrc", GST_RANK_NONE,
+      GST_TYPE_DVD_READ_SRC);
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  return GST_ELEMENT_REGISTER (dvdreadsrc, plugin);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    dvdread,
+    "Access a DVD with dvdread",
+    plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
diff --git a/subprojects/gst-plugins-ugly/ext/dvdread/dvdreadsrc.h b/subprojects/gst-plugins-ugly/ext/dvdread/dvdreadsrc.h
new file mode 100644 (file)
index 0000000..d31c961
--- /dev/null
@@ -0,0 +1,103 @@
+/* GStreamer DVD title source
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2001> Billy Biggs <vektor@dumbterm.net>.
+ * Copyright (C) <2006> Tim-Philipp Müller <tim centricular net>
+ *
+ * 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_DVD_READ_SRC_H__
+#define __GST_DVD_READ_SRC_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstpushsrc.h>
+
+#include <dvdread/dvd_reader.h>
+#include <dvdread/ifo_types.h>
+#include <dvdread/ifo_read.h>
+#include <dvdread/nav_read.h>
+#include <dvdread/nav_print.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_DVD_READ_SRC            (gst_dvd_read_src_get_type())
+#define GST_DVD_READ_SRC(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DVD_READ_SRC,GstDvdReadSrc))
+#define GST_DVD_READ_SRC_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DVD_READ_SRC,GstDvdReadSrcClass))
+#define GST_IS_DVD_READ_SRC(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DVD_READ_SRC))
+#define GST_IS_DVD_READ_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DVD_READ_SRC))
+
+typedef struct _GstDvdReadSrc GstDvdReadSrc;
+typedef struct _GstDvdReadSrcClass GstDvdReadSrcClass;
+
+struct _GstDvdReadSrc {
+  GstPushSrc       pushsrc;
+
+  /* location */
+  gchar           *location;
+
+  gboolean         first_seek;
+  gboolean         new_seek;
+  gboolean         change_cell;
+
+  gboolean         new_cell;
+
+  gint             uri_title;     /* set via the URI handler or properties,  */
+  gint             uri_chapter;   /* otherwise not touched; these values     */
+  gint             uri_angle;     /* start from 1                            */
+
+  gint             title;         /* current position while open, set to the */
+  gint             chapter;       /* URI-set values in ::start(). these      */
+  gint             angle;         /* values start from 0                     */
+
+  gint             start_cell, last_cell, cur_cell;
+  gint             cur_pack;
+  gint             next_cell;
+  dvd_reader_t    *dvd;
+  ifo_handle_t    *vmg_file;
+
+  /* title stuff */
+  gint             ttn;
+  tt_srpt_t       *tt_srpt;
+  ifo_handle_t    *vts_file;
+  vts_ptt_srpt_t  *vts_ptt_srpt;
+  vts_tmapt_t     *vts_tmapt;
+  dvd_file_t      *dvd_title;
+  gint             num_chapters;
+  gint             num_angles;
+
+  GstClockTime    *chapter_starts;  /* start time of chapters within title   */
+
+  /* which program chain to watch (based on title and chapter number) */
+  pgc_t           *cur_pgc;
+  gint             pgc_id;
+  gint             pgn;
+
+  gboolean         need_newsegment;
+  GstEvent        *title_lang_event_pending;
+  GstEvent        *pending_clut_event;
+};
+
+struct _GstDvdReadSrcClass {
+  GstPushSrcClass parent_class;
+};
+
+GType gst_dvd_read_src_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (dvdreadsrc);
+
+G_END_DECLS
+
+#endif /* __GST_DVD_READ_SRC_H__ */
+
diff --git a/subprojects/gst-plugins-ugly/ext/dvdread/meson.build b/subprojects/gst-plugins-ugly/ext/dvdread/meson.build
new file mode 100644 (file)
index 0000000..f075d84
--- /dev/null
@@ -0,0 +1,14 @@
+dvdread_dep = dependency('dvdread', version : '>= 0.5.0', required : get_option('dvdread'))
+
+if gmodule_dep.found() and dvdread_dep.found()
+  dvdread = library('gstdvdread',
+    ['dvdreadsrc.c'],
+    c_args : ugly_args,
+    include_directories : [configinc, libsinc],
+    dependencies : [gstbase_dep, gmodule_dep, dvdread_dep],
+    install : true,
+    install_dir : plugins_install_dir,
+  )
+  pkgconfig.generate(dvdread, install_dir : plugins_pkgconfig_install_dir)
+  plugins += [dvdread]
+endif
diff --git a/subprojects/gst-plugins-ugly/ext/meson.build b/subprojects/gst-plugins-ugly/ext/meson.build
new file mode 100644 (file)
index 0000000..c33bb1c
--- /dev/null
@@ -0,0 +1,8 @@
+subdir('a52dec')
+subdir('amrnb')
+subdir('amrwbdec')
+subdir('cdio')
+subdir('dvdread')
+subdir('mpeg2dec')
+subdir('sidplay')
+subdir('x264')
diff --git a/subprojects/gst-plugins-ugly/ext/mpeg2dec/gstmpeg2dec.c b/subprojects/gst-plugins-ugly/ext/mpeg2dec/gstmpeg2dec.c
new file mode 100644 (file)
index 0000000..12b3cac
--- /dev/null
@@ -0,0 +1,1180 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <string.h>
+
+#include <inttypes.h>
+
+#include "gstmpeg2dec.h"
+
+#include <gst/video/gstvideometa.h>
+#include <gst/video/gstvideopool.h>
+
+/* 16byte-aligns a buffer for libmpeg2 */
+#define ALIGN_16(p) ((void *)(((uintptr_t)(p) + 15) & ~((uintptr_t)15)))
+
+GST_DEBUG_CATEGORY_STATIC (mpeg2dec_debug);
+#define GST_CAT_DEFAULT mpeg2dec_debug
+GST_DEBUG_CATEGORY_STATIC (CAT_PERFORMANCE);
+
+/* Send a warning message about decoding errors after receiving this many
+ * STATE_INVALID return values from mpeg2_parse. -1 means never.
+ */
+#define WARN_THRESHOLD (5)
+
+static GstStaticPadTemplate sink_template_factory =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/mpeg, "
+        "mpegversion = (int) [ 1, 2 ], " "systemstream = (boolean) false")
+    );
+
+static GstStaticPadTemplate src_template_factory =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-raw, "
+        "format = (string) { YV12, I420, Y42B, Y444 }, "
+        "width = (int) [ 16, 4096 ], "
+        "height = (int) [ 16, 4096 ], "
+        "framerate = (fraction) [ 0/1, 2147483647/1 ]")
+    );
+
+#define gst_mpeg2dec_parent_class parent_class
+G_DEFINE_TYPE (GstMpeg2dec, gst_mpeg2dec, GST_TYPE_VIDEO_DECODER);
+GST_ELEMENT_REGISTER_DEFINE (mpeg2dec, "mpeg2dec", GST_RANK_SECONDARY,
+    GST_TYPE_MPEG2DEC);
+
+static void gst_mpeg2dec_finalize (GObject * object);
+
+/* GstVideoDecoder base class method */
+static gboolean gst_mpeg2dec_open (GstVideoDecoder * decoder);
+static gboolean gst_mpeg2dec_close (GstVideoDecoder * decoder);
+static gboolean gst_mpeg2dec_start (GstVideoDecoder * decoder);
+static gboolean gst_mpeg2dec_stop (GstVideoDecoder * decoder);
+static gboolean gst_mpeg2dec_set_format (GstVideoDecoder * decoder,
+    GstVideoCodecState * state);
+static gboolean gst_mpeg2dec_flush (GstVideoDecoder * decoder);
+static GstFlowReturn gst_mpeg2dec_finish (GstVideoDecoder * decoder);
+static GstFlowReturn gst_mpeg2dec_handle_frame (GstVideoDecoder * decoder,
+    GstVideoCodecFrame * frame);
+static gboolean gst_mpeg2dec_decide_allocation (GstVideoDecoder * decoder,
+    GstQuery * query);
+
+static void gst_mpeg2dec_clear_buffers (GstMpeg2dec * mpeg2dec);
+static gboolean gst_mpeg2dec_crop_buffer (GstMpeg2dec * dec,
+    GstVideoCodecFrame * in_frame, GstVideoFrame * in_vframe);
+
+static void
+gst_mpeg2dec_class_init (GstMpeg2decClass * klass)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+  GstVideoDecoderClass *video_decoder_class = GST_VIDEO_DECODER_CLASS (klass);
+
+  gobject_class->finalize = gst_mpeg2dec_finalize;
+
+  gst_element_class_add_static_pad_template (element_class,
+      &src_template_factory);
+  gst_element_class_add_static_pad_template (element_class,
+      &sink_template_factory);
+  gst_element_class_set_static_metadata (element_class,
+      "mpeg1 and mpeg2 video decoder", "Codec/Decoder/Video",
+      "Uses libmpeg2 to decode MPEG video streams",
+      "Wim Taymans <wim.taymans@chello.be>");
+
+  video_decoder_class->open = GST_DEBUG_FUNCPTR (gst_mpeg2dec_open);
+  video_decoder_class->close = GST_DEBUG_FUNCPTR (gst_mpeg2dec_close);
+  video_decoder_class->start = GST_DEBUG_FUNCPTR (gst_mpeg2dec_start);
+  video_decoder_class->stop = GST_DEBUG_FUNCPTR (gst_mpeg2dec_stop);
+  video_decoder_class->flush = GST_DEBUG_FUNCPTR (gst_mpeg2dec_flush);
+  video_decoder_class->set_format = GST_DEBUG_FUNCPTR (gst_mpeg2dec_set_format);
+  video_decoder_class->handle_frame =
+      GST_DEBUG_FUNCPTR (gst_mpeg2dec_handle_frame);
+  video_decoder_class->finish = GST_DEBUG_FUNCPTR (gst_mpeg2dec_finish);
+  video_decoder_class->decide_allocation =
+      GST_DEBUG_FUNCPTR (gst_mpeg2dec_decide_allocation);
+
+  GST_DEBUG_CATEGORY_INIT (mpeg2dec_debug, "mpeg2dec", 0,
+      "MPEG-2 Video Decoder");
+  GST_DEBUG_CATEGORY_GET (CAT_PERFORMANCE, "GST_PERFORMANCE");
+}
+
+static void
+gst_mpeg2dec_init (GstMpeg2dec * mpeg2dec)
+{
+  gst_video_decoder_set_packetized (GST_VIDEO_DECODER (mpeg2dec), TRUE);
+  gst_video_decoder_set_needs_format (GST_VIDEO_DECODER (mpeg2dec), TRUE);
+  gst_video_decoder_set_use_default_pad_acceptcaps (GST_VIDEO_DECODER_CAST
+      (mpeg2dec), TRUE);
+  GST_PAD_SET_ACCEPT_TEMPLATE (GST_VIDEO_DECODER_SINK_PAD (mpeg2dec));
+
+  /* initialize the mpeg2dec acceleration */
+}
+
+static void
+gst_mpeg2dec_finalize (GObject * object)
+{
+  GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (object);
+
+  if (mpeg2dec->decoder) {
+    GST_DEBUG_OBJECT (mpeg2dec, "closing decoder");
+    mpeg2_close (mpeg2dec->decoder);
+    mpeg2dec->decoder = NULL;
+  }
+
+  gst_mpeg2dec_clear_buffers (mpeg2dec);
+  g_free (mpeg2dec->dummybuf[3]);
+  mpeg2dec->dummybuf[3] = NULL;
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static gboolean
+gst_mpeg2dec_open (GstVideoDecoder * decoder)
+{
+  GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
+
+  mpeg2_accel (MPEG2_ACCEL_DETECT);
+  if ((mpeg2dec->decoder = mpeg2_init ()) == NULL)
+    return FALSE;
+  mpeg2dec->info = mpeg2_info (mpeg2dec->decoder);
+
+  return TRUE;
+}
+
+static gboolean
+gst_mpeg2dec_close (GstVideoDecoder * decoder)
+{
+  GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
+
+  if (mpeg2dec->decoder) {
+    mpeg2_close (mpeg2dec->decoder);
+    mpeg2dec->decoder = NULL;
+    mpeg2dec->info = NULL;
+  }
+  gst_mpeg2dec_clear_buffers (mpeg2dec);
+
+  return TRUE;
+}
+
+static gboolean
+gst_mpeg2dec_set_format (GstVideoDecoder * decoder, GstVideoCodecState * state)
+{
+  GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
+
+  /* Save input state to be used as reference for output state */
+  if (mpeg2dec->input_state)
+    gst_video_codec_state_unref (mpeg2dec->input_state);
+  mpeg2dec->input_state = gst_video_codec_state_ref (state);
+
+  return TRUE;
+}
+
+static gboolean
+gst_mpeg2dec_start (GstVideoDecoder * decoder)
+{
+  GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
+
+  mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_PICTURE;
+
+  return TRUE;
+}
+
+static gboolean
+gst_mpeg2dec_stop (GstVideoDecoder * decoder)
+{
+  GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
+
+  mpeg2_reset (mpeg2dec->decoder, 0);
+  mpeg2_skip (mpeg2dec->decoder, 1);
+
+  gst_mpeg2dec_clear_buffers (mpeg2dec);
+
+  if (mpeg2dec->input_state)
+    gst_video_codec_state_unref (mpeg2dec->input_state);
+  mpeg2dec->input_state = NULL;
+
+  if (mpeg2dec->downstream_pool) {
+    gst_buffer_pool_set_active (mpeg2dec->downstream_pool, FALSE);
+    gst_object_unref (mpeg2dec->downstream_pool);
+  }
+
+  return TRUE;
+}
+
+static gboolean
+gst_mpeg2dec_flush (GstVideoDecoder * decoder)
+{
+  GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
+
+  /* reset the initial video state */
+  mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_PICTURE;
+  mpeg2_reset (mpeg2dec->decoder, 1);
+  mpeg2_skip (mpeg2dec->decoder, 1);
+
+  gst_mpeg2dec_clear_buffers (mpeg2dec);
+
+  if (mpeg2dec->downstream_pool)
+    gst_buffer_pool_set_active (mpeg2dec->downstream_pool, FALSE);
+
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_mpeg2dec_finish (GstVideoDecoder * decoder)
+{
+  return GST_FLOW_OK;
+}
+
+static GstBufferPool *
+gst_mpeg2dec_create_generic_pool (GstAllocator * allocator,
+    GstAllocationParams * params, GstCaps * caps, guint size, guint min,
+    guint max, GstStructure ** out_config)
+{
+  GstBufferPool *pool;
+  GstStructure *config;
+
+  pool = gst_video_buffer_pool_new ();
+  config = gst_buffer_pool_get_config (pool);
+
+  gst_buffer_pool_config_set_allocator (config, allocator, params);
+  gst_buffer_pool_config_set_params (config, caps, size, min, max);
+  gst_buffer_pool_config_add_option (config, GST_BUFFER_POOL_OPTION_VIDEO_META);
+
+  *out_config = config;
+  return pool;
+}
+
+static gboolean
+gst_mpeg2dec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query)
+{
+  GstMpeg2dec *dec = GST_MPEG2DEC (decoder);
+  GstBufferPool *pool;
+  guint size, min, max;
+  GstStructure *config, *down_config = NULL;
+  GstAllocator *allocator;
+  GstAllocationParams params;
+  gboolean update_allocator;
+  gboolean has_videometa = FALSE;
+  GstCaps *caps;
+
+  /* Get rid of ancient pool */
+  if (dec->downstream_pool) {
+    gst_buffer_pool_set_active (dec->downstream_pool, FALSE);
+    gst_object_unref (dec->downstream_pool);
+    dec->downstream_pool = NULL;
+  }
+
+  /* Get negotiated allocation caps */
+  gst_query_parse_allocation (query, &caps, NULL);
+
+  /* Set allocation parameters to guarantee 16-byte aligned output buffers */
+  if (gst_query_get_n_allocation_params (query) > 0) {
+    gst_query_parse_nth_allocation_param (query, 0, &allocator, &params);
+    update_allocator = TRUE;
+  } else {
+    allocator = NULL;
+    gst_allocation_params_init (&params);
+    update_allocator = FALSE;
+  }
+
+  params.align = MAX (params.align, 15);
+
+  if (update_allocator)
+    gst_query_set_nth_allocation_param (query, 0, allocator, &params);
+  else
+    gst_query_add_allocation_param (query, allocator, &params);
+
+  /* Now chain up to the parent class to guarantee that we can
+   * get a buffer pool from the query */
+  if (!GST_VIDEO_DECODER_CLASS (parent_class)->decide_allocation (decoder,
+          query)) {
+    if (allocator)
+      gst_object_unref (allocator);
+    return FALSE;
+  }
+
+  gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max);
+
+  config = gst_buffer_pool_get_config (pool);
+  if (gst_query_find_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL)) {
+    gst_buffer_pool_config_add_option (config,
+        GST_BUFFER_POOL_OPTION_VIDEO_META);
+    has_videometa = TRUE;
+  }
+
+  if (dec->need_alignment) {
+    /* If downstream does not support video meta, we will have to copy, keep
+     * the downstream pool to avoid double copying */
+    if (!has_videometa) {
+      dec->downstream_pool = pool;
+      pool = NULL;
+      down_config = config;
+      config = NULL;
+      min = 2;
+      max = 0;
+    }
+
+    /* In case downstream support video meta, but the downstream pool does not
+     * have alignment support, discard downstream pool and use video pool */
+    else if (!gst_buffer_pool_has_option (pool,
+            GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT)) {
+      gst_object_unref (pool);
+      pool = NULL;
+      gst_structure_free (config);
+      config = NULL;
+    }
+
+    if (!pool)
+      pool = gst_mpeg2dec_create_generic_pool (allocator, &params, caps, size,
+          min, max, &config);
+
+    gst_buffer_pool_config_add_option (config,
+        GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
+    gst_buffer_pool_config_set_video_alignment (config, &dec->valign);
+  }
+
+  if (allocator)
+    gst_object_unref (allocator);
+
+  /* If we are copying out, we'll need to setup and activate the other pool */
+  if (dec->downstream_pool) {
+    if (!gst_buffer_pool_set_config (dec->downstream_pool, down_config)) {
+      down_config = gst_buffer_pool_get_config (dec->downstream_pool);
+      if (!gst_buffer_pool_config_validate_params (down_config, caps, size, min,
+              max)) {
+        gst_structure_free (down_config);
+        goto config_failed;
+      }
+
+      if (!gst_buffer_pool_set_config (dec->downstream_pool, down_config))
+        goto config_failed;
+    }
+
+    if (!gst_buffer_pool_set_active (dec->downstream_pool, TRUE))
+      goto activate_failed;
+  }
+
+  /* Now configure the pool, if the pool had made some changes, it will
+   * return FALSE. Validate the changes ...*/
+  if (!gst_buffer_pool_set_config (pool, config)) {
+    config = gst_buffer_pool_get_config (pool);
+
+    /* Check basic params */
+    if (!gst_buffer_pool_config_validate_params (config, caps, size, min, max)) {
+      gst_structure_free (config);
+      goto config_failed;
+    }
+
+    /* If needed, check that resulting alignment is still valid */
+    if (dec->need_alignment) {
+      GstVideoAlignment valign;
+
+      if (!gst_buffer_pool_config_get_video_alignment (config, &valign)) {
+        gst_structure_free (config);
+        goto config_failed;
+      }
+
+      if (valign.padding_left != 0 || valign.padding_top != 0
+          || valign.padding_right < dec->valign.padding_right
+          || valign.padding_bottom < dec->valign.padding_bottom) {
+        gst_structure_free (config);
+        goto config_failed;
+      }
+    }
+
+    if (!gst_buffer_pool_set_config (pool, config))
+      goto config_failed;
+  }
+
+  /* For external pools, we need to check strides */
+  if (!GST_IS_VIDEO_BUFFER_POOL (pool) && has_videometa) {
+    GstBuffer *buffer;
+    const GstVideoFormatInfo *finfo;
+    GstVideoMeta *vmeta;
+    gint uv_stride;
+
+    if (!gst_buffer_pool_set_active (pool, TRUE))
+      goto activate_failed;
+
+    if (gst_buffer_pool_acquire_buffer (pool, &buffer, NULL) != GST_FLOW_OK) {
+      gst_buffer_pool_set_active (pool, FALSE);
+      goto acquire_failed;
+    }
+
+    vmeta = gst_buffer_get_video_meta (buffer);
+    finfo = gst_video_format_get_info (vmeta->format);
+
+    /* Check that strides are compatible. In this case, we can scale the
+     * stride directly since all the pixel strides for the formats we support
+     * is 1 */
+    uv_stride = GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (finfo, 1, vmeta->stride[0]);
+    if (uv_stride != vmeta->stride[1] || uv_stride != vmeta->stride[2]) {
+      gst_buffer_pool_set_active (pool, FALSE);
+      gst_object_unref (pool);
+
+      pool = gst_mpeg2dec_create_generic_pool (allocator, &params, caps, size,
+          min, max, &config);
+
+      if (dec->need_alignment) {
+        gst_buffer_pool_config_add_option (config,
+            GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
+        gst_buffer_pool_config_set_video_alignment (config, &dec->valign);
+      }
+
+      /* Generic pool don't fail on _set_config() */
+      gst_buffer_pool_set_config (pool, config);
+    }
+
+    gst_buffer_unref (buffer);
+  }
+
+  gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max);
+  gst_object_unref (pool);
+
+  return TRUE;
+
+config_failed:
+  gst_object_unref (pool);
+  GST_ELEMENT_ERROR (dec, RESOURCE, SETTINGS,
+      ("Failed to configure buffer pool"),
+      ("Configuration is most likely invalid, please report this issue."));
+  return FALSE;
+
+activate_failed:
+  gst_object_unref (pool);
+  GST_ELEMENT_ERROR (dec, RESOURCE, SETTINGS,
+      ("Failed to activate buffer pool"), (NULL));
+  return FALSE;
+
+acquire_failed:
+  gst_object_unref (pool);
+  GST_ELEMENT_ERROR (dec, RESOURCE, SETTINGS,
+      ("Failed to acquire a buffer"), (NULL));
+  return FALSE;
+}
+
+static GstFlowReturn
+gst_mpeg2dec_crop_buffer (GstMpeg2dec * dec, GstVideoCodecFrame * in_frame,
+    GstVideoFrame * input_vframe)
+{
+  GstVideoCodecState *state;
+  GstVideoInfo *info;
+  GstVideoInfo *dinfo;
+  GstVideoFrame output_frame;
+  GstFlowReturn ret;
+  GstBuffer *buffer = NULL;
+
+  state = gst_video_decoder_get_output_state (GST_VIDEO_DECODER (dec));
+  info = &state->info;
+  dinfo = &dec->decoded_info;
+
+  GST_CAT_LOG_OBJECT (CAT_PERFORMANCE, dec,
+      "Copying input buffer %ux%u (%" G_GSIZE_FORMAT ") to output buffer "
+      "%ux%u (%" G_GSIZE_FORMAT ")", dinfo->width, dinfo->height,
+      dinfo->size, info->width, info->height, info->size);
+
+  ret = gst_buffer_pool_acquire_buffer (dec->downstream_pool, &buffer, NULL);
+  if (ret != GST_FLOW_OK)
+    goto beach;
+
+  if (!gst_video_frame_map (&output_frame, info, buffer, GST_MAP_WRITE))
+    goto map_fail;
+
+  if (in_frame->output_buffer)
+    gst_buffer_unref (in_frame->output_buffer);
+  in_frame->output_buffer = buffer;
+
+  if (!gst_video_frame_copy (&output_frame, input_vframe))
+    goto copy_failed;
+
+  gst_video_frame_unmap (&output_frame);
+
+  GST_BUFFER_FLAGS (in_frame->output_buffer) =
+      GST_BUFFER_FLAGS (input_vframe->buffer);
+
+beach:
+  gst_video_codec_state_unref (state);
+
+  return ret;
+
+map_fail:
+  {
+    GST_ERROR_OBJECT (dec, "Failed to map output frame");
+    gst_video_codec_state_unref (state);
+    return GST_FLOW_ERROR;
+  }
+
+copy_failed:
+  {
+    GST_ERROR_OBJECT (dec, "Failed to copy output frame");
+    gst_video_frame_unmap (&output_frame);
+    gst_video_codec_state_unref (state);
+    return GST_FLOW_ERROR;
+  }
+}
+
+typedef struct
+{
+  gint id;
+  GstVideoFrame frame;
+} GstMpeg2DecBuffer;
+
+static void
+gst_mpeg2dec_clear_buffers (GstMpeg2dec * mpeg2dec)
+{
+  GList *l;
+  while ((l = g_list_first (mpeg2dec->buffers))) {
+    GstMpeg2DecBuffer *mbuf = l->data;
+    gst_video_frame_unmap (&mbuf->frame);
+    g_slice_free (GstMpeg2DecBuffer, mbuf);
+    mpeg2dec->buffers = g_list_delete_link (mpeg2dec->buffers, l);
+  }
+}
+
+static void
+gst_mpeg2dec_save_buffer (GstMpeg2dec * mpeg2dec, gint id,
+    GstVideoFrame * frame)
+{
+  GstMpeg2DecBuffer *mbuf;
+
+  GST_LOG_OBJECT (mpeg2dec, "Saving local info for frame %d", id);
+
+  mbuf = g_slice_new0 (GstMpeg2DecBuffer);
+  mbuf->id = id;
+  mbuf->frame = *frame;
+
+  mpeg2dec->buffers = g_list_prepend (mpeg2dec->buffers, mbuf);
+}
+
+static gint
+gst_mpeg2dec_buffer_compare (GstMpeg2DecBuffer * mbuf, gconstpointer id)
+{
+  if (mbuf->id == GPOINTER_TO_INT (id))
+    return 0;
+  return -1;
+}
+
+static void
+gst_mpeg2dec_discard_buffer (GstMpeg2dec * mpeg2dec, gint id)
+{
+  GList *l = g_list_find_custom (mpeg2dec->buffers, GINT_TO_POINTER (id),
+      (GCompareFunc) gst_mpeg2dec_buffer_compare);
+
+  if (l) {
+    GstMpeg2DecBuffer *mbuf = l->data;
+    gst_video_frame_unmap (&mbuf->frame);
+    g_slice_free (GstMpeg2DecBuffer, mbuf);
+    mpeg2dec->buffers = g_list_delete_link (mpeg2dec->buffers, l);
+    GST_LOG_OBJECT (mpeg2dec, "Discarded local info for frame %d", id);
+  } else {
+    GST_WARNING ("Could not find buffer %d, will be leaked until next reset",
+        id);
+  }
+}
+
+static GstVideoFrame *
+gst_mpeg2dec_get_buffer (GstMpeg2dec * mpeg2dec, gint id)
+{
+  GList *l = g_list_find_custom (mpeg2dec->buffers, GINT_TO_POINTER (id),
+      (GCompareFunc) gst_mpeg2dec_buffer_compare);
+
+  if (l) {
+    GstMpeg2DecBuffer *mbuf = l->data;
+    return &mbuf->frame;
+  }
+
+  return NULL;
+}
+
+static void
+init_dummybuf (GstMpeg2dec * mpeg2dec)
+{
+  g_free (mpeg2dec->dummybuf[3]);
+
+  /* libmpeg2 needs 16 byte aligned buffers... care for this here */
+  mpeg2dec->dummybuf[3] = g_malloc0 (mpeg2dec->decoded_info.size + 15);
+  mpeg2dec->dummybuf[0] = ALIGN_16 (mpeg2dec->dummybuf[3]);
+  mpeg2dec->dummybuf[1] =
+      mpeg2dec->dummybuf[0] +
+      GST_VIDEO_INFO_PLANE_OFFSET (&mpeg2dec->decoded_info, 1);
+  mpeg2dec->dummybuf[2] =
+      mpeg2dec->dummybuf[0] +
+      GST_VIDEO_INFO_PLANE_OFFSET (&mpeg2dec->decoded_info, 2);
+}
+
+static GstFlowReturn
+handle_sequence (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+  GstClockTime latency;
+  const mpeg2_sequence_t *sequence;
+  GstVideoCodecState *state;
+  GstVideoInfo *vinfo;
+  GstVideoFormat format;
+
+  sequence = info->sequence;
+
+  if (sequence->frame_period == 0)
+    goto invalid_frame_period;
+
+  /* mpeg2 video can only be from 16x16 to 4096x4096. Everything
+   * else is a corrupted file */
+  if (sequence->width > 4096 || sequence->width < 16 ||
+      sequence->height > 4096 || sequence->height < 16)
+    goto invalid_size;
+
+  GST_DEBUG_OBJECT (mpeg2dec,
+      "widthxheight: %dx%d , decoded_widthxheight: %dx%d",
+      sequence->picture_width, sequence->picture_height, sequence->width,
+      sequence->height);
+
+  gst_video_alignment_reset (&mpeg2dec->valign);
+
+  if (sequence->picture_width < sequence->width ||
+      sequence->picture_height < sequence->height) {
+    GST_DEBUG_OBJECT (mpeg2dec, "we need to crop");
+    mpeg2dec->valign.padding_right = sequence->width - sequence->picture_width;
+    mpeg2dec->valign.padding_bottom =
+        sequence->height - sequence->picture_height;
+    mpeg2dec->need_alignment = TRUE;
+  } else if (sequence->picture_width == sequence->width ||
+      sequence->picture_height == sequence->height) {
+    GST_DEBUG_OBJECT (mpeg2dec, "no cropping needed");
+    mpeg2dec->need_alignment = FALSE;
+  } else {
+    goto invalid_picture;
+  }
+
+  /* get subsampling */
+  if (sequence->chroma_width < sequence->width) {
+    /* horizontally subsampled */
+    if (sequence->chroma_height < sequence->height) {
+      /* and vertically subsamples */
+      format = GST_VIDEO_FORMAT_I420;
+    } else {
+      format = GST_VIDEO_FORMAT_Y42B;
+    }
+  } else {
+    /* not subsampled */
+    format = GST_VIDEO_FORMAT_Y444;
+  }
+
+  state = gst_video_decoder_set_output_state (GST_VIDEO_DECODER (mpeg2dec),
+      format, sequence->picture_width, sequence->picture_height,
+      mpeg2dec->input_state);
+  vinfo = &state->info;
+
+  /* If we don't have a valid upstream PAR override it */
+  if (GST_VIDEO_INFO_PAR_N (vinfo) == 1 &&
+      GST_VIDEO_INFO_PAR_D (vinfo) == 1 &&
+      sequence->pixel_width != 0 && sequence->pixel_height != 0) {
+    guint pixel_width, pixel_height;
+
+    if (mpeg2_guess_aspect (sequence, &pixel_width, &pixel_height)) {
+      vinfo->par_n = pixel_width;
+      vinfo->par_d = pixel_height;
+    }
+    GST_DEBUG_OBJECT (mpeg2dec, "Setting PAR %d x %d",
+        vinfo->par_n, vinfo->par_d);
+  }
+  vinfo->fps_n = 27000000;
+  vinfo->fps_d = sequence->frame_period;
+
+  if (!(sequence->flags & SEQ_FLAG_PROGRESSIVE_SEQUENCE))
+    vinfo->interlace_mode = GST_VIDEO_INTERLACE_MODE_MIXED;
+  else
+    vinfo->interlace_mode = GST_VIDEO_INTERLACE_MODE_PROGRESSIVE;
+
+  vinfo->chroma_site = GST_VIDEO_CHROMA_SITE_MPEG2;
+  vinfo->colorimetry.range = GST_VIDEO_COLOR_RANGE_16_235;
+
+  if (sequence->flags & SEQ_FLAG_COLOUR_DESCRIPTION) {
+    /* do color description */
+    switch (sequence->colour_primaries) {
+      case 1:
+        vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT709;
+        break;
+      case 4:
+        vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT470M;
+        break;
+      case 5:
+        vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_BT470BG;
+        break;
+      case 6:
+        vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_SMPTE170M;
+        break;
+      case 7:
+        vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_SMPTE240M;
+        break;
+        /* 0 forbidden */
+        /* 2 unspecified */
+        /* 3 reserved */
+        /* 8-255 reserved */
+      default:
+        vinfo->colorimetry.primaries = GST_VIDEO_COLOR_PRIMARIES_UNKNOWN;
+        break;
+    }
+    /* matrix coefficients */
+    switch (sequence->matrix_coefficients) {
+      case 1:
+        vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_BT709;
+        break;
+      case 4:
+        vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_FCC;
+        break;
+      case 5:
+      case 6:
+        vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_BT601;
+        break;
+      case 7:
+        vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_SMPTE240M;
+        break;
+        /* 0 forbidden */
+        /* 2 unspecified */
+        /* 3 reserved */
+        /* 8-255 reserved */
+      default:
+        vinfo->colorimetry.matrix = GST_VIDEO_COLOR_MATRIX_UNKNOWN;
+        break;
+    }
+    /* transfer characteristics */
+    switch (sequence->transfer_characteristics) {
+      case 1:
+        vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_BT709;
+        break;
+      case 4:
+        vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_GAMMA22;
+        break;
+      case 5:
+        vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_GAMMA28;
+        break;
+      case 6:
+        vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_BT709;
+        break;
+      case 7:
+        vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_SMPTE240M;
+        break;
+      case 8:
+        vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_GAMMA10;
+        break;
+        /* 0 forbidden */
+        /* 2 unspecified */
+        /* 3 reserved */
+        /* 9-255 reserved */
+      default:
+        vinfo->colorimetry.transfer = GST_VIDEO_TRANSFER_UNKNOWN;
+        break;
+    }
+  }
+
+  GST_DEBUG_OBJECT (mpeg2dec,
+      "sequence flags: %d, frame period: %d, frame rate: %d/%d",
+      sequence->flags, sequence->frame_period, vinfo->fps_n, vinfo->fps_d);
+  GST_DEBUG_OBJECT (mpeg2dec, "profile: %02x, colour_primaries: %d",
+      sequence->profile_level_id, sequence->colour_primaries);
+  GST_DEBUG_OBJECT (mpeg2dec, "transfer chars: %d, matrix coef: %d",
+      sequence->transfer_characteristics, sequence->matrix_coefficients);
+  GST_DEBUG_OBJECT (mpeg2dec,
+      "FLAGS: CONSTRAINED_PARAMETERS:%d, PROGRESSIVE_SEQUENCE:%d",
+      sequence->flags & SEQ_FLAG_CONSTRAINED_PARAMETERS,
+      sequence->flags & SEQ_FLAG_PROGRESSIVE_SEQUENCE);
+  GST_DEBUG_OBJECT (mpeg2dec, "FLAGS: LOW_DELAY:%d, COLOUR_DESCRIPTION:%d",
+      sequence->flags & SEQ_FLAG_LOW_DELAY,
+      sequence->flags & SEQ_FLAG_COLOUR_DESCRIPTION);
+
+  /* Save the padded video information */
+  mpeg2dec->decoded_info = *vinfo;
+  gst_video_info_align (&mpeg2dec->decoded_info, &mpeg2dec->valign);
+
+  /* Mpeg2dec has 2 frame latency to produce a picture and 1 frame latency in
+   * it's parser */
+  latency = gst_util_uint64_scale (3 * GST_SECOND, vinfo->fps_d, vinfo->fps_n);
+  gst_video_decoder_set_latency (GST_VIDEO_DECODER (mpeg2dec), latency,
+      latency);
+
+  if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (mpeg2dec)))
+    goto negotiation_fail;
+
+  gst_video_codec_state_unref (state);
+
+  mpeg2_custom_fbuf (mpeg2dec->decoder, 1);
+
+  init_dummybuf (mpeg2dec);
+
+  /* Pump in some null buffers, because otherwise libmpeg2 doesn't
+   * initialise the discard_fbuf->id */
+  mpeg2_set_buf (mpeg2dec->decoder, mpeg2dec->dummybuf, NULL);
+  mpeg2_set_buf (mpeg2dec->decoder, mpeg2dec->dummybuf, NULL);
+  mpeg2_set_buf (mpeg2dec->decoder, mpeg2dec->dummybuf, NULL);
+  gst_mpeg2dec_clear_buffers (mpeg2dec);
+
+  return ret;
+
+invalid_frame_period:
+  {
+    GST_WARNING_OBJECT (mpeg2dec, "Frame period is 0!");
+    return GST_FLOW_ERROR;
+  }
+invalid_size:
+  {
+    GST_ERROR_OBJECT (mpeg2dec, "Invalid frame dimensions: %d x %d",
+        sequence->width, sequence->height);
+    return GST_FLOW_ERROR;
+  }
+
+invalid_picture:
+  {
+    GST_ERROR_OBJECT (mpeg2dec, "Picture dimension bigger then frame: "
+        "%d x %d is bigger then %d x %d", sequence->picture_width,
+        sequence->picture_height, sequence->width, sequence->height);
+    return GST_FLOW_ERROR;
+  }
+
+
+negotiation_fail:
+  {
+    GST_WARNING_OBJECT (mpeg2dec, "Failed to negotiate with downstream");
+    gst_video_codec_state_unref (state);
+    return GST_FLOW_ERROR;
+  }
+}
+
+static GstFlowReturn
+handle_picture (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info,
+    GstVideoCodecFrame * frame)
+{
+  GstVideoDecoder *decoder = (GstVideoDecoder *) mpeg2dec;
+  GstFlowReturn ret;
+  gint type;
+  const gchar *type_str = NULL;
+  gboolean key_frame = FALSE;
+  const mpeg2_picture_t *picture = info->current_picture;
+  GstVideoFrame vframe;
+  guint8 *buf[3];
+
+  ret = gst_video_decoder_allocate_output_frame (decoder, frame);
+  if (ret != GST_FLOW_OK)
+    return ret;
+
+  type = picture->flags & PIC_MASK_CODING_TYPE;
+  switch (type) {
+    case PIC_FLAG_CODING_TYPE_I:
+      key_frame = TRUE;
+      mpeg2_skip (mpeg2dec->decoder, 0);
+      type_str = "I";
+      break;
+    case PIC_FLAG_CODING_TYPE_P:
+      type_str = "P";
+      break;
+    case PIC_FLAG_CODING_TYPE_B:
+      type_str = "B";
+      break;
+    default:
+      gst_video_codec_frame_ref (frame);
+      ret = gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
+      GST_VIDEO_DECODER_ERROR (mpeg2dec, 1, STREAM, DECODE,
+          ("decoding error"), ("Invalid picture type"), ret);
+      return ret;
+  }
+
+  GST_DEBUG_OBJECT (mpeg2dec, "handle picture type %s", type_str);
+  GST_DEBUG_OBJECT (mpeg2dec, "picture %s, frame %i",
+      key_frame ? ", kf," : "    ", frame->system_frame_number);
+
+  if (GST_VIDEO_INFO_IS_INTERLACED (&mpeg2dec->decoded_info)) {
+    /* This implies SEQ_FLAG_PROGRESSIVE_SEQUENCE is not set */
+    if (picture->flags & PIC_FLAG_TOP_FIELD_FIRST) {
+      GST_BUFFER_FLAG_SET (frame->output_buffer, GST_VIDEO_BUFFER_FLAG_TFF);
+    }
+    if (!(picture->flags & PIC_FLAG_PROGRESSIVE_FRAME)) {
+      GST_BUFFER_FLAG_SET (frame->output_buffer,
+          GST_VIDEO_BUFFER_FLAG_INTERLACED);
+    }
+    if (picture->flags & PIC_FLAG_REPEAT_FIRST_FIELD) {
+      GST_BUFFER_FLAG_SET (frame->output_buffer, GST_VIDEO_BUFFER_FLAG_RFF);
+    }
+  }
+
+  if (mpeg2dec->discont_state == MPEG2DEC_DISC_NEW_PICTURE && key_frame) {
+    mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_KEYFRAME;
+  }
+
+  GST_DEBUG_OBJECT (mpeg2dec,
+      "picture: %s %s %s %s %s fields:%d ts:%"
+      GST_TIME_FORMAT,
+      (picture->flags & PIC_FLAG_PROGRESSIVE_FRAME ? "prog" : "    "),
+      (picture->flags & PIC_FLAG_TOP_FIELD_FIRST ? "tff" : "   "),
+      (picture->flags & PIC_FLAG_REPEAT_FIRST_FIELD ? "rff" : "   "),
+      (picture->flags & PIC_FLAG_SKIP ? "skip" : "    "),
+      (picture->flags & PIC_FLAG_COMPOSITE_DISPLAY ? "composite" : "         "),
+      picture->nb_fields, GST_TIME_ARGS (frame->pts));
+
+  if (!gst_video_frame_map (&vframe, &mpeg2dec->decoded_info,
+          frame->output_buffer, GST_MAP_READ | GST_MAP_WRITE))
+    goto map_fail;
+
+  buf[0] = GST_VIDEO_FRAME_PLANE_DATA (&vframe, 0);
+  buf[1] = GST_VIDEO_FRAME_PLANE_DATA (&vframe, 1);
+  buf[2] = GST_VIDEO_FRAME_PLANE_DATA (&vframe, 2);
+
+  GST_DEBUG_OBJECT (mpeg2dec, "set_buf: %p %p %p, frame %i",
+      buf[0], buf[1], buf[2], frame->system_frame_number);
+
+  /* Note: We use a non-null 'id' value to make the distinction
+   * between the dummy buffers (which have an id of NULL) and the
+   * ones we did */
+  mpeg2_stride (mpeg2dec->decoder, vframe.info.stride[0]);
+  mpeg2_set_buf (mpeg2dec->decoder, buf,
+      GINT_TO_POINTER (frame->system_frame_number + 1));
+  gst_mpeg2dec_save_buffer (mpeg2dec, frame->system_frame_number, &vframe);
+
+  return ret;
+
+map_fail:
+  {
+    GST_ELEMENT_ERROR (mpeg2dec, RESOURCE, WRITE, ("Failed to map frame"),
+        (NULL));
+    return GST_FLOW_ERROR;
+  }
+}
+
+static GstFlowReturn
+handle_slice (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+  GstVideoCodecFrame *frame;
+  const mpeg2_picture_t *picture;
+  gboolean key_frame = FALSE;
+  gboolean bidirect_frame = FALSE;
+  gboolean closed_gop = FALSE;
+
+  GST_DEBUG_OBJECT (mpeg2dec,
+      "fbuf:%p display_picture:%p current_picture:%p fbuf->id:%d",
+      info->display_fbuf, info->display_picture, info->current_picture,
+      GPOINTER_TO_INT (info->display_fbuf->id) - 1);
+
+  /* Note, the fbuf-id is shifted by 1 to make the difference between
+   * NULL values (used by dummy buffers) and 'real' values */
+  frame = gst_video_decoder_get_frame (GST_VIDEO_DECODER (mpeg2dec),
+      GPOINTER_TO_INT (info->display_fbuf->id) - 1);
+  if (!frame)
+    goto no_frame;
+  picture = info->display_picture;
+  key_frame = (picture->flags & PIC_MASK_CODING_TYPE) == PIC_FLAG_CODING_TYPE_I;
+  bidirect_frame =
+      (picture->flags & PIC_MASK_CODING_TYPE) == PIC_FLAG_CODING_TYPE_B;
+  closed_gop = (info->gop->flags & GOP_FLAG_CLOSED_GOP);
+
+  GST_DEBUG_OBJECT (mpeg2dec, "picture flags: %d, type: %d, keyframe: %d",
+      picture->flags, picture->flags & PIC_MASK_CODING_TYPE, key_frame);
+
+  if (key_frame) {
+    mpeg2_skip (mpeg2dec->decoder, 0);
+  }
+
+  if (mpeg2dec->discont_state == MPEG2DEC_DISC_NEW_KEYFRAME && key_frame)
+    mpeg2dec->discont_state = MPEG2DEC_DISC_NONE;
+
+  if (picture->flags & PIC_FLAG_SKIP) {
+    GST_DEBUG_OBJECT (mpeg2dec, "dropping buffer because of skip flag");
+    ret = gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
+    mpeg2_skip (mpeg2dec->decoder, 1);
+    return ret;
+  }
+
+  /* Skip B-frames if GOP is not closed and waiting for the first keyframe. */
+  if (mpeg2dec->discont_state != MPEG2DEC_DISC_NONE) {
+    if (bidirect_frame && !closed_gop) {
+      GST_DEBUG_OBJECT (mpeg2dec, "dropping buffer, discont state %d",
+          mpeg2dec->discont_state);
+      ret = gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
+      return ret;
+    }
+  }
+
+  /* do cropping if the target region is smaller than the input one */
+  if (mpeg2dec->downstream_pool) {
+    GstVideoFrame *vframe;
+
+    if (gst_video_decoder_get_max_decode_time (GST_VIDEO_DECODER (mpeg2dec),
+            frame) < 0) {
+      GST_DEBUG_OBJECT (mpeg2dec, "dropping buffer crop, too late");
+      return gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
+    }
+
+    GST_DEBUG_OBJECT (mpeg2dec, "Doing a crop copy of the decoded buffer");
+
+    vframe = gst_mpeg2dec_get_buffer (mpeg2dec, frame->system_frame_number);
+    g_assert (vframe != NULL);
+    ret = gst_mpeg2dec_crop_buffer (mpeg2dec, frame, vframe);
+
+    if (ret != GST_FLOW_OK) {
+      gst_video_decoder_drop_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
+      return ret;
+    }
+  }
+
+  ret = gst_video_decoder_finish_frame (GST_VIDEO_DECODER (mpeg2dec), frame);
+
+  return ret;
+
+no_frame:
+  {
+    GST_DEBUG ("display buffer does not have a valid frame");
+    return GST_FLOW_OK;
+  }
+}
+
+static GstFlowReturn
+gst_mpeg2dec_handle_frame (GstVideoDecoder * decoder,
+    GstVideoCodecFrame * frame)
+{
+  GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
+  GstBuffer *buf = frame->input_buffer;
+  GstMapInfo minfo;
+  const mpeg2_info_t *info;
+  mpeg2_state_t state;
+  gboolean done = FALSE;
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  GST_LOG_OBJECT (mpeg2dec, "received frame %d, timestamp %"
+      GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT,
+      frame->system_frame_number,
+      GST_TIME_ARGS (frame->pts), GST_TIME_ARGS (frame->duration));
+
+  gst_buffer_ref (buf);
+  if (!gst_buffer_map (buf, &minfo, GST_MAP_READ)) {
+    GST_ERROR_OBJECT (mpeg2dec, "Failed to map input buffer");
+    gst_buffer_unref (buf);
+    return GST_FLOW_ERROR;
+  }
+
+  info = mpeg2dec->info;
+
+  GST_LOG_OBJECT (mpeg2dec, "calling mpeg2_buffer");
+  mpeg2_buffer (mpeg2dec->decoder, minfo.data, minfo.data + minfo.size);
+  GST_LOG_OBJECT (mpeg2dec, "calling mpeg2_buffer done");
+
+  while (!done) {
+    GST_LOG_OBJECT (mpeg2dec, "calling parse");
+    state = mpeg2_parse (mpeg2dec->decoder);
+    GST_DEBUG_OBJECT (mpeg2dec, "parse state %d", state);
+
+    switch (state) {
+      case STATE_SEQUENCE_MODIFIED:
+        GST_DEBUG_OBJECT (mpeg2dec, "sequence modified");
+        mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_PICTURE;
+        gst_mpeg2dec_clear_buffers (mpeg2dec);
+        /* fall through */
+      case STATE_SEQUENCE:
+        ret = handle_sequence (mpeg2dec, info);
+        /* if there is an error handling the sequence
+         * reset the decoder, maybe something more elegant
+         * could be done.
+         */
+        if (ret == GST_FLOW_ERROR) {
+          GST_VIDEO_DECODER_ERROR (decoder, 1, STREAM, DECODE,
+              ("decoding error"), ("Bad sequence header"), ret);
+          gst_video_decoder_drop_frame (decoder, frame);
+          gst_mpeg2dec_flush (decoder);
+          goto done;
+        }
+        break;
+      case STATE_SEQUENCE_REPEATED:
+        GST_DEBUG_OBJECT (mpeg2dec, "sequence repeated");
+        break;
+      case STATE_GOP:
+        GST_DEBUG_OBJECT (mpeg2dec, "gop");
+        break;
+      case STATE_PICTURE:
+        ret = handle_picture (mpeg2dec, info, frame);
+        break;
+      case STATE_SLICE_1ST:
+        GST_LOG_OBJECT (mpeg2dec, "1st slice of frame encountered");
+        break;
+      case STATE_PICTURE_2ND:
+        GST_LOG_OBJECT (mpeg2dec,
+            "Second picture header encountered. Decoding 2nd field");
+        break;
+      case STATE_INVALID_END:
+        GST_DEBUG_OBJECT (mpeg2dec, "invalid end");
+      case STATE_END:
+        GST_DEBUG_OBJECT (mpeg2dec, "end");
+      case STATE_SLICE:
+        GST_DEBUG_OBJECT (mpeg2dec, "display_fbuf:%p, discard_fbuf:%p",
+            info->display_fbuf, info->discard_fbuf);
+        if (info->display_fbuf && info->display_fbuf->id) {
+          ret = handle_slice (mpeg2dec, info);
+        } else {
+          GST_DEBUG_OBJECT (mpeg2dec, "no picture to display");
+        }
+        if (info->discard_fbuf && info->discard_fbuf->id)
+          gst_mpeg2dec_discard_buffer (mpeg2dec,
+              GPOINTER_TO_INT (info->discard_fbuf->id) - 1);
+        if (state != STATE_SLICE) {
+          gst_mpeg2dec_clear_buffers (mpeg2dec);
+        }
+        break;
+      case STATE_BUFFER:
+        done = TRUE;
+        break;
+        /* error */
+      case STATE_INVALID:
+        GST_VIDEO_DECODER_ERROR (decoder, 1, STREAM, DECODE,
+            ("decoding error"), ("Reached libmpeg2 invalid state"), ret);
+        continue;
+      default:
+        GST_ERROR_OBJECT (mpeg2dec, "Unknown libmpeg2 state %d, FIXME", state);
+        ret = GST_FLOW_OK;
+        gst_video_codec_frame_unref (frame);
+        goto done;
+    }
+
+    if (ret != GST_FLOW_OK) {
+      GST_DEBUG_OBJECT (mpeg2dec, "exit loop, reason %s",
+          gst_flow_get_name (ret));
+      break;
+    }
+  }
+
+  gst_video_codec_frame_unref (frame);
+
+done:
+  gst_buffer_unmap (buf, &minfo);
+  gst_buffer_unref (buf);
+  return ret;
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  return GST_ELEMENT_REGISTER (mpeg2dec, plugin);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    mpeg2dec,
+    "LibMpeg2 decoder", plugin_init, VERSION, "GPL", GST_PACKAGE_NAME,
+    GST_PACKAGE_ORIGIN);
diff --git a/subprojects/gst-plugins-ugly/ext/mpeg2dec/gstmpeg2dec.h b/subprojects/gst-plugins-ugly/ext/mpeg2dec/gstmpeg2dec.h
new file mode 100644 (file)
index 0000000..3ae4b7b
--- /dev/null
@@ -0,0 +1,90 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * 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_MPEG2DEC_H__
+#define __GST_MPEG2DEC_H__
+
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+#include <gst/video/gstvideodecoder.h>
+#include <mpeg2.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_MPEG2DEC \
+  (gst_mpeg2dec_get_type())
+#define GST_MPEG2DEC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_MPEG2DEC,GstMpeg2dec))
+#define GST_MPEG2DEC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_MPEG2DEC,GstMpeg2decClass))
+#define GST_IS_MPEG2DEC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MPEG2DEC))
+#define GST_IS_MPEG2DEC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MPEG2DEC))
+
+#define MPEG_TIME_TO_GST_TIME(time) ((time) == -1 ? -1 : ((time) * (GST_MSECOND/10)) / G_GINT64_CONSTANT(9))
+#define GST_TIME_TO_MPEG_TIME(time) ((time) == -1 ? -1 : ((time) * G_GINT64_CONSTANT(9)) / (GST_MSECOND/10))
+
+typedef struct _GstMpeg2dec GstMpeg2dec;
+typedef struct _GstMpeg2decClass GstMpeg2decClass;
+
+typedef enum
+{
+  MPEG2DEC_DISC_NONE            = 0,
+  MPEG2DEC_DISC_NEW_PICTURE,
+  MPEG2DEC_DISC_NEW_KEYFRAME
+} DiscontState;
+
+struct _GstMpeg2dec {
+  GstVideoDecoder element;
+
+  mpeg2dec_t    *decoder;
+  const mpeg2_info_t *info;
+
+  /* Buffer lifetime management */
+  GList         *buffers;
+
+  /* FIXME This should not be necessary. It is used to prevent image
+   * corruption when the parser does not behave the way it should.
+   * See https://bugzilla.gnome.org/show_bug.cgi?id=674238
+   */
+  DiscontState   discont_state;
+
+  /* video state */
+  GstVideoCodecState *input_state;
+  GstVideoInfo        decoded_info;
+  GstVideoAlignment   valign;
+  GstBufferPool *     downstream_pool;
+  gboolean            need_alignment;
+
+  guint8        *dummybuf[4];
+};
+
+struct _GstMpeg2decClass {
+  GstVideoDecoderClass parent_class;
+};
+
+GType gst_mpeg2dec_get_type(void);
+GST_ELEMENT_REGISTER_DECLARE (mpeg2dec);
+
+G_END_DECLS
+
+#endif /* __GST_MPEG2DEC_H__ */
diff --git a/subprojects/gst-plugins-ugly/ext/mpeg2dec/meson.build b/subprojects/gst-plugins-ugly/ext/mpeg2dec/meson.build
new file mode 100644 (file)
index 0000000..aa5262a
--- /dev/null
@@ -0,0 +1,14 @@
+mpeg2_dep = dependency('libmpeg2', version : '>= 0.4.0', required : get_option('mpeg2dec'))
+
+if mpeg2_dep.found()
+  mpeg2dec = library('gstmpeg2dec',
+    ['gstmpeg2dec.c'],
+    c_args : ugly_args,
+    include_directories : [configinc],
+    dependencies : [gstvideo_dep, mpeg2_dep],
+    install : true,
+    install_dir : plugins_install_dir,
+  )
+  pkgconfig.generate(mpeg2dec, install_dir : plugins_pkgconfig_install_dir)
+  plugins += [mpeg2dec]
+endif
diff --git a/subprojects/gst-plugins-ugly/ext/sidplay/gstsiddec.cc b/subprojects/gst-plugins-ugly/ext/sidplay/gstsiddec.cc
new file mode 100644 (file)
index 0000000..1a7c91e
--- /dev/null
@@ -0,0 +1,780 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *           (C) <2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-siddec
+ *
+ * This element decodes .sid files to raw audio. .sid files are in fact
+ * small Commodore 64 programs that are executed on an emulated 6502 CPU and a
+ * MOS 6581 sound chip.
+ *
+ * This plugin will first load the complete program into memory before starting
+ * the emulator and producing output.
+ *
+ * Seeking is not (and cannot be) implemented.
+ *
+ * ## Example pipelines
+ *
+ * |[
+ * gst-launch-1.0 -v filesrc location=Hawkeye.sid ! siddec ! audioconvert ! audioresample ! autoaudiosink
+ * ]| Decode a sid file and play it back.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <gst/audio/audio.h>
+#include "gstsiddec.h"
+
+#define DEFAULT_TUNE           0
+#define DEFAULT_CLOCK          SIDTUNE_CLOCK_PAL
+#define DEFAULT_MEMORY         MPU_BANK_SWITCHING
+#define DEFAULT_FILTER         TRUE
+#define DEFAULT_MEASURED_VOLUME        TRUE
+#define DEFAULT_MOS8580                FALSE
+#define DEFAULT_FORCE_SPEED    FALSE
+#define DEFAULT_BLOCKSIZE      4096
+
+enum
+{
+  PROP_0,
+  PROP_TUNE,
+  PROP_CLOCK,
+  PROP_MEMORY,
+  PROP_FILTER,
+  PROP_MEASURED_VOLUME,
+  PROP_MOS8580,
+  PROP_FORCE_SPEED,
+  PROP_BLOCKSIZE,
+  PROP_METADATA
+};
+
+static GstStaticPadTemplate sink_templ = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-sid")
+    );
+
+#define FORMATS "{ " GST_AUDIO_NE(S16) "," GST_AUDIO_NE(U16) ", S8, U8 }"
+
+static GstStaticPadTemplate src_templ = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-raw, "
+        "format = (string) " FORMATS ", "
+        "layout = (string) interleaved, "
+        "rate = (int) [ 8000, 48000 ], " "channels = (int) [ 1, 2 ]")
+    );
+
+GST_DEBUG_CATEGORY_STATIC (gst_siddec_debug);
+#define GST_CAT_DEFAULT gst_siddec_debug
+
+#define GST_TYPE_SID_CLOCK (gst_sid_clock_get_type())
+static GType
+gst_sid_clock_get_type (void)
+{
+  static GType sid_clock_type = 0;
+  static const GEnumValue sid_clock[] = {
+    {SIDTUNE_CLOCK_PAL, "PAL", "pal"},
+    {SIDTUNE_CLOCK_NTSC, "NTSC", "ntsc"},
+    {0, NULL, NULL},
+  };
+
+  if (!sid_clock_type) {
+    sid_clock_type = g_enum_register_static ("GstSidClock", sid_clock);
+  }
+  return sid_clock_type;
+}
+
+#define GST_TYPE_SID_MEMORY (gst_sid_memory_get_type())
+static GType
+gst_sid_memory_get_type (void)
+{
+  static GType sid_memory_type = 0;
+  static const GEnumValue sid_memory[] = {
+    {MPU_BANK_SWITCHING, "Bank Switching", "bank-switching"},
+    {MPU_TRANSPARENT_ROM, "Transparent ROM", "transparent-rom"},
+    {MPU_PLAYSID_ENVIRONMENT, "Playsid Environment", "playsid-environment"},
+    {0, NULL, NULL},
+  };
+
+  if (!sid_memory_type) {
+    sid_memory_type = g_enum_register_static ("GstSidMemory", sid_memory);
+  }
+  return sid_memory_type;
+}
+
+static void gst_siddec_finalize (GObject * object);
+
+static GstFlowReturn gst_siddec_chain (GstPad * pad, GstObject * parent,
+    GstBuffer * buffer);
+static gboolean gst_siddec_sink_event (GstPad * pad, GstObject * parent,
+    GstEvent * event);
+
+static gboolean gst_siddec_src_convert (GstPad * pad, GstFormat src_format,
+    gint64 src_value, GstFormat * dest_format, gint64 * dest_value);
+static gboolean gst_siddec_src_event (GstPad * pad, GstObject * parent,
+    GstEvent * event);
+static gboolean gst_siddec_src_query (GstPad * pad, GstObject * parent,
+    GstQuery * query);
+
+static void gst_siddec_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static void gst_siddec_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+
+#define gst_siddec_parent_class parent_class
+G_DEFINE_TYPE (GstSidDec, gst_siddec, GST_TYPE_ELEMENT);
+GST_ELEMENT_REGISTER_DEFINE (siddec, "siddec", GST_RANK_PRIMARY,
+    GST_TYPE_SIDDEC);
+
+static void
+gst_siddec_class_init (GstSidDecClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+
+  gobject_class->finalize = gst_siddec_finalize;
+  gobject_class->set_property = gst_siddec_set_property;
+  gobject_class->get_property = gst_siddec_get_property;
+
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_TUNE,
+      g_param_spec_int ("tune", "tune", "tune",
+          0, 100, DEFAULT_TUNE,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_CLOCK,
+      g_param_spec_enum ("clock", "clock", "clock",
+          GST_TYPE_SID_CLOCK, DEFAULT_CLOCK,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MEMORY,
+      g_param_spec_enum ("memory", "memory", "memory", GST_TYPE_SID_MEMORY,
+          DEFAULT_MEMORY,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_FILTER,
+      g_param_spec_boolean ("filter", "filter", "filter", DEFAULT_FILTER,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MEASURED_VOLUME,
+      g_param_spec_boolean ("measured-volume", "measured_volume",
+          "measured_volume", DEFAULT_MEASURED_VOLUME,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MOS8580,
+      g_param_spec_boolean ("mos8580", "mos8580", "mos8580", DEFAULT_MOS8580,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_FORCE_SPEED,
+      g_param_spec_boolean ("force-speed", "force_speed", "force_speed",
+          DEFAULT_FORCE_SPEED,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BLOCKSIZE,
+      g_param_spec_uint ("blocksize", "Block size",
+          "Size in bytes to output per buffer", 1, G_MAXUINT,
+          DEFAULT_BLOCKSIZE,
+          (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+  g_object_class_install_property (gobject_class, PROP_METADATA,
+      g_param_spec_boxed ("metadata", "Metadata", "Metadata", GST_TYPE_CAPS,
+          (GParamFlags) (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)));
+
+  gst_element_class_set_static_metadata (gstelement_class, "Sid decoder",
+      "Codec/Decoder/Audio", "Use libsidplay to decode SID audio tunes",
+      "Wim Taymans <wim.taymans@gmail.com>");
+
+  gst_element_class_add_static_pad_template (gstelement_class, &src_templ);
+  gst_element_class_add_static_pad_template (gstelement_class, &sink_templ);
+
+  GST_DEBUG_CATEGORY_INIT (gst_siddec_debug, "siddec", 0,
+      "C64 sid song player");
+
+  gst_type_mark_as_plugin_api (GST_TYPE_SID_CLOCK, static_cast<GstPluginAPIFlags>(0));
+  gst_type_mark_as_plugin_api (GST_TYPE_SID_MEMORY, static_cast<GstPluginAPIFlags>(0));
+}
+
+static void
+gst_siddec_init (GstSidDec * siddec)
+{
+  siddec->sinkpad = gst_pad_new_from_static_template (&sink_templ, "sink");
+  gst_pad_set_event_function (siddec->sinkpad, gst_siddec_sink_event);
+  gst_pad_set_chain_function (siddec->sinkpad, gst_siddec_chain);
+  gst_element_add_pad (GST_ELEMENT (siddec), siddec->sinkpad);
+
+  siddec->srcpad = gst_pad_new_from_static_template (&src_templ, "src");
+  gst_pad_set_event_function (siddec->srcpad, gst_siddec_src_event);
+  gst_pad_set_query_function (siddec->srcpad, gst_siddec_src_query);
+  gst_pad_use_fixed_caps (siddec->srcpad);
+  gst_element_add_pad (GST_ELEMENT (siddec), siddec->srcpad);
+
+  siddec->engine = new emuEngine ();
+  siddec->tune = new sidTune (0);
+  siddec->config = (emuConfig *) g_malloc (sizeof (emuConfig));
+
+  /* get default config parameters */
+  siddec->engine->getConfig (*siddec->config);
+
+  siddec->config->mos8580 = DEFAULT_MOS8580;    // mos8580
+  siddec->config->memoryMode = DEFAULT_MEMORY;  // memory mode
+  siddec->config->clockSpeed = DEFAULT_CLOCK;   // clock speed
+  siddec->config->forceSongSpeed = DEFAULT_FORCE_SPEED; // force song speed
+
+  siddec->engine->setConfig (*siddec->config);
+
+  siddec->tune_buffer = (guchar *) g_malloc (maxSidtuneFileLen);
+  siddec->tune_len = 0;
+  siddec->tune_number = 0;
+  siddec->total_bytes = 0;
+  siddec->blocksize = DEFAULT_BLOCKSIZE;
+
+  siddec->have_group_id = FALSE;
+  siddec->group_id = G_MAXUINT;
+}
+
+static void
+gst_siddec_finalize (GObject * object)
+{
+  GstSidDec *siddec = GST_SIDDEC (object);
+
+  g_free (siddec->config);
+  g_free (siddec->tune_buffer);
+
+  delete (siddec->tune);
+  delete (siddec->engine);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+update_tags (GstSidDec * siddec)
+{
+  sidTuneInfo info;
+  GstTagList *list;
+
+  if (siddec->tune->getInfo (info)) {
+    list = gst_tag_list_new_empty ();
+
+    if (info.nameString) {
+      gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
+          GST_TAG_TITLE, info.nameString, (void *) NULL);
+    }
+    if (info.authorString) {
+      gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
+          GST_TAG_ARTIST, info.authorString, (void *) NULL);
+    }
+    if (info.copyrightString) {
+      gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
+          GST_TAG_COPYRIGHT, info.copyrightString, (void *) NULL);
+    }
+    gst_pad_push_event (siddec->srcpad, gst_event_new_tag (list));
+  }
+}
+
+static gboolean
+siddec_negotiate (GstSidDec * siddec)
+{
+  GstCaps *allowed;
+  GstStructure *structure;
+  int rate = 44100;
+  int channels = 1;
+  GstCaps *caps;
+  const gchar *str;
+  GstAudioFormat format;
+  GstEvent *event;
+  gchar *stream_id;
+
+  allowed = gst_pad_get_allowed_caps (siddec->srcpad);
+  if (!allowed)
+    goto nothing_allowed;
+
+  GST_DEBUG_OBJECT (siddec, "allowed caps: %" GST_PTR_FORMAT, allowed);
+
+  allowed = gst_caps_normalize (allowed);
+
+  structure = gst_caps_get_structure (allowed, 0);
+
+  str = gst_structure_get_string (structure, "format");
+  if (str == NULL)
+    goto invalid_format;
+
+  format = gst_audio_format_from_string (str);
+  switch (format) {
+    case GST_AUDIO_FORMAT_S8:
+      siddec->config->bitsPerSample = 8;
+      siddec->config->sampleFormat = SIDEMU_SIGNED_PCM;
+      break;
+    case GST_AUDIO_FORMAT_U8:
+      siddec->config->bitsPerSample = 8;
+      siddec->config->sampleFormat = SIDEMU_UNSIGNED_PCM;
+      break;
+    case GST_AUDIO_FORMAT_S16:
+      siddec->config->bitsPerSample = 16;
+      siddec->config->sampleFormat = SIDEMU_SIGNED_PCM;
+      break;
+    case GST_AUDIO_FORMAT_U16:
+      siddec->config->bitsPerSample = 16;
+      siddec->config->sampleFormat = SIDEMU_UNSIGNED_PCM;
+      break;
+    default:
+      goto invalid_format;
+  }
+
+  gst_structure_get_int (structure, "rate", &rate);
+  siddec->config->frequency = rate;
+  gst_structure_get_int (structure, "channels", &channels);
+  siddec->config->channels = channels;
+
+  stream_id =
+      gst_pad_create_stream_id (siddec->srcpad, GST_ELEMENT_CAST (siddec),
+      NULL);
+
+  event = gst_pad_get_sticky_event (siddec->sinkpad, GST_EVENT_STREAM_START, 0);
+  if (event) {
+    if (gst_event_parse_group_id (event, &siddec->group_id))
+      siddec->have_group_id = TRUE;
+    else
+      siddec->have_group_id = FALSE;
+    gst_event_unref (event);
+  } else if (!siddec->have_group_id) {
+    siddec->have_group_id = TRUE;
+    siddec->group_id = gst_util_group_id_next ();
+  }
+
+  event = gst_event_new_stream_start (stream_id);
+  if (siddec->have_group_id)
+    gst_event_set_group_id (event, siddec->group_id);
+
+  gst_pad_push_event (siddec->srcpad, event);
+  g_free (stream_id);
+
+  caps = gst_caps_new_simple ("audio/x-raw",
+      "format", G_TYPE_STRING, gst_audio_format_to_string (format),
+      "layout", G_TYPE_STRING, "interleaved",
+      "rate", G_TYPE_INT, siddec->config->frequency,
+      "channels", G_TYPE_INT, siddec->config->channels, NULL);
+  gst_pad_set_caps (siddec->srcpad, caps);
+  gst_caps_unref (caps);
+
+  gst_caps_unref (allowed);
+
+  siddec->engine->setConfig (*siddec->config);
+
+  return TRUE;
+
+  /* ERRORS */
+nothing_allowed:
+  {
+    GST_DEBUG_OBJECT (siddec, "could not get allowed caps");
+    return FALSE;
+  }
+invalid_format:
+  {
+    GST_DEBUG_OBJECT (siddec, "invalid audio caps");
+    gst_caps_unref (allowed);
+    return FALSE;
+  }
+}
+
+static void
+play_loop (GstPad * pad)
+{
+  GstFlowReturn ret;
+  GstSidDec *siddec;
+  GstBuffer *out;
+  GstMapInfo outmap;
+  gint64 value, offset, time = 0;
+  GstFormat format;
+
+  siddec = GST_SIDDEC (gst_pad_get_parent (pad));
+
+  out = gst_buffer_new_and_alloc (siddec->blocksize);
+
+  gst_buffer_map (out, &outmap, GST_MAP_WRITE);
+  sidEmuFillBuffer (*siddec->engine, *siddec->tune,
+      outmap.data, siddec->blocksize);
+  gst_buffer_unmap (out, &outmap);
+
+  /* get offset in samples */
+  format = GST_FORMAT_DEFAULT;
+  if (gst_siddec_src_convert (siddec->srcpad,
+          GST_FORMAT_BYTES, siddec->total_bytes, &format, &offset))
+    GST_BUFFER_OFFSET (out) = offset;
+
+  /* get current timestamp */
+  format = GST_FORMAT_TIME;
+  if (gst_siddec_src_convert (siddec->srcpad,
+          GST_FORMAT_BYTES, siddec->total_bytes, &format, &time))
+    GST_BUFFER_TIMESTAMP (out) = time;
+
+  /* update position and get new timestamp to calculate duration */
+  siddec->total_bytes += siddec->blocksize;
+
+  /* get offset in samples */
+  format = GST_FORMAT_DEFAULT;
+  if (gst_siddec_src_convert (siddec->srcpad,
+          GST_FORMAT_BYTES, siddec->total_bytes, &format, &value))
+    GST_BUFFER_OFFSET_END (out) = value;
+
+  format = GST_FORMAT_TIME;
+  if (gst_siddec_src_convert (siddec->srcpad,
+          GST_FORMAT_BYTES, siddec->total_bytes, &format, &value))
+    GST_BUFFER_DURATION (out) = value - time;
+
+  if ((ret = gst_pad_push (siddec->srcpad, out)) != GST_FLOW_OK)
+    goto pause;
+
+done:
+  gst_object_unref (siddec);
+
+  return;
+
+  /* ERRORS */
+pause:
+  {
+    if (ret == GST_FLOW_EOS) {
+      /* perform EOS logic, FIXME, segment seek? */
+      gst_pad_push_event (pad, gst_event_new_eos ());
+    } else if (ret < GST_FLOW_EOS || ret == GST_FLOW_NOT_LINKED) {
+      /* for fatal errors we post an error message */
+      GST_ELEMENT_FLOW_ERROR (siddec, ret);
+      gst_pad_push_event (pad, gst_event_new_eos ());
+    }
+
+    GST_INFO_OBJECT (siddec, "pausing task, reason: %s",
+        gst_flow_get_name (ret));
+    gst_pad_pause_task (pad);
+    goto done;
+  }
+}
+
+static gboolean
+start_play_tune (GstSidDec * siddec)
+{
+  gboolean res;
+  GstSegment segment;
+
+  if (!siddec->tune->load (siddec->tune_buffer, siddec->tune_len))
+    goto could_not_load;
+
+  update_tags (siddec);
+
+  if (!siddec_negotiate (siddec))
+    goto could_not_negotiate;
+
+  if (!sidEmuInitializeSong (*siddec->engine, *siddec->tune,
+          siddec->tune_number))
+    goto could_not_init;
+
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+  gst_pad_push_event (siddec->srcpad, gst_event_new_segment (&segment));
+  siddec->total_bytes = 0;
+  siddec->have_group_id = FALSE;
+  siddec->group_id = G_MAXUINT;
+
+  res = gst_pad_start_task (siddec->srcpad,
+      (GstTaskFunction) play_loop, siddec->srcpad, NULL);
+  return res;
+
+  /* ERRORS */
+could_not_load:
+  {
+    GST_ELEMENT_ERROR (siddec, LIBRARY, INIT,
+        ("Could not load tune"), ("Could not load tune"));
+    return FALSE;
+  }
+could_not_negotiate:
+  {
+    GST_ELEMENT_ERROR (siddec, CORE, NEGOTIATION,
+        ("Could not negotiate format"), ("Could not negotiate format"));
+    return FALSE;
+  }
+could_not_init:
+  {
+    GST_ELEMENT_ERROR (siddec, LIBRARY, INIT,
+        ("Could not initialize song"), ("Could not initialize song"));
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_siddec_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  GstSidDec *siddec;
+  gboolean res;
+
+  siddec = GST_SIDDEC (parent);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_EOS:
+      res = start_play_tune (siddec);
+      break;
+    case GST_EVENT_SEGMENT:
+      res = TRUE;
+      break;
+    default:
+      res = TRUE;
+      break;
+  }
+  gst_event_unref (event);
+
+  return res;
+}
+
+static GstFlowReturn
+gst_siddec_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
+{
+  GstSidDec *siddec;
+  guint64 size;
+
+  siddec = GST_SIDDEC (parent);
+
+  size = gst_buffer_get_size (buffer);
+  if (siddec->tune_len + size > maxSidtuneFileLen)
+    goto overflow;
+
+  gst_buffer_extract (buffer, 0, siddec->tune_buffer + siddec->tune_len, size);
+
+  siddec->tune_len += size;
+
+  gst_buffer_unref (buffer);
+
+  return GST_FLOW_OK;
+
+  /* ERRORS */
+overflow:
+  {
+    GST_ELEMENT_ERROR (siddec, STREAM, DECODE,
+        (NULL), ("Input data bigger than allowed buffer size"));
+    return GST_FLOW_ERROR;
+  }
+}
+
+static gboolean
+gst_siddec_src_convert (GstPad * pad, GstFormat src_format, gint64 src_value,
+    GstFormat * dest_format, gint64 * dest_value)
+{
+  gboolean res = TRUE;
+  guint scale = 1;
+  GstSidDec *siddec;
+  gint bytes_per_sample;
+
+  siddec = GST_SIDDEC (gst_pad_get_parent (pad));
+
+  if (src_format == *dest_format) {
+    *dest_value = src_value;
+    return TRUE;
+  }
+
+  bytes_per_sample =
+      (siddec->config->bitsPerSample >> 3) * siddec->config->channels;
+
+  switch (src_format) {
+    case GST_FORMAT_BYTES:
+      switch (*dest_format) {
+        case GST_FORMAT_DEFAULT:
+          if (bytes_per_sample == 0)
+            return FALSE;
+          *dest_value = src_value / bytes_per_sample;
+          break;
+        case GST_FORMAT_TIME:
+        {
+          gint byterate = bytes_per_sample * siddec->config->frequency;
+
+          if (byterate == 0)
+            return FALSE;
+          *dest_value =
+              gst_util_uint64_scale_int (src_value, GST_SECOND, byterate);
+          break;
+        }
+        default:
+          res = FALSE;
+      }
+      break;
+    case GST_FORMAT_DEFAULT:
+      switch (*dest_format) {
+        case GST_FORMAT_BYTES:
+          *dest_value = src_value * bytes_per_sample;
+          break;
+        case GST_FORMAT_TIME:
+          if (siddec->config->frequency == 0)
+            return FALSE;
+          *dest_value =
+              gst_util_uint64_scale_int (src_value, GST_SECOND,
+              siddec->config->frequency);
+          break;
+        default:
+          res = FALSE;
+      }
+      break;
+    case GST_FORMAT_TIME:
+      switch (*dest_format) {
+        case GST_FORMAT_BYTES:
+          scale = bytes_per_sample;
+          /* fallthrough */
+        case GST_FORMAT_DEFAULT:
+          *dest_value =
+              gst_util_uint64_scale_int (src_value,
+              scale * siddec->config->frequency, GST_SECOND);
+          break;
+        default:
+          res = FALSE;
+      }
+      break;
+    default:
+      res = FALSE;
+  }
+
+  return res;
+}
+
+static gboolean
+gst_siddec_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  gboolean res = FALSE;
+
+  switch (GST_EVENT_TYPE (event)) {
+    default:
+      break;
+  }
+  gst_event_unref (event);
+
+  return res;
+}
+
+static gboolean
+gst_siddec_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
+{
+  gboolean res = TRUE;
+  GstSidDec *siddec;
+
+  siddec = GST_SIDDEC (parent);
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_POSITION:
+    {
+      GstFormat format;
+      gint64 current;
+
+      gst_query_parse_position (query, &format, NULL);
+
+      /* we only know about our bytes, convert to requested format */
+      res &= gst_siddec_src_convert (pad,
+          GST_FORMAT_BYTES, siddec->total_bytes, &format, &current);
+      if (res) {
+        gst_query_set_position (query, format, current);
+      }
+      break;
+    }
+    default:
+      res = gst_pad_query_default (pad, parent, query);
+      break;
+  }
+
+  return res;
+}
+
+static void
+gst_siddec_set_property (GObject * object, guint prop_id, const GValue * value,
+    GParamSpec * pspec)
+{
+  GstSidDec *siddec = GST_SIDDEC (object);
+
+  switch (prop_id) {
+    case PROP_TUNE:
+      siddec->tune_number = g_value_get_int (value);
+      break;
+    case PROP_CLOCK:
+      siddec->config->clockSpeed = g_value_get_enum (value);
+      break;
+    case PROP_MEMORY:
+      siddec->config->memoryMode = g_value_get_enum (value);
+      break;
+    case PROP_FILTER:
+      siddec->config->emulateFilter = g_value_get_boolean (value);
+      break;
+    case PROP_MEASURED_VOLUME:
+      siddec->config->measuredVolume = g_value_get_boolean (value);
+      break;
+    case PROP_MOS8580:
+      siddec->config->mos8580 = g_value_get_boolean (value);
+      break;
+    case PROP_BLOCKSIZE:
+      siddec->blocksize = g_value_get_uint (value);
+      break;
+    case PROP_FORCE_SPEED:
+      siddec->config->forceSongSpeed = g_value_get_boolean (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      return;
+  }
+  siddec->engine->setConfig (*siddec->config);
+}
+
+static void
+gst_siddec_get_property (GObject * object, guint prop_id, GValue * value,
+    GParamSpec * pspec)
+{
+  GstSidDec *siddec = GST_SIDDEC (object);
+
+  switch (prop_id) {
+    case PROP_TUNE:
+      g_value_set_int (value, siddec->tune_number);
+      break;
+    case PROP_CLOCK:
+      g_value_set_enum (value, siddec->config->clockSpeed);
+      break;
+    case PROP_MEMORY:
+      g_value_set_enum (value, siddec->config->memoryMode);
+      break;
+    case PROP_FILTER:
+      g_value_set_boolean (value, siddec->config->emulateFilter);
+      break;
+    case PROP_MEASURED_VOLUME:
+      g_value_set_boolean (value, siddec->config->measuredVolume);
+      break;
+    case PROP_MOS8580:
+      g_value_set_boolean (value, siddec->config->mos8580);
+      break;
+    case PROP_FORCE_SPEED:
+      g_value_set_boolean (value, siddec->config->forceSongSpeed);
+      break;
+    case PROP_BLOCKSIZE:
+      g_value_set_uint (value, siddec->blocksize);
+      break;
+    case PROP_METADATA:
+      g_value_set_boxed (value, NULL);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  return GST_ELEMENT_REGISTER (siddec, plugin);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    sid,
+    "Uses libsidplay to decode .sid files",
+    plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
diff --git a/subprojects/gst-plugins-ugly/ext/sidplay/gstsiddec.h b/subprojects/gst-plugins-ugly/ext/sidplay/gstsiddec.h
new file mode 100644 (file)
index 0000000..15fa88e
--- /dev/null
@@ -0,0 +1,76 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * 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_SIDDEC_H__
+#define __GST_SIDDEC_H__
+
+#include <stdlib.h>
+#include <sidplay/player.h>
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_SIDDEC \
+  (gst_siddec_get_type())
+#define GST_SIDDEC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SIDDEC,GstSidDec))
+#define GST_SIDDEC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SIDDEC,GstSidDecClass))
+#define GST_IS_SIDDEC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SIDDEC))
+#define GST_IS_SIDDEC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SIDDEC))
+
+typedef struct _GstSidDec GstSidDec;
+typedef struct _GstSidDecClass GstSidDecClass;
+
+struct _GstSidDec {
+  GstElement     element;
+
+  /* pads */
+  GstPad        *sinkpad, 
+                *srcpad;
+
+  gboolean       have_group_id;
+  guint          group_id;
+
+  guchar        *tune_buffer;
+  gint           tune_len;
+  gint           tune_number;
+  guint64        total_bytes;
+
+  emuEngine     *engine;
+  sidTune       *tune;
+  emuConfig     *config;
+
+  guint         blocksize;
+};
+
+struct _GstSidDecClass {
+  GstElementClass parent_class;
+};
+
+GType gst_siddec_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (siddec);
+
+G_END_DECLS
+
+#endif /* __GST_SIDDEC_H__ */
diff --git a/subprojects/gst-plugins-ugly/ext/sidplay/meson.build b/subprojects/gst-plugins-ugly/ext/sidplay/meson.build
new file mode 100644 (file)
index 0000000..6310652
--- /dev/null
@@ -0,0 +1,38 @@
+sidplay_option = get_option('sidplay')
+if sidplay_option.disabled()
+  subdir_done()
+endif
+
+if not add_languages('cpp', native: false, required: sidplay_option)
+  subdir_done()
+endif
+
+if not cxx.has_header('sidplay/player.h', required: sidplay_option)
+  subdir_done()
+endif
+
+sidplay_dep = cxx.find_library('sidplay', required: sidplay_option)
+if not sidplay_dep.found()
+  subdir_done()
+endif
+
+# sidplay plugin works with libsidplay 1.36.x (not 2.x.x)
+sid_code = '''#include <sidplay/player.h>
+              void somefunc (void) {
+                sidTune tune = sidTune(0);
+              }'''
+if not cxx.compiles(sid_code, dependencies: sidplay_dep, name : 'sidplay usage')
+  if sidplay_option.enabled()
+    error('sidplay headers and libraries were found, but were not usable')
+  endif
+  subdir_done()
+endif
+
+gstsid = library('gstsid', 'gstsiddec.cc',
+  cpp_args : ugly_args,
+  include_directories : [configinc],
+  dependencies : [gstaudio_dep, sidplay_dep],
+  install : true,
+  install_dir : plugins_install_dir)
+pkgconfig.generate(gstsid, install_dir : plugins_pkgconfig_install_dir)
+plugins += [gstsid]
diff --git a/subprojects/gst-plugins-ugly/ext/x264/GstX264Enc.prs b/subprojects/gst-plugins-ugly/ext/x264/GstX264Enc.prs
new file mode 100644 (file)
index 0000000..4ad3c82
--- /dev/null
@@ -0,0 +1,54 @@
+[_presets_]
+version=0.10
+element-name=GstX264Enc
+
+[Profile Baseline]
+_meta/comment=Baseline Profile
+bframes=0
+cabac=false
+dct8x8=false
+
+[Profile Main]
+_meta/comment=Main Profile
+cabac=true
+dct8x8=false
+
+[Profile High]
+_meta/comment=High Profile
+cabac=true
+dct8x8=true
+
+[Quality Low]
+_meta/comment=Low quality
+pass=qual
+quantizer=27
+subme=4
+threads=0
+
+[Quality Normal]
+_meta/comment=Normal quality
+pass=qual
+quantizer=21
+me=umh
+subme=6
+ref=3
+threads=0
+
+[Quality High]
+_meta/comment=High quality
+pass=qual
+quantizer=18
+me=umh
+subme=6
+ref=3
+threads=0
+
+[Profile YouTube]
+_meta/comment=YouTube recommended settings (https://support.google.com/youtube/answer/1722171)
+pass=qual
+cabac=true
+dct8x8=true
+bframes=2
+
+[Zero Latency]
+tune=zerolatency
diff --git a/subprojects/gst-plugins-ugly/ext/x264/gstencoderbitrateprofilemanager.c b/subprojects/gst-plugins-ugly/ext/x264/gstencoderbitrateprofilemanager.c
new file mode 100644 (file)
index 0000000..ed2371e
--- /dev/null
@@ -0,0 +1,224 @@
+/* GStreamer
+ * Copyright (C) 2019 Thibault Saunier <tsaunier@igalia.com>
+ *
+ * gstencoderbitrateprofilemanager.c
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstencoderbitrateprofilemanager.h"
+
+GST_DEBUG_CATEGORY_STATIC (encoderbitratemanager_debug);
+#define GST_CAT_DEFAULT encoderbitratemanager_debug
+
+typedef struct
+{
+  gchar *name;
+  gsize n_vals;
+  GstEncoderBitrateTargetForPixelsMap *map;
+} GstEncoderBitrateProfile;
+
+struct _GstEncoderBitrateProfileManager
+{
+  GList *profiles;
+  gchar *preset;
+  guint bitrate;
+
+  gboolean setting_preset;
+  gboolean user_bitrate;
+};
+
+/* *INDENT-OFF* */
+/* Copied from https://support.google.com/youtube/answer/1722171?hl=en */
+static const GstEncoderBitrateTargetForPixelsMap youtube_bitrate_profiles[] = {
+  {
+        .n_pixels = 3840 * 2160,
+        .low_framerate_bitrate = 40000,
+        .high_framerate_bitrate = 60000,
+  },
+  {
+        .n_pixels = 2560 * 1440,
+        .low_framerate_bitrate = 16000,
+        .high_framerate_bitrate = 24000,
+  },
+  {
+        .n_pixels = 1920 * 1080,
+        .low_framerate_bitrate = 8000,
+        .high_framerate_bitrate = 12000,
+  },
+  {
+        .n_pixels = 1080 * 720,
+        .low_framerate_bitrate = 5000,
+        .high_framerate_bitrate = 7500,
+      },
+  {
+        .n_pixels = 640 * 480,
+        .low_framerate_bitrate = 2500,
+        .high_framerate_bitrate = 4000,
+  },
+  {
+        .n_pixels = 0,
+        .low_framerate_bitrate = 2500,
+        .high_framerate_bitrate = 4000,
+  },
+  {
+        .n_pixels = 0,
+        .low_framerate_bitrate = 0,
+        .high_framerate_bitrate = 0,
+  },
+};
+/* *INDENT-ON* */
+
+static void
+gst_encoder_bitrate_profile_free (GstEncoderBitrateProfile * profile)
+{
+  g_free (profile->name);
+  g_free (profile->map);
+  g_free (profile);
+}
+
+void
+gst_encoder_bitrate_profile_manager_add_profile (GstEncoderBitrateProfileManager
+    * self, const gchar * profile_name,
+    const GstEncoderBitrateTargetForPixelsMap * map)
+{
+  guint n_vals;
+  GstEncoderBitrateProfile *profile;
+
+  for (n_vals = 0;
+      map[n_vals].low_framerate_bitrate != 0
+      && map[n_vals].high_framerate_bitrate != 0; n_vals++);
+  n_vals++;
+
+  profile = g_new0 (GstEncoderBitrateProfile, 1);
+  profile->name = g_strdup (profile_name);
+  profile->n_vals = n_vals;
+  profile->map
+      = g_memdup2 (map, sizeof (GstEncoderBitrateTargetForPixelsMap) * n_vals);
+  self->profiles = g_list_prepend (self->profiles, profile);
+}
+
+guint
+gst_encoder_bitrate_profile_manager_get_bitrate (GstEncoderBitrateProfileManager
+    * self, GstVideoInfo * info)
+{
+  gint i;
+  gboolean high_fps;
+  guint num_pix;
+  GList *tmp;
+
+  GstEncoderBitrateProfile *profile = NULL;
+
+  g_return_val_if_fail (self != NULL, -1);
+
+  if (!info || info->finfo == NULL
+      || info->finfo->format == GST_VIDEO_FORMAT_UNKNOWN) {
+    GST_INFO ("Video info %p not usable, returning current bitrate", info);
+    return self->bitrate;
+  }
+
+  if (!self->preset) {
+    GST_INFO ("No preset used, returning current bitrate");
+    return self->bitrate;
+
+  }
+
+  for (tmp = self->profiles; tmp; tmp = tmp->next) {
+    GstEncoderBitrateProfile *tmpprof = tmp->data;
+    if (!g_strcmp0 (tmpprof->name, self->preset)) {
+      profile = tmpprof;
+      break;
+    }
+  }
+
+  if (!profile) {
+    GST_INFO ("Could not find map for profile: %s", self->preset);
+
+    return self->bitrate;
+  }
+
+  high_fps = GST_VIDEO_INFO_FPS_N (info) / GST_VIDEO_INFO_FPS_D (info) > 30.0;
+  num_pix = GST_VIDEO_INFO_WIDTH (info) * GST_VIDEO_INFO_HEIGHT (info);
+  for (i = 0; i < profile->n_vals; i++) {
+    GstEncoderBitrateTargetForPixelsMap *bitrate_values = &profile->map[i];
+
+    if (num_pix < bitrate_values->n_pixels)
+      continue;
+
+    self->bitrate =
+        high_fps ? bitrate_values->
+        high_framerate_bitrate : bitrate_values->low_framerate_bitrate;
+    GST_INFO ("Using %s bitrate! %d", self->preset, self->bitrate);
+    return self->bitrate;
+  }
+
+  return -1;
+}
+
+void gst_encoder_bitrate_profile_manager_start_loading_preset
+    (GstEncoderBitrateProfileManager * self)
+{
+  self->setting_preset = TRUE;
+}
+
+void gst_encoder_bitrate_profile_manager_end_loading_preset
+    (GstEncoderBitrateProfileManager * self, const gchar * preset)
+{
+  self->setting_preset = FALSE;
+  g_free (self->preset);
+  self->preset = g_strdup (preset);
+}
+
+void
+gst_encoder_bitrate_profile_manager_set_bitrate (GstEncoderBitrateProfileManager
+    * self, guint bitrate)
+{
+  self->bitrate = bitrate;
+  self->user_bitrate = !self->setting_preset;
+}
+
+void
+gst_encoder_bitrate_profile_manager_free (GstEncoderBitrateProfileManager *
+    self)
+{
+  g_free (self->preset);
+  g_list_free_full (self->profiles,
+      (GDestroyNotify) gst_encoder_bitrate_profile_free);
+  g_free (self);
+}
+
+GstEncoderBitrateProfileManager *
+gst_encoder_bitrate_profile_manager_new (guint default_bitrate)
+{
+  GstEncoderBitrateProfileManager *self =
+      g_new0 (GstEncoderBitrateProfileManager, 1);
+  static gsize _init = 0;
+
+  if (g_once_init_enter (&_init)) {
+    GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "encoderbitratemanager", 0,
+        "Encoder bitrate manager");
+    g_once_init_leave (&_init, 1);
+  }
+
+  self->bitrate = default_bitrate;
+  gst_encoder_bitrate_profile_manager_add_profile (self,
+      "Profile YouTube", youtube_bitrate_profiles);
+
+  return self;
+}
diff --git a/subprojects/gst-plugins-ugly/ext/x264/gstencoderbitrateprofilemanager.h b/subprojects/gst-plugins-ugly/ext/x264/gstencoderbitrateprofilemanager.h
new file mode 100644 (file)
index 0000000..d6db733
--- /dev/null
@@ -0,0 +1,46 @@
+/* GStreamer
+ * Copyright (C) 2019 Thibault Saunier <tsaunier@igalia.com>
+ *
+ * gstencoderbitrateprofilemanager.h
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#pragma once
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+
+typedef struct _GstEncoderBitrateProfileManager GstEncoderBitrateProfileManager;
+
+typedef struct _GstEncoderBitrateTargetForPixelsMap
+{
+  guint n_pixels;
+  guint low_framerate_bitrate;
+  guint high_framerate_bitrate;
+
+  gpointer _gst_reserved[GST_PADDING_LARGE];
+} GstEncoderBitrateTargetForPixelsMap;
+
+void
+gst_encoder_bitrate_profile_manager_add_profile(GstEncoderBitrateProfileManager* self,
+    const gchar* profile_name, const GstEncoderBitrateTargetForPixelsMap* map);
+guint gst_encoder_bitrate_profile_manager_get_bitrate(GstEncoderBitrateProfileManager* self, GstVideoInfo* info);
+void gst_encoder_bitrate_profile_manager_start_loading_preset (GstEncoderBitrateProfileManager* self);
+void gst_encoder_bitrate_profile_manager_end_loading_preset(GstEncoderBitrateProfileManager* self, const gchar* preset);
+void gst_encoder_bitrate_profile_manager_set_bitrate(GstEncoderBitrateProfileManager* self, guint bitrate);
+GstEncoderBitrateProfileManager* gst_encoder_bitrate_profile_manager_new(guint default_bitrate);
+void gst_encoder_bitrate_profile_manager_free(GstEncoderBitrateProfileManager* self);
\ No newline at end of file
diff --git a/subprojects/gst-plugins-ugly/ext/x264/gstx264enc.c b/subprojects/gst-plugins-ugly/ext/x264/gstx264enc.c
new file mode 100644 (file)
index 0000000..2604506
--- /dev/null
@@ -0,0 +1,3057 @@
+/* GStreamer H264 encoder plugin
+ * Copyright (C) 2005 Michal Benes <michal.benes@itonis.tv>
+ * Copyright (C) 2005 Josef Zlomek <josef.zlomek@itonis.tv>
+ * Copyright (C) 2008 Mark Nauwelaerts <mnauw@users.sf.net>
+ * Copyright (C) 2016 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-x264enc
+ * @title: x264enc
+ * @see_also: faac
+ *
+ * This element encodes raw video into H264 compressed data,
+ * also otherwise known as MPEG-4 AVC (Advanced Video Codec).
+ *
+ * The #GstX264Enc:pass property controls the type of encoding.  In case of Constant
+ * Bitrate Encoding (actually ABR), the #GstX264Enc:bitrate will determine the quality
+ * of the encoding.  This will similarly be the case if this target bitrate
+ * is to obtained in multiple (2 or 3) pass encoding.
+ * Alternatively, one may choose to perform Constant Quantizer or Quality encoding,
+ * in which case the #GstX264Enc:quantizer property controls much of the outcome, in that case #GstX264Enc:bitrate is the maximum bitrate.
+ *
+ * The H264 profile that is eventually used depends on a few settings.
+ * If #GstX264Enc:dct8x8 is enabled, then High profile is used.
+ * Otherwise, if #GstX264Enc:cabac entropy coding is enabled or #GstX264Enc:bframes
+ * are allowed, then Main Profile is in effect, and otherwise Baseline profile
+ * applies.  The high profile is imposed by default,
+ * which is fine for most software players and settings,
+ * but in some cases (e.g. hardware platforms) a more restricted profile/level
+ * may be necessary. The recommended way to set a profile is to set it in the
+ * downstream caps.
+ *
+ * If a preset/tuning are specified then these will define the default values and
+ * the property defaults will be ignored. After this the option-string property is
+ * applied, followed by the user-set properties, fast first pass restrictions and
+ * finally the profile restrictions.
+ *
+ * > Some settings, including the default settings, may lead to quite
+ * > some latency (i.e. frame buffering) in the encoder. This may cause problems
+ * > with pipeline stalling in non-trivial pipelines, because the encoder latency
+ * > is often considerably higher than the default size of a simple queue
+ * > element. Such problems are caused by one of the queues in the other
+ * > non-x264enc streams/branches filling up and blocking upstream. They can
+ * > be fixed by relaxing the default time/size/buffer limits on the queue
+ * > elements in the non-x264 branches, or using a (single) multiqueue element
+ * > for all branches. Also see the last example below. You can also work around
+ * > this problem by setting the tune=zerolatency property, but this will affect
+ * > overall encoding quality so may not be appropriate for your use case.
+ *
+ * ## Example pipeline
+ * |[
+ * gst-launch-1.0 -v videotestsrc num-buffers=1000 ! x264enc qp-min=18 ! \
+ *   avimux ! filesink location=videotestsrc.avi
+ * ]| This example pipeline will encode a test video source to H264 muxed in an
+ * AVI container, while ensuring a sane minimum quantization factor to avoid
+ * some (excessive) waste. You should ideally never put H264 into an AVI
+ * container (or really anything else, for that matter) - use Matroska or
+ * MP4/QuickTime or MPEG-TS instead.
+ * |[
+ * gst-launch-1.0 -v videotestsrc num-buffers=1000 ! x264enc pass=quant ! \
+ *   matroskamux ! filesink location=videotestsrc.mkv
+ * ]| This example pipeline will encode a test video source to H264 using fixed
+ * quantization, and muxes it in a Matroska container.
+ * |[
+ * gst-launch-1.0 -v videotestsrc num-buffers=1000 ! x264enc pass=5 quantizer=25 speed-preset=6 ! video/x-h264, profile=baseline ! \
+ *   qtmux ! filesink location=videotestsrc.mov
+ * ]| This example pipeline will encode a test video source to H264 using
+ * constant quality at around Q25 using the 'medium' speed/quality preset and
+ * restricting the options used so that the output is H.264 Baseline Profile
+ * compliant and finally multiplexing the output in Quicktime mov format.
+ * |[
+ * gst-launch-1.0 -v videotestsrc num-buffers=1000 ! tee name=t ! queue ! videoconvert ! autovideosink \
+ *   t. ! queue ! x264enc rc-lookahead=5 ! fakesink
+ * ]| This example pipeline will encode a test video source to H264 while
+ * displaying the input material at the same time.  As mentioned above,
+ * specific settings are needed in this case to avoid pipeline stalling.
+ * Depending on goals and context, other approaches are possible, e.g.
+ * tune=zerolatency might be configured, or queue sizes increased.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "gstx264enc.h"
+
+#include <gst/pbutils/pbutils.h>
+#include <gst/video/video.h>
+#include <gst/video/gstvideometa.h>
+#include <gst/video/gstvideopool.h>
+
+#include <string.h>
+#include <stdlib.h>
+#include <gmodule.h>
+
+GST_DEBUG_CATEGORY_STATIC (x264_enc_debug);
+#define GST_CAT_DEFAULT x264_enc_debug
+
+struct _GstX264EncVTable
+{
+  GModule *module;
+
+#if X264_BUILD < 153
+  const int *x264_bit_depth;
+#endif
+  const int *x264_chroma_format;
+  void (*x264_encoder_close) (x264_t *);
+  int (*x264_encoder_delayed_frames) (x264_t *);
+  int (*x264_encoder_encode) (x264_t *, x264_nal_t ** pp_nal, int *pi_nal,
+      x264_picture_t * pic_in, x264_picture_t * pic_out);
+  int (*x264_encoder_headers) (x264_t *, x264_nal_t ** pp_nal, int *pi_nal);
+  void (*x264_encoder_intra_refresh) (x264_t *);
+  int (*x264_encoder_maximum_delayed_frames) (x264_t *);
+  x264_t *(*x264_encoder_open) (x264_param_t *);
+  int (*x264_encoder_reconfig) (x264_t *, x264_param_t *);
+  const x264_level_t (*x264_levels)[];
+  void (*x264_param_apply_fastfirstpass) (x264_param_t *);
+  int (*x264_param_apply_profile) (x264_param_t *, const char *);
+  int (*x264_param_default_preset) (x264_param_t *, const char *preset,
+      const char *tune);
+  int (*x264_param_parse) (x264_param_t *, const char *name, const char *value);
+};
+
+static GstX264EncVTable default_vtable;
+
+static GstX264EncVTable *vtable_8bit = NULL, *vtable_10bit = NULL;
+
+#if X264_BUILD < 153
+#define LOAD_SYMBOL(name) G_STMT_START { \
+  if (!g_module_symbol (module, #name, (gpointer *) &vtable->name)) { \
+    GST_ERROR ("Failed to load '" #name "' from '%s'", filename); \
+    goto error; \
+  } \
+} G_STMT_END;
+
+#ifdef HAVE_X264_ADDITIONAL_LIBRARIES
+static GstX264EncVTable *
+load_x264 (const gchar * filename)
+{
+  GModule *module;
+  GstX264EncVTable *vtable;
+
+  module = g_module_open (filename, G_MODULE_BIND_LOCAL);
+  if (!module) {
+    GST_ERROR ("Failed to load '%s'", filename);
+    return NULL;
+  }
+
+  vtable = g_new0 (GstX264EncVTable, 1);
+  vtable->module = module;
+
+  if (!g_module_symbol (module, G_STRINGIFY (x264_encoder_open),
+          (gpointer *) & vtable->x264_encoder_open)) {
+    GST_ERROR ("Failed to load '" G_STRINGIFY (x264_encoder_open)
+        "' from '%s'. Incompatible version?", filename);
+    goto error;
+  }
+  LOAD_SYMBOL (x264_bit_depth);
+  LOAD_SYMBOL (x264_chroma_format);
+  LOAD_SYMBOL (x264_encoder_close);
+  LOAD_SYMBOL (x264_encoder_delayed_frames);
+  LOAD_SYMBOL (x264_encoder_encode);
+  LOAD_SYMBOL (x264_encoder_headers);
+  LOAD_SYMBOL (x264_encoder_intra_refresh);
+  LOAD_SYMBOL (x264_encoder_maximum_delayed_frames);
+  LOAD_SYMBOL (x264_encoder_reconfig);
+  LOAD_SYMBOL (x264_levels);
+  LOAD_SYMBOL (x264_param_apply_fastfirstpass);
+  LOAD_SYMBOL (x264_param_apply_profile);
+  LOAD_SYMBOL (x264_param_default_preset);
+  LOAD_SYMBOL (x264_param_parse);
+
+  return vtable;
+
+error:
+  g_module_close (vtable->module);
+  g_free (vtable);
+  return NULL;
+}
+
+static void
+unload_x264 (GstX264EncVTable * vtable)
+{
+  if (vtable->module) {
+    g_module_close (vtable->module);
+    g_free (vtable);
+  }
+}
+#endif
+
+#undef LOAD_SYMBOL
+#endif
+
+static gboolean
+gst_x264_enc_add_x264_chroma_format (GstStructure * s,
+    gboolean allow_420_8, gboolean allow_420_10, gboolean allow_422,
+    gboolean allow_444)
+{
+  GValue fmts = G_VALUE_INIT;
+  GValue fmt = G_VALUE_INIT;
+  gboolean ret = FALSE;
+
+  g_value_init (&fmts, GST_TYPE_LIST);
+  g_value_init (&fmt, G_TYPE_STRING);
+
+  if (vtable_8bit) {
+    gint chroma_format = *vtable_8bit->x264_chroma_format;
+
+    if ((chroma_format == 0 || chroma_format == X264_CSP_I444) && allow_444) {
+      g_value_set_string (&fmt, "Y444");
+      gst_value_list_append_value (&fmts, &fmt);
+    }
+
+    if ((chroma_format == 0 || chroma_format == X264_CSP_I422) && allow_422) {
+      g_value_set_string (&fmt, "Y42B");
+      gst_value_list_append_value (&fmts, &fmt);
+    }
+
+    if ((chroma_format == 0 || chroma_format == X264_CSP_I420) && allow_420_8) {
+      g_value_set_string (&fmt, "I420");
+      gst_value_list_append_value (&fmts, &fmt);
+      g_value_set_string (&fmt, "YV12");
+      gst_value_list_append_value (&fmts, &fmt);
+      g_value_set_string (&fmt, "NV12");
+      gst_value_list_append_value (&fmts, &fmt);
+    }
+  }
+
+  if (vtable_10bit) {
+    gint chroma_format = *vtable_10bit->x264_chroma_format;
+
+    if ((chroma_format == 0 || chroma_format == X264_CSP_I444) && allow_444) {
+      if (G_BYTE_ORDER == G_LITTLE_ENDIAN)
+        g_value_set_string (&fmt, "Y444_10LE");
+      else
+        g_value_set_string (&fmt, "Y444_10BE");
+
+      gst_value_list_append_value (&fmts, &fmt);
+    }
+
+    if ((chroma_format == 0 || chroma_format == X264_CSP_I422) && allow_422) {
+      if (G_BYTE_ORDER == G_LITTLE_ENDIAN)
+        g_value_set_string (&fmt, "I422_10LE");
+      else
+        g_value_set_string (&fmt, "I422_10BE");
+
+      gst_value_list_append_value (&fmts, &fmt);
+    }
+
+    if ((chroma_format == 0 || chroma_format == X264_CSP_I420) && allow_420_10) {
+      if (G_BYTE_ORDER == G_LITTLE_ENDIAN)
+        g_value_set_string (&fmt, "I420_10LE");
+      else
+        g_value_set_string (&fmt, "I420_10BE");
+
+      gst_value_list_append_value (&fmts, &fmt);
+    }
+  }
+
+  if (gst_value_list_get_size (&fmts) != 0) {
+    gst_structure_take_value (s, "format", &fmts);
+    ret = TRUE;
+  } else {
+    g_value_unset (&fmts);
+  }
+
+  g_value_unset (&fmt);
+
+  return ret;
+}
+
+#if X264_BUILD < 153
+static gboolean
+load_x264_libraries (void)
+{
+  if (*default_vtable.x264_bit_depth == 8) {
+    vtable_8bit = &default_vtable;
+    GST_INFO ("8-bit depth supported");
+  } else if (*default_vtable.x264_bit_depth == 10) {
+    vtable_10bit = &default_vtable;
+    GST_INFO ("10-bit depth supported");
+  }
+#ifdef HAVE_X264_ADDITIONAL_LIBRARIES
+  {
+    gchar **libraries = g_strsplit (HAVE_X264_ADDITIONAL_LIBRARIES, ":", -1);
+    gchar **p = libraries;
+
+    while (*p && (!vtable_8bit || !vtable_10bit)) {
+      GstX264EncVTable *vtable = load_x264 (*p);
+
+      if (vtable) {
+        if (!vtable_8bit && *vtable->x264_bit_depth == 8) {
+          GST_INFO ("8-bit depth support loaded from %s", *p);
+          vtable_8bit = vtable;
+        } else if (!vtable_10bit && *vtable->x264_bit_depth == 10) {
+          GST_INFO ("10-bit depth support loaded from %s", *p);
+          vtable_10bit = vtable;
+        } else {
+          unload_x264 (vtable);
+        }
+      }
+
+      p++;
+    }
+    g_strfreev (libraries);
+  }
+#endif
+
+  if (!vtable_8bit && !vtable_10bit)
+    return FALSE;
+
+  return TRUE;
+}
+
+#else /* X264_BUILD >= 153 */
+
+static gboolean
+load_x264_libraries (void)
+{
+#if X264_BIT_DEPTH == 0         /* all */
+  GST_INFO ("8-bit depth and 10-bit depth supported");
+  vtable_8bit = &default_vtable;
+  vtable_10bit = &default_vtable;
+#elif X264_BIT_DEPTH == 8
+  GST_INFO ("Only 8-bit depth supported");
+  vtable_8bit = &default_vtable;
+#elif X264_BIT_DEPTH == 10
+  GST_INFO ("Only 10-bit depth supported");
+  vtable_10bit = &default_vtable;
+#else
+#error "unexpected X264_BIT_DEPTH value"
+#endif
+
+#ifdef HAVE_X264_ADDITIONAL_LIBRARIES
+  GST_WARNING ("Ignoring configured additional libraries %s, using libx264 "
+      "version enabled for multiple bit depths",
+      HAVE_X264_ADDITIONAL_LIBRARIES);
+#endif
+
+  return TRUE;
+}
+
+#endif
+
+enum
+{
+  ARG_0,
+  ARG_THREADS,
+  ARG_SLICED_THREADS,
+  ARG_SYNC_LOOKAHEAD,
+  ARG_PASS,
+  ARG_QUANTIZER,
+  ARG_MULTIPASS_CACHE_FILE,
+  ARG_BYTE_STREAM,
+  ARG_BITRATE,
+  ARG_INTRA_REFRESH,
+  ARG_VBV_BUF_CAPACITY,
+  ARG_ME,
+  ARG_SUBME,
+  ARG_ANALYSE,
+  ARG_DCT8x8,
+  ARG_REF,
+  ARG_BFRAMES,
+  ARG_B_ADAPT,
+  ARG_B_PYRAMID,
+  ARG_WEIGHTB,
+  ARG_SPS_ID,
+  ARG_AU_NALU,
+  ARG_TRELLIS,
+  ARG_KEYINT_MAX,
+  ARG_CABAC,
+  ARG_QP_MIN,
+  ARG_QP_MAX,
+  ARG_QP_STEP,
+  ARG_IP_FACTOR,
+  ARG_PB_FACTOR,
+  ARG_RC_MB_TREE,
+  ARG_RC_LOOKAHEAD,
+  ARG_NR,
+  ARG_INTERLACED,
+  ARG_OPTION_STRING,
+  ARG_SPEED_PRESET,
+  ARG_PSY_TUNE,
+  ARG_TUNE,
+  ARG_FRAME_PACKING,
+  ARG_INSERT_VUI,
+};
+
+#define ARG_THREADS_DEFAULT            0        /* 0 means 'auto' which is 1.5x number of CPU cores */
+#define ARG_PASS_DEFAULT               0
+#define ARG_QUANTIZER_DEFAULT          21
+#define ARG_MULTIPASS_CACHE_FILE_DEFAULT "x264.log"
+#define ARG_BYTE_STREAM_DEFAULT        FALSE
+#define ARG_BITRATE_DEFAULT            (2 * 1024)
+#define ARG_VBV_BUF_CAPACITY_DEFAULT   600
+#define ARG_ME_DEFAULT                 X264_ME_HEX
+#define ARG_SUBME_DEFAULT              1
+#define ARG_ANALYSE_DEFAULT            0
+#define ARG_DCT8x8_DEFAULT             FALSE
+#define ARG_REF_DEFAULT                3
+#define ARG_BFRAMES_DEFAULT            0
+#define ARG_B_ADAPT_DEFAULT            TRUE
+#define ARG_B_PYRAMID_DEFAULT          FALSE
+#define ARG_WEIGHTB_DEFAULT            FALSE
+#define ARG_SPS_ID_DEFAULT             0
+#define ARG_AU_NALU_DEFAULT            TRUE
+#define ARG_TRELLIS_DEFAULT            TRUE
+#define ARG_KEYINT_MAX_DEFAULT         0
+#define ARG_CABAC_DEFAULT              TRUE
+#define ARG_QP_MIN_DEFAULT             10
+#define ARG_QP_MAX_DEFAULT             51
+#define ARG_QP_STEP_DEFAULT            4
+#define ARG_IP_FACTOR_DEFAULT          1.4
+#define ARG_PB_FACTOR_DEFAULT          1.3
+#define ARG_NR_DEFAULT                 0
+#define ARG_INTERLACED_DEFAULT         FALSE
+#define ARG_SLICED_THREADS_DEFAULT     FALSE
+#define ARG_SYNC_LOOKAHEAD_DEFAULT     -1
+#define ARG_RC_MB_TREE_DEFAULT         TRUE
+#define ARG_RC_LOOKAHEAD_DEFAULT       40
+#define ARG_INTRA_REFRESH_DEFAULT      FALSE
+#define ARG_OPTION_STRING_DEFAULT      ""
+static GString *x264enc_defaults;
+#define ARG_SPEED_PRESET_DEFAULT       6        /* 'medium' preset - matches x264 CLI default */
+#define ARG_PSY_TUNE_DEFAULT           0        /* no psy tuning */
+#define ARG_TUNE_DEFAULT               0        /* no tuning */
+#define ARG_FRAME_PACKING_DEFAULT      -1       /* automatic (none, or from input caps) */
+#define ARG_INSERT_VUI_DEFAULT         TRUE
+
+enum
+{
+  GST_X264_ENC_STREAM_FORMAT_FROM_PROPERTY,
+  GST_X264_ENC_STREAM_FORMAT_AVC,
+  GST_X264_ENC_STREAM_FORMAT_BYTE_STREAM
+};
+
+enum
+{
+  GST_X264_ENC_PASS_CBR = 0,
+  GST_X264_ENC_PASS_QUANT = 0x04,
+  GST_X264_ENC_PASS_QUAL,
+  GST_X264_ENC_PASS_PASS1 = 0x11,
+  GST_X264_ENC_PASS_PASS2,
+  GST_X264_ENC_PASS_PASS3
+};
+
+#define GST_X264_ENC_PASS_TYPE (gst_x264_enc_pass_get_type())
+static GType
+gst_x264_enc_pass_get_type (void)
+{
+  static GType pass_type = 0;
+
+  static const GEnumValue pass_types[] = {
+    {GST_X264_ENC_PASS_CBR, "Constant Bitrate Encoding", "cbr"},
+    {GST_X264_ENC_PASS_QUANT, "Constant Quantizer", "quant"},
+    {GST_X264_ENC_PASS_QUAL, "Constant Quality", "qual"},
+    {GST_X264_ENC_PASS_PASS1, "VBR Encoding - Pass 1", "pass1"},
+    {GST_X264_ENC_PASS_PASS2, "VBR Encoding - Pass 2", "pass2"},
+    {GST_X264_ENC_PASS_PASS3, "VBR Encoding - Pass 3", "pass3"},
+    {0, NULL, NULL}
+  };
+
+  if (!pass_type) {
+    pass_type = g_enum_register_static ("GstX264EncPass", pass_types);
+  }
+  return pass_type;
+}
+
+#define GST_X264_ENC_ME_TYPE (gst_x264_enc_me_get_type())
+static GType
+gst_x264_enc_me_get_type (void)
+{
+  static GType me_type = 0;
+  static GEnumValue *me_types;
+  int n, i;
+
+  if (me_type != 0)
+    return me_type;
+
+  n = 0;
+  while (x264_motion_est_names[n] != NULL)
+    n++;
+
+  me_types = g_new0 (GEnumValue, n + 1);
+
+  for (i = 0; i < n; i++) {
+    me_types[i].value = i;
+    me_types[i].value_name = x264_motion_est_names[i];
+    me_types[i].value_nick = x264_motion_est_names[i];
+  }
+
+  me_type = g_enum_register_static ("GstX264EncMe", me_types);
+
+  return me_type;
+}
+
+#define GST_X264_ENC_ANALYSE_TYPE (gst_x264_enc_analyse_get_type())
+static GType
+gst_x264_enc_analyse_get_type (void)
+{
+  static GType analyse_type = 0;
+  static const GFlagsValue analyse_types[] = {
+    {X264_ANALYSE_I4x4, "i4x4", "i4x4"},
+    {X264_ANALYSE_I8x8, "i8x8", "i8x8"},
+    {X264_ANALYSE_PSUB16x16, "p8x8", "p8x8"},
+    {X264_ANALYSE_PSUB8x8, "p4x4", "p4x4"},
+    {X264_ANALYSE_BSUB16x16, "b8x8", "b8x8"},
+    {0, NULL, NULL},
+  };
+
+  if (!analyse_type) {
+    analyse_type = g_flags_register_static ("GstX264EncAnalyse", analyse_types);
+  }
+  return analyse_type;
+}
+
+#define GST_X264_ENC_SPEED_PRESET_TYPE (gst_x264_enc_speed_preset_get_type())
+static GType
+gst_x264_enc_speed_preset_get_type (void)
+{
+  static GType speed_preset_type = 0;
+  static GEnumValue *speed_preset_types;
+  int n, i;
+
+  if (speed_preset_type != 0)
+    return speed_preset_type;
+
+  n = 0;
+  while (x264_preset_names[n] != NULL)
+    n++;
+
+  speed_preset_types = g_new0 (GEnumValue, n + 2);
+
+  speed_preset_types[0].value = 0;
+  speed_preset_types[0].value_name = "No preset";
+  speed_preset_types[0].value_nick = "None";
+
+  for (i = 1; i <= n; i++) {
+    speed_preset_types[i].value = i;
+    speed_preset_types[i].value_name = x264_preset_names[i - 1];
+    speed_preset_types[i].value_nick = x264_preset_names[i - 1];
+  }
+
+  speed_preset_type =
+      g_enum_register_static ("GstX264EncPreset", speed_preset_types);
+
+  return speed_preset_type;
+}
+
+static const GFlagsValue tune_types[] = {
+  {0x0, "No tuning", "none"},
+  {0x1, "Still image", "stillimage"},
+  {0x2, "Fast decode", "fastdecode"},
+  {0x4, "Zero latency", "zerolatency"},
+  {0, NULL, NULL},
+};
+
+#define GST_X264_ENC_TUNE_TYPE (gst_x264_enc_tune_get_type())
+static GType
+gst_x264_enc_tune_get_type (void)
+{
+  static GType tune_type = 0;
+
+  if (!tune_type) {
+    tune_type = g_flags_register_static ("GstX264EncTune", tune_types + 1);
+  }
+  return tune_type;
+}
+
+enum
+{
+  GST_X264_ENC_TUNE_NONE,
+  GST_X264_ENC_TUNE_FILM,
+  GST_X264_ENC_TUNE_ANIMATION,
+  GST_X264_ENC_TUNE_GRAIN,
+  GST_X264_ENC_TUNE_PSNR,
+  GST_X264_ENC_TUNE_SSIM,
+  GST_X264_ENC_TUNE_LAST
+};
+
+static const GEnumValue psy_tune_types[] = {
+  {GST_X264_ENC_TUNE_NONE, "No tuning", "none"},
+  {GST_X264_ENC_TUNE_FILM, "Film", "film"},
+  {GST_X264_ENC_TUNE_ANIMATION, "Animation", "animation"},
+  {GST_X264_ENC_TUNE_GRAIN, "Grain", "grain"},
+  {GST_X264_ENC_TUNE_PSNR, "PSNR", "psnr"},
+  {GST_X264_ENC_TUNE_SSIM, "SSIM", "ssim"},
+  {0, NULL, NULL},
+};
+
+#define GST_X264_ENC_PSY_TUNE_TYPE (gst_x264_enc_psy_tune_get_type())
+static GType
+gst_x264_enc_psy_tune_get_type (void)
+{
+  static GType psy_tune_type = 0;
+
+  if (!psy_tune_type) {
+    psy_tune_type =
+        g_enum_register_static ("GstX264EncPsyTune", psy_tune_types);
+  }
+  return psy_tune_type;
+}
+
+static void
+gst_x264_enc_build_tunings_string (GstX264Enc * x264enc)
+{
+  int i = 1;
+
+  if (x264enc->tunings)
+    g_string_free (x264enc->tunings, TRUE);
+
+  if (x264enc->psy_tune) {
+    x264enc->tunings =
+        g_string_new (psy_tune_types[x264enc->psy_tune].value_nick);
+  } else {
+    x264enc->tunings = g_string_new (NULL);
+  }
+
+  while (tune_types[i].value_name) {
+    if (x264enc->tune & (1 << (i - 1)))
+      g_string_append_printf (x264enc->tunings, "%s%s",
+          x264enc->tunings->len ? "," : "", tune_types[i].value_nick);
+    i++;
+  }
+
+  if (x264enc->tunings->len)
+    GST_DEBUG_OBJECT (x264enc, "Constructed tunings string: %s",
+        x264enc->tunings->str);
+}
+
+#define GST_X264_ENC_FRAME_PACKING_TYPE (gst_x264_enc_frame_packing_get_type())
+static GType
+gst_x264_enc_frame_packing_get_type (void)
+{
+  static GType fpa_type = 0;
+
+  static const GEnumValue fpa_types[] = {
+    {-1, "Automatic (use incoming video information)", "auto"},
+    {0, "checkerboard - Left and Right pixels alternate in a checkerboard pattern", "checkerboard"},
+    {1, "column interleaved - Alternating pixel columns represent Left and Right views", "column-interleaved"},
+    {2, "row interleaved - Alternating pixel rows represent Left and Right views", "row-interleaved"},
+    {3, "side by side - The left half of the frame contains the Left eye view, the right half the Right eye view", "side-by-side"},
+    {4, "top bottom - L is on top, R on bottom", "top-bottom"},
+    {5, "frame interleaved - Each frame contains either Left or Right view alternately", "frame-interleaved"},
+    {0, NULL, NULL}
+  };
+
+  if (!fpa_type) {
+    fpa_type = g_enum_register_static ("GstX264EncFramePacking", fpa_types);
+  }
+  return fpa_type;
+}
+
+static gint
+gst_x264_enc_mview_mode_to_frame_packing (GstVideoMultiviewMode mode)
+{
+  switch (mode) {
+    case GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD:
+      return 0;
+    case GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED:
+      return 1;
+    case GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED:
+      return 2;
+    case GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE:
+      return 3;
+    case GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM:
+      return 4;
+    case GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME:
+      return 5;
+    default:
+      break;
+  }
+
+  return -1;
+}
+
+static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-h264, "
+        "framerate = (fraction) [0/1, MAX], "
+        "width = (int) [ 1, MAX ], " "height = (int) [ 1, MAX ], "
+        "stream-format = (string) { avc, byte-stream }, "
+        "alignment = (string) au, "
+        "profile = (string) { high-4:4:4, high-4:2:2, high-10, high, main,"
+        " baseline, constrained-baseline, high-4:4:4-intra, high-4:2:2-intra,"
+        " high-10-intra }")
+    );
+
+static void gst_x264_enc_finalize (GObject * object);
+static gboolean gst_x264_enc_start (GstVideoEncoder * encoder);
+static gboolean gst_x264_enc_stop (GstVideoEncoder * encoder);
+static gboolean gst_x264_enc_flush (GstVideoEncoder * encoder);
+
+static gboolean gst_x264_enc_init_encoder (GstX264Enc * encoder);
+static void gst_x264_enc_close_encoder (GstX264Enc * encoder);
+
+static GstFlowReturn gst_x264_enc_finish (GstVideoEncoder * encoder);
+static GstFlowReturn gst_x264_enc_handle_frame (GstVideoEncoder * encoder,
+    GstVideoCodecFrame * frame);
+static void gst_x264_enc_flush_frames (GstX264Enc * encoder, gboolean send);
+static GstFlowReturn gst_x264_enc_encode_frame (GstX264Enc * encoder,
+    x264_picture_t * pic_in, GstVideoCodecFrame * input_frame, int *i_nal,
+    gboolean send);
+static gboolean gst_x264_enc_set_format (GstVideoEncoder * video_enc,
+    GstVideoCodecState * state);
+static gboolean gst_x264_enc_propose_allocation (GstVideoEncoder * encoder,
+    GstQuery * query);
+
+static void gst_x264_enc_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_x264_enc_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static gboolean x264_element_init (GstPlugin * plugin);
+
+typedef gboolean (*LoadPresetFunc) (GstPreset * preset, const gchar * name);
+
+LoadPresetFunc parent_load_preset = NULL;
+
+static gboolean
+gst_x264_enc_load_preset (GstPreset * preset, const gchar * name)
+{
+  GstX264Enc *enc = GST_X264_ENC (preset);
+  gboolean res;
+
+  gst_encoder_bitrate_profile_manager_start_loading_preset
+      (enc->bitrate_manager);
+  res = parent_load_preset (preset, name);
+  gst_encoder_bitrate_profile_manager_end_loading_preset (enc->bitrate_manager,
+      res ? name : NULL);
+
+  return res;
+}
+
+static void
+gst_x264_enc_preset_interface_init (GstPresetInterface * iface)
+{
+  parent_load_preset = iface->load_preset;
+  iface->load_preset = gst_x264_enc_load_preset;
+}
+
+#define gst_x264_enc_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstX264Enc, gst_x264_enc, GST_TYPE_VIDEO_ENCODER,
+    G_IMPLEMENT_INTERFACE (GST_TYPE_PRESET,
+        gst_x264_enc_preset_interface_init));
+GST_ELEMENT_REGISTER_DEFINE_CUSTOM (x264enc, x264_element_init)
+/* don't forget to free the string after use */
+     static const gchar *gst_x264_enc_build_partitions (gint analyse)
+{
+  GString *string;
+
+  if (!analyse)
+    return NULL;
+
+  string = g_string_new (NULL);
+  if (analyse & X264_ANALYSE_I4x4)
+    g_string_append (string, "i4x4");
+  if (analyse & X264_ANALYSE_I8x8)
+    g_string_append (string, ",i8x8");
+  if (analyse & X264_ANALYSE_PSUB16x16)
+    g_string_append (string, ",p8x8");
+  if (analyse & X264_ANALYSE_PSUB8x8)
+    g_string_append (string, ",p4x4");
+  if (analyse & X264_ANALYSE_BSUB16x16)
+    g_string_append (string, ",b8x8");
+
+  return (const gchar *) g_string_free (string, FALSE);
+}
+
+static void
+check_formats (const gchar * str, gboolean * has_420_8, gboolean * has_420_10,
+    gboolean * has_422, gboolean * has_444)
+{
+  if (g_str_has_prefix (str, "high-4:4:4"))
+    *has_444 = TRUE;
+  else if (g_str_has_prefix (str, "high-4:2:2"))
+    *has_422 = TRUE;
+  else if (g_str_has_prefix (str, "high-10"))
+    *has_420_10 = TRUE;
+  else
+    *has_420_8 = TRUE;
+}
+
+
+/* allowed input caps depending on whether libx264 was built for 8 or 10 bits */
+static GstCaps *
+gst_x264_enc_sink_getcaps (GstVideoEncoder * enc, GstCaps * filter)
+{
+  GstCaps *supported_incaps;
+  GstCaps *allowed;
+  GstCaps *filter_caps, *fcaps;
+  gint i, j, k;
+
+  supported_incaps =
+      gst_pad_get_pad_template_caps (GST_VIDEO_ENCODER_SINK_PAD (enc));
+
+  /* Allow downstream to specify width/height/framerate/PAR constraints
+   * and forward them upstream for video converters to handle
+   */
+  allowed = gst_pad_get_allowed_caps (enc->srcpad);
+
+  if (!allowed || gst_caps_is_empty (allowed) || gst_caps_is_any (allowed)) {
+    fcaps = supported_incaps;
+    goto done;
+  }
+
+  GST_LOG_OBJECT (enc, "template caps %" GST_PTR_FORMAT, supported_incaps);
+  GST_LOG_OBJECT (enc, "allowed caps %" GST_PTR_FORMAT, allowed);
+
+  filter_caps = gst_caps_new_empty ();
+
+  for (i = 0; i < gst_caps_get_size (supported_incaps); i++) {
+    GQuark q_name =
+        gst_structure_get_name_id (gst_caps_get_structure (supported_incaps,
+            i));
+
+    for (j = 0; j < gst_caps_get_size (allowed); j++) {
+      const GstStructure *allowed_s = gst_caps_get_structure (allowed, j);
+      const GValue *val;
+      GstStructure *s;
+
+      /* FIXME Find a way to reuse gst_video_encoder_proxy_getcaps so that
+       * we do not need to copy that logic */
+      s = gst_structure_new_id_empty (q_name);
+      if ((val = gst_structure_get_value (allowed_s, "width")))
+        gst_structure_set_value (s, "width", val);
+      if ((val = gst_structure_get_value (allowed_s, "height")))
+        gst_structure_set_value (s, "height", val);
+      if ((val = gst_structure_get_value (allowed_s, "framerate")))
+        gst_structure_set_value (s, "framerate", val);
+      if ((val = gst_structure_get_value (allowed_s, "pixel-aspect-ratio")))
+        gst_structure_set_value (s, "pixel-aspect-ratio", val);
+      if ((val = gst_structure_get_value (allowed_s, "colorimetry")))
+        gst_structure_set_value (s, "colorimetry", val);
+      if ((val = gst_structure_get_value (allowed_s, "chroma-site")))
+        gst_structure_set_value (s, "chroma-site", val);
+
+      if ((val = gst_structure_get_value (allowed_s, "profile"))) {
+        gboolean has_420_8 = FALSE;
+        gboolean has_420_10 = FALSE;
+        gboolean has_422 = FALSE;
+        gboolean has_444 = FALSE;
+
+        if (G_VALUE_HOLDS_STRING (val)) {
+          check_formats (g_value_get_string (val), &has_420_8, &has_420_10,
+              &has_422, &has_444);
+        } else if (GST_VALUE_HOLDS_LIST (val)) {
+          for (k = 0; k < gst_value_list_get_size (val); k++) {
+            const GValue *vlist = gst_value_list_get_value (val, k);
+
+            if (G_VALUE_HOLDS_STRING (vlist))
+              check_formats (g_value_get_string (vlist), &has_420_8,
+                  &has_420_10, &has_422, &has_444);
+          }
+        }
+
+        gst_x264_enc_add_x264_chroma_format (s, has_420_8, has_420_10, has_422,
+            has_444);
+      }
+
+      filter_caps = gst_caps_merge_structure (filter_caps, s);
+    }
+  }
+
+  fcaps = gst_caps_intersect (filter_caps, supported_incaps);
+  gst_caps_unref (filter_caps);
+  gst_caps_unref (supported_incaps);
+
+  if (filter) {
+    GST_LOG_OBJECT (enc, "intersecting with %" GST_PTR_FORMAT, filter);
+    filter_caps = gst_caps_intersect (fcaps, filter);
+    gst_caps_unref (fcaps);
+    fcaps = filter_caps;
+  }
+
+done:
+  gst_caps_replace (&allowed, NULL);
+
+  GST_LOG_OBJECT (enc, "proxy caps %" GST_PTR_FORMAT, fcaps);
+
+  return fcaps;
+}
+
+static gboolean
+gst_x264_enc_sink_query (GstVideoEncoder * enc, GstQuery * query)
+{
+  GstPad *pad = GST_VIDEO_ENCODER_SINK_PAD (enc);
+  gboolean ret = FALSE;
+
+  GST_DEBUG ("Received %s query on sinkpad, %" GST_PTR_FORMAT,
+      GST_QUERY_TYPE_NAME (query), query);
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_ACCEPT_CAPS:{
+      GstCaps *acceptable, *caps;
+
+      acceptable = gst_pad_get_pad_template_caps (pad);
+
+      gst_query_parse_accept_caps (query, &caps);
+
+      gst_query_set_accept_caps_result (query,
+          gst_caps_is_subset (caps, acceptable));
+      gst_caps_unref (acceptable);
+      ret = TRUE;
+    }
+      break;
+    default:
+      ret = GST_VIDEO_ENCODER_CLASS (parent_class)->sink_query (enc, query);
+      break;
+  }
+
+  return ret;
+}
+
+static void
+gst_x264_enc_class_init (GstX264EncClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *element_class;
+  GstVideoEncoderClass *gstencoder_class;
+  const gchar *partitions = NULL;
+  GstPadTemplate *sink_templ;
+  GstCaps *supported_sinkcaps;
+
+  x264enc_defaults = g_string_new ("");
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  element_class = GST_ELEMENT_CLASS (klass);
+  gstencoder_class = GST_VIDEO_ENCODER_CLASS (klass);
+
+  gobject_class->set_property = gst_x264_enc_set_property;
+  gobject_class->get_property = gst_x264_enc_get_property;
+  gobject_class->finalize = gst_x264_enc_finalize;
+
+  gstencoder_class->set_format = GST_DEBUG_FUNCPTR (gst_x264_enc_set_format);
+  gstencoder_class->handle_frame =
+      GST_DEBUG_FUNCPTR (gst_x264_enc_handle_frame);
+  gstencoder_class->start = GST_DEBUG_FUNCPTR (gst_x264_enc_start);
+  gstencoder_class->stop = GST_DEBUG_FUNCPTR (gst_x264_enc_stop);
+  gstencoder_class->flush = GST_DEBUG_FUNCPTR (gst_x264_enc_flush);
+  gstencoder_class->finish = GST_DEBUG_FUNCPTR (gst_x264_enc_finish);
+  gstencoder_class->getcaps = GST_DEBUG_FUNCPTR (gst_x264_enc_sink_getcaps);
+  gstencoder_class->propose_allocation =
+      GST_DEBUG_FUNCPTR (gst_x264_enc_propose_allocation);
+  gstencoder_class->sink_query = GST_DEBUG_FUNCPTR (gst_x264_enc_sink_query);
+
+  /* options for which we don't use string equivalents */
+  g_object_class_install_property (gobject_class, ARG_PASS,
+      g_param_spec_enum ("pass", "Encoding pass/type",
+          "Encoding pass/type", GST_X264_ENC_PASS_TYPE,
+          ARG_PASS_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, ARG_QUANTIZER,
+      g_param_spec_uint ("quantizer", "Constant Quantizer",
+          "Constant quantizer or quality to apply",
+          0, 50, ARG_QUANTIZER_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, ARG_BITRATE,
+      g_param_spec_uint ("bitrate", "Bitrate", "Bitrate in kbit/sec", 1,
+          2000 * 1024, ARG_BITRATE_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+          GST_PARAM_MUTABLE_PLAYING));
+  g_object_class_install_property (gobject_class, ARG_VBV_BUF_CAPACITY,
+      g_param_spec_uint ("vbv-buf-capacity", "VBV buffer capacity",
+          "Size of the VBV buffer in milliseconds",
+          0, 10000, ARG_VBV_BUF_CAPACITY_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+          GST_PARAM_MUTABLE_PLAYING));
+  g_object_class_install_property (gobject_class, ARG_SPEED_PRESET,
+      g_param_spec_enum ("speed-preset", "Speed/quality preset",
+          "Preset name for speed/quality tradeoff options (can affect decode "
+          "compatibility - impose restrictions separately for your target decoder)",
+          GST_X264_ENC_SPEED_PRESET_TYPE, ARG_SPEED_PRESET_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, ARG_PSY_TUNE,
+      g_param_spec_enum ("psy-tune", "Psychovisual tuning preset",
+          "Preset name for psychovisual tuning options",
+          GST_X264_ENC_PSY_TUNE_TYPE, ARG_PSY_TUNE_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, ARG_TUNE,
+      g_param_spec_flags ("tune", "Content tuning preset",
+          "Preset name for non-psychovisual tuning options",
+          GST_X264_ENC_TUNE_TYPE, ARG_TUNE_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, ARG_OPTION_STRING,
+      g_param_spec_string ("option-string", "Option string",
+          "String of x264 options (overridden by element properties)"
+          " in the format \"key1=value1:key2=value2\".",
+          ARG_OPTION_STRING_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, ARG_FRAME_PACKING,
+      g_param_spec_enum ("frame-packing", "Frame Packing",
+          "Set frame packing mode for Stereoscopic content",
+          GST_X264_ENC_FRAME_PACKING_TYPE, ARG_FRAME_PACKING_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, ARG_INSERT_VUI,
+      g_param_spec_boolean ("insert-vui", "Insert VUI",
+          "Insert VUI NAL in stream",
+          ARG_INSERT_VUI_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /* options for which we _do_ use string equivalents */
+  g_object_class_install_property (gobject_class, ARG_THREADS,
+      g_param_spec_uint ("threads", "Threads",
+          "Number of threads used by the codec (0 for automatic)",
+          0, G_MAXINT, ARG_THREADS_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /* NOTE: this first string append doesn't require the ':' delimiter but the
+   * rest do */
+  g_string_append_printf (x264enc_defaults, "threads=%d", ARG_THREADS_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_SLICED_THREADS,
+      g_param_spec_boolean ("sliced-threads", "Sliced Threads",
+          "Low latency but lower efficiency threading",
+          ARG_SLICED_THREADS_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":sliced-threads=%d",
+      ARG_SLICED_THREADS_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_SYNC_LOOKAHEAD,
+      g_param_spec_int ("sync-lookahead", "Sync Lookahead",
+          "Number of buffer frames for threaded lookahead (-1 for automatic)",
+          -1, 250, ARG_SYNC_LOOKAHEAD_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":sync-lookahead=%d",
+      ARG_SYNC_LOOKAHEAD_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_MULTIPASS_CACHE_FILE,
+      g_param_spec_string ("multipass-cache-file", "Multipass Cache File",
+          "Filename for multipass cache file",
+          ARG_MULTIPASS_CACHE_FILE_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":stats=%s",
+      ARG_MULTIPASS_CACHE_FILE_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_BYTE_STREAM,
+      g_param_spec_boolean ("byte-stream", "Byte Stream",
+          "Generate byte stream format of NALU", ARG_BYTE_STREAM_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":annexb=%d",
+      ARG_BYTE_STREAM_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_INTRA_REFRESH,
+      g_param_spec_boolean ("intra-refresh", "Intra Refresh",
+          "Use Periodic Intra Refresh instead of IDR frames",
+          ARG_INTRA_REFRESH_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":intra-refresh=%d",
+      ARG_INTRA_REFRESH_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_ME,
+      g_param_spec_enum ("me", "Motion Estimation",
+          "Integer pixel motion estimation method", GST_X264_ENC_ME_TYPE,
+          ARG_ME_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":me=%s",
+      x264_motion_est_names[ARG_ME_DEFAULT]);
+  g_object_class_install_property (gobject_class, ARG_SUBME,
+      g_param_spec_uint ("subme", "Subpixel Motion Estimation",
+          "Subpixel motion estimation and partition decision quality: 1=fast, 10=best",
+          1, 10, ARG_SUBME_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":subme=%d", ARG_SUBME_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_ANALYSE,
+      g_param_spec_flags ("analyse", "Analyse", "Partitions to consider",
+          GST_X264_ENC_ANALYSE_TYPE, ARG_ANALYSE_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  partitions = gst_x264_enc_build_partitions (ARG_ANALYSE_DEFAULT);
+  if (partitions) {
+    g_string_append_printf (x264enc_defaults, ":partitions=%s", partitions);
+    g_free ((gpointer) partitions);
+  }
+  g_object_class_install_property (gobject_class, ARG_DCT8x8,
+      g_param_spec_boolean ("dct8x8", "DCT8x8",
+          "Adaptive spatial transform size", ARG_DCT8x8_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":8x8dct=%d", ARG_DCT8x8_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_REF,
+      g_param_spec_uint ("ref", "Reference Frames",
+          "Number of reference frames",
+          1, 16, ARG_REF_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":ref=%d", ARG_REF_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_BFRAMES,
+      g_param_spec_uint ("bframes", "B-Frames",
+          "Number of B-frames between I and P",
+          0, 16, ARG_BFRAMES_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":bframes=%d", ARG_BFRAMES_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_B_ADAPT,
+      g_param_spec_boolean ("b-adapt", "B-Adapt",
+          "Automatically decide how many B-frames to use",
+          ARG_B_ADAPT_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":b-adapt=%d", ARG_B_ADAPT_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_B_PYRAMID,
+      g_param_spec_boolean ("b-pyramid", "B-Pyramid",
+          "Keep some B-frames as references", ARG_B_PYRAMID_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":b-pyramid=%s",
+      x264_b_pyramid_names[ARG_B_PYRAMID_DEFAULT]);
+  g_object_class_install_property (gobject_class, ARG_WEIGHTB,
+      g_param_spec_boolean ("weightb", "Weighted B-Frames",
+          "Weighted prediction for B-frames", ARG_WEIGHTB_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":weightb=%d", ARG_WEIGHTB_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_SPS_ID,
+      g_param_spec_uint ("sps-id", "SPS ID",
+          "SPS and PPS ID number",
+          0, 31, ARG_SPS_ID_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":sps-id=%d", ARG_SPS_ID_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_AU_NALU,
+      g_param_spec_boolean ("aud", "AUD",
+          "Use AU (Access Unit) delimiter", ARG_AU_NALU_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":aud=%d", ARG_AU_NALU_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_TRELLIS,
+      g_param_spec_boolean ("trellis", "Trellis quantization",
+          "Enable trellis searched quantization", ARG_TRELLIS_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":trellis=%d", ARG_TRELLIS_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_KEYINT_MAX,
+      g_param_spec_uint ("key-int-max", "Key-frame maximal interval",
+          "Maximal distance between two key-frames (0 for automatic)",
+          0, G_MAXINT, ARG_KEYINT_MAX_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":keyint=%d",
+      ARG_KEYINT_MAX_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_CABAC,
+      g_param_spec_boolean ("cabac", "Use CABAC", "Enable CABAC entropy coding",
+          ARG_CABAC_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":cabac=%d", ARG_CABAC_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_QP_MIN,
+      g_param_spec_uint ("qp-min", "Minimum Quantizer",
+          "Minimum quantizer", 0, 63, ARG_QP_MIN_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":qpmin=%d", ARG_QP_MIN_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_QP_MAX,
+      g_param_spec_uint ("qp-max", "Maximum Quantizer",
+          "Maximum quantizer", 0, 63, ARG_QP_MAX_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":qpmax=%d", ARG_QP_MAX_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_QP_STEP,
+      g_param_spec_uint ("qp-step", "Maximum Quantizer Difference",
+          "Maximum quantizer difference between frames",
+          0, 63, ARG_QP_STEP_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":qpstep=%d", ARG_QP_STEP_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_IP_FACTOR,
+      g_param_spec_float ("ip-factor", "IP-Factor",
+          "Quantizer factor between I- and P-frames",
+          0, 2, ARG_IP_FACTOR_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":ip-factor=%f",
+      ARG_IP_FACTOR_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_PB_FACTOR,
+      g_param_spec_float ("pb-factor", "PB-Factor",
+          "Quantizer factor between P- and B-frames", 0, 2,
+          ARG_PB_FACTOR_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":pb-factor=%f",
+      ARG_PB_FACTOR_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_RC_MB_TREE,
+      g_param_spec_boolean ("mb-tree", "Macroblock Tree",
+          "Macroblock-Tree ratecontrol",
+          ARG_RC_MB_TREE_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":mbtree=%d",
+      ARG_RC_MB_TREE_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_RC_LOOKAHEAD,
+      g_param_spec_int ("rc-lookahead", "Rate Control Lookahead",
+          "Number of frames for frametype lookahead", 0, 250,
+          ARG_RC_LOOKAHEAD_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":rc-lookahead=%d",
+      ARG_RC_LOOKAHEAD_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_NR,
+      g_param_spec_uint ("noise-reduction", "Noise Reduction",
+          "Noise reduction strength",
+          0, 100000, ARG_NR_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":nr=%d", ARG_NR_DEFAULT);
+  g_object_class_install_property (gobject_class, ARG_INTERLACED,
+      g_param_spec_boolean ("interlaced", "Interlaced",
+          "Interlaced material", ARG_INTERLACED_DEFAULT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_string_append_printf (x264enc_defaults, ":interlaced=%d",
+      ARG_INTERLACED_DEFAULT);
+
+  /* append deblock parameters */
+  g_string_append_printf (x264enc_defaults, ":deblock=0,0");
+  /* append weighted prediction parameter */
+  g_string_append_printf (x264enc_defaults, ":weightp=0");
+
+  gst_element_class_set_static_metadata (element_class,
+      "x264enc", "Codec/Encoder/Video", "H264 Encoder",
+      "Josef Zlomek <josef.zlomek@itonis.tv>, "
+      "Mark Nauwelaerts <mnauw@users.sf.net>");
+
+  supported_sinkcaps = gst_caps_new_simple ("video/x-raw",
+      "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1,
+      "width", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+      "height", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL);
+
+  gst_x264_enc_add_x264_chroma_format (gst_caps_get_structure
+      (supported_sinkcaps, 0), TRUE, TRUE, TRUE, TRUE);
+
+  sink_templ = gst_pad_template_new ("sink",
+      GST_PAD_SINK, GST_PAD_ALWAYS, supported_sinkcaps);
+
+  gst_caps_unref (supported_sinkcaps);
+
+  gst_element_class_add_pad_template (element_class, sink_templ);
+  gst_element_class_add_static_pad_template (element_class, &src_factory);
+
+  gst_type_mark_as_plugin_api (GST_X264_ENC_ANALYSE_TYPE, 0);
+  gst_type_mark_as_plugin_api (GST_X264_ENC_FRAME_PACKING_TYPE, 0);
+  gst_type_mark_as_plugin_api (GST_X264_ENC_ME_TYPE, 0);
+  gst_type_mark_as_plugin_api (GST_X264_ENC_PASS_TYPE, 0);
+  gst_type_mark_as_plugin_api (GST_X264_ENC_PSY_TUNE_TYPE, 0);
+  gst_type_mark_as_plugin_api (GST_X264_ENC_SPEED_PRESET_TYPE, 0);
+  gst_type_mark_as_plugin_api (GST_X264_ENC_TUNE_TYPE, 0);
+}
+
+/* *INDENT-OFF* */
+G_GNUC_PRINTF (3, 0)
+/* *INDENT-ON* */
+
+static void
+gst_x264_enc_log_callback (gpointer private, gint level, const char *format,
+    va_list args)
+{
+#ifndef GST_DISABLE_GST_DEBUG
+  GstDebugLevel gst_level;
+  GObject *object = (GObject *) private;
+  gchar *formatted;
+
+  switch (level) {
+    case X264_LOG_NONE:
+      gst_level = GST_LEVEL_NONE;
+      break;
+    case X264_LOG_ERROR:
+      gst_level = GST_LEVEL_ERROR;
+      break;
+    case X264_LOG_WARNING:
+      gst_level = GST_LEVEL_WARNING;
+      break;
+    case X264_LOG_INFO:
+      gst_level = GST_LEVEL_INFO;
+      break;
+    default:
+      /* push x264enc debug down to our lower levels to avoid some clutter */
+      gst_level = GST_LEVEL_LOG;
+      break;
+  }
+
+  if (G_LIKELY (gst_level > _gst_debug_min))
+    return;
+
+  if (G_LIKELY (gst_level > gst_debug_category_get_threshold (GST_CAT_DEFAULT)))
+    return;
+
+  formatted = g_strdup_vprintf (format, args);
+  g_strchomp (formatted);
+
+  GST_CAT_LEVEL_LOG (GST_CAT_DEFAULT, gst_level, object, "%s", formatted);
+
+  g_free (formatted);
+#endif /* GST_DISABLE_GST_DEBUG */
+}
+
+/* initialize the new element
+ * instantiate pads and add them to element
+ * set functions
+ * initialize structure
+ */
+static void
+gst_x264_enc_init (GstX264Enc * encoder)
+{
+  /* properties */
+  encoder->threads = ARG_THREADS_DEFAULT;
+  encoder->sliced_threads = ARG_SLICED_THREADS_DEFAULT;
+  encoder->sync_lookahead = ARG_SYNC_LOOKAHEAD_DEFAULT;
+  encoder->pass = ARG_PASS_DEFAULT;
+  encoder->quantizer = ARG_QUANTIZER_DEFAULT;
+  encoder->mp_cache_file = g_strdup (ARG_MULTIPASS_CACHE_FILE_DEFAULT);
+  encoder->byte_stream = ARG_BYTE_STREAM_DEFAULT;
+  encoder->intra_refresh = ARG_INTRA_REFRESH_DEFAULT;
+  encoder->vbv_buf_capacity = ARG_VBV_BUF_CAPACITY_DEFAULT;
+  encoder->me = ARG_ME_DEFAULT;
+  encoder->subme = ARG_SUBME_DEFAULT;
+  encoder->analyse = ARG_ANALYSE_DEFAULT;
+  encoder->dct8x8 = ARG_DCT8x8_DEFAULT;
+  encoder->ref = ARG_REF_DEFAULT;
+  encoder->bframes = ARG_BFRAMES_DEFAULT;
+  encoder->b_adapt = ARG_B_ADAPT_DEFAULT;
+  encoder->b_pyramid = ARG_B_PYRAMID_DEFAULT;
+  encoder->weightb = ARG_WEIGHTB_DEFAULT;
+  encoder->sps_id = ARG_SPS_ID_DEFAULT;
+  encoder->au_nalu = ARG_AU_NALU_DEFAULT;
+  encoder->trellis = ARG_TRELLIS_DEFAULT;
+  encoder->keyint_max = ARG_KEYINT_MAX_DEFAULT;
+  encoder->cabac = ARG_CABAC_DEFAULT;
+  encoder->qp_min = ARG_QP_MIN_DEFAULT;
+  encoder->qp_max = ARG_QP_MAX_DEFAULT;
+  encoder->qp_step = ARG_QP_STEP_DEFAULT;
+  encoder->ip_factor = ARG_IP_FACTOR_DEFAULT;
+  encoder->pb_factor = ARG_PB_FACTOR_DEFAULT;
+  encoder->mb_tree = ARG_RC_MB_TREE_DEFAULT;
+  encoder->rc_lookahead = ARG_RC_LOOKAHEAD_DEFAULT;
+  encoder->noise_reduction = ARG_NR_DEFAULT;
+  encoder->interlaced = ARG_INTERLACED_DEFAULT;
+  encoder->option_string = g_string_new (NULL);
+  encoder->option_string_prop = g_string_new (ARG_OPTION_STRING_DEFAULT);
+  encoder->speed_preset = ARG_SPEED_PRESET_DEFAULT;
+  encoder->psy_tune = ARG_PSY_TUNE_DEFAULT;
+  encoder->tune = ARG_TUNE_DEFAULT;
+  encoder->frame_packing = ARG_FRAME_PACKING_DEFAULT;
+  encoder->insert_vui = ARG_INSERT_VUI_DEFAULT;
+
+  encoder->bitrate_manager =
+      gst_encoder_bitrate_profile_manager_new (ARG_BITRATE_DEFAULT);
+}
+
+typedef struct
+{
+  GstVideoCodecFrame *frame;
+  GstVideoFrame vframe;
+} FrameData;
+
+static FrameData *
+gst_x264_enc_queue_frame (GstX264Enc * enc, GstVideoCodecFrame * frame,
+    GstVideoInfo * info)
+{
+  GstVideoFrame vframe;
+  FrameData *fdata;
+
+  if (!gst_video_frame_map (&vframe, info, frame->input_buffer, GST_MAP_READ))
+    return NULL;
+
+  fdata = g_slice_new (FrameData);
+  fdata->frame = gst_video_codec_frame_ref (frame);
+  fdata->vframe = vframe;
+
+  enc->pending_frames = g_list_prepend (enc->pending_frames, fdata);
+
+  return fdata;
+}
+
+static void
+gst_x264_enc_dequeue_frame (GstX264Enc * enc, GstVideoCodecFrame * frame)
+{
+  GList *l;
+
+  for (l = enc->pending_frames; l; l = l->next) {
+    FrameData *fdata = l->data;
+
+    if (fdata->frame != frame)
+      continue;
+
+    gst_video_frame_unmap (&fdata->vframe);
+    gst_video_codec_frame_unref (fdata->frame);
+    g_slice_free (FrameData, fdata);
+
+    enc->pending_frames = g_list_delete_link (enc->pending_frames, l);
+    return;
+  }
+}
+
+static void
+gst_x264_enc_dequeue_all_frames (GstX264Enc * enc)
+{
+  GList *l;
+
+  for (l = enc->pending_frames; l; l = l->next) {
+    FrameData *fdata = l->data;
+
+    gst_video_frame_unmap (&fdata->vframe);
+    gst_video_codec_frame_unref (fdata->frame);
+    g_slice_free (FrameData, fdata);
+  }
+  g_list_free (enc->pending_frames);
+  enc->pending_frames = NULL;
+}
+
+static gboolean
+gst_x264_enc_start (GstVideoEncoder * encoder)
+{
+  GstX264Enc *x264enc = GST_X264_ENC (encoder);
+
+  x264enc->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_FROM_PROPERTY;
+
+  /* make sure that we have enough time for first DTS,
+     this is probably overkill for most streams */
+  gst_video_encoder_set_min_pts (encoder, GST_SECOND * 60 * 60 * 1000);
+
+  return TRUE;
+}
+
+static gboolean
+gst_x264_enc_stop (GstVideoEncoder * encoder)
+{
+  GstX264Enc *x264enc = GST_X264_ENC (encoder);
+
+  gst_x264_enc_flush_frames (x264enc, FALSE);
+  gst_x264_enc_close_encoder (x264enc);
+  gst_x264_enc_dequeue_all_frames (x264enc);
+
+  if (x264enc->input_state)
+    gst_video_codec_state_unref (x264enc->input_state);
+  x264enc->input_state = NULL;
+
+  return TRUE;
+}
+
+
+static gboolean
+gst_x264_enc_flush (GstVideoEncoder * encoder)
+{
+  GstX264Enc *x264enc = GST_X264_ENC (encoder);
+
+  gst_x264_enc_flush_frames (x264enc, FALSE);
+  gst_x264_enc_close_encoder (x264enc);
+  gst_x264_enc_dequeue_all_frames (x264enc);
+
+  gst_x264_enc_init_encoder (x264enc);
+
+  return TRUE;
+}
+
+static void
+gst_x264_enc_finalize (GObject * object)
+{
+  GstX264Enc *encoder = GST_X264_ENC (object);
+
+  if (encoder->input_state)
+    gst_video_codec_state_unref (encoder->input_state);
+  encoder->input_state = NULL;
+
+#define FREE_STRING(ptr) \
+  if (ptr) \
+    g_string_free (ptr, TRUE);
+
+  FREE_STRING (encoder->tunings);
+  FREE_STRING (encoder->option_string);
+  FREE_STRING (encoder->option_string_prop);
+  gst_encoder_bitrate_profile_manager_free (encoder->bitrate_manager);
+
+#undef FREE_STRING
+
+  g_free (encoder->mp_cache_file);
+  encoder->mp_cache_file = NULL;
+
+  gst_x264_enc_close_encoder (encoder);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+/*
+ * gst_x264_enc_parse_options
+ * @encoder: Encoder to which options are assigned
+ * @str: Option string
+ *
+ * Parse option string and assign to x264 parameters
+ *
+ */
+static gboolean
+gst_x264_enc_parse_options (GstX264Enc * encoder, const gchar * str)
+{
+  GStrv kvpairs;
+  guint npairs, i;
+  gint parse_result = 0, ret = 0;
+  gchar *options = (gchar *) str;
+
+  while (*options == ':')
+    options++;
+
+  kvpairs = g_strsplit (options, ":", 0);
+  npairs = g_strv_length (kvpairs);
+
+  for (i = 0; i < npairs; i++) {
+    GStrv key_val = g_strsplit (kvpairs[i], "=", 2);
+
+    parse_result =
+        encoder->vtable->x264_param_parse (&encoder->x264param, key_val[0],
+        key_val[1]);
+
+    if (parse_result == X264_PARAM_BAD_NAME) {
+      GST_ERROR_OBJECT (encoder, "Bad name for option %s=%s",
+          key_val[0] ? key_val[0] : "", key_val[1] ? key_val[1] : "");
+    }
+    if (parse_result == X264_PARAM_BAD_VALUE) {
+      GST_ERROR_OBJECT (encoder,
+          "Bad value for option %s=%s (Note: a NULL value for a non-boolean triggers this)",
+          key_val[0] ? key_val[0] : "", key_val[1] ? key_val[1] : "");
+    }
+
+    g_strfreev (key_val);
+
+    if (parse_result)
+      ret++;
+  }
+
+  g_strfreev (kvpairs);
+  return !ret;
+}
+
+static gint
+gst_x264_enc_gst_to_x264_video_format (GstVideoFormat format, gint * nplanes)
+{
+  switch (format) {
+    case GST_VIDEO_FORMAT_I420:
+    case GST_VIDEO_FORMAT_YV12:
+      if (nplanes)
+        *nplanes = 3;
+      return X264_CSP_I420;
+    case GST_VIDEO_FORMAT_I420_10BE:
+    case GST_VIDEO_FORMAT_I420_10LE:
+      if (nplanes)
+        *nplanes = 3;
+      return X264_CSP_I420 | X264_CSP_HIGH_DEPTH;
+    case GST_VIDEO_FORMAT_Y42B:
+      if (nplanes)
+        *nplanes = 3;
+      return X264_CSP_I422;
+    case GST_VIDEO_FORMAT_I422_10BE:
+    case GST_VIDEO_FORMAT_I422_10LE:
+      if (nplanes)
+        *nplanes = 3;
+      return X264_CSP_I422 | X264_CSP_HIGH_DEPTH;
+    case GST_VIDEO_FORMAT_Y444:
+      if (nplanes)
+        *nplanes = 3;
+      return X264_CSP_I444;
+    case GST_VIDEO_FORMAT_Y444_10BE:
+    case GST_VIDEO_FORMAT_Y444_10LE:
+      if (nplanes)
+        *nplanes = 3;
+      return X264_CSP_I444 | X264_CSP_HIGH_DEPTH;
+    case GST_VIDEO_FORMAT_NV12:
+      if (nplanes)
+        *nplanes = 2;
+      return X264_CSP_NV12;
+    default:
+      g_return_val_if_reached (GST_VIDEO_FORMAT_UNKNOWN);
+  }
+}
+
+/*
+ * gst_x264_enc_init_encoder
+ * @encoder:  Encoder which should be initialized.
+ *
+ * Initialize x264 encoder.
+ *
+ */
+static gboolean
+gst_x264_enc_init_encoder (GstX264Enc * encoder)
+{
+  guint pass = 0;
+  GstVideoInfo *info;
+  guint bitrate;
+
+  if (!encoder->input_state) {
+    GST_DEBUG_OBJECT (encoder, "Have no input state yet");
+    return FALSE;
+  }
+
+  info = &encoder->input_state->info;
+
+  /* make sure that the encoder is closed */
+  gst_x264_enc_close_encoder (encoder);
+
+  GST_OBJECT_LOCK (encoder);
+
+  if (GST_VIDEO_INFO_COMP_DEPTH (info, 0) == 8)
+    encoder->vtable = vtable_8bit;
+  else if (GST_VIDEO_INFO_COMP_DEPTH (info, 0) == 10)
+    encoder->vtable = vtable_10bit;
+
+  g_assert (encoder->vtable != NULL);
+
+  gst_x264_enc_build_tunings_string (encoder);
+
+  /* set x264 parameters and use preset/tuning if present */
+  GST_DEBUG_OBJECT (encoder, "Applying defaults with preset %s, tunings %s",
+      encoder->speed_preset ? x264_preset_names[encoder->speed_preset - 1] : "",
+      encoder->tunings && encoder->tunings->len ? encoder->tunings->str : "");
+  encoder->vtable->x264_param_default_preset (&encoder->x264param,
+      encoder->speed_preset ? x264_preset_names[encoder->speed_preset -
+          1] : NULL, encoder->tunings
+      && encoder->tunings->len ? encoder->tunings->str : NULL);
+
+  /* log callback setup; part of parameters
+   * this needs to be done again after every *param_default* () call */
+  encoder->x264param.pf_log = gst_x264_enc_log_callback;
+  encoder->x264param.p_log_private = encoder;
+  encoder->x264param.i_log_level = X264_LOG_DEBUG;
+
+  /* if no preset nor tuning, use property defaults */
+  if (!encoder->speed_preset && !encoder->tunings->len) {
+    GST_DEBUG_OBJECT (encoder, "Applying x264enc_defaults");
+    if (x264enc_defaults->len
+        && gst_x264_enc_parse_options (encoder,
+            x264enc_defaults->str) == FALSE) {
+      GST_DEBUG_OBJECT (encoder,
+          "x264enc_defaults string contains errors. This is a bug.");
+      goto unlock_and_return;
+    }
+  } else {
+    /* When using presets we need to respect the default output format */
+    encoder->x264param.b_aud = encoder->au_nalu;
+    encoder->x264param.b_annexb = encoder->byte_stream;
+  }
+
+  /* setup appropriate timebase for gstreamer */
+  encoder->x264param.i_timebase_num = 1;
+  encoder->x264param.i_timebase_den = 1000000000;
+
+  /* apply option-string property */
+  if (encoder->option_string_prop && encoder->option_string_prop->len) {
+    GST_DEBUG_OBJECT (encoder, "Applying option-string: %s",
+        encoder->option_string_prop->str);
+    if (gst_x264_enc_parse_options (encoder,
+            encoder->option_string_prop->str) == FALSE) {
+      GST_DEBUG_OBJECT (encoder, "Your option-string contains errors.");
+      goto unlock_and_return;
+    }
+  }
+  /* apply user-set options */
+  if (encoder->option_string && encoder->option_string->len) {
+    GST_DEBUG_OBJECT (encoder, "Applying user-set options: %s",
+        encoder->option_string->str);
+    if (gst_x264_enc_parse_options (encoder,
+            encoder->option_string->str) == FALSE) {
+      GST_DEBUG_OBJECT (encoder, "Failed to parse internal option string. "
+          "This could be due to use of an old libx264 version. Option string "
+          "was: %s", encoder->option_string->str);
+    }
+  }
+
+  /* set up encoder parameters */
+#if X264_BUILD >= 153
+  encoder->x264param.i_bitdepth = GST_VIDEO_INFO_COMP_DEPTH (info, 0);
+#endif
+  encoder->x264param.i_csp =
+      gst_x264_enc_gst_to_x264_video_format (info->finfo->format,
+      &encoder->x264_nplanes);
+  if (info->fps_d == 0 || info->fps_n == 0) {
+    /* No FPS so must use VFR
+     * This raises latency apparently see http://mewiki.project357.com/wiki/X264_Encoding_Suggestions */
+    encoder->x264param.b_vfr_input = TRUE;
+    if (encoder->keyint_max) {  /* NB the default is 250 setup by x264 itself */
+      encoder->x264param.i_keyint_max = encoder->keyint_max;
+    }
+  } else {
+    /* FPS available so set it up */
+    encoder->x264param.b_vfr_input = FALSE;
+    encoder->x264param.i_fps_num = info->fps_n;
+    encoder->x264param.i_fps_den = info->fps_d;
+    encoder->x264param.i_keyint_max =
+        encoder->keyint_max ? encoder->keyint_max : (10 * info->fps_n /
+        info->fps_d);
+  }
+  encoder->x264param.i_width = info->width;
+  encoder->x264param.i_height = info->height;
+  if (info->par_d > 0) {
+    encoder->x264param.vui.i_sar_width = info->par_n;
+    encoder->x264param.vui.i_sar_height = info->par_d;
+  }
+
+  if ((((info->height == 576) && ((info->width == 720)
+                  || (info->width == 704) || (info->width == 352)))
+          || ((info->height == 288) && (info->width == 352)))
+      && (info->fps_d == 1) && (info->fps_n == 25)) {
+    encoder->x264param.vui.i_vidformat = 1;     /* PAL */
+  } else if ((((info->height == 480) && ((info->width == 720)
+                  || (info->width == 704) || (info->width == 352)))
+          || ((info->height == 240) && (info->width == 352)))
+      && (info->fps_d == 1001) && ((info->fps_n == 30000)
+          || (info->fps_n == 24000))) {
+    encoder->x264param.vui.i_vidformat = 2;     /* NTSC */
+  } else {
+    encoder->x264param.vui.i_vidformat = 5;     /* unspecified */
+  }
+
+  if (!encoder->insert_vui)
+    goto skip_vui_parameters;
+
+  encoder->x264param.vui.i_colorprim =
+      gst_video_color_primaries_to_iso (info->colorimetry.primaries);
+
+  encoder->x264param.vui.i_transfer =
+      gst_video_transfer_function_to_iso (info->colorimetry.transfer);
+
+  encoder->x264param.vui.i_colmatrix =
+      gst_video_color_matrix_to_iso (info->colorimetry.matrix);
+
+  if (info->colorimetry.range == GST_VIDEO_COLOR_RANGE_0_255) {
+    encoder->x264param.vui.b_fullrange = 1;
+  } else {
+    encoder->x264param.vui.b_fullrange = 0;
+  }
+
+  switch (info->chroma_site) {
+    case GST_VIDEO_CHROMA_SITE_MPEG2:
+      encoder->x264param.vui.i_chroma_loc = 0;
+      break;
+    case GST_VIDEO_CHROMA_SITE_JPEG:
+      encoder->x264param.vui.i_chroma_loc = 1;
+      break;
+    case GST_VIDEO_CHROMA_SITE_V_COSITED:
+      encoder->x264param.vui.i_chroma_loc = 3;
+      break;
+    case GST_VIDEO_CHROMA_SITE_DV:
+      encoder->x264param.vui.i_chroma_loc = 2;
+      break;
+    default:
+      encoder->x264param.vui.i_chroma_loc = 0;
+      break;
+  }
+
+skip_vui_parameters:
+
+  encoder->x264param.analyse.b_psnr = 0;
+
+  bitrate =
+      gst_encoder_bitrate_profile_manager_get_bitrate (encoder->bitrate_manager,
+      encoder->input_state ? &encoder->input_state->info : NULL);
+
+  /* FIXME 2.0 make configuration more sane and consistent with x264 cmdline:
+   * + split pass property into a pass property (pass1/2/3 enum) and rc-method
+   * + bitrate property should only be used in case of CBR method
+   * + vbv bitrate/buffer should have separate configuration that is then
+   *   applied independently of the mode:
+   *    + either using properties (new) vbv-maxrate and (renamed) vbv-bufsize
+   *    + or dropping vbv-buf-capacity altogether and simply using option-string
+   */
+  switch (encoder->pass) {
+    case GST_X264_ENC_PASS_QUANT:
+      encoder->x264param.rc.i_rc_method = X264_RC_CQP;
+      encoder->x264param.rc.i_qp_constant = encoder->quantizer;
+      break;
+    case GST_X264_ENC_PASS_QUAL:
+      encoder->x264param.rc.i_rc_method = X264_RC_CRF;
+      encoder->x264param.rc.f_rf_constant = encoder->quantizer;
+      encoder->x264param.rc.i_vbv_max_bitrate = bitrate;
+      encoder->x264param.rc.i_vbv_buffer_size
+          = encoder->x264param.rc.i_vbv_max_bitrate
+          * encoder->vbv_buf_capacity / 1000;
+      break;
+    case GST_X264_ENC_PASS_CBR:
+    case GST_X264_ENC_PASS_PASS1:
+    case GST_X264_ENC_PASS_PASS2:
+    case GST_X264_ENC_PASS_PASS3:
+    default:
+      encoder->x264param.rc.i_rc_method = X264_RC_ABR;
+      encoder->x264param.rc.i_bitrate = bitrate;
+      encoder->x264param.rc.i_vbv_max_bitrate = bitrate;
+      encoder->x264param.rc.i_vbv_buffer_size =
+          encoder->x264param.rc.i_vbv_max_bitrate
+          * encoder->vbv_buf_capacity / 1000;
+      pass = encoder->pass & 0xF;
+      break;
+  }
+
+  switch (pass) {
+    case 0:
+      encoder->x264param.rc.b_stat_read = 0;
+      encoder->x264param.rc.b_stat_write = 0;
+      break;
+    case 1:
+      encoder->x264param.rc.b_stat_read = 0;
+      encoder->x264param.rc.b_stat_write = 1;
+      encoder->vtable->x264_param_apply_fastfirstpass (&encoder->x264param);
+      encoder->x264param.i_frame_reference = 1;
+      encoder->x264param.analyse.b_transform_8x8 = 0;
+      encoder->x264param.analyse.inter = 0;
+      encoder->x264param.analyse.i_me_method = X264_ME_DIA;
+      encoder->x264param.analyse.i_subpel_refine =
+          MIN (2, encoder->x264param.analyse.i_subpel_refine);
+      encoder->x264param.analyse.i_trellis = 0;
+      encoder->x264param.analyse.b_fast_pskip = 1;
+      break;
+    case 2:
+      encoder->x264param.rc.b_stat_read = 1;
+      encoder->x264param.rc.b_stat_write = 0;
+      break;
+    case 3:
+      encoder->x264param.rc.b_stat_read = 1;
+      encoder->x264param.rc.b_stat_write = 1;
+      break;
+  }
+
+  if (encoder->peer_profile) {
+    if (encoder->vtable->x264_param_apply_profile (&encoder->x264param,
+            encoder->peer_profile))
+      GST_WARNING_OBJECT (encoder, "Bad downstream profile name: %s",
+          encoder->peer_profile);
+  }
+
+  /* If using an intra profile, all frames are intra frames */
+  if (encoder->peer_intra_profile)
+    encoder->x264param.i_keyint_max = encoder->x264param.i_keyint_min = 1;
+
+  /* Enforce level limits if they were in the caps */
+  if (encoder->peer_level_idc != -1) {
+    gint i;
+    const x264_level_t *peer_level = NULL;
+
+    for (i = 0; (*encoder->vtable->x264_levels)[i].level_idc; i++) {
+      if (encoder->peer_level_idc ==
+          (*encoder->vtable->x264_levels)[i].level_idc) {
+        int mb_width = (info->width + 15) / 16;
+        int mb_height = (info->height + 15) / 16;
+        int mbs = mb_width * mb_height;
+
+        if ((*encoder->vtable->x264_levels)[i].frame_size < mbs ||
+            (*encoder->vtable->x264_levels)[i].frame_size * 8 <
+            mb_width * mb_width
+            || (*encoder->vtable->x264_levels)[i].frame_size * 8 <
+            mb_height * mb_height) {
+          GST_WARNING_OBJECT (encoder,
+              "Frame size larger than level %d allows",
+              encoder->peer_level_idc);
+          break;
+        }
+
+        if (info->fps_d && (*encoder->vtable->x264_levels)[i].mbps
+            < (gint64) mbs * info->fps_n / info->fps_d) {
+          GST_WARNING_OBJECT (encoder,
+              "Macroblock rate higher than level %d allows",
+              encoder->peer_level_idc);
+          break;
+        }
+
+        peer_level = &(*encoder->vtable->x264_levels)[i];
+        break;
+      }
+    }
+
+    if (!peer_level)
+      goto unlock_and_return;
+
+    encoder->x264param.i_level_idc = peer_level->level_idc;
+
+    encoder->x264param.rc.i_bitrate = MIN (encoder->x264param.rc.i_bitrate,
+        peer_level->bitrate);
+    encoder->x264param.rc.i_vbv_max_bitrate =
+        MIN (encoder->x264param.rc.i_vbv_max_bitrate, peer_level->bitrate);
+    encoder->x264param.rc.i_vbv_buffer_size =
+        MIN (encoder->x264param.rc.i_vbv_buffer_size, peer_level->cpb);
+    encoder->x264param.analyse.i_mv_range =
+        MIN (encoder->x264param.analyse.i_mv_range, peer_level->mv_range);
+
+    if (peer_level->frame_only) {
+      encoder->x264param.b_interlaced = FALSE;
+      encoder->x264param.b_fake_interlaced = FALSE;
+    }
+  }
+
+  if (GST_VIDEO_INFO_IS_INTERLACED (info)) {
+    encoder->x264param.b_interlaced = TRUE;
+    if (GST_VIDEO_INFO_INTERLACE_MODE (info) == GST_VIDEO_INTERLACE_MODE_MIXED) {
+      encoder->x264param.b_pic_struct = TRUE;
+    }
+    if (GST_VIDEO_INFO_FIELD_ORDER (info) ==
+        GST_VIDEO_FIELD_ORDER_TOP_FIELD_FIRST) {
+      encoder->x264param.b_tff = TRUE;
+    } else {
+      encoder->x264param.b_tff = FALSE;
+    }
+  } else {
+    encoder->x264param.b_interlaced = FALSE;
+  }
+
+  /* Set 3D frame packing */
+  if (encoder->frame_packing != GST_VIDEO_MULTIVIEW_MODE_NONE)
+    encoder->x264param.i_frame_packing = encoder->frame_packing;
+  else
+    encoder->x264param.i_frame_packing =
+        gst_x264_enc_mview_mode_to_frame_packing (GST_VIDEO_INFO_MULTIVIEW_MODE
+        (info));
+
+  GST_DEBUG_OBJECT (encoder, "Stereo frame packing = %d",
+      encoder->x264param.i_frame_packing);
+
+  encoder->reconfig = FALSE;
+
+  GST_OBJECT_UNLOCK (encoder);
+
+  encoder->x264enc = encoder->vtable->x264_encoder_open (&encoder->x264param);
+  if (!encoder->x264enc) {
+    GST_ELEMENT_ERROR (encoder, STREAM, ENCODE,
+        ("Can not initialize x264 encoder."), (NULL));
+    return FALSE;
+  }
+
+  return TRUE;
+
+unlock_and_return:
+  GST_OBJECT_UNLOCK (encoder);
+  return FALSE;
+}
+
+/* gst_x264_enc_close_encoder
+ * @encoder:  Encoder which should close.
+ *
+ * Close x264 encoder.
+ */
+static void
+gst_x264_enc_close_encoder (GstX264Enc * encoder)
+{
+  if (encoder->x264enc != NULL) {
+    encoder->vtable->x264_encoder_close (encoder->x264enc);
+    encoder->x264enc = NULL;
+  }
+  encoder->vtable = NULL;
+}
+
+static gboolean
+gst_x264_enc_set_profile_and_level (GstX264Enc * encoder, GstCaps * caps)
+{
+  x264_nal_t *nal;
+  int i_nal;
+  int header_return;
+  gint sps_ni = 0;
+  guint8 *sps;
+  GstStructure *s;
+  const gchar *profile;
+  GstCaps *allowed_caps;
+  GstStructure *s2;
+  const gchar *allowed_profile;
+
+  header_return =
+      encoder->vtable->x264_encoder_headers (encoder->x264enc, &nal, &i_nal);
+  if (header_return < 0) {
+    GST_ELEMENT_ERROR (encoder, STREAM, ENCODE, ("Encode x264 header failed."),
+        ("x264_encoder_headers return code=%d", header_return));
+    return FALSE;
+  }
+
+  /* old x264 returns SEI, SPS and PPS, newer one has SEI last */
+  if (i_nal == 3 && nal[sps_ni].i_type != 7)
+    sps_ni = 1;
+
+  sps = nal[sps_ni].p_payload + 4;
+  /* skip NAL unit type */
+  sps++;
+
+  gst_codec_utils_h264_caps_set_level_and_profile (caps, sps, 3);
+
+  /* Constrained baseline is a strict subset of baseline. If downstream
+   * wanted baseline and we produced constrained baseline, we can just
+   * set the profile to baseline in the caps to make negotiation happy.
+   * Same goes for baseline as subset of main profile and main as a subset
+   * of high profile.
+   */
+  s = gst_caps_get_structure (caps, 0);
+  profile = gst_structure_get_string (s, "profile");
+
+  allowed_caps = gst_pad_get_allowed_caps (GST_VIDEO_ENCODER_SRC_PAD (encoder));
+
+  if (allowed_caps == NULL)
+    goto no_peer;
+
+  if (!gst_caps_can_intersect (allowed_caps, caps)) {
+    allowed_caps = gst_caps_make_writable (allowed_caps);
+    allowed_caps = gst_caps_truncate (allowed_caps);
+    s2 = gst_caps_get_structure (allowed_caps, 0);
+    gst_structure_fixate_field_string (s2, "profile", profile);
+    allowed_profile = gst_structure_get_string (s2, "profile");
+    if (!strcmp (allowed_profile, "high")) {
+      if (!strcmp (profile, "constrained-baseline")
+          || !strcmp (profile, "baseline") || !strcmp (profile, "main")) {
+        gst_structure_set (s, "profile", G_TYPE_STRING, "high", NULL);
+        GST_INFO_OBJECT (encoder, "downstream requested high profile, but "
+            "encoder will now output %s profile (which is a subset), due "
+            "to how it's been configured", profile);
+      }
+    } else if (!strcmp (allowed_profile, "main")) {
+      if (!strcmp (profile, "constrained-baseline")
+          || !strcmp (profile, "baseline")) {
+        gst_structure_set (s, "profile", G_TYPE_STRING, "main", NULL);
+        GST_INFO_OBJECT (encoder, "downstream requested main profile, but "
+            "encoder will now output %s profile (which is a subset), due "
+            "to how it's been configured", profile);
+      }
+    } else if (!strcmp (allowed_profile, "baseline")) {
+      if (!strcmp (profile, "constrained-baseline"))
+        gst_structure_set (s, "profile", G_TYPE_STRING, "baseline", NULL);
+    }
+  }
+  gst_caps_unref (allowed_caps);
+
+no_peer:
+
+  return TRUE;
+}
+
+/*
+ * Returns: Buffer with the stream headers.
+ */
+static GstBuffer *
+gst_x264_enc_header_buf (GstX264Enc * encoder)
+{
+  GstBuffer *buf;
+  x264_nal_t *nal;
+  int i_nal;
+  int header_return;
+  int i_size;
+  int nal_size;
+  guint8 *buffer, *sps;
+  gulong buffer_size;
+  gint sei_ni = 2, sps_ni = 0, pps_ni = 1;
+
+  if (G_UNLIKELY (encoder->x264enc == NULL))
+    return NULL;
+
+  /* Create avcC header. */
+
+  header_return =
+      encoder->vtable->x264_encoder_headers (encoder->x264enc, &nal, &i_nal);
+  if (header_return < 0) {
+    GST_ELEMENT_ERROR (encoder, STREAM, ENCODE, ("Encode x264 header failed."),
+        ("x264_encoder_headers return code=%d", header_return));
+    return NULL;
+  }
+
+  /* old x264 returns SEI, SPS and PPS, newer one has SEI last */
+  if (i_nal == 3 && nal[sps_ni].i_type != 7) {
+    sei_ni = 0;
+    sps_ni = 1;
+    pps_ni = 2;
+  }
+
+  /* x264 is expected to return an SEI (some identification info),
+   * and SPS and PPS */
+  if (i_nal != 3 || nal[sps_ni].i_type != 7 || nal[pps_ni].i_type != 8 ||
+      nal[sps_ni].i_payload < 4 || nal[pps_ni].i_payload < 1) {
+    GST_ELEMENT_ERROR (encoder, STREAM, ENCODE, (NULL),
+        ("Unexpected x264 header."));
+    return NULL;
+  }
+
+  GST_MEMDUMP ("SEI", nal[sei_ni].p_payload, nal[sei_ni].i_payload);
+  GST_MEMDUMP ("SPS", nal[sps_ni].p_payload, nal[sps_ni].i_payload);
+  GST_MEMDUMP ("PPS", nal[pps_ni].p_payload, nal[pps_ni].i_payload);
+
+  /* nal payloads with emulation_prevention_three_byte, and some header data */
+  buffer_size = (nal[sps_ni].i_payload + nal[pps_ni].i_payload) * 4 + 100;
+  buffer = g_malloc (buffer_size);
+
+  sps = nal[sps_ni].p_payload + 4;
+  /* skip NAL unit type */
+  sps++;
+
+  buffer[0] = 1;                /* AVC Decoder Configuration Record ver. 1 */
+  buffer[1] = sps[0];           /* profile_idc                             */
+  buffer[2] = sps[1];           /* profile_compability                     */
+  buffer[3] = sps[2];           /* level_idc                               */
+  buffer[4] = 0xfc | (4 - 1);   /* nal_length_size_minus1                  */
+
+  i_size = 5;
+
+  buffer[i_size++] = 0xe0 | 1;  /* number of SPSs */
+
+  nal_size = nal[sps_ni].i_payload - 4;
+  memcpy (buffer + i_size + 2, nal[sps_ni].p_payload + 4, nal_size);
+
+  GST_WRITE_UINT16_BE (buffer + i_size, nal_size);
+  i_size += nal_size + 2;
+
+  buffer[i_size++] = 1;         /* number of PPSs */
+
+  nal_size = nal[pps_ni].i_payload - 4;
+  memcpy (buffer + i_size + 2, nal[pps_ni].p_payload + 4, nal_size);
+
+  GST_WRITE_UINT16_BE (buffer + i_size, nal_size);
+  i_size += nal_size + 2;
+
+  buf = gst_buffer_new_and_alloc (i_size);
+  gst_buffer_fill (buf, 0, buffer, i_size);
+
+  GST_MEMDUMP ("header", buffer, i_size);
+  g_free (buffer);
+
+  return buf;
+}
+
+/* gst_x264_enc_set_src_caps
+ * Returns: TRUE on success.
+ */
+static gboolean
+gst_x264_enc_set_src_caps (GstX264Enc * encoder, GstCaps * caps)
+{
+  GstCaps *outcaps;
+  GstStructure *structure;
+  GstVideoCodecState *state;
+  GstTagList *tags;
+  guint bitrate =
+      gst_encoder_bitrate_profile_manager_get_bitrate (encoder->bitrate_manager,
+      encoder->input_state ? &encoder->input_state->info : NULL);
+
+  outcaps = gst_caps_new_empty_simple ("video/x-h264");
+  structure = gst_caps_get_structure (outcaps, 0);
+
+  if (encoder->current_byte_stream == GST_X264_ENC_STREAM_FORMAT_FROM_PROPERTY) {
+    if (encoder->byte_stream) {
+      encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_BYTE_STREAM;
+    } else {
+      encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_AVC;
+    }
+  }
+  if (encoder->current_byte_stream == GST_X264_ENC_STREAM_FORMAT_AVC) {
+    GstBuffer *buf = gst_x264_enc_header_buf (encoder);
+    if (buf != NULL) {
+      gst_caps_set_simple (outcaps, "codec_data", GST_TYPE_BUFFER, buf, NULL);
+      gst_buffer_unref (buf);
+    }
+    gst_structure_set (structure, "stream-format", G_TYPE_STRING, "avc", NULL);
+  } else {
+    gst_structure_set (structure, "stream-format", G_TYPE_STRING, "byte-stream",
+        NULL);
+  }
+  gst_structure_set (structure, "alignment", G_TYPE_STRING, "au", NULL);
+
+  if (!gst_x264_enc_set_profile_and_level (encoder, outcaps)) {
+    gst_caps_unref (outcaps);
+    return FALSE;
+  }
+
+  state = gst_video_encoder_set_output_state (GST_VIDEO_ENCODER (encoder),
+      outcaps, encoder->input_state);
+  GST_DEBUG_OBJECT (encoder, "output caps: %" GST_PTR_FORMAT, state->caps);
+
+  /* If set, local frame packing setting overrides any upstream config */
+  switch (encoder->frame_packing) {
+    case 0:
+      GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
+          GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD;
+      break;
+    case 1:
+      GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
+          GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED;
+      break;
+    case 2:
+      GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
+          GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED;
+      break;
+    case 3:
+      GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
+          GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE;
+      break;
+    case 4:
+      GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
+          GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM;
+      break;
+    case 5:
+      GST_VIDEO_INFO_MULTIVIEW_MODE (&state->info) =
+          GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME;
+      break;
+    default:
+      break;
+  }
+
+  gst_video_codec_state_unref (state);
+
+  tags = gst_tag_list_new_empty ();
+  gst_tag_list_add (tags, GST_TAG_MERGE_REPLACE, GST_TAG_ENCODER, "x264",
+      GST_TAG_ENCODER_VERSION, X264_BUILD,
+      GST_TAG_MAXIMUM_BITRATE, bitrate * 1024,
+      GST_TAG_NOMINAL_BITRATE, bitrate * 1024, NULL);
+  gst_video_encoder_merge_tags (GST_VIDEO_ENCODER (encoder), tags,
+      GST_TAG_MERGE_REPLACE);
+  gst_tag_list_unref (tags);
+
+  return TRUE;
+}
+
+static void
+gst_x264_enc_set_latency (GstX264Enc * encoder)
+{
+  GstVideoInfo *info = &encoder->input_state->info;
+  gint max_delayed_frames;
+  GstClockTime latency;
+
+  max_delayed_frames =
+      encoder->vtable->x264_encoder_maximum_delayed_frames (encoder->x264enc);
+
+  if (info->fps_n) {
+    latency = gst_util_uint64_scale_ceil (GST_SECOND * info->fps_d,
+        max_delayed_frames, info->fps_n);
+  } else {
+    /* FIXME: Assume 25fps. This is better than reporting no latency at
+     * all and then later failing in live pipelines
+     */
+    latency = gst_util_uint64_scale_ceil (GST_SECOND * 1,
+        max_delayed_frames, 25);
+  }
+
+  GST_INFO_OBJECT (encoder,
+      "Updating latency to %" GST_TIME_FORMAT " (%d frames)",
+      GST_TIME_ARGS (latency), max_delayed_frames);
+
+  gst_video_encoder_set_latency (GST_VIDEO_ENCODER (encoder), latency, latency);
+}
+
+static gboolean
+gst_x264_enc_set_format (GstVideoEncoder * video_enc,
+    GstVideoCodecState * state)
+{
+  GstX264Enc *encoder = GST_X264_ENC (video_enc);
+  GstVideoInfo *info = &state->info;
+  GstCaps *template_caps;
+  GstCaps *allowed_caps = NULL;
+
+  /* If the encoder is initialized, do not reinitialize it again if not
+   * necessary */
+  if (encoder->x264enc) {
+    GstVideoInfo *old = &encoder->input_state->info;
+
+    if (info->finfo->format == old->finfo->format
+        && info->width == old->width && info->height == old->height
+        && info->fps_n == old->fps_n && info->fps_d == old->fps_d
+        && info->par_n == old->par_n && info->par_d == old->par_d) {
+      gst_video_codec_state_unref (encoder->input_state);
+      encoder->input_state = gst_video_codec_state_ref (state);
+      return TRUE;
+    }
+
+    /* clear out pending frames */
+    gst_x264_enc_flush_frames (encoder, TRUE);
+
+    encoder->sps_id++;
+  }
+
+  if (encoder->input_state)
+    gst_video_codec_state_unref (encoder->input_state);
+  encoder->input_state = gst_video_codec_state_ref (state);
+
+  encoder->peer_profile = NULL;
+  encoder->peer_intra_profile = FALSE;
+  encoder->peer_level_idc = -1;
+
+  template_caps = gst_static_pad_template_get_caps (&src_factory);
+  allowed_caps = gst_pad_get_allowed_caps (GST_VIDEO_ENCODER_SRC_PAD (encoder));
+
+  /* Output byte-stream if downstream has ANY caps, it's what people expect,
+   * and it makes more sense too */
+  if (allowed_caps == template_caps) {
+    GST_INFO_OBJECT (encoder,
+        "downstream has ANY caps, outputting byte-stream");
+    encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_BYTE_STREAM;
+    g_string_append_printf (encoder->option_string, ":annexb=1");
+    gst_caps_unref (allowed_caps);
+  } else if (allowed_caps) {
+    GstStructure *s;
+    const gchar *profile;
+    const gchar *level;
+    const gchar *stream_format;
+
+    if (gst_caps_is_empty (allowed_caps)) {
+      gst_caps_unref (allowed_caps);
+      gst_caps_unref (template_caps);
+      return FALSE;
+    }
+
+    allowed_caps = gst_caps_make_writable (allowed_caps);
+    allowed_caps = gst_caps_fixate (allowed_caps);
+    s = gst_caps_get_structure (allowed_caps, 0);
+
+    profile = gst_structure_get_string (s, "profile");
+    if (profile) {
+      /* FIXME - if libx264 ever adds support for FMO, ASO or redundant slices
+       * make sure constrained profile has a separate case which disables
+       * those */
+      if (g_str_has_suffix (profile, "-intra")) {
+        encoder->peer_intra_profile = TRUE;
+      }
+      if (!strcmp (profile, "constrained-baseline") ||
+          !strcmp (profile, "baseline")) {
+        encoder->peer_profile = "baseline";
+      } else if (g_str_has_prefix (profile, "high-10")) {
+        encoder->peer_profile = "high10";
+      } else if (g_str_has_prefix (profile, "high-4:2:2")) {
+        encoder->peer_profile = "high422";
+      } else if (g_str_has_prefix (profile, "high-4:4:4")) {
+        encoder->peer_profile = "high444";
+      } else if (g_str_has_prefix (profile, "high")) {
+        encoder->peer_profile = "high";
+      } else if (!strcmp (profile, "main")) {
+        encoder->peer_profile = "main";
+      } else {
+        g_assert_not_reached ();
+      }
+    }
+
+    level = gst_structure_get_string (s, "level");
+    if (level) {
+      encoder->peer_level_idc = gst_codec_utils_h264_get_level_idc (level);
+    }
+
+    stream_format = gst_structure_get_string (s, "stream-format");
+    encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_FROM_PROPERTY;
+    if (stream_format) {
+      if (!strcmp (stream_format, "avc")) {
+        encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_AVC;
+        g_string_append_printf (encoder->option_string, ":annexb=0");
+      } else if (!strcmp (stream_format, "byte-stream")) {
+        encoder->current_byte_stream = GST_X264_ENC_STREAM_FORMAT_BYTE_STREAM;
+        g_string_append_printf (encoder->option_string, ":annexb=1");
+      } else {
+        /* means we have both in caps and _FROM_PROPERTY should be the option */
+      }
+    }
+
+    gst_caps_unref (allowed_caps);
+  }
+
+  gst_caps_unref (template_caps);
+
+  if (!gst_x264_enc_init_encoder (encoder))
+    return FALSE;
+
+  if (!gst_x264_enc_set_src_caps (encoder, state->caps)) {
+    gst_x264_enc_close_encoder (encoder);
+    return FALSE;
+  }
+
+  gst_x264_enc_set_latency (encoder);
+
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_x264_enc_finish (GstVideoEncoder * encoder)
+{
+  gst_x264_enc_flush_frames (GST_X264_ENC (encoder), TRUE);
+  return GST_FLOW_OK;
+}
+
+static gboolean
+gst_x264_enc_propose_allocation (GstVideoEncoder * encoder, GstQuery * query)
+{
+  GstX264Enc *self = GST_X264_ENC (encoder);
+  GstVideoInfo *info;
+  guint num_buffers;
+
+  gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL);
+
+  if (!self->input_state)
+    return FALSE;
+
+  if (self->vtable == NULL)
+    return FALSE;
+
+  info = &self->input_state->info;
+  num_buffers =
+      self->vtable->x264_encoder_maximum_delayed_frames (self->x264enc) + 1;
+
+  gst_query_add_allocation_pool (query, NULL, info->size, num_buffers, 0);
+
+  return GST_VIDEO_ENCODER_CLASS (parent_class)->propose_allocation (encoder,
+      query);
+}
+
+static void
+gst_x264_enc_add_cc (GstBuffer * buffer, x264_picture_t * pic_in)
+{
+  GstVideoCaptionMeta *cc_meta;
+  gpointer iter = NULL;
+
+  while ((cc_meta =
+          (GstVideoCaptionMeta *) gst_buffer_iterate_meta_filtered (buffer,
+              &iter, GST_VIDEO_CAPTION_META_API_TYPE))) {
+    guint i = pic_in->extra_sei.num_payloads;
+
+    if (cc_meta->caption_type != GST_VIDEO_CAPTION_TYPE_CEA708_RAW)
+      continue;
+
+    pic_in->extra_sei.num_payloads += 1;
+
+    if (!pic_in->extra_sei.payloads)
+      pic_in->extra_sei.payloads = g_new0 (x264_sei_payload_t, 1);
+    else
+      pic_in->extra_sei.payloads =
+          g_renew (x264_sei_payload_t, pic_in->extra_sei.payloads,
+          pic_in->extra_sei.num_payloads);
+
+    pic_in->extra_sei.sei_free = g_free;
+
+    pic_in->extra_sei.payloads[i].payload_size = cc_meta->size + 11;
+    pic_in->extra_sei.payloads[i].payload =
+        g_malloc0 (pic_in->extra_sei.payloads[i].payload_size);
+    pic_in->extra_sei.payloads[i].payload_type = 4;     /* Registered user data */
+    memcpy (pic_in->extra_sei.payloads[i].payload + 10, cc_meta->data,
+        cc_meta->size);
+    pic_in->extra_sei.payloads[i].payload[0] = 181;     /* 8-bits itu_t_t35_country_code */
+    pic_in->extra_sei.payloads[i].payload[1] = 0;       /* 16-bits itu_t_t35_provider_code */
+    pic_in->extra_sei.payloads[i].payload[2] = 49;
+    pic_in->extra_sei.payloads[i].payload[3] = 'G';     /* 32-bits ATSC_user_identifier */
+    pic_in->extra_sei.payloads[i].payload[4] = 'A';
+    pic_in->extra_sei.payloads[i].payload[5] = '9';
+    pic_in->extra_sei.payloads[i].payload[6] = '4';
+    pic_in->extra_sei.payloads[i].payload[7] = 3;       /* 8-bits ATSC1_data_user_data_type_code */
+    /* 8-bits:
+     * 1 bit process_em_data_flag (0)
+     * 1 bit process_cc_data_flag (1)
+     * 1 bit additional_data_flag (0)
+     * 5-bits cc_count
+     */
+    pic_in->extra_sei.payloads[i].payload[8] =
+        ((cc_meta->size / 3) & 0x1f) | 0x40;
+    pic_in->extra_sei.payloads[i].payload[9] = 255;     /* 8 bits em_data, unused */
+    pic_in->extra_sei.payloads[i].payload[cc_meta->size + 10] = 255;    /* 8 marker bits */
+  }
+}
+
+/* chain function
+ * this function does the actual processing
+ */
+static GstFlowReturn
+gst_x264_enc_handle_frame (GstVideoEncoder * video_enc,
+    GstVideoCodecFrame * frame)
+{
+  GstX264Enc *encoder = GST_X264_ENC (video_enc);
+  GstVideoInfo *info = &encoder->input_state->info;
+  GstFlowReturn ret;
+  x264_picture_t pic_in;
+  gint i_nal, i;
+  FrameData *fdata;
+  gint nplanes = encoder->x264_nplanes;
+
+  if (G_UNLIKELY (encoder->x264enc == NULL))
+    goto not_inited;
+
+  /* create x264_picture_t from the buffer */
+  /* mostly taken from mplayer (file ve_x264.c) */
+
+  /* set up input picture */
+  memset (&pic_in, 0, sizeof (pic_in));
+
+  fdata = gst_x264_enc_queue_frame (encoder, frame, info);
+  if (!fdata)
+    goto invalid_frame;
+
+  pic_in.img.i_csp = encoder->x264param.i_csp;
+  pic_in.img.i_plane = nplanes;
+  for (i = 0; i < nplanes; i++) {
+    pic_in.img.plane[i] = GST_VIDEO_FRAME_COMP_DATA (&fdata->vframe, i);
+    pic_in.img.i_stride[i] = GST_VIDEO_FRAME_COMP_STRIDE (&fdata->vframe, i);
+  }
+
+  pic_in.i_type = X264_TYPE_AUTO;
+  pic_in.i_pts = frame->pts;
+  pic_in.opaque = GINT_TO_POINTER (frame->system_frame_number);
+
+  if (GST_VIDEO_INFO_INTERLACE_MODE (info) == GST_VIDEO_INTERLACE_MODE_MIXED) {
+    if ((fdata->vframe.flags & GST_VIDEO_FRAME_FLAG_INTERLACED) == 0) {
+      pic_in.i_pic_struct = PIC_STRUCT_PROGRESSIVE;
+    } else if ((fdata->vframe.flags & GST_VIDEO_FRAME_FLAG_RFF) != 0) {
+      if ((fdata->vframe.flags & GST_VIDEO_FRAME_FLAG_TFF) != 0) {
+        pic_in.i_pic_struct = PIC_STRUCT_TOP_BOTTOM_TOP;
+      } else {
+        pic_in.i_pic_struct = PIC_STRUCT_BOTTOM_TOP_BOTTOM;
+      }
+    } else {
+      if ((fdata->vframe.flags & GST_VIDEO_FRAME_FLAG_TFF) != 0) {
+        pic_in.i_pic_struct = PIC_STRUCT_TOP_BOTTOM;
+      } else {
+        pic_in.i_pic_struct = PIC_STRUCT_BOTTOM_TOP;
+      }
+    }
+  }
+
+  gst_x264_enc_add_cc (frame->input_buffer, &pic_in);
+
+  ret = gst_x264_enc_encode_frame (encoder, &pic_in, frame, &i_nal, TRUE);
+
+  /* input buffer is released later on */
+  return ret;
+
+/* ERRORS */
+not_inited:
+  {
+    GST_WARNING_OBJECT (encoder, "Got buffer before set_caps was called");
+    return GST_FLOW_NOT_NEGOTIATED;
+  }
+invalid_frame:
+  {
+    GST_ERROR_OBJECT (encoder, "Failed to map frame");
+    return GST_FLOW_ERROR;
+  }
+}
+
+static GstFlowReturn
+gst_x264_enc_encode_frame (GstX264Enc * encoder, x264_picture_t * pic_in,
+    GstVideoCodecFrame * input_frame, int *i_nal, gboolean send)
+{
+  GstVideoCodecFrame *frame = NULL;
+  GstBuffer *out_buf = NULL;
+  x264_picture_t pic_out;
+  x264_nal_t *nal;
+  int i_size;
+  int encoder_return;
+  GstFlowReturn ret = GST_FLOW_OK;
+  guint8 *data;
+  gboolean update_latency = FALSE;
+
+  if (G_UNLIKELY (encoder->x264enc == NULL)) {
+    if (input_frame)
+      gst_video_codec_frame_unref (input_frame);
+    return GST_FLOW_NOT_NEGOTIATED;
+  }
+
+  GST_OBJECT_LOCK (encoder);
+  if (encoder->reconfig) {
+    encoder->reconfig = FALSE;
+    if (encoder->vtable->x264_encoder_reconfig (encoder->x264enc,
+            &encoder->x264param) < 0)
+      GST_WARNING_OBJECT (encoder, "Could not reconfigure");
+    update_latency = TRUE;
+  }
+
+  if (pic_in && input_frame) {
+    if (GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME (input_frame)) {
+      GST_INFO_OBJECT (encoder, "Forcing key frame");
+      if (encoder->intra_refresh)
+        encoder->vtable->x264_encoder_intra_refresh (encoder->x264enc);
+      else
+        pic_in->i_type = X264_TYPE_IDR;
+    }
+  }
+  GST_OBJECT_UNLOCK (encoder);
+
+  if (G_UNLIKELY (update_latency))
+    gst_x264_enc_set_latency (encoder);
+
+  encoder_return = encoder->vtable->x264_encoder_encode (encoder->x264enc,
+      &nal, i_nal, pic_in, &pic_out);
+
+  if (encoder_return < 0) {
+    GST_ELEMENT_ERROR (encoder, STREAM, ENCODE, ("Encode x264 frame failed."),
+        ("x264_encoder_encode return code=%d", encoder_return));
+    ret = GST_FLOW_ERROR;
+    /* Make sure we finish this frame */
+    frame = input_frame;
+    goto out;
+  }
+
+  /* Input frame is now queued */
+  if (input_frame)
+    gst_video_codec_frame_unref (input_frame);
+
+  if (!*i_nal) {
+    ret = GST_FLOW_OK;
+    goto out;
+  }
+
+  i_size = encoder_return;
+  data = nal[0].p_payload;
+
+  frame = gst_video_encoder_get_frame (GST_VIDEO_ENCODER (encoder),
+      GPOINTER_TO_INT (pic_out.opaque));
+  g_assert (frame || !send);
+
+  if (!send || !frame) {
+    ret = GST_FLOW_OK;
+    goto out;
+  }
+
+  out_buf = gst_buffer_new_allocate (NULL, i_size, NULL);
+  gst_buffer_fill (out_buf, 0, data, i_size);
+  frame->output_buffer = out_buf;
+
+  GST_LOG_OBJECT (encoder,
+      "output: dts %" G_GINT64_FORMAT " pts %" G_GINT64_FORMAT,
+      (gint64) pic_out.i_dts, (gint64) pic_out.i_pts);
+
+  /* we want to know if x264 is messing around with this */
+  g_assert (frame->pts == pic_out.i_pts);
+
+  frame->dts = pic_out.i_dts;
+  frame->pts = pic_out.i_pts;
+
+  if (pic_out.b_keyframe) {
+    GST_DEBUG_OBJECT (encoder, "Output keyframe");
+    GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT (frame);
+  }
+
+out:
+  if (frame) {
+    gst_x264_enc_dequeue_frame (encoder, frame);
+    ret = gst_video_encoder_finish_frame (GST_VIDEO_ENCODER (encoder), frame);
+  }
+
+  return ret;
+}
+
+static void
+gst_x264_enc_flush_frames (GstX264Enc * encoder, gboolean send)
+{
+  GstFlowReturn flow_ret;
+  gint i_nal;
+
+  /* first send the remaining frames */
+  if (encoder->x264enc)
+    do {
+      flow_ret = gst_x264_enc_encode_frame (encoder, NULL, NULL, &i_nal, send);
+    } while (flow_ret == GST_FLOW_OK
+        && encoder->vtable->x264_encoder_delayed_frames (encoder->x264enc) > 0);
+}
+
+static void
+gst_x264_enc_reconfig (GstX264Enc * encoder)
+{
+  guint bitrate;
+
+  if (!encoder->vtable)
+    return;
+
+  bitrate =
+      gst_encoder_bitrate_profile_manager_get_bitrate (encoder->bitrate_manager,
+      encoder->input_state ? &encoder->input_state->info : NULL);
+  switch (encoder->pass) {
+    case GST_X264_ENC_PASS_QUAL:
+      encoder->x264param.rc.f_rf_constant = encoder->quantizer;
+      encoder->x264param.rc.i_vbv_max_bitrate = bitrate;
+      encoder->x264param.rc.i_vbv_buffer_size
+          = encoder->x264param.rc.i_vbv_max_bitrate
+          * encoder->vbv_buf_capacity / 1000;
+      break;
+    case GST_X264_ENC_PASS_CBR:
+    case GST_X264_ENC_PASS_PASS1:
+    case GST_X264_ENC_PASS_PASS2:
+    case GST_X264_ENC_PASS_PASS3:
+    default:
+      encoder->x264param.rc.i_bitrate = bitrate;
+      encoder->x264param.rc.i_vbv_max_bitrate = bitrate;
+      encoder->x264param.rc.i_vbv_buffer_size
+          = encoder->x264param.rc.i_vbv_max_bitrate
+          * encoder->vbv_buf_capacity / 1000;
+      break;
+  }
+
+  encoder->reconfig = TRUE;
+}
+
+static void
+gst_x264_enc_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstX264Enc *encoder;
+  GstState state;
+
+  const gchar *partitions = NULL;
+
+  encoder = GST_X264_ENC (object);
+
+  GST_OBJECT_LOCK (encoder);
+  /* state at least matters for sps, bytestream, pass,
+   * and so by extension ... */
+
+  state = GST_STATE (encoder);
+  if ((state != GST_STATE_READY && state != GST_STATE_NULL) &&
+      !(pspec->flags & GST_PARAM_MUTABLE_PLAYING))
+    goto wrong_state;
+
+  switch (prop_id) {
+    case ARG_PASS:
+      encoder->pass = g_value_get_enum (value);
+      break;
+    case ARG_QUANTIZER:
+      encoder->quantizer = g_value_get_uint (value);
+      gst_x264_enc_reconfig (encoder);
+      break;
+    case ARG_BITRATE:
+      gst_encoder_bitrate_profile_manager_set_bitrate (encoder->bitrate_manager,
+          g_value_get_uint (value));
+      gst_x264_enc_reconfig (encoder);
+      break;
+    case ARG_VBV_BUF_CAPACITY:
+      encoder->vbv_buf_capacity = g_value_get_uint (value);
+      gst_x264_enc_reconfig (encoder);
+      break;
+    case ARG_SPEED_PRESET:
+      encoder->speed_preset = g_value_get_enum (value);
+      break;
+    case ARG_PSY_TUNE:
+      encoder->psy_tune = g_value_get_enum (value);
+      break;
+    case ARG_TUNE:
+      encoder->tune = g_value_get_flags (value);
+      break;
+    case ARG_OPTION_STRING:
+      g_string_assign (encoder->option_string_prop, g_value_get_string (value));
+      break;
+    case ARG_THREADS:
+      encoder->threads = g_value_get_uint (value);
+      g_string_append_printf (encoder->option_string, ":threads=%d",
+          encoder->threads);
+      break;
+    case ARG_SLICED_THREADS:
+      encoder->sliced_threads = g_value_get_boolean (value);
+      g_string_append_printf (encoder->option_string, ":sliced-threads=%d",
+          encoder->sliced_threads);
+      break;
+    case ARG_SYNC_LOOKAHEAD:
+      encoder->sync_lookahead = g_value_get_int (value);
+      g_string_append_printf (encoder->option_string, ":sync-lookahead=%d",
+          encoder->sync_lookahead);
+      break;
+    case ARG_MULTIPASS_CACHE_FILE:
+      g_free (encoder->mp_cache_file);
+      encoder->mp_cache_file = g_value_dup_string (value);
+      g_string_append_printf (encoder->option_string, ":stats=%s",
+          encoder->mp_cache_file);
+      break;
+    case ARG_BYTE_STREAM:
+      encoder->byte_stream = g_value_get_boolean (value);
+      g_string_append_printf (encoder->option_string, ":annexb=%d",
+          encoder->byte_stream);
+      break;
+    case ARG_INTRA_REFRESH:
+      encoder->intra_refresh = g_value_get_boolean (value);
+      g_string_append_printf (encoder->option_string, ":intra-refresh=%d",
+          encoder->intra_refresh);
+      break;
+    case ARG_ME:
+      encoder->me = g_value_get_enum (value);
+      g_string_append_printf (encoder->option_string, ":me=%s",
+          x264_motion_est_names[encoder->me]);
+      break;
+    case ARG_SUBME:
+      encoder->subme = g_value_get_uint (value);
+      g_string_append_printf (encoder->option_string, ":subme=%d",
+          encoder->subme);
+      break;
+    case ARG_ANALYSE:
+      encoder->analyse = g_value_get_flags (value);
+      partitions = gst_x264_enc_build_partitions (encoder->analyse);
+      if (partitions) {
+        g_string_append_printf (encoder->option_string, ":partitions=%s",
+            partitions);
+        g_free ((gpointer) partitions);
+      }
+      break;
+    case ARG_DCT8x8:
+      encoder->dct8x8 = g_value_get_boolean (value);
+      g_string_append_printf (encoder->option_string, ":8x8dct=%d",
+          encoder->dct8x8);
+      break;
+    case ARG_REF:
+      encoder->ref = g_value_get_uint (value);
+      g_string_append_printf (encoder->option_string, ":ref=%d", encoder->ref);
+      break;
+    case ARG_BFRAMES:
+      encoder->bframes = g_value_get_uint (value);
+      g_string_append_printf (encoder->option_string, ":bframes=%d",
+          encoder->bframes);
+      break;
+    case ARG_B_ADAPT:
+      encoder->b_adapt = g_value_get_boolean (value);
+      g_string_append_printf (encoder->option_string, ":b-adapt=%d",
+          encoder->b_adapt);
+      break;
+    case ARG_B_PYRAMID:
+      encoder->b_pyramid = g_value_get_boolean (value);
+      g_string_append_printf (encoder->option_string, ":b-pyramid=%s",
+          x264_b_pyramid_names[encoder->b_pyramid]);
+      break;
+    case ARG_WEIGHTB:
+      encoder->weightb = g_value_get_boolean (value);
+      g_string_append_printf (encoder->option_string, ":weightb=%d",
+          encoder->weightb);
+      break;
+    case ARG_SPS_ID:
+      encoder->sps_id = g_value_get_uint (value);
+      g_string_append_printf (encoder->option_string, ":sps-id=%d",
+          encoder->sps_id);
+      break;
+    case ARG_AU_NALU:
+      encoder->au_nalu = g_value_get_boolean (value);
+      g_string_append_printf (encoder->option_string, ":aud=%d",
+          encoder->au_nalu);
+      break;
+    case ARG_TRELLIS:
+      encoder->trellis = g_value_get_boolean (value);
+      g_string_append_printf (encoder->option_string, ":trellis=%d",
+          encoder->trellis);
+      break;
+    case ARG_KEYINT_MAX:
+      encoder->keyint_max = g_value_get_uint (value);
+      g_string_append_printf (encoder->option_string, ":keyint=%d",
+          encoder->keyint_max);
+      break;
+    case ARG_CABAC:
+      encoder->cabac = g_value_get_boolean (value);
+      g_string_append_printf (encoder->option_string, ":cabac=%d",
+          encoder->cabac);
+      break;
+    case ARG_QP_MIN:
+      encoder->qp_min = g_value_get_uint (value);
+      g_string_append_printf (encoder->option_string, ":qpmin=%d",
+          encoder->qp_min);
+      break;
+    case ARG_QP_MAX:
+      encoder->qp_max = g_value_get_uint (value);
+      g_string_append_printf (encoder->option_string, ":qpmax=%d",
+          encoder->qp_max);
+      break;
+    case ARG_QP_STEP:
+      encoder->qp_step = g_value_get_uint (value);
+      g_string_append_printf (encoder->option_string, ":qpstep=%d",
+          encoder->qp_step);
+      break;
+    case ARG_IP_FACTOR:
+      encoder->ip_factor = g_value_get_float (value);
+      g_string_append_printf (encoder->option_string, ":ip-factor=%f",
+          encoder->ip_factor);
+      break;
+    case ARG_PB_FACTOR:
+      encoder->pb_factor = g_value_get_float (value);
+      g_string_append_printf (encoder->option_string, ":pb-factor=%f",
+          encoder->pb_factor);
+      break;
+    case ARG_RC_MB_TREE:
+      encoder->mb_tree = g_value_get_boolean (value);
+      g_string_append_printf (encoder->option_string, ":mbtree=%d",
+          encoder->mb_tree);
+      break;
+    case ARG_RC_LOOKAHEAD:
+      encoder->rc_lookahead = g_value_get_int (value);
+      g_string_append_printf (encoder->option_string, ":rc-lookahead=%d",
+          encoder->rc_lookahead);
+      break;
+    case ARG_NR:
+      encoder->noise_reduction = g_value_get_uint (value);
+      g_string_append_printf (encoder->option_string, ":nr=%d",
+          encoder->noise_reduction);
+      break;
+    case ARG_INTERLACED:
+      encoder->interlaced = g_value_get_boolean (value);
+      break;
+    case ARG_FRAME_PACKING:
+      encoder->frame_packing = g_value_get_enum (value);
+      break;
+    case ARG_INSERT_VUI:
+      encoder->insert_vui = g_value_get_boolean (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+  GST_OBJECT_UNLOCK (encoder);
+  return;
+
+  /* ERROR */
+wrong_state:
+  {
+    GST_WARNING_OBJECT (encoder, "setting property in wrong state");
+    GST_OBJECT_UNLOCK (encoder);
+  }
+}
+
+static void
+gst_x264_enc_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstX264Enc *encoder;
+
+  encoder = GST_X264_ENC (object);
+
+  GST_OBJECT_LOCK (encoder);
+  switch (prop_id) {
+    case ARG_THREADS:
+      g_value_set_uint (value, encoder->threads);
+      break;
+    case ARG_SLICED_THREADS:
+      g_value_set_boolean (value, encoder->sliced_threads);
+      break;
+    case ARG_SYNC_LOOKAHEAD:
+      g_value_set_int (value, encoder->sync_lookahead);
+      break;
+    case ARG_PASS:
+      g_value_set_enum (value, encoder->pass);
+      break;
+    case ARG_QUANTIZER:
+      g_value_set_uint (value, encoder->quantizer);
+      break;
+    case ARG_MULTIPASS_CACHE_FILE:
+      g_value_set_string (value, encoder->mp_cache_file);
+      break;
+    case ARG_BYTE_STREAM:
+      g_value_set_boolean (value, encoder->byte_stream);
+      break;
+    case ARG_BITRATE:
+      g_value_set_uint (value,
+          gst_encoder_bitrate_profile_manager_get_bitrate
+          (encoder->bitrate_manager, NULL));
+      break;
+    case ARG_INTRA_REFRESH:
+      g_value_set_boolean (value, encoder->intra_refresh);
+      break;
+    case ARG_VBV_BUF_CAPACITY:
+      g_value_set_uint (value, encoder->vbv_buf_capacity);
+      break;
+    case ARG_ME:
+      g_value_set_enum (value, encoder->me);
+      break;
+    case ARG_SUBME:
+      g_value_set_uint (value, encoder->subme);
+      break;
+    case ARG_ANALYSE:
+      g_value_set_flags (value, encoder->analyse);
+      break;
+    case ARG_DCT8x8:
+      g_value_set_boolean (value, encoder->dct8x8);
+      break;
+    case ARG_REF:
+      g_value_set_uint (value, encoder->ref);
+      break;
+    case ARG_BFRAMES:
+      g_value_set_uint (value, encoder->bframes);
+      break;
+    case ARG_B_ADAPT:
+      g_value_set_boolean (value, encoder->b_adapt);
+      break;
+    case ARG_B_PYRAMID:
+      g_value_set_boolean (value, encoder->b_pyramid);
+      break;
+    case ARG_WEIGHTB:
+      g_value_set_boolean (value, encoder->weightb);
+      break;
+    case ARG_SPS_ID:
+      g_value_set_uint (value, encoder->sps_id);
+      break;
+    case ARG_AU_NALU:
+      g_value_set_boolean (value, encoder->au_nalu);
+      break;
+    case ARG_TRELLIS:
+      g_value_set_boolean (value, encoder->trellis);
+      break;
+    case ARG_KEYINT_MAX:
+      g_value_set_uint (value, encoder->keyint_max);
+      break;
+    case ARG_QP_MIN:
+      g_value_set_uint (value, encoder->qp_min);
+      break;
+    case ARG_QP_MAX:
+      g_value_set_uint (value, encoder->qp_max);
+      break;
+    case ARG_QP_STEP:
+      g_value_set_uint (value, encoder->qp_step);
+      break;
+    case ARG_CABAC:
+      g_value_set_boolean (value, encoder->cabac);
+      break;
+    case ARG_IP_FACTOR:
+      g_value_set_float (value, encoder->ip_factor);
+      break;
+    case ARG_PB_FACTOR:
+      g_value_set_float (value, encoder->pb_factor);
+      break;
+    case ARG_RC_MB_TREE:
+      g_value_set_boolean (value, encoder->mb_tree);
+      break;
+    case ARG_RC_LOOKAHEAD:
+      g_value_set_int (value, encoder->rc_lookahead);
+      break;
+    case ARG_NR:
+      g_value_set_uint (value, encoder->noise_reduction);
+      break;
+    case ARG_INTERLACED:
+      g_value_set_boolean (value, encoder->interlaced);
+      break;
+    case ARG_SPEED_PRESET:
+      g_value_set_enum (value, encoder->speed_preset);
+      break;
+    case ARG_PSY_TUNE:
+      g_value_set_enum (value, encoder->psy_tune);
+      break;
+    case ARG_TUNE:
+      g_value_set_flags (value, encoder->tune);
+      break;
+    case ARG_OPTION_STRING:
+      g_value_set_string (value, encoder->option_string_prop->str);
+      break;
+    case ARG_FRAME_PACKING:
+      g_value_set_enum (value, encoder->frame_packing);
+      break;
+    case ARG_INSERT_VUI:
+      g_value_set_boolean (value, encoder->insert_vui);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+  GST_OBJECT_UNLOCK (encoder);
+}
+
+static gboolean
+x264_element_init (GstPlugin * plugin)
+{
+  GST_DEBUG_CATEGORY_INIT (x264_enc_debug, "x264enc", 0,
+      "h264 encoding element");
+
+  GST_INFO ("linked against x264 build: %u", X264_BUILD);
+
+  /* Initialize the static GstX264EncVTable which is overridden in load_x264()
+   * if needed. We can't initialize statically because these values are not
+   * constant on Windows. */
+  default_vtable.module = NULL;
+#if X264_BUILD < 153
+  default_vtable.x264_bit_depth = &x264_bit_depth;
+#endif
+  default_vtable.x264_chroma_format = &x264_chroma_format;
+  default_vtable.x264_encoder_close = x264_encoder_close;
+  default_vtable.x264_encoder_delayed_frames = x264_encoder_delayed_frames;
+  default_vtable.x264_encoder_encode = x264_encoder_encode;
+  default_vtable.x264_encoder_headers = x264_encoder_headers;
+  default_vtable.x264_encoder_intra_refresh = x264_encoder_intra_refresh;
+  default_vtable.x264_encoder_maximum_delayed_frames =
+      x264_encoder_maximum_delayed_frames;
+  default_vtable.x264_encoder_open = x264_encoder_open;
+  default_vtable.x264_encoder_reconfig = x264_encoder_reconfig;
+  default_vtable.x264_levels = &x264_levels;
+  default_vtable.x264_param_apply_fastfirstpass =
+      x264_param_apply_fastfirstpass;
+  default_vtable.x264_param_apply_profile = x264_param_apply_profile;
+  default_vtable.x264_param_default_preset = x264_param_default_preset;
+  default_vtable.x264_param_parse = x264_param_parse;
+
+  if (!load_x264_libraries ())
+    return FALSE;
+
+  return gst_element_register (plugin, "x264enc",
+      GST_RANK_PRIMARY, GST_TYPE_X264_ENC);
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  return GST_ELEMENT_REGISTER (x264enc, plugin);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    x264,
+    "libx264-based H264 plugins",
+    plugin_init, VERSION, "GPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/subprojects/gst-plugins-ugly/ext/x264/gstx264enc.h b/subprojects/gst-plugins-ugly/ext/x264/gstx264enc.h
new file mode 100644 (file)
index 0000000..6cbfc5c
--- /dev/null
@@ -0,0 +1,144 @@
+/* GStreamer H264 encoder plugin
+ * Copyright (C) 2005 Michal Benes <michal.benes@itonis.tv>
+ * Copyright (C) 2005 Josef Zlomek <josef.zlomek@itonis.tv>
+ * Copyright (C) 2016 Sebastian Dröge <sebastian@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_X264_ENC_H__
+#define __GST_X264_ENC_H__
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+#include <gst/video/gstvideoencoder.h>
+#include "gstencoderbitrateprofilemanager.h"
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+/* The x264.h header says this isn't needed with MinGW, but sometimes the
+ * compiler is unable to correctly do the pointer indirection for us, which
+ * leads to a segfault when you try to dereference any const values provided
+ * by x264.dll. See: https://bugzilla.gnome.org/show_bug.cgi?id=779249 */
+#if defined(_WIN32) && !defined(X264_API_IMPORTS)
+# define X264_API_IMPORTS
+#endif
+#include <x264.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_X264_ENC \
+  (gst_x264_enc_get_type())
+#define GST_X264_ENC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_X264_ENC,GstX264Enc))
+#define GST_X264_ENC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_X264_ENC,GstX264EncClass))
+#define GST_IS_X264_ENC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_X264_ENC))
+#define GST_IS_X264_ENC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_X264_ENC))
+
+typedef struct _GstX264Enc GstX264Enc;
+typedef struct _GstX264EncClass GstX264EncClass;
+typedef struct _GstX264EncVTable GstX264EncVTable;
+
+struct _GstX264Enc
+{
+  GstVideoEncoder element;
+
+  /*< private >*/
+  GstX264EncVTable *vtable;
+  x264_t *x264enc;
+  x264_param_t x264param;
+  gint current_byte_stream;
+
+  /* List of frame/buffer mapping structs for
+   * pending frames */
+  GList *pending_frames;
+
+  /* properties */
+  guint threads;
+  gboolean sliced_threads;
+  gint sync_lookahead;
+  gint pass;
+  guint quantizer;
+  gchar *mp_cache_file;
+  gboolean byte_stream;
+  guint bitrate;
+  gboolean intra_refresh;
+  gint me;
+  guint subme;
+  guint analyse;
+  gboolean dct8x8;
+  guint ref;
+  guint bframes;
+  gboolean b_adapt;
+  gboolean b_pyramid;
+  gboolean weightb;
+  guint sps_id;
+  gboolean au_nalu;
+  gboolean trellis;
+  guint vbv_buf_capacity;
+  guint keyint_max;
+  gboolean cabac;
+  gfloat ip_factor;
+  gfloat pb_factor;
+  guint qp_min;
+  guint qp_max;
+  guint qp_step;
+  gboolean mb_tree;
+  gint rc_lookahead;
+  guint noise_reduction;
+  gboolean interlaced;
+  gint speed_preset;
+  gint psy_tune;
+  guint tune;
+  GString *tunings;
+  GString *option_string_prop; /* option-string property */
+  GString *option_string; /* used by set prop */
+  gint frame_packing;
+  gboolean insert_vui;
+
+  /* input description */
+  GstVideoCodecState *input_state;
+
+  /* configuration changed  while playing */
+  gboolean reconfig;
+
+  /* from the downstream caps */
+  const gchar *peer_profile;
+  gboolean peer_intra_profile;
+  gint peer_level_idc;
+
+  /* cached values to set x264_picture_t */
+  gint x264_nplanes;
+
+  GstEncoderBitrateProfileManager *bitrate_manager;
+};
+
+struct _GstX264EncClass
+{
+  GstVideoEncoderClass parent_class;
+};
+
+GType gst_x264_enc_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (x264enc);
+
+G_END_DECLS
+
+#endif /* __GST_X264_ENC_H__ */
diff --git a/subprojects/gst-plugins-ugly/ext/x264/meson.build b/subprojects/gst-plugins-ugly/ext/x264/meson.build
new file mode 100644 (file)
index 0000000..fdbfeeb
--- /dev/null
@@ -0,0 +1,31 @@
+x264_sources = [
+  'gstx264enc.c',
+  'gstencoderbitrateprofilemanager.c',
+]
+
+x264_dep = dependency('x264', required : get_option('x264'),
+                      fallback: ['x264', 'libx264_dep'])
+
+if x264_dep.found()
+  x264_libraries = get_option('x264_libraries')
+  x264_args = []
+  if x264_libraries != ''
+    x264_args += ['-DHAVE_X264_ADDITIONAL_LIBRARIES="@0@"'.format(x264_libraries)]
+    extra_gmodule_dep = [gmodule_dep]
+  else
+    extra_gmodule_dep = []
+  endif
+
+  gstx264 = library('gstx264',
+    x264_sources,
+    c_args : ugly_args + x264_args,
+    include_directories : [configinc],
+    dependencies : [gstbase_dep, gstvideo_dep, gstpbutils_dep, x264_dep] + extra_gmodule_dep,
+    install : true,
+    install_dir : plugins_install_dir,
+  )
+  pkgconfig.generate(gstx264, install_dir : plugins_pkgconfig_install_dir)
+  plugins += [gstx264]
+
+  install_data(sources: 'GstX264Enc.prs', install_dir: presetdir)
+endif
diff --git a/subprojects/gst-plugins-ugly/gst-libs/gst/gettext.h b/subprojects/gst-plugins-ugly/gst-libs/gst/gettext.h
new file mode 100644 (file)
index 0000000..fc70ab7
--- /dev/null
@@ -0,0 +1,69 @@
+/* Convenience header for conditional use of GNU <libintl.h>.
+   Copyright (C) 1995-1998, 2000-2002 Free Software Foundation, Inc.
+
+   This program 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, or (at your option)
+   any later version.
+
+   This program 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 program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifndef _LIBGETTEXT_H
+#define _LIBGETTEXT_H 1
+
+/* NLS can be disabled through the configure --disable-nls option.  */
+#ifdef ENABLE_NLS
+
+/* Get declarations of GNU message catalog functions.  */
+# include <libintl.h>
+
+#else
+
+/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
+   chokes if dcgettext is defined as a macro.  So include it now, to make
+   later inclusions of <locale.h> a NOP.  We don't include <libintl.h>
+   as well because people using "gettext.h" will not include <libintl.h>,
+   and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
+   is OK.  */
+#if defined(__sun)
+# include <locale.h>
+#endif
+
+/* Disabled NLS.
+   The casts to 'const char *' serve the purpose of producing warnings
+   for invalid uses of the value returned from these functions.
+   On pre-ANSI systems without 'const', the config.h file is supposed to
+   contain "#define const".  */
+# define gettext(Msgid) ((const char *) (Msgid))
+# define dgettext(Domainname, Msgid) ((const char *) (Msgid))
+# define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid))
+# define ngettext(Msgid1, Msgid2, N) \
+    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define dngettext(Domainname, Msgid1, Msgid2, N) \
+    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
+    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define textdomain(Domainname) ((const char *) (Domainname))
+# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname))
+# define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset))
+
+#endif
+
+/* A pseudo function call that serves as a marker for the automated
+   extraction of messages, but does not call gettext().  The run-time
+   translation is done at a different place in the code.
+   The argument, String, should be a literal string.  Concatenated strings
+   and other string expressions won't work.
+   The macro's expansion is not parenthesized, so that it is suitable as
+   initializer for static 'char[]' or 'const char[]' variables.  */
+#define gettext_noop(String) String
+
+#endif /* _LIBGETTEXT_H */
diff --git a/subprojects/gst-plugins-ugly/gst-libs/gst/glib-compat-private.h b/subprojects/gst-plugins-ugly/gst-libs/gst/glib-compat-private.h
new file mode 100644 (file)
index 0000000..8f37de2
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * glib-compat.c
+ * Functions copied from glib 2.10
+ *
+ * Copyright 2005 David Schleef <ds@schleef.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GLIB_COMPAT_PRIVATE_H__
+#define __GLIB_COMPAT_PRIVATE_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+/* copies */
+
+/* adaptations */
+
+G_END_DECLS
+
+#endif
diff --git a/subprojects/gst-plugins-ugly/gst-libs/gst/gst-i18n-plugin.h b/subprojects/gst-plugins-ugly/gst-libs/gst/gst-i18n-plugin.h
new file mode 100644 (file)
index 0000000..4d92b90
--- /dev/null
@@ -0,0 +1,37 @@
+/* GStreamer
+ * Copyright (C) 2004 Thomas Vander Stichele <thomas@apestaart.org>
+ *
+ * gst-i18n-plugins.h: internationalization macros for the GStreamer plugins
+ *
+ * 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_I18N_PLUGIN_H__
+#define __GST_I18N_PLUGIN_H__
+
+#include <locale.h>  /* some people need it and some people don't */
+#include "gettext.h" /* included with gettext distribution and copied */
+
+#ifndef GETTEXT_PACKAGE
+#error You must define GETTEXT_PACKAGE before including this header.
+#endif
+
+/* we want to use shorthand _() for translating and N_() for marking */
+#define _(String) dgettext (GETTEXT_PACKAGE, String)
+#define N_(String) gettext_noop (String)
+/* FIXME: if we need it, we can add Q_ as well, like in glib */
+
+#endif /* __GST_I18N_PLUGIN_H__ */
diff --git a/subprojects/gst-plugins-ugly/gst-plugins-ugly.doap b/subprojects/gst-plugins-ugly/gst-plugins-ugly.doap
new file mode 100644 (file)
index 0000000..3b25aed
--- /dev/null
@@ -0,0 +1,875 @@
+<Project
+  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+  xmlns="http://usefulinc.com/ns/doap#"
+  xmlns:foaf="http://xmlns.com/foaf/0.1/"
+  xmlns:admin="http://webns.net/mvcb/">
+
+ <name>GStreamer Ugly Plug-ins</name>
+ <shortname>gst-plugins-ugly</shortname>
+ <homepage rdf:resource="http://gstreamer.freedesktop.org/modules/gst-plugins-ugly.html" />
+ <created>2005-09-06</created>
+ <shortdesc xml:lang="en">
+a set of good-quality plug-ins with license or patent problems.
+</shortdesc>
+ <description xml:lang="en">
+GStreamer Ugly Plug-ins is a set of plug-ins that have good quality and correct
+functionality, but distributing them might pose problems. The license on either
+the plug-ins or the supporting libraries might not be how we'd like. The code
+might be widely known to present patent problems.
+ </description>
+ <category></category>
+ <bug-database rdf:resource="https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/issues/" />
+ <screenshots></screenshots>
+ <mailing-list rdf:resource="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" />
+ <programming-language>C</programming-language>
+ <license rdf:resource="http://usefulinc.com/doap/licenses/lgpl"/>
+ <download-page rdf:resource="http://gstreamer.freedesktop.org/download/" />
+
+ <repository>
+   <GitRepository>
+     <location rdf:resource="git://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly"/>
+     <browse rdf:resource="http://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly"/>
+   </GitRepository>
+ </repository>
+
+ <release>
+  <Version>
+   <revision>1.19.2</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2021-09-23</created>
+   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.19.2.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.19.1</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2021-06-01</created>
+   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.19.1.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.18.0</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2020-09-08</created>
+   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.18.0.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.17.90</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2020-08-20</created>
+   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.17.90.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.17.2</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2020-07-03</created>
+   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.17.2.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.17.1</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2020-06-19</created>
+   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.17.1.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.16.0</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2019-04-19</created>
+   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.16.0.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.15.90</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2019-04-11</created>
+   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.15.90.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.15.2</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2019-02-26</created>
+   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.15.2.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.15.1</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2019-01-17</created>
+   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.15.1.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.14.0</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2018-03-19</created>
+   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.14.0.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.13.91</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2018-03-13</created>
+   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.13.91.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.13.90</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2018-03-03</created>
+   <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.13.90.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.13.1</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2018-02-15</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.13.1.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.12.4</revision>
+   <branch>1.12</branch>
+   <name></name>
+   <created>2017-12-07</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.12.4.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.12.3</revision>
+   <branch>1.12</branch>
+   <name></name>
+   <created>2017-09-18</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.12.3.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.12.2</revision>
+   <branch>1.12</branch>
+   <name></name>
+   <created>2017-07-14</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.12.2.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.12.1</revision>
+   <branch>1.12</branch>
+   <name></name>
+   <created>2017-06-20</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.12.1.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.12.0</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2017-05-04</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.12.0.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.11.91</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2017-04-27</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.11.91.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.11.90</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2017-04-07</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.11.90.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.11.2</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2017-02-24</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.11.2.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.11.1</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2017-01-12</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.11.1.tar.xz" />
+  </Version>
+ </release>
+
+  <release>
+  <Version>
+   <revision>1.10.0</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2016-11-01</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.10.0.tar.xz" />
+  </Version>
+ </release>
+
+  <release>
+  <Version>
+   <revision>1.9.90</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2016-09-30</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.9.90.tar.xz" />
+  </Version>
+ </release>
+
+  <release>
+  <Version>
+   <revision>1.9.2</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2016-09-01</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.9.2.tar.xz" />
+  </Version>
+ </release>
+
+  <release>
+  <Version>
+   <revision>1.9.1</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2016-06-06</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.9.1.tar.xz" />
+  </Version>
+ </release>
+
+  <release>
+  <Version>
+   <revision>1.8.0</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2016-03-24</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.8.0.tar.xz" />
+  </Version>
+ </release>
+
+  <release>
+  <Version>
+   <revision>1.7.91</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2016-03-15</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.7.91.tar.xz" />
+  </Version>
+ </release>
+
+  <release>
+  <Version>
+   <revision>1.7.90</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2016-03-01</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.7.90.tar.xz" />
+  </Version>
+ </release>
+
+  <release>
+  <Version>
+   <revision>1.7.2</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2016-02-19</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.7.2.tar.xz" />
+  </Version>
+ </release>
+
+  <release>
+  <Version>
+   <revision>1.7.1</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2015-12-24</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.7.1.tar.xz" />
+  </Version>
+ </release>
+
+  <release>
+  <Version>
+   <revision>1.6.2</revision>
+   <branch>1.6</branch>
+   <name></name>
+   <created>2015-12-14</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.6.2.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.6.1</revision>
+   <branch>1.6</branch>
+   <name></name>
+   <created>2015-10-30</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.6.1.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.6.0</revision>
+   <branch>1.6</branch>
+   <name></name>
+   <created>2015-09-25</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.6.0.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.5.91</revision>
+   <branch>1.5</branch>
+   <name></name>
+   <created>2015-09-18</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.5.91.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.5.90</revision>
+   <branch>1.5</branch>
+   <name></name>
+   <created>2015-08-19</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.5.90.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.5.2</revision>
+   <branch>1.5</branch>
+   <name></name>
+   <created>2015-06-24</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.5.2.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.5.1</revision>
+   <branch>1.5</branch>
+   <name></name>
+   <created>2015-06-07</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.5.1.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.4.0</revision>
+   <branch>1.4</branch>
+   <name></name>
+   <created>2014-07-19</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.4.0.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.3.91</revision>
+   <branch>1.3</branch>
+   <name></name>
+   <created>2014-07-11</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.3.91.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.3.90</revision>
+   <branch>1.3</branch>
+   <name></name>
+   <created>2014-06-28</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.3.90.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.3.3</revision>
+   <branch>1.3</branch>
+   <name></name>
+   <created>2014-06-22</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.3.3.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.3.2</revision>
+   <branch>1.3</branch>
+   <name></name>
+   <created>2014-05-21</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.3.2.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.3.1</revision>
+   <branch>1.3</branch>
+   <name></name>
+   <created>2014-05-03</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.3.1.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.2.0</revision>
+   <branch>1.2</branch>
+   <name></name>
+   <created>2013-09-24</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.2.0.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.1.90</revision>
+   <branch>1.1</branch>
+   <name></name>
+   <created>2013-09-19</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.1.90.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.1.4</revision>
+   <branch>1.1</branch>
+   <name></name>
+   <created>2013-08-28</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.1.4.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.1.3</revision>
+   <branch>1.1</branch>
+   <name></name>
+   <created>2013-07-29</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.1.3.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.1.2</revision>
+   <branch>1.1</branch>
+   <name></name>
+   <created>2013-07-11</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.1.2.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.1.1</revision>
+   <branch>1.1</branch>
+   <name></name>
+   <created>2013-06-05</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.1.1.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.0.2</revision>
+   <branch>1.0</branch>
+   <name></name>
+   <created>2012-10-24</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.0.2.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.0.1</revision>
+   <branch>1.0</branch>
+   <name></name>
+   <created>2012-10-07</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.0.1.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>1.0.0</revision>
+   <branch>1.0</branch>
+   <name></name>
+   <created>2012-09-24</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-1.0.0.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.11.99</revision>
+   <branch>0.11</branch>
+   <name>Stole Many a Mans Soul and Faith</name>
+   <created>2012-09-17</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.99.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.11.94</revision>
+   <branch>0.11</branch>
+   <name>Rag Hummin'</name>
+   <created>2012-09-14</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.94.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.11.93</revision>
+   <branch>0.11</branch>
+   <name>Rag Doll Physics</name>
+   <created>2012-08-08</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.93.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.11.92</revision>
+   <branch>0.11</branch>
+   <name>Hey You</name>
+   <created>2012-06-07</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.92.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.11.91</revision>
+   <branch>0.11</branch>
+   <name>I’ll grind his bones to make my bread!</name>
+   <created>2012-05-13</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.91.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.11.90</revision>
+   <branch>0.11</branch>
+   <name>Is all that we see or seem but a dream within a dream?</name>
+   <created>2012-04-12</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.90.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.90.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.11.2</revision>
+   <branch>0.11</branch>
+   <name>Savior from Anger</name>
+   <created>2012-03-22</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.2.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.2.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.11.1</revision>
+   <branch>0.11</branch>
+   <name>Moonlapse Vertigo</name>
+   <created>2012-02-16</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.1.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.11.1.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.18</revision>
+   <branch>0.10</branch>
+   <name>Extra Life</name>
+   <created>2011-05-10</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.18.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.18.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.17</revision>
+   <branch>0.10</branch>
+   <name>Raised by Wolves</name>
+   <created>2011-01-21</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.17.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.17.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.16</revision>
+   <branch>0.10</branch>
+   <name>Because He Knows the Time is Short</name>
+   <created>2010-09-02</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.16.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.16.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.15</revision>
+   <branch>0.10</branch>
+   <name>Englishman in a Baseball Cap</name>
+   <created>2010-05-30</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.15.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.15.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.14</revision>
+   <branch>0.10</branch>
+   <name>Run Rabbit</name>
+   <created>2010-03-06</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.14.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.14.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.13</revision>
+   <branch>0.10</branch>
+   <name>Appointed Point</name>
+   <created>2009-10-21</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.13.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.13.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.12</revision>
+   <branch>0.10</branch>
+   <name>Moving Along The Highway</name>
+   <created>2009-06-18</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.12.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.12.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.11</revision>
+   <branch>0.10</branch>
+   <name>Their swords and their knives</name>
+   <created>2009-03-20</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.11.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.11.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.10</revision>
+   <branch>0.10</branch>
+   <name>Under the House</name>
+   <created>2008-11-19</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.10.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.10.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.9</revision>
+   <branch>0.10</branch>
+   <name>Back The Way It Was</name>
+   <created>2008-08-26</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.9.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.9.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.8</revision>
+   <branch>0.10</branch>
+   <name>And yet</name>
+   <created>2008-05-21</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.8.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.8.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.7</revision>
+   <branch>0.10</branch>
+   <name>I Cheated Time</name>
+   <created>2008-01-20</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.7.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.7.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.6</revision>
+   <branch>0.10</branch>
+   <name>The Sacrifice</name>
+   <created>2007-06-19</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.6.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.6.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.5</revision>
+   <branch>0.10</branch>
+   <name>She said</name>
+   <created>2006-12-13</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.5.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.5.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.4</revision>
+   <branch>0.10</branch>
+   <name>Metal Molly</name>
+   <created>2006-08-14</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.4.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.4.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.3</revision>
+   <branch>0.10</branch>
+   <name>Late Plane</name>
+   <created>2006-03-31</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.3.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.3.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.2</revision>
+   <branch>0.10</branch>
+   <name>Season to Taste</name>
+   <created>2006-02-20</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.2.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.2.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.1</revision>
+   <branch>0.10</branch>
+   <name>Peng</name>
+   <created>2006-01-13</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.1.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.1.tar.gz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
+   <revision>0.10.0</revision>
+   <branch>0.10</branch>
+   <name>Brie</name>
+   <created>2005-12-05</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.0.tar.bz2" />
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-0.10.0.tar.gz" />
+  </Version>
+ </release>
+
+ <maintainer>
+  <foaf:Person>
+     <foaf:name>Wim Taymans</foaf:name>
+     <foaf:mbox_sha1sum>0d93fde052812d51a05fd86de9bdbf674423daa2</foaf:mbox_sha1sum>
+  </foaf:Person>
+ </maintainer>
+
+</Project>
diff --git a/subprojects/gst-plugins-ugly/gst/asfdemux/README b/subprojects/gst-plugins-ugly/gst/asfdemux/README
new file mode 100644 (file)
index 0000000..d864eb0
--- /dev/null
@@ -0,0 +1,88 @@
+ASF Demuxer Plugin
+==================
+
+Overview
+--------
+
+This plugin is a demuxer for Microsoft's ASF Advanced Streaming Format
+or ASF [1]. This demuxer only supports ASF v1.0 since the vast
+majority of existing ASF files use that version. The specification
+has been derived from a third party source [2] without reference to
+the original.
+
+Design
+------
+
+The ASF format can carry any combination of audio, video or
+'ASF_Command_Media' streams. For simplicity it is assumed that each
+file can carry up to 16 audio streams and 16 video streams. These are
+implemented as dynamic pads and appear as appropriate once the file
+headers have been parsed.
+
+    (-------------------------)
+    ! asfdemux                !
+    !                    (video/raw0)---
+    !                    (video/raw1)---
+    !                    (video/raw...
+  --- src                     !
+    !                    (audio/raw0)---
+    !                    (audio/raw1)---
+    !                    (audio/raw...
+    !                         !
+    (-------------------------)
+
+
+Known stream fourccs are:
+
+Type           Tags            MIME type
+------------------------------------------
+H263           H263 I263       video/x-h263
+MJPEG          MJPG            image/jpeg      
+MPEG4          DIVX divx DX50  video/mpeg
+               XVID xvid mp4s  
+               MP4S M4S2 m4s2
+               0x04000000
+MSMPEG4V1      MPG4            video/mpeg
+MSMPEG4V2      MP42            video/mpeg
+MSMPEG4V3      MP43 DIV3       video/mpeg
+WMV1           WMV1            video/x-wmv, wmvversion = (int) 1
+WMV2           WMV2            video/x-wmv, wmvversion = (int) 2
+WMV3           WMV3            video/x-wmv, wmvversion = (int) 3
+WMA1           WMA1            audio/x-wma, wmaversion = (int) 1
+WMA2           WMA2            audio/x-wma, wmaversion = (int) 2
+                               audio/x-wma, wmaversion = (int) 3
+
+These video stream headers is very similar to that used in the AVI
+format as are the audio stream headers. In addition the content types
+are basically the same also so, for compatibility with existing
+plugins the src pads are set up as video/x-msvideo. This enables
+compatibility with the ffmpeg plugin.
+
+The demuxing process begins with the loop function gst_asf_demux_loop
+and parses the file in a recursive tree as follows:
+
+       gst_asf_demux_loop()
+       +-> gst_asf_demux_process_object()   <----
+           +-> gst_asf_demux_process_stream()    \
+           |-> gst_asf_demux_process_file()      |
+           |-> gst_asf_demux_process_header()  --+
+           |-> gst_asf_demux_process_data()
+               +-> gst_asf_demux_process_segment()
+                   +-> gst_asf_demux_process_chunk()
+
+Todo
+----
+
+- Support for ASF v2.0
+- Support for command media streams
+
+
+
+References
+----------
+
+[1] Microsoft. ASF Specification - Windows Media Technologies. 
+http://www.microsoft.com/windows/windowsmedia/format/asfspec.aspx (v01.20.01e, September 2003)
+
+[2] divx at euro.ru. ASF format version 1.0,
+reconstruction. http://avifile.sourceforge.net/asf-1.0.htm
diff --git a/subprojects/gst-plugins-ugly/gst/asfdemux/asfheaders.c b/subprojects/gst-plugins-ugly/gst/asfdemux/asfheaders.c
new file mode 100644 (file)
index 0000000..b8e8a3c
--- /dev/null
@@ -0,0 +1,212 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/gst.h>
+
+#include "asfheaders.h"
+
+const ASFGuidHash asf_payload_ext_guids[] = {
+  {ASF_PAYLOAD_EXTENSION_DURATION, "ASF_PAYLOAD_EXTENSION_DURATION",
+        {0xC6BD9450, 0x4907867F, 0x79C7A383, 0xAD33B721}
+      },
+  {ASF_PAYLOAD_EXTENSION_SYSTEM_CONTENT, "ASF_PAYLOAD_EXTENSION_SYSTEM_CONTENT",
+      {0xD590DC20, 0x436C07BC, 0xBBF3f79C, 0xDCA4F1FB}},
+  {ASF_PAYLOAD_EXTENSION_SYSTEM_PIXEL_ASPECT_RATIO,
+        "ASF_PAYLOAD_EXTENSION_SYSTEM_PIXEL_ASPECT_RATIO",
+      {0x1b1ee554, 0x4bc8f9ea, 0x6b371a82, 0xb8c4e474}},
+  {ASF_PAYLOAD_EXTENSION_TIMING, "ASF_PAYLOAD_EXTENSION_TIMING",
+      {0XFD3CC02A, 0X4CFA06DB, 0X12721C80, 0XE44587D3}},
+  {ASF_PAYLOAD_EXTENSION_UNDEFINED, "ASF_PAYLOAD_EXTENSION_UNDEFINED",
+        {0, 0, 0, 0}
+      }
+};
+
+const ASFGuidHash asf_correction_guids[] = {
+  {ASF_CORRECTION_ON, "ASF_CORRECTION_ON",
+        {0xBFC3CD50, 0x11CF618F, 0xAA00B28B, 0x20E2B400}
+      },
+  {ASF_CORRECTION_OFF, "ASF_CORRECTION_OFF",
+        {0x20FB5700, 0x11CF5B55, 0x8000FDA8, 0x2B445C5F}
+      },
+  /* CHECKME: where does this 49F1A440... GUID come from? (tpm) */
+  {ASF_CORRECTION_OFF, "ASF_CORRECTION_OFF",
+        {0x49F1A440, 0x11D04ECE, 0xA000ACA3, 0xF64803C9}
+      },
+  {ASF_CORRECTION_UNDEFINED, "ASF_CORRECTION_UNDEFINED",
+        {0, 0, 0, 0}
+      }
+};
+
+const ASFGuidHash asf_stream_guids[] = {
+  {ASF_STREAM_VIDEO, "ASF_STREAM_VIDEO",
+        {0xBC19EFC0, 0x11CF5B4D, 0x8000FDA8, 0x2B445C5F}
+      },
+  {ASF_STREAM_AUDIO, "ASF_STREAM_AUDIO",
+        {0xF8699E40, 0x11CF5B4D, 0x8000FDA8, 0x2B445C5F}
+      },
+  {ASF_STREAM_EXT_EMBED_HEADER, "ASF_STREAM_EXT_EMBED_HEADER",
+      {0X3AFB65E2, 0X40F247EF, 0XA9702CAC, 0X43D3710D}},
+  {ASF_STREAM_UNDEFINED, "ASF_STREAM_UNDEFINED",
+        {0, 0, 0, 0}
+      }
+};
+
+const ASFGuidHash asf_ext_stream_guids[] = {
+  {ASF_EXT_STREAM_AUDIO, "ASF_EXT_STREAM_AUDIO",
+        {0X31178C9D, 0X452803E1, 0XF93D82B5, 0X03F522DB}
+      },
+  {ASF_EXT_STREAM_UNDEFINED, "ASF_EXT_STREAM_UNDEFINED",
+        {0, 0, 0, 0}
+      }
+};
+
+const ASFGuidHash asf_object_guids[] = {
+  {ASF_OBJ_STREAM, "ASF_OBJ_STREAM",
+        {0xB7DC0791, 0x11CFA9B7, 0xC000E68E, 0x6553200C}
+      },
+  {ASF_OBJ_DATA, "ASF_OBJ_DATA",
+        {0x75b22636, 0x11cf668e, 0xAA00D9a6, 0x6Cce6200}
+      },
+  {ASF_OBJ_FILE, "ASF_OBJ_FILE",
+        {0x8CABDCA1, 0x11CFA947, 0xC000E48E, 0x6553200C}
+      },
+  {ASF_OBJ_HEADER, "ASF_OBJ_HEADER",
+        {0x75B22630, 0x11CF668E, 0xAA00D9A6, 0x6CCE6200}
+      },
+  {ASF_OBJ_CONCEAL_NONE, "ASF_OBJ_CONCEAL_NONE",
+        {0x20fb5700, 0x11cf5b55, 0x8000FDa8, 0x2B445C5f}
+      },
+  {ASF_OBJ_COMMENT, "ASF_OBJ_COMMENT",
+        {0x75b22633, 0x11cf668e, 0xAA00D9a6, 0x6Cce6200}
+      },
+  {ASF_OBJ_CODEC_COMMENT, "ASF_OBJ_CODEC_COMMENT",
+        {0x86D15240, 0x11D0311D, 0xA000A4A3, 0xF64803C9}
+      },
+  {ASF_OBJ_CODEC_COMMENT1, "ASF_OBJ_CODEC_COMMENT1",
+        {0x86d15241, 0x11d0311d, 0xA000A4a3, 0xF64803c9}
+      },
+  {ASF_OBJ_SIMPLE_INDEX, "ASF_OBJ_SIMPLE_INDEX",
+        {0x33000890, 0x11cfe5b1, 0xA000F489, 0xCB4903c9}
+      },
+  {ASF_OBJ_INDEX, "ASF_OBJ_INDEX",
+        {0xd6e229d3, 0x11d135da, 0xa0003490, 0xbe4903c9}
+      },
+  {ASF_OBJ_HEAD1, "ASF_OBJ_HEAD1",
+        {0x5fbf03b5, 0x11cfa92e, 0xC000E38e, 0x6553200c}
+      },
+  {ASF_OBJ_HEAD2, "ASF_OBJ_HEAD2",
+        {0xabd3d211, 0x11cfa9ba, 0xC000E68e, 0x6553200c}
+      },
+  {ASF_OBJ_PADDING, "ASF_OBJ_PADDING",
+        {0x1806D474, 0x4509CADF, 0xAB9ABAA4, 0xE8AA96CB}
+      },
+  {ASF_OBJ_BITRATE_PROPS, "ASF_OBJ_BITRATE_PROPS",
+        {0x7bf875ce, 0x11d1468d, 0x6000828d, 0xb2a2c997}
+      },
+  {ASF_OBJ_EXT_CONTENT_DESC, "ASF_OBJ_EXT_CONTENT_DESC",
+        {0xd2d0a440, 0x11d2e307, 0xa000f097, 0x50a85ec9}
+      },
+  {ASF_OBJ_BITRATE_MUTEX, "ASF_OBJ_BITRATE_MUTEX",
+        {0xd6e229dc, 0x11d135da, 0xa0003490, 0xbe4903c9}
+      },
+  {ASF_OBJ_LANGUAGE_LIST, "ASF_OBJ_LANGUAGE_LIST",
+        {0x7c4346a9, 0x4bfcefe0, 0x3e3929b2, 0x855c41de}
+      },
+  {ASF_OBJ_METADATA_OBJECT, "ASF_OBJ_METADATA_OBJECT",
+        {0xc5f8cbea, 0x48775baf, 0x8caa6784, 0xca4cfa44}
+      },
+  {ASF_OBJ_EXTENDED_STREAM_PROPS, "ASF_OBJ_EXTENDED_STREAM_PROPS",
+        {0x14e6a5cb, 0x4332c672, 0x69a99983, 0x5a5b0652}
+      },
+  {ASF_OBJ_COMPATIBILITY, "ASF_OBJ_COMPATIBILITY",
+        {0x26f18b5d, 0x47ec4584, 0x650e5f9f, 0xc952041f}
+      },
+  {ASF_OBJ_INDEX_PLACEHOLDER, "ASF_OBJ_INDEX_PLACEHOLDER",
+        {0xd9aade20, 0x4f9c7c17, 0x558528bc, 0xa2e298dd}
+      },
+  {ASF_OBJ_INDEX_PARAMETERS, "ASF_OBJ_INDEX_PARAMETERS",
+        {0xd6e229df, 0x11d135da, 0xa0003490, 0xbe4903c9}
+      },
+  {ASF_OBJ_ADVANCED_MUTUAL_EXCLUSION, "ASF_OBJ_ADVANCED_MUTUAL_EXCLUSION",
+        {0xa08649cf, 0x46704775, 0x356e168a, 0xcd667535}
+      },
+  {ASF_OBJ_STREAM_PRIORITIZATION, "ASF_OBJ_STREAM_PRIORITIZATION",
+        {0xd4fed15b, 0x454f88d3, 0x5cedf081, 0x249e9945}
+      },
+  {ASF_OBJ_CONTENT_ENCRYPTION, "ASF_OBJ_CONTENT_ENCRYPTION",
+        {0x2211b3fb, 0x11d2bd23, 0xa000b7b4, 0x6efc55c9}
+      },
+  {ASF_OBJ_EXT_CONTENT_ENCRYPTION, "ASF_OBJ_EXT_CONTENT_ENCRYPTION",
+        {0x298ae614, 0x4c172622, 0xe0da35b9, 0x9c28e97e}
+      },
+  {ASF_OBJ_DIGITAL_SIGNATURE_OBJECT, "ASF_OBJ_DIGITAL_SIGNATURE_OBJECT",
+        {0x2211b3fc, 0x11d2bd23, 0xa000b7b4, 0x6efc55c9}
+      },
+  {ASF_OBJ_SCRIPT_COMMAND, "ASF_OBJ_SCRIPT_COMMAND",
+        {0x1efb1a30, 0x11d00b62, 0xa0009ba3, 0xf64803c9}
+      },
+  {ASF_OBJ_MARKER, "ASF_OBJ_MARKER",
+        {0xf487cd01, 0x11cfa951, 0xc000e68e, 0x6553200c}
+      },
+  /* This guid is definitely used for encryption (mentioned in MS smooth
+   * streaming docs) in new PlayReady (c) (tm) (wtf) system, but I haven't
+   * found a proper name for it.
+   * (Edward Jan 11 2011).*/
+  {ASF_OBJ_UNKNOWN_ENCRYPTION_OBJECT, "ASF_OBJ_UNKNOWN_ENCRYPTION_OBJECT",
+        {0x9a04f079, 0x42869840, 0x5be692ab, 0x955f88e0}
+      },
+  {ASF_OBJ_METADATA_LIBRARY_OBJECT, "ASF_OBJ_METADATA_LIBRARY_OBJECT",
+        {0x44231c94, 0x49d19498, 0x131d41a1, 0x5470454e}
+      },
+  {ASF_OBJ_UNDEFINED, "ASF_OBJ_UNDEFINED",
+        {0, 0, 0, 0}
+      }
+};
+
+guint32
+gst_asf_identify_guid (const ASFGuidHash * guids, ASFGuid * guid)
+{
+  gint i;
+
+  for (i = 0; guids[i].obj_id != ASF_OBJ_UNDEFINED; ++i) {
+    if (guids[i].guid.v1 == guid->v1 &&
+        guids[i].guid.v2 == guid->v2 &&
+        guids[i].guid.v3 == guid->v3 && guids[i].guid.v4 == guid->v4) {
+      return guids[i].obj_id;
+    }
+  }
+
+  /* The base case if none is found */
+  return ASF_OBJ_UNDEFINED;
+}
+
+const gchar *
+gst_asf_get_guid_nick (const ASFGuidHash * guids, guint32 obj_id)
+{
+  gint i;
+
+  for (i = 0; guids[i].obj_id != ASF_OBJ_UNDEFINED; ++i) {
+    if (guids[i].obj_id == obj_id) {
+      return guids[i].obj_id_str;
+    }
+  }
+
+  /* The base case if none is found */
+  return "ASF_OBJ_UNDEFINED";
+}
diff --git a/subprojects/gst-plugins-ugly/gst/asfdemux/asfheaders.h b/subprojects/gst-plugins-ugly/gst/asfdemux/asfheaders.h
new file mode 100644 (file)
index 0000000..55796c5
--- /dev/null
@@ -0,0 +1,157 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * 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 __ASFHEADERS_H__
+#define __ASFHEADERS_H__
+
+G_BEGIN_DECLS
+
+typedef struct {
+  guint32 v1;
+  guint32 v2;
+  guint32 v3;
+  guint32 v4;
+} ASFGuid;
+  
+
+
+typedef struct {
+  guint8       obj_id;
+  const gchar *obj_id_str;
+  ASFGuid      guid;
+} ASFGuidHash;
+
+typedef enum {
+  ASF_OBJ_UNDEFINED = 0,
+  ASF_OBJ_STREAM,
+  ASF_OBJ_DATA,
+  ASF_OBJ_FILE,
+  ASF_OBJ_HEADER,
+  ASF_OBJ_CONCEAL_NONE,
+  ASF_OBJ_COMMENT,
+  ASF_OBJ_CODEC_COMMENT,
+  ASF_OBJ_CODEC_COMMENT1,
+  ASF_OBJ_SIMPLE_INDEX,
+  ASF_OBJ_INDEX,
+  ASF_OBJ_HEAD1,
+  ASF_OBJ_HEAD2,
+  ASF_OBJ_PADDING,
+  ASF_OBJ_BITRATE_PROPS,
+  ASF_OBJ_EXT_CONTENT_DESC,
+  ASF_OBJ_BITRATE_MUTEX,
+  ASF_OBJ_LANGUAGE_LIST,
+  ASF_OBJ_METADATA_OBJECT,
+  ASF_OBJ_EXTENDED_STREAM_PROPS,
+  ASF_OBJ_COMPATIBILITY,
+  ASF_OBJ_INDEX_PLACEHOLDER,
+  ASF_OBJ_INDEX_PARAMETERS,
+  ASF_OBJ_ADVANCED_MUTUAL_EXCLUSION,
+  ASF_OBJ_STREAM_PRIORITIZATION,
+  ASF_OBJ_CONTENT_ENCRYPTION,
+  ASF_OBJ_EXT_CONTENT_ENCRYPTION,
+  ASF_OBJ_DIGITAL_SIGNATURE_OBJECT,
+  ASF_OBJ_SCRIPT_COMMAND,
+  ASF_OBJ_MARKER,
+  ASF_OBJ_UNKNOWN_ENCRYPTION_OBJECT,
+  ASF_OBJ_METADATA_LIBRARY_OBJECT,
+} AsfObjectID;
+
+typedef enum {
+  ASF_STREAM_UNDEFINED = 0,
+  ASF_STREAM_VIDEO,
+  ASF_STREAM_AUDIO,
+  ASF_STREAM_EXT_EMBED_HEADER
+} AsfStreamType;
+
+typedef enum {
+  ASF_EXT_STREAM_UNDEFINED = 0,
+  ASF_EXT_STREAM_AUDIO
+} AsfExtStreamType;
+
+typedef enum {
+  ASF_CORRECTION_UNDEFINED = 0,
+  ASF_CORRECTION_ON,
+  ASF_CORRECTION_OFF
+} AsfCorrectionType;
+
+typedef enum {
+  ASF_PAYLOAD_EXTENSION_UNDEFINED = 0,
+  ASF_PAYLOAD_EXTENSION_DURATION,
+  ASF_PAYLOAD_EXTENSION_SYSTEM_CONTENT,
+  ASF_PAYLOAD_EXTENSION_SYSTEM_PIXEL_ASPECT_RATIO,
+  ASF_PAYLOAD_EXTENSION_TIMING
+} AsfPayloadExtensionID;
+
+extern const ASFGuidHash asf_payload_ext_guids[];
+
+extern const ASFGuidHash asf_correction_guids[];
+
+extern const ASFGuidHash asf_stream_guids[];
+
+extern const ASFGuidHash asf_ext_stream_guids[];
+
+extern const ASFGuidHash asf_object_guids[];
+
+/* GUID utilities */
+guint32        gst_asf_identify_guid (const ASFGuidHash * guids,
+                                      ASFGuid           * guid);
+
+const gchar   *gst_asf_get_guid_nick (const ASFGuidHash * guids,
+                                      guint32             obj_id);
+
+struct _asf_stream_audio {
+  guint16 codec_tag;
+  guint16 channels;
+  guint32 sample_rate;
+  guint32 byte_rate;
+  guint16 block_align;
+  guint16 word_size;
+  guint16 size;
+};
+
+typedef struct _asf_stream_audio asf_stream_audio;
+
+struct _asf_stream_video {
+  guint32 width;
+  guint32 height;
+  guint8  unknown;
+  guint16 size;
+};
+
+typedef struct _asf_stream_video asf_stream_video;
+
+struct _asf_stream_video_format {
+  guint32 size;
+  guint32 width;
+  guint32 height;
+  guint16 planes;
+  guint16 depth;
+  guint32 tag;
+  guint32 image_size;
+  guint32 xpels_meter;
+  guint32 ypels_meter;
+  guint32 num_colors;
+  guint32 imp_colors;
+};
+
+typedef struct _asf_stream_video_format asf_stream_video_format;
+
+G_END_DECLS
+
+#endif /* __ASFHEADERS_H__ */
diff --git a/subprojects/gst-plugins-ugly/gst/asfdemux/asfpacket.c b/subprojects/gst-plugins-ugly/gst/asfdemux/asfpacket.c
new file mode 100644 (file)
index 0000000..d25abbe
--- /dev/null
@@ -0,0 +1,808 @@
+/* GStreamer ASF/WMV/WMA demuxer
+ * Copyright (C) 2007 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/* FIXME:
+ *  file:///home/tpm/samples/video/asf//336370-regis-velo862.wmv
+ *  file:///home/tpm/samples/video/asf//336370-eichhoer.wmv
+ * throw errors (not always necessarily) in this code path
+ * (looks like they carry broken payloads/packets though) */
+
+#include "asfpacket.h"
+
+#include <gst/gstutils.h>
+#include <gst/gstinfo.h>
+#include <string.h>
+
+#define GST_ASF_PAYLOAD_KF_COMPLETE(stream, payload) (stream->is_video && payload->keyframe && payload->buf_filled >= payload->mo_size)
+
+/* we are unlikely to deal with lengths > 2GB here any time soon, so just
+ * return a signed int and use that for error reporting */
+static inline gint
+asf_packet_read_varlen_int (guint lentype_flags, guint lentype_bit_offset,
+    const guint8 ** p_data, guint * p_size)
+{
+  static const guint lens[4] = { 0, 1, 2, 4 };
+  guint len, val;
+
+  len = lens[(lentype_flags >> lentype_bit_offset) & 0x03];
+
+  /* will make caller bail out with a short read if there's not enough data */
+  if (G_UNLIKELY (*p_size < len)) {
+    GST_WARNING ("need %u bytes, but only %u bytes available", len, *p_size);
+    return -1;
+  }
+
+  switch (len) {
+    case 0:
+      val = 0;
+      break;
+    case 1:
+      val = GST_READ_UINT8 (*p_data);
+      break;
+    case 2:
+      val = GST_READ_UINT16_LE (*p_data);
+      break;
+    case 4:
+      val = GST_READ_UINT32_LE (*p_data);
+      break;
+    default:
+      val = 0;
+      g_assert_not_reached ();
+  }
+
+  *p_data += len;
+  *p_size -= len;
+
+  return (gint) val;
+}
+
+static GstBuffer *
+asf_packet_create_payload_buffer (AsfPacket * packet, const guint8 ** p_data,
+    guint * p_size, guint payload_len)
+{
+  guint off;
+
+  g_assert (payload_len <= *p_size);
+
+  off = (guint) (*p_data - packet->bdata);
+  g_assert (off < gst_buffer_get_size (packet->buf));
+
+  *p_data += payload_len;
+  *p_size -= payload_len;
+
+  return gst_buffer_copy_region (packet->buf, GST_BUFFER_COPY_ALL, off,
+      payload_len);
+}
+
+static AsfPayload *
+asf_payload_search_payloads_queue (AsfPayload * payload, GArray * payload_list)
+{
+  AsfPayload *ret = NULL;
+  gint idx;
+  for (idx = payload_list->len - 1; idx >= 0; idx--) {
+    ret = &g_array_index (payload_list, AsfPayload, idx);
+
+    if (G_UNLIKELY (ret->mo_size == payload->mo_size &&
+            ret->mo_number == payload->mo_number)) {
+      return ret;
+    }
+  }
+  return NULL;
+}
+
+static AsfPayload *
+asf_payload_find_previous_fragment (GstASFDemux * demux, AsfPayload * payload,
+    AsfStream * stream)
+{
+  AsfPayload *ret = NULL;
+
+  if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
+
+    /* Search in queued payloads list */
+    ret = asf_payload_search_payloads_queue (payload, stream->payloads);
+    if (ret) {
+      GST_DEBUG
+          ("previous fragments found in payloads queue for reverse playback : object ID %d",
+          ret->mo_number);
+      return ret;
+    }
+
+    /* Search in payloads 'to be queued' list */
+    ret = asf_payload_search_payloads_queue (payload, stream->payloads_rev);
+    if (ret) {
+      GST_DEBUG
+          ("previous fragments found in temp payload queue for reverse playback : object ID %d",
+          ret->mo_number);
+      return ret;
+    }
+  } else {
+    if (G_UNLIKELY (stream->payloads->len == 0)) {
+      GST_DEBUG ("No previous fragments to merge with for stream %u",
+          stream->id);
+      return NULL;
+    }
+
+    ret =
+        &g_array_index (stream->payloads, AsfPayload,
+        stream->payloads->len - 1);
+
+    if (G_UNLIKELY (ret->mo_size != payload->mo_size ||
+            ret->mo_number != payload->mo_number || ret->mo_offset != 0)) {
+      if (payload->mo_size != 0) {
+        GST_WARNING ("Previous fragment does not match continued fragment");
+        return NULL;
+      } else {
+        /* Warn about this case, but accept it anyway: files in the wild sometimes
+         * have continued packets where the subsequent fragments say that they're
+         * zero-sized. */
+        GST_WARNING ("Previous fragment found, but current fragment has "
+            "zero size, accepting anyway");
+      }
+    }
+  }
+
+#if 0
+  if (this_fragment->mo_offset + this_payload_len > first_fragment->mo_size) {
+    GST_WARNING ("Merged fragments would be bigger than the media object");
+    return FALSE;
+  }
+#endif
+
+  return ret;
+}
+
+/* TODO: if we have another payload already queued for this stream and that
+ * payload doesn't have a duration, maybe we can calculate a duration for it
+ * (if the previous timestamp is smaller etc. etc.) */
+static void
+gst_asf_payload_queue_for_stream_forward (GstASFDemux * demux,
+    AsfPayload * payload, AsfStream * stream)
+{
+  GST_DEBUG_OBJECT (demux, "Got payload for stream %d ts:%" GST_TIME_FORMAT,
+      stream->id, GST_TIME_ARGS (payload->ts));
+
+  /* make timestamps start from 0; first_ts will be determined during activation (once we have enough data),
+     which will also update ts of all packets queued before we knew first_ts;  */
+  if (G_LIKELY (GST_CLOCK_TIME_IS_VALID (demux->first_ts)
+          && GST_CLOCK_TIME_IS_VALID (payload->ts))) {
+    if (payload->ts > demux->first_ts)
+      payload->ts -= demux->first_ts;
+    else
+      payload->ts = 0;
+  }
+
+  /* remove any incomplete payloads that will never be completed */
+  while (stream->payloads->len > 0) {
+    AsfPayload *prev;
+    guint idx_last;
+
+    idx_last = stream->payloads->len - 1;
+    prev = &g_array_index (stream->payloads, AsfPayload, idx_last);
+
+    if (G_UNLIKELY (gst_asf_payload_is_complete (prev)))
+      break;
+
+    GST_DEBUG_OBJECT (demux, "Dropping incomplete fragmented media object "
+        "queued for stream %u", stream->id);
+
+    gst_buffer_replace (&prev->buf, NULL);
+    g_array_remove_index (stream->payloads, idx_last);
+
+    /* there's data missing, so there's a discontinuity now */
+    GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DISCONT);
+  }
+
+  /* If we're about to queue a key frame that is before the segment start, we
+   * can ditch any previously queued payloads (which would also be before the
+   * segment start). This makes sure the decoder doesn't decode more than
+   * absolutely necessary after a seek (we don't push out payloads that are
+   * before the segment start until we have at least one that falls within the
+   * segment) */
+  if (G_UNLIKELY (GST_CLOCK_TIME_IS_VALID (payload->ts) &&
+          payload->ts < demux->segment.start && payload->keyframe)) {
+    GST_DEBUG_OBJECT (demux, "Queueing keyframe before segment start, removing"
+        " %u previously-queued payloads, which would be out of segment too and"
+        " hence don't have to be decoded", stream->payloads->len);
+    while (stream->payloads->len > 0) {
+      AsfPayload *last;
+      guint idx_last;
+
+      idx_last = stream->payloads->len - 1;
+      last = &g_array_index (stream->payloads, AsfPayload, idx_last);
+      gst_buffer_replace (&last->buf, NULL);
+      g_array_remove_index (stream->payloads, idx_last);
+    }
+
+    /* Mark discontinuity (should be done via stream->discont anyway though) */
+    GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DISCONT);
+  }
+
+  g_array_append_vals (stream->payloads, payload, 1);
+}
+
+static void
+gst_asf_payload_queue_for_stream_reverse (GstASFDemux * demux,
+    AsfPayload * payload, AsfStream * stream)
+{
+  GST_DEBUG_OBJECT (demux, "Got payload for stream %d ts:%" GST_TIME_FORMAT,
+      stream->id, GST_TIME_ARGS (payload->ts));
+
+  if (demux->multiple_payloads) {
+    /* store the payload in temporary buffer, until we parse all payloads in this packet */
+    g_array_append_vals (stream->payloads_rev, payload, 1);
+  } else {
+    if (G_LIKELY (GST_CLOCK_TIME_IS_VALID (payload->ts))) {
+      g_array_append_vals (stream->payloads, payload, 1);
+      if (GST_ASF_PAYLOAD_KF_COMPLETE (stream, payload)) {
+        stream->kf_pos = stream->payloads->len - 1;
+      }
+    } else {
+      gst_buffer_unref (payload->buf);
+    }
+  }
+}
+
+
+static void
+gst_asf_payload_queue_for_stream (GstASFDemux * demux, AsfPayload * payload,
+    AsfStream * stream)
+{
+  GST_DEBUG_OBJECT (demux, "Got payload for stream %d ts:%" GST_TIME_FORMAT,
+      stream->id, GST_TIME_ARGS (payload->ts));
+
+  if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
+    gst_asf_payload_queue_for_stream_reverse (demux, payload, stream);
+  } else {
+    gst_asf_payload_queue_for_stream_forward (demux, payload, stream);
+  }
+
+}
+
+static void
+asf_payload_parse_replicated_data_extensions (AsfStream * stream,
+    AsfPayload * payload)
+{
+  AsfPayloadExtension *ext;
+  guint off;
+  guint16 ext_len;
+
+  if (!stream->ext_props.valid || stream->ext_props.payload_extensions == NULL)
+    return;
+
+  off = 8;
+  for (ext = stream->ext_props.payload_extensions; ext->len > 0; ++ext) {
+    ext_len = ext->len;
+    if (ext_len == 0xFFFF) {    /* extension length is determined by first two bytes in replicated data */
+      ext_len = GST_READ_UINT16_LE (payload->rep_data + off);
+      off += 2;
+    }
+    if (G_UNLIKELY (off + ext_len > payload->rep_data_len)) {
+      GST_WARNING ("not enough replicated data for defined extensions");
+      return;
+    }
+    switch (ext->id) {
+      case ASF_PAYLOAD_EXTENSION_DURATION:
+        if (G_LIKELY (ext_len == 2)) {
+          guint16 tdur = GST_READ_UINT16_LE (payload->rep_data + off);
+          /* packet durations of 1ms are mostly invalid */
+          if (tdur != 1)
+            payload->duration = tdur * GST_MSECOND;
+        } else {
+          GST_WARNING ("unexpected DURATION extensions len %u", ext_len);
+        }
+        break;
+      case ASF_PAYLOAD_EXTENSION_SYSTEM_CONTENT:
+        if (G_LIKELY (ext_len == 1)) {
+          guint8 data = payload->rep_data[off];
+
+          payload->interlaced = data & 0x1;
+          payload->rff = data & 0x8;
+          payload->tff = (data & 0x2) || !(data & 0x4);
+          GST_DEBUG ("SYSTEM_CONTENT: interlaced:%d, rff:%d, tff:%d",
+              payload->interlaced, payload->rff, payload->tff);
+        } else {
+          GST_WARNING ("unexpected SYSTEM_CONTE extensions len %u", ext_len);
+        }
+        break;
+      case ASF_PAYLOAD_EXTENSION_SYSTEM_PIXEL_ASPECT_RATIO:
+        if (G_LIKELY (ext_len == 2)) {
+          payload->par_x = payload->rep_data[off];
+          payload->par_y = payload->rep_data[off + 1];
+          GST_DEBUG ("PAR %d / %d", payload->par_x, payload->par_y);
+        } else {
+          GST_WARNING ("unexpected SYSTEM_PIXEL_ASPECT_RATIO extensions len %u",
+              ext_len);
+        }
+        break;
+      case ASF_PAYLOAD_EXTENSION_TIMING:
+      {
+        /* dvr-ms timing - this will override packet timestamp */
+        guint64 time = GST_READ_UINT64_LE (payload->rep_data + off + 8);
+        if (time != 0xFFFFFFFFFFFFFFFF)
+          payload->ts = time * 100;
+        else
+          payload->ts = GST_CLOCK_TIME_NONE;
+      }
+        break;
+      default:
+        GST_LOG ("UNKNOWN PAYLOAD EXTENSION!");
+        break;
+    }
+    off += ext_len;
+  }
+}
+
+static gboolean
+gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet,
+    gint lentype, const guint8 ** p_data, guint * p_size)
+{
+  AsfPayload payload = { 0, };
+  AsfStream *stream;
+  gboolean is_compressed;
+  guint payload_len;
+  guint stream_num;
+
+  if (G_UNLIKELY (*p_size < 1)) {
+    GST_WARNING_OBJECT (demux, "Short packet!");
+    return FALSE;
+  }
+
+  stream_num = GST_READ_UINT8 (*p_data) & 0x7f;
+  payload.keyframe = ((GST_READ_UINT8 (*p_data) & 0x80) != 0);
+
+  *p_data += 1;
+  *p_size -= 1;
+
+  payload.ts = GST_CLOCK_TIME_NONE;
+  payload.duration = GST_CLOCK_TIME_NONE;
+  payload.par_x = 0;
+  payload.par_y = 0;
+  payload.interlaced = FALSE;
+  payload.tff = FALSE;
+  payload.rff = FALSE;
+
+  payload.mo_number =
+      asf_packet_read_varlen_int (packet->prop_flags, 4, p_data, p_size);
+  payload.mo_offset =
+      asf_packet_read_varlen_int (packet->prop_flags, 2, p_data, p_size);
+  payload.rep_data_len =
+      asf_packet_read_varlen_int (packet->prop_flags, 0, p_data, p_size);
+
+  is_compressed = (payload.rep_data_len == 1);
+
+  GST_LOG_OBJECT (demux, "payload for stream %u", stream_num);
+  GST_LOG_OBJECT (demux, "keyframe   : %s", (payload.keyframe) ? "yes" : "no");
+  GST_LOG_OBJECT (demux, "compressed : %s", (is_compressed) ? "yes" : "no");
+
+  if (G_UNLIKELY (*p_size < payload.rep_data_len)) {
+    GST_WARNING_OBJECT (demux, "Short packet! rep_data_len=%u, size=%u",
+        payload.rep_data_len, *p_size);
+    return FALSE;
+  }
+
+  memcpy (payload.rep_data, *p_data,
+      MIN (sizeof (payload.rep_data), payload.rep_data_len));
+
+  *p_data += payload.rep_data_len;
+  *p_size -= payload.rep_data_len;
+
+  if (G_UNLIKELY (*p_size == 0)) {
+    GST_WARNING_OBJECT (demux, "payload without data!?");
+    return FALSE;
+  }
+
+  /* we use -1 as lentype for a single payload that's the size of the packet */
+  if (G_UNLIKELY ((lentype >= 0 && lentype <= 3))) {
+    payload_len = asf_packet_read_varlen_int (lentype, 0, p_data, p_size);
+    if (*p_size < payload_len) {
+      GST_WARNING_OBJECT (demux, "Short packet! payload_len=%u, size=%u",
+          payload_len, *p_size);
+      return FALSE;
+    }
+  } else {
+    payload_len = *p_size;
+  }
+
+  GST_LOG_OBJECT (demux, "payload length: %u", payload_len);
+
+  stream = gst_asf_demux_get_stream (demux, stream_num);
+
+  if (G_UNLIKELY (stream == NULL)) {
+    if (gst_asf_demux_is_unknown_stream (demux, stream_num)) {
+      GST_WARNING_OBJECT (demux, "Payload for unknown stream %u, skipping",
+          stream_num);
+    }
+    if (*p_size < payload_len) {
+      *p_data += *p_size;
+      *p_size = 0;
+    } else {
+      *p_data += payload_len;
+      *p_size -= payload_len;
+    }
+    return TRUE;
+  }
+
+  if (!stream->is_video)
+    stream->kf_pos = 0;
+
+  if (G_UNLIKELY (!is_compressed)) {
+    GST_LOG_OBJECT (demux, "replicated data length: %u", payload.rep_data_len);
+
+    if (payload.rep_data_len >= 8) {
+      payload.mo_size = GST_READ_UINT32_LE (payload.rep_data);
+      payload.ts = GST_READ_UINT32_LE (payload.rep_data + 4) * GST_MSECOND;
+      if (G_UNLIKELY (payload.ts < demux->preroll))
+        payload.ts = 0;
+      else
+        payload.ts -= demux->preroll;
+      asf_payload_parse_replicated_data_extensions (stream, &payload);
+
+      GST_LOG_OBJECT (demux, "media object size   : %u", payload.mo_size);
+      GST_LOG_OBJECT (demux, "media object ts     : %" GST_TIME_FORMAT,
+          GST_TIME_ARGS (payload.ts));
+      GST_LOG_OBJECT (demux, "media object dur    : %" GST_TIME_FORMAT,
+          GST_TIME_ARGS (payload.duration));
+    } else if (payload.rep_data_len == 0) {
+      payload.mo_size = 0;
+    } else if (payload.rep_data_len != 0) {
+      GST_WARNING_OBJECT (demux, "invalid replicated data length, very bad");
+      *p_data += payload_len;
+      *p_size -= payload_len;
+      return FALSE;
+    }
+
+    GST_LOG_OBJECT (demux, "media object offset : %u", payload.mo_offset);
+
+    GST_LOG_OBJECT (demux, "payload length: %u", payload_len);
+
+    if (payload_len == 0) {
+      GST_DEBUG_OBJECT (demux, "skipping empty payload");
+    } else if (payload.mo_offset == 0 && payload.mo_size == payload_len) {
+      /* if the media object is not fragmented, just create a sub-buffer */
+      GST_LOG_OBJECT (demux, "unfragmented media object size %u", payload_len);
+      payload.buf = asf_packet_create_payload_buffer (packet, p_data, p_size,
+          payload_len);
+      payload.buf_filled = payload_len;
+      gst_asf_payload_queue_for_stream (demux, &payload, stream);
+    } else if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
+      /* Handle fragmented payloads for reverse playback */
+      AsfPayload *prev;
+      const guint8 *payload_data = *p_data;
+      prev = asf_payload_find_previous_fragment (demux, &payload, stream);
+
+      if (prev) {
+        gint idx;
+        AsfPayload *p;
+        gst_buffer_fill (prev->buf, payload.mo_offset,
+            payload_data, payload_len);
+        prev->buf_filled += payload_len;
+        if (payload.keyframe && payload.mo_offset == 0) {
+          stream->reverse_kf_ready = TRUE;
+
+          for (idx = stream->payloads->len - 1; idx >= 0; idx--) {
+            p = &g_array_index (stream->payloads, AsfPayload, idx);
+            if (p->mo_number == payload.mo_number) {
+              /* Mark position of KF for reverse play */
+              stream->kf_pos = idx;
+            }
+          }
+        }
+      } else {
+        payload.buf = gst_buffer_new_allocate (NULL, payload.mo_size, NULL);    /* can we use (mo_size - offset) for size? */
+        gst_buffer_fill (payload.buf, payload.mo_offset,
+            payload_data, payload_len);
+        payload.buf_filled = payload.mo_size - (payload.mo_offset);
+        gst_asf_payload_queue_for_stream (demux, &payload, stream);
+      }
+      *p_data += payload_len;
+      *p_size -= payload_len;
+    } else {
+      const guint8 *payload_data = *p_data;
+
+      g_assert (payload_len <= *p_size);
+
+      *p_data += payload_len;
+      *p_size -= payload_len;
+
+      /* n-th fragment of a fragmented media object? */
+      if (payload.mo_offset != 0) {
+        AsfPayload *prev;
+
+        if ((prev =
+                asf_payload_find_previous_fragment (demux, &payload, stream))) {
+          if (prev->buf == NULL || (payload.mo_size > 0
+                  && payload.mo_size != prev->mo_size)
+              || payload.mo_offset >= gst_buffer_get_size (prev->buf)
+              || payload.mo_offset + payload_len >
+              gst_buffer_get_size (prev->buf)) {
+            GST_WARNING_OBJECT (demux, "Offset doesn't match previous data?!");
+          } else {
+            /* we assume fragments are payloaded with increasing mo_offset */
+            if (payload.mo_offset != prev->buf_filled) {
+              GST_WARNING_OBJECT (demux, "media object payload discontinuity: "
+                  "offset=%u vs buf_filled=%u", payload.mo_offset,
+                  prev->buf_filled);
+            }
+            gst_buffer_fill (prev->buf, payload.mo_offset,
+                payload_data, payload_len);
+            prev->buf_filled =
+                MAX (prev->buf_filled, payload.mo_offset + payload_len);
+            GST_LOG_OBJECT (demux, "Merged media object fragments, size now %u",
+                prev->buf_filled);
+          }
+        } else {
+          GST_DEBUG_OBJECT (demux, "n-th payload fragment, but don't have "
+              "any previous fragment, ignoring payload");
+        }
+      } else {
+        GST_LOG_OBJECT (demux, "allocating buffer of size %u for fragmented "
+            "media object", payload.mo_size);
+        payload.buf = gst_buffer_new_allocate (NULL, payload.mo_size, NULL);
+        gst_buffer_fill (payload.buf, 0, payload_data, payload_len);
+        payload.buf_filled = payload_len;
+
+        gst_asf_payload_queue_for_stream (demux, &payload, stream);
+      }
+    }
+  } else {
+    const guint8 *payload_data;
+    GstClockTime ts, ts_delta;
+    guint num;
+
+    GST_LOG_OBJECT (demux, "Compressed payload, length=%u", payload_len);
+
+    payload_data = *p_data;
+
+    *p_data += payload_len;
+    *p_size -= payload_len;
+
+    ts = payload.mo_offset * GST_MSECOND;
+    if (G_UNLIKELY (ts < demux->preroll))
+      ts = 0;
+    else
+      ts -= demux->preroll;
+    ts_delta = payload.rep_data[0] * GST_MSECOND;
+
+    for (num = 0; payload_len > 0; ++num) {
+      guint sub_payload_len;
+
+      sub_payload_len = GST_READ_UINT8 (payload_data);
+
+      GST_LOG_OBJECT (demux, "subpayload #%u: len=%u, ts=%" GST_TIME_FORMAT,
+          num, sub_payload_len, GST_TIME_ARGS (ts));
+
+      ++payload_data;
+      --payload_len;
+
+      if (G_UNLIKELY (payload_len < sub_payload_len)) {
+        GST_WARNING_OBJECT (demux, "Short payload! %u bytes left", payload_len);
+        return FALSE;
+      }
+
+      if (G_LIKELY (sub_payload_len > 0)) {
+        payload.buf = asf_packet_create_payload_buffer (packet,
+            &payload_data, &payload_len, sub_payload_len);
+        payload.buf_filled = sub_payload_len;
+
+        payload.ts = ts;
+        if (G_LIKELY (ts_delta))
+          payload.duration = ts_delta;
+        else
+          payload.duration = GST_CLOCK_TIME_NONE;
+
+        gst_asf_payload_queue_for_stream (demux, &payload, stream);
+      }
+
+      ts += ts_delta;
+    }
+  }
+
+  return TRUE;
+}
+
+GstAsfDemuxParsePacketError
+gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf)
+{
+  AsfPacket packet = { 0, };
+  GstMapInfo map;
+  const guint8 *data;
+  gboolean has_multiple_payloads;
+  GstAsfDemuxParsePacketError ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE;
+  guint8 ec_flags, flags1;
+  guint size;
+
+  gst_buffer_map (buf, &map, GST_MAP_READ);
+  data = map.data;
+  size = map.size;
+  GST_LOG_OBJECT (demux, "Buffer size: %u", size);
+
+  /* need at least two payload flag bytes, send time, and duration */
+  if (G_UNLIKELY (size < 2 + 4 + 2)) {
+    GST_WARNING_OBJECT (demux, "Packet size is < 8");
+    ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE;
+    goto done;
+  }
+
+  packet.buf = buf;
+  /* evidently transient */
+  packet.bdata = data;
+
+  ec_flags = GST_READ_UINT8 (data);
+
+  /* skip optional error correction stuff */
+  if ((ec_flags & 0x80) != 0) {
+    guint ec_len_type, ec_len;
+
+    ec_len_type = (ec_flags & 0x60) >> 5;
+    if (ec_len_type == 0) {
+      ec_len = ec_flags & 0x0f;
+    } else {
+      GST_WARNING_OBJECT (demux, "unexpected error correction length type %u",
+          ec_len_type);
+      ec_len = 2;
+    }
+    GST_LOG_OBJECT (demux, "packet has error correction (%u bytes)", ec_len);
+
+    /* still need at least two payload flag bytes, send time, and duration */
+    if (size <= (1 + ec_len) + 2 + 4 + 2) {
+      GST_WARNING_OBJECT (demux, "Packet size is < 8 with Error Correction");
+      ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL;
+      goto done;
+    }
+
+    data += 1 + ec_len;
+    size -= 1 + ec_len;
+  }
+
+  /* parse payload info */
+  flags1 = GST_READ_UINT8 (data);
+  packet.prop_flags = GST_READ_UINT8 (data + 1);
+
+  data += 2;
+  size -= 2;
+
+  has_multiple_payloads = (flags1 & 0x01) != 0;
+
+  packet.length = asf_packet_read_varlen_int (flags1, 5, &data, &size);
+
+  packet.sequence = asf_packet_read_varlen_int (flags1, 1, &data, &size);
+
+  packet.padding = asf_packet_read_varlen_int (flags1, 3, &data, &size);
+
+  if (G_UNLIKELY (size < 6)) {
+    GST_WARNING_OBJECT (demux, "Packet size is < 6");
+    ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL;
+    goto done;
+  }
+
+  packet.send_time = GST_READ_UINT32_LE (data) * GST_MSECOND;
+  packet.duration = GST_READ_UINT16_LE (data + 4) * GST_MSECOND;
+
+  data += 4 + 2;
+  size -= 4 + 2;
+
+  GST_LOG_OBJECT (demux, "flags            : 0x%x", flags1);
+  GST_LOG_OBJECT (demux, "multiple payloads: %u", has_multiple_payloads);
+  GST_LOG_OBJECT (demux, "packet length    : %u", packet.length);
+  GST_LOG_OBJECT (demux, "sequence         : %u", packet.sequence);
+  GST_LOG_OBJECT (demux, "padding          : %u", packet.padding);
+  GST_LOG_OBJECT (demux, "send time        : %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (packet.send_time));
+
+  GST_LOG_OBJECT (demux, "duration         : %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (packet.duration));
+
+  if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)
+      && demux->seek_to_cur_pos == TRUE) {
+    /* For reverse playback, initially parse packets forward until we reach packet with 'seek' timestamp */
+    if (packet.send_time - demux->preroll > demux->segment.stop) {
+      demux->seek_to_cur_pos = FALSE;
+    }
+    ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE;
+    goto done;
+  }
+
+  if (G_UNLIKELY (packet.padding == (guint) - 1 || size < packet.padding)) {
+    GST_WARNING_OBJECT (demux, "No padding, or padding bigger than buffer");
+    ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE;
+    goto done;
+  }
+
+  size -= packet.padding;
+
+  /* adjust available size for parsing if there's less actual packet data for
+   * parsing than there is data in bytes (for sample see bug 431318) */
+  if (G_UNLIKELY (packet.length != 0 && packet.padding == 0
+          && packet.length < demux->packet_size)) {
+    GST_LOG_OBJECT (demux, "shortened packet with implicit padding, "
+        "adjusting available data size");
+    if (size < demux->packet_size - packet.length) {
+      /* the buffer is smaller than the implicit padding */
+      GST_WARNING_OBJECT (demux, "Buffer is smaller than the implicit padding");
+      ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE;
+      goto done;
+    } else {
+      /* subtract the implicit padding */
+      size -= (demux->packet_size - packet.length);
+    }
+  }
+
+  if (has_multiple_payloads) {
+    guint i, num, lentype;
+    demux->multiple_payloads = TRUE;
+
+    if (G_UNLIKELY (size < 1)) {
+      GST_WARNING_OBJECT (demux, "No room more in buffer");
+      ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE;
+      goto done;
+    }
+
+    num = (GST_READ_UINT8 (data) & 0x3F) >> 0;
+    lentype = (GST_READ_UINT8 (data) & 0xC0) >> 6;
+
+    ++data;
+    --size;
+
+    GST_LOG_OBJECT (demux, "num payloads     : %u", num);
+
+    for (i = 0; i < num; ++i) {
+      GST_LOG_OBJECT (demux, "Parsing payload %u/%u, size left: %u", i + 1, num,
+          size);
+
+      if (G_UNLIKELY (!gst_asf_demux_parse_payload (demux, &packet, lentype,
+                  &data, &size))) {
+        GST_WARNING_OBJECT (demux, "Failed to parse payload %u/%u", i + 1, num);
+        ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL;
+        break;
+      }
+    }
+
+    if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
+      /* In reverse playback, we parsed the packet (with multiple payloads) and stored the payloads in temporary queue.
+         Now, add them to the stream's payload queue */
+      for (i = 0; i < demux->num_streams; i++) {
+        AsfStream *s = &demux->stream[i];
+        while (s->payloads_rev->len > 0) {
+          AsfPayload *p;
+          p = &g_array_index (s->payloads_rev, AsfPayload,
+              s->payloads_rev->len - 1);
+          g_array_append_vals (s->payloads, p, 1);
+          if (GST_ASF_PAYLOAD_KF_COMPLETE (s, p)) {
+            /* Mark position of KF for reverse play */
+            s->kf_pos = s->payloads->len - 1;
+          }
+          g_array_remove_index (s->payloads_rev, (s->payloads_rev->len - 1));
+        }
+      }
+    }
+
+  } else {
+    GST_LOG_OBJECT (demux, "Parsing single payload");
+    demux->multiple_payloads = FALSE;
+    if (G_UNLIKELY (!gst_asf_demux_parse_payload (demux, &packet, -1, &data,
+                &size))) {
+      GST_WARNING_OBJECT (demux, "Failed to parse payload");
+      ret = GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE;
+    }
+  }
+
+done:
+  gst_buffer_unmap (buf, &map);
+  return ret;
+}
diff --git a/subprojects/gst-plugins-ugly/gst/asfdemux/asfpacket.h b/subprojects/gst-plugins-ugly/gst/asfdemux/asfpacket.h
new file mode 100644 (file)
index 0000000..a812e74
--- /dev/null
@@ -0,0 +1,74 @@
+/* GStreamer ASF/WMV/WMA demuxer
+ * Copyright (C) 2007 Tim-Philipp Müller <tim centricular net>
+ *
+ * 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 __ASF_PACKET_H__
+#define __ASF_PACKET_H__
+
+#include <gst/gstbuffer.h>
+#include <gst/gstclock.h>
+
+#include "gstasfdemux.h"
+
+G_BEGIN_DECLS
+
+typedef struct {
+  gboolean      keyframe;          /* buffer flags might not survive merge.. */
+  guint         mo_number;         /* media object number (unused)           */
+  guint         mo_offset;         /* offset (timestamp for compressed data) */
+  guint         mo_size;           /* size of media-object-to-be, or 0       */
+  guint         buf_filled;        /* how much of the mo data we got so far  */
+  GstBuffer    *buf;               /* buffer to assemble media-object or NULL*/
+  guint         rep_data_len;      /* should never be more than 256, since   */
+  guint8        rep_data[256];     /* the length should be stored in a byte  */
+  GstClockTime  ts;
+  GstClockTime  duration;          /* is not always available                */
+  guint8        par_x;             /* not always available (0:deactivated)   */
+  guint8        par_y;             /* not always available (0:deactivated)   */
+  gboolean      interlaced;        /* default: FALSE */
+  gboolean      tff;
+  gboolean      rff;
+} AsfPayload;
+
+typedef struct {
+  GstBuffer    *buf;
+  const guint8 *bdata;
+  guint         length;            /* packet length (unused)               */
+  guint         padding;           /* length of padding at end of packet   */
+  guint         sequence;          /* sequence (unused)                    */
+  GstClockTime  send_time;
+  GstClockTime  duration;
+
+  guint8        prop_flags;        /* payload length types                 */
+} AsfPacket;
+
+typedef enum {
+  GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE,
+  GST_ASF_DEMUX_PARSE_PACKET_ERROR_RECOVERABLE,
+  GST_ASF_DEMUX_PARSE_PACKET_ERROR_FATAL
+} GstAsfDemuxParsePacketError;
+
+GstAsfDemuxParsePacketError gst_asf_demux_parse_packet (GstASFDemux * demux, GstBuffer * buf);
+
+#define gst_asf_payload_is_complete(payload) \
+    ((payload)->buf_filled >= (payload)->mo_size)
+
+G_END_DECLS
+
+#endif /* __ASF_PACKET_H__ */
+
diff --git a/subprojects/gst-plugins-ugly/gst/asfdemux/gstasf.c b/subprojects/gst-plugins-ugly/gst/asfdemux/gstasf.c
new file mode 100644 (file)
index 0000000..73a7db2
--- /dev/null
@@ -0,0 +1,52 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include <gst/riff/riff-read.h>
+#include "gst/gst-i18n-plugin.h"
+
+#include "gstasfelements.h"
+
+
+/* #include "gstasfmux.h" */
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  gboolean ret = FALSE;
+
+  ret |= GST_ELEMENT_REGISTER (asfdemux, plugin);
+  ret |= GST_ELEMENT_REGISTER (rtspwms, plugin);
+  ret |= GST_ELEMENT_REGISTER (rtpasfdepay, plugin);
+/*
+  if (!gst_element_register (plugin, "asfmux", GST_RANK_NONE, GST_TYPE_ASFMUX))
+    return FALSE;
+*/
+  return ret;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    asf,
+    "Demuxes and muxes audio and video in Microsofts ASF format",
+    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/subprojects/gst-plugins-ugly/gst/asfdemux/gstasfdemux.c b/subprojects/gst-plugins-ugly/gst/asfdemux/gstasfdemux.c
new file mode 100644 (file)
index 0000000..0c8dc84
--- /dev/null
@@ -0,0 +1,4921 @@
+/* GStreamer ASF/WMV/WMA demuxer
+ * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) 2006-2009 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/* TODO:
+ *
+ * - _loop():
+ *   stop if at end of segment if != end of file, ie. demux->segment.stop
+ *
+ * - fix packet parsing:
+ *   there's something wrong with timestamps for packets with keyframes,
+ *   and durations too.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gstutils.h>
+#include <gst/base/gstbytereader.h>
+#include <gst/base/gsttypefindhelper.h>
+#include <gst/riff/riff-media.h>
+#include <gst/tag/tag.h>
+#include <gst/gst-i18n-plugin.h>
+#include <gst/video/video.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "gstasfelements.h"
+#include "gstasfdemux.h"
+#include "asfheaders.h"
+#include "asfpacket.h"
+
+GST_DEBUG_CATEGORY (asfdemux_dbg);
+#define GST_CAT_DEFAULT asfdemux_dbg
+
+static GstStaticPadTemplate gst_asf_demux_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-ms-asf")
+    );
+
+static GstStaticPadTemplate audio_src_template =
+GST_STATIC_PAD_TEMPLATE ("audio_%u",
+    GST_PAD_SRC,
+    GST_PAD_SOMETIMES,
+    GST_STATIC_CAPS_ANY);
+
+static GstStaticPadTemplate video_src_template =
+GST_STATIC_PAD_TEMPLATE ("video_%u",
+    GST_PAD_SRC,
+    GST_PAD_SOMETIMES,
+    GST_STATIC_CAPS_ANY);
+
+/* size of an ASF object header, ie. GUID (16 bytes) + object size (8 bytes) */
+#define ASF_OBJECT_HEADER_SIZE  (16+8)
+
+/* FIXME: get rid of this */
+/* abuse this GstFlowReturn enum for internal usage */
+#define ASF_FLOW_NEED_MORE_DATA  99
+
+#define gst_asf_get_flow_name(flow)    \
+  (flow == ASF_FLOW_NEED_MORE_DATA) ?  \
+  "need-more-data" : gst_flow_get_name (flow)
+
+static void gst_asf_demux_finalize (GObject * object);
+static GstStateChangeReturn gst_asf_demux_change_state (GstElement * element,
+    GstStateChange transition);
+static gboolean gst_asf_demux_element_send_event (GstElement * element,
+    GstEvent * event);
+static gboolean gst_asf_demux_send_event_unlocked (GstASFDemux * demux,
+    GstEvent * event);
+static gboolean gst_asf_demux_handle_src_query (GstPad * pad,
+    GstObject * parent, GstQuery * query);
+static GstFlowReturn gst_asf_demux_chain (GstPad * pad, GstObject * parent,
+    GstBuffer * buf);
+static gboolean gst_asf_demux_sink_event (GstPad * pad, GstObject * parent,
+    GstEvent * event);
+static GstFlowReturn gst_asf_demux_process_object (GstASFDemux * demux,
+    guint8 ** p_data, guint64 * p_size);
+static gboolean gst_asf_demux_activate (GstPad * sinkpad, GstObject * parent);
+static gboolean gst_asf_demux_activate_mode (GstPad * sinkpad,
+    GstObject * parent, GstPadMode mode, gboolean active);
+static void gst_asf_demux_loop (GstASFDemux * demux);
+static void
+gst_asf_demux_process_queued_extended_stream_objects (GstASFDemux * demux);
+static gboolean gst_asf_demux_pull_headers (GstASFDemux * demux,
+    GstFlowReturn * pflow);
+static GstFlowReturn gst_asf_demux_pull_indices (GstASFDemux * demux);
+static void gst_asf_demux_reset_stream_state_after_discont (GstASFDemux * asf);
+static gboolean
+gst_asf_demux_parse_data_object_start (GstASFDemux * demux, guint8 * data);
+static void gst_asf_demux_descramble_buffer (GstASFDemux * demux,
+    AsfStream * stream, GstBuffer ** p_buffer);
+static void gst_asf_demux_activate_stream (GstASFDemux * demux,
+    AsfStream * stream);
+static GstStructure *gst_asf_demux_get_metadata_for_stream (GstASFDemux * d,
+    guint stream_num);
+static GstFlowReturn gst_asf_demux_push_complete_payloads (GstASFDemux * demux,
+    gboolean force);
+
+#define gst_asf_demux_parent_class parent_class
+G_DEFINE_TYPE (GstASFDemux, gst_asf_demux, GST_TYPE_ELEMENT);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (asfdemux, "asfdemux", GST_RANK_SECONDARY,
+    GST_TYPE_ASF_DEMUX, asf_element_init (plugin));
+
+static void
+gst_asf_demux_class_init (GstASFDemuxClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gstelement_class = (GstElementClass *) klass;
+
+  gobject_class->finalize = gst_asf_demux_finalize;
+
+  gst_element_class_set_static_metadata (gstelement_class, "ASF Demuxer",
+      "Codec/Demuxer",
+      "Demultiplexes ASF Streams", "Owen Fraser-Green <owen@discobabe.net>");
+
+  gst_element_class_add_static_pad_template (gstelement_class,
+      &audio_src_template);
+  gst_element_class_add_static_pad_template (gstelement_class,
+      &video_src_template);
+  gst_element_class_add_static_pad_template (gstelement_class,
+      &gst_asf_demux_sink_template);
+
+  gstelement_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_asf_demux_change_state);
+  gstelement_class->send_event =
+      GST_DEBUG_FUNCPTR (gst_asf_demux_element_send_event);
+}
+
+static void
+gst_asf_demux_free_stream (GstASFDemux * demux, AsfStream * stream)
+{
+  gst_caps_replace (&stream->caps, NULL);
+  if (stream->pending_tags) {
+    gst_tag_list_unref (stream->pending_tags);
+    stream->pending_tags = NULL;
+  }
+  if (stream->streamheader) {
+    gst_buffer_unref (stream->streamheader);
+    stream->streamheader = NULL;
+  }
+  if (stream->pad) {
+    if (stream->active) {
+      gst_element_remove_pad (GST_ELEMENT_CAST (demux), stream->pad);
+      gst_flow_combiner_remove_pad (demux->flowcombiner, stream->pad);
+    } else
+      gst_object_unref (stream->pad);
+    stream->pad = NULL;
+  }
+
+  if (stream->payloads) {
+    while (stream->payloads->len > 0) {
+      AsfPayload *payload;
+      guint last;
+
+      last = stream->payloads->len - 1;
+      payload = &g_array_index (stream->payloads, AsfPayload, last);
+      gst_buffer_replace (&payload->buf, NULL);
+      g_array_remove_index (stream->payloads, last);
+    }
+    g_array_free (stream->payloads, TRUE);
+    stream->payloads = NULL;
+  }
+
+  if (stream->payloads_rev) {
+    while (stream->payloads_rev->len > 0) {
+      AsfPayload *payload;
+      guint last;
+
+      last = stream->payloads_rev->len - 1;
+      payload = &g_array_index (stream->payloads_rev, AsfPayload, last);
+      gst_buffer_replace (&payload->buf, NULL);
+      g_array_remove_index (stream->payloads_rev, last);
+    }
+    g_array_free (stream->payloads_rev, TRUE);
+    stream->payloads_rev = NULL;
+  }
+
+  if (stream->ext_props.valid) {
+    g_free (stream->ext_props.payload_extensions);
+    stream->ext_props.payload_extensions = NULL;
+  }
+}
+
+static void
+gst_asf_demux_reset (GstASFDemux * demux, gboolean chain_reset)
+{
+  GST_LOG_OBJECT (demux, "resetting");
+
+  gst_segment_init (&demux->segment, GST_FORMAT_UNDEFINED);
+  demux->segment_running = FALSE;
+  if (demux->adapter && !chain_reset) {
+    gst_adapter_clear (demux->adapter);
+    g_object_unref (demux->adapter);
+    demux->adapter = NULL;
+  }
+  if (demux->taglist) {
+    gst_tag_list_unref (demux->taglist);
+    demux->taglist = NULL;
+  }
+  if (demux->metadata) {
+    gst_caps_unref (demux->metadata);
+    demux->metadata = NULL;
+  }
+  demux->metadata = gst_caps_new_empty ();
+  if (demux->global_metadata) {
+    gst_structure_free (demux->global_metadata);
+    demux->global_metadata = NULL;
+  }
+  demux->global_metadata = gst_structure_new_empty ("metadata");
+  if (demux->mut_ex_streams) {
+    g_slist_free (demux->mut_ex_streams);
+    demux->mut_ex_streams = NULL;
+  }
+
+  demux->state = GST_ASF_DEMUX_STATE_HEADER;
+  g_free (demux->objpath);
+  demux->objpath = NULL;
+  g_strfreev (demux->languages);
+  demux->languages = NULL;
+  demux->num_languages = 0;
+  g_slist_foreach (demux->ext_stream_props, (GFunc) gst_mini_object_unref,
+      NULL);
+  g_slist_free (demux->ext_stream_props);
+  demux->ext_stream_props = NULL;
+
+  while (demux->old_num_streams > 0) {
+    gst_asf_demux_free_stream (demux,
+        &demux->old_stream[demux->old_num_streams - 1]);
+    --demux->old_num_streams;
+  }
+  memset (demux->old_stream, 0, sizeof (demux->old_stream));
+  demux->old_num_streams = 0;
+
+  /* when resetting for a new chained asf, we don't want to remove the pads
+   * before adding the new ones */
+  if (chain_reset) {
+    memcpy (demux->old_stream, demux->stream, sizeof (demux->stream));
+    demux->old_num_streams = demux->num_streams;
+    demux->num_streams = 0;
+  }
+
+  while (demux->num_streams > 0) {
+    gst_asf_demux_free_stream (demux, &demux->stream[demux->num_streams - 1]);
+    --demux->num_streams;
+  }
+  memset (demux->stream, 0, sizeof (demux->stream));
+  if (!chain_reset) {
+    /* do not remove those for not adding pads with same name */
+    demux->num_audio_streams = 0;
+    demux->num_video_streams = 0;
+    demux->have_group_id = FALSE;
+    demux->group_id = G_MAXUINT;
+  }
+  demux->num_streams = 0;
+  demux->activated_streams = FALSE;
+  demux->first_ts = GST_CLOCK_TIME_NONE;
+  demux->segment_ts = GST_CLOCK_TIME_NONE;
+  demux->in_gap = 0;
+  if (!chain_reset)
+    gst_segment_init (&demux->in_segment, GST_FORMAT_UNDEFINED);
+  demux->state = GST_ASF_DEMUX_STATE_HEADER;
+  demux->seekable = FALSE;
+  demux->broadcast = FALSE;
+  demux->sidx_interval = 0;
+  demux->sidx_num_entries = 0;
+  g_free (demux->sidx_entries);
+  demux->sidx_entries = NULL;
+
+  demux->speed_packets = 1;
+
+  demux->asf_3D_mode = GST_ASF_3D_NONE;
+
+  if (chain_reset) {
+    GST_LOG_OBJECT (demux, "Restarting");
+    gst_segment_init (&demux->segment, GST_FORMAT_TIME);
+    demux->need_newsegment = TRUE;
+    demux->segment_seqnum = 0;
+    demux->segment_running = FALSE;
+    demux->keyunit_sync = FALSE;
+    demux->accurate = FALSE;
+    demux->data_size = 0;
+    demux->data_offset = 0;
+    demux->index_offset = 0;
+  } else {
+    demux->base_offset = 0;
+  }
+
+  g_slist_free (demux->other_streams);
+  demux->other_streams = NULL;
+}
+
+static void
+gst_asf_demux_init (GstASFDemux * demux)
+{
+  demux->sinkpad =
+      gst_pad_new_from_static_template (&gst_asf_demux_sink_template, "sink");
+  gst_pad_set_chain_function (demux->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_asf_demux_chain));
+  gst_pad_set_event_function (demux->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_asf_demux_sink_event));
+  gst_pad_set_activate_function (demux->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_asf_demux_activate));
+  gst_pad_set_activatemode_function (demux->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_asf_demux_activate_mode));
+  gst_element_add_pad (GST_ELEMENT (demux), demux->sinkpad);
+
+  /* set initial state */
+  gst_asf_demux_reset (demux, FALSE);
+}
+
+static gboolean
+gst_asf_demux_activate (GstPad * sinkpad, GstObject * parent)
+{
+  GstQuery *query;
+  gboolean pull_mode;
+
+  query = gst_query_new_scheduling ();
+
+  if (!gst_pad_peer_query (sinkpad, query)) {
+    gst_query_unref (query);
+    goto activate_push;
+  }
+
+  pull_mode = gst_query_has_scheduling_mode_with_flags (query,
+      GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE);
+  gst_query_unref (query);
+
+  if (!pull_mode)
+    goto activate_push;
+
+  GST_DEBUG_OBJECT (sinkpad, "activating pull");
+  return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PULL, TRUE);
+
+activate_push:
+  {
+    GST_DEBUG_OBJECT (sinkpad, "activating push");
+    return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PUSH, TRUE);
+  }
+}
+
+static gboolean
+gst_asf_demux_activate_mode (GstPad * sinkpad, GstObject * parent,
+    GstPadMode mode, gboolean active)
+{
+  gboolean res;
+  GstASFDemux *demux;
+
+  demux = GST_ASF_DEMUX (parent);
+
+  switch (mode) {
+    case GST_PAD_MODE_PUSH:
+      demux->state = GST_ASF_DEMUX_STATE_HEADER;
+      demux->streaming = TRUE;
+      res = TRUE;
+      break;
+    case GST_PAD_MODE_PULL:
+      if (active) {
+        demux->state = GST_ASF_DEMUX_STATE_HEADER;
+        demux->streaming = FALSE;
+
+        res = gst_pad_start_task (sinkpad, (GstTaskFunction) gst_asf_demux_loop,
+            demux, NULL);
+      } else {
+        res = gst_pad_stop_task (sinkpad);
+      }
+      break;
+    default:
+      res = FALSE;
+      break;
+  }
+  return res;
+}
+
+static gboolean
+gst_asf_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  GstASFDemux *demux;
+  gboolean ret = TRUE;
+
+  demux = GST_ASF_DEMUX (parent);
+
+  GST_LOG_OBJECT (demux, "handling %s event", GST_EVENT_TYPE_NAME (event));
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEGMENT:{
+      const GstSegment *segment;
+
+      gst_event_parse_segment (event, &segment);
+
+      if (segment->format == GST_FORMAT_BYTES) {
+        if (demux->packet_size && segment->start > demux->data_offset)
+          demux->packet = (segment->start - demux->data_offset) /
+              demux->packet_size;
+        else
+          demux->packet = 0;
+      } else if (segment->format == GST_FORMAT_TIME) {
+        /* do not know packet position, not really a problem */
+        demux->packet = -1;
+      } else {
+        GST_WARNING_OBJECT (demux, "unsupported newsegment format, ignoring");
+        gst_event_unref (event);
+        break;
+      }
+
+      /* record upstream segment for interpolation */
+      if (segment->format != demux->in_segment.format)
+        gst_segment_init (&demux->in_segment, GST_FORMAT_UNDEFINED);
+      gst_segment_copy_into (segment, &demux->in_segment);
+
+      /* in either case, clear some state and generate newsegment later on */
+      GST_OBJECT_LOCK (demux);
+      demux->segment_ts = GST_CLOCK_TIME_NONE;
+      demux->in_gap = GST_CLOCK_TIME_NONE;
+      demux->need_newsegment = TRUE;
+      demux->segment_seqnum = gst_event_get_seqnum (event);
+      gst_asf_demux_reset_stream_state_after_discont (demux);
+      /* if we seek back after reaching EOS, go back to packet reading state */
+      if (demux->data_offset > 0 && segment->start >= demux->data_offset
+          && demux->state == GST_ASF_DEMUX_STATE_INDEX) {
+        demux->state = GST_ASF_DEMUX_STATE_DATA;
+      }
+      GST_OBJECT_UNLOCK (demux);
+
+      gst_event_unref (event);
+      break;
+    }
+    case GST_EVENT_EOS:{
+      GstFlowReturn flow;
+
+      if (demux->state == GST_ASF_DEMUX_STATE_HEADER) {
+        GST_ELEMENT_ERROR (demux, STREAM, DEMUX,
+            (_("This stream contains no data.")),
+            ("got eos and didn't receive a complete header object"));
+        break;
+      }
+      flow = gst_asf_demux_push_complete_payloads (demux, TRUE);
+      if (!demux->activated_streams) {
+        /* If we still haven't got activated streams, the file is most likely corrupt */
+        GST_ELEMENT_ERROR (demux, STREAM, WRONG_TYPE,
+            (_("This stream contains no data.")),
+            ("got eos and didn't receive a complete header object"));
+        break;
+      }
+      if (flow < GST_FLOW_EOS || flow == GST_FLOW_NOT_LINKED) {
+        GST_ELEMENT_FLOW_ERROR (demux, flow);
+        break;
+      }
+
+      GST_OBJECT_LOCK (demux);
+      gst_adapter_clear (demux->adapter);
+      GST_OBJECT_UNLOCK (demux);
+      gst_asf_demux_send_event_unlocked (demux, event);
+      break;
+    }
+
+    case GST_EVENT_FLUSH_STOP:
+      GST_OBJECT_LOCK (demux);
+      gst_asf_demux_reset_stream_state_after_discont (demux);
+      GST_OBJECT_UNLOCK (demux);
+      gst_asf_demux_send_event_unlocked (demux, event);
+      /* upon activation, latency is no longer introduced, e.g. after seek */
+      if (demux->activated_streams)
+        demux->latency = 0;
+      break;
+
+    default:
+      ret = gst_pad_event_default (pad, parent, event);
+      break;
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_asf_demux_seek_index_lookup (GstASFDemux * demux, guint * packet,
+    GstClockTime seek_time, GstClockTime * p_idx_time, guint * speed,
+    gboolean next, gboolean * eos)
+{
+  GstClockTime idx_time;
+  guint idx;
+
+  if (eos)
+    *eos = FALSE;
+
+  if (G_UNLIKELY (demux->sidx_num_entries == 0 || demux->sidx_interval == 0))
+    return FALSE;
+
+  idx = (guint) ((seek_time + demux->preroll) / demux->sidx_interval);
+
+  if (next) {
+    /* if we want the next keyframe, we have to go forward till we find
+       a different packet number */
+    guint idx2;
+    if (idx >= demux->sidx_num_entries - 1) {
+      /* If we get here, we're asking for next keyframe after the last one. There isn't one. */
+      if (eos)
+        *eos = TRUE;
+      return FALSE;
+    }
+    for (idx2 = idx + 1; idx2 < demux->sidx_num_entries; ++idx2) {
+      if (demux->sidx_entries[idx].packet != demux->sidx_entries[idx2].packet) {
+        idx = idx2;
+        break;
+      }
+    }
+  }
+
+  if (G_UNLIKELY (idx >= demux->sidx_num_entries)) {
+    if (eos)
+      *eos = TRUE;
+    return FALSE;
+  }
+
+  *packet = demux->sidx_entries[idx].packet;
+  if (speed)
+    *speed = demux->sidx_entries[idx].count;
+
+  /* so we get closer to the actual time of the packet ... actually, let's not
+   * do this, since we throw away superfluous payloads before the seek position
+   * anyway; this way, our key unit seek 'snap resolution' is a bit better
+   * (ie. same as index resolution) */
+  /*
+     while (idx > 0 && demux->sidx_entries[idx-1] == demux->sidx_entries[idx])
+     --idx;
+   */
+
+  idx_time = demux->sidx_interval * idx;
+  if (G_LIKELY (idx_time >= demux->preroll))
+    idx_time -= demux->preroll;
+
+  GST_DEBUG_OBJECT (demux, "%" GST_TIME_FORMAT " => packet %u at %"
+      GST_TIME_FORMAT, GST_TIME_ARGS (seek_time), *packet,
+      GST_TIME_ARGS (idx_time));
+
+  if (G_LIKELY (p_idx_time))
+    *p_idx_time = idx_time;
+
+  return TRUE;
+}
+
+static void
+gst_asf_demux_reset_stream_state_after_discont (GstASFDemux * demux)
+{
+  guint n;
+
+  gst_adapter_clear (demux->adapter);
+
+  GST_DEBUG_OBJECT (demux, "reset stream state");
+
+  gst_flow_combiner_reset (demux->flowcombiner);
+  for (n = 0; n < demux->num_streams; n++) {
+    demux->stream[n].discont = TRUE;
+    demux->stream[n].first_buffer = TRUE;
+
+    while (demux->stream[n].payloads->len > 0) {
+      AsfPayload *payload;
+      guint last;
+
+      last = demux->stream[n].payloads->len - 1;
+      payload = &g_array_index (demux->stream[n].payloads, AsfPayload, last);
+      gst_buffer_replace (&payload->buf, NULL);
+      g_array_remove_index (demux->stream[n].payloads, last);
+    }
+  }
+}
+
+static void
+gst_asf_demux_mark_discont (GstASFDemux * demux)
+{
+  guint n;
+
+  GST_DEBUG_OBJECT (demux, "Mark stream discont");
+
+  for (n = 0; n < demux->num_streams; n++)
+    demux->stream[n].discont = TRUE;
+}
+
+/* do a seek in push based mode */
+static gboolean
+gst_asf_demux_handle_seek_push (GstASFDemux * demux, GstEvent * event)
+{
+  gdouble rate;
+  GstFormat format;
+  GstSeekFlags flags;
+  GstSeekType cur_type, stop_type;
+  gint64 cur, stop;
+  guint packet;
+  gboolean res;
+  GstEvent *byte_event;
+
+  gst_event_parse_seek (event, &rate, &format, &flags, &cur_type, &cur,
+      &stop_type, &stop);
+
+  stop_type = GST_SEEK_TYPE_NONE;
+  stop = -1;
+
+  GST_DEBUG_OBJECT (demux, "seeking to %" GST_TIME_FORMAT, GST_TIME_ARGS (cur));
+
+  /* determine packet, by index or by estimation */
+  if (!gst_asf_demux_seek_index_lookup (demux, &packet, cur, NULL, NULL, FALSE,
+          NULL)) {
+    packet =
+        (guint) gst_util_uint64_scale (demux->num_packets, cur,
+        demux->play_time);
+  }
+
+  if (packet > demux->num_packets) {
+    GST_DEBUG_OBJECT (demux, "could not determine packet to seek to, "
+        "seek aborted.");
+    return FALSE;
+  }
+
+  GST_DEBUG_OBJECT (demux, "seeking to packet %d", packet);
+
+  cur = demux->data_offset + ((guint64) packet * demux->packet_size);
+
+  GST_DEBUG_OBJECT (demux, "Pushing BYTE seek rate %g, "
+      "start %" G_GINT64_FORMAT ", stop %" G_GINT64_FORMAT, rate, cur, stop);
+  /* BYTE seek event */
+  byte_event = gst_event_new_seek (rate, GST_FORMAT_BYTES, flags, cur_type,
+      cur, stop_type, stop);
+  gst_event_set_seqnum (byte_event, gst_event_get_seqnum (event));
+  res = gst_pad_push_event (demux->sinkpad, byte_event);
+
+  return res;
+}
+
+static gboolean
+gst_asf_demux_handle_seek_event (GstASFDemux * demux, GstEvent * event)
+{
+  gboolean ret = TRUE;
+  GstClockTime idx_time;
+  GstSegment segment;
+  GstSeekFlags flags;
+  GstSeekType cur_type, stop_type;
+  GstFormat format;
+  gboolean only_need_update;
+  gboolean after, before, next;
+  gboolean flush;
+  gdouble rate;
+  gint64 cur, stop;
+  gint64 seek_time;
+  guint packet, speed_count = 1;
+  gboolean eos;
+  guint32 seqnum;
+  GstEvent *fevent;
+  gint i;
+
+  gst_event_parse_seek (event, &rate, &format, &flags, &cur_type, &cur,
+      &stop_type, &stop);
+
+  if (G_UNLIKELY (format != GST_FORMAT_TIME)) {
+    GST_LOG_OBJECT (demux, "seeking is only supported in TIME format");
+    return FALSE;
+  }
+
+  if (G_UNLIKELY (demux->seekable == FALSE || demux->packet_size == 0 ||
+          demux->num_packets == 0 || demux->play_time == 0)) {
+    GST_LOG_OBJECT (demux, "stream is not seekable");
+    return FALSE;
+  }
+
+  if (G_UNLIKELY (!demux->activated_streams)) {
+    GST_LOG_OBJECT (demux, "streams not yet activated, ignoring seek");
+    return FALSE;
+  }
+
+  if (G_UNLIKELY (rate <= 0.0)) {
+    GST_LOG_OBJECT (demux, "backward playback");
+    demux->seek_to_cur_pos = TRUE;
+    for (i = 0; i < demux->num_streams; i++) {
+      demux->stream[i].reverse_kf_ready = FALSE;
+    }
+  }
+
+  seqnum = gst_event_get_seqnum (event);
+  flush = ((flags & GST_SEEK_FLAG_FLUSH) == GST_SEEK_FLAG_FLUSH);
+  demux->accurate =
+      ((flags & GST_SEEK_FLAG_ACCURATE) == GST_SEEK_FLAG_ACCURATE);
+  demux->keyunit_sync =
+      ((flags & GST_SEEK_FLAG_KEY_UNIT) == GST_SEEK_FLAG_KEY_UNIT);
+  after = ((flags & GST_SEEK_FLAG_SNAP_AFTER) == GST_SEEK_FLAG_SNAP_AFTER);
+  before = ((flags & GST_SEEK_FLAG_SNAP_BEFORE) == GST_SEEK_FLAG_SNAP_BEFORE);
+  next = after && !before;
+
+  if (G_UNLIKELY (demux->streaming)) {
+    /* upstream might handle TIME seek, e.g. mms or rtsp, or not, e.g. http,
+     * so first try to let it handle the seek event. */
+    if (gst_pad_push_event (demux->sinkpad, gst_event_ref (event)))
+      return TRUE;
+
+    /* support it safely needs more segment handling, e.g. closing etc */
+    if (!flush) {
+      GST_LOG_OBJECT (demux, "streaming; non-flushing seek not supported");
+      return FALSE;
+    }
+    /* we can (re)construct the start later on, but not the end */
+    if (stop_type != GST_SEEK_TYPE_NONE &&
+        (stop_type != GST_SEEK_TYPE_SET || GST_CLOCK_TIME_IS_VALID (stop))) {
+      GST_LOG_OBJECT (demux, "streaming; end position must be NONE");
+      return FALSE;
+    }
+    return gst_asf_demux_handle_seek_push (demux, event);
+  }
+
+  /* unlock the streaming thread */
+  if (G_LIKELY (flush)) {
+    fevent = gst_event_new_flush_start ();
+
+    gst_event_set_seqnum (fevent, seqnum);
+    gst_pad_push_event (demux->sinkpad, gst_event_ref (fevent));
+    gst_asf_demux_send_event_unlocked (demux, fevent);
+  } else {
+    gst_pad_pause_task (demux->sinkpad);
+  }
+
+  /* grab the stream lock so that streaming cannot continue, for
+   * non flushing seeks when the element is in PAUSED this could block
+   * forever */
+  GST_PAD_STREAM_LOCK (demux->sinkpad);
+
+  if (G_LIKELY (flush)) {
+    /* we now can stop flushing, since we have the stream lock now */
+    fevent = gst_event_new_flush_stop (TRUE);
+    gst_event_set_seqnum (fevent, seqnum);
+    gst_pad_push_event (demux->sinkpad, gst_event_ref (fevent));
+    gst_asf_demux_send_event_unlocked (demux, fevent);
+  }
+
+  /* operating on copy of segment until we know the seek worked */
+  segment = demux->segment;
+
+  if (!gst_segment_do_seek (&segment, rate, format, flags, cur_type,
+          cur, stop_type, stop, &only_need_update)) {
+    ret = FALSE;
+    goto skip;
+  }
+
+  GST_DEBUG_OBJECT (demux, "seeking to time %" GST_TIME_FORMAT ", segment: "
+      "%" GST_SEGMENT_FORMAT, GST_TIME_ARGS (segment.start), &segment);
+
+  if (cur_type != GST_SEEK_TYPE_SET)
+    seek_time = segment.start;
+  else
+    seek_time = cur;
+
+  /* FIXME: should check the KEY_UNIT flag; need to adjust position to
+   * real start of data and segment_start to indexed time for key unit seek*/
+  if (G_UNLIKELY (!gst_asf_demux_seek_index_lookup (demux, &packet, seek_time,
+              &idx_time, &speed_count, next, &eos))) {
+    gint64 offset;
+
+    if (eos) {
+      demux->packet = demux->num_packets;
+      goto skip;
+    }
+
+    /* First try to query our source to see if it can convert for us. This is
+       the case when our source is an mms stream, notice that in this case
+       gstmms will do a time based seek to get the byte offset, this is not a
+       problem as the seek to this offset needs to happen anyway. */
+    if (gst_pad_peer_query_convert (demux->sinkpad, GST_FORMAT_TIME, seek_time,
+            GST_FORMAT_BYTES, &offset)) {
+      packet = (offset - demux->data_offset) / demux->packet_size;
+      GST_LOG_OBJECT (demux, "convert %" GST_TIME_FORMAT
+          " to bytes query result: %" G_GINT64_FORMAT ", data_ofset: %"
+          G_GINT64_FORMAT ", packet_size: %u," " resulting packet: %u\n",
+          GST_TIME_ARGS (seek_time), offset, demux->data_offset,
+          demux->packet_size, packet);
+    } else {
+      /* FIXME: For streams containing video, seek to an earlier position in
+       * the hope of hitting a keyframe and let the sinks throw away the stuff
+       * before the segment start. For audio-only this is unnecessary as every
+       * frame is 'key'. */
+      if (flush && (demux->accurate || (demux->keyunit_sync && !next))
+          && demux->num_video_streams > 0) {
+        seek_time -= 5 * GST_SECOND;
+        if (seek_time < 0)
+          seek_time = 0;
+      }
+
+      packet = (guint) gst_util_uint64_scale (demux->num_packets,
+          seek_time, demux->play_time);
+
+      if (packet > demux->num_packets)
+        packet = demux->num_packets;
+    }
+  } else {
+    if (G_LIKELY (demux->keyunit_sync && !demux->accurate)) {
+      GST_DEBUG_OBJECT (demux, "key unit seek, adjust seek_time = %"
+          GST_TIME_FORMAT " to index_time = %" GST_TIME_FORMAT,
+          GST_TIME_ARGS (seek_time), GST_TIME_ARGS (idx_time));
+      segment.start = idx_time;
+      segment.position = idx_time;
+      segment.time = idx_time;
+    }
+  }
+
+  GST_DEBUG_OBJECT (demux, "seeking to packet %u (%d)", packet, speed_count);
+
+  GST_OBJECT_LOCK (demux);
+  demux->segment = segment;
+  if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
+    demux->packet = (gint64) gst_util_uint64_scale (demux->num_packets,
+        stop, demux->play_time);
+  } else {
+    demux->packet = packet;
+  }
+
+  demux->need_newsegment = TRUE;
+  demux->segment_seqnum = seqnum;
+  demux->speed_packets =
+      GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment) ? 1 : speed_count;
+  gst_asf_demux_reset_stream_state_after_discont (demux);
+  GST_OBJECT_UNLOCK (demux);
+
+skip:
+  /* restart our task since it might have been stopped when we did the flush */
+  gst_pad_start_task (demux->sinkpad, (GstTaskFunction) gst_asf_demux_loop,
+      demux, NULL);
+
+  /* streaming can continue now */
+  GST_PAD_STREAM_UNLOCK (demux->sinkpad);
+
+  return ret;
+}
+
+static gboolean
+gst_asf_demux_handle_src_event (GstPad * pad, GstObject * parent,
+    GstEvent * event)
+{
+  GstASFDemux *demux;
+  gboolean ret;
+  guint32 seqnum;
+
+  demux = GST_ASF_DEMUX (parent);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEEK:
+      GST_LOG_OBJECT (pad, "seek event");
+      seqnum = gst_event_get_seqnum (event);
+      if (demux->segment_seqnum == seqnum) {
+        GST_LOG_OBJECT (pad,
+            "Drop duplicated SEEK event seqnum %" G_GUINT32_FORMAT, seqnum);
+        gst_event_unref (event);
+        ret = TRUE;
+        break;
+      }
+      ret = gst_asf_demux_handle_seek_event (demux, event);
+      gst_event_unref (event);
+      break;
+    case GST_EVENT_QOS:
+    case GST_EVENT_NAVIGATION:
+      /* just drop these two silently */
+      gst_event_unref (event);
+      ret = FALSE;
+      break;
+    default:
+      GST_LOG_OBJECT (pad, "%s event", GST_EVENT_TYPE_NAME (event));
+      ret = gst_pad_event_default (pad, parent, event);
+      break;
+  }
+
+  return ret;
+}
+
+static inline guint32
+gst_asf_demux_identify_guid (const ASFGuidHash * guids, ASFGuid * guid)
+{
+  guint32 ret;
+
+  ret = gst_asf_identify_guid (guids, guid);
+
+  GST_LOG ("%s  0x%08x-0x%08x-0x%08x-0x%08x",
+      gst_asf_get_guid_nick (guids, ret),
+      guid->v1, guid->v2, guid->v3, guid->v4);
+
+  return ret;
+}
+
+typedef struct
+{
+  AsfObjectID id;
+  guint64 size;
+} AsfObject;
+
+
+/* Peek for an object.
+ *
+ * Returns FALSE is the object is corrupted (such as the reported
+ * object size being greater than 2**32bits.
+ */
+static gboolean
+asf_demux_peek_object (GstASFDemux * demux, const guint8 * data,
+    guint data_len, AsfObject * object, gboolean expect)
+{
+  ASFGuid guid;
+
+  /* Callers should have made sure that data_len is big enough */
+  g_assert (data_len >= ASF_OBJECT_HEADER_SIZE);
+
+  if (data_len < ASF_OBJECT_HEADER_SIZE)
+    return FALSE;
+
+  guid.v1 = GST_READ_UINT32_LE (data + 0);
+  guid.v2 = GST_READ_UINT32_LE (data + 4);
+  guid.v3 = GST_READ_UINT32_LE (data + 8);
+  guid.v4 = GST_READ_UINT32_LE (data + 12);
+
+  /* FIXME: make asf_demux_identify_object_guid() */
+  object->id = gst_asf_demux_identify_guid (asf_object_guids, &guid);
+  if (object->id == ASF_OBJ_UNDEFINED && expect) {
+    GST_WARNING_OBJECT (demux, "Unknown object %08x-%08x-%08x-%08x",
+        guid.v1, guid.v2, guid.v3, guid.v4);
+  }
+
+  object->size = GST_READ_UINT64_LE (data + 16);
+  if (object->id != ASF_OBJ_DATA && object->size >= G_MAXUINT) {
+    GST_WARNING_OBJECT (demux,
+        "ASF Object size corrupted (greater than 32bit)");
+    return FALSE;
+  }
+
+
+  return TRUE;
+}
+
+static void
+gst_asf_demux_release_old_pads (GstASFDemux * demux)
+{
+  GST_DEBUG_OBJECT (demux, "Releasing old pads");
+
+  while (demux->old_num_streams > 0) {
+    gst_pad_push_event (demux->old_stream[demux->old_num_streams - 1].pad,
+        gst_event_new_eos ());
+    gst_asf_demux_free_stream (demux,
+        &demux->old_stream[demux->old_num_streams - 1]);
+    --demux->old_num_streams;
+  }
+  memset (demux->old_stream, 0, sizeof (demux->old_stream));
+  demux->old_num_streams = 0;
+}
+
+static GstFlowReturn
+gst_asf_demux_chain_headers (GstASFDemux * demux)
+{
+  AsfObject obj;
+  guint8 *header_data, *data = NULL;
+  const guint8 *cdata = NULL;
+  guint64 header_size;
+  GstFlowReturn flow = GST_FLOW_OK;
+
+  cdata = (guint8 *) gst_adapter_map (demux->adapter, ASF_OBJECT_HEADER_SIZE);
+  if (cdata == NULL)
+    goto need_more_data;
+
+  if (!asf_demux_peek_object (demux, cdata, ASF_OBJECT_HEADER_SIZE, &obj, TRUE))
+    goto parse_failed;
+  if (obj.id != ASF_OBJ_HEADER)
+    goto wrong_type;
+
+  GST_LOG_OBJECT (demux, "header size = %u", (guint) obj.size);
+
+  /* + 50 for non-packet data at beginning of ASF_OBJ_DATA */
+  if (gst_adapter_available (demux->adapter) < obj.size + 50)
+    goto need_more_data;
+
+  data = gst_adapter_take (demux->adapter, obj.size + 50);
+
+  header_data = data;
+  header_size = obj.size;
+  flow = gst_asf_demux_process_object (demux, &header_data, &header_size);
+  if (flow != GST_FLOW_OK)
+    goto parse_failed;
+
+  /* calculate where the packet data starts */
+  demux->data_offset = obj.size + 50;
+
+  /* now parse the beginning of the ASF_OBJ_DATA object */
+  if (!gst_asf_demux_parse_data_object_start (demux, data + obj.size))
+    goto wrong_type;
+
+  if (demux->num_streams == 0)
+    goto no_streams;
+
+  g_free (data);
+  return GST_FLOW_OK;
+
+/* NON-FATAL */
+need_more_data:
+  {
+    GST_LOG_OBJECT (demux, "not enough data in adapter yet");
+    return GST_FLOW_OK;
+  }
+
+/* ERRORS */
+wrong_type:
+  {
+    GST_ELEMENT_ERROR (demux, STREAM, WRONG_TYPE, (NULL),
+        ("This doesn't seem to be an ASF file"));
+    g_free (data);
+    return GST_FLOW_ERROR;
+  }
+no_streams:
+parse_failed:
+  {
+    GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
+        ("header parsing failed, or no streams found, flow = %s",
+            gst_flow_get_name (flow)));
+    g_free (data);
+    return GST_FLOW_ERROR;
+  }
+}
+
+static gboolean
+gst_asf_demux_pull_data (GstASFDemux * demux, guint64 offset, guint size,
+    GstBuffer ** p_buf, GstFlowReturn * p_flow)
+{
+  gsize buffer_size;
+  GstFlowReturn flow;
+
+  GST_LOG_OBJECT (demux, "pulling buffer at %" G_GUINT64_FORMAT "+%u",
+      offset, size);
+
+  flow = gst_pad_pull_range (demux->sinkpad, offset, size, p_buf);
+
+  if (G_LIKELY (p_flow))
+    *p_flow = flow;
+
+  if (G_UNLIKELY (flow != GST_FLOW_OK)) {
+    GST_DEBUG_OBJECT (demux, "flow %s pulling buffer at %" G_GUINT64_FORMAT
+        "+%u", gst_flow_get_name (flow), offset, size);
+    *p_buf = NULL;
+    return FALSE;
+  }
+
+  g_assert (*p_buf != NULL);
+
+  buffer_size = gst_buffer_get_size (*p_buf);
+  if (G_UNLIKELY (buffer_size < size)) {
+    GST_DEBUG_OBJECT (demux, "short read pulling buffer at %" G_GUINT64_FORMAT
+        "+%u (got only %" G_GSIZE_FORMAT " bytes)", offset, size, buffer_size);
+    gst_buffer_unref (*p_buf);
+    if (G_LIKELY (p_flow))
+      *p_flow = GST_FLOW_EOS;
+    *p_buf = NULL;
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_asf_demux_pull_indices (GstASFDemux * demux)
+{
+  GstBuffer *buf = NULL;
+  guint64 offset;
+  guint num_read = 0;
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  offset = demux->index_offset;
+
+  if (G_UNLIKELY (offset == 0)) {
+    GST_DEBUG_OBJECT (demux, "can't read indices, don't know index offset");
+    /* non-fatal */
+    return GST_FLOW_OK;
+  }
+
+  while (gst_asf_demux_pull_data (demux, offset, 16 + 8, &buf, NULL)) {
+    AsfObject obj;
+    GstMapInfo map;
+    guint8 *bufdata;
+    guint64 obj_size;
+
+    gst_buffer_map (buf, &map, GST_MAP_READ);
+    g_assert (map.size >= 16 + 8);
+    if (!asf_demux_peek_object (demux, map.data, 16 + 8, &obj, TRUE)) {
+      GST_DEBUG_OBJECT (demux, "No valid object, corrupted index, ignoring");
+      GST_MEMDUMP_OBJECT (demux, "Corrupted index ?", map.data, MIN (map.size,
+              64));
+      gst_buffer_unmap (buf, &map);
+      gst_buffer_replace (&buf, NULL);
+      /* Non-fatal, return */
+      break;
+    }
+    gst_buffer_unmap (buf, &map);
+    gst_buffer_replace (&buf, NULL);
+
+    /* check for sanity */
+    if (G_UNLIKELY (obj.size > (5 * 1024 * 1024))) {
+      GST_DEBUG_OBJECT (demux, "implausible index object size, bailing out");
+      break;
+    }
+
+    if (G_UNLIKELY (!gst_asf_demux_pull_data (demux, offset, obj.size, &buf,
+                NULL)))
+      break;
+
+    GST_LOG_OBJECT (demux, "index object at offset 0x%" G_GINT64_MODIFIER "X"
+        ", size %u", offset, (guint) obj.size);
+
+    offset += obj.size;         /* increase before _process_object changes it */
+
+    gst_buffer_map (buf, &map, GST_MAP_READ);
+    g_assert (map.size >= obj.size);
+    bufdata = (guint8 *) map.data;
+    obj_size = obj.size;
+    ret = gst_asf_demux_process_object (demux, &bufdata, &obj_size);
+    gst_buffer_unmap (buf, &map);
+    gst_buffer_replace (&buf, NULL);
+
+    if (ret == ASF_FLOW_NEED_MORE_DATA) {
+      /* Since indices are at the end of the file, if we need more data,
+       * we consider it as a non-fatal corrupted index */
+      ret = GST_FLOW_OK;
+      break;
+    }
+
+    if (G_UNLIKELY (ret != GST_FLOW_OK))
+      break;
+
+    ++num_read;
+  }
+
+  GST_DEBUG_OBJECT (demux, "read %u index objects , returning %s", num_read,
+      gst_flow_get_name (ret));
+  return ret;
+}
+
+static gboolean
+gst_asf_demux_parse_data_object_start (GstASFDemux * demux, guint8 * data)
+{
+  AsfObject obj;
+
+  if (!asf_demux_peek_object (demux, data, 50, &obj, TRUE)) {
+    GST_WARNING_OBJECT (demux, "Corrupted data");
+    return FALSE;
+  }
+  if (obj.id != ASF_OBJ_DATA) {
+    GST_WARNING_OBJECT (demux, "headers not followed by a DATA object");
+    return FALSE;
+  }
+
+  demux->state = GST_ASF_DEMUX_STATE_DATA;
+
+  if (!demux->broadcast && obj.size > 50) {
+    demux->data_size = obj.size - 50;
+    /* CHECKME: for at least one file this is off by +158 bytes?! */
+    demux->index_offset = demux->data_offset + demux->data_size;
+  } else {
+    demux->data_size = 0;
+    demux->index_offset = 0;
+  }
+
+  demux->packet = 0;
+
+  if (!demux->broadcast) {
+    /* skip object header (24 bytes) and file GUID (16 bytes) */
+    demux->num_packets = GST_READ_UINT64_LE (data + (16 + 8) + 16);
+  } else {
+    demux->num_packets = 0;
+  }
+
+  if (demux->num_packets == 0)
+    demux->seekable = FALSE;
+
+  /* fallback in the unlikely case that headers are inconsistent, can't hurt */
+  if (demux->data_size == 0 && demux->num_packets > 0) {
+    demux->data_size = demux->num_packets * demux->packet_size;
+    demux->index_offset = demux->data_offset + demux->data_size;
+  }
+
+  /* process pending stream objects and create pads for those */
+  gst_asf_demux_process_queued_extended_stream_objects (demux);
+
+  GST_INFO_OBJECT (demux, "Stream has %" G_GUINT64_FORMAT " packets, "
+      "data_offset=%" G_GINT64_FORMAT ", data_size=%" G_GINT64_FORMAT
+      ", index_offset=%" G_GUINT64_FORMAT, demux->num_packets,
+      demux->data_offset, demux->data_size, demux->index_offset);
+
+  return TRUE;
+}
+
+static gboolean
+gst_asf_demux_pull_headers (GstASFDemux * demux, GstFlowReturn * pflow)
+{
+  GstFlowReturn flow = GST_FLOW_OK;
+  AsfObject obj;
+  GstBuffer *buf = NULL;
+  guint64 size;
+  GstMapInfo map;
+  guint8 *bufdata;
+
+  GST_LOG_OBJECT (demux, "reading headers");
+
+  /* pull HEADER object header, so we know its size */
+  if (!gst_asf_demux_pull_data (demux, demux->base_offset, 16 + 8, &buf, &flow))
+    goto read_failed;
+
+  gst_buffer_map (buf, &map, GST_MAP_READ);
+  g_assert (map.size >= 16 + 8);
+  if (!asf_demux_peek_object (demux, map.data, 16 + 8, &obj, TRUE)) {
+    gst_buffer_unmap (buf, &map);
+    gst_buffer_replace (&buf, NULL);
+    flow = GST_FLOW_ERROR;
+    goto read_failed;
+  }
+  gst_buffer_unmap (buf, &map);
+  gst_buffer_replace (&buf, NULL);
+
+  if (obj.id != ASF_OBJ_HEADER)
+    goto wrong_type;
+
+  GST_LOG_OBJECT (demux, "header size = %" G_GUINT64_FORMAT, obj.size);
+
+  /* pull HEADER object */
+  if (!gst_asf_demux_pull_data (demux, demux->base_offset, obj.size, &buf,
+          &flow))
+    goto read_failed;
+
+  size = obj.size;              /* don't want obj.size changed */
+  gst_buffer_map (buf, &map, GST_MAP_READ);
+  g_assert (map.size >= size);
+  bufdata = (guint8 *) map.data;
+  flow = gst_asf_demux_process_object (demux, &bufdata, &size);
+  gst_buffer_unmap (buf, &map);
+  gst_buffer_replace (&buf, NULL);
+
+  if (flow != GST_FLOW_OK) {
+    GST_WARNING_OBJECT (demux, "process_object: %s", gst_flow_get_name (flow));
+    goto parse_failed;
+  }
+
+  /* calculate where the packet data starts */
+  demux->data_offset = demux->base_offset + obj.size + 50;
+
+  /* now pull beginning of DATA object before packet data */
+  if (!gst_asf_demux_pull_data (demux, demux->base_offset + obj.size, 50, &buf,
+          &flow))
+    goto read_failed;
+
+  gst_buffer_map (buf, &map, GST_MAP_READ);
+  g_assert (map.size >= size);
+  bufdata = (guint8 *) map.data;
+  if (!gst_asf_demux_parse_data_object_start (demux, bufdata))
+    goto wrong_type;
+
+  if (demux->num_streams == 0)
+    goto no_streams;
+
+  gst_buffer_unmap (buf, &map);
+  gst_buffer_replace (&buf, NULL);
+
+  return TRUE;
+
+/* ERRORS */
+wrong_type:
+  {
+    if (buf != NULL) {
+      gst_buffer_unmap (buf, &map);
+      gst_buffer_replace (&buf, NULL);
+    }
+    GST_ELEMENT_ERROR (demux, STREAM, WRONG_TYPE, (NULL),
+        ("This doesn't seem to be an ASF file"));
+    *pflow = GST_FLOW_ERROR;
+    return FALSE;
+  }
+
+no_streams:
+  flow = GST_FLOW_ERROR;
+  GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
+      ("header parsing failed, or no streams found, flow = %s",
+          gst_flow_get_name (flow)));
+read_failed:
+parse_failed:
+  {
+    if (buf)
+      gst_buffer_unmap (buf, &map);
+    gst_buffer_replace (&buf, NULL);
+    if (flow == ASF_FLOW_NEED_MORE_DATA)
+      flow = GST_FLOW_ERROR;
+    *pflow = flow;
+    return FALSE;
+  }
+}
+
+static gboolean
+all_streams_prerolled (GstASFDemux * demux)
+{
+  GstClockTime preroll_time;
+  guint i, num_no_data = 0;
+  AsfStreamType prerolled_types = 0, all_types = 0;
+
+  /* Allow at least 500ms of preroll_time  */
+  preroll_time = MAX (demux->preroll, 500 * GST_MSECOND);
+
+  /* returns TRUE as long as there isn't a stream which (a) has data queued
+   * and (b) the timestamp of last piece of data queued is < demux->preroll
+   * AND there is at least one other stream with data queued */
+  for (i = 0; i < demux->num_streams; ++i) {
+    AsfPayload *last_payload = NULL;
+    AsfStream *stream;
+    gint last_idx;
+
+    stream = &demux->stream[i];
+
+    all_types |= stream->type;
+
+    if (G_UNLIKELY (stream->payloads->len == 0)) {
+      ++num_no_data;
+      GST_LOG_OBJECT (stream->pad, "no data queued");
+      continue;
+    }
+
+    prerolled_types |= stream->type;
+
+    /* find last payload with timestamp */
+    for (last_idx = stream->payloads->len - 1;
+        last_idx >= 0 && (last_payload == NULL
+            || !GST_CLOCK_TIME_IS_VALID (last_payload->ts)); --last_idx) {
+      last_payload = &g_array_index (stream->payloads, AsfPayload, last_idx);
+    }
+
+    GST_LOG_OBJECT (stream->pad, "checking if %" GST_TIME_FORMAT " > %"
+        GST_TIME_FORMAT, GST_TIME_ARGS (last_payload->ts),
+        GST_TIME_ARGS (preroll_time));
+    if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (last_payload->ts)
+            || last_payload->ts <= preroll_time)) {
+      GST_LOG_OBJECT (stream->pad, "not beyond preroll point yet");
+      return FALSE;
+    }
+  }
+
+  GST_LOG_OBJECT (demux, "all_types:%d prerolled_types:%d",
+      all_types, prerolled_types);
+
+  /* If streams of each present type have prerolled, we are good to go */
+  if (all_types != 0 && prerolled_types == all_types)
+    return TRUE;
+
+  if (G_UNLIKELY (num_no_data > 0))
+    return FALSE;
+
+  return TRUE;
+}
+
+#if 0
+static gboolean
+gst_asf_demux_have_mutually_exclusive_active_stream (GstASFDemux * demux,
+    AsfStream * stream)
+{
+  GSList *l;
+
+  for (l = demux->mut_ex_streams; l != NULL; l = l->next) {
+    guint8 *mes;
+
+    /* check for each mutual exclusion group whether it affects this stream */
+    for (mes = (guint8 *) l->data; mes != NULL && *mes != 0xff; ++mes) {
+      if (*mes == stream->id) {
+        /* we are in this group; let's check if we've already activated streams
+         * that are in the same group (and hence mutually exclusive to this
+         * one) */
+        for (mes = (guint8 *) l->data; mes != NULL && *mes != 0xff; ++mes) {
+          guint i;
+
+          for (i = 0; i < demux->num_streams; ++i) {
+            if (demux->stream[i].id == *mes && demux->stream[i].active) {
+              GST_LOG_OBJECT (demux, "stream with ID %d is mutually exclusive "
+                  "to already active stream with ID %d", stream->id,
+                  demux->stream[i].id);
+              return TRUE;
+            }
+          }
+        }
+        /* we can only be in this group once, let's break out and move on to
+         * the next mutual exclusion group */
+        break;
+      }
+    }
+  }
+
+  return FALSE;
+}
+#endif
+
+static void
+gst_asf_demux_check_segment_ts (GstASFDemux * demux, GstClockTime payload_ts)
+{
+  /* remember the first queued timestamp for the segment */
+  if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (demux->segment_ts) &&
+          GST_CLOCK_TIME_IS_VALID (demux->first_ts))) {
+    GST_DEBUG_OBJECT (demux, "segment ts: %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (demux->first_ts));
+    demux->segment_ts = payload_ts;
+    /* always note, but only determines segment when streaming */
+    if (demux->streaming)
+      if (!gst_segment_do_seek (&demux->segment, demux->in_segment.rate,
+              GST_FORMAT_TIME, (GstSeekFlags) demux->segment.flags,
+              GST_SEEK_TYPE_SET, demux->segment_ts, GST_SEEK_TYPE_NONE, 0,
+              NULL)) {
+        GST_WARNING_OBJECT (demux, "Initial segment seek failed");
+      }
+  }
+}
+
+static gboolean
+gst_asf_demux_get_first_ts (GstASFDemux * demux)
+{
+  if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (demux->first_ts))) {
+    GstClockTime first_ts = GST_CLOCK_TIME_NONE;
+    int i;
+
+    /* go trhough each stream, find smallest timestamp */
+    for (i = 0; i < demux->num_streams; ++i) {
+      AsfStream *stream;
+      int j;
+      GstClockTime stream_min_ts = GST_CLOCK_TIME_NONE;
+      GstClockTime stream_min_ts2 = GST_CLOCK_TIME_NONE;        /* second smallest timestamp */
+      stream = &demux->stream[i];
+
+      for (j = 0; j < stream->payloads->len; ++j) {
+        AsfPayload *payload = &g_array_index (stream->payloads, AsfPayload, j);
+        if (GST_CLOCK_TIME_IS_VALID (payload->ts) &&
+            (!GST_CLOCK_TIME_IS_VALID (stream_min_ts)
+                || stream_min_ts > payload->ts)) {
+          stream_min_ts = payload->ts;
+        }
+        if (GST_CLOCK_TIME_IS_VALID (payload->ts) &&
+            payload->ts > stream_min_ts &&
+            (!GST_CLOCK_TIME_IS_VALID (stream_min_ts2)
+                || stream_min_ts2 > payload->ts)) {
+          stream_min_ts2 = payload->ts;
+        }
+      }
+
+      /* there are some DVR ms files where first packet has TS of 0 (instead of -1) while subsequent packets have
+         regular (singificantly larger) timestamps. If we don't deal with it, we may end up with huge gap in timestamps
+         which makes playback stuck. The 0 timestamp may also be valid though, if the second packet timestamp continues 
+         from it. I haven't found a better way to distinguish between these two, except to set an arbitrary boundary
+         and disregard the first 0 timestamp if the second timestamp is bigger than the boundary) */
+
+      GST_DEBUG_OBJECT (demux,
+          "stream #%u stream_min_ts %" GST_TIME_FORMAT " stream_min_ts2 %"
+          GST_TIME_FORMAT, stream->id, GST_TIME_ARGS (stream_min_ts),
+          GST_TIME_ARGS (stream_min_ts2));
+
+      if (stream_min_ts == 0 && stream_min_ts2 > GST_SECOND)    /* first timestamp is 0 and second is significantly larger, disregard the 0 */
+        stream_min_ts = stream_min_ts2;
+
+      if (GST_CLOCK_TIME_IS_VALID (stream_min_ts) &&
+          (!GST_CLOCK_TIME_IS_VALID (first_ts) || first_ts > stream_min_ts))
+        first_ts = stream_min_ts;
+    }
+
+    if (!GST_CLOCK_TIME_IS_VALID (first_ts))    /* can happen */
+      first_ts = 0;
+
+    demux->first_ts = first_ts;
+
+    /* update packets queued before we knew first timestamp */
+    for (i = 0; i < demux->num_streams; ++i) {
+      AsfStream *stream;
+      int j;
+      stream = &demux->stream[i];
+
+      for (j = 0; j < stream->payloads->len; ++j) {
+        AsfPayload *payload = &g_array_index (stream->payloads, AsfPayload, j);
+        if (GST_CLOCK_TIME_IS_VALID (payload->ts)) {
+          if (payload->ts > first_ts)
+            payload->ts -= first_ts;
+          else
+            payload->ts = 0;
+        }
+      }
+    }
+  }
+
+  gst_asf_demux_check_segment_ts (demux, 0);
+
+  return TRUE;
+}
+
+static gboolean
+gst_asf_demux_update_caps_from_payload (GstASFDemux * demux, AsfStream * stream)
+{
+  /* try to determine whether the stream is AC-3 or MPEG; In dvr-ms the codecTag is unreliable
+     and often set wrong, inspecting the data is the only way that seem to be working */
+  GstTypeFindProbability prob = GST_TYPE_FIND_NONE;
+  GstCaps *caps = NULL;
+  int i;
+  GstAdapter *adapter = gst_adapter_new ();
+
+  for (i = 0; i < stream->payloads->len && prob < GST_TYPE_FIND_LIKELY; ++i) {
+    const guint8 *data;
+    AsfPayload *payload;
+    int len;
+
+    payload = &g_array_index (stream->payloads, AsfPayload, i);
+    gst_adapter_push (adapter, gst_buffer_ref (payload->buf));
+    len = gst_adapter_available (adapter);
+    data = gst_adapter_map (adapter, len);
+
+  again:
+
+#define MIN_LENGTH 128
+
+    /* look for the sync points */
+    while (TRUE) {
+      if (len < MIN_LENGTH ||   /* give typefind something to work on */
+          (data[0] == 0x0b && data[1] == 0x77) ||       /* AC-3 sync point */
+          (data[0] == 0xFF && ((data[1] & 0xF0) >> 4) == 0xF))  /* MPEG sync point */
+        break;
+      ++data;
+      --len;
+    }
+
+    gst_caps_take (&caps, gst_type_find_helper_for_data (GST_OBJECT (demux),
+            data, len, &prob));
+
+    if (prob < GST_TYPE_FIND_LIKELY) {
+      ++data;
+      --len;
+      if (len > MIN_LENGTH)
+        /* this wasn't it, look for another sync point */
+        goto again;
+    }
+
+    gst_adapter_unmap (adapter);
+  }
+
+  gst_object_unref (adapter);
+
+  if (caps) {
+    gst_caps_take (&stream->caps, caps);
+    return TRUE;
+  } else {
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_asf_demux_check_activate_streams (GstASFDemux * demux, gboolean force)
+{
+  guint i, actual_streams = 0;
+
+  if (demux->activated_streams)
+    return TRUE;
+
+  if (!all_streams_prerolled (demux) && !force) {
+    GST_DEBUG_OBJECT (demux, "not all streams with data beyond preroll yet");
+    return FALSE;
+  }
+
+  if (G_UNLIKELY (!gst_asf_demux_get_first_ts (demux)))
+    return FALSE;
+
+  for (i = 0; i < demux->num_streams; ++i) {
+    AsfStream *stream = &demux->stream[i];
+
+    if (stream->payloads->len > 0) {
+
+      if (stream->inspect_payload &&    /* dvr-ms required payload inspection */
+          !stream->active &&    /* do not inspect active streams (caps were already set) */
+          !gst_asf_demux_update_caps_from_payload (demux, stream) &&    /* failed to determine caps */
+          stream->payloads->len < 20) { /* if we couldn't determine the caps from 20 packets then just give up and use whatever was in codecTag */
+        /* try to gather some more data  */
+        return FALSE;
+      }
+      /* we don't check mutual exclusion stuff here; either we have data for
+       * a stream, then we active it, or we don't, then we'll ignore it */
+      GST_LOG_OBJECT (stream->pad, "is prerolled - activate!");
+      gst_asf_demux_activate_stream (demux, stream);
+      actual_streams += 1;
+    } else {
+      GST_LOG_OBJECT (stream->pad, "no data, ignoring stream");
+    }
+  }
+
+  if (actual_streams == 0) {
+    /* We don't have any streams activated ! */
+    GST_ERROR_OBJECT (demux, "No streams activated!");
+    return FALSE;
+  }
+
+  gst_asf_demux_release_old_pads (demux);
+
+  demux->activated_streams = TRUE;
+  GST_LOG_OBJECT (demux, "signalling no more pads");
+  gst_element_no_more_pads (GST_ELEMENT (demux));
+  return TRUE;
+}
+
+/* returns the stream that has a complete payload with the lowest timestamp
+ * queued, or NULL (we push things by timestamp because during the internal
+ * prerolling we might accumulate more data then the external queues can take,
+ * so we'd lock up if we pushed all accumulated data for stream N in one go) */
+static AsfStream *
+gst_asf_demux_find_stream_with_complete_payload (GstASFDemux * demux)
+{
+  AsfPayload *best_payload = NULL;
+  AsfStream *best_stream = NULL;
+  guint i;
+
+  for (i = 0; i < demux->num_streams; ++i) {
+    AsfStream *stream;
+    int j;
+
+    stream = &demux->stream[i];
+
+    /* Don't push any data until we have at least one payload that falls within
+     * the current segment. This way we can remove out-of-segment payloads that
+     * don't need to be decoded after a seek, sending only data from the
+     * keyframe directly before our segment start */
+    if (stream->payloads->len > 0) {
+      AsfPayload *payload = NULL;
+      gint last_idx;
+
+      if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
+        /* Reverse playback */
+
+        if (stream->is_video) {
+          /* We have to push payloads from KF to the first frame we accumulated (reverse order) */
+          if (stream->reverse_kf_ready) {
+            payload =
+                &g_array_index (stream->payloads, AsfPayload, stream->kf_pos);
+            if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (payload->ts))) {
+              /* TODO : remove payload from the list? */
+              continue;
+            }
+          } else {
+            continue;
+          }
+        } else {
+          /* find first complete payload with timestamp */
+          for (j = stream->payloads->len - 1;
+              j >= 0 && (payload == NULL
+                  || !GST_CLOCK_TIME_IS_VALID (payload->ts)); --j) {
+            payload = &g_array_index (stream->payloads, AsfPayload, j);
+          }
+
+          /* If there's a complete payload queued for this stream */
+          if (!gst_asf_payload_is_complete (payload))
+            continue;
+
+        }
+      } else {
+
+        /* find last payload with timestamp */
+        for (last_idx = stream->payloads->len - 1;
+            last_idx >= 0 && (payload == NULL
+                || !GST_CLOCK_TIME_IS_VALID (payload->ts)); --last_idx) {
+          payload = &g_array_index (stream->payloads, AsfPayload, last_idx);
+        }
+
+        /* if this is first payload after seek we might need to update the segment */
+        if (GST_CLOCK_TIME_IS_VALID (payload->ts))
+          gst_asf_demux_check_segment_ts (demux, payload->ts);
+
+        if (G_UNLIKELY (GST_CLOCK_TIME_IS_VALID (payload->ts) &&
+                (payload->ts < demux->segment.start))) {
+          if (G_UNLIKELY ((demux->keyunit_sync) && (!demux->accurate)
+                  && payload->keyframe)) {
+            GST_DEBUG_OBJECT (stream->pad,
+                "Found keyframe, updating segment start to %" GST_TIME_FORMAT,
+                GST_TIME_ARGS (payload->ts));
+            demux->segment.start = payload->ts;
+            demux->segment.time = payload->ts;
+          } else {
+            GST_DEBUG_OBJECT (stream->pad, "Last queued payload has timestamp %"
+                GST_TIME_FORMAT " which is before our segment start %"
+                GST_TIME_FORMAT ", not pushing yet",
+                GST_TIME_ARGS (payload->ts),
+                GST_TIME_ARGS (demux->segment.start));
+            continue;
+          }
+        }
+        payload = NULL;
+        /* find first complete payload with timestamp */
+        for (j = 0;
+            j < stream->payloads->len && (payload == NULL
+                || !GST_CLOCK_TIME_IS_VALID (payload->ts)); ++j) {
+          payload = &g_array_index (stream->payloads, AsfPayload, j);
+        }
+
+        /* Now see if there's a complete payload queued for this stream */
+        if (!gst_asf_payload_is_complete (payload))
+          continue;
+      }
+
+      /* ... and whether its timestamp is lower than the current best */
+      if (best_stream == NULL || best_payload->ts > payload->ts) {
+        best_stream = stream;
+        best_payload = payload;
+      }
+    }
+  }
+
+  return best_stream;
+}
+
+static GstFlowReturn
+gst_asf_demux_push_complete_payloads (GstASFDemux * demux, gboolean force)
+{
+  AsfStream *stream;
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  if (G_UNLIKELY (!demux->activated_streams)) {
+    if (!gst_asf_demux_check_activate_streams (demux, force))
+      return GST_FLOW_OK;
+    /* streams are now activated */
+  }
+
+  while ((stream = gst_asf_demux_find_stream_with_complete_payload (demux))) {
+    AsfPayload *payload;
+    GstClockTime timestamp = GST_CLOCK_TIME_NONE;
+    GstClockTime duration = GST_CLOCK_TIME_NONE;
+
+    /* wait until we had a chance to "lock on" some payload's timestamp */
+    if (G_UNLIKELY (demux->need_newsegment
+            && !GST_CLOCK_TIME_IS_VALID (demux->segment_ts)))
+      return GST_FLOW_OK;
+
+    if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment) && stream->is_video
+        && stream->payloads->len) {
+      payload = &g_array_index (stream->payloads, AsfPayload, stream->kf_pos);
+    } else {
+      payload = &g_array_index (stream->payloads, AsfPayload, 0);
+    }
+
+    /* do we need to send a newsegment event */
+    if ((G_UNLIKELY (demux->need_newsegment))) {
+      GstEvent *segment_event;
+
+      /* safe default if insufficient upstream info */
+      if (!GST_CLOCK_TIME_IS_VALID (demux->in_gap))
+        demux->in_gap = 0;
+
+      if (demux->segment.stop == GST_CLOCK_TIME_NONE &&
+          demux->segment.duration > 0) {
+        /* slight HACK; prevent clipping of last bit */
+        demux->segment.stop = demux->segment.duration + demux->in_gap;
+      }
+
+      /* FIXME : only if ACCURATE ! */
+      if (G_LIKELY (demux->keyunit_sync && !demux->accurate
+              && (GST_CLOCK_TIME_IS_VALID (payload->ts)))
+          && !GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
+        GST_DEBUG ("Adjusting newsegment start to %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (payload->ts));
+        demux->segment.start = payload->ts;
+        demux->segment.time = payload->ts;
+      }
+
+      GST_DEBUG_OBJECT (demux, "sending new-segment event %" GST_SEGMENT_FORMAT,
+          &demux->segment);
+
+      /* note: we fix up all timestamps to start from 0, so this should be ok */
+      segment_event = gst_event_new_segment (&demux->segment);
+      if (demux->segment_seqnum)
+        gst_event_set_seqnum (segment_event, demux->segment_seqnum);
+      gst_asf_demux_send_event_unlocked (demux, segment_event);
+
+      /* now post any global tags we may have found */
+      if (demux->taglist == NULL) {
+        demux->taglist = gst_tag_list_new_empty ();
+        gst_tag_list_set_scope (demux->taglist, GST_TAG_SCOPE_GLOBAL);
+      }
+
+      gst_tag_list_add (demux->taglist, GST_TAG_MERGE_REPLACE,
+          GST_TAG_CONTAINER_FORMAT, "ASF", NULL);
+
+      GST_DEBUG_OBJECT (demux, "global tags: %" GST_PTR_FORMAT, demux->taglist);
+      gst_asf_demux_send_event_unlocked (demux,
+          gst_event_new_tag (demux->taglist));
+      demux->taglist = NULL;
+
+      demux->need_newsegment = FALSE;
+      demux->segment_running = TRUE;
+    }
+
+    /* Do we have tags pending for this stream? */
+    if (G_UNLIKELY (stream->pending_tags)) {
+      GST_LOG_OBJECT (stream->pad, "%" GST_PTR_FORMAT, stream->pending_tags);
+      gst_pad_push_event (stream->pad,
+          gst_event_new_tag (stream->pending_tags));
+      stream->pending_tags = NULL;
+    }
+
+    /* We have the whole packet now so we should push the packet to
+     * the src pad now. First though we should check if we need to do
+     * descrambling */
+    if (G_UNLIKELY (stream->span > 1)) {
+      gst_asf_demux_descramble_buffer (demux, stream, &payload->buf);
+    }
+
+    payload->buf = gst_buffer_make_writable (payload->buf);
+
+    if (G_LIKELY (!payload->keyframe)) {
+      GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DELTA_UNIT);
+    }
+
+    if (G_UNLIKELY (stream->discont)) {
+      GST_DEBUG_OBJECT (stream->pad, "marking DISCONT on stream");
+      GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DISCONT);
+      stream->discont = FALSE;
+    }
+
+    if (G_UNLIKELY (stream->is_video && payload->par_x && payload->par_y &&
+            (payload->par_x != stream->par_x) &&
+            (payload->par_y != stream->par_y))) {
+      GST_DEBUG ("Updating PAR (%d/%d => %d/%d)",
+          stream->par_x, stream->par_y, payload->par_x, payload->par_y);
+      stream->par_x = payload->par_x;
+      stream->par_y = payload->par_y;
+      stream->caps = gst_caps_make_writable (stream->caps);
+      gst_caps_set_simple (stream->caps, "pixel-aspect-ratio",
+          GST_TYPE_FRACTION, stream->par_x, stream->par_y, NULL);
+      gst_pad_set_caps (stream->pad, stream->caps);
+    }
+
+    if (G_UNLIKELY (stream->interlaced != payload->interlaced)) {
+      GST_DEBUG ("Updating interlaced status (%d => %d)", stream->interlaced,
+          payload->interlaced);
+      stream->interlaced = payload->interlaced;
+      stream->caps = gst_caps_make_writable (stream->caps);
+      gst_caps_set_simple (stream->caps, "interlace-mode", G_TYPE_BOOLEAN,
+          (stream->interlaced ? "mixed" : "progressive"), NULL);
+      gst_pad_set_caps (stream->pad, stream->caps);
+    }
+
+    /* (sort of) interpolate timestamps using upstream "frame of reference",
+     * typically useful for live src, but might (unavoidably) mess with
+     * position reporting if a live src is playing not so live content
+     * (e.g. rtspsrc taking some time to fall back to tcp) */
+    timestamp = payload->ts;
+    if (GST_CLOCK_TIME_IS_VALID (timestamp)
+        && !GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
+      timestamp += demux->in_gap;
+
+      /* Check if we're after the segment already, if so no need to push
+       * anything here */
+      if (demux->segment.stop != -1 && timestamp > demux->segment.stop) {
+        GST_DEBUG_OBJECT (stream->pad,
+            "Payload after segment stop %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (demux->segment.stop));
+        ret =
+            gst_flow_combiner_update_pad_flow (demux->flowcombiner, stream->pad,
+            GST_FLOW_EOS);
+        gst_buffer_unref (payload->buf);
+        payload->buf = NULL;
+        g_array_remove_index (stream->payloads, 0);
+        /* Break out as soon as we have an issue */
+        if (G_UNLIKELY (ret != GST_FLOW_OK))
+          break;
+
+        continue;
+      }
+    }
+
+    GST_BUFFER_PTS (payload->buf) = timestamp;
+
+    if (payload->duration == GST_CLOCK_TIME_NONE
+        && stream->ext_props.avg_time_per_frame != 0) {
+      duration = stream->ext_props.avg_time_per_frame * 100;
+    } else {
+      duration = payload->duration;
+    }
+    GST_BUFFER_DURATION (payload->buf) = duration;
+
+    /* FIXME: we should really set durations on buffers if we can */
+
+    GST_LOG_OBJECT (stream->pad, "pushing buffer, %" GST_PTR_FORMAT,
+        payload->buf);
+
+    if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment) && stream->is_video) {
+      if (stream->reverse_kf_ready == TRUE && stream->kf_pos == 0) {
+        GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DISCONT);
+      }
+    } else if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)) {
+      GST_BUFFER_FLAG_SET (payload->buf, GST_BUFFER_FLAG_DISCONT);
+    }
+
+
+    if (stream->active) {
+      if (G_UNLIKELY (stream->first_buffer)) {
+        if (stream->streamheader != NULL) {
+          GST_DEBUG_OBJECT (stream->pad,
+              "Pushing streamheader before first buffer");
+          gst_pad_push (stream->pad, gst_buffer_ref (stream->streamheader));
+        }
+        stream->first_buffer = FALSE;
+      }
+
+      if (GST_CLOCK_TIME_IS_VALID (timestamp)
+          && timestamp > demux->segment.position) {
+        demux->segment.position = timestamp;
+        if (GST_CLOCK_TIME_IS_VALID (duration))
+          demux->segment.position += timestamp;
+      }
+
+      ret = gst_pad_push (stream->pad, payload->buf);
+      ret =
+          gst_flow_combiner_update_pad_flow (demux->flowcombiner, stream->pad,
+          ret);
+    } else {
+      gst_buffer_unref (payload->buf);
+      ret = GST_FLOW_OK;
+    }
+    payload->buf = NULL;
+    if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment) && stream->is_video
+        && stream->reverse_kf_ready) {
+      g_array_remove_index (stream->payloads, stream->kf_pos);
+      stream->kf_pos--;
+
+      if (stream->reverse_kf_ready == TRUE && stream->kf_pos < 0) {
+        stream->kf_pos = 0;
+        stream->reverse_kf_ready = FALSE;
+      }
+    } else {
+      g_array_remove_index (stream->payloads, 0);
+    }
+
+    /* Break out as soon as we have an issue */
+    if (G_UNLIKELY (ret != GST_FLOW_OK))
+      break;
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_asf_demux_check_buffer_is_header (GstASFDemux * demux, GstBuffer * buf)
+{
+  AsfObject obj;
+  GstMapInfo map;
+  gboolean valid;
+  g_assert (buf != NULL);
+
+  GST_LOG_OBJECT (demux, "Checking if buffer is a header");
+
+  gst_buffer_map (buf, &map, GST_MAP_READ);
+
+  /* we return false on buffer too small */
+  if (map.size < ASF_OBJECT_HEADER_SIZE) {
+    gst_buffer_unmap (buf, &map);
+    return FALSE;
+  }
+
+  /* check if it is a header */
+  valid =
+      asf_demux_peek_object (demux, map.data, ASF_OBJECT_HEADER_SIZE, &obj,
+      TRUE);
+  gst_buffer_unmap (buf, &map);
+  if (valid && obj.id == ASF_OBJ_HEADER) {
+    return TRUE;
+  }
+  return FALSE;
+}
+
+static gboolean
+gst_asf_demux_check_chained_asf (GstASFDemux * demux)
+{
+  guint64 off = demux->data_offset + (demux->packet * demux->packet_size);
+  GstFlowReturn ret = GST_FLOW_OK;
+  GstBuffer *buf = NULL;
+  gboolean header = FALSE;
+
+  /* TODO maybe we should skip index objects after the data and look
+   * further for a new header */
+  if (gst_asf_demux_pull_data (demux, off, ASF_OBJECT_HEADER_SIZE, &buf, &ret)) {
+    g_assert (buf != NULL);
+    /* check if it is a header */
+    if (gst_asf_demux_check_buffer_is_header (demux, buf)) {
+      GST_DEBUG_OBJECT (demux, "new base offset: %" G_GUINT64_FORMAT, off);
+      demux->base_offset = off;
+      header = TRUE;
+    }
+
+    gst_buffer_unref (buf);
+  }
+
+  return header;
+}
+
+static void
+gst_asf_demux_loop (GstASFDemux * demux)
+{
+  GstFlowReturn flow = GST_FLOW_OK;
+  GstBuffer *buf = NULL;
+  guint64 off;
+
+  if (G_UNLIKELY (demux->state == GST_ASF_DEMUX_STATE_HEADER)) {
+    if (!gst_asf_demux_pull_headers (demux, &flow)) {
+      goto pause;
+    }
+
+    flow = gst_asf_demux_pull_indices (demux);
+    if (flow != GST_FLOW_OK)
+      goto pause;
+  }
+
+  g_assert (demux->state == GST_ASF_DEMUX_STATE_DATA);
+
+  if (G_UNLIKELY (demux->num_packets != 0
+          && demux->packet >= demux->num_packets))
+    goto eos;
+
+  GST_LOG_OBJECT (demux, "packet %u/%u", (guint) demux->packet + 1,
+      (guint) demux->num_packets);
+
+  off = demux->data_offset + (demux->packet * demux->packet_size);
+
+  if (G_UNLIKELY (!gst_asf_demux_pull_data (demux, off,
+              demux->packet_size * demux->speed_packets, &buf, &flow))) {
+    GST_DEBUG_OBJECT (demux, "got flow %s", gst_flow_get_name (flow));
+    if (flow == GST_FLOW_EOS) {
+      goto eos;
+    } else if (flow == GST_FLOW_FLUSHING) {
+      GST_DEBUG_OBJECT (demux, "Not fatal");
+      goto pause;
+    } else {
+      goto read_failed;
+    }
+  }
+
+  if (G_LIKELY (demux->speed_packets == 1)) {
+    GstAsfDemuxParsePacketError err;
+    err = gst_asf_demux_parse_packet (demux, buf);
+    if (G_UNLIKELY (err != GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE)) {
+      /* when we don't know when the data object ends, we should check
+       * for a chained asf */
+      if (demux->num_packets == 0) {
+        if (gst_asf_demux_check_buffer_is_header (demux, buf)) {
+          GST_INFO_OBJECT (demux, "Chained asf found");
+          demux->base_offset = off;
+          gst_asf_demux_reset (demux, TRUE);
+          gst_buffer_unref (buf);
+          return;
+        }
+      }
+      /* FIXME: We should tally up fatal errors and error out only
+       * after a few broken packets in a row? */
+
+      GST_INFO_OBJECT (demux, "Ignoring recoverable parse error");
+      gst_buffer_unref (buf);
+
+      if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)
+          && !demux->seek_to_cur_pos) {
+        --demux->packet;
+        if (demux->packet < 0) {
+          goto eos;
+        }
+      } else {
+        ++demux->packet;
+      }
+
+      return;
+    }
+
+    flow = gst_asf_demux_push_complete_payloads (demux, FALSE);
+
+    if (GST_ASF_DEMUX_IS_REVERSE_PLAYBACK (demux->segment)
+        && !demux->seek_to_cur_pos) {
+      --demux->packet;
+      if (demux->packet < 0) {
+        goto eos;
+      }
+    } else {
+      ++demux->packet;
+    }
+
+  } else {
+    guint n;
+    for (n = 0; n < demux->speed_packets; n++) {
+      GstBuffer *sub;
+      GstAsfDemuxParsePacketError err;
+
+      sub =
+          gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL,
+          n * demux->packet_size, demux->packet_size);
+      err = gst_asf_demux_parse_packet (demux, sub);
+      if (G_UNLIKELY (err != GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE)) {
+        /* when we don't know when the data object ends, we should check
+         * for a chained asf */
+        if (demux->num_packets == 0) {
+          if (gst_asf_demux_check_buffer_is_header (demux, sub)) {
+            GST_INFO_OBJECT (demux, "Chained asf found");
+            demux->base_offset = off + n * demux->packet_size;
+            gst_asf_demux_reset (demux, TRUE);
+            gst_buffer_unref (sub);
+            gst_buffer_unref (buf);
+            return;
+          }
+        }
+        /* FIXME: We should tally up fatal errors and error out only
+         * after a few broken packets in a row? */
+
+        GST_INFO_OBJECT (demux, "Ignoring recoverable parse error");
+        flow = GST_FLOW_OK;
+      }
+
+      gst_buffer_unref (sub);
+
+      if (err == GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE)
+        flow = gst_asf_demux_push_complete_payloads (demux, FALSE);
+
+      ++demux->packet;
+
+    }
+
+    /* reset speed pull */
+    demux->speed_packets = 1;
+  }
+
+  gst_buffer_unref (buf);
+
+  if (G_UNLIKELY ((demux->num_packets > 0
+              && demux->packet >= demux->num_packets)
+          || flow == GST_FLOW_EOS)) {
+    GST_LOG_OBJECT (demux, "reached EOS");
+    goto eos;
+  }
+
+  if (G_UNLIKELY (flow != GST_FLOW_OK)) {
+    GST_DEBUG_OBJECT (demux, "pushing complete payloads failed");
+    goto pause;
+  }
+
+  /* check if we're at the end of the configured segment */
+  /* FIXME: check if segment end reached etc. */
+
+  return;
+
+eos:
+  {
+    /* if we haven't activated our streams yet, this might be because we have
+     * less data queued than required for preroll; force stream activation and
+     * send any pending payloads before sending EOS */
+    if (!demux->activated_streams)
+      flow = gst_asf_demux_push_complete_payloads (demux, TRUE);
+
+    /* we want to push an eos or post a segment-done in any case */
+    if (demux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
+      gint64 stop;
+
+      /* for segment playback we need to post when (in stream time)
+       * we stopped, this is either stop (when set) or the duration. */
+      if ((stop = demux->segment.stop) == -1)
+        stop = demux->segment.duration;
+
+      GST_INFO_OBJECT (demux, "Posting segment-done, at end of segment");
+      gst_element_post_message (GST_ELEMENT_CAST (demux),
+          gst_message_new_segment_done (GST_OBJECT (demux), GST_FORMAT_TIME,
+              stop));
+      gst_asf_demux_send_event_unlocked (demux,
+          gst_event_new_segment_done (GST_FORMAT_TIME, stop));
+    } else if (flow != GST_FLOW_EOS) {
+      /* check if we have a chained asf, in case, we don't eos yet */
+      if (gst_asf_demux_check_chained_asf (demux)) {
+        GST_INFO_OBJECT (demux, "Chained ASF starting");
+        gst_asf_demux_reset (demux, TRUE);
+        return;
+      }
+    }
+
+    if (!(demux->segment.flags & GST_SEEK_FLAG_SEGMENT)) {
+      if (demux->activated_streams) {
+        /* normal playback, send EOS to all linked pads */
+        GST_INFO_OBJECT (demux, "Sending EOS, at end of stream");
+        gst_asf_demux_send_event_unlocked (demux, gst_event_new_eos ());
+      } else {
+        GST_WARNING_OBJECT (demux, "EOS without exposed streams");
+        flow = GST_FLOW_EOS;
+      }
+    }
+    /* ... and fall through to pause */
+  }
+pause:
+  {
+    GST_DEBUG_OBJECT (demux, "pausing task, flow return: %s",
+        gst_flow_get_name (flow));
+    demux->segment_running = FALSE;
+    gst_pad_pause_task (demux->sinkpad);
+
+    /* For the error cases */
+    if (flow == GST_FLOW_EOS && !demux->activated_streams) {
+      GST_ELEMENT_ERROR (demux, STREAM, WRONG_TYPE, (NULL),
+          ("This doesn't seem to be an ASF file"));
+    } else if (flow < GST_FLOW_EOS || flow == GST_FLOW_NOT_LINKED) {
+      /* Post an error. Hopefully something else already has, but if not... */
+      GST_ELEMENT_FLOW_ERROR (demux, flow);
+      gst_asf_demux_send_event_unlocked (demux, gst_event_new_eos ());
+    }
+
+    return;
+  }
+
+/* ERRORS */
+read_failed:
+  {
+    GST_DEBUG_OBJECT (demux, "Read failed, doh");
+    flow = GST_FLOW_EOS;
+    goto pause;
+  }
+#if 0
+  /* See FIXMEs above */
+parse_error:
+  {
+    gst_buffer_unref (buf);
+    GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
+        ("Error parsing ASF packet %u", (guint) demux->packet));
+    gst_asf_demux_send_event_unlocked (demux, gst_event_new_eos ());
+    flow = GST_FLOW_ERROR;
+    goto pause;
+  }
+#endif
+}
+
+#define GST_ASF_DEMUX_CHECK_HEADER_YES       0
+#define GST_ASF_DEMUX_CHECK_HEADER_NO        1
+#define GST_ASF_DEMUX_CHECK_HEADER_NEED_DATA 2
+
+static gint
+gst_asf_demux_check_header (GstASFDemux * demux)
+{
+  AsfObject obj;
+  guint8 *cdata = (guint8 *) gst_adapter_map (demux->adapter,
+      ASF_OBJECT_HEADER_SIZE);
+  if (cdata == NULL)            /* need more data */
+    return GST_ASF_DEMUX_CHECK_HEADER_NEED_DATA;
+
+  if (asf_demux_peek_object (demux, cdata, ASF_OBJECT_HEADER_SIZE, &obj, FALSE)
+      && obj.id == ASF_OBJ_HEADER) {
+    return GST_ASF_DEMUX_CHECK_HEADER_YES;
+  }
+
+  return GST_ASF_DEMUX_CHECK_HEADER_NO;
+}
+
+static GstFlowReturn
+gst_asf_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+  GstASFDemux *demux;
+
+  demux = GST_ASF_DEMUX (parent);
+
+  GST_LOG_OBJECT (demux,
+      "buffer: size=%" G_GSIZE_FORMAT ", offset=%" G_GINT64_FORMAT ", time=%"
+      GST_TIME_FORMAT, gst_buffer_get_size (buf), GST_BUFFER_OFFSET (buf),
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
+
+  if (G_UNLIKELY (GST_BUFFER_IS_DISCONT (buf))) {
+    GST_DEBUG_OBJECT (demux, "received DISCONT");
+    gst_asf_demux_mark_discont (demux);
+  }
+
+  if (G_UNLIKELY ((!GST_CLOCK_TIME_IS_VALID (demux->in_gap) &&
+              GST_BUFFER_TIMESTAMP_IS_VALID (buf)))) {
+    demux->in_gap = GST_BUFFER_TIMESTAMP (buf) - demux->in_segment.start;
+    GST_DEBUG_OBJECT (demux, "upstream segment start %" GST_TIME_FORMAT
+        ", interpolation gap: %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (demux->in_segment.start), GST_TIME_ARGS (demux->in_gap));
+  }
+
+  gst_adapter_push (demux->adapter, buf);
+
+  switch (demux->state) {
+    case GST_ASF_DEMUX_STATE_INDEX:{
+      gint result = gst_asf_demux_check_header (demux);
+      if (result == GST_ASF_DEMUX_CHECK_HEADER_NEED_DATA)       /* need more data */
+        break;
+
+      if (result == GST_ASF_DEMUX_CHECK_HEADER_NO) {
+        /* we don't care about this, probably an index */
+        /* TODO maybe would be smarter to skip all the indices
+         * until we got a new header or EOS to decide */
+        GST_LOG_OBJECT (demux, "Received index object, its EOS");
+        goto eos;
+      } else {
+        GST_INFO_OBJECT (demux, "Chained asf starting");
+        /* cleanup and get ready for a chained asf */
+        gst_asf_demux_reset (demux, TRUE);
+        /* fall through */
+      }
+    }
+    case GST_ASF_DEMUX_STATE_HEADER:{
+      ret = gst_asf_demux_chain_headers (demux);
+      if (demux->state != GST_ASF_DEMUX_STATE_DATA)
+        break;
+      /* otherwise fall through */
+    }
+    case GST_ASF_DEMUX_STATE_DATA:
+    {
+      guint64 data_size;
+
+      data_size = demux->packet_size;
+
+      while (gst_adapter_available (demux->adapter) >= data_size) {
+        GstBuffer *buf;
+        GstAsfDemuxParsePacketError err;
+
+        /* we don't know the length of the stream
+         * check for a chained asf every time */
+        if (demux->num_packets == 0) {
+          gint result = gst_asf_demux_check_header (demux);
+
+          if (result == GST_ASF_DEMUX_CHECK_HEADER_YES) {
+            GST_INFO_OBJECT (demux, "Chained asf starting");
+            /* cleanup and get ready for a chained asf */
+            gst_asf_demux_reset (demux, TRUE);
+            break;
+          }
+        } else if (G_UNLIKELY (demux->num_packets != 0 && demux->packet >= 0
+                && demux->packet >= demux->num_packets)) {
+          /* do not overshoot data section when streaming */
+          break;
+        }
+
+        buf = gst_adapter_take_buffer (demux->adapter, data_size);
+
+        /* FIXME: We should tally up fatal errors and error out only
+         * after a few broken packets in a row? */
+        err = gst_asf_demux_parse_packet (demux, buf);
+
+        gst_buffer_unref (buf);
+
+        if (G_LIKELY (err == GST_ASF_DEMUX_PARSE_PACKET_ERROR_NONE))
+          ret = gst_asf_demux_push_complete_payloads (demux, FALSE);
+        else
+          GST_WARNING_OBJECT (demux, "Parse error");
+
+        if (demux->packet >= 0)
+          ++demux->packet;
+      }
+      if (G_UNLIKELY (demux->num_packets != 0 && demux->packet >= 0
+              && demux->packet >= demux->num_packets)) {
+        demux->state = GST_ASF_DEMUX_STATE_INDEX;
+      }
+      break;
+    }
+    default:
+      g_assert_not_reached ();
+  }
+
+done:
+  if (ret != GST_FLOW_OK)
+    GST_DEBUG_OBJECT (demux, "flow: %s", gst_flow_get_name (ret));
+
+  return ret;
+
+eos:
+  {
+    GST_DEBUG_OBJECT (demux, "Handled last packet, setting EOS");
+    ret = GST_FLOW_EOS;
+    goto done;
+  }
+}
+
+static inline gboolean
+gst_asf_demux_skip_bytes (guint num_bytes, guint8 ** p_data, guint64 * p_size)
+{
+  if (*p_size < num_bytes)
+    return FALSE;
+
+  *p_data += num_bytes;
+  *p_size -= num_bytes;
+  return TRUE;
+}
+
+static inline guint8
+gst_asf_demux_get_uint8 (guint8 ** p_data, guint64 * p_size)
+{
+  guint8 ret;
+
+  g_assert (*p_size >= 1);
+  ret = GST_READ_UINT8 (*p_data);
+  *p_data += sizeof (guint8);
+  *p_size -= sizeof (guint8);
+  return ret;
+}
+
+static inline guint16
+gst_asf_demux_get_uint16 (guint8 ** p_data, guint64 * p_size)
+{
+  guint16 ret;
+
+  g_assert (*p_size >= 2);
+  ret = GST_READ_UINT16_LE (*p_data);
+  *p_data += sizeof (guint16);
+  *p_size -= sizeof (guint16);
+  return ret;
+}
+
+static inline guint32
+gst_asf_demux_get_uint32 (guint8 ** p_data, guint64 * p_size)
+{
+  guint32 ret;
+
+  g_assert (*p_size >= 4);
+  ret = GST_READ_UINT32_LE (*p_data);
+  *p_data += sizeof (guint32);
+  *p_size -= sizeof (guint32);
+  return ret;
+}
+
+static inline guint64
+gst_asf_demux_get_uint64 (guint8 ** p_data, guint64 * p_size)
+{
+  guint64 ret;
+
+  g_assert (*p_size >= 8);
+  ret = GST_READ_UINT64_LE (*p_data);
+  *p_data += sizeof (guint64);
+  *p_size -= sizeof (guint64);
+  return ret;
+}
+
+static gboolean
+gst_asf_demux_get_buffer (GstBuffer ** p_buf, guint num_bytes_to_read,
+    guint8 ** p_data, guint64 * p_size)
+{
+  *p_buf = NULL;
+
+  if (*p_size < num_bytes_to_read)
+    return FALSE;
+
+  *p_buf = gst_buffer_new_and_alloc (num_bytes_to_read);
+  gst_buffer_fill (*p_buf, 0, *p_data, num_bytes_to_read);
+
+  *p_data += num_bytes_to_read;
+  *p_size -= num_bytes_to_read;
+
+  return TRUE;
+}
+
+static gboolean
+gst_asf_demux_get_bytes (guint8 ** p_buf, guint64 num_bytes_to_read,
+    guint8 ** p_data, guint64 * p_size)
+{
+  *p_buf = NULL;
+
+  if (num_bytes_to_read >= G_MAXUINT)
+    return FALSE;
+
+  if (*p_size < num_bytes_to_read)
+    return FALSE;
+
+  *p_buf = g_memdup2 (*p_data, num_bytes_to_read);
+  *p_data += num_bytes_to_read;
+  *p_size -= num_bytes_to_read;
+  return TRUE;
+}
+
+static gboolean
+gst_asf_demux_get_string (gchar ** p_str, guint16 * p_strlen,
+    guint8 ** p_data, guint64 * p_size)
+{
+  guint16 s_length;
+  guint8 *s;
+
+  *p_str = NULL;
+
+  if (*p_size < 2)
+    return FALSE;
+
+  s_length = gst_asf_demux_get_uint16 (p_data, p_size);
+
+  if (p_strlen)
+    *p_strlen = s_length;
+
+  if (s_length == 0) {
+    GST_WARNING ("zero-length string");
+    *p_str = g_strdup ("");
+    return TRUE;
+  }
+
+  if (!gst_asf_demux_get_bytes (&s, s_length, p_data, p_size))
+    return FALSE;
+
+  g_assert (s != NULL);
+
+  /* just because They don't exist doesn't
+   * mean They are not out to get you ... */
+  if (s[s_length - 1] != '\0') {
+    s = g_realloc (s, s_length + 1);
+    s[s_length] = '\0';
+  }
+
+  *p_str = (gchar *) s;
+  return TRUE;
+}
+
+
+static void
+gst_asf_demux_get_guid (ASFGuid * guid, guint8 ** p_data, guint64 * p_size)
+{
+  g_assert (*p_size >= 4 * sizeof (guint32));
+
+  guid->v1 = gst_asf_demux_get_uint32 (p_data, p_size);
+  guid->v2 = gst_asf_demux_get_uint32 (p_data, p_size);
+  guid->v3 = gst_asf_demux_get_uint32 (p_data, p_size);
+  guid->v4 = gst_asf_demux_get_uint32 (p_data, p_size);
+}
+
+static gboolean
+gst_asf_demux_get_stream_audio (asf_stream_audio * audio, guint8 ** p_data,
+    guint64 * p_size)
+{
+  if (*p_size < (2 + 2 + 4 + 4 + 2 + 2 + 2))
+    return FALSE;
+
+  /* WAVEFORMATEX Structure */
+  audio->codec_tag = gst_asf_demux_get_uint16 (p_data, p_size);
+  audio->channels = gst_asf_demux_get_uint16 (p_data, p_size);
+  audio->sample_rate = gst_asf_demux_get_uint32 (p_data, p_size);
+  audio->byte_rate = gst_asf_demux_get_uint32 (p_data, p_size);
+  audio->block_align = gst_asf_demux_get_uint16 (p_data, p_size);
+  audio->word_size = gst_asf_demux_get_uint16 (p_data, p_size);
+  /* Codec specific data size */
+  audio->size = gst_asf_demux_get_uint16 (p_data, p_size);
+  if (audio->size > *p_size) {
+    GST_WARNING ("Corrupted audio codec_data (should be at least %u bytes, is %"
+        G_GUINT64_FORMAT " long)", audio->size, *p_size);
+    return FALSE;
+  }
+  return TRUE;
+}
+
+static gboolean
+gst_asf_demux_get_stream_video (asf_stream_video * video, guint8 ** p_data,
+    guint64 * p_size)
+{
+  if (*p_size < (4 + 4 + 1 + 2))
+    return FALSE;
+
+  video->width = gst_asf_demux_get_uint32 (p_data, p_size);
+  video->height = gst_asf_demux_get_uint32 (p_data, p_size);
+  video->unknown = gst_asf_demux_get_uint8 (p_data, p_size);
+  video->size = gst_asf_demux_get_uint16 (p_data, p_size);
+  return TRUE;
+}
+
+static gboolean
+gst_asf_demux_get_stream_video_format (asf_stream_video_format * fmt,
+    guint8 ** p_data, guint64 * p_size)
+{
+  if (*p_size < (4 + 4 + 4 + 2 + 2 + 4 + 4 + 4 + 4 + 4 + 4))
+    return FALSE;
+
+  fmt->size = gst_asf_demux_get_uint32 (p_data, p_size);
+  /* Sanity checks */
+  if (fmt->size < 40) {
+    GST_WARNING ("Corrupted asf_stream_video_format (size < 40)");
+    return FALSE;
+  }
+  if ((guint64) fmt->size - 4 > *p_size) {
+    GST_WARNING ("Corrupted asf_stream_video_format (codec_data is too small)");
+    return FALSE;
+  }
+  fmt->width = gst_asf_demux_get_uint32 (p_data, p_size);
+  fmt->height = gst_asf_demux_get_uint32 (p_data, p_size);
+  fmt->planes = gst_asf_demux_get_uint16 (p_data, p_size);
+  fmt->depth = gst_asf_demux_get_uint16 (p_data, p_size);
+  fmt->tag = gst_asf_demux_get_uint32 (p_data, p_size);
+  fmt->image_size = gst_asf_demux_get_uint32 (p_data, p_size);
+  fmt->xpels_meter = gst_asf_demux_get_uint32 (p_data, p_size);
+  fmt->ypels_meter = gst_asf_demux_get_uint32 (p_data, p_size);
+  fmt->num_colors = gst_asf_demux_get_uint32 (p_data, p_size);
+  fmt->imp_colors = gst_asf_demux_get_uint32 (p_data, p_size);
+  return TRUE;
+}
+
+AsfStream *
+gst_asf_demux_get_stream (GstASFDemux * demux, guint16 id)
+{
+  guint i;
+
+  for (i = 0; i < demux->num_streams; i++) {
+    if (demux->stream[i].id == id)
+      return &demux->stream[i];
+  }
+
+  if (gst_asf_demux_is_unknown_stream (demux, id))
+    GST_WARNING ("Segment found for undefined stream: (%d)", id);
+  return NULL;
+}
+
+static AsfStream *
+gst_asf_demux_setup_pad (GstASFDemux * demux, GstPad * src_pad,
+    GstCaps * caps, guint16 id, gboolean is_video, GstBuffer * streamheader,
+    GstTagList * tags)
+{
+  AsfStream *stream;
+
+  gst_pad_use_fixed_caps (src_pad);
+  gst_pad_set_caps (src_pad, caps);
+
+  gst_pad_set_event_function (src_pad,
+      GST_DEBUG_FUNCPTR (gst_asf_demux_handle_src_event));
+  gst_pad_set_query_function (src_pad,
+      GST_DEBUG_FUNCPTR (gst_asf_demux_handle_src_query));
+
+  stream = &demux->stream[demux->num_streams];
+  stream->caps = caps;
+  stream->pad = src_pad;
+  stream->id = id;
+  stream->fps_known = !is_video;        /* bit hacky for audio */
+  stream->is_video = is_video;
+  stream->pending_tags = tags;
+  stream->discont = TRUE;
+  stream->first_buffer = TRUE;
+  stream->streamheader = streamheader;
+  if (stream->streamheader) {
+    stream->streamheader = gst_buffer_make_writable (streamheader);
+    GST_BUFFER_FLAG_SET (stream->streamheader, GST_BUFFER_FLAG_HEADER);
+  }
+  if (is_video) {
+    GstStructure *st;
+    gint par_x, par_y;
+    st = gst_caps_get_structure (caps, 0);
+    if (gst_structure_get_fraction (st, "pixel-aspect-ratio", &par_x, &par_y) &&
+        par_x > 0 && par_y > 0) {
+      GST_DEBUG ("PAR %d/%d", par_x, par_y);
+      stream->par_x = par_x;
+      stream->par_y = par_y;
+    }
+  }
+
+  stream->payloads = g_array_new (FALSE, FALSE, sizeof (AsfPayload));
+
+  /* TODO: create this array during reverse play? */
+  stream->payloads_rev = g_array_new (FALSE, FALSE, sizeof (AsfPayload));
+
+  GST_INFO ("Created pad %s for stream %u with caps %" GST_PTR_FORMAT,
+      GST_PAD_NAME (src_pad), demux->num_streams, caps);
+
+  ++demux->num_streams;
+
+  stream->active = FALSE;
+
+  return stream;
+}
+
+static void
+gst_asf_demux_add_stream_headers_to_caps (GstASFDemux * demux,
+    GstBuffer * buffer, GstStructure * structure)
+{
+  GValue arr_val = G_VALUE_INIT;
+  GValue buf_val = G_VALUE_INIT;
+
+  g_value_init (&arr_val, GST_TYPE_ARRAY);
+  g_value_init (&buf_val, GST_TYPE_BUFFER);
+
+  gst_value_set_buffer (&buf_val, buffer);
+  gst_value_array_append_and_take_value (&arr_val, &buf_val);
+
+  gst_structure_take_value (structure, "streamheader", &arr_val);
+}
+
+static AsfStream *
+gst_asf_demux_add_audio_stream (GstASFDemux * demux,
+    asf_stream_audio * audio, guint16 id, guint8 ** p_data, guint64 * p_size)
+{
+  GstTagList *tags = NULL;
+  GstBuffer *extradata = NULL;
+  GstPad *src_pad;
+  GstCaps *caps;
+  guint16 size_left = 0;
+  gchar *codec_name = NULL;
+  gchar *name = NULL;
+
+  size_left = audio->size;
+
+  /* Create the audio pad */
+  name = g_strdup_printf ("audio_%u", demux->num_audio_streams);
+
+  src_pad = gst_pad_new_from_static_template (&audio_src_template, name);
+  g_free (name);
+
+  /* Swallow up any left over data and set up the 
+   * standard properties from the header info */
+  if (size_left) {
+    GST_INFO_OBJECT (demux, "Audio header contains %d bytes of "
+        "codec specific data", size_left);
+
+    g_assert (size_left <= *p_size);
+    gst_asf_demux_get_buffer (&extradata, size_left, p_data, p_size);
+  }
+
+  /* asf_stream_audio is the same as gst_riff_strf_auds, but with an
+   * additional two bytes indicating extradata. */
+  /* FIXME: Handle the channel reorder map here */
+  caps = gst_riff_create_audio_caps (audio->codec_tag, NULL,
+      (gst_riff_strf_auds *) audio, extradata, NULL, &codec_name, NULL);
+
+  if (caps == NULL) {
+    caps = gst_caps_new_simple ("audio/x-asf-unknown", "codec_id",
+        G_TYPE_INT, (gint) audio->codec_tag, NULL);
+  }
+
+  /* Informing about that audio format we just added */
+  if (codec_name) {
+    tags = gst_tag_list_new (GST_TAG_AUDIO_CODEC, codec_name, NULL);
+    g_free (codec_name);
+  }
+
+  if (audio->byte_rate > 0) {
+    /* Some ASF files have no bitrate props object (often seen with
+     * ASF files that contain raw audio data). Example files can
+     * be generated with FFmpeg (tested with v2.8.6), like this:
+     *
+     *   ffmpeg -i sine-wave.wav -c:a pcm_alaw file.asf
+     *
+     * In this case, if audio->byte_rate is nonzero, use that as
+     * the bitrate. */
+
+    guint bitrate = audio->byte_rate * 8;
+
+    if (tags == NULL)
+      tags = gst_tag_list_new_empty ();
+
+    /* Add bitrate, but only if there is none set already, since
+     * this is just a fallback in case there is no bitrate tag
+     * already present */
+    gst_tag_list_add (tags, GST_TAG_MERGE_KEEP, GST_TAG_BITRATE, bitrate, NULL);
+  }
+
+  if (extradata)
+    gst_buffer_unref (extradata);
+
+  GST_INFO ("Adding audio stream #%u, id %u codec %u (0x%04x), tags=%"
+      GST_PTR_FORMAT, demux->num_audio_streams, id, audio->codec_tag,
+      audio->codec_tag, tags);
+
+  ++demux->num_audio_streams;
+
+  return gst_asf_demux_setup_pad (demux, src_pad, caps, id, FALSE, NULL, tags);
+}
+
+static AsfStream *
+gst_asf_demux_add_video_stream (GstASFDemux * demux,
+    asf_stream_video_format * video, guint16 id,
+    guint8 ** p_data, guint64 * p_size)
+{
+  GstTagList *tags = NULL;
+  GstStructure *caps_s;
+  GstBuffer *extradata = NULL;
+  GstPad *src_pad;
+  GstCaps *caps;
+  gchar *str;
+  gchar *name = NULL;
+  gchar *codec_name = NULL;
+  guint64 size_left = video->size - 40;
+  GstBuffer *streamheader = NULL;
+  guint par_w = 1, par_h = 1;
+
+  /* Create the video pad */
+  name = g_strdup_printf ("video_%u", demux->num_video_streams);
+  src_pad = gst_pad_new_from_static_template (&video_src_template, name);
+  g_free (name);
+
+  /* Now try some gstreamer formatted MIME types (from gst_avi_demux_strf_vids) */
+  if (size_left) {
+    GST_LOG ("Video header has %" G_GUINT64_FORMAT
+        " bytes of codec specific data (vs %" G_GUINT64_FORMAT ")", size_left,
+        *p_size);
+    g_assert (size_left <= *p_size);
+    gst_asf_demux_get_buffer (&extradata, size_left, p_data, p_size);
+  }
+
+  GST_DEBUG ("video codec %" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (video->tag));
+
+  /* yes, asf_stream_video_format and gst_riff_strf_vids are the same */
+  caps = gst_riff_create_video_caps (video->tag, NULL,
+      (gst_riff_strf_vids *) video, extradata, NULL, &codec_name);
+
+  if (caps == NULL) {
+    caps = gst_caps_new_simple ("video/x-asf-unknown", "fourcc",
+        G_TYPE_UINT, video->tag, NULL);
+  } else {
+    GstStructure *s;
+    gint ax, ay;
+
+    s = gst_asf_demux_get_metadata_for_stream (demux, id);
+    if (gst_structure_get_int (s, "AspectRatioX", &ax) &&
+        gst_structure_get_int (s, "AspectRatioY", &ay) && (ax > 0 && ay > 0)) {
+      par_w = ax;
+      par_h = ay;
+      gst_caps_set_simple (caps, "pixel-aspect-ratio", GST_TYPE_FRACTION,
+          ax, ay, NULL);
+    } else {
+      guint ax, ay;
+      /* retry with the global metadata */
+      GST_DEBUG ("Retrying with global metadata %" GST_PTR_FORMAT,
+          demux->global_metadata);
+      s = demux->global_metadata;
+      if (gst_structure_get_uint (s, "AspectRatioX", &ax) &&
+          gst_structure_get_uint (s, "AspectRatioY", &ay)) {
+        GST_DEBUG ("ax:%d, ay:%d", ax, ay);
+        if (ax > 0 && ay > 0) {
+          par_w = ax;
+          par_h = ay;
+          gst_caps_set_simple (caps, "pixel-aspect-ratio", GST_TYPE_FRACTION,
+              ax, ay, NULL);
+        }
+      }
+    }
+    s = gst_caps_get_structure (caps, 0);
+    gst_structure_remove_field (s, "framerate");
+  }
+
+  caps_s = gst_caps_get_structure (caps, 0);
+
+  /* add format field with fourcc to WMV/VC1 caps to differentiate variants */
+  if (gst_structure_has_name (caps_s, "video/x-wmv")) {
+    str = g_strdup_printf ("%" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (video->tag));
+    gst_caps_set_simple (caps, "format", G_TYPE_STRING, str, NULL);
+    g_free (str);
+
+    /* check if h264 has codec_data (avc) or streamheaders (bytestream) */
+  } else if (gst_structure_has_name (caps_s, "video/x-h264")) {
+    const GValue *value = gst_structure_get_value (caps_s, "codec_data");
+    if (value) {
+      GstBuffer *buf = gst_value_get_buffer (value);
+      GstMapInfo mapinfo;
+
+      if (gst_buffer_map (buf, &mapinfo, GST_MAP_READ)) {
+        if (mapinfo.size >= 4 && GST_READ_UINT32_BE (mapinfo.data) == 1) {
+          /* this looks like a bytestream start */
+          streamheader = gst_buffer_ref (buf);
+          gst_asf_demux_add_stream_headers_to_caps (demux, buf, caps_s);
+          gst_structure_remove_field (caps_s, "codec_data");
+          gst_structure_set (caps_s, "stream-format", G_TYPE_STRING,
+              "byte-stream", NULL);
+        } else {
+          gst_structure_set (caps_s, "stream-format", G_TYPE_STRING, "avc",
+              NULL);
+        }
+
+        gst_buffer_unmap (buf, &mapinfo);
+      }
+    } else {
+      gst_structure_set (caps_s, "stream-format", G_TYPE_STRING, "byte-stream",
+          NULL);
+    }
+  }
+
+  /* For a 3D video, set multiview information into the caps based on
+   * what was detected during object parsing */
+  if (demux->asf_3D_mode != GST_ASF_3D_NONE) {
+    GstVideoMultiviewMode mv_mode = GST_VIDEO_MULTIVIEW_MODE_NONE;
+    GstVideoMultiviewFlags mv_flags = GST_VIDEO_MULTIVIEW_FLAGS_NONE;
+    const gchar *mview_mode_str;
+
+    switch (demux->asf_3D_mode) {
+      case GST_ASF_3D_SIDE_BY_SIDE_HALF_LR:
+        mv_mode = GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE;
+        break;
+      case GST_ASF_3D_SIDE_BY_SIDE_HALF_RL:
+        mv_mode = GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE;
+        mv_flags = GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST;
+        break;
+      case GST_ASF_3D_TOP_AND_BOTTOM_HALF_LR:
+        mv_mode = GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM;
+        break;
+      case GST_ASF_3D_TOP_AND_BOTTOM_HALF_RL:
+        mv_mode = GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM;
+        mv_flags = GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST;
+        break;
+      case GST_ASF_3D_DUAL_STREAM:{
+        gboolean is_right_view = FALSE;
+        /* if Advanced_Mutual_Exclusion object exists, use it
+         * to figure out which is the left view (lower ID) */
+        if (demux->mut_ex_streams != NULL) {
+          guint length;
+          gint i;
+
+          length = g_slist_length (demux->mut_ex_streams);
+
+          for (i = 0; i < length; i++) {
+            gpointer v_s_id;
+
+            v_s_id = g_slist_nth_data (demux->mut_ex_streams, i);
+
+            GST_DEBUG_OBJECT (demux,
+                "has Mutual_Exclusion object. stream id in object is %d",
+                GPOINTER_TO_INT (v_s_id));
+
+            if (id > GPOINTER_TO_INT (v_s_id))
+              is_right_view = TRUE;
+          }
+        } else {
+          /* if the Advaced_Mutual_Exclusion object doesn't exist, assume the
+           * first video stream encountered has the lower ID */
+          if (demux->num_video_streams > 0) {
+            /* This is not the first video stream, assuming right eye view */
+            is_right_view = TRUE;
+          }
+        }
+        if (is_right_view)
+          mv_mode = GST_VIDEO_MULTIVIEW_MODE_RIGHT;
+        else
+          mv_mode = GST_VIDEO_MULTIVIEW_MODE_LEFT;
+        break;
+      }
+      default:
+        break;
+    }
+
+    GST_INFO_OBJECT (demux,
+        "stream_id %d, has multiview-mode %d flags 0x%x", id, mv_mode,
+        (guint) mv_flags);
+
+    mview_mode_str = gst_video_multiview_mode_to_caps_string (mv_mode);
+    if (mview_mode_str != NULL) {
+      if (gst_video_multiview_guess_half_aspect (mv_mode, video->width,
+              video->height, par_w, par_h))
+        mv_flags |= GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT;
+
+      gst_caps_set_simple (caps,
+          "multiview-mode", G_TYPE_STRING, mview_mode_str,
+          "multiview-flags", GST_TYPE_VIDEO_MULTIVIEW_FLAGSET, mv_flags,
+          GST_FLAG_SET_MASK_EXACT, NULL);
+    }
+  }
+
+  if (codec_name) {
+    tags = gst_tag_list_new (GST_TAG_VIDEO_CODEC, codec_name, NULL);
+    g_free (codec_name);
+  }
+
+  if (extradata)
+    gst_buffer_unref (extradata);
+
+  GST_INFO ("Adding video stream #%u, id %u, codec %"
+      GST_FOURCC_FORMAT " (0x%08x)", demux->num_video_streams, id,
+      GST_FOURCC_ARGS (video->tag), video->tag);
+
+  ++demux->num_video_streams;
+
+  return gst_asf_demux_setup_pad (demux, src_pad, caps, id, TRUE,
+      streamheader, tags);
+}
+
+static void
+gst_asf_demux_activate_stream (GstASFDemux * demux, AsfStream * stream)
+{
+  if (!stream->active) {
+    GstEvent *event;
+    gchar *stream_id;
+
+    GST_INFO_OBJECT (demux, "Activating stream %2u, pad %s, caps %"
+        GST_PTR_FORMAT, stream->id, GST_PAD_NAME (stream->pad), stream->caps);
+    gst_pad_set_active (stream->pad, TRUE);
+
+    stream_id =
+        gst_pad_create_stream_id_printf (stream->pad, GST_ELEMENT_CAST (demux),
+        "%03u", stream->id);
+
+    event =
+        gst_pad_get_sticky_event (demux->sinkpad, GST_EVENT_STREAM_START, 0);
+    if (event) {
+      if (gst_event_parse_group_id (event, &demux->group_id))
+        demux->have_group_id = TRUE;
+      else
+        demux->have_group_id = FALSE;
+      gst_event_unref (event);
+    } else if (!demux->have_group_id) {
+      demux->have_group_id = TRUE;
+      demux->group_id = gst_util_group_id_next ();
+    }
+
+    event = gst_event_new_stream_start (stream_id);
+    if (demux->have_group_id)
+      gst_event_set_group_id (event, demux->group_id);
+
+    gst_pad_push_event (stream->pad, event);
+    g_free (stream_id);
+    gst_pad_set_caps (stream->pad, stream->caps);
+
+    gst_element_add_pad (GST_ELEMENT_CAST (demux), stream->pad);
+    gst_flow_combiner_add_pad (demux->flowcombiner, stream->pad);
+    stream->active = TRUE;
+  }
+}
+
+static AsfStream *
+gst_asf_demux_parse_stream_object (GstASFDemux * demux, guint8 * data,
+    guint64 size)
+{
+  AsfCorrectionType correction_type;
+  AsfStreamType stream_type;
+  GstClockTime time_offset;
+  gboolean is_encrypted G_GNUC_UNUSED;
+  guint16 stream_id;
+  guint16 flags;
+  ASFGuid guid;
+  guint stream_specific_size;
+  guint type_specific_size G_GNUC_UNUSED;
+  guint unknown G_GNUC_UNUSED;
+  gboolean inspect_payload = FALSE;
+  AsfStream *stream = NULL;
+
+  /* Get the rest of the header's header */
+  if (size < (16 + 16 + 8 + 4 + 4 + 2 + 4))
+    goto not_enough_data;
+
+  gst_asf_demux_get_guid (&guid, &data, &size);
+  stream_type = gst_asf_demux_identify_guid (asf_stream_guids, &guid);
+
+  gst_asf_demux_get_guid (&guid, &data, &size);
+  correction_type = gst_asf_demux_identify_guid (asf_correction_guids, &guid);
+
+  time_offset = gst_asf_demux_get_uint64 (&data, &size) * 100;
+
+  type_specific_size = gst_asf_demux_get_uint32 (&data, &size);
+  stream_specific_size = gst_asf_demux_get_uint32 (&data, &size);
+
+  flags = gst_asf_demux_get_uint16 (&data, &size);
+  stream_id = flags & 0x7f;
+  is_encrypted = ! !(flags & 0x8000);
+  unknown = gst_asf_demux_get_uint32 (&data, &size);
+
+  GST_DEBUG_OBJECT (demux, "Found stream %u, time_offset=%" GST_TIME_FORMAT,
+      stream_id, GST_TIME_ARGS (time_offset));
+
+  /* dvr-ms has audio stream declared in stream specific data */
+  if (stream_type == ASF_STREAM_EXT_EMBED_HEADER) {
+    AsfExtStreamType ext_stream_type;
+    gst_asf_demux_get_guid (&guid, &data, &size);
+    ext_stream_type = gst_asf_demux_identify_guid (asf_ext_stream_guids, &guid);
+
+    if (ext_stream_type == ASF_EXT_STREAM_AUDIO) {
+      inspect_payload = TRUE;
+
+      gst_asf_demux_get_guid (&guid, &data, &size);
+      gst_asf_demux_get_uint32 (&data, &size);
+      gst_asf_demux_get_uint32 (&data, &size);
+      gst_asf_demux_get_uint32 (&data, &size);
+      gst_asf_demux_get_guid (&guid, &data, &size);
+      gst_asf_demux_get_uint32 (&data, &size);
+      stream_type = ASF_STREAM_AUDIO;
+    }
+  }
+
+  switch (stream_type) {
+    case ASF_STREAM_AUDIO:{
+      asf_stream_audio audio_object;
+
+      if (!gst_asf_demux_get_stream_audio (&audio_object, &data, &size))
+        goto not_enough_data;
+
+      GST_INFO ("Object is an audio stream with %u bytes of additional data",
+          audio_object.size);
+
+      stream = gst_asf_demux_add_audio_stream (demux, &audio_object, stream_id,
+          &data, &size);
+
+      switch (correction_type) {
+        case ASF_CORRECTION_ON:{
+          guint span, packet_size, chunk_size, data_size, silence_data;
+
+          GST_INFO ("Using error correction");
+
+          if (size < (1 + 2 + 2 + 2 + 1))
+            goto not_enough_data;
+
+          span = gst_asf_demux_get_uint8 (&data, &size);
+          packet_size = gst_asf_demux_get_uint16 (&data, &size);
+          chunk_size = gst_asf_demux_get_uint16 (&data, &size);
+          data_size = gst_asf_demux_get_uint16 (&data, &size);
+          silence_data = gst_asf_demux_get_uint8 (&data, &size);
+
+          stream->span = span;
+
+          GST_DEBUG_OBJECT (demux, "Descrambling ps:%u cs:%u ds:%u s:%u sd:%u",
+              packet_size, chunk_size, data_size, span, silence_data);
+
+          if (stream->span > 1) {
+            if (chunk_size == 0 || ((packet_size / chunk_size) <= 1)) {
+              /* Disable descrambling */
+              stream->span = 0;
+            } else {
+              /* FIXME: this else branch was added for
+               * weird_al_yankovic - the saga begins.asf */
+              stream->ds_packet_size = packet_size;
+              stream->ds_chunk_size = chunk_size;
+            }
+          } else {
+            /* Descambling is enabled */
+            stream->ds_packet_size = packet_size;
+            stream->ds_chunk_size = chunk_size;
+          }
+#if 0
+          /* Now skip the rest of the silence data */
+          if (data_size > 1)
+            gst_bytestream_flush (demux->bs, data_size - 1);
+#else
+          /* FIXME: CHECKME. And why -1? */
+          if (data_size > 1) {
+            if (!gst_asf_demux_skip_bytes (data_size - 1, &data, &size)) {
+              goto not_enough_data;
+            }
+          }
+#endif
+          break;
+        }
+        case ASF_CORRECTION_OFF:{
+          GST_INFO ("Error correction off");
+          if (!gst_asf_demux_skip_bytes (stream_specific_size, &data, &size))
+            goto not_enough_data;
+          break;
+        }
+        default:
+          GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
+              ("Audio stream using unknown error correction"));
+          return NULL;
+      }
+
+      break;
+    }
+
+    case ASF_STREAM_VIDEO:{
+      asf_stream_video_format video_format_object;
+      asf_stream_video video_object;
+      guint16 vsize;
+
+      if (!gst_asf_demux_get_stream_video (&video_object, &data, &size))
+        goto not_enough_data;
+
+      vsize = video_object.size - 40;   /* Byte order gets offset by single byte */
+
+      GST_INFO ("object is a video stream with %u bytes of "
+          "additional data", vsize);
+
+      if (!gst_asf_demux_get_stream_video_format (&video_format_object,
+              &data, &size)) {
+        goto not_enough_data;
+      }
+
+      stream = gst_asf_demux_add_video_stream (demux, &video_format_object,
+          stream_id, &data, &size);
+
+      break;
+    }
+
+    default:
+      GST_WARNING_OBJECT (demux, "Unknown stream type for stream %u",
+          stream_id);
+      demux->other_streams =
+          g_slist_append (demux->other_streams, GINT_TO_POINTER (stream_id));
+      break;
+  }
+
+  if (stream) {
+    stream->inspect_payload = inspect_payload;
+    stream->type = stream_type;
+  }
+  return stream;
+
+not_enough_data:
+  {
+    GST_WARNING_OBJECT (demux, "Unexpected end of data parsing stream object");
+    /* we'll error out later if we found no streams */
+    return NULL;
+  }
+}
+
+static const gchar *
+gst_asf_demux_get_gst_tag_from_tag_name (const gchar * name_utf8)
+{
+  /* *INDENT-OFF* */
+  const struct
+  {
+    const gchar *asf_name;
+    const gchar *gst_name;
+  } tags[] = {
+    {
+    "WM/Genre", GST_TAG_GENRE}, {
+    "WM/AlbumTitle", GST_TAG_ALBUM}, {
+    "WM/AlbumArtist", GST_TAG_ARTIST}, {
+    "WM/PartOfSet", GST_TAG_ALBUM_VOLUME_COUNT}, {
+    "WM/Picture", GST_TAG_IMAGE}, {
+    "WM/Track", GST_TAG_TRACK_NUMBER}, {
+    "WM/TrackNumber", GST_TAG_TRACK_NUMBER}, {
+    "WM/Year", GST_TAG_DATE_TIME}
+    /* { "WM/Composer", GST_TAG_COMPOSER } */
+  };
+  /* *INDENT-ON* */
+  gsize out;
+  guint i;
+
+  if (name_utf8 == NULL) {
+    GST_WARNING ("Failed to convert name to UTF8, skipping");
+    return NULL;
+  }
+
+  out = strlen (name_utf8);
+
+  for (i = 0; i < G_N_ELEMENTS (tags); ++i) {
+    if (strncmp (tags[i].asf_name, name_utf8, out) == 0) {
+      GST_LOG ("map tagname '%s' -> '%s'", name_utf8, tags[i].gst_name);
+      return tags[i].gst_name;
+    }
+  }
+
+  return NULL;
+}
+
+/* gst_asf_demux_add_global_tags() takes ownership of taglist! */
+static void
+gst_asf_demux_add_global_tags (GstASFDemux * demux, GstTagList * taglist)
+{
+  GstTagList *t;
+
+  GST_DEBUG_OBJECT (demux, "adding global tags: %" GST_PTR_FORMAT, taglist);
+
+  if (taglist == NULL)
+    return;
+
+  if (gst_tag_list_is_empty (taglist)) {
+    gst_tag_list_unref (taglist);
+    return;
+  }
+
+  t = gst_tag_list_merge (demux->taglist, taglist, GST_TAG_MERGE_APPEND);
+  gst_tag_list_set_scope (t, GST_TAG_SCOPE_GLOBAL);
+  if (demux->taglist)
+    gst_tag_list_unref (demux->taglist);
+  gst_tag_list_unref (taglist);
+  demux->taglist = t;
+  GST_LOG_OBJECT (demux, "global tags now: %" GST_PTR_FORMAT, demux->taglist);
+}
+
+#define ASF_DEMUX_DATA_TYPE_UTF16LE_STRING  0
+#define ASF_DEMUX_DATA_TYPE_BYTE_ARRAY      1
+#define ASF_DEMUX_DATA_TYPE_BOOL                       2
+#define ASF_DEMUX_DATA_TYPE_DWORD           3
+
+static void
+asf_demux_parse_picture_tag (GstTagList * tags, const guint8 * tag_data,
+    guint tag_data_len)
+{
+  GstByteReader r;
+  const guint8 *img_data = NULL;
+  guint32 img_data_len = 0;
+  guint8 pic_type = 0;
+
+  gst_byte_reader_init (&r, tag_data, tag_data_len);
+
+  /* skip mime type string (we don't trust it and do our own typefinding),
+   * and also skip the description string, since we don't use it */
+  if (!gst_byte_reader_get_uint8 (&r, &pic_type) ||
+      !gst_byte_reader_get_uint32_le (&r, &img_data_len) ||
+      !gst_byte_reader_skip_string_utf16 (&r) ||
+      !gst_byte_reader_skip_string_utf16 (&r) ||
+      !gst_byte_reader_get_data (&r, img_data_len, &img_data)) {
+    goto not_enough_data;
+  }
+
+
+  if (!gst_tag_list_add_id3_image (tags, img_data, img_data_len, pic_type))
+    GST_DEBUG ("failed to add image extracted from WM/Picture tag to taglist");
+
+  return;
+
+not_enough_data:
+  {
+    GST_DEBUG ("Failed to read WM/Picture tag: not enough data");
+    GST_MEMDUMP ("WM/Picture data", tag_data, tag_data_len);
+    return;
+  }
+}
+
+/* Extended Content Description Object */
+static GstFlowReturn
+gst_asf_demux_process_ext_content_desc (GstASFDemux * demux, guint8 * data,
+    guint64 size)
+{
+  /* Other known (and unused) 'text/unicode' metadata available :
+   *
+   *   WM/Lyrics =
+   *   WM/MediaPrimaryClassID = {D1607DBC-E323-4BE2-86A1-48A42A28441E}
+   *   WMFSDKVersion = 9.00.00.2980
+   *   WMFSDKNeeded = 0.0.0.0000
+   *   WM/UniqueFileIdentifier = AMGa_id=R    15334;AMGp_id=P     5149;AMGt_id=T  2324984
+   *   WM/Publisher = 4AD
+   *   WM/Provider = AMG
+   *   WM/ProviderRating = 8
+   *   WM/ProviderStyle = Rock (similar to WM/Genre)
+   *   WM/GenreID (similar to WM/Genre)
+   *   WM/TrackNumber (same as WM/Track but as a string)
+   *
+   * Other known (and unused) 'non-text' metadata available :
+   *
+   *   WM/EncodingTime
+   *   WM/MCDI
+   *   IsVBR
+   *
+   * We might want to read WM/TrackNumber and use atoi() if we don't have
+   * WM/Track
+   */
+
+  GstTagList *taglist;
+  guint16 blockcount, i;
+  gboolean content3D = FALSE;
+
+  /* *INDENT-OFF* */
+  struct
+  {
+    const gchar *interleave_name;
+    GstASF3DMode interleaving_type;
+  } stereoscopic_layout_map[] = {
+    {
+    "SideBySideRF", GST_ASF_3D_SIDE_BY_SIDE_HALF_RL}, {
+    "SideBySideLF", GST_ASF_3D_SIDE_BY_SIDE_HALF_LR}, {
+    "OverUnderRT", GST_ASF_3D_TOP_AND_BOTTOM_HALF_RL}, {
+    "OverUnderLT", GST_ASF_3D_TOP_AND_BOTTOM_HALF_LR}, {
+    "DualStream", GST_ASF_3D_DUAL_STREAM}
+  };
+  /* *INDENT-ON* */
+
+  GST_INFO_OBJECT (demux, "object is an extended content description");
+
+  taglist = gst_tag_list_new_empty ();
+
+  /* Content Descriptor Count */
+  if (size < 2)
+    goto not_enough_data;
+
+  blockcount = gst_asf_demux_get_uint16 (&data, &size);
+
+  for (i = 1; i <= blockcount; ++i) {
+    const gchar *gst_tag_name;
+    guint16 datatype;
+    guint16 value_len;
+    guint16 name_len;
+    GValue tag_value = { 0, };
+    gsize in, out;
+    gchar *name;
+    gchar *name_utf8 = NULL;
+    gchar *value;
+
+    /* Descriptor */
+    if (!gst_asf_demux_get_string (&name, &name_len, &data, &size))
+      goto not_enough_data;
+
+    if (size < 2) {
+      g_free (name);
+      goto not_enough_data;
+    }
+    /* Descriptor Value Data Type */
+    datatype = gst_asf_demux_get_uint16 (&data, &size);
+
+    /* Descriptor Value (not really a string, but same thing reading-wise) */
+    if (!gst_asf_demux_get_string (&value, &value_len, &data, &size)) {
+      g_free (name);
+      goto not_enough_data;
+    }
+
+    name_utf8 =
+        g_convert (name, name_len, "UTF-8", "UTF-16LE", &in, &out, NULL);
+
+    if (name_utf8 != NULL) {
+      GST_DEBUG ("Found tag/metadata %s", name_utf8);
+
+      gst_tag_name = gst_asf_demux_get_gst_tag_from_tag_name (name_utf8);
+      GST_DEBUG ("gst_tag_name %s", GST_STR_NULL (gst_tag_name));
+
+      switch (datatype) {
+        case ASF_DEMUX_DATA_TYPE_UTF16LE_STRING:{
+          gchar *value_utf8;
+
+          value_utf8 = g_convert (value, value_len, "UTF-8", "UTF-16LE",
+              &in, &out, NULL);
+
+          /* get rid of tags with empty value */
+          if (value_utf8 != NULL && *value_utf8 != '\0') {
+            GST_DEBUG ("string value %s", value_utf8);
+
+            value_utf8[out] = '\0';
+
+            if (gst_tag_name != NULL) {
+              if (strcmp (gst_tag_name, GST_TAG_DATE_TIME) == 0) {
+                guint year = atoi (value_utf8);
+
+                if (year > 0) {
+                  g_value_init (&tag_value, GST_TYPE_DATE_TIME);
+                  g_value_take_boxed (&tag_value, gst_date_time_new_y (year));
+                }
+              } else if (strcmp (gst_tag_name, GST_TAG_GENRE) == 0) {
+                guint id3v1_genre_id;
+                const gchar *genre_str;
+
+                if (sscanf (value_utf8, "(%u)", &id3v1_genre_id) == 1 &&
+                    ((genre_str = gst_tag_id3_genre_get (id3v1_genre_id)))) {
+                  GST_DEBUG ("Genre: %s -> %s", value_utf8, genre_str);
+                  g_free (value_utf8);
+                  value_utf8 = g_strdup (genre_str);
+                }
+              } else if (!strcmp (gst_tag_name, GST_TAG_ALBUM_VOLUME_COUNT)) {
+                guint num = 0, count = 0;
+
+                if (sscanf (value_utf8, "%u/%u", &num, &count) == 2
+                    && num > 0 && num <= 99999 && count > 0 && count <= 99999) {
+                  GST_DEBUG ("Disc %u of %u (%s)", num, count, value_utf8);
+                  g_value_init (&tag_value, G_TYPE_UINT);
+                  /* disc number */
+                  g_value_set_uint (&tag_value, num);
+                  gst_tag_list_add_values (taglist, GST_TAG_MERGE_APPEND,
+                      GST_TAG_ALBUM_VOLUME_NUMBER, &tag_value, NULL);
+                  /* disc count (will be added to the taglist below) */
+                  g_value_set_uint (&tag_value, count);
+                } else {
+                  GST_DEBUG ("Couldn't parse PartOfSet value %s", value_utf8);
+                }
+              } else {
+                GType tag_type;
+
+                /* convert tag from string to other type if required */
+                tag_type = gst_tag_get_type (gst_tag_name);
+                g_value_init (&tag_value, tag_type);
+                if (!gst_value_deserialize (&tag_value, value_utf8)) {
+                  GValue from_val = { 0, };
+
+                  g_value_init (&from_val, G_TYPE_STRING);
+                  g_value_set_string (&from_val, value_utf8);
+                  if (!g_value_transform (&from_val, &tag_value)) {
+                    GST_WARNING_OBJECT (demux,
+                        "Could not transform string tag to " "%s tag type %s",
+                        gst_tag_name, g_type_name (tag_type));
+                    g_value_unset (&tag_value);
+                  }
+                  g_value_unset (&from_val);
+                }
+              }
+            } else {
+              /* metadata ! */
+              GST_DEBUG ("Setting metadata");
+              g_value_init (&tag_value, G_TYPE_STRING);
+              g_value_set_string (&tag_value, value_utf8);
+              /* If we found a stereoscopic marker, look for StereoscopicLayout
+               * metadata */
+              if (content3D) {
+                guint i;
+                if (strncmp ("StereoscopicLayout", name_utf8,
+                        strlen (name_utf8)) == 0) {
+                  for (i = 0; i < G_N_ELEMENTS (stereoscopic_layout_map); i++) {
+                    if (g_str_equal (stereoscopic_layout_map[i].interleave_name,
+                            value_utf8)) {
+                      demux->asf_3D_mode =
+                          stereoscopic_layout_map[i].interleaving_type;
+                      GST_INFO ("find interleave type %u", demux->asf_3D_mode);
+                    }
+                  }
+                }
+                GST_INFO_OBJECT (demux, "3d type is %u", demux->asf_3D_mode);
+              } else {
+                demux->asf_3D_mode = GST_ASF_3D_NONE;
+                GST_INFO_OBJECT (demux, "None 3d type");
+              }
+            }
+          } else if (value_utf8 == NULL) {
+            GST_WARNING ("Failed to convert string value to UTF8, skipping");
+          } else {
+            GST_DEBUG ("Skipping empty string value for %s",
+                GST_STR_NULL (gst_tag_name));
+          }
+          g_free (value_utf8);
+          break;
+        }
+        case ASF_DEMUX_DATA_TYPE_BYTE_ARRAY:{
+          if (gst_tag_name) {
+            if (!g_str_equal (gst_tag_name, GST_TAG_IMAGE)) {
+              GST_FIXME ("Unhandled byte array tag %s",
+                  GST_STR_NULL (gst_tag_name));
+              break;
+            } else {
+              asf_demux_parse_picture_tag (taglist, (guint8 *) value,
+                  value_len);
+            }
+          }
+          break;
+        }
+        case ASF_DEMUX_DATA_TYPE_DWORD:{
+          guint uint_val;
+
+          if (value_len < 4)
+            break;
+
+          uint_val = GST_READ_UINT32_LE (value);
+
+          /* this is the track number */
+          g_value_init (&tag_value, G_TYPE_UINT);
+
+          /* WM/Track counts from 0 */
+          if (!strcmp (name_utf8, "WM/Track"))
+            ++uint_val;
+
+          g_value_set_uint (&tag_value, uint_val);
+          break;
+        }
+          /* Detect 3D */
+        case ASF_DEMUX_DATA_TYPE_BOOL:{
+          gboolean bool_val;
+
+          if (value_len < 4)
+            break;
+
+          bool_val = GST_READ_UINT32_LE (value);
+
+          if (strncmp ("Stereoscopic", name_utf8, strlen (name_utf8)) == 0) {
+            if (bool_val) {
+              GST_INFO_OBJECT (demux, "This is 3D contents");
+              content3D = TRUE;
+            } else {
+              GST_INFO_OBJECT (demux, "This is not 3D contenst");
+              content3D = FALSE;
+            }
+          }
+
+          break;
+        }
+        default:{
+          GST_DEBUG ("Skipping tag %s of type %d", gst_tag_name, datatype);
+          break;
+        }
+      }
+
+      if (G_IS_VALUE (&tag_value)) {
+        if (gst_tag_name) {
+          GstTagMergeMode merge_mode = GST_TAG_MERGE_APPEND;
+
+          /* WM/TrackNumber is more reliable than WM/Track, since the latter
+           * is supposed to have a 0 base but is often wrongly written to start
+           * from 1 as well, so prefer WM/TrackNumber when we have it: either
+           * replace the value added earlier from WM/Track or put it first in
+           * the list, so that it will get picked up by _get_uint() */
+          if (strcmp (name_utf8, "WM/TrackNumber") == 0)
+            merge_mode = GST_TAG_MERGE_REPLACE;
+
+          gst_tag_list_add_values (taglist, merge_mode, gst_tag_name,
+              &tag_value, NULL);
+        } else {
+          GST_DEBUG ("Setting global metadata %s", name_utf8);
+          gst_structure_set_value (demux->global_metadata, name_utf8,
+              &tag_value);
+        }
+
+        g_value_unset (&tag_value);
+      }
+    }
+
+    g_free (name);
+    g_free (value);
+    g_free (name_utf8);
+  }
+
+  gst_asf_demux_add_global_tags (demux, taglist);
+
+  return GST_FLOW_OK;
+
+  /* Errors */
+not_enough_data:
+  {
+    GST_WARNING ("Unexpected end of data parsing ext content desc object");
+    gst_tag_list_unref (taglist);
+    return GST_FLOW_OK;         /* not really fatal */
+  }
+}
+
+static GstStructure *
+gst_asf_demux_get_metadata_for_stream (GstASFDemux * demux, guint stream_num)
+{
+  gchar sname[32];
+  guint i;
+
+  g_snprintf (sname, sizeof (sname), "stream-%u", stream_num);
+
+  for (i = 0; i < gst_caps_get_size (demux->metadata); ++i) {
+    GstStructure *s;
+
+    s = gst_caps_get_structure (demux->metadata, i);
+    if (gst_structure_has_name (s, sname))
+      return s;
+  }
+
+  gst_caps_append_structure (demux->metadata, gst_structure_new_empty (sname));
+
+  /* try lookup again; demux->metadata took ownership of the structure, so we
+   * can't really make any assumptions about what happened to it, so we can't
+   * just return it directly after appending it */
+  return gst_asf_demux_get_metadata_for_stream (demux, stream_num);
+}
+
+static GstFlowReturn
+gst_asf_demux_process_metadata (GstASFDemux * demux, guint8 * data,
+    guint64 size)
+{
+  guint16 blockcount, i;
+
+  GST_INFO_OBJECT (demux, "object is a metadata object");
+
+  /* Content Descriptor Count */
+  if (size < 2)
+    goto not_enough_data;
+
+  blockcount = gst_asf_demux_get_uint16 (&data, &size);
+
+  for (i = 0; i < blockcount; ++i) {
+    GstStructure *s;
+    guint16 stream_num, name_len, data_type, lang_idx G_GNUC_UNUSED;
+    guint32 data_len, ival;
+    gchar *name_utf8;
+
+    if (size < (2 + 2 + 2 + 2 + 4))
+      goto not_enough_data;
+
+    lang_idx = gst_asf_demux_get_uint16 (&data, &size);
+    stream_num = gst_asf_demux_get_uint16 (&data, &size);
+    name_len = gst_asf_demux_get_uint16 (&data, &size);
+    data_type = gst_asf_demux_get_uint16 (&data, &size);
+    data_len = gst_asf_demux_get_uint32 (&data, &size);
+
+    if (size < name_len + data_len)
+      goto not_enough_data;
+
+    /* convert name to UTF-8 */
+    name_utf8 = g_convert ((gchar *) data, name_len, "UTF-8", "UTF-16LE",
+        NULL, NULL, NULL);
+    gst_asf_demux_skip_bytes (name_len, &data, &size);
+
+    if (name_utf8 == NULL) {
+      GST_WARNING ("Failed to convert value name to UTF8, skipping");
+      gst_asf_demux_skip_bytes (data_len, &data, &size);
+      continue;
+    }
+
+    if (data_type != ASF_DEMUX_DATA_TYPE_DWORD) {
+      gst_asf_demux_skip_bytes (data_len, &data, &size);
+      g_free (name_utf8);
+      continue;
+    }
+
+    /* read DWORD */
+    if (size < 4) {
+      g_free (name_utf8);
+      goto not_enough_data;
+    }
+
+    ival = gst_asf_demux_get_uint32 (&data, &size);
+
+    /* skip anything else there may be, just in case */
+    gst_asf_demux_skip_bytes (data_len - 4, &data, &size);
+
+    s = gst_asf_demux_get_metadata_for_stream (demux, stream_num);
+    gst_structure_set (s, name_utf8, G_TYPE_INT, ival, NULL);
+    g_free (name_utf8);
+  }
+
+  GST_INFO_OBJECT (demux, "metadata = %" GST_PTR_FORMAT, demux->metadata);
+  return GST_FLOW_OK;
+
+  /* Errors */
+not_enough_data:
+  {
+    GST_WARNING ("Unexpected end of data parsing metadata object");
+    return GST_FLOW_OK;         /* not really fatal */
+  }
+}
+
+static GstFlowReturn
+gst_asf_demux_process_header (GstASFDemux * demux, guint8 * data, guint64 size)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+  guint32 i, num_objects;
+  guint8 unknown G_GNUC_UNUSED;
+
+  /* Get the rest of the header's header */
+  if (size < (4 + 1 + 1))
+    goto not_enough_data;
+
+  num_objects = gst_asf_demux_get_uint32 (&data, &size);
+  unknown = gst_asf_demux_get_uint8 (&data, &size);
+  unknown = gst_asf_demux_get_uint8 (&data, &size);
+
+  GST_INFO_OBJECT (demux, "object is a header with %u parts", num_objects);
+  demux->saw_file_header = FALSE;
+  /* Loop through the header's objects, processing those */
+  for (i = 0; i < num_objects; ++i) {
+    GST_INFO_OBJECT (demux, "reading header part %u", i);
+    ret = gst_asf_demux_process_object (demux, &data, &size);
+    if (ret != GST_FLOW_OK) {
+      GST_WARNING ("process_object returned %s", gst_asf_get_flow_name (ret));
+      break;
+    }
+  }
+  if (!demux->saw_file_header) {
+    GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
+        ("Header does not have mandatory FILE section"));
+    return GST_FLOW_ERROR;
+  }
+
+  return ret;
+
+not_enough_data:
+  {
+    GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
+        ("short read parsing HEADER object"));
+    return GST_FLOW_ERROR;
+  }
+}
+
+static GstFlowReturn
+gst_asf_demux_process_file (GstASFDemux * demux, guint8 * data, guint64 size)
+{
+  guint64 creation_time G_GNUC_UNUSED;
+  guint64 file_size G_GNUC_UNUSED;
+  guint64 send_time G_GNUC_UNUSED;
+  guint64 packets_count, play_time, preroll;
+  guint32 flags, min_pktsize, max_pktsize, min_bitrate G_GNUC_UNUSED;
+
+  if (size < (16 + 8 + 8 + 8 + 8 + 8 + 8 + 4 + 4 + 4 + 4))
+    goto not_enough_data;
+
+  gst_asf_demux_skip_bytes (16, &data, &size);  /* skip GUID */
+  file_size = gst_asf_demux_get_uint64 (&data, &size);
+  creation_time = gst_asf_demux_get_uint64 (&data, &size);
+  packets_count = gst_asf_demux_get_uint64 (&data, &size);
+  play_time = gst_asf_demux_get_uint64 (&data, &size);
+  send_time = gst_asf_demux_get_uint64 (&data, &size);
+  preroll = gst_asf_demux_get_uint64 (&data, &size);
+  flags = gst_asf_demux_get_uint32 (&data, &size);
+  min_pktsize = gst_asf_demux_get_uint32 (&data, &size);
+  max_pktsize = gst_asf_demux_get_uint32 (&data, &size);
+  min_bitrate = gst_asf_demux_get_uint32 (&data, &size);
+
+  demux->broadcast = ! !(flags & 0x01);
+  demux->seekable = ! !(flags & 0x02);
+
+  GST_DEBUG_OBJECT (demux, "min_pktsize = %u", min_pktsize);
+  GST_DEBUG_OBJECT (demux, "flags::broadcast = %d", demux->broadcast);
+  GST_DEBUG_OBJECT (demux, "flags::seekable  = %d", demux->seekable);
+
+  if (demux->broadcast) {
+    /* these fields are invalid if the broadcast flag is set */
+    play_time = 0;
+    file_size = 0;
+  }
+
+  if (min_pktsize != max_pktsize)
+    goto non_fixed_packet_size;
+
+  demux->packet_size = max_pktsize;
+
+  /* FIXME: do we need send_time as well? what is it? */
+  if ((play_time * 100) >= (preroll * GST_MSECOND))
+    demux->play_time = (play_time * 100) - (preroll * GST_MSECOND);
+  else
+    demux->play_time = 0;
+
+  demux->preroll = preroll * GST_MSECOND;
+
+  /* initial latency */
+  demux->latency = demux->preroll;
+
+  if (demux->play_time == 0)
+    demux->seekable = FALSE;
+
+  GST_DEBUG_OBJECT (demux, "play_time %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (demux->play_time));
+  GST_DEBUG_OBJECT (demux, "preroll   %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (demux->preroll));
+
+  if (demux->play_time > 0) {
+    demux->segment.duration = demux->play_time;
+  }
+
+  GST_INFO ("object is a file with %" G_GUINT64_FORMAT " data packets",
+      packets_count);
+  GST_INFO ("preroll = %" G_GUINT64_FORMAT, demux->preroll);
+
+  demux->saw_file_header = TRUE;
+
+  return GST_FLOW_OK;
+
+/* ERRORS */
+non_fixed_packet_size:
+  {
+    GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
+        ("packet size must be fixed"));
+    return GST_FLOW_ERROR;
+  }
+not_enough_data:
+  {
+    GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
+        ("short read parsing FILE object"));
+    return GST_FLOW_ERROR;
+  }
+}
+
+/* Content Description Object */
+static GstFlowReturn
+gst_asf_demux_process_comment (GstASFDemux * demux, guint8 * data, guint64 size)
+{
+  /* *INDENT-OFF* */
+  struct
+  {
+    const gchar *gst_tag;
+    guint16 val_length;
+    gchar *val_utf8;
+  } tags[5] = {
+    {
+    GST_TAG_TITLE, 0, NULL}, {
+    GST_TAG_ARTIST, 0, NULL}, {
+    GST_TAG_COPYRIGHT, 0, NULL}, {
+    GST_TAG_DESCRIPTION, 0, NULL}, {
+    GST_TAG_COMMENT, 0, NULL}
+  };
+  /* *INDENT-ON* */
+  GstTagList *taglist;
+  GValue value = { 0 };
+  gsize in, out;
+  gint i = -1;
+
+  GST_INFO_OBJECT (demux, "object is a comment");
+
+  if (size < (2 + 2 + 2 + 2 + 2))
+    goto not_enough_data;
+
+  tags[0].val_length = gst_asf_demux_get_uint16 (&data, &size);
+  tags[1].val_length = gst_asf_demux_get_uint16 (&data, &size);
+  tags[2].val_length = gst_asf_demux_get_uint16 (&data, &size);
+  tags[3].val_length = gst_asf_demux_get_uint16 (&data, &size);
+  tags[4].val_length = gst_asf_demux_get_uint16 (&data, &size);
+
+  GST_DEBUG_OBJECT (demux, "Comment lengths: title=%d author=%d copyright=%d "
+      "description=%d rating=%d", tags[0].val_length, tags[1].val_length,
+      tags[2].val_length, tags[3].val_length, tags[4].val_length);
+
+  for (i = 0; i < G_N_ELEMENTS (tags); ++i) {
+    if (size < tags[i].val_length)
+      goto not_enough_data;
+
+    /* might be just '/0', '/0'... */
+    if (tags[i].val_length > 2 && tags[i].val_length % 2 == 0) {
+      /* convert to UTF-8 */
+      tags[i].val_utf8 = g_convert ((gchar *) data, tags[i].val_length,
+          "UTF-8", "UTF-16LE", &in, &out, NULL);
+    }
+    gst_asf_demux_skip_bytes (tags[i].val_length, &data, &size);
+  }
+
+  /* parse metadata into taglist */
+  taglist = gst_tag_list_new_empty ();
+  g_value_init (&value, G_TYPE_STRING);
+  for (i = 0; i < G_N_ELEMENTS (tags); ++i) {
+    if (tags[i].val_utf8 && strlen (tags[i].val_utf8) > 0 && tags[i].gst_tag) {
+      g_value_set_string (&value, tags[i].val_utf8);
+      gst_tag_list_add_values (taglist, GST_TAG_MERGE_APPEND,
+          tags[i].gst_tag, &value, NULL);
+    }
+  }
+  g_value_unset (&value);
+
+  gst_asf_demux_add_global_tags (demux, taglist);
+
+  for (i = 0; i < G_N_ELEMENTS (tags); ++i)
+    g_free (tags[i].val_utf8);
+
+  return GST_FLOW_OK;
+
+not_enough_data:
+  {
+    GST_WARNING_OBJECT (demux, "unexpectedly short of data while processing "
+        "comment tag section %d, skipping comment object", i);
+    for (i = 0; i < G_N_ELEMENTS (tags); i++)
+      g_free (tags[i].val_utf8);
+    return GST_FLOW_OK;         /* not really fatal */
+  }
+}
+
+static GstFlowReturn
+gst_asf_demux_process_bitrate_props_object (GstASFDemux * demux, guint8 * data,
+    guint64 size)
+{
+  guint16 num_streams, i;
+  AsfStream *stream;
+
+  if (size < 2)
+    goto not_enough_data;
+
+  num_streams = gst_asf_demux_get_uint16 (&data, &size);
+
+  GST_INFO ("object is a bitrate properties object with %u streams",
+      num_streams);
+
+  if (size < (num_streams * (2 + 4)))
+    goto not_enough_data;
+
+  for (i = 0; i < num_streams; ++i) {
+    guint32 bitrate;
+    guint16 stream_id;
+
+    stream_id = gst_asf_demux_get_uint16 (&data, &size);
+    bitrate = gst_asf_demux_get_uint32 (&data, &size);
+
+    if (stream_id < GST_ASF_DEMUX_NUM_STREAM_IDS) {
+      GST_DEBUG_OBJECT (demux, "bitrate of stream %u = %u", stream_id, bitrate);
+      stream = gst_asf_demux_get_stream (demux, stream_id);
+      if (stream) {
+        if (stream->pending_tags == NULL)
+          stream->pending_tags = gst_tag_list_new_empty ();
+        gst_tag_list_add (stream->pending_tags, GST_TAG_MERGE_REPLACE,
+            GST_TAG_BITRATE, bitrate, NULL);
+      } else {
+        GST_WARNING_OBJECT (demux, "Stream id %u wasn't found", stream_id);
+      }
+    } else {
+      GST_WARNING ("stream id %u is too large", stream_id);
+    }
+  }
+
+  return GST_FLOW_OK;
+
+not_enough_data:
+  {
+    GST_WARNING_OBJECT (demux, "short read parsing bitrate props object!");
+    return GST_FLOW_OK;         /* not really fatal */
+  }
+}
+
+static GstFlowReturn
+gst_asf_demux_process_header_ext (GstASFDemux * demux, guint8 * data,
+    guint64 size)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+  guint64 hdr_size;
+
+  /* Get the rest of the header's header */
+  if (size < (16 + 2 + 4))
+    goto not_enough_data;
+
+  /* skip GUID and two other bytes */
+  gst_asf_demux_skip_bytes (16 + 2, &data, &size);
+  hdr_size = gst_asf_demux_get_uint32 (&data, &size);
+
+  GST_INFO ("extended header object with a size of %u bytes", (guint) size);
+
+  /* FIXME: does data_size include the rest of the header that we have read? */
+  if (hdr_size > size)
+    goto not_enough_data;
+
+  while (hdr_size > 0) {
+    ret = gst_asf_demux_process_object (demux, &data, &hdr_size);
+    if (ret != GST_FLOW_OK)
+      break;
+  }
+
+  return ret;
+
+not_enough_data:
+  {
+    GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
+        ("short read parsing extended header object"));
+    return GST_FLOW_ERROR;
+  }
+}
+
+static GstFlowReturn
+gst_asf_demux_process_language_list (GstASFDemux * demux, guint8 * data,
+    guint64 size)
+{
+  guint i;
+
+  if (size < 2)
+    goto not_enough_data;
+
+  if (demux->languages) {
+    GST_WARNING ("More than one LANGUAGE_LIST object in stream");
+    g_strfreev (demux->languages);
+    demux->languages = NULL;
+    demux->num_languages = 0;
+  }
+
+  demux->num_languages = gst_asf_demux_get_uint16 (&data, &size);
+  GST_LOG ("%u languages:", demux->num_languages);
+
+  demux->languages = g_new0 (gchar *, demux->num_languages + 1);
+  for (i = 0; i < demux->num_languages; ++i) {
+    guint8 len, *lang_data = NULL;
+
+    if (size < 1)
+      goto not_enough_data;
+    len = gst_asf_demux_get_uint8 (&data, &size);
+    if (gst_asf_demux_get_bytes (&lang_data, len, &data, &size)) {
+      gchar *utf8;
+
+      utf8 = g_convert ((gchar *) lang_data, len, "UTF-8", "UTF-16LE", NULL,
+          NULL, NULL);
+
+      /* truncate "en-us" etc. to just "en" */
+      if (utf8 && strlen (utf8) >= 5 && (utf8[2] == '-' || utf8[2] == '_')) {
+        utf8[2] = '\0';
+      }
+      GST_DEBUG ("[%u] %s", i, GST_STR_NULL (utf8));
+      demux->languages[i] = utf8;
+      g_free (lang_data);
+    } else {
+      goto not_enough_data;
+    }
+  }
+
+  return GST_FLOW_OK;
+
+not_enough_data:
+  {
+    GST_WARNING_OBJECT (demux, "short read parsing language list object!");
+    g_free (demux->languages);
+    demux->languages = NULL;
+    demux->num_languages = 0;
+    return GST_FLOW_OK;         /* not fatal */
+  }
+}
+
+static GstFlowReturn
+gst_asf_demux_process_simple_index (GstASFDemux * demux, guint8 * data,
+    guint64 size)
+{
+  GstClockTime interval;
+  guint32 count, i;
+
+  if (size < (16 + 8 + 4 + 4))
+    goto not_enough_data;
+
+  /* skip file id */
+  gst_asf_demux_skip_bytes (16, &data, &size);
+  interval = gst_asf_demux_get_uint64 (&data, &size) * (GstClockTime) 100;
+  gst_asf_demux_skip_bytes (4, &data, &size);
+  count = gst_asf_demux_get_uint32 (&data, &size);
+  if (count > 0) {
+    demux->sidx_interval = interval;
+    demux->sidx_num_entries = count;
+    g_free (demux->sidx_entries);
+    demux->sidx_entries = g_new0 (AsfSimpleIndexEntry, count);
+
+    for (i = 0; i < count; ++i) {
+      if (G_UNLIKELY (size < 6)) {
+        /* adjust for broken files, to avoid having entries at the end
+         * of the parsed index that point to time=0. Resulting in seeking to
+         * the end of the file leading back to the beginning */
+        demux->sidx_num_entries -= (count - i);
+        break;
+      }
+      demux->sidx_entries[i].packet = gst_asf_demux_get_uint32 (&data, &size);
+      demux->sidx_entries[i].count = gst_asf_demux_get_uint16 (&data, &size);
+      GST_LOG_OBJECT (demux, "%" GST_TIME_FORMAT " = packet %4u  count : %2d",
+          GST_TIME_ARGS (i * interval), demux->sidx_entries[i].packet,
+          demux->sidx_entries[i].count);
+    }
+  } else {
+    GST_DEBUG_OBJECT (demux, "simple index object with 0 entries");
+  }
+
+  return GST_FLOW_OK;
+
+not_enough_data:
+  {
+    GST_WARNING_OBJECT (demux, "short read parsing simple index object!");
+    return GST_FLOW_OK;         /* not fatal */
+  }
+}
+
+static GstFlowReturn
+gst_asf_demux_process_advanced_mutual_exclusion (GstASFDemux * demux,
+    guint8 * data, guint64 size)
+{
+  ASFGuid guid;
+  guint16 num, i;
+
+  if (size < 16 + 2 + (2 * 2))
+    goto not_enough_data;
+
+  gst_asf_demux_get_guid (&guid, &data, &size);
+  num = gst_asf_demux_get_uint16 (&data, &size);
+
+  if (num < 2) {
+    GST_WARNING_OBJECT (demux, "nonsensical mutually exclusive streams count");
+    return GST_FLOW_OK;
+  }
+
+  if (size < (num * sizeof (guint16)))
+    goto not_enough_data;
+
+  /* read mutually exclusive stream numbers */
+  for (i = 0; i < num; ++i) {
+    guint8 mes;
+    mes = gst_asf_demux_get_uint16 (&data, &size) & 0x7f;
+    GST_LOG_OBJECT (demux, "mutually exclusive: stream %d", mes);
+
+    demux->mut_ex_streams =
+        g_slist_append (demux->mut_ex_streams, GINT_TO_POINTER (mes));
+  }
+
+
+  return GST_FLOW_OK;
+
+  /* Errors */
+not_enough_data:
+  {
+    GST_WARNING_OBJECT (demux, "short read parsing advanced mutual exclusion");
+    return GST_FLOW_OK;         /* not absolutely fatal */
+  }
+}
+
+gboolean
+gst_asf_demux_is_unknown_stream (GstASFDemux * demux, guint stream_num)
+{
+  return g_slist_find (demux->other_streams,
+      GINT_TO_POINTER (stream_num)) == NULL;
+}
+
+static GstFlowReturn
+gst_asf_demux_process_ext_stream_props (GstASFDemux * demux, guint8 * data,
+    guint64 size)
+{
+  AsfStreamExtProps esp;
+  AsfStream *stream = NULL;
+  AsfObject stream_obj;
+  guint16 stream_name_count;
+  guint16 num_payload_ext;
+  guint64 len;
+  guint8 *stream_obj_data = NULL;
+  guint8 *data_start;
+  guint obj_size;
+  guint i, stream_num;
+
+  data_start = data;
+  obj_size = (guint) size;
+
+  esp.payload_extensions = NULL;
+
+  if (size < 64)
+    goto not_enough_data;
+
+  esp.valid = TRUE;
+  esp.start_time = gst_asf_demux_get_uint64 (&data, &size) * GST_MSECOND;
+  esp.end_time = gst_asf_demux_get_uint64 (&data, &size) * GST_MSECOND;
+  esp.data_bitrate = gst_asf_demux_get_uint32 (&data, &size);
+  esp.buffer_size = gst_asf_demux_get_uint32 (&data, &size);
+  esp.intial_buf_fullness = gst_asf_demux_get_uint32 (&data, &size);
+  esp.data_bitrate2 = gst_asf_demux_get_uint32 (&data, &size);
+  esp.buffer_size2 = gst_asf_demux_get_uint32 (&data, &size);
+  esp.intial_buf_fullness2 = gst_asf_demux_get_uint32 (&data, &size);
+  esp.max_obj_size = gst_asf_demux_get_uint32 (&data, &size);
+  esp.flags = gst_asf_demux_get_uint32 (&data, &size);
+  stream_num = gst_asf_demux_get_uint16 (&data, &size);
+  esp.lang_idx = gst_asf_demux_get_uint16 (&data, &size);
+  esp.avg_time_per_frame = gst_asf_demux_get_uint64 (&data, &size);
+  stream_name_count = gst_asf_demux_get_uint16 (&data, &size);
+  num_payload_ext = gst_asf_demux_get_uint16 (&data, &size);
+
+  GST_INFO ("start_time             = %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (esp.start_time));
+  GST_INFO ("end_time               = %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (esp.end_time));
+  GST_INFO ("flags                  = %08x", esp.flags);
+  GST_INFO ("average time per frame = %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (esp.avg_time_per_frame * 100));
+  GST_INFO ("stream number          = %u", stream_num);
+  GST_INFO ("stream language ID idx = %u (%s)", esp.lang_idx,
+      (esp.lang_idx < demux->num_languages) ?
+      GST_STR_NULL (demux->languages[esp.lang_idx]) : "??");
+  GST_INFO ("stream name count      = %u", stream_name_count);
+
+  /* read stream names */
+  for (i = 0; i < stream_name_count; ++i) {
+    guint16 stream_lang_idx G_GNUC_UNUSED;
+    gchar *stream_name = NULL;
+
+    if (size < 2)
+      goto not_enough_data;
+    stream_lang_idx = gst_asf_demux_get_uint16 (&data, &size);
+    if (!gst_asf_demux_get_string (&stream_name, NULL, &data, &size))
+      goto not_enough_data;
+    GST_INFO ("stream name %d: %s", i, GST_STR_NULL (stream_name));
+    g_free (stream_name);       /* TODO: store names in struct */
+  }
+
+  /* read payload extension systems stuff */
+  GST_LOG ("payload extension systems count = %u", num_payload_ext);
+
+  if (num_payload_ext > 0)
+    esp.payload_extensions = g_new0 (AsfPayloadExtension, num_payload_ext + 1);
+
+  for (i = 0; i < num_payload_ext; ++i) {
+    AsfPayloadExtension ext;
+    ASFGuid ext_guid;
+    guint32 sys_info_len;
+
+    if (size < 16 + 2 + 4)
+      goto not_enough_data;
+
+    gst_asf_demux_get_guid (&ext_guid, &data, &size);
+    ext.id = gst_asf_demux_identify_guid (asf_payload_ext_guids, &ext_guid);
+    ext.len = gst_asf_demux_get_uint16 (&data, &size);
+
+    sys_info_len = gst_asf_demux_get_uint32 (&data, &size);
+    GST_LOG ("payload systems info len = %u", sys_info_len);
+    if (!gst_asf_demux_skip_bytes (sys_info_len, &data, &size))
+      goto not_enough_data;
+
+    esp.payload_extensions[i] = ext;
+  }
+
+  GST_LOG ("bytes read: %u/%u", (guint) (data - data_start), obj_size);
+
+  /* there might be an optional STREAM_INFO object here now; if not, we
+   * should have parsed the corresponding stream info object already (since
+   * we are parsing the extended stream properties objects delayed) */
+  if (size == 0) {
+    stream = gst_asf_demux_get_stream (demux, stream_num);
+    goto done;
+  }
+
+  if (size < ASF_OBJECT_HEADER_SIZE)
+    goto not_enough_data;
+
+  /* get size of the stream object */
+  if (!asf_demux_peek_object (demux, data, size, &stream_obj, TRUE))
+    goto corrupted_stream;
+
+  if (stream_obj.id != ASF_OBJ_STREAM)
+    goto expected_stream_object;
+
+  if (stream_obj.size < ASF_OBJECT_HEADER_SIZE ||
+      stream_obj.size > (10 * 1024 * 1024))
+    goto not_enough_data;
+
+  gst_asf_demux_skip_bytes (ASF_OBJECT_HEADER_SIZE, &data, &size);
+
+  /* process this stream object later after all the other 'normal' ones
+   * have been processed (since the others are more important/non-hidden) */
+  len = stream_obj.size - ASF_OBJECT_HEADER_SIZE;
+  if (!gst_asf_demux_get_bytes (&stream_obj_data, len, &data, &size))
+    goto not_enough_data;
+
+  /* parse stream object */
+  stream = gst_asf_demux_parse_stream_object (demux, stream_obj_data, len);
+  g_free (stream_obj_data);
+
+done:
+
+  if (stream) {
+    stream->ext_props = esp;
+
+    /* try to set the framerate */
+    if (stream->is_video && stream->caps) {
+      GValue framerate = { 0 };
+      GstStructure *s;
+      gint num, denom;
+
+      g_value_init (&framerate, GST_TYPE_FRACTION);
+
+      num = GST_SECOND / 100;
+      denom = esp.avg_time_per_frame;
+      if (denom == 0) {
+        /* avoid division by 0, assume 25/1 framerate */
+        denom = GST_SECOND / 2500;
+      }
+
+      gst_value_set_fraction (&framerate, num, denom);
+
+      stream->caps = gst_caps_make_writable (stream->caps);
+      s = gst_caps_get_structure (stream->caps, 0);
+      gst_structure_set_value (s, "framerate", &framerate);
+      g_value_unset (&framerate);
+      GST_DEBUG_OBJECT (demux, "setting framerate of %d/%d = %f",
+          num, denom, ((gdouble) num) / denom);
+    }
+
+    /* add language info now if we have it */
+    if (stream->ext_props.lang_idx < demux->num_languages) {
+      if (stream->pending_tags == NULL)
+        stream->pending_tags = gst_tag_list_new_empty ();
+      GST_LOG_OBJECT (demux, "stream %u has language '%s'", stream->id,
+          demux->languages[stream->ext_props.lang_idx]);
+      gst_tag_list_add (stream->pending_tags, GST_TAG_MERGE_APPEND,
+          GST_TAG_LANGUAGE_CODE, demux->languages[stream->ext_props.lang_idx],
+          NULL);
+    }
+  } else if (gst_asf_demux_is_unknown_stream (demux, stream_num)) {
+    GST_WARNING_OBJECT (demux, "Ext. stream properties for unknown stream");
+  }
+
+  if (!stream)
+    g_free (esp.payload_extensions);
+
+  return GST_FLOW_OK;
+
+  /* Errors */
+not_enough_data:
+  {
+    GST_WARNING_OBJECT (demux, "short read parsing ext stream props object!");
+    g_free (esp.payload_extensions);
+    return GST_FLOW_OK;         /* not absolutely fatal */
+  }
+expected_stream_object:
+  {
+    GST_WARNING_OBJECT (demux, "error parsing extended stream properties "
+        "object: expected embedded stream object, but got %s object instead!",
+        gst_asf_get_guid_nick (asf_object_guids, stream_obj.id));
+    g_free (esp.payload_extensions);
+    return GST_FLOW_OK;         /* not absolutely fatal */
+  }
+corrupted_stream:
+  {
+    GST_WARNING_OBJECT (demux, "Corrupted stream");
+    g_free (esp.payload_extensions);
+    return GST_FLOW_ERROR;
+  }
+}
+
+static const gchar *
+gst_asf_demux_push_obj (GstASFDemux * demux, guint32 obj_id)
+{
+  const gchar *nick;
+
+  nick = gst_asf_get_guid_nick (asf_object_guids, obj_id);
+  if (g_str_has_prefix (nick, "ASF_OBJ_"))
+    nick += strlen ("ASF_OBJ_");
+
+  if (demux->objpath == NULL) {
+    demux->objpath = g_strdup (nick);
+  } else {
+    gchar *newpath;
+
+    newpath = g_strdup_printf ("%s/%s", demux->objpath, nick);
+    g_free (demux->objpath);
+    demux->objpath = newpath;
+  }
+
+  return (const gchar *) demux->objpath;
+}
+
+static void
+gst_asf_demux_pop_obj (GstASFDemux * demux)
+{
+  gchar *s;
+
+  if ((s = g_strrstr (demux->objpath, "/"))) {
+    *s = '\0';
+  } else {
+    g_free (demux->objpath);
+    demux->objpath = NULL;
+  }
+}
+
+static void
+gst_asf_demux_process_queued_extended_stream_objects (GstASFDemux * demux)
+{
+  GSList *l;
+  guint i;
+
+  /* Parse the queued extended stream property objects and add the info
+   * to the existing streams or add the new embedded streams, but without
+   * activating them yet */
+  GST_LOG_OBJECT (demux, "%u queued extended stream properties objects",
+      g_slist_length (demux->ext_stream_props));
+
+  for (l = demux->ext_stream_props, i = 0; l != NULL; l = l->next, ++i) {
+    GstBuffer *buf = GST_BUFFER (l->data);
+    GstMapInfo map;
+
+    gst_buffer_map (buf, &map, GST_MAP_READ);
+
+    GST_LOG_OBJECT (demux, "parsing ext. stream properties object #%u", i);
+    gst_asf_demux_process_ext_stream_props (demux, map.data, map.size);
+    gst_buffer_unmap (buf, &map);
+    gst_buffer_unref (buf);
+  }
+  g_slist_free (demux->ext_stream_props);
+  demux->ext_stream_props = NULL;
+}
+
+#if 0
+static void
+gst_asf_demux_activate_ext_props_streams (GstASFDemux * demux)
+{
+  guint i, j;
+
+  for (i = 0; i < demux->num_streams; ++i) {
+    AsfStream *stream;
+    gboolean is_hidden;
+    GSList *x;
+
+    stream = &demux->stream[i];
+
+    GST_LOG_OBJECT (demux, "checking  stream %2u", stream->id);
+
+    if (stream->active) {
+      GST_LOG_OBJECT (demux, "stream %2u is already activated", stream->id);
+      continue;
+    }
+
+    is_hidden = FALSE;
+    for (x = demux->mut_ex_streams; x != NULL; x = x->next) {
+      guint8 *mes;
+
+      /* check for each mutual exclusion whether it affects this stream */
+      for (mes = (guint8 *) x->data; mes != NULL && *mes != 0xff; ++mes) {
+        if (*mes == stream->id) {
+          /* if yes, check if we've already added streams that are mutually
+           * exclusive with the stream we're about to add */
+          for (mes = (guint8 *) x->data; mes != NULL && *mes != 0xff; ++mes) {
+            for (j = 0; j < demux->num_streams; ++j) {
+              /* if the broadcast flag is set, assume the hidden streams aren't
+               * actually streamed and hide them (or playbin won't work right),
+               * otherwise assume their data is available */
+              if (demux->stream[j].id == *mes && demux->broadcast) {
+                is_hidden = TRUE;
+                GST_LOG_OBJECT (demux, "broadcast stream ID %d to be added is "
+                    "mutually exclusive with already existing stream ID %d, "
+                    "hiding stream", stream->id, demux->stream[j].id);
+                goto next;
+              }
+            }
+          }
+          break;
+        }
+      }
+    }
+
+  next:
+
+    /* FIXME: we should do stream activation based on preroll data in
+     * streaming mode too */
+    if (demux->streaming && !is_hidden)
+      gst_asf_demux_activate_stream (demux, stream);
+  }
+}
+#endif
+
+static GstFlowReturn
+gst_asf_demux_process_object (GstASFDemux * demux, guint8 ** p_data,
+    guint64 * p_size)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+  AsfObject obj;
+  guint64 obj_data_size;
+
+  if (*p_size < ASF_OBJECT_HEADER_SIZE)
+    return ASF_FLOW_NEED_MORE_DATA;
+
+  if (!asf_demux_peek_object (demux, *p_data, ASF_OBJECT_HEADER_SIZE, &obj,
+          TRUE))
+    return GST_FLOW_ERROR;
+  gst_asf_demux_skip_bytes (ASF_OBJECT_HEADER_SIZE, p_data, p_size);
+
+  obj_data_size = obj.size - ASF_OBJECT_HEADER_SIZE;
+
+  if (*p_size < obj_data_size)
+    return ASF_FLOW_NEED_MORE_DATA;
+
+  gst_asf_demux_push_obj (demux, obj.id);
+
+  GST_INFO ("%s: size %" G_GUINT64_FORMAT, demux->objpath, obj.size);
+
+  switch (obj.id) {
+    case ASF_OBJ_STREAM:
+      gst_asf_demux_parse_stream_object (demux, *p_data, obj_data_size);
+      ret = GST_FLOW_OK;
+      break;
+    case ASF_OBJ_FILE:
+      ret = gst_asf_demux_process_file (demux, *p_data, obj_data_size);
+      break;
+    case ASF_OBJ_HEADER:
+      ret = gst_asf_demux_process_header (demux, *p_data, obj_data_size);
+      break;
+    case ASF_OBJ_COMMENT:
+      ret = gst_asf_demux_process_comment (demux, *p_data, obj_data_size);
+      break;
+    case ASF_OBJ_HEAD1:
+      ret = gst_asf_demux_process_header_ext (demux, *p_data, obj_data_size);
+      break;
+    case ASF_OBJ_BITRATE_PROPS:
+      ret =
+          gst_asf_demux_process_bitrate_props_object (demux, *p_data,
+          obj_data_size);
+      break;
+    case ASF_OBJ_EXT_CONTENT_DESC:
+      ret =
+          gst_asf_demux_process_ext_content_desc (demux, *p_data,
+          obj_data_size);
+      break;
+    case ASF_OBJ_METADATA_OBJECT:
+      ret = gst_asf_demux_process_metadata (demux, *p_data, obj_data_size);
+      break;
+    case ASF_OBJ_EXTENDED_STREAM_PROPS:{
+      GstBuffer *buf;
+
+      /* process these later, we might not have parsed the corresponding
+       * stream object yet */
+      GST_LOG ("%s: queued for later parsing", demux->objpath);
+      buf = gst_buffer_new_and_alloc (obj_data_size);
+      gst_buffer_fill (buf, 0, *p_data, obj_data_size);
+      demux->ext_stream_props = g_slist_append (demux->ext_stream_props, buf);
+      ret = GST_FLOW_OK;
+      break;
+    }
+    case ASF_OBJ_LANGUAGE_LIST:
+      ret = gst_asf_demux_process_language_list (demux, *p_data, obj_data_size);
+      break;
+    case ASF_OBJ_ADVANCED_MUTUAL_EXCLUSION:
+      ret = gst_asf_demux_process_advanced_mutual_exclusion (demux, *p_data,
+          obj_data_size);
+      break;
+    case ASF_OBJ_SIMPLE_INDEX:
+      ret = gst_asf_demux_process_simple_index (demux, *p_data, obj_data_size);
+      break;
+    case ASF_OBJ_CONTENT_ENCRYPTION:
+    case ASF_OBJ_EXT_CONTENT_ENCRYPTION:
+    case ASF_OBJ_DIGITAL_SIGNATURE_OBJECT:
+    case ASF_OBJ_UNKNOWN_ENCRYPTION_OBJECT:
+      goto error_encrypted;
+    case ASF_OBJ_CONCEAL_NONE:
+    case ASF_OBJ_HEAD2:
+    case ASF_OBJ_UNDEFINED:
+    case ASF_OBJ_CODEC_COMMENT:
+    case ASF_OBJ_INDEX:
+    case ASF_OBJ_PADDING:
+    case ASF_OBJ_BITRATE_MUTEX:
+    case ASF_OBJ_COMPATIBILITY:
+    case ASF_OBJ_INDEX_PLACEHOLDER:
+    case ASF_OBJ_INDEX_PARAMETERS:
+    case ASF_OBJ_STREAM_PRIORITIZATION:
+    case ASF_OBJ_SCRIPT_COMMAND:
+    case ASF_OBJ_METADATA_LIBRARY_OBJECT:
+    default:
+      /* Unknown/unhandled object, skip it and hope for the best */
+      GST_INFO ("%s: skipping object", demux->objpath);
+      ret = GST_FLOW_OK;
+      break;
+  }
+
+  /* this can't fail, we checked the number of bytes available before */
+  gst_asf_demux_skip_bytes (obj_data_size, p_data, p_size);
+
+  GST_LOG ("%s: ret = %s", demux->objpath, gst_asf_get_flow_name (ret));
+
+  gst_asf_demux_pop_obj (demux);
+
+  return ret;
+
+/* ERRORS */
+error_encrypted:
+  {
+    GST_ELEMENT_ERROR (demux, STREAM, DECRYPT, (NULL), (NULL));
+    return GST_FLOW_ERROR;
+  }
+}
+
+static void
+gst_asf_demux_descramble_buffer (GstASFDemux * demux, AsfStream * stream,
+    GstBuffer ** p_buffer)
+{
+  GstBuffer *descrambled_buffer;
+  GstBuffer *scrambled_buffer;
+  GstBuffer *sub_buffer;
+  guint offset;
+  guint off;
+  guint row;
+  guint col;
+  guint idx;
+
+  /* descrambled_buffer is initialised in the first iteration */
+  descrambled_buffer = NULL;
+  scrambled_buffer = *p_buffer;
+
+  if (gst_buffer_get_size (scrambled_buffer) <
+      stream->ds_packet_size * stream->span)
+    return;
+
+  for (offset = 0; offset < gst_buffer_get_size (scrambled_buffer);
+      offset += stream->ds_chunk_size) {
+    off = offset / stream->ds_chunk_size;
+    row = off / stream->span;
+    col = off % stream->span;
+    idx = row + col * stream->ds_packet_size / stream->ds_chunk_size;
+    GST_DEBUG ("idx=%u, row=%u, col=%u, off=%u, ds_chunk_size=%u", idx, row,
+        col, off, stream->ds_chunk_size);
+    GST_DEBUG ("scrambled buffer size=%" G_GSIZE_FORMAT
+        ", span=%u, packet_size=%u", gst_buffer_get_size (scrambled_buffer),
+        stream->span, stream->ds_packet_size);
+    GST_DEBUG ("gst_buffer_get_size (scrambled_buffer) = %" G_GSIZE_FORMAT,
+        gst_buffer_get_size (scrambled_buffer));
+    sub_buffer =
+        gst_buffer_copy_region (scrambled_buffer, GST_BUFFER_COPY_MEMORY,
+        idx * stream->ds_chunk_size, stream->ds_chunk_size);
+    if (!offset) {
+      descrambled_buffer = sub_buffer;
+    } else {
+      descrambled_buffer = gst_buffer_append (descrambled_buffer, sub_buffer);
+    }
+  }
+
+  GST_BUFFER_TIMESTAMP (descrambled_buffer) =
+      GST_BUFFER_TIMESTAMP (scrambled_buffer);
+  GST_BUFFER_DURATION (descrambled_buffer) =
+      GST_BUFFER_DURATION (scrambled_buffer);
+  GST_BUFFER_OFFSET (descrambled_buffer) = GST_BUFFER_OFFSET (scrambled_buffer);
+  GST_BUFFER_OFFSET_END (descrambled_buffer) =
+      GST_BUFFER_OFFSET_END (scrambled_buffer);
+
+  /* FIXME/CHECK: do we need to transfer buffer flags here too? */
+
+  gst_buffer_unref (scrambled_buffer);
+  *p_buffer = descrambled_buffer;
+}
+
+static gboolean
+gst_asf_demux_element_send_event (GstElement * element, GstEvent * event)
+{
+  GstASFDemux *demux = GST_ASF_DEMUX (element);
+  gint i;
+
+  GST_DEBUG ("handling element event of type %s", GST_EVENT_TYPE_NAME (event));
+
+  for (i = 0; i < demux->num_streams; ++i) {
+    gst_event_ref (event);
+    if (gst_asf_demux_handle_src_event (demux->stream[i].pad,
+            GST_OBJECT_CAST (element), event)) {
+      gst_event_unref (event);
+      return TRUE;
+    }
+  }
+
+  gst_event_unref (event);
+  return FALSE;
+}
+
+/* takes ownership of the passed event */
+static gboolean
+gst_asf_demux_send_event_unlocked (GstASFDemux * demux, GstEvent * event)
+{
+  gboolean ret = TRUE;
+  gint i;
+
+  GST_DEBUG_OBJECT (demux, "sending %s event to all source pads",
+      GST_EVENT_TYPE_NAME (event));
+
+  for (i = 0; i < demux->num_streams; ++i) {
+    gst_event_ref (event);
+    ret &= gst_pad_push_event (demux->stream[i].pad, event);
+  }
+  gst_event_unref (event);
+  return ret;
+}
+
+static gboolean
+gst_asf_demux_handle_src_query (GstPad * pad, GstObject * parent,
+    GstQuery * query)
+{
+  GstASFDemux *demux;
+  gboolean res = FALSE;
+
+  demux = GST_ASF_DEMUX (parent);
+
+  GST_DEBUG ("handling %s query",
+      gst_query_type_get_name (GST_QUERY_TYPE (query)));
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_DURATION:
+    {
+      GstFormat format;
+
+      gst_query_parse_duration (query, &format, NULL);
+
+      if (format != GST_FORMAT_TIME) {
+        GST_LOG ("only support duration queries in TIME format");
+        break;
+      }
+
+      res = gst_pad_query_default (pad, parent, query);
+      if (!res) {
+        GST_OBJECT_LOCK (demux);
+
+        if (demux->segment.duration != GST_CLOCK_TIME_NONE) {
+          GST_LOG ("returning duration: %" GST_TIME_FORMAT,
+              GST_TIME_ARGS (demux->segment.duration));
+
+          gst_query_set_duration (query, GST_FORMAT_TIME,
+              demux->segment.duration);
+
+          res = TRUE;
+        } else {
+          GST_LOG ("duration not known yet");
+        }
+
+        GST_OBJECT_UNLOCK (demux);
+      }
+      break;
+    }
+
+    case GST_QUERY_POSITION:{
+      GstFormat format;
+
+      gst_query_parse_position (query, &format, NULL);
+
+      if (format != GST_FORMAT_TIME) {
+        GST_LOG ("only support position queries in TIME format");
+        break;
+      }
+
+      GST_OBJECT_LOCK (demux);
+
+      if (demux->segment.position != GST_CLOCK_TIME_NONE) {
+        GST_LOG ("returning position: %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (demux->segment.position));
+
+        gst_query_set_position (query, GST_FORMAT_TIME,
+            demux->segment.position);
+
+        res = TRUE;
+      } else {
+        GST_LOG ("position not known yet");
+      }
+
+      GST_OBJECT_UNLOCK (demux);
+      break;
+    }
+
+    case GST_QUERY_SEEKING:{
+      GstFormat format;
+
+      gst_query_parse_seeking (query, &format, NULL, NULL, NULL);
+      if (format == GST_FORMAT_TIME) {
+        gint64 duration;
+
+        GST_OBJECT_LOCK (demux);
+        duration = demux->segment.duration;
+        GST_OBJECT_UNLOCK (demux);
+
+        if (!demux->streaming || !demux->seekable) {
+          gst_query_set_seeking (query, GST_FORMAT_TIME, demux->seekable, 0,
+              duration);
+          res = TRUE;
+        } else {
+          GstFormat fmt;
+          gboolean seekable;
+
+          /* try upstream first in TIME */
+          res = gst_pad_query_default (pad, parent, query);
+
+          gst_query_parse_seeking (query, &fmt, &seekable, NULL, NULL);
+          GST_LOG_OBJECT (demux, "upstream %s seekable %d",
+              GST_STR_NULL (gst_format_get_name (fmt)), seekable);
+          /* if no luck, maybe in BYTES */
+          if (!seekable || fmt != GST_FORMAT_TIME) {
+            GstQuery *q;
+
+            q = gst_query_new_seeking (GST_FORMAT_BYTES);
+            if ((res = gst_pad_peer_query (demux->sinkpad, q))) {
+              gst_query_parse_seeking (q, &fmt, &seekable, NULL, NULL);
+              GST_LOG_OBJECT (demux, "upstream %s seekable %d",
+                  GST_STR_NULL (gst_format_get_name (fmt)), seekable);
+              if (fmt != GST_FORMAT_BYTES)
+                seekable = FALSE;
+            }
+            gst_query_unref (q);
+            gst_query_set_seeking (query, GST_FORMAT_TIME, seekable, 0,
+                duration);
+            res = TRUE;
+          }
+        }
+      } else
+        GST_LOG_OBJECT (demux, "only support seeking in TIME format");
+      break;
+    }
+
+    case GST_QUERY_LATENCY:
+    {
+      gboolean live;
+      GstClockTime min, max;
+
+      /* preroll delay does not matter in non-live pipeline,
+       * but we might end up in a live (rtsp) one ... */
+
+      /* first forward */
+      res = gst_pad_query_default (pad, parent, query);
+      if (!res)
+        break;
+
+      gst_query_parse_latency (query, &live, &min, &max);
+
+      GST_DEBUG_OBJECT (demux, "Peer latency: live %d, min %"
+          GST_TIME_FORMAT " max %" GST_TIME_FORMAT, live,
+          GST_TIME_ARGS (min), GST_TIME_ARGS (max));
+
+      GST_OBJECT_LOCK (demux);
+      min += demux->latency;
+      if (max != -1)
+        max += demux->latency;
+      GST_OBJECT_UNLOCK (demux);
+
+      gst_query_set_latency (query, live, min, max);
+      break;
+    }
+    case GST_QUERY_SEGMENT:
+    {
+      GstFormat format;
+      gint64 start, stop;
+
+      format = demux->segment.format;
+
+      start =
+          gst_segment_to_stream_time (&demux->segment, format,
+          demux->segment.start);
+      if ((stop = demux->segment.stop) == -1)
+        stop = demux->segment.duration;
+      else
+        stop = gst_segment_to_stream_time (&demux->segment, format, stop);
+
+      gst_query_set_segment (query, demux->segment.rate, format, start, stop);
+      res = TRUE;
+      break;
+    }
+    default:
+      res = gst_pad_query_default (pad, parent, query);
+      break;
+  }
+
+  return res;
+}
+
+static void
+gst_asf_demux_finalize (GObject * object)
+{
+  GstASFDemux *demux = GST_ASF_DEMUX (object);
+
+  if (demux->metadata)
+    gst_caps_unref (demux->metadata);
+  demux->metadata = NULL;
+
+  if (demux->global_metadata)
+    gst_structure_free (demux->global_metadata);
+  demux->global_metadata = NULL;
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static GstStateChangeReturn
+gst_asf_demux_change_state (GstElement * element, GstStateChange transition)
+{
+  GstASFDemux *demux = GST_ASF_DEMUX (element);
+  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:{
+      gst_segment_init (&demux->segment, GST_FORMAT_TIME);
+      demux->need_newsegment = TRUE;
+      demux->segment_running = FALSE;
+      demux->keyunit_sync = FALSE;
+      demux->accurate = FALSE;
+      demux->adapter = gst_adapter_new ();
+      demux->data_size = 0;
+      demux->data_offset = 0;
+      demux->index_offset = 0;
+      demux->base_offset = 0;
+      demux->flowcombiner = gst_flow_combiner_new ();
+
+      break;
+    }
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+  if (ret == GST_STATE_CHANGE_FAILURE)
+    return ret;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      gst_asf_demux_reset (demux, FALSE);
+      break;
+
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      gst_asf_demux_reset (demux, FALSE);
+      gst_flow_combiner_free (demux->flowcombiner);
+      demux->flowcombiner = NULL;
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+}
diff --git a/subprojects/gst-plugins-ugly/gst/asfdemux/gstasfdemux.h b/subprojects/gst-plugins-ugly/gst/asfdemux/gstasfdemux.h
new file mode 100644 (file)
index 0000000..841b21a
--- /dev/null
@@ -0,0 +1,256 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * 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 __ASF_DEMUX_H__
+#define __ASF_DEMUX_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstadapter.h>
+#include <gst/base/gstflowcombiner.h>
+
+#include "asfheaders.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_ASF_DEMUX \
+  (gst_asf_demux_get_type())
+#define GST_ASF_DEMUX(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ASF_DEMUX,GstASFDemux))
+#define GST_ASF_DEMUX_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_ASF_DEMUX,GstASFDemuxClass))
+#define GST_IS_ASF_DEMUX(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ASF_DEMUX))
+#define GST_IS_ASF_DEMUX_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_ASF_DEMUX))
+
+typedef struct _GstASFDemux GstASFDemux;
+typedef struct _GstASFDemuxClass GstASFDemuxClass;
+typedef enum _GstASF3DMode GstASF3DMode;
+
+typedef struct {
+  guint32      packet;
+  guint16      count;
+} AsfSimpleIndexEntry;
+
+typedef struct {
+  AsfPayloadExtensionID   id : 16;  /* extension ID; the :16 makes sure the
+                                     * struct gets packed into 4 bytes       */
+  guint16                 len;      /* save this so we can skip unknown IDs  */
+} AsfPayloadExtension;
+
+/*
+ * 3D Types for Media play
+ */
+enum _GstASF3DMode
+{
+  GST_ASF_3D_NONE = 0x00,
+
+  //added, interim format - half
+  GST_ASF_3D_SIDE_BY_SIDE_HALF_LR = 0x01,
+  GST_ASF_3D_SIDE_BY_SIDE_HALF_RL = 0x02,
+  GST_ASF_3D_TOP_AND_BOTTOM_HALF_LR = 0x03,
+  GST_ASF_3D_TOP_AND_BOTTOM_HALF_RL = 0x04,
+  GST_ASF_3D_DUAL_STREAM = 0x0D,                  /*< Full format*/
+};
+
+typedef struct
+{
+  gboolean        valid;               /* TRUE if structure is valid/filled */
+
+  GstClockTime    start_time;
+  GstClockTime    end_time;
+  GstClockTime    avg_time_per_frame;
+  guint32         data_bitrate;
+  guint32         buffer_size;
+  guint32         intial_buf_fullness;
+  guint32         data_bitrate2;
+  guint32         buffer_size2;
+  guint32         intial_buf_fullness2;
+  guint32         max_obj_size;
+  guint32         flags;
+  guint16         lang_idx;
+
+  /* may be NULL if there are no extensions; otherwise, terminated by
+   * an AsfPayloadExtension record with len 0 */
+  AsfPayloadExtension  *payload_extensions;
+
+  /* missing: stream names */
+} AsfStreamExtProps;
+
+typedef struct
+{
+  AsfStreamType      type;
+
+  gboolean           active;  /* if the stream has been activated (pad added) */
+
+  GstPad     *pad;
+  guint16     id;
+
+  /* video-only */
+  gboolean    is_video;
+  gboolean    fps_known;
+
+  GstCaps    *caps;
+
+  GstBuffer *streamheader;
+
+  GstTagList *pending_tags;
+
+  gboolean    discont;
+  gboolean    first_buffer;
+
+  /* Descrambler settings */
+  guint8               span;
+  guint16              ds_packet_size;
+  guint16              ds_chunk_size;
+  guint16              ds_data_size;
+
+  /* for new parsing code */
+  GArray         *payloads;  /* pending payloads */
+
+  /* Video stream PAR & interlacing */
+  guint8       par_x;
+  guint8       par_y;
+  gboolean      interlaced;
+
+  /* For reverse playback */
+  gboolean     reverse_kf_ready; /* Found complete KF payload*/
+  GArray       *payloads_rev; /* Temp queue for storing multiple payloads of packet*/
+  gint         kf_pos; /* KF position in payload queue. Payloads from this pos will be pushed */
+
+  /* extended stream properties (optional) */
+  AsfStreamExtProps  ext_props;
+
+  gboolean     inspect_payload;
+} AsfStream;
+
+typedef enum {
+  GST_ASF_DEMUX_STATE_HEADER,
+  GST_ASF_DEMUX_STATE_DATA,
+  GST_ASF_DEMUX_STATE_INDEX
+} GstASFDemuxState;
+
+#define GST_ASF_DEMUX_IS_REVERSE_PLAYBACK(seg) (seg.rate < 0.0? TRUE:FALSE)
+
+#define GST_ASF_DEMUX_NUM_VIDEO_PADS   16
+#define GST_ASF_DEMUX_NUM_AUDIO_PADS   32
+#define GST_ASF_DEMUX_NUM_STREAMS      32
+#define GST_ASF_DEMUX_NUM_STREAM_IDS  127
+
+struct _GstASFDemux {
+  GstElement        element;
+
+  GstPad            *sinkpad;
+
+  gboolean           have_group_id;
+  guint              group_id;
+
+  GstAdapter        *adapter;
+  GstTagList        *taglist;
+  GstASFDemuxState   state;
+
+  /* byte offset where the asf starts, which might not be zero on chained
+   * asfs, index_offset and data_offset already are 'offseted' by base_offset */
+  guint64            base_offset;
+
+  guint64            index_offset; /* byte offset where index might be, or 0   */
+  guint64            data_offset;  /* byte offset where packets start          */
+  guint64            data_size;    /* total size of packet data in bytes, or 0 */
+  guint64            num_packets;  /* total number of data packets, or 0       */
+  gint64             packet;       /* current packet                           */
+  guint              speed_packets; /* Known number of packets to get in one go*/
+
+  gchar              **languages;
+  guint                num_languages;
+
+  GstCaps             *metadata;         /* metadata, for delayed parsing; one
+                                          * structure ('stream-N') per stream */
+  GstStructure       *global_metadata;  /* metadata which isn't specific to one stream */
+  GSList              *ext_stream_props; /* for delayed processing (buffers) */
+  GSList              *mut_ex_streams;   /* mutually exclusive streams */
+
+  guint32              num_audio_streams;
+  guint32              num_video_streams;
+  guint32              num_streams;
+  AsfStream            stream[GST_ASF_DEMUX_NUM_STREAMS];
+  gboolean             activated_streams;
+  GstFlowCombiner     *flowcombiner;
+
+  /* for chained asf handling, we need to hold the old asf streams until
+   * we detect the new ones */
+  AsfStream            old_stream[GST_ASF_DEMUX_NUM_STREAMS];
+  gboolean             old_num_streams;
+
+  GstClockTime         first_ts;        /* smallest timestamp found        */
+
+  guint32              packet_size;
+  guint64              play_time;
+
+  guint64              preroll;
+
+  gboolean             seekable;
+  gboolean             broadcast;
+
+  GstSegment           segment;          /* configured play segment                 */
+  gboolean             keyunit_sync;
+  gboolean             accurate;
+
+  gboolean             need_newsegment;  /* do we need to send a new-segment event? */
+  guint32              segment_seqnum;   /* if the new segment must have this seqnum */
+  GstClockTime         segment_ts;       /* streaming; timestamp for segment start */
+  GstSegment           in_segment;       /* streaming; upstream segment info */
+  GstClockTime         in_gap;           /* streaming; upstream initial segment gap for interpolation */
+  gboolean             segment_running;  /* if we've started the current segment    */
+  gboolean             streaming;        /* TRUE if we are operating chain-based    */
+  GstClockTime         latency;
+
+  /* for debugging only */
+  gchar               *objpath;
+
+  /* simple index, if available */
+  GstClockTime         sidx_interval;    /* interval between entries in ns */
+  guint                sidx_num_entries; /* number of index entries        */
+  AsfSimpleIndexEntry *sidx_entries;     /* packet number for each entry   */
+
+  GSList              *other_streams;    /* remember streams that are in header but have unknown type */
+
+  /* For reverse playback */
+  gboolean             seek_to_cur_pos; /* Search packets till we reach 'seek' time */
+  gboolean             multiple_payloads; /* Whether packet has multiple payloads */
+
+  /* parsing 3D */
+  GstASF3DMode asf_3D_mode;
+
+  gboolean saw_file_header;
+};
+
+struct _GstASFDemuxClass {
+  GstElementClass parent_class;
+};
+
+GType           gst_asf_demux_get_type (void);
+
+AsfStream     * gst_asf_demux_get_stream (GstASFDemux * demux, guint16 id);
+
+gboolean        gst_asf_demux_is_unknown_stream(GstASFDemux *demux, guint stream_num);
+
+G_END_DECLS
+
+#endif /* __ASF_DEMUX_H__ */
diff --git a/subprojects/gst-plugins-ugly/gst/asfdemux/gstasfelement.c b/subprojects/gst-plugins-ugly/gst/asfdemux/gstasfelement.c
new file mode 100644 (file)
index 0000000..3991f48
--- /dev/null
@@ -0,0 +1,52 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include <gst/riff/riff-read.h>
+#include "gst/gst-i18n-plugin.h"
+
+#include "gstasfelements.h"
+
+/* #include "gstasfmux.h" */
+GST_DEBUG_CATEGORY_EXTERN (asfdemux_dbg);
+#define GST_CAT_DEFAULT asfdemux_dbg
+
+void
+asf_element_init (GstPlugin * plugin)
+{
+  static gsize res = FALSE;
+  if (g_once_init_enter (&res)) {
+    GST_DEBUG_CATEGORY_INIT (asfdemux_dbg, "asfdemux", 0,
+        "asf demuxer element");
+
+#ifdef ENABLE_NLS
+    GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE,
+        LOCALEDIR);
+    bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+    bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+#endif /* ENABLE_NLS */
+    gst_riff_init ();
+    g_once_init_leave (&res, TRUE);
+  }
+
+}
diff --git a/subprojects/gst-plugins-ugly/gst/asfdemux/gstasfelements.h b/subprojects/gst-plugins-ugly/gst/asfdemux/gstasfelements.h
new file mode 100644 (file)
index 0000000..5495322
--- /dev/null
@@ -0,0 +1,39 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * 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_ASF_ELEMENTS_H__
+#define __GST_ASF_ELEMENTS_H__
+
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+
+
+G_BEGIN_DECLS
+
+void asf_element_init (GstPlugin * plugin);
+
+GST_ELEMENT_REGISTER_DECLARE (asfdemux);
+GST_ELEMENT_REGISTER_DECLARE (rtspwms);
+GST_ELEMENT_REGISTER_DECLARE (rtpasfdepay);
+
+G_END_DECLS
+
+#endif /* __GST_ASF_ELEMENTS_H__ */
diff --git a/subprojects/gst-plugins-ugly/gst/asfdemux/gstrtpasfdepay.c b/subprojects/gst-plugins-ugly/gst/asfdemux/gstrtpasfdepay.c
new file mode 100644 (file)
index 0000000..c9e2472
--- /dev/null
@@ -0,0 +1,546 @@
+/* GStreamer RTP ASF depayloader
+ * Copyright (C) 2006 Tim-Philipp Müller  <tim centricular net>
+ *               2009 Wim Taymans  <wim.taymans@gmail.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 "gstasfelements.h"
+#include "gstrtpasfdepay.h"
+#include <gst/rtp/gstrtpbuffer.h>
+
+#include <string.h>
+#include <stdlib.h>
+
+GST_DEBUG_CATEGORY_STATIC (rtpasfdepayload_debug);
+#define GST_CAT_DEFAULT rtpasfdepayload_debug
+
+static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-ms-asf")
+    );
+
+/* Other parameters: config, maxps */
+#define SINK_CAPS \
+  "application/x-rtp, "                                          \
+  "media = (string) { \"application\", \"video\", \"audio\" }, " \
+  "payload = (int) " GST_RTP_PAYLOAD_DYNAMIC_STRING ", "         \
+  "clock-rate = (int) [1, MAX ], "                               \
+  "encoding-name = (string) \"X-ASF-PF\""
+
+static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (SINK_CAPS)
+    );
+
+#define gst_rtp_asf_depay_parent_class parent_class
+G_DEFINE_TYPE (GstRtpAsfDepay, gst_rtp_asf_depay, GST_TYPE_RTP_BASE_DEPAYLOAD);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (rtpasfdepay, "rtpasfdepay",
+    GST_RANK_MARGINAL, GST_TYPE_RTP_ASF_DEPAY, asf_element_init (plugin));
+
+static void gst_rtp_asf_depay_finalize (GObject * object);
+
+static GstStateChangeReturn gst_rtp_asf_depay_change_state (GstElement *
+    element, GstStateChange transition);
+
+static gboolean gst_rtp_asf_depay_setcaps (GstRTPBaseDepayload * depay,
+    GstCaps * caps);
+static GstBuffer *gst_rtp_asf_depay_process (GstRTPBaseDepayload * basedepay,
+    GstBuffer * buf);
+
+static void
+gst_rtp_asf_depay_class_init (GstRtpAsfDepayClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstRTPBaseDepayloadClass *gstrtpbasedepayload_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+  gstrtpbasedepayload_class = (GstRTPBaseDepayloadClass *) klass;
+
+  gst_element_class_add_static_pad_template (gstelement_class, &src_factory);
+  gst_element_class_add_static_pad_template (gstelement_class, &sink_factory);
+
+  gst_element_class_set_static_metadata (gstelement_class,
+      "RTP ASF packet depayloader", "Codec/Depayloader/Network",
+      "Extracts ASF streams from RTP",
+      "Tim-Philipp Müller <tim centricular net>, "
+      "Wim Taymans <wim.taymans@gmail.com>");
+
+  gobject_class->finalize = gst_rtp_asf_depay_finalize;
+
+  gstelement_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_rtp_asf_depay_change_state);
+
+  gstrtpbasedepayload_class->set_caps =
+      GST_DEBUG_FUNCPTR (gst_rtp_asf_depay_setcaps);
+  gstrtpbasedepayload_class->process =
+      GST_DEBUG_FUNCPTR (gst_rtp_asf_depay_process);
+
+  GST_DEBUG_CATEGORY_INIT (rtpasfdepayload_debug, "rtpasfdepayload", 0,
+      "RTP asf depayloader element");
+}
+
+static void
+gst_rtp_asf_depay_init (GstRtpAsfDepay * depay)
+{
+  depay->adapter = gst_adapter_new ();
+}
+
+static void
+gst_rtp_asf_depay_finalize (GObject * object)
+{
+  GstRtpAsfDepay *depay;
+
+  depay = GST_RTP_ASF_DEPAY (object);
+
+  g_object_unref (depay->adapter);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static const guint8 asf_marker[16] = { 0x30, 0x26, 0xb2, 0x75, 0x8e, 0x66,
+  0xcf, 0x11, 0xa6, 0xd9, 0x00, 0xaa, 0x00, 0x62, 0xce, 0x6c
+};
+
+static gboolean
+gst_rtp_asf_depay_setcaps (GstRTPBaseDepayload * depayload, GstCaps * caps)
+{
+  GstRtpAsfDepay *depay;
+  GstStructure *s;
+  const gchar *config_str, *ps_string;
+  GstBuffer *buf;
+  GstCaps *src_caps;
+  guint8 *headers;
+  gsize headers_len;
+  gint clock_rate;
+
+  depay = GST_RTP_ASF_DEPAY (depayload);
+
+  s = gst_caps_get_structure (caps, 0);
+
+  if (!gst_structure_get_int (s, "clock-rate", &clock_rate) || clock_rate < 0)
+    clock_rate = 1000;
+  depayload->clock_rate = clock_rate;
+
+  /* config contains the asf headers in base64 coding */
+  config_str = gst_structure_get_string (s, "config");
+  if (config_str == NULL || *config_str == '\0')
+    goto no_config;
+
+  ps_string = gst_structure_get_string (s, "maxps");
+  if (ps_string == NULL || *ps_string == '\0')
+    goto no_packetsize;
+
+  if (depay->packet_size) {
+    /* header sent again following seek;
+     * discard to avoid confusing upstream */
+    if (depay->packet_size == atoi (ps_string)) {
+      goto duplicate_header;
+    } else {
+      /* since we should fiddle with downstream state to handle this */
+      goto refuse_renegotiation;
+    }
+  } else
+    depay->packet_size = atoi (ps_string);
+  if (depay->packet_size <= 16)
+    goto invalid_packetsize;
+
+  headers = (guint8 *) g_base64_decode (config_str, &headers_len);
+
+  if (headers == NULL || headers_len < 16
+      || memcmp (headers, asf_marker, 16) != 0)
+    goto invalid_headers;
+
+  src_caps = gst_caps_new_empty_simple ("video/x-ms-asf");
+  gst_pad_set_caps (depayload->srcpad, src_caps);
+  gst_caps_unref (src_caps);
+
+  buf = gst_buffer_new ();
+  gst_buffer_append_memory (buf,
+      gst_memory_new_wrapped (0, headers, headers_len, 0, headers_len, headers,
+          g_free));
+
+  gst_rtp_base_depayload_push (depayload, buf);
+
+  return TRUE;
+
+  /* ERRORS */
+no_config:
+  {
+    GST_WARNING_OBJECT (depay, "caps without 'config' field with asf headers");
+    return FALSE;
+  }
+no_packetsize:
+  {
+    GST_WARNING_OBJECT (depay, "caps without 'maxps' (packet size) field");
+    return FALSE;
+  }
+invalid_packetsize:
+  {
+    GST_WARNING_OBJECT (depay, "packet size %u invalid", depay->packet_size);
+    return FALSE;
+  }
+invalid_headers:
+  {
+    GST_WARNING_OBJECT (depay, "headers don't look like valid ASF headers");
+    g_free (headers);
+    return FALSE;
+  }
+duplicate_header:
+  {
+    GST_DEBUG_OBJECT (depayload, "discarding duplicate header");
+    return TRUE;
+  }
+refuse_renegotiation:
+  {
+    GST_WARNING_OBJECT (depayload, "cannot renegotiate to different header");
+    return FALSE;
+  }
+}
+
+static gint
+field_size (guint8 field)
+{
+  switch (field) {
+      /* DWORD - 32 bits */
+    case 3:
+      return 4;
+
+      /* WORD - 16 bits */
+    case 2:
+      return 2;
+
+      /* BYTE - 8 bits */
+    case 1:
+      return 1;
+
+      /* non-exitent */
+    case 0:
+    default:
+      return 0;
+  }
+}
+
+/* Set the padding field to te correct value as the spec
+ * says it should be se to 0 in the rtp packets
+ */
+static GstBuffer *
+gst_rtp_asf_depay_update_padding (GstRtpAsfDepay * depayload, GstBuffer * buf)
+{
+  GstBuffer *result;
+  GstMapInfo map;
+  guint8 *data;
+  gint offset = 0;
+  guint8 aux;
+  guint8 seq_type;
+  guint8 pad_type;
+  guint8 pkt_type;
+  gsize plen, padding;
+
+  plen = gst_buffer_get_size (buf);
+  if (plen == depayload->packet_size)
+    return buf;
+
+  padding = depayload->packet_size - plen;
+
+  GST_LOG_OBJECT (depayload,
+      "padding buffer size %" G_GSIZE_FORMAT " to packet size %d", plen,
+      depayload->packet_size);
+
+  result = gst_buffer_new_and_alloc (depayload->packet_size);
+
+  gst_buffer_map (result, &map, GST_MAP_READ);
+  data = map.data;
+  memset (data + plen, 0, padding);
+
+  gst_buffer_extract (buf, 0, data, plen);
+  gst_buffer_unref (buf);
+
+  aux = data[offset++];
+  if (aux & 0x80) {
+    guint8 err_len = 0;
+    if (aux & 0x60) {
+      GST_WARNING_OBJECT (depayload, "Error correction length type should be "
+          "set to 0");
+      /* this packet doesn't follow the spec */
+      gst_buffer_unmap (result, &map);
+      return result;
+    }
+    err_len = aux & 0x0F;
+    offset += err_len;
+
+    aux = data[offset++];
+  }
+  seq_type = (aux >> 1) & 0x3;
+  pad_type = (aux >> 3) & 0x3;
+  pkt_type = (aux >> 5) & 0x3;
+
+  offset += 1;                  /* skip property flags */
+  offset += field_size (pkt_type);      /* skip packet length */
+  offset += field_size (seq_type);      /* skip sequence field */
+
+  /* write padding */
+  switch (pad_type) {
+      /* DWORD */
+    case 3:
+      GST_WRITE_UINT32_LE (&(data[offset]), padding);
+      break;
+
+      /* WORD */
+    case 2:
+      GST_WRITE_UINT16_LE (&(data[offset]), padding);
+      break;
+
+      /* BYTE */
+    case 1:
+      data[offset] = (guint8) padding;
+      break;
+
+      /* non-existent */
+    case 0:
+    default:
+      break;
+  }
+  gst_buffer_unmap (result, &map);
+
+  return result;
+}
+
+/* Docs: 'RTSP Protocol PDF' document from http://sdp.ppona.com/ (page 8) */
+
+static GstBuffer *
+gst_rtp_asf_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf)
+{
+  GstRtpAsfDepay *depay;
+  const guint8 *payload;
+  GstBuffer *outbuf;
+  gboolean S, L, R, D, I;
+  guint payload_len, hdr_len, offset;
+  guint len_offs;
+  GstClockTime timestamp;
+  GstRTPBuffer rtpbuf = { NULL };
+
+  depay = GST_RTP_ASF_DEPAY (depayload);
+
+  /* flush remaining data on discont */
+  if (GST_BUFFER_IS_DISCONT (buf)) {
+    GST_LOG_OBJECT (depay, "got DISCONT");
+    gst_adapter_clear (depay->adapter);
+    depay->discont = TRUE;
+  }
+
+  gst_rtp_buffer_map (buf, GST_MAP_READ, &rtpbuf);
+  timestamp = GST_BUFFER_TIMESTAMP (buf);
+
+  payload_len = gst_rtp_buffer_get_payload_len (&rtpbuf);
+  payload = gst_rtp_buffer_get_payload (&rtpbuf);
+  offset = 0;
+
+  GST_LOG_OBJECT (depay, "got payload len of %u", payload_len);
+
+  do {
+    guint packet_len;
+
+    /* packet header is at least 4 bytes */
+    if (payload_len < 4)
+      goto too_small;
+
+    /*                      1                   2                   3
+     *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
+     * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+     * |S|L|R|D|I|RES  | Length/Offset                                 |
+     * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+     * | Relative Timestamp (optional)                                 |
+     * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+     * | Duration (optional)                                           |
+     * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+     * | LocationId (optional)                                         |
+     * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+     *
+     * S: packet contains a keyframe.
+     * L: If 1, Length/Offset contains length, else contains the byte offset
+     *    of the fragment's first byte counted from the beginning of the
+     *    complete ASF data packet.
+     * R: relative timestamp present
+     * D: duration present
+     * I: locationid present
+     */
+
+    S = ((payload[0] & 0x80) != 0);
+    L = ((payload[0] & 0x40) != 0);
+    R = ((payload[0] & 0x20) != 0);
+    D = ((payload[0] & 0x10) != 0);
+    I = ((payload[0] & 0x08) != 0);
+
+    hdr_len = 4;
+
+    len_offs = (payload[1] << 16) | (payload[2] << 8) | payload[3];
+
+    if (R) {
+      GST_DEBUG ("Relative timestamp field present : %u",
+          GST_READ_UINT32_BE (payload + hdr_len));
+      hdr_len += 4;
+    }
+    if (D) {
+      GST_DEBUG ("Duration field present : %u",
+          GST_READ_UINT32_BE (payload + hdr_len));
+      hdr_len += 4;
+    }
+    if (I) {
+      GST_DEBUG ("LocationId field present : %u",
+          GST_READ_UINT32_BE (payload + hdr_len));
+      hdr_len += 4;
+    }
+
+    GST_LOG_OBJECT (depay, "S %d, L %d, R %d, D %d, I %d", S, L, R, D, I);
+    GST_LOG_OBJECT (depay, "payload_len:%d, hdr_len:%d, len_offs:%d",
+        payload_len, hdr_len, len_offs);
+
+    if (payload_len < hdr_len)
+      goto too_small;
+
+    /* skip headers */
+    payload_len -= hdr_len;
+    payload += hdr_len;
+    offset += hdr_len;
+
+    if (L) {
+      /* L bit set, len contains the length of the packet */
+      packet_len = len_offs;
+    } else {
+      /* else it contains an offset which we don't handle yet */
+      GST_LOG_OBJECT (depay, "We have a fragmented packet");
+      packet_len = payload_len;
+    }
+
+    if (packet_len > payload_len)
+      packet_len = payload_len;
+
+    GST_LOG_OBJECT (depay, "packet len %u, payload len %u, packet_size:%u",
+        packet_len, payload_len, depay->packet_size);
+
+    if (!L) {
+      guint available;
+      GstBuffer *sub;
+
+      /* Fragmented packet handling */
+      outbuf = NULL;
+
+      if (len_offs == (available = gst_adapter_available (depay->adapter))) {
+        /* fragment aligns with what we have, add it */
+        GST_LOG_OBJECT (depay, "collecting fragment");
+        sub =
+            gst_rtp_buffer_get_payload_subbuffer (&rtpbuf, offset, packet_len);
+        gst_adapter_push (depay->adapter, sub);
+        /* RTP marker bit M is set if this is last fragment */
+        if (gst_rtp_buffer_get_marker (&rtpbuf)) {
+          GST_LOG_OBJECT (depay, "last fragment, assembling packet");
+          outbuf =
+              gst_adapter_take_buffer (depay->adapter, available + packet_len);
+        }
+      } else {
+        if (available) {
+          GST_WARNING_OBJECT (depay, "Offset doesn't match previous data?!");
+          GST_DEBUG_OBJECT (depay, "clearing for re-sync");
+          gst_adapter_clear (depay->adapter);
+        } else
+          GST_DEBUG_OBJECT (depay, "waiting for start of packet");
+      }
+    } else {
+      GST_LOG_OBJECT (depay, "collecting packet");
+      outbuf =
+          gst_rtp_buffer_get_payload_subbuffer (&rtpbuf, offset, packet_len);
+    }
+
+    /* If we haven't completed a full ASF packet, return */
+    if (!outbuf)
+      return NULL;
+
+    outbuf = gst_rtp_asf_depay_update_padding (depay, outbuf);
+
+    if (!S)
+      GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DELTA_UNIT);
+
+    if (depay->discont) {
+      GST_LOG_OBJECT (depay, "setting DISCONT");
+      GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
+      depay->discont = FALSE;
+    }
+
+    GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
+
+    gst_rtp_base_depayload_push (depayload, outbuf);
+
+    /* only apply the timestamp to the first buffer of this packet */
+    timestamp = -1;
+
+    /* skip packet data */
+    payload += packet_len;
+    offset += packet_len;
+    payload_len -= packet_len;
+  } while (payload_len > 0);
+
+  gst_rtp_buffer_unmap (&rtpbuf);
+
+  return NULL;
+
+/* ERRORS */
+too_small:
+  {
+    gst_rtp_buffer_unmap (&rtpbuf);
+    GST_WARNING_OBJECT (depayload, "Payload too small, expected at least 4 "
+        "bytes for header, but got only %d bytes", payload_len);
+    return NULL;
+  }
+}
+
+static GstStateChangeReturn
+gst_rtp_asf_depay_change_state (GstElement * element, GstStateChange trans)
+{
+  GstStateChangeReturn ret;
+  GstRtpAsfDepay *depay;
+
+  depay = GST_RTP_ASF_DEPAY (element);
+
+  switch (trans) {
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      gst_adapter_clear (depay->adapter);
+      depay->discont = TRUE;
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, trans);
+
+  switch (trans) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      gst_adapter_clear (depay->adapter);
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+}
diff --git a/subprojects/gst-plugins-ugly/gst/asfdemux/gstrtpasfdepay.h b/subprojects/gst-plugins-ugly/gst/asfdemux/gstrtpasfdepay.h
new file mode 100644 (file)
index 0000000..8388c8a
--- /dev/null
@@ -0,0 +1,64 @@
+/* GStreamer RTP ASF depayloader
+ * Copyright (C) 2006 Tim-Philipp Müller  <tim centricular net>
+ *               2009 Wim Taymans  <wim.taymans@gmail.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_RTP_ASF_DEPAY_H__
+#define __GST_RTP_ASF_DEPAY_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstadapter.h>
+
+#include <gst/rtp/gstrtpbasedepayload.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_RTP_ASF_DEPAY \
+  (gst_rtp_asf_depay_get_type())
+#define GST_RTP_ASF_DEPAY(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTP_ASF_DEPAY,GstRtpAsfDepay))
+#define GST_RTP_ASF_DEPAY_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTP_ASF_DEPAY,GstRtpAsfDepayClass))
+#define GST_IS_RTP_ASF_DEPAY(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_ASF_DEPAY))
+#define GST_IS_RTP_ASF_DEPAY_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_ASF_DEPAY))
+
+typedef struct _GstRtpAsfDepay      GstRtpAsfDepay;
+typedef struct _GstRtpAsfDepayClass GstRtpAsfDepayClass;
+
+struct _GstRtpAsfDepay
+{
+  GstRTPBaseDepayload depayload;
+
+  guint packet_size;
+
+  GstAdapter *adapter;
+  gboolean    discont;
+};
+
+struct _GstRtpAsfDepayClass
+{
+  GstRTPBaseDepayloadClass depayload_class;
+};
+
+GType    gst_rtp_asf_depay_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_RTP_ASF_DEPAY_H__ */
diff --git a/subprojects/gst-plugins-ugly/gst/asfdemux/gstrtspwms.c b/subprojects/gst-plugins-ugly/gst/asfdemux/gstrtspwms.c
new file mode 100644 (file)
index 0000000..ff58e1b
--- /dev/null
@@ -0,0 +1,240 @@
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.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.
+ */
+/* Element-Checklist-Version: 5 */
+
+/**
+ * SECTION:element-rtspwms
+ * @title: rtspwms
+ *
+ * A WMS RTSP extension
+ */
+
+#include <string.h>
+
+#include <gst/rtsp/gstrtspextension.h>
+
+#include "gstasfelements.h"
+#include "gstrtspwms.h"
+
+GST_DEBUG_CATEGORY_STATIC (rtspwms_debug);
+#define GST_CAT_DEFAULT (rtspwms_debug)
+
+#define SERVER_PREFIX "WMServer/"
+#define HEADER_PREFIX "data:application/vnd.ms.wms-hdr.asfv1;base64,"
+#define EXTENSION_CMD "application/x-wms-extension-cmd"
+
+static GstRTSPResult
+gst_rtsp_wms_before_send (GstRTSPExtension * ext, GstRTSPMessage * request)
+{
+  GstRTSPWMS *ctx = (GstRTSPWMS *) ext;
+
+  GST_DEBUG_OBJECT (ext, "before send");
+
+  switch (request->type_data.request.method) {
+    case GST_RTSP_OPTIONS:
+    {
+      /* activate ourselves with the first request */
+      ctx->active = TRUE;
+      break;
+    }
+    default:
+      break;
+  }
+  return GST_RTSP_OK;
+}
+
+static GstRTSPResult
+gst_rtsp_wms_after_send (GstRTSPExtension * ext, GstRTSPMessage * req,
+    GstRTSPMessage * resp)
+{
+  GstRTSPWMS *ctx = (GstRTSPWMS *) ext;
+
+  GST_DEBUG_OBJECT (ext, "after send");
+
+  switch (req->type_data.request.method) {
+    case GST_RTSP_OPTIONS:
+    {
+      gchar *server = NULL;
+
+      gst_rtsp_message_get_header (resp, GST_RTSP_HDR_SERVER, &server, 0);
+      if (server && g_str_has_prefix (server, SERVER_PREFIX))
+        ctx->active = TRUE;
+      else
+        ctx->active = FALSE;
+      break;
+    }
+    default:
+      break;
+  }
+  return GST_RTSP_OK;
+}
+
+
+static GstRTSPResult
+gst_rtsp_wms_parse_sdp (GstRTSPExtension * ext, GstSDPMessage * sdp,
+    GstStructure * props)
+{
+  const gchar *config, *maxps;
+  gint i;
+  GstRTSPWMS *ctx = (GstRTSPWMS *) ext;
+
+  if (!ctx->active)
+    return GST_RTSP_OK;
+
+  for (i = 0; (config = gst_sdp_message_get_attribute_val_n (sdp, "pgmpu", i));
+      i++) {
+    if (g_str_has_prefix (config, HEADER_PREFIX)) {
+      config += strlen (HEADER_PREFIX);
+      gst_structure_set (props, "config", G_TYPE_STRING, config, NULL);
+      break;
+    }
+  }
+  if (config == NULL)
+    goto no_config;
+
+  gst_structure_set (props, "config", G_TYPE_STRING, config, NULL);
+
+  maxps = gst_sdp_message_get_attribute_val (sdp, "maxps");
+  if (maxps)
+    gst_structure_set (props, "maxps", G_TYPE_STRING, maxps, NULL);
+
+  gst_structure_set (props, "encoding-name", G_TYPE_STRING, "X-ASF-PF", NULL);
+  gst_structure_set (props, "media", G_TYPE_STRING, "application", NULL);
+
+  return GST_RTSP_OK;
+
+  /* ERRORS */
+no_config:
+  {
+    GST_DEBUG_OBJECT (ctx, "Could not find config SDP field, deactivating.");
+    ctx->active = FALSE;
+    return GST_RTSP_OK;
+  }
+}
+
+static gboolean
+gst_rtsp_wms_configure_stream (GstRTSPExtension * ext, GstCaps * caps)
+{
+  GstRTSPWMS *ctx;
+  GstStructure *s;
+  const gchar *encoding;
+
+  ctx = (GstRTSPWMS *) ext;
+  s = gst_caps_get_structure (caps, 0);
+  encoding = gst_structure_get_string (s, "encoding-name");
+
+  if (!encoding)
+    return TRUE;
+
+  GST_DEBUG_OBJECT (ctx, "%" GST_PTR_FORMAT " encoding-name: %s", caps,
+      encoding);
+
+  /* rtx streams do not need to be configured */
+  if (!strcmp (encoding, "X-WMS-RTX"))
+    return FALSE;
+
+  return TRUE;
+}
+
+static GstRTSPResult
+gst_rtsp_wms_receive_request (GstRTSPExtension * ext, GstRTSPMessage * request)
+{
+  GstRTSPWMS *ctx;
+  GstRTSPResult res = GST_RTSP_ENOTIMPL;
+  GstRTSPMessage response = { 0 };
+
+  ctx = (GstRTSPWMS *) ext;
+
+  GST_DEBUG_OBJECT (ext, "before send");
+
+  switch (request->type_data.request.method) {
+    case GST_RTSP_SET_PARAMETER:
+    {
+      gchar *content_type = NULL;
+
+      gst_rtsp_message_get_header (request, GST_RTSP_HDR_CONTENT_TYPE,
+          &content_type, 0);
+
+      if (content_type && !g_ascii_strcasecmp (content_type, EXTENSION_CMD)) {
+        /* parse the command */
+
+        /* default implementation, send OK */
+        res = gst_rtsp_message_init_response (&response, GST_RTSP_STS_OK, "OK",
+            request);
+        if (res < 0)
+          goto send_error;
+
+        GST_DEBUG_OBJECT (ctx, "replying with OK");
+
+        /* send reply */
+        if ((res = gst_rtsp_extension_send (ext, request, &response)) < 0)
+          goto send_error;
+
+        res = GST_RTSP_EEOF;
+      }
+      break;
+    }
+    default:
+      break;
+  }
+  return res;
+
+send_error:
+  {
+    return res;
+  }
+}
+
+static void gst_rtsp_wms_extension_init (gpointer g_iface, gpointer iface_data);
+
+G_DEFINE_TYPE_WITH_CODE (GstRTSPWMS, gst_rtsp_wms, GST_TYPE_ELEMENT,
+    G_IMPLEMENT_INTERFACE (GST_TYPE_RTSP_EXTENSION,
+        gst_rtsp_wms_extension_init));
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (rtspwms, "rtspwms", GST_RANK_SECONDARY,
+    GST_TYPE_RTSP_WMS, asf_element_init (plugin));
+
+static void
+gst_rtsp_wms_class_init (GstRTSPWMSClass * g_class)
+{
+  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+
+  GST_DEBUG_CATEGORY_INIT (rtspwms_debug, "rtspwms", 0, "WMS RTSP extension");
+
+  gst_element_class_set_static_metadata (element_class, "WMS RTSP Extension",
+      "Network/Extension/Protocol",
+      "Extends RTSP so that it can handle WMS setup",
+      "Wim Taymans <wim.taymans@gmail.com>");
+}
+
+static void
+gst_rtsp_wms_init (GstRTSPWMS * rtspwms)
+{
+}
+
+static void
+gst_rtsp_wms_extension_init (gpointer g_iface, gpointer iface_data)
+{
+  GstRTSPExtensionInterface *iface = (GstRTSPExtensionInterface *) g_iface;
+
+  iface->parse_sdp = gst_rtsp_wms_parse_sdp;
+  iface->before_send = gst_rtsp_wms_before_send;
+  iface->after_send = gst_rtsp_wms_after_send;
+  iface->configure_stream = gst_rtsp_wms_configure_stream;
+  iface->receive_request = gst_rtsp_wms_receive_request;
+}
diff --git a/subprojects/gst-plugins-ugly/gst/asfdemux/gstrtspwms.h b/subprojects/gst-plugins-ugly/gst/asfdemux/gstrtspwms.h
new file mode 100644 (file)
index 0000000..feb8c43
--- /dev/null
@@ -0,0 +1,50 @@
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.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_RTSP_WMS_H__
+#define __GST_RTSP_WMS_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_RTSP_WMS              (gst_rtsp_wms_get_type())
+#define GST_IS_RTSP_WMS(obj)           (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTSP_WMS))
+#define GST_IS_RTSP_WMS_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTSP_WMS))
+#define GST_RTSP_WMS(obj)              (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTSP_WMS, GstRTSPWMS))
+#define GST_RTSP_WMS_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTSP_WMS, GstRTSPWMSClass))
+
+typedef struct _GstRTSPWMS GstRTSPWMS;
+typedef struct _GstRTSPWMSClass GstRTSPWMSClass;
+
+struct _GstRTSPWMS {
+  GstElement  element;
+
+  gboolean active;
+};
+
+struct _GstRTSPWMSClass {
+  GstElementClass parent_class;
+};
+
+GType gst_rtsp_wms_get_type(void);
+
+G_END_DECLS
+
+#endif /* __GST_RTSP_WMS_H__ */
diff --git a/subprojects/gst-plugins-ugly/gst/asfdemux/meson.build b/subprojects/gst-plugins-ugly/gst/asfdemux/meson.build
new file mode 100644 (file)
index 0000000..a86188b
--- /dev/null
@@ -0,0 +1,22 @@
+asf_sources = [
+  'gstasfdemux.c',
+  'gstasf.c',
+  'gstasfelement.c',
+  'asfheaders.c',
+  'asfpacket.c',
+  'gstrtpasfdepay.c',
+  'gstrtspwms.c',
+]
+
+gstasf = library('gstasf',
+  asf_sources,
+  c_args : ugly_args,
+  include_directories : [configinc, libsinc],
+  dependencies : [gstbase_dep, gstrtp_dep, gstvideo_dep,
+                  gstaudio_dep, gsttag_dep, gstriff_dep,
+                  gstrtsp_dep, gstsdp_dep],
+  install : true,
+  install_dir : plugins_install_dir,
+)
+pkgconfig.generate(gstasf, install_dir : plugins_pkgconfig_install_dir)
+plugins += [gstasf]
diff --git a/subprojects/gst-plugins-ugly/gst/dvdlpcmdec/gstdvdlpcmdec.c b/subprojects/gst-plugins-ugly/gst/dvdlpcmdec/gstdvdlpcmdec.c
new file mode 100644 (file)
index 0000000..9a32d48
--- /dev/null
@@ -0,0 +1,1018 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2005> Jan Schmidt <jan@noraisin.net>
+ *
+ * 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.
+ */
+/* Element-Checklist-Version: TODO */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <stdlib.h>
+#include <string.h>
+
+#include "gstdvdlpcmdec.h"
+#include <gst/audio/audio.h>
+
+GST_DEBUG_CATEGORY_STATIC (dvdlpcm_debug);
+#define GST_CAT_DEFAULT dvdlpcm_debug
+
+static GstStaticPadTemplate gst_dvdlpcmdec_sink_template =
+    GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-private1-lpcm; "
+        "audio/x-private2-lpcm; "
+        "audio/x-private-ts-lpcm; "
+        "audio/x-lpcm, "
+        "width = (int) { 16, 20, 24 }, "
+        "rate = (int) { 32000, 44100, 48000, 96000 }, "
+        "channels = (int) [ 1, 8 ], "
+        "dynamic_range = (int) [ 0, 255 ], "
+        "emphasis = (boolean) { TRUE, FALSE }, "
+        "mute = (boolean) { TRUE, FALSE } ")
+    );
+
+static GstStaticPadTemplate gst_dvdlpcmdec_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-raw, "
+        "format = (string) { S16BE, S24BE }, "
+        "layout = (string) interleaved, "
+        "rate = (int) { 32000, 44100, 48000, 96000 }, "
+        "channels = (int) [ 1, 8 ]")
+    );
+
+#define gst_dvdlpcmdec_parent_class parent_class
+G_DEFINE_TYPE (GstDvdLpcmDec, gst_dvdlpcmdec, GST_TYPE_AUDIO_DECODER);
+GST_ELEMENT_REGISTER_DEFINE (dvdlpcmdec, "dvdlpcmdec", GST_RANK_PRIMARY,
+    GST_TYPE_DVDLPCMDEC);
+
+static gboolean gst_dvdlpcmdec_set_format (GstAudioDecoder * bdec,
+    GstCaps * caps);
+static GstFlowReturn gst_dvdlpcmdec_parse (GstAudioDecoder * bdec,
+    GstAdapter * adapter, gint * offset, gint * len);
+static GstFlowReturn gst_dvdlpcmdec_handle_frame (GstAudioDecoder * bdec,
+    GstBuffer * buffer);
+static GstFlowReturn gst_dvdlpcmdec_chain (GstPad * pad, GstObject * parent,
+    GstBuffer * buffer);
+
+
+static void
+gst_dvdlpcmdec_class_init (GstDvdLpcmDecClass * klass)
+{
+  GstElementClass *element_class;
+  GstAudioDecoderClass *gstbase_class;
+
+  element_class = (GstElementClass *) klass;
+  gstbase_class = (GstAudioDecoderClass *) klass;
+
+  gstbase_class->set_format = GST_DEBUG_FUNCPTR (gst_dvdlpcmdec_set_format);
+  gstbase_class->parse = GST_DEBUG_FUNCPTR (gst_dvdlpcmdec_parse);
+  gstbase_class->handle_frame = GST_DEBUG_FUNCPTR (gst_dvdlpcmdec_handle_frame);
+
+  gst_element_class_add_static_pad_template (element_class,
+      &gst_dvdlpcmdec_sink_template);
+  gst_element_class_add_static_pad_template (element_class,
+      &gst_dvdlpcmdec_src_template);
+  gst_element_class_set_static_metadata (element_class,
+      "DVD LPCM Audio decoder", "Codec/Decoder/Audio",
+      "Decode DVD LPCM frames into standard PCM audio",
+      "Jan Schmidt <jan@noraisin.net>, Michael Smith <msmith@fluendo.com>");
+
+  GST_DEBUG_CATEGORY_INIT (dvdlpcm_debug, "dvdlpcmdec", 0, "DVD LPCM Decoder");
+}
+
+static void
+gst_dvdlpcm_reset (GstDvdLpcmDec * dvdlpcmdec)
+{
+  gst_audio_info_init (&dvdlpcmdec->info);
+  dvdlpcmdec->dynamic_range = 0;
+  dvdlpcmdec->emphasis = FALSE;
+  dvdlpcmdec->mute = FALSE;
+
+  dvdlpcmdec->header = 0;
+
+  dvdlpcmdec->mode = GST_LPCM_UNKNOWN;
+}
+
+static void
+gst_dvdlpcmdec_init (GstDvdLpcmDec * dvdlpcmdec)
+{
+  gst_dvdlpcm_reset (dvdlpcmdec);
+
+  gst_audio_decoder_set_use_default_pad_acceptcaps (GST_AUDIO_DECODER_CAST
+      (dvdlpcmdec), TRUE);
+  GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_DECODER_SINK_PAD (dvdlpcmdec));
+
+  /* retrieve and intercept base class chain.
+   * Quite HACKish, but that's dvd specs/caps for you,
+   * since one buffer needs to be split into 2 frames */
+  dvdlpcmdec->base_chain =
+      GST_PAD_CHAINFUNC (GST_AUDIO_DECODER_SINK_PAD (dvdlpcmdec));
+  gst_pad_set_chain_function (GST_AUDIO_DECODER_SINK_PAD (dvdlpcmdec),
+      GST_DEBUG_FUNCPTR (gst_dvdlpcmdec_chain));
+}
+
+static const GstAudioChannelPosition channel_positions[][8] = {
+  {GST_AUDIO_CHANNEL_POSITION_MONO},
+  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT},
+  {GST_AUDIO_CHANNEL_POSITION_INVALID},
+  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT},
+  {GST_AUDIO_CHANNEL_POSITION_INVALID},
+  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+        GST_AUDIO_CHANNEL_POSITION_LFE1, GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT},
+  {GST_AUDIO_CHANNEL_POSITION_INVALID},
+  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+        GST_AUDIO_CHANNEL_POSITION_LFE1, GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT},
+  {GST_AUDIO_CHANNEL_POSITION_INVALID}
+};
+
+static const GstAudioChannelPosition bluray_channel_positions[][8] = {
+  /* invalid */
+  {GST_AUDIO_CHANNEL_POSITION_INVALID},
+  /* mono */
+  {GST_AUDIO_CHANNEL_POSITION_MONO},
+  /* invalid */
+  {GST_AUDIO_CHANNEL_POSITION_INVALID},
+  /* stereo */
+  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT},
+  /* surround */
+  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+      GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER},
+  /* 2.1 */
+  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+      GST_AUDIO_CHANNEL_POSITION_REAR_CENTER},
+  /* 4.0 */
+  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+      GST_AUDIO_CHANNEL_POSITION_REAR_CENTER},
+  /* 2.2 */
+  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT},
+  /* 5.0 */
+  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+        GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT},
+  /* 5.1 */
+  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+        GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
+      GST_AUDIO_CHANNEL_POSITION_LFE1},
+  /* 7.0 */
+  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+        GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+      GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT},
+  /* 7.1 */
+  {GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
+        GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
+      GST_AUDIO_CHANNEL_POSITION_LFE1},
+  /* invalid */
+  {GST_AUDIO_CHANNEL_POSITION_INVALID},
+  /* invalid */
+  {GST_AUDIO_CHANNEL_POSITION_INVALID},
+  /* invalid */
+  {GST_AUDIO_CHANNEL_POSITION_INVALID},
+  /* invalid */
+  {GST_AUDIO_CHANNEL_POSITION_INVALID}
+};
+
+static void
+gst_dvdlpcmdec_send_tags (GstDvdLpcmDec * dvdlpcmdec)
+{
+  GstTagList *taglist;
+  guint bitrate;
+  gint bpf, rate;
+
+  bpf = GST_AUDIO_INFO_BPF (&dvdlpcmdec->info);
+  rate = GST_AUDIO_INFO_RATE (&dvdlpcmdec->info);
+
+  bitrate = bpf * 8 * rate;
+
+  taglist = gst_tag_list_new (GST_TAG_AUDIO_CODEC, "LPCM Audio",
+      GST_TAG_BITRATE, bitrate, NULL);
+
+  gst_audio_decoder_merge_tags (GST_AUDIO_DECODER (dvdlpcmdec), taglist,
+      GST_TAG_MERGE_REPLACE);
+  gst_tag_list_unref (taglist);
+}
+
+static gboolean
+gst_dvdlpcmdec_set_output_format (GstDvdLpcmDec * dvdlpcmdec)
+{
+  gboolean res = TRUE;
+
+  res = gst_audio_decoder_set_output_format (GST_AUDIO_DECODER (dvdlpcmdec),
+      &dvdlpcmdec->info);
+  if (res) {
+    GST_DEBUG_OBJECT (dvdlpcmdec, "Successfully set output format");
+
+    gst_dvdlpcmdec_send_tags (dvdlpcmdec);
+  } else {
+    GST_DEBUG_OBJECT (dvdlpcmdec, "Failed to set output format");
+  }
+
+  return res;
+}
+
+static void
+gst_dvdlpcmdec_update_audio_formats (GstDvdLpcmDec * dec, gint channels,
+    gint rate, GstAudioFormat format, guint8 channel_indicator,
+    const GstAudioChannelPosition positions[][8])
+{
+  GST_DEBUG_OBJECT (dec, "got channels = %d, rate = %d, format = %d", channels,
+      rate, format);
+
+  /* Reorder the channel positions and set the default into for the audio */
+  if (channels < 9
+      && positions[channel_indicator][0] !=
+      GST_AUDIO_CHANNEL_POSITION_INVALID) {
+    const GstAudioChannelPosition *position;
+    GstAudioChannelPosition sorted_position[8];
+    guint c;
+
+    position = positions[channel_indicator];
+    for (c = 0; c < channels; ++c)
+      sorted_position[c] = position[c];
+    gst_audio_channel_positions_to_valid_order (sorted_position, channels);
+    gst_audio_info_set_format (&dec->info, format, rate, channels,
+        sorted_position);
+    if (memcmp (position, sorted_position,
+            channels * sizeof (position[0])) != 0)
+      dec->lpcm_layout = position;
+    else
+      dec->lpcm_layout = NULL;
+  } else {
+    gst_audio_info_set_format (&dec->info, format, rate, channels, NULL);
+  }
+}
+
+static gboolean
+gst_dvdlpcmdec_set_format (GstAudioDecoder * bdec, GstCaps * caps)
+{
+  GstDvdLpcmDec *dvdlpcmdec = GST_DVDLPCMDEC (bdec);
+  GstStructure *structure;
+  gboolean res = TRUE;
+  GstAudioFormat format;
+  gint rate, channels, width;
+
+  gst_dvdlpcm_reset (dvdlpcmdec);
+
+  structure = gst_caps_get_structure (caps, 0);
+
+  /* If we have the DVD structured LPCM (including header) then we wait
+   * for incoming data before creating the output pad caps */
+  if (gst_structure_has_name (structure, "audio/x-private1-lpcm")) {
+    dvdlpcmdec->mode = GST_LPCM_DVD;
+    goto done;
+  }
+  if (gst_structure_has_name (structure, "audio/x-private2-lpcm")) {
+    dvdlpcmdec->mode = GST_LPCM_1394;
+    goto done;
+  }
+  if (gst_structure_has_name (structure, "audio/x-private-ts-lpcm")) {
+    dvdlpcmdec->mode = GST_LPCM_BLURAY;
+    goto done;
+  }
+
+  dvdlpcmdec->mode = GST_LPCM_RAW;
+
+  res &= gst_structure_get_int (structure, "rate", &rate);
+  res &= gst_structure_get_int (structure, "channels", &channels);
+  res &= gst_structure_get_int (structure, "width", &width);
+  res &= gst_structure_get_int (structure, "dynamic_range",
+      &dvdlpcmdec->dynamic_range);
+  res &= gst_structure_get_boolean (structure, "emphasis",
+      &dvdlpcmdec->emphasis);
+  res &= gst_structure_get_boolean (structure, "mute", &dvdlpcmdec->mute);
+
+  if (!res)
+    goto caps_parse_error;
+
+  switch (width) {
+    case 24:
+    case 20:
+      format = GST_AUDIO_FORMAT_S24BE;
+      break;
+    case 16:
+      format = GST_AUDIO_FORMAT_S16BE;
+      break;
+    default:
+      format = GST_AUDIO_FORMAT_UNKNOWN;
+      break;
+  }
+
+  gst_dvdlpcmdec_update_audio_formats (dvdlpcmdec, channels, rate, format,
+      channels - 1, channel_positions);
+
+  dvdlpcmdec->width = width;
+
+  res = gst_dvdlpcmdec_set_output_format (dvdlpcmdec);
+
+done:
+  return res;
+
+  /* ERRORS */
+caps_parse_error:
+  {
+    GST_DEBUG_OBJECT (dvdlpcmdec, "Couldn't get parameters; missing caps?");
+    return FALSE;
+  }
+}
+
+static void
+parse_header (GstDvdLpcmDec * dec, guint32 header)
+{
+  GstAudioFormat format;
+  gint rate, channels, width;
+
+  /* We don't actually use 'dynamic range', 'mute', or 'emphasis' currently,
+   * but parse them out */
+  dec->dynamic_range = header & 0xff;
+
+  dec->mute = (header & 0x400000) != 0;
+  dec->emphasis = (header & 0x800000) != 0;
+
+  /* These two bits tell us the bit depth */
+  switch (header & 0xC000) {
+    case 0x8000:
+      /* 24 bits in 3 bytes */
+      format = GST_AUDIO_FORMAT_S24BE;
+      width = 24;
+      break;
+    case 0x4000:
+      /* 20 bits in 3 bytes */
+      format = GST_AUDIO_FORMAT_S24BE;
+      width = 20;
+      break;
+    default:
+      format = GST_AUDIO_FORMAT_S16BE;
+      width = 16;
+      break;
+  }
+
+  dec->width = width;
+
+  /* Only four sample rates supported */
+  switch (header & 0x3000) {
+    case 0x0000:
+      rate = 48000;
+      break;
+    case 0x1000:
+      rate = 96000;
+      break;
+    case 0x2000:
+      rate = 44100;
+      break;
+    case 0x3000:
+      rate = 32000;
+      break;
+    default:
+      rate = 0;
+      break;
+  }
+
+  /* And, of course, the number of channels (up to 8) */
+  channels = ((header >> 8) & 0x7) + 1;
+
+  gst_dvdlpcmdec_update_audio_formats (dec, channels, rate, format,
+      channels - 1, channel_positions);
+}
+
+static GstFlowReturn
+gst_dvdlpcmdec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+{
+  GstDvdLpcmDec *dvdlpcmdec = GST_DVDLPCMDEC (parent);
+  guint8 data[2];
+  gsize size;
+  guint first_access;
+  GstBuffer *subbuf;
+  GstFlowReturn ret = GST_FLOW_OK;
+  gint off, len;
+
+  if (dvdlpcmdec->mode != GST_LPCM_DVD)
+    return dvdlpcmdec->base_chain (pad, parent, buf);
+
+  size = gst_buffer_get_size (buf);
+  if (size < 5)
+    goto too_small;
+
+  gst_buffer_extract (buf, 0, data, 2);
+  first_access = (data[0] << 8) | data[1];
+  if (first_access > size)
+    goto invalid_data;
+
+  /* After first_access, we have an additional 3 bytes of header data; this
+   * is included within the value of first_access.
+   * So a first_access value of between 1 and 3 is just broken, we treat that
+   * the same as zero. first_access == 4 means we only need to create a single
+   * sub-buffer, greater than that we need to create two. */
+
+  /* skip access unit bytes */
+  off = 2;
+
+  if (first_access > 4) {
+    /* length of first buffer */
+    len = first_access - 1;
+
+    GST_LOG_OBJECT (dvdlpcmdec, "Creating first sub-buffer off %d, len %d",
+        off, len);
+
+    /* see if we need a subbuffer without timestamp */
+    if (off + len > size)
+      goto bad_first_access;
+
+    subbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, off, len);
+    GST_BUFFER_TIMESTAMP (subbuf) = GST_CLOCK_TIME_NONE;
+    ret = dvdlpcmdec->base_chain (pad, parent, subbuf);
+    if (ret != GST_FLOW_OK)
+      goto done;
+
+    /* then the buffer with new timestamp */
+    off += len;
+    len = size - off;
+
+    GST_LOG_OBJECT (dvdlpcmdec, "Creating next sub-buffer off %d, len %d", off,
+        len);
+
+    if (len > 0) {
+      GstMemory *header, *tmp;
+      subbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, off, len);
+      tmp = gst_buffer_peek_memory (buf, 0);
+      header = gst_memory_copy (tmp, 2, 3);
+      gst_buffer_prepend_memory (subbuf, header);
+      GST_BUFFER_TIMESTAMP (subbuf) = GST_BUFFER_TIMESTAMP (buf);
+
+      ret = dvdlpcmdec->base_chain (pad, parent, subbuf);
+    }
+  } else {
+    GST_LOG_OBJECT (dvdlpcmdec,
+        "Creating single sub-buffer off %d, len %" G_GSIZE_FORMAT, off,
+        size - off);
+    subbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, off, size - off);
+    GST_BUFFER_TIMESTAMP (subbuf) = GST_BUFFER_TIMESTAMP (buf);
+    ret = dvdlpcmdec->base_chain (pad, parent, subbuf);
+  }
+
+done:
+  gst_buffer_unref (buf);
+
+  return ret;
+
+  /* ERRORS */
+too_small:
+  {
+    /* Buffer is too small */
+    GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
+        ("Invalid data found parsing LPCM packet"),
+        ("LPCM packet was too small. Dropping"));
+    ret = GST_FLOW_OK;
+    goto done;
+  }
+invalid_data:
+  {
+    GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
+        ("Invalid data found parsing LPCM packet"),
+        ("LPCM packet contained invalid first access. Dropping"));
+    ret = GST_FLOW_OK;
+    goto done;
+  }
+bad_first_access:
+  {
+    GST_WARNING_OBJECT (pad, "Bad first_access parameter in buffer");
+    GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, DECODE,
+        (NULL),
+        ("first_access parameter out of range: bad buffer from demuxer"));
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+}
+
+static GstFlowReturn
+gst_dvdlpcmdec_parse_dvd (GstDvdLpcmDec * dvdlpcmdec, GstAdapter * adapter,
+    gint * offset, gint * len)
+{
+  guint32 header;
+  const guint8 *data;
+
+  data = (const guint8 *) gst_adapter_map (adapter, 3);
+  if (!data)
+    goto too_small;
+
+  /* Don't keep the 'frame number' low 5 bits of the first byte */
+  header = ((data[0] & 0xC0) << 16) | (data[1] << 8) | data[2];
+
+  gst_adapter_unmap (adapter);
+
+  /* see if we have a new header */
+  if (header != dvdlpcmdec->header) {
+    parse_header (dvdlpcmdec, header);
+
+    if (!gst_dvdlpcmdec_set_output_format (dvdlpcmdec))
+      goto negotiation_failed;
+
+    dvdlpcmdec->header = header;
+  }
+
+  *offset = 3;
+  *len = gst_adapter_available (adapter) - 3;
+
+  return GST_FLOW_OK;
+
+  /* ERRORS */
+too_small:
+  {
+    /* Buffer is too small */
+    GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
+        ("Invalid data found parsing LPCM packet"),
+        ("LPCM packet was too small. Dropping"));
+    *offset = gst_adapter_available (adapter);
+    return GST_FLOW_EOS;
+  }
+negotiation_failed:
+  {
+    GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, FORMAT, (NULL),
+        ("Failed to configure output format"));
+    return GST_FLOW_NOT_NEGOTIATED;
+  }
+}
+
+static GstFlowReturn
+gst_dvdlpcmdec_parse_bluray (GstDvdLpcmDec * dvdlpcmdec, GstAdapter * adapter,
+    gint * offset, gint * len)
+{
+  guint32 header;
+  const guint8 *data;
+  guint8 channel_indicator;
+
+  data = (const guint8 *) gst_adapter_map (adapter, 4);
+  if (!data)
+    goto too_small;
+
+  header = GST_READ_UINT32_BE (data);
+
+  gst_adapter_unmap (adapter);
+
+  /* see if we have a new header */
+  if (header != dvdlpcmdec->header) {
+    GstAudioFormat format;
+    gint rate, channels;
+
+    switch ((header >> 6) & 0x3) {
+      case 0x1:
+        format = GST_AUDIO_FORMAT_S16BE;
+        dvdlpcmdec->width = 16;
+        break;
+      case 0x2:
+        format = GST_AUDIO_FORMAT_S24BE;
+        dvdlpcmdec->width = 20;
+        break;
+      case 0x3:
+        format = GST_AUDIO_FORMAT_S24BE;
+        dvdlpcmdec->width = 24;
+        break;
+      default:
+        format = GST_AUDIO_FORMAT_UNKNOWN;
+        dvdlpcmdec->width = 0;
+        GST_WARNING ("Invalid sample depth!");
+        break;
+    }
+
+    switch ((header >> 8) & 0xf) {
+      case 0x1:
+        rate = 48000;
+        break;
+      case 0x4:
+        rate = 96000;
+        break;
+      case 0x5:
+        rate = 192000;
+        break;
+      default:
+        rate = 0;
+        GST_WARNING ("Invalid audio sampling frequency!");
+        break;
+    }
+    channel_indicator = (header >> 12) & 0xf;
+    switch (channel_indicator) {
+      case 0x1:
+        channels = 1;
+        break;
+      case 0x3:
+        channels = 2;
+        break;
+      case 0x4:
+      case 0x5:
+        channels = 3;
+        break;
+      case 0x6:
+      case 0x7:
+        channels = 4;
+        break;
+      case 0x8:
+        channels = 5;
+        break;
+      case 0x9:
+        channels = 6;
+        break;
+      case 0xa:
+        channels = 7;
+        break;
+      case 0xb:
+        channels = 8;
+        break;
+      default:
+        channels = 0;
+        GST_WARNING ("Invalid number of audio channels!");
+        goto negotiation_failed;
+    }
+    GST_DEBUG_OBJECT (dvdlpcmdec, "got channels %d rate %d format %s",
+        channels, rate, gst_audio_format_to_string (format));
+
+    gst_dvdlpcmdec_update_audio_formats (dvdlpcmdec, channels, rate, format,
+        channel_indicator, bluray_channel_positions);
+
+    if (!gst_dvdlpcmdec_set_output_format (dvdlpcmdec))
+      goto negotiation_failed;
+
+    dvdlpcmdec->header = header;
+  }
+
+  *offset = 4;
+  *len = gst_adapter_available (adapter) - 4;
+
+  return GST_FLOW_OK;
+
+  /* ERRORS */
+too_small:
+  {
+    /* Buffer is too small */
+    GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
+        ("Invalid data found parsing LPCM packet"),
+        ("LPCM packet was too small. Dropping"));
+    *offset = gst_adapter_available (adapter);
+    return GST_FLOW_EOS;
+  }
+negotiation_failed:
+  {
+    GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, FORMAT, (NULL),
+        ("Failed to configure output format"));
+    return GST_FLOW_NOT_NEGOTIATED;
+  }
+
+}
+
+static GstFlowReturn
+gst_dvdlpcmdec_parse_1394 (GstDvdLpcmDec * dvdlpcmdec, GstAdapter * adapter,
+    gint * offset, gint * len)
+{
+  guint32 header;
+  const guint8 *data;
+
+  data = (const guint8 *) gst_adapter_map (adapter, 4);
+  if (!data)
+    goto too_small;
+
+  header = GST_READ_UINT32_BE (data);
+
+  gst_adapter_unmap (adapter);
+
+  /* see if we have a new header */
+  if (header != dvdlpcmdec->header) {
+    GstAudioFormat format;
+    gint rate, channels;
+
+    if (header >> 24 != 0xa0)
+      goto invalid_data;
+
+    switch ((header >> 6) & 0x3) {
+      case 0x0:
+        format = GST_AUDIO_FORMAT_S16BE;
+        dvdlpcmdec->width = 16;
+        break;
+      default:
+        format = GST_AUDIO_FORMAT_UNKNOWN;
+        dvdlpcmdec->width = 0;
+        GST_WARNING ("Invalid quantization word length!");
+        break;
+    }
+
+    switch ((header >> 3) & 0x7) {
+      case 0x1:
+        rate = 44100;
+        break;
+      case 0x2:
+        rate = 48000;
+        break;
+      default:
+        rate = 0;
+        GST_WARNING ("Invalid audio sampling frequency!");
+        break;
+    }
+    switch (header & 0x7) {
+      case 0x0:                /* 2 channels dual-mono */
+      case 0x1:                /* 2 channels stereo */
+        channels = 2;
+        break;
+      default:
+        channels = 0;
+        GST_WARNING ("Invalid number of audio channels!");
+        goto negotiation_failed;
+    }
+
+    gst_dvdlpcmdec_update_audio_formats (dvdlpcmdec, channels, rate, format,
+        channels - 1, channel_positions);
+
+    if (!gst_dvdlpcmdec_set_output_format (dvdlpcmdec))
+      goto negotiation_failed;
+
+    dvdlpcmdec->header = header;
+  }
+
+  *offset = 4;
+  *len = gst_adapter_available (adapter) - 4;
+
+  return GST_FLOW_OK;
+
+  /* ERRORS */
+too_small:
+  {
+    /* Buffer is too small */
+    GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
+        ("Invalid data found parsing LPCM packet"),
+        ("LPCM packet was too small. Dropping"));
+    *offset = gst_adapter_available (adapter);
+    return GST_FLOW_EOS;
+  }
+invalid_data:
+  {
+    GST_ELEMENT_WARNING (dvdlpcmdec, STREAM, DECODE,
+        ("Invalid data found parsing LPCM packet"),
+        ("LPCM packet contains invalid sub_stream_id."));
+    return GST_FLOW_ERROR;
+  }
+negotiation_failed:
+  {
+    GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, FORMAT, (NULL),
+        ("Failed to configure output format"));
+    return GST_FLOW_NOT_NEGOTIATED;
+  }
+}
+
+static GstFlowReturn
+gst_dvdlpcmdec_parse (GstAudioDecoder * bdec, GstAdapter * adapter,
+    gint * offset, gint * len)
+{
+  GstDvdLpcmDec *dvdlpcmdec = GST_DVDLPCMDEC (bdec);
+
+  switch (dvdlpcmdec->mode) {
+    case GST_LPCM_UNKNOWN:
+      return GST_FLOW_NOT_NEGOTIATED;
+
+    case GST_LPCM_RAW:
+      *offset = 0;
+      *len = gst_adapter_available (adapter);
+      return GST_FLOW_OK;
+
+    case GST_LPCM_DVD:
+      return gst_dvdlpcmdec_parse_dvd (dvdlpcmdec, adapter, offset, len);
+
+    case GST_LPCM_1394:
+      return gst_dvdlpcmdec_parse_1394 (dvdlpcmdec, adapter, offset, len);
+
+    case GST_LPCM_BLURAY:
+      return gst_dvdlpcmdec_parse_bluray (dvdlpcmdec, adapter, offset, len);
+  }
+  return GST_FLOW_ERROR;
+}
+
+static GstFlowReturn
+gst_dvdlpcmdec_handle_frame (GstAudioDecoder * bdec, GstBuffer * buf)
+{
+  GstDvdLpcmDec *dvdlpcmdec = GST_DVDLPCMDEC (bdec);
+  gsize size;
+  GstFlowReturn ret;
+  guint samples = 0;
+  gint rate, channels;
+
+  /* no fancy draining */
+  if (G_UNLIKELY (!buf))
+    return GST_FLOW_OK;
+
+  size = gst_buffer_get_size (buf);
+
+  GST_LOG_OBJECT (dvdlpcmdec,
+      "got buffer %p of size %" G_GSIZE_FORMAT " with ts %" GST_TIME_FORMAT,
+      buf, size, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
+
+  rate = GST_AUDIO_INFO_RATE (&dvdlpcmdec->info);
+  channels = GST_AUDIO_INFO_CHANNELS (&dvdlpcmdec->info);
+
+  if (rate == 0)
+    goto not_negotiated;
+
+  /* We don't currently do anything at all regarding emphasis, mute or
+   * dynamic_range - I'm not sure what they're for */
+  switch (dvdlpcmdec->width) {
+    case 16:
+    {
+      /* We can just pass 16-bits straight through intact, once we set
+       * appropriate things on the buffer */
+      samples = size / channels / 2;
+      if (samples < 1)
+        goto drop;
+
+      gst_buffer_ref (buf);
+      break;
+    }
+    case 20:
+    {
+      /* Allocate a new buffer and copy 20-bit width to 24-bit */
+      gint64 samples = size * 8 / 20;
+      gint64 count = size / 10;
+      gint64 i;
+      GstMapInfo srcmap, destmap;
+      guint8 *src;
+      guint8 *dest;
+      GstBuffer *outbuf;
+
+      if (samples < 1)
+        goto drop;
+
+      outbuf = gst_buffer_new_allocate (NULL, samples * 3, NULL);
+      gst_buffer_copy_into (outbuf, buf, GST_BUFFER_COPY_TIMESTAMPS, 0, -1);
+
+      /* adjust samples so we can calc the new timestamp */
+      samples = samples / channels;
+
+      gst_buffer_map (buf, &srcmap, GST_MAP_READ);
+      gst_buffer_map (outbuf, &destmap, GST_MAP_WRITE);
+      src = srcmap.data;
+      dest = destmap.data;
+
+      /* Copy 20-bit LPCM format to 24-bit buffers, with 0x00 in the lowest
+       * nibble. Note that the first 2 bytes are already correct */
+      for (i = 0; i < count; i++) {
+        dest[0] = src[0];
+        dest[1] = src[1];
+        dest[2] = src[8] & 0xf0;
+        dest[3] = src[2];
+        dest[4] = src[3];
+        dest[5] = (src[8] & 0x0f) << 4;
+        dest[6] = src[4];
+        dest[7] = src[5];
+        dest[8] = src[9] & 0x0f;
+        dest[9] = src[6];
+        dest[10] = src[7];
+        dest[11] = (src[9] & 0x0f) << 4;
+
+        src += 10;
+        dest += 12;
+      }
+      gst_buffer_unmap (outbuf, &destmap);
+      gst_buffer_unmap (buf, &srcmap);
+      buf = outbuf;
+      break;
+    }
+    case 24:
+    {
+      /* Rearrange 24-bit LPCM format in-place. Note that the first 2
+       * and last byte are already correct */
+      guint count = size / 12;
+      gint i;
+      GstMapInfo srcmap, destmap;
+      guint8 *src, *dest;
+      GstBuffer *outbuf;
+
+      samples = size / channels / 3;
+
+      if (samples < 1)
+        goto drop;
+
+      outbuf = gst_buffer_new_allocate (NULL, size, NULL);
+      gst_buffer_copy_into (outbuf, buf, GST_BUFFER_COPY_TIMESTAMPS, 0, -1);
+
+      gst_buffer_map (buf, &srcmap, GST_MAP_READ);
+      gst_buffer_map (outbuf, &destmap, GST_MAP_READWRITE);
+      src = srcmap.data;
+      dest = destmap.data;
+
+      for (i = 0; i < count; i++) {
+        dest[0] = src[0];
+        dest[1] = src[1];
+        dest[11] = src[11];
+        dest[10] = src[7];
+        dest[7] = src[5];
+        dest[5] = src[9];
+        dest[9] = src[6];
+        dest[6] = src[4];
+        dest[4] = src[3];
+        dest[3] = src[2];
+        dest[2] = src[8];
+        dest[8] = src[10];
+
+        src += 12;
+        dest += 12;
+      }
+      gst_buffer_unmap (outbuf, &destmap);
+      gst_buffer_unmap (buf, &srcmap);
+      buf = outbuf;
+      break;
+    }
+    default:
+      goto invalid_width;
+  }
+
+  if (dvdlpcmdec->lpcm_layout) {
+    buf = gst_buffer_make_writable (buf);
+    gst_audio_buffer_reorder_channels (buf, dvdlpcmdec->info.finfo->format,
+        dvdlpcmdec->info.channels, dvdlpcmdec->lpcm_layout,
+        dvdlpcmdec->info.position);
+  }
+
+  ret = gst_audio_decoder_finish_frame (bdec, buf, 1);
+
+done:
+  return ret;
+
+  /* ERRORS */
+drop:
+  {
+    GST_DEBUG_OBJECT (dvdlpcmdec,
+        "Buffer of size %" G_GSIZE_FORMAT " is too small. Dropping", size);
+    ret = GST_FLOW_OK;
+    goto done;
+  }
+not_negotiated:
+  {
+    GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, FORMAT, (NULL),
+        ("Buffer pushed before negotiation"));
+    ret = GST_FLOW_NOT_NEGOTIATED;
+    goto done;
+  }
+invalid_width:
+  {
+    GST_ELEMENT_ERROR (dvdlpcmdec, STREAM, WRONG_TYPE, (NULL),
+        ("Invalid sample width configured"));
+    ret = GST_FLOW_NOT_NEGOTIATED;
+    goto done;
+  }
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  return GST_ELEMENT_REGISTER (dvdlpcmdec, plugin);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    dvdlpcmdec,
+    "Decode DVD LPCM frames into standard PCM",
+    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
diff --git a/subprojects/gst-plugins-ugly/gst/dvdlpcmdec/gstdvdlpcmdec.h b/subprojects/gst-plugins-ugly/gst/dvdlpcmdec/gstdvdlpcmdec.h
new file mode 100644 (file)
index 0000000..76d4d1e
--- /dev/null
@@ -0,0 +1,79 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2005> Jan Schmidt <jan@noraisin.net>
+ *
+ * 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_DVDLPCMDEC_H__
+#define __GST_DVDLPCMDEC_H__
+
+#include <gst/gst.h>
+#include <gst/audio/audio.h>
+#include <gst/audio/gstaudiodecoder.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_DVDLPCMDEC \
+  (gst_dvdlpcmdec_get_type())
+#define GST_DVDLPCMDEC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DVDLPCMDEC,GstDvdLpcmDec))
+#define GST_DVDLPCMDEC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DVDLPCMDEC,GstDvdLpcmDecClass))
+#define GST_IS_DVDLPCMDEC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DVDLPCMDEC))
+#define GST_IS_DVDLPCMDEC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DVDLPCMDEC))
+
+typedef struct _GstDvdLpcmDec GstDvdLpcmDec;
+typedef struct _GstDvdLpcmDecClass GstDvdLpcmDecClass;
+
+typedef enum {
+  GST_LPCM_UNKNOWN,
+  GST_LPCM_RAW,
+  GST_LPCM_DVD,
+  GST_LPCM_1394,
+  GST_LPCM_BLURAY
+} GstDvdLpcmMode;
+
+struct _GstDvdLpcmDec {
+  GstAudioDecoder element;
+
+  GstPadChainFunction base_chain;
+
+  GstDvdLpcmMode mode;
+  guint32 header;
+
+  GstAudioInfo info;
+  const GstAudioChannelPosition *lpcm_layout;
+  gint width;
+  gint dynamic_range;
+  gint emphasis;
+  gint mute;
+
+  GstClockTime timestamp;
+};
+
+struct _GstDvdLpcmDecClass {
+  GstAudioDecoderClass parent_class;
+};
+
+GType gst_dvdlpcmdec_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (dvdlpcmdec);
+
+G_END_DECLS
+
+#endif /* __GST_DVDLPCMDEC_H__ */
diff --git a/subprojects/gst-plugins-ugly/gst/dvdlpcmdec/meson.build b/subprojects/gst-plugins-ugly/gst/dvdlpcmdec/meson.build
new file mode 100644 (file)
index 0000000..b5a77ef
--- /dev/null
@@ -0,0 +1,14 @@
+dvdpl_sources = [
+  'gstdvdlpcmdec.c'
+]
+
+gstdvdlpcmdec = library('gstdvdlpcmdec',
+  dvdpl_sources,
+  c_args : ugly_args,
+  include_directories : [configinc],
+  dependencies : [gstbase_dep, gstaudio_dep],
+  install : true,
+  install_dir : plugins_install_dir,
+)
+pkgconfig.generate(gstdvdlpcmdec, install_dir : plugins_pkgconfig_install_dir)
+plugins += [gstdvdlpcmdec]
diff --git a/subprojects/gst-plugins-ugly/gst/dvdsub/gstdvdsubdec.c b/subprojects/gst-plugins-ugly/gst/dvdsub/gstdvdsubdec.c
new file mode 100644 (file)
index 0000000..1884880
--- /dev/null
@@ -0,0 +1,1164 @@
+/* GStreamer
+ * Copyright (C) <2005> Jan Schmidt <jan@fluendo.com>
+ * Copyright (C) <2002> Wim Taymans <wim@fluendo.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 "gstdvdsubdec.h"
+#include "gstdvdsubparse.h"
+#include <string.h>
+
+GST_DEBUG_CATEGORY_STATIC (gst_dvd_sub_dec_debug);
+#define GST_CAT_DEFAULT (gst_dvd_sub_dec_debug)
+
+#define gst_dvd_sub_dec_parent_class parent_class
+G_DEFINE_TYPE (GstDvdSubDec, gst_dvd_sub_dec, GST_TYPE_ELEMENT);
+GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (dvdsubdec, "dvdsubdec", GST_RANK_NONE,
+    GST_TYPE_DVD_SUB_DEC, GST_DEBUG_CATEGORY_INIT (gst_dvd_sub_dec_debug,
+        "dvdsubdec", 0, "DVD subtitle decoder"));
+
+static gboolean gst_dvd_sub_dec_src_event (GstPad * srcpad, GstObject * parent,
+    GstEvent * event);
+static GstFlowReturn gst_dvd_sub_dec_chain (GstPad * pad, GstObject * parent,
+    GstBuffer * buf);
+
+static gboolean gst_dvd_sub_dec_handle_dvd_event (GstDvdSubDec * dec,
+    GstEvent * event);
+static void gst_dvd_sub_dec_finalize (GObject * gobject);
+static void gst_setup_palette (GstDvdSubDec * dec);
+static void gst_dvd_sub_dec_merge_title (GstDvdSubDec * dec,
+    GstVideoFrame * frame);
+static GstClockTime gst_dvd_sub_dec_get_event_delay (GstDvdSubDec * dec);
+static gboolean gst_dvd_sub_dec_sink_event (GstPad * pad, GstObject * parent,
+    GstEvent * event);
+static gboolean gst_dvd_sub_dec_sink_setcaps (GstPad * pad, GstCaps * caps);
+
+static GstFlowReturn gst_send_subtitle_frame (GstDvdSubDec * dec,
+    GstClockTime end_ts);
+
+static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-raw, format = (string) { AYUV, ARGB },"
+        "width = (int) 720, height = (int) 576, framerate = (fraction) 0/1")
+    );
+
+static GstStaticPadTemplate subtitle_template = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("subpicture/x-dvd")
+    );
+
+
+enum
+{
+  SPU_FORCE_DISPLAY = 0x00,
+  SPU_SHOW = 0x01,
+  SPU_HIDE = 0x02,
+  SPU_SET_PALETTE = 0x03,
+  SPU_SET_ALPHA = 0x04,
+  SPU_SET_SIZE = 0x05,
+  SPU_SET_OFFSETS = 0x06,
+  SPU_WIPE = 0x07,
+  SPU_END = 0xff
+};
+
+static const guint32 default_clut[16] = {
+  0xb48080, 0x248080, 0x628080, 0xd78080,
+  0x808080, 0x808080, 0x808080, 0x808080,
+  0x808080, 0x808080, 0x808080, 0x808080,
+  0x808080, 0x808080, 0x808080, 0x808080
+};
+
+typedef struct RLE_state
+{
+  gint id;
+  gint aligned;
+  gint offset[2];
+  gint hl_left;
+  gint hl_right;
+
+  guchar *target;
+
+  guchar next;
+}
+RLE_state;
+
+static void
+gst_dvd_sub_dec_class_init (GstDvdSubDecClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+
+  gobject_class->finalize = gst_dvd_sub_dec_finalize;
+
+  gst_element_class_add_static_pad_template (gstelement_class, &src_template);
+  gst_element_class_add_static_pad_template (gstelement_class,
+      &subtitle_template);
+
+  gst_element_class_set_static_metadata (gstelement_class,
+      "DVD subtitle decoder", "Codec/Decoder/Video",
+      "Decodes DVD subtitles into AYUV video frames",
+      "Wim Taymans <wim.taymans@gmail.com>, "
+      "Jan Schmidt <thaytan@mad.scientist.com>");
+}
+
+static void
+gst_dvd_sub_dec_init (GstDvdSubDec * dec)
+{
+  GstPadTemplate *tmpl;
+
+  dec->sinkpad = gst_pad_new_from_static_template (&subtitle_template, "sink");
+  gst_pad_set_chain_function (dec->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_dvd_sub_dec_chain));
+  gst_pad_set_event_function (dec->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_dvd_sub_dec_sink_event));
+  gst_element_add_pad (GST_ELEMENT (dec), dec->sinkpad);
+
+  tmpl = gst_static_pad_template_get (&src_template);
+  dec->srcpad = gst_pad_new_from_template (tmpl, "src");
+  gst_pad_set_event_function (dec->srcpad,
+      GST_DEBUG_FUNCPTR (gst_dvd_sub_dec_src_event));
+  gst_pad_use_fixed_caps (dec->srcpad);
+  gst_object_unref (tmpl);
+  gst_element_add_pad (GST_ELEMENT (dec), dec->srcpad);
+
+  /* FIXME: aren't there more possible sizes? (tpm) */
+  dec->in_width = 720;
+  dec->in_height = 576;
+
+  dec->partialbuf = NULL;
+  dec->have_title = FALSE;
+  dec->parse_pos = NULL;
+  dec->forced_display = FALSE;
+  dec->visible = FALSE;
+
+  memcpy (dec->current_clut, default_clut, sizeof (guint32) * 16);
+
+  gst_setup_palette (dec);
+
+  dec->next_ts = 0;
+  dec->next_event_ts = GST_CLOCK_TIME_NONE;
+
+  dec->buf_dirty = TRUE;
+  dec->use_ARGB = FALSE;
+}
+
+static void
+gst_dvd_sub_dec_finalize (GObject * gobject)
+{
+  GstDvdSubDec *dec = GST_DVD_SUB_DEC (gobject);
+
+  if (dec->partialbuf) {
+    gst_buffer_unmap (dec->partialbuf, &dec->partialmap);
+    gst_buffer_unref (dec->partialbuf);
+    dec->partialbuf = NULL;
+  }
+
+  G_OBJECT_CLASS (parent_class)->finalize (gobject);
+}
+
+static gboolean
+gst_dvd_sub_dec_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  gboolean res = FALSE;
+
+  switch (GST_EVENT_TYPE (event)) {
+    default:
+      res = gst_pad_event_default (pad, parent, event);
+      break;
+  }
+
+  return res;
+}
+
+static GstClockTime
+gst_dvd_sub_dec_get_event_delay (GstDvdSubDec * dec)
+{
+  guchar *buf;
+  guint16 ticks;
+  GstClockTime event_delay;
+
+  /* If starting a new buffer, follow the first DCSQ ptr */
+  if (dec->parse_pos == dec->partialmap.data) {
+    buf = dec->parse_pos + dec->data_size;
+  } else {
+    buf = dec->parse_pos;
+  }
+
+  ticks = GST_READ_UINT16_BE (buf);
+  event_delay = gst_util_uint64_scale (ticks, 1024 * GST_SECOND, 90000);
+
+  GST_DEBUG_OBJECT (dec, "returning delay %" GST_TIME_FORMAT " from offset %u",
+      GST_TIME_ARGS (event_delay), (guint) (buf - dec->parse_pos));
+
+  return event_delay;
+}
+
+/*
+ * Parse the next event time in the current subpicture buffer, stopping
+ * when time advances to the next state. 
+ */
+static void
+gst_dvd_sub_dec_parse_subpic (GstDvdSubDec * dec)
+{
+#define PARSE_BYTES_NEEDED(x) if ((buf+(x)) >= end) \
+  { GST_WARNING("Subtitle stream broken parsing %c", *buf); \
+    broken = TRUE; break; }
+
+  guchar *start = dec->partialmap.data;
+  guchar *buf;
+  guchar *end;
+  gboolean broken = FALSE;
+  gboolean last_seq = FALSE;
+  guchar *next_seq = NULL;
+  GstClockTime event_time;
+
+  /* nothing to do if we finished this buffer already */
+  if (dec->parse_pos == NULL)
+    return;
+
+  g_return_if_fail (dec->packet_size >= 4);
+
+  end = start + dec->packet_size;
+  if (dec->parse_pos == start) {
+    buf = dec->parse_pos + dec->data_size;
+  } else {
+    buf = dec->parse_pos;
+  }
+
+  g_assert (buf >= start && buf < end);
+
+  /* If the next control sequence is at the current offset, this is 
+   * the last one */
+  next_seq = start + GST_READ_UINT16_BE (buf + 2);
+  last_seq = (next_seq == buf);
+  buf += 4;
+
+  while ((buf < end) && (!broken)) {
+    switch (*buf) {
+      case SPU_FORCE_DISPLAY:  /* Forced display menu subtitle */
+        dec->forced_display = TRUE;
+        dec->buf_dirty = TRUE;
+        GST_DEBUG_OBJECT (dec, "SPU FORCE_DISPLAY");
+        buf++;
+        break;
+      case SPU_SHOW:           /* Show the subtitle in this packet */
+        dec->visible = TRUE;
+        dec->buf_dirty = TRUE;
+        GST_DEBUG_OBJECT (dec, "SPU SHOW at %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (dec->next_event_ts));
+        buf++;
+        break;
+      case SPU_HIDE:
+        /* 02 ff (ff) is the end of the packet, hide the subpicture */
+        dec->visible = FALSE;
+        dec->buf_dirty = TRUE;
+
+        GST_DEBUG_OBJECT (dec, "SPU HIDE at %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (dec->next_event_ts));
+        buf++;
+        break;
+      case SPU_SET_PALETTE:    /* palette */
+        PARSE_BYTES_NEEDED (3);
+
+        GST_DEBUG_OBJECT (dec, "SPU SET_PALETTE");
+
+        dec->subtitle_index[3] = buf[1] >> 4;
+        dec->subtitle_index[2] = buf[1] & 0xf;
+        dec->subtitle_index[1] = buf[2] >> 4;
+        dec->subtitle_index[0] = buf[2] & 0xf;
+        gst_setup_palette (dec);
+
+        dec->buf_dirty = TRUE;
+        buf += 3;
+        break;
+      case SPU_SET_ALPHA:      /* transparency palette */
+        PARSE_BYTES_NEEDED (3);
+
+        GST_DEBUG_OBJECT (dec, "SPU SET_ALPHA");
+
+        dec->subtitle_alpha[3] = buf[1] >> 4;
+        dec->subtitle_alpha[2] = buf[1] & 0xf;
+        dec->subtitle_alpha[1] = buf[2] >> 4;
+        dec->subtitle_alpha[0] = buf[2] & 0xf;
+        gst_setup_palette (dec);
+
+        dec->buf_dirty = TRUE;
+        buf += 3;
+        break;
+      case SPU_SET_SIZE:       /* image coordinates */
+        PARSE_BYTES_NEEDED (7);
+
+        dec->top = ((buf[4] & 0x3f) << 4) | ((buf[5] & 0xe0) >> 4);
+        dec->left = ((buf[1] & 0x3f) << 4) | ((buf[2] & 0xf0) >> 4);
+        dec->right = ((buf[2] & 0x03) << 8) | buf[3];
+        dec->bottom = ((buf[5] & 0x03) << 8) | buf[6];
+
+        GST_DEBUG_OBJECT (dec, "SPU SET_SIZE left %d, top %d, right %d, "
+            "bottom %d", dec->left, dec->top, dec->right, dec->bottom);
+
+        dec->buf_dirty = TRUE;
+        buf += 7;
+        break;
+      case SPU_SET_OFFSETS:    /* image 1 / image 2 offsets */
+        PARSE_BYTES_NEEDED (5);
+
+        dec->offset[0] = (((guint) buf[1]) << 8) | buf[2];
+        dec->offset[1] = (((guint) buf[3]) << 8) | buf[4];
+        GST_DEBUG_OBJECT (dec, "Offset1 %d, Offset2 %d",
+            dec->offset[0], dec->offset[1]);
+
+        dec->buf_dirty = TRUE;
+        buf += 5;
+        break;
+      case SPU_WIPE:
+      {
+        guint length;
+
+        PARSE_BYTES_NEEDED (3);
+
+        GST_WARNING_OBJECT (dec, "SPU_WIPE not yet implemented");
+
+        length = (buf[1] << 8) | (buf[2]);
+        buf += 1 + length;
+
+        dec->buf_dirty = TRUE;
+        break;
+      }
+      case SPU_END:
+        buf = (last_seq) ? end : next_seq;
+
+        /* Start a new control sequence */
+        if (buf + 4 < end) {
+          guint16 ticks = GST_READ_UINT16_BE (buf);
+
+          event_time = gst_util_uint64_scale (ticks, 1024 * GST_SECOND, 90000);
+
+          GST_DEBUG_OBJECT (dec,
+              "Next DCSQ at offset %u, delay %g secs (%d ticks)",
+              (guint) (buf - start),
+              gst_util_guint64_to_gdouble (event_time / GST_SECOND), ticks);
+
+          dec->parse_pos = buf;
+          if (event_time > 0) {
+            dec->next_event_ts += event_time;
+
+            GST_LOG_OBJECT (dec, "Exiting parse loop with time %g",
+                gst_guint64_to_gdouble (dec->next_event_ts) /
+                gst_guint64_to_gdouble (GST_SECOND));
+            return;
+          }
+          break;
+        } else {
+          dec->parse_pos = NULL;
+          dec->next_event_ts = GST_CLOCK_TIME_NONE;
+          GST_LOG_OBJECT (dec, "Finished all cmds. Exiting parse loop");
+          return;
+        }
+      default:
+        GST_ERROR
+            ("Invalid sequence in subtitle packet header (%.2x). Skipping",
+            *buf);
+        broken = TRUE;
+        dec->parse_pos = NULL;
+        break;
+    }
+  }
+}
+
+static inline int
+gst_get_nibble (guchar * buffer, RLE_state * state)
+{
+  if (state->aligned) {
+    state->next = buffer[state->offset[state->id]++];
+    state->aligned = 0;
+    return state->next >> 4;
+  } else {
+    state->aligned = 1;
+    return state->next & 0xf;
+  }
+}
+
+/* Premultiply the current lookup table into the "target" cache */
+static void
+gst_setup_palette (GstDvdSubDec * dec)
+{
+  gint i;
+  guint32 col;
+  Color_val *target_yuv = dec->palette_cache_yuv;
+  Color_val *target2_yuv = dec->hl_palette_cache_yuv;
+  Color_val *target_rgb = dec->palette_cache_rgb;
+  Color_val *target2_rgb = dec->hl_palette_cache_rgb;
+
+  for (i = 0; i < 4; i++, target2_yuv++, target_yuv++) {
+    col = dec->current_clut[dec->subtitle_index[i]];
+    target_yuv->Y_R = (col >> 16) & 0xff;
+    target_yuv->V_B = (col >> 8) & 0xff;
+    target_yuv->U_G = col & 0xff;
+    target_yuv->A = dec->subtitle_alpha[i] * 0xff / 0xf;
+
+    col = dec->current_clut[dec->menu_index[i]];
+    target2_yuv->Y_R = (col >> 16) & 0xff;
+    target2_yuv->V_B = (col >> 8) & 0xff;
+    target2_yuv->U_G = col & 0xff;
+    target2_yuv->A = dec->menu_alpha[i] * 0xff / 0xf;
+
+    /* If ARGB flag set, then convert YUV palette to RGB */
+    /* Using integer arithmetic */
+    if (dec->use_ARGB) {
+      guchar C = target_yuv->Y_R - 16;
+      guchar D = target_yuv->U_G - 128;
+      guchar E = target_yuv->V_B - 128;
+
+      target_rgb->Y_R = CLAMP (((298 * C + 409 * E + 128) >> 8), 0, 255);
+      target_rgb->U_G =
+          CLAMP (((298 * C - 100 * D - 128 * E + 128) >> 8), 0, 255);
+      target_rgb->V_B = CLAMP (((298 * C + 516 * D + 128) >> 8), 0, 255);
+      target_rgb->A = target_yuv->A;
+
+      C = target2_yuv->Y_R - 16;
+      D = target2_yuv->U_G - 128;
+      E = target2_yuv->V_B - 128;
+
+      target2_rgb->Y_R = CLAMP (((298 * C + 409 * E + 128) >> 8), 0, 255);
+      target2_rgb->U_G =
+          CLAMP (((298 * C - 100 * D - 128 * E + 128) >> 8), 0, 255);
+      target2_rgb->V_B = CLAMP (((298 * C + 516 * D + 128) >> 8), 0, 255);
+      target2_rgb->A = target2_yuv->A;
+    }
+    target_rgb++;
+    target2_rgb++;
+  }
+}
+
+static inline guint
+gst_get_rle_code (guchar * buffer, RLE_state * state)
+{
+  gint code;
+
+  code = gst_get_nibble (buffer, state);
+  if (code < 0x4) {             /* 4 .. f */
+    code = (code << 4) | gst_get_nibble (buffer, state);
+    if (code < 0x10) {          /* 1x .. 3x */
+      code = (code << 4) | gst_get_nibble (buffer, state);
+      if (code < 0x40) {        /* 04x .. 0fx */
+        code = (code << 4) | gst_get_nibble (buffer, state);
+      }
+    }
+  }
+  return code;
+}
+
+#define DRAW_RUN(target,len,c)                  \
+G_STMT_START {                                  \
+  gint i = 0;                                   \
+  if ((c)->A) {                                 \
+    for (i = 0; i < (len); i++) {               \
+      *(target)++ = (c)->A;                     \
+      *(target)++ = (c)->Y_R;                   \
+      *(target)++ = (c)->U_G;                   \
+      *(target)++ = (c)->V_B;                   \
+    }                                           \
+  } else {                                      \
+    (target) += 4 * (len);                      \
+  }                                             \
+} G_STMT_END
+
+/* 
+ * This function steps over each run-length segment, drawing 
+ * into the YUVA/ARGB buffers as it goes. UV are composited and then output
+ * at half width/height
+ */
+static void
+gst_draw_rle_line (GstDvdSubDec * dec, guchar * buffer, RLE_state * state)
+{
+  gint length, colourid;
+  guint code;
+  gint x, right;
+  guchar *target;
+
+  target = state->target;
+
+  x = dec->left;
+  right = dec->right + 1;
+
+  while (x < right) {
+    gboolean in_hl;
+    const Color_val *colour_entry;
+
+    code = gst_get_rle_code (buffer, state);
+    length = code >> 2;
+    colourid = code & 3;
+    if (dec->use_ARGB)
+      colour_entry = dec->palette_cache_rgb + colourid;
+    else
+      colour_entry = dec->palette_cache_yuv + colourid;
+
+    /* Length = 0 implies fill to the end of the line */
+    /* Restrict the colour run to the end of the line */
+    if (length == 0 || x + length > right)
+      length = right - x;
+
+    /* Check if this run of colour touches the highlight region */
+    in_hl = ((x <= state->hl_right) && (x + length) >= state->hl_left);
+    if (in_hl) {
+      gint run;
+
+      /* Draw to the left of the highlight */
+      if (x <= state->hl_left) {
+        run = MIN (length, state->hl_left - x + 1);
+
+        DRAW_RUN (target, run, colour_entry);
+        length -= run;
+        x += run;
+      }
+
+      /* Draw across the highlight region */
+      if (x <= state->hl_right) {
+        const Color_val *hl_colour;
+        if (dec->use_ARGB)
+          hl_colour = dec->hl_palette_cache_rgb + colourid;
+        else
+          hl_colour = dec->hl_palette_cache_yuv + colourid;
+
+        run = MIN (length, state->hl_right - x + 1);
+
+        DRAW_RUN (target, run, hl_colour);
+        length -= run;
+        x += run;
+      }
+    }
+
+    /* Draw the rest of the run */
+    if (length > 0) {
+      DRAW_RUN (target, length, colour_entry);
+      x += length;
+    }
+  }
+}
+
+/*
+ * Decode the RLE subtitle image and blend with the current
+ * frame buffer.
+ */
+static void
+gst_dvd_sub_dec_merge_title (GstDvdSubDec * dec, GstVideoFrame * frame)
+{
+  gint y;
+  gint Y_stride;
+  guchar *buffer = dec->partialmap.data;
+  gint hl_top, hl_bottom;
+  gint last_y;
+  RLE_state state;
+  guint8 *Y_data;
+
+  GST_DEBUG_OBJECT (dec, "Merging subtitle on frame");
+
+  Y_data = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+  Y_stride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+
+  state.id = 0;
+  state.aligned = 1;
+  state.next = 0;
+  state.offset[0] = dec->offset[0];
+  state.offset[1] = dec->offset[1];
+
+  /* center the image when display rectangle exceeds the video width */
+  if (dec->in_width <= dec->right) {
+    gint left, disp_width;
+
+    disp_width = dec->right - dec->left + 1;
+    left = (dec->in_width - disp_width) / 2;
+    dec->left = left;
+    dec->right = left + disp_width - 1;
+
+    /* if it clips to the right, shift it left, but only till zero */
+    if (dec->right >= dec->in_width) {
+      gint shift = dec->right - dec->in_width - 1;
+      if (shift > dec->left)
+        shift = dec->left;
+      dec->left -= shift;
+      dec->right -= shift;
+    }
+
+    GST_DEBUG_OBJECT (dec, "clipping width to %d,%d",
+        dec->left, dec->in_width - 1);
+  }
+
+  /* for the height, bring it up till it fits as well as it can. We
+   * assume the picture is in the lower part. We should better check where it
+   * is and do something more clever. */
+  if (dec->in_height <= dec->bottom) {
+
+    /* shift it up, but only till zero */
+    gint shift = dec->bottom - dec->in_height - 1;
+    if (shift > dec->top)
+      shift = dec->top;
+    dec->top -= shift;
+    dec->bottom -= shift;
+
+    /* start on even line */
+    if (dec->top & 1) {
+      dec->top--;
+      dec->bottom--;
+    }
+
+    GST_DEBUG_OBJECT (dec, "clipping height to %d,%d",
+        dec->top, dec->in_height - 1);
+  }
+
+  if (dec->current_button) {
+    hl_top = dec->hl_top;
+    hl_bottom = dec->hl_bottom;
+  } else {
+    hl_top = -1;
+    hl_bottom = -1;
+  }
+  last_y = MIN (dec->bottom, dec->in_height);
+
+  y = dec->top;
+  state.target = Y_data + 4 * dec->left + (y * Y_stride);
+
+  /* Now draw scanlines until we hit last_y or end of RLE data */
+  for (; ((state.offset[1] < dec->data_size + 2) && (y <= last_y)); y++) {
+    /* Set up to draw the highlight if we're in the right scanlines */
+    if (y > hl_bottom || y < hl_top) {
+      state.hl_left = -1;
+      state.hl_right = -1;
+    } else {
+      state.hl_left = dec->hl_left;
+      state.hl_right = dec->hl_right;
+    }
+    gst_draw_rle_line (dec, buffer, &state);
+
+    state.target += Y_stride;
+
+    /* Realign the RLE state for the next line */
+    if (!state.aligned)
+      gst_get_nibble (buffer, &state);
+    state.id = !state.id;
+  }
+}
+
+static void
+gst_send_empty_fill (GstDvdSubDec * dec, GstClockTime ts)
+{
+  if (dec->next_ts < ts) {
+    GST_LOG_OBJECT (dec, "Sending GAP event update to advance time to %"
+        GST_TIME_FORMAT, GST_TIME_ARGS (ts));
+
+    gst_pad_push_event (dec->srcpad,
+        gst_event_new_gap (dec->next_ts, ts - dec->next_ts));
+  }
+  dec->next_ts = ts;
+}
+
+static GstFlowReturn
+gst_send_subtitle_frame (GstDvdSubDec * dec, GstClockTime end_ts)
+{
+  GstFlowReturn flow;
+  GstBuffer *out_buf;
+  GstVideoFrame frame;
+  guint8 *data;
+  gint x, y;
+  static GstAllocationParams params = { 0, 3, 0, 0, };
+
+  g_assert (dec->have_title);
+  g_assert (dec->next_ts <= end_ts);
+
+  /* Check if we need to redraw the output buffer */
+  if (!dec->buf_dirty) {
+    flow = GST_FLOW_OK;
+    goto out;
+  }
+
+  out_buf =
+      gst_buffer_new_allocate (NULL, GST_VIDEO_INFO_SIZE (&dec->info), &params);
+  gst_video_frame_map (&frame, &dec->info, out_buf, GST_MAP_READWRITE);
+
+  data = GST_VIDEO_FRAME_PLANE_DATA (&frame, 0);
+
+  /* Clear the buffer */
+  /* FIXME - move this into the buffer rendering code */
+  for (y = 0; y < dec->in_height; y++) {
+    guchar *line = data + 4 * dec->in_width * y;
+
+    for (x = 0; x < dec->in_width; x++) {
+      line[0] = 0;              /* A */
+      if (!dec->use_ARGB) {
+        line[1] = 16;           /* Y */
+        line[2] = 128;          /* U */
+        line[3] = 128;          /* V */
+      } else {
+        line[1] = 0;            /* R */
+        line[2] = 0;            /* G */
+        line[3] = 0;            /* B */
+      }
+
+      line += 4;
+    }
+  }
+
+  /* FIXME: do we really want to honour the forced_display flag
+   * for subtitles streans? */
+  if (dec->visible || dec->forced_display) {
+    gst_dvd_sub_dec_merge_title (dec, &frame);
+  }
+
+  gst_video_frame_unmap (&frame);
+
+  dec->buf_dirty = FALSE;
+
+  GST_BUFFER_TIMESTAMP (out_buf) = dec->next_ts;
+  if (GST_CLOCK_TIME_IS_VALID (dec->next_event_ts)) {
+    GST_BUFFER_DURATION (out_buf) = GST_CLOCK_DIFF (dec->next_ts,
+        dec->next_event_ts);
+  } else {
+    GST_BUFFER_DURATION (out_buf) = GST_CLOCK_TIME_NONE;
+  }
+
+  GST_DEBUG_OBJECT (dec, "Sending subtitle buffer with ts %"
+      GST_TIME_FORMAT ", dur %" G_GINT64_FORMAT,
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (out_buf)),
+      GST_BUFFER_DURATION (out_buf));
+
+  flow = gst_pad_push (dec->srcpad, out_buf);
+
+out:
+  dec->next_ts = end_ts;
+  return flow;
+}
+
+/* Walk time forward, processing any subtitle events as needed. */
+static GstFlowReturn
+gst_dvd_sub_dec_advance_time (GstDvdSubDec * dec, GstClockTime new_ts)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  GST_LOG_OBJECT (dec, "Advancing time to %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (new_ts));
+
+  if (!dec->have_title) {
+    gst_send_empty_fill (dec, new_ts);
+    return ret;
+  }
+
+  while (dec->next_ts < new_ts) {
+    GstClockTime next_ts = new_ts;
+
+    if (GST_CLOCK_TIME_IS_VALID (dec->next_event_ts) &&
+        dec->next_event_ts < next_ts) {
+      /* We might need to process the subtitle cmd queue */
+      next_ts = dec->next_event_ts;
+    }
+
+    /* 
+     * Now, either output a filler or a frame spanning
+     * dec->next_ts to next_ts
+     */
+    if (dec->visible || dec->forced_display) {
+      ret = gst_send_subtitle_frame (dec, next_ts);
+    } else {
+      gst_send_empty_fill (dec, next_ts);
+    }
+
+    /*
+     * and then process some subtitle cmds if we need
+     */
+    if (next_ts == dec->next_event_ts)
+      gst_dvd_sub_dec_parse_subpic (dec);
+  }
+
+  return ret;
+}
+
+static GstFlowReturn
+gst_dvd_sub_dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+  GstDvdSubDec *dec;
+  guint8 *data;
+  glong size = 0;
+
+  dec = GST_DVD_SUB_DEC (parent);
+
+  GST_DEBUG_OBJECT (dec, "Have buffer of size %" G_GSIZE_FORMAT ", ts %"
+      GST_TIME_FORMAT ", dur %" G_GINT64_FORMAT, gst_buffer_get_size (buf),
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), GST_BUFFER_DURATION (buf));
+
+  if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
+    if (!GST_CLOCK_TIME_IS_VALID (dec->next_ts)) {
+      dec->next_ts = GST_BUFFER_TIMESTAMP (buf);
+    }
+
+    /* Move time forward to the start of the new buffer */
+    ret = gst_dvd_sub_dec_advance_time (dec, GST_BUFFER_TIMESTAMP (buf));
+  }
+
+  if (dec->have_title) {
+    gst_buffer_unmap (dec->partialbuf, &dec->partialmap);
+    gst_buffer_unref (dec->partialbuf);
+    dec->partialbuf = NULL;
+    dec->have_title = FALSE;
+  }
+
+  GST_DEBUG_OBJECT (dec, "Got subtitle buffer, pts %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
+
+  /* deal with partial frame from previous buffer */
+  if (dec->partialbuf) {
+    gst_buffer_unmap (dec->partialbuf, &dec->partialmap);
+    dec->partialbuf = gst_buffer_append (dec->partialbuf, buf);
+  } else {
+    dec->partialbuf = buf;
+  }
+
+  gst_buffer_map (dec->partialbuf, &dec->partialmap, GST_MAP_READ);
+
+  data = dec->partialmap.data;
+  size = dec->partialmap.size;
+
+  if (size > 4) {
+    dec->packet_size = GST_READ_UINT16_BE (data);
+
+    if (dec->packet_size == size) {
+      GST_LOG_OBJECT (dec, "Subtitle packet size %d, current size %ld",
+          dec->packet_size, size);
+
+      dec->data_size = GST_READ_UINT16_BE (data + 2);
+
+      /* Reset parameters for a new subtitle buffer */
+      dec->parse_pos = data;
+      dec->forced_display = FALSE;
+      dec->visible = FALSE;
+
+      dec->have_title = TRUE;
+      dec->next_event_ts = GST_BUFFER_TIMESTAMP (dec->partialbuf);
+
+      if (!GST_CLOCK_TIME_IS_VALID (dec->next_event_ts))
+        dec->next_event_ts = dec->next_ts;
+
+      dec->next_event_ts += gst_dvd_sub_dec_get_event_delay (dec);
+    }
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_dvd_sub_dec_sink_setcaps (GstPad * pad, GstCaps * caps)
+{
+  GstDvdSubDec *dec = GST_DVD_SUB_DEC (gst_pad_get_parent (pad));
+  gboolean ret = FALSE;
+  GstCaps *out_caps = NULL, *peer_caps = NULL;
+
+  GST_DEBUG_OBJECT (dec, "setcaps called with %" GST_PTR_FORMAT, caps);
+
+  out_caps = gst_caps_new_simple ("video/x-raw",
+      "format", G_TYPE_STRING, "AYUV",
+      "width", G_TYPE_INT, dec->in_width,
+      "height", G_TYPE_INT, dec->in_height,
+      "framerate", GST_TYPE_FRACTION, 0, 1, NULL);
+
+  peer_caps = gst_pad_get_allowed_caps (dec->srcpad);
+  if (G_LIKELY (peer_caps)) {
+    guint i = 0, n = 0;
+
+    n = gst_caps_get_size (peer_caps);
+    GST_DEBUG_OBJECT (dec, "peer allowed caps (%u structure(s)) are %"
+        GST_PTR_FORMAT, n, peer_caps);
+
+    for (i = 0; i < n; i++) {
+      GstStructure *s = gst_caps_get_structure (peer_caps, i);
+      /* Check if the peer pad support ARGB format, if yes change caps */
+      if (gst_structure_has_name (s, "video/x-raw")) {
+        GstCaps *downstream_caps;
+        gst_caps_unref (out_caps);
+        GST_DEBUG_OBJECT (dec, "trying with ARGB");
+
+        out_caps = gst_caps_new_simple ("video/x-raw",
+            "format", G_TYPE_STRING, "ARGB",
+            "width", G_TYPE_INT, dec->in_width,
+            "height", G_TYPE_INT, dec->in_height,
+            "framerate", GST_TYPE_FRACTION, 0, 1, NULL);
+
+        downstream_caps = gst_pad_peer_query_caps (dec->srcpad, NULL);
+        if (gst_caps_can_intersect (downstream_caps, out_caps)) {
+          gst_caps_unref (downstream_caps);
+          GST_DEBUG_OBJECT (dec, "peer accepted ARGB");
+          /* If ARGB format then set the flag */
+          dec->use_ARGB = TRUE;
+          break;
+        }
+        gst_caps_unref (downstream_caps);
+      }
+    }
+    gst_caps_unref (peer_caps);
+  }
+  GST_DEBUG_OBJECT (dec, "setting caps downstream to %" GST_PTR_FORMAT,
+      out_caps);
+  if (gst_pad_set_caps (dec->srcpad, out_caps)) {
+    gst_video_info_from_caps (&dec->info, out_caps);
+  } else {
+    GST_WARNING_OBJECT (dec, "failed setting downstream caps");
+    gst_caps_unref (out_caps);
+    goto beach;
+  }
+
+  gst_caps_unref (out_caps);
+  ret = TRUE;
+
+beach:
+  gst_object_unref (dec);
+  return ret;
+}
+
+static gboolean
+gst_dvd_sub_dec_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  GstDvdSubDec *dec = GST_DVD_SUB_DEC (parent);
+  gboolean ret = FALSE;
+
+  GST_LOG_OBJECT (dec, "%s event", GST_EVENT_TYPE_NAME (event));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      ret = gst_dvd_sub_dec_sink_setcaps (pad, caps);
+      gst_event_unref (event);
+      break;
+    }
+    case GST_EVENT_CUSTOM_DOWNSTREAM:{
+
+      if (gst_event_has_name (event, "application/x-gst-dvd")) {
+        const GstStructure *s = gst_event_get_structure (event);
+        GstClockTime ts = GST_CLOCK_TIME_NONE;
+
+        if (gst_structure_get_clock_time (s, "ts", &ts)
+            && GST_CLOCK_TIME_IS_VALID (ts))
+          gst_dvd_sub_dec_advance_time (dec, ts);
+
+        if (gst_dvd_sub_dec_handle_dvd_event (dec, event)) {
+          /* gst_dvd_sub_dec_advance_time (dec, dec->next_ts + GST_SECOND / 30.0); */
+          gst_event_unref (event);
+          ret = TRUE;
+          break;
+        }
+      }
+
+      ret = gst_pad_event_default (pad, parent, event);
+      break;
+    }
+    case GST_EVENT_GAP:
+    {
+      GstClockTime start, duration;
+
+      gst_event_parse_gap (event, &start, &duration);
+      if (GST_CLOCK_TIME_IS_VALID (start)) {
+        if (GST_CLOCK_TIME_IS_VALID (duration))
+          start += duration;
+        /* we do not expect another buffer until after gap,
+         * so that is our position now */
+        GST_DEBUG_OBJECT (dec, "Got GAP event, advancing time from %"
+            GST_TIME_FORMAT " to %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (dec->next_ts), GST_TIME_ARGS (start));
+
+        gst_dvd_sub_dec_advance_time (dec, start);
+      } else {
+        GST_WARNING_OBJECT (dec, "Got GAP event with invalid position");
+      }
+
+      gst_event_unref (event);
+      ret = TRUE;
+      break;
+    }
+    case GST_EVENT_SEGMENT:
+    {
+      GstSegment seg;
+
+      gst_event_copy_segment (event, &seg);
+
+      {
+#if 0
+        /* Turn off forced highlight display */
+        dec->forced_display = 0;
+        dec->current_button = 0;
+#endif
+        if (dec->partialbuf) {
+          gst_buffer_unmap (dec->partialbuf, &dec->partialmap);
+          gst_buffer_unref (dec->partialbuf);
+          dec->partialbuf = NULL;
+          dec->have_title = FALSE;
+        }
+
+        if (GST_CLOCK_TIME_IS_VALID (seg.time))
+          dec->next_ts = seg.time;
+        else
+          dec->next_ts = GST_CLOCK_TIME_NONE;
+
+        GST_DEBUG_OBJECT (dec, "Got newsegment, new time = %"
+            GST_TIME_FORMAT, GST_TIME_ARGS (dec->next_ts));
+
+        ret = gst_pad_event_default (pad, parent, event);
+      }
+      break;
+    }
+    case GST_EVENT_FLUSH_STOP:{
+      /* Turn off forced highlight display */
+      dec->forced_display = 0;
+      dec->current_button = 0;
+
+      if (dec->partialbuf) {
+        gst_buffer_unmap (dec->partialbuf, &dec->partialmap);
+        gst_buffer_unref (dec->partialbuf);
+        dec->partialbuf = NULL;
+        dec->have_title = FALSE;
+      }
+
+      ret = gst_pad_event_default (pad, parent, event);
+      break;
+    }
+    default:{
+      ret = gst_pad_event_default (pad, parent, event);
+      break;
+    }
+  }
+  return ret;
+}
+
+static gboolean
+gst_dvd_sub_dec_handle_dvd_event (GstDvdSubDec * dec, GstEvent * event)
+{
+  GstStructure *structure;
+  const gchar *event_name;
+
+  structure = (GstStructure *) gst_event_get_structure (event);
+
+  if (structure == NULL)
+    goto not_handled;
+
+  event_name = gst_structure_get_string (structure, "event");
+
+  GST_LOG_OBJECT (dec,
+      "DVD event %s with timestamp %" G_GINT64_FORMAT " on sub pad",
+      GST_STR_NULL (event_name), GST_EVENT_TIMESTAMP (event));
+
+  if (event_name == NULL)
+    goto not_handled;
+
+  if (strcmp (event_name, "dvd-spu-highlight") == 0) {
+    gint button;
+    gint palette, sx, sy, ex, ey;
+    gint i;
+
+    /* Details for the highlight region to display */
+    if (!gst_structure_get_int (structure, "button", &button) ||
+        !gst_structure_get_int (structure, "palette", &palette) ||
+        !gst_structure_get_int (structure, "sx", &sx) ||
+        !gst_structure_get_int (structure, "sy", &sy) ||
+        !gst_structure_get_int (structure, "ex", &ex) ||
+        !gst_structure_get_int (structure, "ey", &ey)) {
+      GST_ERROR_OBJECT (dec, "Invalid dvd-spu-highlight event received");
+      return TRUE;
+    }
+    dec->current_button = button;
+    dec->hl_left = sx;
+    dec->hl_top = sy;
+    dec->hl_right = ex;
+    dec->hl_bottom = ey;
+    for (i = 0; i < 4; i++) {
+      dec->menu_alpha[i] = ((guint32) (palette) >> (i * 4)) & 0x0f;
+      dec->menu_index[i] = ((guint32) (palette) >> (16 + (i * 4))) & 0x0f;
+    }
+
+    GST_DEBUG_OBJECT (dec, "New button activated highlight=(%d,%d) to (%d,%d) "
+        "palette 0x%x", sx, sy, ex, ey, palette);
+    gst_setup_palette (dec);
+
+    dec->buf_dirty = TRUE;
+  } else if (strcmp (event_name, "dvd-spu-clut-change") == 0) {
+    /* Take a copy of the colour table */
+    gchar name[16];
+    int i;
+    gint value;
+
+    GST_LOG_OBJECT (dec, "New colour table received");
+    for (i = 0; i < 16; i++) {
+      g_snprintf (name, sizeof (name), "clut%02d", i);
+      if (!gst_structure_get_int (structure, name, &value)) {
+        GST_ERROR_OBJECT (dec, "dvd-spu-clut-change event did not "
+            "contain %s field", name);
+        break;
+      }
+      dec->current_clut[i] = (guint32) (value);
+    }
+
+    gst_setup_palette (dec);
+
+    dec->buf_dirty = TRUE;
+  } else if (strcmp (event_name, "dvd-spu-stream-change") == 0
+      || strcmp (event_name, "dvd-spu-reset-highlight") == 0) {
+    /* Turn off forced highlight display */
+    dec->current_button = 0;
+
+    GST_LOG_OBJECT (dec, "Clearing button state");
+    dec->buf_dirty = TRUE;
+  } else if (strcmp (event_name, "dvd-spu-still-frame") == 0) {
+    /* Handle a still frame */
+    GST_LOG_OBJECT (dec, "Received still frame notification");
+  } else {
+    goto not_handled;
+  }
+
+  return TRUE;
+
+not_handled:
+  {
+    /* Ignore all other unknown events */
+    GST_LOG_OBJECT (dec, "Ignoring other custom event %" GST_PTR_FORMAT,
+        structure);
+    return FALSE;
+  }
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  gboolean ret = FALSE;
+
+  ret |= GST_ELEMENT_REGISTER (dvdsubdec, plugin);
+  ret |= GST_ELEMENT_REGISTER (dvdsubparse, plugin);
+
+  return ret;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    dvdsub,
+    "DVD subtitle parser and decoder", plugin_init,
+    VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
diff --git a/subprojects/gst-plugins-ugly/gst/dvdsub/gstdvdsubdec.h b/subprojects/gst-plugins-ugly/gst/dvdsub/gstdvdsubdec.h
new file mode 100644 (file)
index 0000000..0c69677
--- /dev/null
@@ -0,0 +1,111 @@
+/* GStreamer
+ * Copyright (C) <2005> Jan Schmidt <jan@fluendo.com>
+ * Copyright (C) <2002> Wim Taymans <wim@fluendo.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_DVDSUBDEC_H__
+#define __GST_DVDSUBDEC_H__
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_DVD_SUB_DEC             (gst_dvd_sub_dec_get_type())
+#define GST_DVD_SUB_DEC(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DVD_SUB_DEC,GstDvdSubDec))
+#define GST_DVD_SUB_DEC_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DVD_SUB_DEC,GstDvdSubDecClass))
+#define GST_IS_DVD_SUB_DEC(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DVD_SUB_DEC))
+#define GST_IS_DVD_SUB_DEC_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DVD_SUB_DEC))
+
+typedef struct _GstDvdSubDec GstDvdSubDec;
+typedef struct _GstDvdSubDecClass GstDvdSubDecClass;
+
+/* Hold premultimplied colour values */
+typedef struct Color_val
+{
+  guchar Y_R;
+  guchar U_G;
+  guchar V_B;
+  guchar A;
+
+} Color_val;
+
+struct _GstDvdSubDec
+{
+  GstElement element;
+
+  GstPad *sinkpad;
+  GstPad *srcpad;
+
+  gint in_width, in_height;
+
+  /* Collect together subtitle buffers until we have a full control sequence */
+  GstBuffer *partialbuf;
+  GstMapInfo partialmap;
+  gboolean have_title;
+
+  guchar subtitle_index[4];
+  guchar menu_index[4];
+  guchar subtitle_alpha[4];
+  guchar menu_alpha[4];
+
+  guint32 current_clut[16];
+  Color_val palette_cache_yuv[4];
+  Color_val hl_palette_cache_yuv[4];
+
+  Color_val palette_cache_rgb[4];
+  Color_val hl_palette_cache_rgb[4];
+
+  GstVideoInfo info;
+  gboolean use_ARGB;
+  GstClockTime next_ts;
+
+  /*
+   * State info for the current subpicture
+   * buffer
+   */
+  guchar *parse_pos;
+
+  guint16 packet_size;
+  guint16 data_size;
+
+  gint offset[2];
+
+  gboolean forced_display;
+  gboolean visible;
+
+  gint left, top, right, bottom;
+  gint hl_left, hl_top, hl_right, hl_bottom;
+
+  gint current_button;
+
+  GstClockTime next_event_ts;
+
+  gboolean buf_dirty;
+};
+
+struct _GstDvdSubDecClass
+{
+  GstElementClass parent_class;
+};
+
+GType gst_dvd_sub_dec_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (dvdsubdec);
+
+G_END_DECLS
+
+#endif /* __GST_DVDSUBDEC_H__ */
diff --git a/subprojects/gst-plugins-ugly/gst/dvdsub/gstdvdsubparse.c b/subprojects/gst-plugins-ugly/gst/dvdsub/gstdvdsubparse.c
new file mode 100644 (file)
index 0000000..9d0e1d0
--- /dev/null
@@ -0,0 +1,241 @@
+/* GStreamer DVD subtitle parser
+ * Copyright (C) 2007 Mark Nauwelaerts <mnauw@users.sourceforge.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <gst/gst.h>
+#include "gstdvdsubparse.h"
+
+GST_DEBUG_CATEGORY_STATIC (dvdsubparse_debug);
+#define GST_CAT_DEFAULT   dvdsubparse_debug
+
+static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("subpicture/x-dvd, parsed=(boolean)true")
+    );
+
+static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("subpicture/x-dvd")
+    );
+
+static void gst_dvd_sub_parse_finalize (GObject * object);
+
+static void gst_dvd_sub_parse_reset (GstDvdSubParse * parse);
+
+static gboolean gst_dvd_sub_parse_event (GstPad * pad, GstObject * parent,
+    GstEvent * event);
+static GstFlowReturn gst_dvd_sub_parse_chain (GstPad * pad, GstObject * parent,
+    GstBuffer * buf);
+
+static GstStateChangeReturn gst_dvd_sub_parse_change_state (GstElement *
+    element, GstStateChange transition);
+
+#define gst_dvd_sub_parse_parent_class parent_class
+G_DEFINE_TYPE (GstDvdSubParse, gst_dvd_sub_parse, GST_TYPE_ELEMENT);
+GST_ELEMENT_REGISTER_DEFINE (dvdsubparse, "dvdsubparse", GST_RANK_NONE,
+    GST_TYPE_DVD_SUB_PARSE);
+
+static void
+gst_dvd_sub_parse_class_init (GstDvdSubParseClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+
+  gobject_class->finalize = gst_dvd_sub_parse_finalize;
+
+  GST_DEBUG_CATEGORY_INIT (dvdsubparse_debug, "dvdsubparse", 0,
+      "DVD subtitle parser");
+
+  gstelement_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_dvd_sub_parse_change_state);
+
+  gst_element_class_add_static_pad_template (gstelement_class, &src_template);
+  gst_element_class_add_static_pad_template (gstelement_class, &sink_template);
+
+  gst_element_class_set_static_metadata (gstelement_class,
+      "DVD subtitle parser", "Codec/Parser/Subtitle",
+      "Parses and packetizes DVD subtitle streams",
+      "Mark Nauwelaerts <mnauw@users.sourceforge.net>");
+}
+
+static void
+gst_dvd_sub_parse_finalize (GObject * object)
+{
+  GstDvdSubParse *parse = GST_DVD_SUB_PARSE (object);
+
+  g_object_unref (parse->adapter);
+  parse->adapter = NULL;
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_dvd_sub_parse_init (GstDvdSubParse * parse)
+{
+  parse->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink");
+  gst_pad_set_chain_function (parse->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_dvd_sub_parse_chain));
+  gst_pad_set_event_function (parse->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_dvd_sub_parse_event));
+  gst_element_add_pad (GST_ELEMENT (parse), parse->sinkpad);
+
+  parse->srcpad = gst_pad_new_from_static_template (&src_template, "src");
+  gst_pad_use_fixed_caps (parse->srcpad);
+  gst_pad_set_caps (parse->srcpad,
+      gst_static_pad_template_get_caps (&src_template));
+  gst_element_add_pad (GST_ELEMENT (parse), parse->srcpad);
+
+  /* remainder */
+  parse->adapter = gst_adapter_new ();
+  gst_dvd_sub_parse_reset (parse);
+}
+
+static void
+gst_dvd_sub_parse_reset (GstDvdSubParse * parse)
+{
+  parse->needed = 0;
+  parse->stamp = GST_CLOCK_TIME_NONE;
+  gst_adapter_clear (parse->adapter);
+}
+
+static gboolean
+gst_dvd_sub_parse_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  GstDvdSubParse *parse;
+  gboolean ret;
+
+  parse = GST_DVD_SUB_PARSE (parent);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_unref (event);
+      caps = gst_static_pad_template_get_caps (&src_template);
+      gst_pad_push_event (parse->srcpad, gst_event_new_caps (caps));
+      gst_caps_unref (caps);
+      ret = TRUE;
+      break;
+    }
+    case GST_EVENT_FLUSH_STOP:
+      gst_dvd_sub_parse_reset (parse);
+      /* fall-through */
+    default:
+      ret = gst_pad_event_default (pad, parent, event);
+      break;
+  }
+
+  return ret;
+}
+
+
+static GstFlowReturn
+gst_dvd_sub_parse_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+{
+  GstDvdSubParse *parse = GST_DVD_SUB_PARSE (parent);
+  GstAdapter *adapter;
+  GstBuffer *outbuf = NULL;
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  adapter = parse->adapter;
+
+  GST_LOG_OBJECT (parse, "%" G_GSIZE_FORMAT " bytes, ts: %" GST_TIME_FORMAT,
+      gst_buffer_get_size (buf), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
+
+  gst_adapter_push (adapter, buf);
+
+  if (!parse->needed) {
+    guint8 data[2];
+
+    gst_adapter_copy (adapter, data, 0, 2);
+    parse->needed = GST_READ_UINT16_BE (data);
+  }
+
+  if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
+    if (GST_CLOCK_TIME_IS_VALID (parse->stamp))
+      /* normally, we expect only the first fragment to carry a timestamp */
+      GST_WARNING_OBJECT (parse, "Received more timestamps than expected.");
+    else
+      parse->stamp = GST_BUFFER_TIMESTAMP (buf);
+  }
+
+  if (parse->needed) {
+    guint av;
+
+    av = gst_adapter_available (adapter);
+    if (av >= parse->needed) {
+      if (av > parse->needed) {
+        /* normally, we expect several fragment, boundary aligned */
+        GST_WARNING_OBJECT (parse, "Unexpected: needed %d, "
+            "but more (%d) is available.", parse->needed, av);
+      }
+      outbuf = gst_adapter_take_buffer (adapter, parse->needed);
+      /* decorate buffer */
+      GST_BUFFER_TIMESTAMP (outbuf) = parse->stamp;
+      /* reset state */
+      parse->stamp = GST_CLOCK_TIME_NONE;
+      parse->needed = 0;
+      /* and send along */
+      ret = gst_pad_push (parse->srcpad, outbuf);
+    }
+  }
+
+  return ret;
+}
+
+static GstStateChangeReturn
+gst_dvd_sub_parse_change_state (GstElement * element, GstStateChange transition)
+{
+  GstDvdSubParse *parse = GST_DVD_SUB_PARSE (element);
+  GstStateChangeReturn ret;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+  if (ret != GST_STATE_CHANGE_SUCCESS)
+    return ret;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      gst_dvd_sub_parse_reset (parse);
+      break;
+    default:
+      break;
+  }
+
+  return GST_STATE_CHANGE_SUCCESS;
+}
diff --git a/subprojects/gst-plugins-ugly/gst/dvdsub/gstdvdsubparse.h b/subprojects/gst-plugins-ugly/gst/dvdsub/gstdvdsubparse.h
new file mode 100644 (file)
index 0000000..0df1ad0
--- /dev/null
@@ -0,0 +1,66 @@
+/* GStreamer DVD subtitle parser
+ * Copyright (C) 2007 Mark Nauwelaerts <mnauw@users.sourceforge.net>
+ *
+ * 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_DVDSUBPARSE_H__
+#define __GST_DVDSUBPARSE_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstadapter.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_DVD_SUB_PARSE \
+  (gst_dvd_sub_parse_get_type())
+#define GST_DVD_SUB_PARSE(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_DVD_SUB_PARSE, GstDvdSubParse))
+#define GST_DVD_SUB_PARSE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_DVD_SUB_PARSE, GstDvdSubParseClass))
+#define GST_DVD_SUB_PARSE_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS((obj), GST_TYPE_DVD_SUB_PARSE, GstDvdSubParseClass))
+#define GST_IS_DVD_SUB_PARSE(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_DVD_SUB_PARSE))
+#define GST_IS_DVD_SUB_PARSE_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_DVD_SUB_PARSE))
+
+typedef struct _GstDvdSubParse GstDvdSubParse;
+typedef struct _GstDvdSubParseClass GstDvdSubParseClass;
+
+struct _GstDvdSubParse {
+  GstElement element;
+
+  /*< private >*/
+  GstPad       *srcpad;
+  GstPad       *sinkpad;
+
+  GstAdapter   *adapter;   /* buffer incoming data                   */
+  GstClockTime  stamp;     /* timestamp of current packet            */
+  guint         needed;    /* size of current packet to be assembled */
+};
+
+struct _GstDvdSubParseClass {
+  GstElementClass parent_class;
+};
+
+GType gst_dvd_sub_parse_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (dvdsubparse);
+
+G_END_DECLS
+
+#endif /* __GST_DVDSUBPARSE_H__ */
+
diff --git a/subprojects/gst-plugins-ugly/gst/dvdsub/meson.build b/subprojects/gst-plugins-ugly/gst/dvdsub/meson.build
new file mode 100644 (file)
index 0000000..827fb4e
--- /dev/null
@@ -0,0 +1,15 @@
+dvdsub_sources = [
+  'gstdvdsubdec.c',
+  'gstdvdsubparse.c',
+]
+
+gstdvdsub = library('gstdvdsub',
+  dvdsub_sources,
+  c_args : ugly_args,
+  include_directories : [configinc],
+  dependencies : [gstbase_dep, gstvideo_dep],
+  install : true,
+  install_dir : plugins_install_dir,
+)
+pkgconfig.generate(gstdvdsub, install_dir : plugins_pkgconfig_install_dir)
+plugins += [gstdvdsub]
diff --git a/subprojects/gst-plugins-ugly/gst/meson.build b/subprojects/gst-plugins-ugly/gst/meson.build
new file mode 100644 (file)
index 0000000..19e7d2a
--- /dev/null
@@ -0,0 +1,5 @@
+foreach plugin : ['asfdemux', 'dvdlpcmdec', 'dvdsub', 'realmedia', 'xingmux']
+  if not get_option(plugin).disabled()
+    subdir(plugin)
+  endif
+endforeach
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/asmrules.c b/subprojects/gst-plugins-ugly/gst/realmedia/asmrules.c
new file mode 100644 (file)
index 0000000..af2f8a0
--- /dev/null
@@ -0,0 +1,712 @@
+/* GStreamer
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <string.h>
+#include <stdlib.h>
+
+#include "asmrules.h"
+
+#define MAX_RULE_LENGTH        2048
+
+/* define to enable some more debug */
+#undef DEBUG
+
+static GstASMNode *
+gst_asm_node_new (void)
+{
+  GstASMNode *node;
+
+  node = g_new0 (GstASMNode, 1);
+  node->type = GST_ASM_NODE_UNKNOWN;
+
+  return node;
+}
+
+static void
+gst_asm_node_free (GstASMNode * node)
+{
+  if (node->left)
+    gst_asm_node_free (node->left);
+  if (node->right)
+    gst_asm_node_free (node->right);
+  if (node->type == GST_ASM_NODE_VARIABLE && node->data.varname)
+    g_free (node->data.varname);
+  g_free (node);
+}
+
+static gfloat
+gst_asm_operator_eval (GstASMOp optype, gfloat left, gfloat right)
+{
+  gfloat result = 0.0;
+
+  switch (optype) {
+    case GST_ASM_OP_GREATER:
+      result = (gfloat) (left > right);
+      break;
+    case GST_ASM_OP_LESS:
+      result = (gfloat) (left < right);
+      break;
+    case GST_ASM_OP_GREATEREQUAL:
+      result = (gfloat) (left >= right);
+      break;
+    case GST_ASM_OP_LESSEQUAL:
+      result = (gfloat) (left <= right);
+      break;
+    case GST_ASM_OP_EQUAL:
+      result = (gfloat) (left == right);
+      break;
+    case GST_ASM_OP_NOTEQUAL:
+      result = (gfloat) (left != right);
+      break;
+    case GST_ASM_OP_AND:
+      result = (gfloat) (left && right);
+      break;
+    case GST_ASM_OP_OR:
+      result = (gfloat) (left || right);
+      break;
+    default:
+      break;
+  }
+  return result;
+}
+
+static gfloat
+gst_asm_node_evaluate (GstASMNode * node, GHashTable * vars)
+{
+  gfloat result = 0.0;
+
+  if (node == NULL)
+    return 0.0;
+
+  switch (node->type) {
+    case GST_ASM_NODE_VARIABLE:
+    {
+      gchar *val;
+
+      val = g_hash_table_lookup (vars, node->data.varname);
+      if (val)
+        result = (gfloat) atof (val);
+      break;
+    }
+    case GST_ASM_NODE_INTEGER:
+      result = (gfloat) node->data.intval;
+      break;
+    case GST_ASM_NODE_FLOAT:
+      result = node->data.floatval;
+      break;
+    case GST_ASM_NODE_OPERATOR:
+    {
+      gfloat left, right;
+
+      left = gst_asm_node_evaluate (node->left, vars);
+      right = gst_asm_node_evaluate (node->right, vars);
+
+      result = gst_asm_operator_eval (node->data.optype, left, right);
+      break;
+    }
+    default:
+      break;
+  }
+  return result;
+}
+
+#define IS_SPACE(p) (((p) == ' ') || ((p) == '\n') || \
+                     ((p) == '\r') || ((p) == '\t'))
+#define IS_RULE_DELIM(p) (((p) == ',') || ((p) == ';') || ((p) == ')'))
+#define IS_OPERATOR(p) (((p) == '>') || ((p) == '<') || \
+                        ((p) == '=') || ((p) == '!') || \
+                        ((p) == '&') || ((p) == '|'))
+#define IS_NUMBER(p) ((((p) >= '0') && ((p) <= '9')) || ((p) == '.'))
+#define IS_CHAR(p) (!IS_OPERATOR(ch) && !IS_RULE_DELIM(ch) && (ch != '\0'))
+
+#define IS_OP_TOKEN(t) (((t) == GST_ASM_TOKEN_AND) || ((t) == GST_ASM_TOKEN_OR))
+#define IS_COND_TOKEN(t) (((t) == GST_ASM_TOKEN_LESS) || ((t) == GST_ASM_TOKEN_LESSEQUAL) || \
+               ((t) == GST_ASM_TOKEN_GREATER) || ((t) == GST_ASM_TOKEN_GREATEREQUAL) || \
+               ((t) == GST_ASM_TOKEN_EQUAL) || ((t) == GST_ASM_TOKEN_NOTEQUAL))
+
+typedef struct
+{
+  const gchar *buffer;
+  gint pos;
+  gchar ch;
+
+  GstASMToken token;
+  gchar val[MAX_RULE_LENGTH];
+} GstASMScan;
+
+#define NEXT_CHAR(scan) ((scan)->ch = (scan)->buffer[(scan)->pos++])
+#define THIS_CHAR(scan) ((scan)->ch)
+
+static GstASMScan *
+gst_asm_scan_new (const gchar * buffer)
+{
+  GstASMScan *scan;
+
+  scan = g_new0 (GstASMScan, 1);
+  scan->buffer = buffer;
+  NEXT_CHAR (scan);
+
+  return scan;
+}
+
+static void
+gst_asm_scan_free (GstASMScan * scan)
+{
+  g_free (scan);
+}
+
+static void
+gst_asm_scan_string (GstASMScan * scan, gchar delim)
+{
+  gchar ch;
+  gint i = 0;
+
+  ch = THIS_CHAR (scan);
+  while ((ch != delim) && (ch != '\0')) {
+    if (i < MAX_RULE_LENGTH - 1)
+      scan->val[i++] = ch;
+    ch = NEXT_CHAR (scan);
+    if (ch == '\\')
+      ch = NEXT_CHAR (scan);
+  }
+  scan->val[i] = '\0';
+
+  if (ch == delim)
+    NEXT_CHAR (scan);
+
+  scan->token = GST_ASM_TOKEN_STRING;
+}
+
+static void
+gst_asm_scan_number (GstASMScan * scan)
+{
+  gchar ch;
+  gint i = 0;
+  gboolean have_float = FALSE;
+
+  ch = THIS_CHAR (scan);
+  /* real strips all spaces that are not inside quotes for numbers */
+  while ((IS_NUMBER (ch) || IS_SPACE (ch))) {
+    if (i < (MAX_RULE_LENGTH - 1) && !IS_SPACE (ch))
+      scan->val[i++] = ch;
+    if (ch == '.')
+      have_float = TRUE;
+    ch = NEXT_CHAR (scan);
+  }
+  scan->val[i] = '\0';
+
+  if (have_float)
+    scan->token = GST_ASM_TOKEN_FLOAT;
+  else
+    scan->token = GST_ASM_TOKEN_INT;
+}
+
+static void
+gst_asm_scan_identifier (GstASMScan * scan)
+{
+  gchar ch;
+  gint i = 0;
+
+  ch = THIS_CHAR (scan);
+  /* real strips all spaces that are not inside quotes for identifiers */
+  while ((IS_CHAR (ch) || IS_SPACE (ch))) {
+    if (i < (MAX_RULE_LENGTH - 1) && !IS_SPACE (ch))
+      scan->val[i++] = ch;
+    ch = NEXT_CHAR (scan);
+  }
+  scan->val[i] = '\0';
+
+  scan->token = GST_ASM_TOKEN_IDENTIFIER;
+}
+
+static void
+gst_asm_scan_print_token (GstASMScan * scan)
+{
+#ifdef DEBUG
+  switch (scan->token) {
+    case GST_ASM_TOKEN_NONE:
+      g_print ("none\n");
+      break;
+    case GST_ASM_TOKEN_EOF:
+      g_print ("EOF\n");
+      break;
+
+    case GST_ASM_TOKEN_INT:
+      g_print ("INT %d\n", atoi (scan->val));
+      break;
+    case GST_ASM_TOKEN_FLOAT:
+      g_print ("FLOAT %f\n", atof (scan->val));
+      break;
+    case GST_ASM_TOKEN_IDENTIFIER:
+      g_print ("ID %s\n", scan->val);
+      break;
+    case GST_ASM_TOKEN_STRING:
+      g_print ("STRING %s\n", scan->val);
+      break;
+
+    case GST_ASM_TOKEN_HASH:
+      g_print ("HASH\n");
+      break;
+    case GST_ASM_TOKEN_SEMICOLON:
+      g_print ("SEMICOLON\n");
+      break;
+    case GST_ASM_TOKEN_COMMA:
+      g_print ("COMMA\n");
+      break;
+    case GST_ASM_TOKEN_EQUAL:
+      g_print ("==\n");
+      break;
+    case GST_ASM_TOKEN_NOTEQUAL:
+      g_print ("!=\n");
+      break;
+    case GST_ASM_TOKEN_AND:
+      g_print ("&&\n");
+      break;
+    case GST_ASM_TOKEN_OR:
+      g_print ("||\n");
+      break;
+    case GST_ASM_TOKEN_LESS:
+      g_print ("<\n");
+      break;
+    case GST_ASM_TOKEN_LESSEQUAL:
+      g_print ("<=\n");
+      break;
+    case GST_ASM_TOKEN_GREATER:
+      g_print (">\n");
+      break;
+    case GST_ASM_TOKEN_GREATEREQUAL:
+      g_print (">=\n");
+      break;
+    case GST_ASM_TOKEN_DOLLAR:
+      g_print ("$\n");
+      break;
+    case GST_ASM_TOKEN_LPAREN:
+      g_print ("(\n");
+      break;
+    case GST_ASM_TOKEN_RPAREN:
+      g_print (")\n");
+      break;
+    default:
+      break;
+  }
+#endif
+}
+
+static GstASMToken
+gst_asm_scan_next_token (GstASMScan * scan)
+{
+  gchar ch;
+
+  ch = THIS_CHAR (scan);
+
+  /* skip spaces */
+  while (IS_SPACE (ch))
+    ch = NEXT_CHAR (scan);
+
+  /* remove \ which is common in front of " */
+  while (ch == '\\')
+    ch = NEXT_CHAR (scan);
+
+  switch (ch) {
+    case '#':
+      scan->token = GST_ASM_TOKEN_HASH;
+      NEXT_CHAR (scan);
+      break;
+    case ';':
+      scan->token = GST_ASM_TOKEN_SEMICOLON;
+      NEXT_CHAR (scan);
+      break;
+    case ',':
+      scan->token = GST_ASM_TOKEN_COMMA;
+      NEXT_CHAR (scan);
+      break;
+    case '=':
+      scan->token = GST_ASM_TOKEN_EQUAL;
+      if (NEXT_CHAR (scan) == '=')
+        NEXT_CHAR (scan);
+      break;
+    case '!':
+      if (NEXT_CHAR (scan) == '=') {
+        scan->token = GST_ASM_TOKEN_NOTEQUAL;
+        NEXT_CHAR (scan);
+      }
+      break;
+    case '&':
+      scan->token = GST_ASM_TOKEN_AND;
+      if (NEXT_CHAR (scan) == '&')
+        NEXT_CHAR (scan);
+      break;
+    case '|':
+      scan->token = GST_ASM_TOKEN_OR;
+      if (NEXT_CHAR (scan) == '|')
+        NEXT_CHAR (scan);
+      break;
+    case '<':
+      scan->token = GST_ASM_TOKEN_LESS;
+      if (NEXT_CHAR (scan) == '=') {
+        scan->token = GST_ASM_TOKEN_LESSEQUAL;
+        NEXT_CHAR (scan);
+      }
+      break;
+    case '>':
+      scan->token = GST_ASM_TOKEN_GREATER;
+      if (NEXT_CHAR (scan) == '=') {
+        scan->token = GST_ASM_TOKEN_GREATEREQUAL;
+        NEXT_CHAR (scan);
+      }
+      break;
+    case '$':
+      scan->token = GST_ASM_TOKEN_DOLLAR;
+      NEXT_CHAR (scan);
+      break;
+    case '(':
+      scan->token = GST_ASM_TOKEN_LPAREN;
+      NEXT_CHAR (scan);
+      break;
+    case ')':
+      scan->token = GST_ASM_TOKEN_RPAREN;
+      NEXT_CHAR (scan);
+      break;
+    case '"':
+      NEXT_CHAR (scan);
+      gst_asm_scan_string (scan, '"');
+      break;
+    case '\'':
+      NEXT_CHAR (scan);
+      gst_asm_scan_string (scan, '\'');
+      break;
+    case '0':
+    case '1':
+    case '2':
+    case '3':
+    case '4':
+    case '5':
+    case '6':
+    case '7':
+    case '8':
+    case '9':
+      gst_asm_scan_number (scan);
+      break;
+    case '\0':
+      scan->token = GST_ASM_TOKEN_EOF;
+      break;
+    default:
+      gst_asm_scan_identifier (scan);
+      break;
+  }
+  gst_asm_scan_print_token (scan);
+  return scan->token;
+}
+
+static GstASMRule *
+gst_asm_rule_new (void)
+{
+  GstASMRule *rule;
+
+  rule = g_new (GstASMRule, 1);
+  rule->root = NULL;
+  rule->props = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+
+  return rule;
+}
+
+static void
+gst_asm_rule_free (GstASMRule * rule)
+{
+  g_hash_table_destroy (rule->props);
+  if (rule->root)
+    gst_asm_node_free (rule->root);
+  g_free (rule);
+}
+
+static void
+gst_asm_rule_add_property (GstASMRule * rule, gchar * key, gchar * val)
+{
+  g_hash_table_insert (rule->props, key, val);
+}
+
+static GstASMNode *gst_asm_scan_parse_condition (GstASMScan * scan);
+
+static GstASMNode *
+gst_asm_scan_parse_operand (GstASMScan * scan)
+{
+  GstASMNode *node;
+
+  switch (scan->token) {
+    case GST_ASM_TOKEN_DOLLAR:
+      gst_asm_scan_next_token (scan);
+
+      if (scan->token != GST_ASM_TOKEN_IDENTIFIER)
+        g_warning ("identifier expected");
+
+      node = gst_asm_node_new ();
+      node->type = GST_ASM_NODE_VARIABLE;
+      node->data.varname = g_strdup (scan->val);
+      break;
+    case GST_ASM_TOKEN_INT:
+      node = gst_asm_node_new ();
+      node->type = GST_ASM_NODE_INTEGER;
+      node->data.intval = (gfloat) atof (scan->val);
+      break;
+    case GST_ASM_TOKEN_FLOAT:
+      node = gst_asm_node_new ();
+      node->type = GST_ASM_NODE_FLOAT;
+      node->data.floatval = atoi (scan->val);
+      break;
+    case GST_ASM_TOKEN_LPAREN:
+      gst_asm_scan_next_token (scan);
+      node = gst_asm_scan_parse_condition (scan);
+      if (scan->token != GST_ASM_TOKEN_RPAREN)
+        g_warning (") expected");
+      break;
+    default:
+      g_warning ("$ <number> or ) expected");
+      node = NULL;
+      break;
+  }
+  gst_asm_scan_next_token (scan);
+
+  return node;
+}
+
+static GstASMNode *
+gst_asm_scan_parse_expression (GstASMScan * scan)
+{
+  GstASMNode *node, *left;
+
+  node = gst_asm_scan_parse_operand (scan);
+
+  while (IS_COND_TOKEN (scan->token)) {
+    left = node;
+
+    node = gst_asm_node_new ();
+    node->type = GST_ASM_NODE_OPERATOR;
+    node->data.optype = (GstASMOp) scan->token;
+
+    gst_asm_scan_next_token (scan);
+
+    node->right = gst_asm_scan_parse_operand (scan);
+    node->left = left;
+  }
+  return node;
+}
+
+static GstASMNode *
+gst_asm_scan_parse_condition (GstASMScan * scan)
+{
+  GstASMNode *node, *left;
+
+  node = gst_asm_scan_parse_expression (scan);
+
+  while (IS_OP_TOKEN (scan->token)) {
+    left = node;
+
+    node = gst_asm_node_new ();
+    node->type = GST_ASM_NODE_OPERATOR;
+    node->data.optype = (GstASMOp) scan->token;
+
+    gst_asm_scan_next_token (scan);
+
+    node->right = gst_asm_scan_parse_expression (scan);
+    node->left = left;
+  }
+  return node;
+}
+
+static void
+gst_asm_scan_parse_property (GstASMRule * rule, GstASMScan * scan)
+{
+  gchar *key, *val;
+
+  if (scan->token != GST_ASM_TOKEN_IDENTIFIER) {
+    g_warning ("identifier expected");
+    return;
+  }
+  key = g_strdup (scan->val);
+
+  gst_asm_scan_next_token (scan);
+  if (scan->token != GST_ASM_TOKEN_EQUAL) {
+    g_warning ("= expected");
+    g_free (key);
+    return;
+  }
+  gst_asm_scan_next_token (scan);
+  val = g_strdup (scan->val);
+
+  gst_asm_rule_add_property (rule, key, val);
+  gst_asm_scan_next_token (scan);
+}
+
+static GstASMRule *
+gst_asm_scan_parse_rule (GstASMScan * scan)
+{
+  GstASMRule *rule;
+
+  rule = gst_asm_rule_new ();
+
+  if (scan->token == GST_ASM_TOKEN_HASH) {
+    gst_asm_scan_next_token (scan);
+    rule->root = gst_asm_scan_parse_condition (scan);
+    if (scan->token == GST_ASM_TOKEN_COMMA)
+      gst_asm_scan_next_token (scan);
+  }
+
+  if (scan->token != GST_ASM_TOKEN_SEMICOLON) {
+    gst_asm_scan_parse_property (rule, scan);
+    while (scan->token == GST_ASM_TOKEN_COMMA) {
+      gst_asm_scan_next_token (scan);
+      gst_asm_scan_parse_property (rule, scan);
+    }
+    gst_asm_scan_next_token (scan);
+  }
+  return rule;
+}
+
+static gboolean
+gst_asm_rule_evaluate (GstASMRule * rule, GHashTable * vars)
+{
+  gboolean res;
+
+  if (rule->root) {
+    res = (gboolean) gst_asm_node_evaluate (rule->root, vars);
+  } else
+    res = TRUE;
+
+  return res;
+}
+
+GstASMRuleBook *
+gst_asm_rule_book_new (const gchar * rulebook)
+{
+  GstASMRuleBook *book;
+  GstASMRule *rule = NULL;
+  GstASMScan *scan;
+  GstASMToken token;
+
+  book = g_new0 (GstASMRuleBook, 1);
+  book->rulebook = rulebook;
+
+  scan = gst_asm_scan_new (book->rulebook);
+  gst_asm_scan_next_token (scan);
+
+  do {
+    rule = gst_asm_scan_parse_rule (scan);
+    if (rule) {
+      book->rules = g_list_append (book->rules, rule);
+      book->n_rules++;
+    }
+    token = scan->token;
+  } while (token != GST_ASM_TOKEN_EOF);
+
+  gst_asm_scan_free (scan);
+
+  return book;
+}
+
+void
+gst_asm_rule_book_free (GstASMRuleBook * book)
+{
+  GList *walk;
+
+  for (walk = book->rules; walk; walk = g_list_next (walk)) {
+    GstASMRule *rule = (GstASMRule *) walk->data;
+
+    gst_asm_rule_free (rule);
+  }
+  g_list_free (book->rules);
+  g_free (book);
+}
+
+gint
+gst_asm_rule_book_match (GstASMRuleBook * book, GHashTable * vars,
+    gint * rulematches)
+{
+  GList *walk;
+  gint i, n = 0;
+
+  for (walk = book->rules, i = 0; walk; walk = g_list_next (walk), i++) {
+    GstASMRule *rule = (GstASMRule *) walk->data;
+
+    if (gst_asm_rule_evaluate (rule, vars)) {
+      rulematches[n++] = i;
+    }
+  }
+  return n;
+}
+
+#ifdef TEST
+gint
+main (gint argc, gchar * argv[])
+{
+  GstASMRuleBook *book;
+  gint rulematch[MAX_RULEMATCHES];
+  GHashTable *vars;
+  gint i, n;
+
+  static const gchar rules1[] =
+      "#($Bandwidth < 67959),TimestampDelivery=T,DropByN=T,"
+      "priority=9;#($Bandwidth >= 67959) && ($Bandwidth < 167959),"
+      "AverageBandwidth=67959,Priority=9;#($Bandwidth >= 67959) && ($Bandwidth"
+      " < 167959),AverageBandwidth=0,Priority=5,OnDepend=\\\"1\\\";#($Bandwidth >= 167959)"
+      " && ($Bandwidth < 267959),AverageBandwidth=167959,Priority=9;#($Bandwidth >= 167959)"
+      " && ($Bandwidth < 267959),AverageBandwidth=0,Priority=5,OnDepend=\\\"3\\\";"
+      "#($Bandwidth >= 267959),AverageBandwidth=267959,Priority=9;#($Bandwidth >= 267959)"
+      ",AverageBandwidth=0,Priority=5,OnDepend=\\\"5\\\";";
+  static const gchar rules2[] =
+      "AverageBandwidth=32041,Priority=5;AverageBandwidth=0,"
+      "Priority=5,OnDepend=\\\"0\\\", OffDepend=\\\"0\\\";";
+  static const gchar rules3[] =
+      "#(($Bandwidth >= 27500) && ($OldPNMPlayer)),AverageBandwidth=27500,priority=9,PNMKeyframeRule=T;#(($Bandwidth >= 27500) && ($OldPNMPlayer)),AverageBandwidth=0,priority=5,PNMNonKeyframeRule=T;#(($Bandwidth < 27500) && ($OldPNMPlayer)),TimestampDelivery=T,DropByN=T,priority=9,PNMThinningRule=T;#($Bandwidth < 13899),TimestampDelivery=T,DropByN=T,priority=9;#($Bandwidth >= 13899) && ($Bandwidth < 19000),AverageBandwidth=13899,Priority=9;#($Bandwidth >= 13899) && ($Bandwidth < 19000),AverageBandwidth=0,Priority=5,OnDepend=\\\"4\\\";#($Bandwidth >= 19000) && ($Bandwidth < 27500),AverageBandwidth=19000,Priority=9;#($Bandwidth >= 19000) && ($Bandwidth < 27500),AverageBandwidth=0,Priority=5,OnDepend=\\\"6\\\";#($Bandwidth >= 27500) && ($Bandwidth < 132958),AverageBandwidth=27500,Priority=9;#($Bandwidth >= 27500) && ($Bandwidth < 132958),AverageBandwidth=0,Priority=5,OnDepend=\\\"8\\\";#($Bandwidth >= 132958) && ($Bandwidth < 187958),AverageBandwidth=132958,Priority=9;#($Bandwidth >= 132958) && ($Bandwidth < 187958),AverageBandwidth=0,Priority=5,OnDepend=\\\"10\\\";#($Bandwidth >= 187958),AverageBandwidth=187958,Priority=9;#($Bandwidth >= 187958),AverageBandwidth=0,Priority=5,OnDepend=\\\"12\\\";";
+
+  vars = g_hash_table_new (g_str_hash, g_str_equal);
+  g_hash_table_insert (vars, (gchar *) "Bandwidth", (gchar *) "300000");
+
+  book = gst_asm_rule_book_new (rules1);
+  n = gst_asm_rule_book_match (book, vars, rulematch);
+  gst_asm_rule_book_free (book);
+
+  g_print ("%d rules matched\n", n);
+  for (i = 0; i < n; i++) {
+    g_print ("rule %d matched\n", rulematch[i]);
+  }
+
+  book = gst_asm_rule_book_new (rules2);
+  n = gst_asm_rule_book_match (book, vars, rulematch);
+  gst_asm_rule_book_free (book);
+
+  g_print ("%d rules matched\n", n);
+  for (i = 0; i < n; i++) {
+    g_print ("rule %d matched\n", rulematch[i]);
+  }
+
+  book = gst_asm_rule_book_new (rules3);
+  n = gst_asm_rule_book_match (book, vars, rulematch);
+  gst_asm_rule_book_free (book);
+
+
+  g_print ("%d rules matched\n", n);
+  for (i = 0; i < n; i++) {
+    g_print ("rule %d matched\n", rulematch[i]);
+  }
+
+  g_hash_table_destroy (vars);
+
+  return 0;
+}
+#endif
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/asmrules.h b/subprojects/gst-plugins-ugly/gst/realmedia/asmrules.h
new file mode 100644 (file)
index 0000000..1f84f68
--- /dev/null
@@ -0,0 +1,115 @@
+/* GStreamer
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.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_ASM_RULES_H__
+#define __GST_ASM_RULES_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define MAX_RULEMATCHES 16
+
+typedef struct _GstASMNode GstASMNode;
+typedef struct _GstASMRule GstASMRule;
+typedef struct _GstASMRuleBook GstASMRuleBook;
+
+typedef enum {
+  GST_ASM_TOKEN_NONE,
+  GST_ASM_TOKEN_EOF,
+
+  GST_ASM_TOKEN_INT,
+  GST_ASM_TOKEN_FLOAT,
+  GST_ASM_TOKEN_IDENTIFIER,
+  GST_ASM_TOKEN_STRING,
+  
+  GST_ASM_TOKEN_HASH,
+  GST_ASM_TOKEN_SEMICOLON,
+  GST_ASM_TOKEN_COMMA,
+  GST_ASM_TOKEN_DOLLAR,
+
+  GST_ASM_TOKEN_LPAREN,
+  GST_ASM_TOKEN_RPAREN,
+
+  GST_ASM_TOKEN_GREATER,
+  GST_ASM_TOKEN_LESS,
+  GST_ASM_TOKEN_GREATEREQUAL,
+  GST_ASM_TOKEN_LESSEQUAL,
+  GST_ASM_TOKEN_EQUAL,
+  GST_ASM_TOKEN_NOTEQUAL,
+
+  GST_ASM_TOKEN_AND,
+  GST_ASM_TOKEN_OR
+} GstASMToken;
+
+typedef enum {
+  GST_ASM_NODE_UNKNOWN,
+  GST_ASM_NODE_VARIABLE,
+  GST_ASM_NODE_INTEGER,
+  GST_ASM_NODE_FLOAT,
+  GST_ASM_NODE_OPERATOR
+} GstASMNodeType;
+
+typedef enum {
+  GST_ASM_OP_GREATER      = GST_ASM_TOKEN_GREATER,
+  GST_ASM_OP_LESS         = GST_ASM_TOKEN_LESS,
+  GST_ASM_OP_GREATEREQUAL = GST_ASM_TOKEN_GREATEREQUAL,
+  GST_ASM_OP_LESSEQUAL    = GST_ASM_TOKEN_LESSEQUAL,
+  GST_ASM_OP_EQUAL        = GST_ASM_TOKEN_EQUAL,
+  GST_ASM_OP_NOTEQUAL     = GST_ASM_TOKEN_NOTEQUAL,
+
+  GST_ASM_OP_AND          = GST_ASM_TOKEN_AND,
+  GST_ASM_OP_OR           = GST_ASM_TOKEN_OR
+} GstASMOp;
+
+struct _GstASMNode {
+  GstASMNodeType  type;
+
+  union {
+    gchar   *varname;
+    gint     intval;
+    gfloat   floatval;
+    GstASMOp optype;
+  } data;
+
+  GstASMNode     *left;
+  GstASMNode     *right;
+};
+
+struct _GstASMRule {
+  GstASMNode *root;
+  GHashTable *props;
+};
+
+struct _GstASMRuleBook {
+  const gchar *rulebook;
+
+  guint        n_rules;
+  GList       *rules;
+};
+
+G_END_DECLS
+
+GstASMRuleBook*   gst_asm_rule_book_new     (const gchar *rulebook);
+void              gst_asm_rule_book_free    (GstASMRuleBook *book);
+
+gint              gst_asm_rule_book_match   (GstASMRuleBook *book, GHashTable *vars, 
+                                            gint *rulematches);
+
+#endif /* __GST_ASM_RULES_H__ */
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/gstrdtbuffer.c b/subprojects/gst-plugins-ugly/gst/realmedia/gstrdtbuffer.c
new file mode 100644 (file)
index 0000000..50bc7f4
--- /dev/null
@@ -0,0 +1,477 @@
+/* GStreamer
+ * Copyright (C) <2008> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#include <string.h>
+
+#include "gstrdtbuffer.h"
+
+gboolean
+gst_rdt_buffer_validate_data (guint8 * data, guint len)
+{
+  return TRUE;
+}
+
+gboolean
+gst_rdt_buffer_validate (GstBuffer * buffer)
+{
+  return TRUE;
+}
+
+guint
+gst_rdt_buffer_get_packet_count (GstBuffer * buffer)
+{
+  GstRDTPacket packet;
+  guint count;
+
+  g_return_val_if_fail (GST_IS_BUFFER (buffer), 0);
+
+  count = 0;
+  if (gst_rdt_buffer_get_first_packet (buffer, &packet)) {
+    do {
+      count++;
+    } while (gst_rdt_packet_move_to_next (&packet));
+  }
+  return count;
+}
+
+static gboolean
+read_packet_header (GstRDTPacket * packet)
+{
+  GstMapInfo map;
+  guint8 *data;
+  gsize size;
+  guint offset;
+  guint length;
+  guint length_offset;
+
+  g_return_val_if_fail (packet != NULL, FALSE);
+  g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
+
+  gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
+  data = map.data;
+  size = map.size;
+
+  offset = packet->offset;
+
+  /* check if we are at the end of the buffer, we add 3 because we also want to
+   * ensure we can read the type, which is always at offset 1 and 2 bytes long. */
+  if (offset + 3 > size)
+    goto packet_end;
+
+  /* read type */
+  packet->type = GST_READ_UINT16_BE (&data[offset + 1]);
+
+  length = -1;
+  length_offset = -1;
+
+  /* figure out the length of the packet, this depends on the type */
+  if (GST_RDT_IS_DATA_TYPE (packet->type)) {
+    if (data[offset] & 0x80)
+      /* length is present */
+      length_offset = 3;
+  } else {
+    switch (packet->type) {
+      case GST_RDT_TYPE_ASMACTION:
+        if (data[offset] & 0x80)
+          length_offset = 5;
+        break;
+      case GST_RDT_TYPE_BWREPORT:
+        if (data[offset] & 0x80)
+          length_offset = 3;
+        break;
+      case GST_RDT_TYPE_ACK:
+        if (data[offset] & 0x80)
+          length_offset = 3;
+        break;
+      case GST_RDT_TYPE_RTTREQ:
+        length = 3;
+        break;
+      case GST_RDT_TYPE_RTTRESP:
+        length = 11;
+        break;
+      case GST_RDT_TYPE_CONGESTION:
+        length = 11;
+        break;
+      case GST_RDT_TYPE_STREAMEND:
+        length = 9;
+        /* total_reliable */
+        if (data[offset] & 0x80)
+          length += 2;
+        /* stream_id_expansion */
+        if ((data[offset] & 0x7c) == 0x7c)
+          length += 2;
+        /* ext_flag, FIXME, get string length */
+        if ((data[offset] & 0x1) == 0x1)
+          length += 7;
+        break;
+      case GST_RDT_TYPE_REPORT:
+        if (data[offset] & 0x80)
+          length_offset = 3;
+        break;
+      case GST_RDT_TYPE_LATENCY:
+        if (data[offset] & 0x80)
+          length_offset = 3;
+        break;
+      case GST_RDT_TYPE_INFOREQ:
+        length = 3;
+        /* request_time_ms */
+        if (data[offset] & 0x2)
+          length += 2;
+        break;
+      case GST_RDT_TYPE_INFORESP:
+        length = 3;
+        /* has_rtt_info */
+        if (data[offset] & 0x4) {
+          length += 4;
+          /* is_delayed */
+          if (data[offset] & 0x2) {
+            length += 4;
+          }
+        }
+        if (data[offset] & 0x1) {
+          /* buffer_info_count, FIXME read and skip */
+          length += 2;
+        }
+        break;
+      case GST_RDT_TYPE_AUTOBW:
+        if (data[offset] & 0x80)
+          length_offset = 3;
+        break;
+      case GST_RDT_TYPE_INVALID:
+      default:
+        goto unknown_packet;
+    }
+  }
+
+  if (length != -1) {
+    /* we have a fixed length */
+    packet->length = length;
+  } else if (length_offset != -1) {
+    /* we can read the length from an offset */
+    packet->length = GST_READ_UINT16_BE (&data[length_offset]);
+  } else {
+    /* length is remainder of packet */
+    packet->length = size - offset;
+  }
+  gst_buffer_unmap (packet->buffer, &map);
+
+  /* the length should be smaller than the remaining size */
+  if (packet->length + offset > size)
+    goto invalid_length;
+
+  return TRUE;
+
+  /* ERRORS */
+packet_end:
+  {
+    gst_buffer_unmap (packet->buffer, &map);
+    return FALSE;
+  }
+unknown_packet:
+  {
+    packet->type = GST_RDT_TYPE_INVALID;
+    gst_buffer_unmap (packet->buffer, &map);
+    return FALSE;
+  }
+invalid_length:
+  {
+    packet->type = GST_RDT_TYPE_INVALID;
+    packet->length = 0;
+    return FALSE;
+  }
+}
+
+gboolean
+gst_rdt_buffer_get_first_packet (GstBuffer * buffer, GstRDTPacket * packet)
+{
+  g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE);
+  g_return_val_if_fail (packet != NULL, FALSE);
+
+  /* init to 0 */
+  packet->buffer = buffer;
+  packet->offset = 0;
+  packet->type = GST_RDT_TYPE_INVALID;
+  memset (&packet->map, 0, sizeof (GstMapInfo));
+
+  if (!read_packet_header (packet))
+    return FALSE;
+
+  return TRUE;
+}
+
+gboolean
+gst_rdt_packet_move_to_next (GstRDTPacket * packet)
+{
+  g_return_val_if_fail (packet != NULL, FALSE);
+  g_return_val_if_fail (packet->type != GST_RDT_TYPE_INVALID, FALSE);
+  g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
+
+  /* if we have an invalid packet, it must be the last, 
+   * return FALSE */
+  if (packet->type == GST_RDT_TYPE_INVALID)
+    goto end;
+
+  /* move to next packet */
+  packet->offset += packet->length;
+
+  /* try to read new header */
+  if (!read_packet_header (packet))
+    goto end;
+
+  return TRUE;
+
+  /* ERRORS */
+end:
+  {
+    packet->type = GST_RDT_TYPE_INVALID;
+    return FALSE;
+  }
+}
+
+GstRDTType
+gst_rdt_packet_get_type (GstRDTPacket * packet)
+{
+  g_return_val_if_fail (packet != NULL, GST_RDT_TYPE_INVALID);
+  g_return_val_if_fail (packet->type != GST_RDT_TYPE_INVALID,
+      GST_RDT_TYPE_INVALID);
+
+  return packet->type;
+}
+
+guint16
+gst_rdt_packet_get_length (GstRDTPacket * packet)
+{
+  g_return_val_if_fail (packet != NULL, 0);
+  g_return_val_if_fail (packet->type != GST_RDT_TYPE_INVALID, 0);
+
+  return packet->length;
+}
+
+GstBuffer *
+gst_rdt_packet_to_buffer (GstRDTPacket * packet)
+{
+  GstBuffer *result;
+
+  g_return_val_if_fail (packet != NULL, NULL);
+  g_return_val_if_fail (packet->type != GST_RDT_TYPE_INVALID, NULL);
+
+  result =
+      gst_buffer_copy_region (packet->buffer, GST_BUFFER_COPY_ALL,
+      packet->offset, packet->length);
+  /* timestamp applies to all packets in this buffer */
+  GST_BUFFER_TIMESTAMP (result) = GST_BUFFER_TIMESTAMP (packet->buffer);
+
+  return result;
+}
+
+gint
+gst_rdt_buffer_compare_seqnum (guint16 seqnum1, guint16 seqnum2)
+{
+  return (gint16) (seqnum2 - seqnum1);
+}
+
+guint16
+gst_rdt_packet_data_get_seq (GstRDTPacket * packet)
+{
+  GstMapInfo map;
+  guint header;
+  guint16 result;
+
+  g_return_val_if_fail (packet != NULL, FALSE);
+  g_return_val_if_fail (GST_RDT_IS_DATA_TYPE (packet->type), FALSE);
+
+  gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
+
+  /* skip header bits */
+  header = packet->offset + 1;
+
+  /* read seq_no */
+  result = GST_READ_UINT16_BE (&map.data[header]);
+
+  gst_buffer_unmap (packet->buffer, &map);
+
+  return result;
+}
+
+guint8 *
+gst_rdt_packet_data_map (GstRDTPacket * packet, guint * size)
+{
+  GstMapInfo map;
+  guint header;
+  gboolean length_included_flag;
+  gboolean need_reliable_flag;
+  guint8 stream_id;
+  guint8 asm_rule_number;
+
+  g_return_val_if_fail (packet != NULL, NULL);
+  g_return_val_if_fail (packet->map.data == NULL, NULL);
+  g_return_val_if_fail (GST_RDT_IS_DATA_TYPE (packet->type), NULL);
+
+  gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
+
+  header = packet->offset;
+
+  length_included_flag = (map.data[header] & 0x80) == 0x80;
+  need_reliable_flag = (map.data[header] & 0x40) == 0x40;
+  stream_id = (map.data[header] & 0x3e) >> 1;
+
+  /* skip seq_no and header bits */
+  header += 3;
+
+  if (length_included_flag) {
+    /* skip length */
+    header += 2;
+  }
+  asm_rule_number = (map.data[header] & 0x3f);
+
+  /* skip timestamp and asm_rule_number */
+  header += 5;
+
+  if (stream_id == 0x1f) {
+    /* skip stream_id_expansion */
+    header += 2;
+  }
+  if (need_reliable_flag) {
+    /* skip total_reliable */
+    header += 2;
+  }
+  if (asm_rule_number == 63) {
+    /* skip asm_rule_number_expansion */
+    header += 2;
+  }
+
+  if (size)
+    *size = packet->length - (header - packet->offset);
+
+  packet->map = map;
+
+  return &map.data[header];
+}
+
+gboolean
+gst_rdt_packet_data_unmap (GstRDTPacket * packet)
+{
+  g_return_val_if_fail (packet != NULL, FALSE);
+  g_return_val_if_fail (packet->map.data != NULL, FALSE);
+
+  gst_buffer_unmap (packet->buffer, &packet->map);
+  packet->map.data = NULL;
+
+  return TRUE;
+}
+
+guint16
+gst_rdt_packet_data_get_stream_id (GstRDTPacket * packet)
+{
+  GstMapInfo map;
+  guint16 result;
+  guint header;
+  gboolean length_included_flag;
+
+  g_return_val_if_fail (packet != NULL, 0);
+  g_return_val_if_fail (GST_RDT_IS_DATA_TYPE (packet->type), 0);
+
+  gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
+
+  header = packet->offset;
+
+  length_included_flag = (map.data[header] & 0x80) == 0x80;
+  result = (map.data[header] & 0x3e) >> 1;
+  if (result == 31) {
+    /* skip seq_no and header bits */
+    header += 3;
+
+    if (length_included_flag) {
+      /* skip length */
+      header += 2;
+    }
+    /* skip asm_rule_number and timestamp */
+    header += 5;
+
+    /* stream_id_expansion */
+    result = GST_READ_UINT16_BE (&map.data[header]);
+  }
+  gst_buffer_unmap (packet->buffer, &map);
+
+  return result;
+}
+
+guint32
+gst_rdt_packet_data_get_timestamp (GstRDTPacket * packet)
+{
+  GstMapInfo map;
+  guint header;
+  gboolean length_included_flag;
+  guint32 result;
+
+  g_return_val_if_fail (packet != NULL, 0);
+  g_return_val_if_fail (GST_RDT_IS_DATA_TYPE (packet->type), 0);
+
+  gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
+
+  header = packet->offset;
+
+  length_included_flag = (map.data[header] & 0x80) == 0x80;
+
+  /* skip seq_no and header bits */
+  header += 3;
+
+  if (length_included_flag) {
+    /* skip length */
+    header += 2;
+  }
+  /* skip asm_rule_number */
+  header += 1;
+
+  /* get timestamp */
+  result = GST_READ_UINT32_BE (&map.data[header]);
+  gst_buffer_unmap (packet->buffer, &map);
+
+  return result;
+}
+
+guint8
+gst_rdt_packet_data_get_flags (GstRDTPacket * packet)
+{
+  GstMapInfo map;
+  guint8 result;
+  guint header;
+  gboolean length_included_flag;
+
+  g_return_val_if_fail (packet != NULL, 0);
+  g_return_val_if_fail (GST_RDT_IS_DATA_TYPE (packet->type), 0);
+
+  gst_buffer_map (packet->buffer, &map, GST_MAP_READ);
+
+  header = packet->offset;
+
+  length_included_flag = (map.data[header] & 0x80) == 0x80;
+
+  /* skip seq_no and header bits */
+  header += 3;
+
+  if (length_included_flag) {
+    /* skip length */
+    header += 2;
+  }
+  /* get flags */
+  result = map.data[header];
+  gst_buffer_unmap (packet->buffer, &map);
+
+  return result;
+}
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/gstrdtbuffer.h b/subprojects/gst-plugins-ugly/gst/realmedia/gstrdtbuffer.h
new file mode 100644 (file)
index 0000000..fd1e067
--- /dev/null
@@ -0,0 +1,121 @@
+/* GStreamer
+ * Copyright (C) <2008> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * gstrdtbuffer.h: various helper functions to manipulate buffers
+ *     with RDT payload.
+ *
+ * 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_RDTBUFFER_H__
+#define __GST_RDTBUFFER_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+/**
+ * GstRDTType:
+ * @GST_RDT_TYPE_INVALID:
+ * @GST_RDT_TYPE_ASMACTION:
+ * @GST_RDT_TYPE_ACK:
+ * @GST_RDT_TYPE_RTTREQ:
+ * @GST_RDT_TYPE_RTTRESP:
+ * @GST_RDT_TYPE_CONGESTION:
+ * @GST_RDT_TYPE_STREAMEND:
+ * @GST_RDT_TYPE_LATENCY:
+ * @GST_RDT_TYPE_INFOREQ:
+ * @GST_RDT_TYPE_INFORESP:
+ * @GST_RDT_TYPE_AUTOBW:
+ *
+ * Different RDT packet types.
+ */
+typedef enum
+{
+  GST_RDT_TYPE_INVALID     = 0xffff,
+  GST_RDT_TYPE_ASMACTION   = 0xff00,
+  GST_RDT_TYPE_BWREPORT    = 0xff01,
+  GST_RDT_TYPE_ACK         = 0xff02,
+  GST_RDT_TYPE_RTTREQ      = 0xff03,
+  GST_RDT_TYPE_RTTRESP     = 0xff04,
+  GST_RDT_TYPE_CONGESTION  = 0xff05,
+  GST_RDT_TYPE_STREAMEND   = 0xff06,
+  GST_RDT_TYPE_REPORT      = 0xff07,
+  GST_RDT_TYPE_LATENCY     = 0xff08,
+  GST_RDT_TYPE_INFOREQ     = 0xff09,
+  GST_RDT_TYPE_INFORESP    = 0xff0a,
+  GST_RDT_TYPE_AUTOBW      = 0xff0b
+} GstRDTType;
+
+/**
+ * GST_RDT_IS_DATA_TYPE:
+ * @t: the #GstRDTType to check
+ *
+ * Check if @t is a data packet type.
+ */
+#define GST_RDT_IS_DATA_TYPE(t) ((t) < 0xff00)
+
+typedef struct _GstRDTPacket GstRDTPacket;
+
+/**
+ * GstRDTPacket:
+ * @buffer: pointer to RDT buffer
+ * @offset: offset of packet in buffer data
+ *
+ * Data structure that points to a packet at @offset in @buffer.
+ * The size of the structure is made public to allow stack allocations.
+ */
+struct _GstRDTPacket
+{
+  GstBuffer   *buffer;
+  guint        offset;
+
+  /*< private >*/
+  GstRDTType   type;         /* type of current packet */
+  guint16      length;       /* length of current packet in bytes */
+  GstMapInfo   map;          /* last mapped data */
+};
+
+/* validate buffers */
+gboolean        gst_rdt_buffer_validate_data      (guint8 *data, guint len);
+gboolean        gst_rdt_buffer_validate           (GstBuffer *buffer);
+
+/* retrieving packets */
+guint           gst_rdt_buffer_get_packet_count   (GstBuffer *buffer);
+gboolean        gst_rdt_buffer_get_first_packet   (GstBuffer *buffer, GstRDTPacket *packet);
+gboolean        gst_rdt_packet_move_to_next       (GstRDTPacket *packet);
+
+/* working with packets */
+GstRDTType      gst_rdt_packet_get_type           (GstRDTPacket *packet);
+guint16         gst_rdt_packet_get_length         (GstRDTPacket *packet);
+GstBuffer*      gst_rdt_packet_to_buffer          (GstRDTPacket *packet);
+
+
+/* data packets */
+guint16         gst_rdt_packet_data_get_seq       (GstRDTPacket *packet);
+guint8 *        gst_rdt_packet_data_map           (GstRDTPacket *packet, guint *size);
+gboolean        gst_rdt_packet_data_unmap         (GstRDTPacket *packet);
+guint16         gst_rdt_packet_data_get_stream_id (GstRDTPacket *packet);
+guint32         gst_rdt_packet_data_get_timestamp (GstRDTPacket *packet);
+
+guint8          gst_rdt_packet_data_get_flags     (GstRDTPacket * packet);
+
+/* utils */
+gint            gst_rdt_buffer_compare_seqnum     (guint16 seqnum1, guint16 seqnum2);
+
+G_END_DECLS
+
+#endif /* __GST_RDTBUFFER_H__ */
+
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/meson.build b/subprojects/gst-plugins-ugly/gst/realmedia/meson.build
new file mode 100644 (file)
index 0000000..0ef65d3
--- /dev/null
@@ -0,0 +1,25 @@
+real_sources = [
+  'rademux.c',
+  'rmdemux.c',
+  'rmutils.c',
+  'rdtdepay.c',
+  'rdtmanager.c',
+  'rtspreal.c',
+  'realhash.c',
+  'asmrules.c',
+  'rdtjitterbuffer.c',
+  'gstrdtbuffer.c',
+  'pnmsrc.c',
+  'realmedia.c'
+]
+
+gstrmdemux = library('gstrealmedia',
+  real_sources,
+  c_args : ugly_args,
+  include_directories : [configinc, libsinc],
+  dependencies : [gstbase_dep, gstrtsp_dep, gstsdp_dep, gstpbutils_dep],
+  install : true,
+  install_dir : plugins_install_dir,
+)
+pkgconfig.generate(gstrmdemux, install_dir : plugins_pkgconfig_install_dir)
+plugins += [gstrmdemux]
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/pnmsrc.c b/subprojects/gst-plugins-ugly/gst/realmedia/pnmsrc.c
new file mode 100644 (file)
index 0000000..07b25f4
--- /dev/null
@@ -0,0 +1,234 @@
+/* GStreamer
+ * Copyright (C) <2009> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <string.h>
+
+#include "pnmsrc.h"
+
+GST_DEBUG_CATEGORY_STATIC (pnmsrc_debug);
+#define GST_CAT_DEFAULT pnmsrc_debug
+
+/* PNMSrc signals and args */
+enum
+{
+  /* FILL ME */
+  LAST_SIGNAL
+};
+
+#define DEFAULT_LOCATION       NULL
+
+enum
+{
+  PROP_0,
+  PROP_LOCATION
+};
+
+static GstStaticPadTemplate gst_pnm_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/vnd.rn-realmedia")
+    );
+
+static GstFlowReturn gst_pnm_src_create (GstPushSrc * psrc, GstBuffer ** buf);
+
+static void gst_pnm_src_uri_handler_init (gpointer g_iface,
+    gpointer iface_data);
+
+#define gst_pnm_src_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstPNMSrc, gst_pnm_src, GST_TYPE_PUSH_SRC,
+    G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER, gst_pnm_src_uri_handler_init));
+GST_ELEMENT_REGISTER_DEFINE (pnmsrc, "pnmsrc",
+    GST_RANK_MARGINAL, GST_TYPE_PNM_SRC);
+
+static void gst_pnm_src_finalize (GObject * object);
+
+static void gst_pnm_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_pnm_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+static void
+gst_pnm_src_class_init (GstPNMSrcClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstPushSrcClass *gstpushsrc_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+  gstpushsrc_class = (GstPushSrcClass *) klass;
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class->set_property = gst_pnm_src_set_property;
+  gobject_class->get_property = gst_pnm_src_get_property;
+
+  gobject_class->finalize = gst_pnm_src_finalize;
+
+  g_object_class_install_property (gobject_class, PROP_LOCATION,
+      g_param_spec_string ("location", "PNM Location",
+          "Location of the PNM url to read",
+          DEFAULT_LOCATION, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+
+  gst_element_class_add_static_pad_template (gstelement_class,
+      &gst_pnm_src_template);
+
+  gst_element_class_set_static_metadata (gstelement_class,
+      "PNM packet receiver", "Source/Network",
+      "Receive data over the network via PNM",
+      "Wim Taymans <wim.taymans@gmail.com>");
+
+  gstpushsrc_class->create = gst_pnm_src_create;
+
+  GST_DEBUG_CATEGORY_INIT (pnmsrc_debug, "pnmsrc",
+      0, "Source for the pnm:// uri");
+}
+
+static void
+gst_pnm_src_init (GstPNMSrc * pnmsrc)
+{
+  pnmsrc->location = g_strdup (DEFAULT_LOCATION);
+}
+
+static void
+gst_pnm_src_finalize (GObject * object)
+{
+  GstPNMSrc *pnmsrc;
+
+  pnmsrc = GST_PNM_SRC (object);
+
+  g_free (pnmsrc->location);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_pnm_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstPNMSrc *src;
+
+  src = GST_PNM_SRC (object);
+
+  switch (prop_id) {
+    case PROP_LOCATION:
+      g_free (src->location);
+      src->location = g_value_dup_string (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_pnm_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstPNMSrc *src;
+
+  src = GST_PNM_SRC (object);
+
+  switch (prop_id) {
+    case PROP_LOCATION:
+      g_value_set_string (value, src->location);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static GstFlowReturn
+gst_pnm_src_create (GstPushSrc * psrc, GstBuffer ** buf)
+{
+  GstPNMSrc *src;
+  GstMessage *m;
+  gchar *url;
+
+  src = GST_PNM_SRC (psrc);
+
+  if (src->location == NULL)
+    return GST_FLOW_ERROR;
+  url = g_strdup_printf ("rtsp%s", &src->location[3]);
+
+  /* the only thing we do is redirect to an RTSP url */
+  m = gst_message_new_element (GST_OBJECT_CAST (src),
+      gst_structure_new ("redirect", "new-location", G_TYPE_STRING, url, NULL));
+  g_free (url);
+
+  gst_element_post_message (GST_ELEMENT_CAST (src), m);
+
+
+  return GST_FLOW_EOS;
+}
+
+/*** GSTURIHANDLER INTERFACE *************************************************/
+
+static GstURIType
+gst_pnm_src_uri_get_type (GType type)
+{
+  return GST_URI_SRC;
+}
+
+static const gchar *const *
+gst_pnm_src_uri_get_protocols (GType type)
+{
+  static const gchar *protocols[] = { "pnm", NULL };
+
+  return protocols;
+}
+
+static gchar *
+gst_pnm_src_uri_get_uri (GstURIHandler * handler)
+{
+  GstPNMSrc *src = GST_PNM_SRC (handler);
+
+  /* FIXME: make thread-safe */
+  return g_strdup (src->location);
+}
+
+static gboolean
+gst_pnm_src_uri_set_uri (GstURIHandler * handler, const gchar * uri,
+    GError ** error)
+{
+  GstPNMSrc *src = GST_PNM_SRC (handler);
+
+  g_free (src->location);
+  src->location = g_strdup (uri);
+
+  return TRUE;
+}
+
+static void
+gst_pnm_src_uri_handler_init (gpointer g_iface, gpointer iface_data)
+{
+  GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface;
+
+  iface->get_type = gst_pnm_src_uri_get_type;
+  iface->get_protocols = gst_pnm_src_uri_get_protocols;
+  iface->get_uri = gst_pnm_src_uri_get_uri;
+  iface->set_uri = gst_pnm_src_uri_set_uri;
+}
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/pnmsrc.h b/subprojects/gst-plugins-ugly/gst/realmedia/pnmsrc.h
new file mode 100644 (file)
index 0000000..3077226
--- /dev/null
@@ -0,0 +1,59 @@
+/* GStreamer
+ * Copyright (C) <2009> Wim Taymans <wim.taymans@gmail.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_PNM_SRC_H__
+#define __GST_PNM_SRC_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstpushsrc.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_PNM_SRC \
+  (gst_pnm_src_get_type())
+#define GST_PNM_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_PNM_SRC,GstPNMSrc))
+#define GST_PNM_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_PNM_SRC,GstPNMSrcClass))
+#define GST_IS_PNM_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PNM_SRC))
+#define GST_IS_PNM_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PNM_SRC))
+
+typedef struct _GstPNMSrc GstPNMSrc;
+typedef struct _GstPNMSrcClass GstPNMSrcClass;
+
+struct _GstPNMSrc
+{
+  GstPushSrc parent;
+
+  gchar *location;
+};
+
+struct _GstPNMSrcClass
+{
+  GstPushSrcClass parent_class;
+};
+
+GType gst_pnm_src_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (pnmsrc);
+
+G_END_DECLS
+
+#endif /* __GST_PNM_SRC_H__ */
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/rademux.c b/subprojects/gst-plugins-ugly/gst/realmedia/rademux.c
new file mode 100644 (file)
index 0000000..aface50
--- /dev/null
@@ -0,0 +1,1000 @@
+/* GStreamer RealAudio demuxer
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/**
+ * SECTION:element-rademux
+ * @title: rademux
+ *
+ * Demuxes/parses a RealAudio (.ra) file or stream into compressed audio.
+ *
+ * ## Example launch line
+ * |[
+ * gst-launch-1.0 filesrc location=interview.ra ! rademux ! avdec_real_288 ! audioconvert ! audioresample ! autoaudiosink
+ * ]| Read a RealAudio file and decode it and output it to the soundcard using
+ * the ALSA element. The .ra file is assumed to contain RealAudio version 2.
+ * |[
+ * gst-launch-1.0 souphttpsrc location=http://www.example.org/interview.ra ! rademux ! ac3parse ! a52dec ! audioconvert ! audioresample ! autoaudiosink
+ * ]| Stream RealAudio data containing AC3 (dnet) compressed audio and decode it
+ * and output it to the soundcard.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "rademux.h"
+#include "rmdemux.h"
+#include "rmutils.h"
+
+#include <string.h>
+
+static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/x-pn-realaudio")
+    );
+
+static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_SOMETIMES,
+    GST_STATIC_CAPS_ANY);
+
+GST_DEBUG_CATEGORY_STATIC (real_audio_demux_debug);
+#define GST_CAT_DEFAULT real_audio_demux_debug
+
+#define gst_real_audio_demux_parent_class parent_class
+G_DEFINE_TYPE (GstRealAudioDemux, gst_real_audio_demux, GST_TYPE_ELEMENT);
+GST_ELEMENT_REGISTER_DEFINE (rademux, "rademux",
+    GST_RANK_SECONDARY, GST_TYPE_REAL_AUDIO_DEMUX);
+
+static GstStateChangeReturn gst_real_audio_demux_change_state (GstElement * e,
+    GstStateChange transition);
+static GstFlowReturn gst_real_audio_demux_chain (GstPad * pad,
+    GstObject * parent, GstBuffer * buf);
+static gboolean gst_real_audio_demux_sink_event (GstPad * pad,
+    GstObject * parent, GstEvent * ev);
+static gboolean gst_real_audio_demux_src_event (GstPad * pad,
+    GstObject * parent, GstEvent * ev);
+static gboolean gst_real_audio_demux_src_query (GstPad * pad,
+    GstObject * parent, GstQuery * query);
+static void gst_real_audio_demux_loop (GstRealAudioDemux * demux);
+static gboolean gst_real_audio_demux_sink_activate (GstPad * sinkpad,
+    GstObject * parent);
+static gboolean gst_real_audio_demux_sink_activate_mode (GstPad * sinkpad,
+    GstObject * parent, GstPadMode mode, gboolean active);
+
+static void
+gst_real_audio_demux_finalize (GObject * obj)
+{
+  GstRealAudioDemux *demux = GST_REAL_AUDIO_DEMUX (obj);
+
+  g_object_unref (demux->adapter);
+
+  G_OBJECT_CLASS (parent_class)->finalize (obj);
+}
+
+static void
+gst_real_audio_demux_class_init (GstRealAudioDemuxClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+  GstElementClass *gstelement_class = (GstElementClass *) klass;
+
+  gobject_class->finalize = gst_real_audio_demux_finalize;
+
+  gst_element_class_add_static_pad_template (gstelement_class, &sink_template);
+  gst_element_class_add_static_pad_template (gstelement_class, &src_template);
+
+  gst_element_class_set_static_metadata (gstelement_class, "RealAudio Demuxer",
+      "Codec/Demuxer",
+      "Demultiplex a RealAudio file",
+      "Tim-Philipp Müller <tim centricular net>");
+
+  gstelement_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_real_audio_demux_change_state);
+
+  GST_DEBUG_CATEGORY_INIT (real_audio_demux_debug, "rademux",
+      0, "Demuxer for RealAudio streams");
+}
+
+static void
+gst_real_audio_demux_reset (GstRealAudioDemux * demux)
+{
+  gst_adapter_clear (demux->adapter);
+
+  if (demux->srcpad) {
+    GST_DEBUG_OBJECT (demux, "Removing source pad");
+    gst_element_remove_pad (GST_ELEMENT (demux), demux->srcpad);
+    demux->srcpad = NULL;
+  }
+
+  if (demux->pending_tags) {
+    gst_tag_list_unref (demux->pending_tags);
+    demux->pending_tags = NULL;
+  }
+
+  demux->state = REAL_AUDIO_DEMUX_STATE_MARKER;
+  demux->ra_version = 0;
+  demux->data_offset = 0;
+  demux->packet_size = 0;
+
+  demux->sample_rate = 0;
+  demux->sample_width = 0;
+  demux->channels = 0;
+  demux->fourcc = 0;
+
+  demux->need_newsegment = TRUE;
+
+  demux->segment_running = FALSE;
+
+  demux->byterate_num = 0;
+  demux->byterate_denom = 0;
+
+  demux->duration = 0;
+  demux->upstream_size = 0;
+
+  demux->offset = 0;
+
+  demux->have_group_id = FALSE;
+  demux->group_id = G_MAXUINT;
+
+  gst_adapter_clear (demux->adapter);
+}
+
+static void
+gst_real_audio_demux_init (GstRealAudioDemux * demux)
+{
+  demux->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink");
+
+  gst_pad_set_chain_function (demux->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_real_audio_demux_chain));
+  gst_pad_set_event_function (demux->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_real_audio_demux_sink_event));
+  gst_pad_set_activate_function (demux->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_real_audio_demux_sink_activate));
+  gst_pad_set_activatemode_function (demux->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_real_audio_demux_sink_activate_mode));
+
+  gst_element_add_pad (GST_ELEMENT (demux), demux->sinkpad);
+
+  demux->adapter = gst_adapter_new ();
+  gst_real_audio_demux_reset (demux);
+}
+
+static gboolean
+gst_real_audio_demux_sink_activate (GstPad * sinkpad, GstObject * parent)
+{
+  GstQuery *query;
+  gboolean pull_mode;
+
+  query = gst_query_new_scheduling ();
+
+  if (!gst_pad_peer_query (sinkpad, query)) {
+    gst_query_unref (query);
+    goto activate_push;
+  }
+
+  pull_mode = gst_query_has_scheduling_mode_with_flags (query,
+      GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE);
+  gst_query_unref (query);
+
+  if (!pull_mode)
+    goto activate_push;
+
+  GST_DEBUG_OBJECT (sinkpad, "activating pull");
+  return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PULL, TRUE);
+
+activate_push:
+  {
+    GST_DEBUG_OBJECT (sinkpad, "activating push");
+    return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PUSH, TRUE);
+  }
+}
+
+static gboolean
+gst_real_audio_demux_sink_activate_mode (GstPad * sinkpad, GstObject * parent,
+    GstPadMode mode, gboolean active)
+{
+  gboolean res;
+  GstRealAudioDemux *demux;
+
+  demux = GST_REAL_AUDIO_DEMUX (parent);
+
+  switch (mode) {
+    case GST_PAD_MODE_PUSH:
+      demux->seekable = FALSE;
+      res = TRUE;
+      break;
+    case GST_PAD_MODE_PULL:
+      if (active) {
+        demux->seekable = TRUE;
+
+        res = gst_pad_start_task (sinkpad,
+            (GstTaskFunction) gst_real_audio_demux_loop, demux, NULL);
+      } else {
+        demux->seekable = FALSE;
+        res = gst_pad_stop_task (sinkpad);
+      }
+      break;
+    default:
+      res = FALSE;
+      break;
+  }
+  return res;
+}
+
+static GstFlowReturn
+gst_real_audio_demux_parse_marker (GstRealAudioDemux * demux)
+{
+  guint8 data[6];
+
+  if (gst_adapter_available (demux->adapter) < 6) {
+    GST_LOG_OBJECT (demux, "need at least 6 bytes, waiting for more data");
+    return GST_FLOW_OK;
+  }
+
+  gst_adapter_copy (demux->adapter, data, 0, 6);
+  if (memcmp (data, ".ra\375", 4) != 0)
+    goto wrong_format;
+
+  demux->ra_version = GST_READ_UINT16_BE (data + 4);
+  GST_DEBUG_OBJECT (demux, "ra_version   = %u", demux->ra_version);
+  if (demux->ra_version != 4 && demux->ra_version != 3)
+    goto unsupported_ra_version;
+
+  gst_adapter_flush (demux->adapter, 6);
+  demux->state = REAL_AUDIO_DEMUX_STATE_HEADER;
+  return GST_FLOW_OK;
+
+/* ERRORS */
+wrong_format:
+  {
+    GST_ELEMENT_ERROR (GST_ELEMENT (demux), STREAM, WRONG_TYPE, (NULL), (NULL));
+    return GST_FLOW_ERROR;
+  }
+
+unsupported_ra_version:
+  {
+    GST_ELEMENT_ERROR (GST_ELEMENT (demux), STREAM, DECODE,
+        ("Cannot decode this RealAudio file, please file a bug"),
+        ("ra_version = %u", demux->ra_version));
+    return GST_FLOW_ERROR;
+  }
+}
+
+static GstClockTime
+gst_real_demux_get_timestamp_from_offset (GstRealAudioDemux * demux,
+    guint64 offset)
+{
+  if (offset >= demux->data_offset && demux->byterate_num > 0 &&
+      demux->byterate_denom > 0) {
+    return gst_util_uint64_scale (offset - demux->data_offset,
+        demux->byterate_denom * GST_SECOND, demux->byterate_num);
+  } else if (offset == demux->data_offset) {
+    return (GstClockTime) 0;
+  } else {
+    return GST_CLOCK_TIME_NONE;
+  }
+}
+
+static gboolean
+gst_real_audio_demux_get_data_offset_from_header (GstRealAudioDemux * demux)
+{
+  guint8 data[16];
+
+  gst_adapter_copy (demux->adapter, data, 0, 16);
+
+  switch (demux->ra_version) {
+    case 3:
+      demux->data_offset = GST_READ_UINT16_BE (data) + 8;
+      break;
+    case 4:
+      demux->data_offset = GST_READ_UINT32_BE (data + 12) + 16;
+      break;
+    default:
+      demux->data_offset = 0;
+      g_return_val_if_reached (FALSE);
+  }
+
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_real_audio_demux_parse_header (GstRealAudioDemux * demux)
+{
+  const guint8 *data;
+  gchar *codec_name = NULL;
+  GstCaps *caps = NULL;
+  GstEvent *event;
+  gchar *stream_id;
+  guint avail;
+
+  g_assert (demux->ra_version == 4 || demux->ra_version == 3);
+
+  avail = gst_adapter_available (demux->adapter);
+  if (avail < 16)
+    return GST_FLOW_OK;
+
+  if (!gst_real_audio_demux_get_data_offset_from_header (demux))
+    return GST_FLOW_ERROR;      /* shouldn't happen */
+
+  GST_DEBUG_OBJECT (demux, "data_offset  = %u", demux->data_offset);
+
+  if (avail + 6 < demux->data_offset) {
+    GST_DEBUG_OBJECT (demux, "Need %u bytes, but only %u available now",
+        demux->data_offset - 6, avail);
+    return GST_FLOW_OK;
+  }
+
+  data = gst_adapter_map (demux->adapter, demux->data_offset - 6);
+  g_assert (data);
+
+  switch (demux->ra_version) {
+    case 3:
+      demux->fourcc = GST_RM_AUD_14_4;
+      demux->packet_size = 20;
+      demux->sample_rate = 8000;
+      demux->channels = 1;
+      demux->sample_width = 16;
+      demux->flavour = 1;
+      demux->leaf_size = 0;
+      demux->height = 0;
+      break;
+    case 4:
+      demux->flavour = GST_READ_UINT16_BE (data + 16);
+      /* demux->frame_size = GST_READ_UINT32_BE (data + 36); */
+      demux->leaf_size = GST_READ_UINT16_BE (data + 38);
+      demux->height = GST_READ_UINT16_BE (data + 34);
+      demux->packet_size = GST_READ_UINT32_BE (data + 18);
+      demux->sample_rate = GST_READ_UINT16_BE (data + 42);
+      demux->sample_width = GST_READ_UINT16_BE (data + 46);
+      demux->channels = GST_READ_UINT16_BE (data + 48);
+      demux->fourcc = GST_READ_UINT32_LE (data + 56);
+      demux->pending_tags = gst_rm_utils_read_tags (data + 63,
+          demux->data_offset - 63, gst_rm_utils_read_string8);
+      if (demux->pending_tags)
+        gst_tag_list_set_scope (demux->pending_tags, GST_TAG_SCOPE_GLOBAL);
+      break;
+    default:
+      g_assert_not_reached ();
+#if 0
+    case 5:
+      demux->flavour = GST_READ_UINT16_BE (data + 16);
+      /* demux->frame_size = GST_READ_UINT32_BE (data + 36); */
+      demux->leaf_size = GST_READ_UINT16_BE (data + 38);
+      demux->height = GST_READ_UINT16_BE (data + 34);
+
+      demux->sample_rate = GST_READ_UINT16_BE (data + 48);
+      demux->sample_width = GST_READ_UINT16_BE (data + 52);
+      demux->n_channels = GST_READ_UINT16_BE (data + 54);
+      demux->fourcc = RMDEMUX_FOURCC_GET (data + 60);
+      break;
+#endif
+  }
+
+  GST_INFO_OBJECT (demux, "packet_size  = %u", demux->packet_size);
+  GST_INFO_OBJECT (demux, "sample_rate  = %u", demux->sample_rate);
+  GST_INFO_OBJECT (demux, "sample_width = %u", demux->sample_width);
+  GST_INFO_OBJECT (demux, "channels     = %u", demux->channels);
+  GST_INFO_OBJECT (demux, "fourcc       = '%" GST_FOURCC_FORMAT "' (%08X)",
+      GST_FOURCC_ARGS (demux->fourcc), demux->fourcc);
+
+  switch (demux->fourcc) {
+    case GST_RM_AUD_14_4:
+      caps = gst_caps_new_simple ("audio/x-pn-realaudio", "raversion",
+          G_TYPE_INT, 1, NULL);
+      demux->byterate_num = 1000;
+      demux->byterate_denom = 1;
+      break;
+
+    case GST_RM_AUD_28_8:
+      /* FIXME: needs descrambling */
+      caps = gst_caps_new_simple ("audio/x-pn-realaudio", "raversion",
+          G_TYPE_INT, 2, NULL);
+      break;
+
+    case GST_RM_AUD_DNET:
+      caps = gst_caps_new_simple ("audio/x-ac3", "rate", G_TYPE_INT,
+          demux->sample_rate, NULL);
+      if (demux->packet_size == 0 || demux->sample_rate == 0)
+        goto broken_file;
+      demux->byterate_num = demux->packet_size * demux->sample_rate;
+      demux->byterate_denom = 1536;
+      break;
+
+      /* Sipro/ACELP.NET Voice Codec (MIME unknown) */
+    case GST_RM_AUD_SIPR:
+      caps = gst_caps_new_empty_simple ("audio/x-sipro");
+      break;
+
+    default:
+      GST_WARNING_OBJECT (demux, "unknown fourcc %08X", demux->fourcc);
+      break;
+  }
+
+  if (caps == NULL)
+    goto unknown_fourcc;
+
+  gst_caps_set_simple (caps,
+      "flavor", G_TYPE_INT, demux->flavour,
+      "rate", G_TYPE_INT, demux->sample_rate,
+      "channels", G_TYPE_INT, demux->channels,
+      "width", G_TYPE_INT, demux->sample_width,
+      "leaf_size", G_TYPE_INT, demux->leaf_size,
+      "packet_size", G_TYPE_INT, demux->packet_size,
+      "height", G_TYPE_INT, demux->height, NULL);
+
+  GST_INFO_OBJECT (demux, "Adding source pad, caps %" GST_PTR_FORMAT, caps);
+  demux->srcpad = gst_pad_new_from_static_template (&src_template, "src");
+  gst_pad_set_event_function (demux->srcpad,
+      GST_DEBUG_FUNCPTR (gst_real_audio_demux_src_event));
+  gst_pad_set_query_function (demux->srcpad,
+      GST_DEBUG_FUNCPTR (gst_real_audio_demux_src_query));
+  gst_pad_set_active (demux->srcpad, TRUE);
+  gst_pad_use_fixed_caps (demux->srcpad);
+
+  stream_id =
+      gst_pad_create_stream_id (demux->srcpad, GST_ELEMENT_CAST (demux), NULL);
+
+  event = gst_pad_get_sticky_event (demux->sinkpad, GST_EVENT_STREAM_START, 0);
+  if (event) {
+    if (gst_event_parse_group_id (event, &demux->group_id))
+      demux->have_group_id = TRUE;
+    else
+      demux->have_group_id = FALSE;
+    gst_event_unref (event);
+  } else if (!demux->have_group_id) {
+    demux->have_group_id = TRUE;
+    demux->group_id = gst_util_group_id_next ();
+  }
+
+  event = gst_event_new_stream_start (stream_id);
+  if (demux->have_group_id)
+    gst_event_set_group_id (event, demux->group_id);
+
+  gst_pad_push_event (demux->srcpad, event);
+  g_free (stream_id);
+
+  gst_pad_set_caps (demux->srcpad, caps);
+  codec_name = gst_pb_utils_get_codec_description (caps);
+  gst_caps_unref (caps);
+
+  gst_element_add_pad (GST_ELEMENT (demux), demux->srcpad);
+
+  if (demux->byterate_num > 0 && demux->byterate_denom > 0) {
+    GstFormat bformat = GST_FORMAT_BYTES;
+    gint64 size_bytes = 0;
+
+    GST_INFO_OBJECT (demux, "byte rate = %u/%u = %u bytes/sec",
+        demux->byterate_num, demux->byterate_denom,
+        demux->byterate_num / demux->byterate_denom);
+
+    if (gst_pad_peer_query_duration (demux->sinkpad, bformat, &size_bytes)) {
+      demux->duration =
+          gst_real_demux_get_timestamp_from_offset (demux, size_bytes);
+      demux->upstream_size = size_bytes;
+      GST_INFO_OBJECT (demux, "upstream_size = %" G_GUINT64_FORMAT,
+          demux->upstream_size);
+      GST_INFO_OBJECT (demux, "duration      = %" GST_TIME_FORMAT,
+          GST_TIME_ARGS (demux->duration));
+    }
+  }
+
+  demux->need_newsegment = TRUE;
+
+  if (codec_name) {
+    if (demux->pending_tags == NULL) {
+      demux->pending_tags = gst_tag_list_new_empty ();
+      gst_tag_list_set_scope (demux->pending_tags, GST_TAG_SCOPE_GLOBAL);
+    }
+
+    gst_tag_list_add (demux->pending_tags, GST_TAG_MERGE_REPLACE,
+        GST_TAG_AUDIO_CODEC, codec_name, NULL);
+    g_free (codec_name);
+  }
+
+  gst_adapter_unmap (demux->adapter);
+  gst_adapter_flush (demux->adapter, demux->data_offset - 6);
+
+  demux->state = REAL_AUDIO_DEMUX_STATE_DATA;
+  demux->need_newsegment = TRUE;
+
+  return GST_FLOW_OK;
+
+/* ERRORS */
+unknown_fourcc:
+  {
+    GST_ELEMENT_ERROR (GST_ELEMENT (demux), STREAM, DECODE, (NULL),
+        ("Unknown fourcc '0x%" G_GINT32_MODIFIER "x'", demux->fourcc));
+    return GST_FLOW_ERROR;
+  }
+broken_file:
+  {
+    GST_ELEMENT_ERROR (GST_ELEMENT (demux), STREAM, DECODE, (NULL),
+        ("Broken file - invalid sample_rate or other header value"));
+    return GST_FLOW_ERROR;
+  }
+
+}
+
+static GstFlowReturn
+gst_real_audio_demux_parse_data (GstRealAudioDemux * demux)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+  guint avail, unit_size;
+
+  avail = gst_adapter_available (demux->adapter);
+
+  if (demux->packet_size > 0)
+    unit_size = demux->packet_size;
+  else
+    unit_size = avail & 0xfffffff0;     /* round down to next multiple of 16 */
+
+  GST_LOG_OBJECT (demux, "available = %u, unit_size = %u", avail, unit_size);
+
+  while (ret == GST_FLOW_OK && unit_size > 0 && avail >= unit_size) {
+    GstClockTime ts;
+    GstBuffer *buf;
+
+    buf = gst_adapter_take_buffer (demux->adapter, unit_size);
+    avail -= unit_size;
+
+    if (demux->need_newsegment) {
+      gst_pad_push_event (demux->srcpad,
+          gst_event_new_segment (&demux->segment));
+      demux->need_newsegment = FALSE;
+    }
+
+    if (demux->pending_tags) {
+      gst_pad_push_event (demux->srcpad,
+          gst_event_new_tag (demux->pending_tags));
+      demux->pending_tags = NULL;
+    }
+
+    if (demux->fourcc == GST_RM_AUD_DNET) {
+      buf = gst_rm_utils_descramble_dnet_buffer (buf);
+    }
+
+    ts = gst_real_demux_get_timestamp_from_offset (demux, demux->offset);
+    GST_BUFFER_TIMESTAMP (buf) = ts;
+
+    demux->segment.position = ts;
+
+    ret = gst_pad_push (demux->srcpad, buf);
+  }
+
+  return ret;
+}
+
+static GstFlowReturn
+gst_real_audio_demux_handle_buffer (GstRealAudioDemux * demux, GstBuffer * buf)
+{
+  GstFlowReturn ret;
+
+  gst_adapter_push (demux->adapter, buf);
+  buf = NULL;
+
+  switch (demux->state) {
+    case REAL_AUDIO_DEMUX_STATE_MARKER:{
+      ret = gst_real_audio_demux_parse_marker (demux);
+      if (ret != GST_FLOW_OK || demux->state != REAL_AUDIO_DEMUX_STATE_HEADER)
+        break;
+      /* otherwise fall through */
+    }
+    case REAL_AUDIO_DEMUX_STATE_HEADER:{
+      ret = gst_real_audio_demux_parse_header (demux);
+      if (ret != GST_FLOW_OK || demux->state != REAL_AUDIO_DEMUX_STATE_DATA)
+        break;
+      /* otherwise fall through */
+    }
+    case REAL_AUDIO_DEMUX_STATE_DATA:{
+      ret = gst_real_audio_demux_parse_data (demux);
+      break;
+    }
+    default:
+      g_return_val_if_reached (GST_FLOW_ERROR);
+  }
+
+  return ret;
+}
+
+static GstFlowReturn
+gst_real_audio_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+{
+  GstRealAudioDemux *demux;
+
+  demux = GST_REAL_AUDIO_DEMUX (parent);
+
+  return gst_real_audio_demux_handle_buffer (demux, buf);
+}
+
+static void
+gst_real_audio_demux_loop (GstRealAudioDemux * demux)
+{
+  GstFlowReturn ret;
+  GstBuffer *buf;
+  guint bytes_needed;
+
+  /* check how much data we need */
+  switch (demux->state) {
+    case REAL_AUDIO_DEMUX_STATE_MARKER:
+      bytes_needed = 6 + 16;    /* 16 are beginning of header */
+      break;
+    case REAL_AUDIO_DEMUX_STATE_HEADER:
+      if (!gst_real_audio_demux_get_data_offset_from_header (demux))
+        goto parse_header_error;
+      bytes_needed = demux->data_offset - (6 + 16);
+      break;
+    case REAL_AUDIO_DEMUX_STATE_DATA:
+      if (demux->packet_size > 0) {
+        /* TODO: should probably take into account width/height as well? */
+        bytes_needed = demux->packet_size;
+      } else {
+        bytes_needed = 1024;
+      }
+      break;
+    default:
+      g_return_if_reached ();
+  }
+
+  /* now get the data */
+  GST_LOG_OBJECT (demux, "getting data: %5u bytes @ %8" G_GINT64_MODIFIER "u",
+      bytes_needed, demux->offset);
+
+  if (demux->upstream_size > 0 && demux->offset >= demux->upstream_size)
+    goto eos;
+
+  buf = NULL;
+  ret = gst_pad_pull_range (demux->sinkpad, demux->offset, bytes_needed, &buf);
+
+  if (ret != GST_FLOW_OK)
+    goto pull_range_error;
+
+  if (gst_buffer_get_size (buf) != bytes_needed)
+    goto pull_range_short_read;
+
+  ret = gst_real_audio_demux_handle_buffer (demux, buf);
+  if (ret != GST_FLOW_OK)
+    goto handle_flow_error;
+
+  /* TODO: increase this in chain function too (for timestamps)? */
+  demux->offset += bytes_needed;
+
+  /* check for the end of the segment */
+  if (demux->segment.stop != -1 && demux->segment.position != -1 &&
+      demux->segment.position > demux->segment.stop) {
+    GST_DEBUG_OBJECT (demux, "reached end of segment");
+    goto eos;
+  }
+
+  return;
+
+/* ERRORS */
+parse_header_error:
+  {
+    GST_ELEMENT_ERROR (demux, STREAM, DECODE, (NULL), (NULL));
+    goto pause_task;
+  }
+handle_flow_error:
+  {
+    GST_WARNING_OBJECT (demux, "handle_buf flow: %s", gst_flow_get_name (ret));
+    goto pause_task;
+  }
+pull_range_error:
+  {
+    GST_WARNING_OBJECT (demux, "pull range flow: %s", gst_flow_get_name (ret));
+    goto pause_task;
+  }
+pull_range_short_read:
+  {
+    GST_WARNING_OBJECT (demux, "pull range short read: wanted %u bytes, but "
+        "got only %" G_GSIZE_FORMAT " bytes", bytes_needed,
+        gst_buffer_get_size (buf));
+    gst_buffer_unref (buf);
+    goto eos;
+  }
+eos:
+  {
+    if (demux->state != REAL_AUDIO_DEMUX_STATE_DATA) {
+      GST_WARNING_OBJECT (demux, "reached EOS before finished parsing header");
+      goto parse_header_error;
+    }
+    GST_INFO_OBJECT (demux, "EOS");
+    if ((demux->segment.flags & GST_SEEK_FLAG_SEGMENT) != 0) {
+      gint64 stop;
+
+      /* for segment playback we need to post when (in stream time)
+       * we stopped, this is either stop (when set) or the duration. */
+      if ((stop = demux->segment.stop) == -1)
+        stop = demux->segment.duration;
+
+      GST_DEBUG_OBJECT (demux, "sending segment done, at end of segment");
+      gst_element_post_message (GST_ELEMENT (demux),
+          gst_message_new_segment_done (GST_OBJECT (demux), GST_FORMAT_TIME,
+              stop));
+      gst_pad_push_event (demux->srcpad,
+          gst_event_new_segment_done (GST_FORMAT_TIME, stop));
+    } else {
+      /* normal playback, send EOS event downstream */
+      GST_DEBUG_OBJECT (demux, "sending EOS event, at end of stream");
+      gst_pad_push_event (demux->srcpad, gst_event_new_eos ());
+    }
+    goto pause_task;
+  }
+pause_task:
+  {
+    demux->segment_running = FALSE;
+    gst_pad_pause_task (demux->sinkpad);
+    GST_DEBUG_OBJECT (demux, "pausing task");
+    return;
+  }
+}
+
+static gboolean
+gst_real_audio_demux_sink_event (GstPad * pad, GstObject * parent,
+    GstEvent * event)
+{
+  GstRealAudioDemux *demux;
+  gboolean ret;
+
+  demux = GST_REAL_AUDIO_DEMUX (parent);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEGMENT:{
+      /* FIXME */
+      gst_event_unref (event);
+      demux->need_newsegment = TRUE;
+      ret = TRUE;
+      break;
+    }
+    default:
+      ret = gst_pad_event_default (pad, parent, event);
+      break;
+  }
+  return ret;
+}
+
+static gboolean
+gst_real_audio_demux_handle_seek (GstRealAudioDemux * demux, GstEvent * event)
+{
+  GstFormat format;
+  GstSeekFlags flags;
+  GstSeekType cur_type, stop_type;
+  gboolean flush, update;
+  gdouble rate;
+  guint64 seek_pos;
+  gint64 cur, stop;
+
+  if (!demux->seekable)
+    goto not_seekable;
+
+  if (demux->byterate_num == 0 || demux->byterate_denom == 0)
+    goto no_bitrate;
+
+  gst_event_parse_seek (event, &rate, &format, &flags,
+      &cur_type, &cur, &stop_type, &stop);
+
+  if (format != GST_FORMAT_TIME)
+    goto only_time_format_supported;
+
+  if (rate <= 0.0)
+    goto cannot_do_backwards_playback;
+
+  flush = ((flags & GST_SEEK_FLAG_FLUSH) != 0);
+
+  GST_DEBUG_OBJECT (demux, "flush=%d, rate=%g", flush, rate);
+
+  /* unlock streaming thread and make streaming stop */
+  if (flush) {
+    gst_pad_push_event (demux->sinkpad, gst_event_new_flush_start ());
+    gst_pad_push_event (demux->srcpad, gst_event_new_flush_start ());
+  } else {
+    gst_pad_pause_task (demux->sinkpad);
+  }
+
+  GST_PAD_STREAM_LOCK (demux->sinkpad);
+
+  gst_segment_do_seek (&demux->segment, rate, format, flags,
+      cur_type, cur, stop_type, stop, &update);
+
+  GST_DEBUG_OBJECT (demux, "segment: %" GST_SEGMENT_FORMAT, &demux->segment);
+
+  seek_pos = gst_util_uint64_scale (demux->segment.start,
+      demux->byterate_num, demux->byterate_denom * GST_SECOND);
+  if (demux->packet_size > 0) {
+    seek_pos -= seek_pos % demux->packet_size;
+  }
+  seek_pos += demux->data_offset;
+
+  GST_DEBUG_OBJECT (demux, "seek_pos = %" G_GUINT64_FORMAT, seek_pos);
+
+  /* stop flushing */
+  gst_pad_push_event (demux->sinkpad, gst_event_new_flush_stop (TRUE));
+  gst_pad_push_event (demux->srcpad, gst_event_new_flush_stop (TRUE));
+
+  demux->offset = seek_pos;
+  demux->need_newsegment = TRUE;
+
+  /* notify start of new segment */
+  if (demux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
+    gst_element_post_message (GST_ELEMENT (demux),
+        gst_message_new_segment_start (GST_OBJECT (demux),
+            GST_FORMAT_TIME, demux->segment.position));
+  }
+
+  demux->segment_running = TRUE;
+  /* restart our task since it might have been stopped when we did the flush */
+  gst_pad_start_task (demux->sinkpad,
+      (GstTaskFunction) gst_real_audio_demux_loop, demux, NULL);
+
+  /* streaming can continue now */
+  GST_PAD_STREAM_UNLOCK (demux->sinkpad);
+
+  return TRUE;
+
+/* ERRORS */
+not_seekable:
+  {
+    GST_DEBUG_OBJECT (demux, "seek failed: cannot seek in streaming mode");
+    return FALSE;
+  }
+no_bitrate:
+  {
+    GST_DEBUG_OBJECT (demux, "seek failed: bitrate unknown");
+    return FALSE;
+  }
+only_time_format_supported:
+  {
+    GST_DEBUG_OBJECT (demux, "can only seek in TIME format");
+    return FALSE;
+  }
+cannot_do_backwards_playback:
+  {
+    GST_DEBUG_OBJECT (demux, "can only seek with positive rate, not %lf", rate);
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_real_audio_demux_src_event (GstPad * pad, GstObject * parent,
+    GstEvent * event)
+{
+  GstRealAudioDemux *demux;
+  gboolean ret = FALSE;
+
+  demux = GST_REAL_AUDIO_DEMUX (parent);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_QOS:
+      gst_event_unref (event);
+      break;
+    case GST_EVENT_SEEK:
+      ret = gst_real_audio_demux_handle_seek (demux, event);
+      gst_event_unref (event);
+      break;
+    default:
+      ret = gst_pad_event_default (pad, parent, event);
+      break;
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_real_audio_demux_src_query (GstPad * pad, GstObject * parent,
+    GstQuery * query)
+{
+  GstRealAudioDemux *demux;
+  gboolean ret = FALSE;
+
+  demux = GST_REAL_AUDIO_DEMUX (parent);
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_DURATION:{
+      GstFormat format;
+
+      gst_query_parse_duration (query, &format, NULL);
+      if (format == GST_FORMAT_TIME && demux->duration > 0) {
+        gst_query_set_duration (query, GST_FORMAT_TIME, demux->duration);
+        ret = TRUE;
+      } else if (format == GST_FORMAT_BYTES && demux->upstream_size > 0) {
+        gst_query_set_duration (query, GST_FORMAT_BYTES,
+            demux->upstream_size - demux->data_offset);
+        ret = TRUE;
+      }
+      break;
+    }
+    case GST_QUERY_SEEKING:{
+      GstFormat format;
+      gboolean seekable;
+
+      gst_query_parse_seeking (query, &format, NULL, NULL, NULL);
+      seekable = (format == GST_FORMAT_TIME && demux->seekable);
+      gst_query_set_seeking (query, format, seekable, 0,
+          (format == GST_FORMAT_TIME) ? demux->duration : -1);
+      ret = TRUE;
+      break;
+    }
+    case GST_QUERY_SEGMENT:
+    {
+      GstFormat format;
+      gint64 start, stop;
+
+      format = demux->segment.format;
+
+      start =
+          gst_segment_to_stream_time (&demux->segment, format,
+          demux->segment.start);
+      if ((stop = demux->segment.stop) == -1)
+        stop = demux->segment.duration;
+      else
+        stop = gst_segment_to_stream_time (&demux->segment, format, stop);
+
+      gst_query_set_segment (query, demux->segment.rate, format, start, stop);
+      ret = TRUE;
+      break;
+    }
+    default:
+      ret = gst_pad_query_default (pad, parent, query);
+      break;
+  }
+
+  return ret;
+}
+
+static GstStateChangeReturn
+gst_real_audio_demux_change_state (GstElement * element,
+    GstStateChange transition)
+{
+  GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+  GstRealAudioDemux *demux = GST_REAL_AUDIO_DEMUX (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      demux->state = REAL_AUDIO_DEMUX_STATE_MARKER;
+      demux->segment_running = FALSE;
+      gst_segment_init (&demux->segment, GST_FORMAT_TIME);
+      gst_adapter_clear (demux->adapter);
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:{
+      gst_real_audio_demux_reset (demux);
+      gst_segment_init (&demux->segment, GST_FORMAT_UNDEFINED);
+      break;
+    }
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+}
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/rademux.h b/subprojects/gst-plugins-ugly/gst/realmedia/rademux.h
new file mode 100644 (file)
index 0000000..666a1e6
--- /dev/null
@@ -0,0 +1,104 @@
+/* GStreamer RealAudio demuxer
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * 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_REAL_AUDIO_DEMUX_H__
+#define __GST_REAL_AUDIO_DEMUX_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstadapter.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_REAL_AUDIO_DEMUX \
+  (gst_real_audio_demux_get_type())
+#define GST_REAL_AUDIO_DEMUX(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_REAL_AUDIO_DEMUX,GstRealAudioDemux))
+#define GST_REAL_AUDIO_DEMUX_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_REAL_AUDIO_DEMUX,GstRealAudioDemuxClass))
+#define GST_IS_REAL_AUDIO_DEMUX(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_REAL_AUDIO_DEMUX))
+#define GST_IS_REAL_AUDIO_DEMUX_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_REAL_AUDIO_DEMUX))
+
+typedef enum
+{
+  REAL_AUDIO_DEMUX_STATE_MARKER,
+  REAL_AUDIO_DEMUX_STATE_HEADER,
+  REAL_AUDIO_DEMUX_STATE_DATA
+} GstRealAudioDemuxState;
+
+typedef struct _GstRealAudioDemux GstRealAudioDemux;
+typedef struct _GstRealAudioDemuxClass GstRealAudioDemuxClass;
+
+struct _GstRealAudioDemux {
+  GstElement               element;
+
+  GstPad                  *sinkpad;
+  GstPad                  *srcpad;
+  
+  gboolean                 have_group_id;
+  guint                    group_id;
+
+  GstAdapter              *adapter;
+  GstRealAudioDemuxState   state;
+
+  guint                    ra_version;
+  guint                    data_offset;
+
+  guint                    packet_size;
+  guint                    leaf_size;
+  guint                    height;
+  guint                    flavour;
+
+  guint                    sample_rate;
+  guint                    sample_width;
+  guint                    channels;
+  guint32                  fourcc;
+
+  gboolean                 segment_running;
+
+  gboolean                 need_newsegment;
+  GstTagList              *pending_tags;
+
+  guint                    byterate_num;    /* bytes per second */
+  guint                    byterate_denom;
+
+  gint64                   duration;
+  gint64                   upstream_size;
+
+  guint64                  offset;          /* current read byte offset for
+                                             * pull_range-based mode */
+
+  /* playback start/stop positions */
+  GstSegment               segment;
+
+  gboolean                 seekable;
+};
+
+struct _GstRealAudioDemuxClass {
+  GstElementClass  element_class;
+};
+
+GType  gst_real_audio_demux_get_type (void);
+
+GST_ELEMENT_REGISTER_DECLARE (rademux);
+
+G_END_DECLS
+
+#endif /* __GST_REAL_AUDIO_DEMUX_H__ */
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/rdtdepay.c b/subprojects/gst-plugins-ugly/gst/realmedia/rdtdepay.c
new file mode 100644 (file)
index 0000000..f0612e7
--- /dev/null
@@ -0,0 +1,496 @@
+/* GStreamer
+ * Copyright (C) <2006> Lutz Mueller <lutz at topfrose dot de>
+ *               <2006> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <string.h>
+
+#include "gstrdtbuffer.h"
+#include "rdtdepay.h"
+
+GST_DEBUG_CATEGORY_STATIC (rdtdepay_debug);
+#define GST_CAT_DEFAULT rdtdepay_debug
+
+/* RDTDepay signals and args */
+enum
+{
+  /* FILL ME */
+  LAST_SIGNAL
+};
+
+enum
+{
+  PROP_0,
+};
+
+static GstStaticPadTemplate gst_rdt_depay_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/vnd.rn-realmedia")
+    );
+
+static GstStaticPadTemplate gst_rdt_depay_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/x-rdt, "
+        "media = (string) \"application\", "
+        "clock-rate = (int) [1, MAX ], "
+        "encoding-name = (string) \"X-REAL-RDT\""
+        /* All optional parameters
+         *
+         * "config=" 
+         */
+    )
+    );
+
+#define gst_rdt_depay_parent_class parent_class
+G_DEFINE_TYPE (GstRDTDepay, gst_rdt_depay, GST_TYPE_ELEMENT);
+GST_ELEMENT_REGISTER_DEFINE (rdtdepay, "rdtdepay",
+    GST_RANK_MARGINAL, GST_TYPE_RDT_DEPAY);
+
+static void gst_rdt_depay_finalize (GObject * object);
+
+static GstStateChangeReturn gst_rdt_depay_change_state (GstElement *
+    element, GstStateChange transition);
+
+static gboolean gst_rdt_depay_sink_event (GstPad * pad, GstObject * parent,
+    GstEvent * event);
+static GstFlowReturn gst_rdt_depay_chain (GstPad * pad, GstObject * parent,
+    GstBuffer * buf);
+
+static void
+gst_rdt_depay_class_init (GstRDTDepayClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  gobject_class->finalize = gst_rdt_depay_finalize;
+
+  gstelement_class->change_state = gst_rdt_depay_change_state;
+
+  gst_element_class_add_static_pad_template (gstelement_class,
+      &gst_rdt_depay_src_template);
+  gst_element_class_add_static_pad_template (gstelement_class,
+      &gst_rdt_depay_sink_template);
+
+  gst_element_class_set_static_metadata (gstelement_class, "RDT packet parser",
+      "Codec/Depayloader/Network",
+      "Extracts RealMedia from RDT packets",
+      "Lutz Mueller <lutz at topfrose dot de>, "
+      "Wim Taymans <wim@fluendo.com>");
+
+  GST_DEBUG_CATEGORY_INIT (rdtdepay_debug, "rdtdepay",
+      0, "Depayloader for RDT RealMedia packets");
+}
+
+static void
+gst_rdt_depay_init (GstRDTDepay * rdtdepay)
+{
+  rdtdepay->sinkpad =
+      gst_pad_new_from_static_template (&gst_rdt_depay_sink_template, "sink");
+  gst_pad_set_chain_function (rdtdepay->sinkpad, gst_rdt_depay_chain);
+  gst_pad_set_event_function (rdtdepay->sinkpad, gst_rdt_depay_sink_event);
+  gst_element_add_pad (GST_ELEMENT_CAST (rdtdepay), rdtdepay->sinkpad);
+
+  rdtdepay->srcpad =
+      gst_pad_new_from_static_template (&gst_rdt_depay_src_template, "src");
+  gst_element_add_pad (GST_ELEMENT_CAST (rdtdepay), rdtdepay->srcpad);
+}
+
+static void
+gst_rdt_depay_finalize (GObject * object)
+{
+  GstRDTDepay *rdtdepay;
+
+  rdtdepay = GST_RDT_DEPAY (object);
+
+  if (rdtdepay->header)
+    gst_buffer_unref (rdtdepay->header);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static gboolean
+gst_rdt_depay_setcaps (GstPad * pad, GstCaps * caps)
+{
+  GstStructure *structure;
+  GstRDTDepay *rdtdepay;
+  GstCaps *srccaps;
+  gint clock_rate = 1000;       /* default */
+  const GValue *value;
+  GstBuffer *header;
+
+  rdtdepay = GST_RDT_DEPAY (GST_PAD_PARENT (pad));
+
+  structure = gst_caps_get_structure (caps, 0);
+
+  if (gst_structure_has_field (structure, "clock-rate"))
+    gst_structure_get_int (structure, "clock-rate", &clock_rate);
+
+  /* config contains the RealMedia header as a buffer. */
+  value = gst_structure_get_value (structure, "config");
+  if (!value)
+    goto no_header;
+
+  header = gst_value_get_buffer (value);
+  if (!header)
+    goto no_header;
+
+  /* get other values for newsegment */
+  value = gst_structure_get_value (structure, "npt-start");
+  if (value && G_VALUE_HOLDS_UINT64 (value))
+    rdtdepay->npt_start = g_value_get_uint64 (value);
+  else
+    rdtdepay->npt_start = 0;
+  GST_DEBUG_OBJECT (rdtdepay, "NPT start %" G_GUINT64_FORMAT,
+      rdtdepay->npt_start);
+
+  value = gst_structure_get_value (structure, "npt-stop");
+  if (value && G_VALUE_HOLDS_UINT64 (value))
+    rdtdepay->npt_stop = g_value_get_uint64 (value);
+  else
+    rdtdepay->npt_stop = -1;
+
+  GST_DEBUG_OBJECT (rdtdepay, "NPT stop %" G_GUINT64_FORMAT,
+      rdtdepay->npt_stop);
+
+  value = gst_structure_get_value (structure, "play-speed");
+  if (value && G_VALUE_HOLDS_DOUBLE (value))
+    rdtdepay->play_speed = g_value_get_double (value);
+  else
+    rdtdepay->play_speed = 1.0;
+
+  value = gst_structure_get_value (structure, "play-scale");
+  if (value && G_VALUE_HOLDS_DOUBLE (value))
+    rdtdepay->play_scale = g_value_get_double (value);
+  else
+    rdtdepay->play_scale = 1.0;
+
+  /* caps seem good, configure element */
+  rdtdepay->clock_rate = clock_rate;
+
+  /* set caps on pad and on header */
+  srccaps = gst_caps_new_empty_simple ("application/vnd.rn-realmedia");
+  gst_pad_set_caps (rdtdepay->srcpad, srccaps);
+  gst_caps_unref (srccaps);
+
+  if (rdtdepay->header)
+    gst_buffer_unref (rdtdepay->header);
+  rdtdepay->header = gst_buffer_ref (header);
+
+  return TRUE;
+
+  /* ERRORS */
+no_header:
+  {
+    GST_ERROR_OBJECT (rdtdepay, "no header found in caps, no 'config' field");
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_rdt_depay_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  GstRDTDepay *depay;
+  gboolean res = TRUE;
+
+  depay = GST_RDT_DEPAY (parent);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      res = gst_rdt_depay_setcaps (pad, caps);
+      gst_event_unref (event);
+      break;
+    }
+    case GST_EVENT_FLUSH_STOP:
+      res = gst_pad_push_event (depay->srcpad, event);
+
+      gst_segment_init (&depay->segment, GST_FORMAT_UNDEFINED);
+      depay->need_newsegment = TRUE;
+      depay->next_seqnum = -1;
+      break;
+    case GST_EVENT_SEGMENT:
+    {
+      gst_event_copy_segment (event, &depay->segment);
+      /* don't pass the event downstream, we generate our own segment
+       * including the NTP time and other things we receive in caps */
+      gst_event_unref (event);
+      break;
+    }
+    default:
+      /* pass other events forward */
+      res = gst_pad_push_event (depay->srcpad, event);
+      break;
+  }
+  return res;
+}
+
+static GstEvent *
+create_segment_event (GstRDTDepay * depay, gboolean update,
+    GstClockTime position)
+{
+  GstSegment segment;
+
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+  segment.rate = depay->play_speed;
+  segment.applied_rate = depay->play_scale;
+  segment.start = position;
+
+  if (depay->npt_stop != -1)
+    segment.stop = depay->npt_stop - depay->npt_start;
+  else
+    segment.stop = -1;
+
+  segment.time = position + depay->npt_start;
+
+  return gst_event_new_segment (&segment);
+}
+
+static GstFlowReturn
+gst_rdt_depay_push (GstRDTDepay * rdtdepay, GstBuffer * buffer)
+{
+  GstFlowReturn ret;
+
+  if (rdtdepay->need_newsegment) {
+    GstEvent *event;
+
+    event = create_segment_event (rdtdepay, FALSE, 0);
+    gst_pad_push_event (rdtdepay->srcpad, event);
+
+    rdtdepay->need_newsegment = FALSE;
+  }
+
+  if (rdtdepay->discont) {
+    GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
+    rdtdepay->discont = FALSE;
+  }
+  ret = gst_pad_push (rdtdepay->srcpad, buffer);
+
+  return ret;
+}
+
+static GstFlowReturn
+gst_rdt_depay_handle_data (GstRDTDepay * rdtdepay, GstClockTime outtime,
+    GstRDTPacket * packet)
+{
+  GstFlowReturn ret;
+  GstBuffer *outbuf;
+  GstMapInfo outmap;
+  guint8 *data, *outdata;
+  guint size;
+  guint16 stream_id;
+  guint32 timestamp;
+  gint gap;
+  guint16 seqnum;
+  guint8 flags;
+  guint16 outflags;
+
+  /* get pointers to the packet data */
+  data = gst_rdt_packet_data_map (packet, &size);
+
+  outbuf = gst_buffer_new_and_alloc (12 + size);
+  GST_BUFFER_TIMESTAMP (outbuf) = outtime;
+
+  GST_DEBUG_OBJECT (rdtdepay, "have size %u", size);
+
+  /* copy over some things */
+  stream_id = gst_rdt_packet_data_get_stream_id (packet);
+  timestamp = gst_rdt_packet_data_get_timestamp (packet);
+  flags = gst_rdt_packet_data_get_flags (packet);
+
+  seqnum = gst_rdt_packet_data_get_seq (packet);
+
+  GST_DEBUG_OBJECT (rdtdepay, "stream_id %u, timestamp %u, seqnum %d, flags %d",
+      stream_id, timestamp, seqnum, flags);
+
+  if (rdtdepay->next_seqnum != -1) {
+    gap = gst_rdt_buffer_compare_seqnum (seqnum, rdtdepay->next_seqnum);
+
+    /* if we have no gap, all is fine */
+    if (G_UNLIKELY (gap != 0)) {
+      GST_LOG_OBJECT (rdtdepay, "got packet %u, expected %u, gap %d", seqnum,
+          rdtdepay->next_seqnum, gap);
+      if (gap < 0) {
+        /* seqnum > next_seqnum, we are missing some packets, this is always a
+         * DISCONT. */
+        GST_LOG_OBJECT (rdtdepay, "%d missing packets", gap);
+        rdtdepay->discont = TRUE;
+      } else {
+        /* seqnum < next_seqnum, we have seen this packet before or the sender
+         * could be restarted. If the packet is not too old, we throw it away as
+         * a duplicate, otherwise we mark discont and continue. 100 misordered
+         * packets is a good threshold. See also RFC 4737. */
+        if (gap < 100)
+          goto dropping;
+
+        GST_LOG_OBJECT (rdtdepay,
+            "%d > 100, packet too old, sender likely restarted", gap);
+        rdtdepay->discont = TRUE;
+      }
+    }
+  }
+  rdtdepay->next_seqnum = (seqnum + 1);
+  if (rdtdepay->next_seqnum == 0xff00)
+    rdtdepay->next_seqnum = 0;
+
+  if ((flags & 1) == 0)
+    outflags = 2;
+  else
+    outflags = 0;
+
+  gst_buffer_map (outbuf, &outmap, GST_MAP_WRITE);
+  outdata = outmap.data;
+  GST_WRITE_UINT16_BE (outdata + 0, 0); /* version   */
+  GST_WRITE_UINT16_BE (outdata + 2, size + 12); /* length    */
+  GST_WRITE_UINT16_BE (outdata + 4, stream_id); /* stream    */
+  GST_WRITE_UINT32_BE (outdata + 6, timestamp); /* timestamp */
+  GST_WRITE_UINT16_BE (outdata + 10, outflags); /* flags     */
+  memcpy (outdata + 12, data, size);
+  gst_buffer_unmap (outbuf, &outmap);
+  gst_buffer_resize (outbuf, 0, 12 + size);
+
+  gst_rdt_packet_data_unmap (packet);
+
+  GST_DEBUG_OBJECT (rdtdepay, "Pushing packet, outtime %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (outtime));
+
+  ret = gst_rdt_depay_push (rdtdepay, outbuf);
+
+  return ret;
+
+  /* ERRORS */
+dropping:
+  {
+    GST_WARNING_OBJECT (rdtdepay, "%d <= 100, dropping old packet", gap);
+    return GST_FLOW_OK;
+  }
+}
+
+static GstFlowReturn
+gst_rdt_depay_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+{
+  GstRDTDepay *rdtdepay;
+  GstFlowReturn ret;
+  GstClockTime timestamp;
+  gboolean more;
+  GstRDTPacket packet;
+
+  rdtdepay = GST_RDT_DEPAY (parent);
+
+  if (GST_BUFFER_IS_DISCONT (buf)) {
+    GST_LOG_OBJECT (rdtdepay, "received discont");
+    rdtdepay->discont = TRUE;
+  }
+
+  if (rdtdepay->header) {
+    GstBuffer *out;
+
+    out = rdtdepay->header;
+    rdtdepay->header = NULL;
+
+    /* push header data first */
+    gst_rdt_depay_push (rdtdepay, out);
+  }
+
+  /* save timestamp */
+  timestamp = GST_BUFFER_TIMESTAMP (buf);
+
+  ret = GST_FLOW_OK;
+
+  GST_LOG_OBJECT (rdtdepay, "received buffer timestamp %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (timestamp));
+
+  /* data is in RDT format. */
+  more = gst_rdt_buffer_get_first_packet (buf, &packet);
+  while (more) {
+    GstRDTType type;
+
+    type = gst_rdt_packet_get_type (&packet);
+    GST_DEBUG_OBJECT (rdtdepay, "Have packet of type %04x", type);
+
+    if (GST_RDT_IS_DATA_TYPE (type)) {
+      GST_DEBUG_OBJECT (rdtdepay, "We have a data packet");
+      ret = gst_rdt_depay_handle_data (rdtdepay, timestamp, &packet);
+    } else {
+      switch (type) {
+        default:
+          GST_DEBUG_OBJECT (rdtdepay, "Ignoring packet");
+          break;
+      }
+    }
+    if (ret != GST_FLOW_OK)
+      break;
+
+    more = gst_rdt_packet_move_to_next (&packet);
+  }
+
+  gst_buffer_unref (buf);
+
+  return ret;
+}
+
+static GstStateChangeReturn
+gst_rdt_depay_change_state (GstElement * element, GstStateChange transition)
+{
+  GstRDTDepay *rdtdepay;
+  GstStateChangeReturn ret;
+
+  rdtdepay = GST_RDT_DEPAY (element);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      gst_segment_init (&rdtdepay->segment, GST_FORMAT_UNDEFINED);
+      rdtdepay->next_seqnum = -1;
+      rdtdepay->need_newsegment = TRUE;
+      break;
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      if (rdtdepay->header)
+        gst_buffer_unref (rdtdepay->header);
+      rdtdepay->header = NULL;
+      break;
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      break;
+    default:
+      break;
+  }
+  return ret;
+}
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/rdtdepay.h b/subprojects/gst-plugins-ugly/gst/realmedia/rdtdepay.h
new file mode 100644 (file)
index 0000000..8b208fc
--- /dev/null
@@ -0,0 +1,74 @@
+/* GStreamer
+ * Copyright (C) <2006> Lutz Mueller <lutz at topfrose dot de>
+ *               <2006> Wim Taymans <wim@fluendo.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_RDT_DEPAY_H__
+#define __GST_RDT_DEPAY_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_RDT_DEPAY \
+  (gst_rdt_depay_get_type())
+#define GST_RDT_DEPAY(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RDT_DEPAY,GstRDTDepay))
+#define GST_RDT_DEPAY_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RDT_DEPAY,GstRDTDepayClass))
+#define GST_IS_RDT_DEPAY(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RDT_DEPAY))
+#define GST_IS_RDT_DEPAY_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RDT_DEPAY))
+
+typedef struct _GstRDTDepay GstRDTDepay;
+typedef struct _GstRDTDepayClass GstRDTDepayClass;
+
+struct _GstRDTDepay
+{
+  GstElement parent;
+
+  GstPad *sinkpad;
+  GstPad *srcpad;
+
+  guint clock_rate;
+  GstClockTime npt_start;
+  GstClockTime npt_stop;
+  gdouble play_speed;
+  gdouble play_scale;
+
+  guint32 next_seqnum;
+
+  gboolean discont;
+  gboolean need_newsegment;
+  GstSegment segment;
+  GstBuffer *header;
+};
+
+struct _GstRDTDepayClass
+{
+  GstElementClass parent_class;
+};
+
+GType gst_rdt_depay_get_type (void);
+
+GST_ELEMENT_REGISTER_DECLARE (rdtdepay);
+
+G_END_DECLS
+
+#endif /* __GST_RDT_DEPAY_H__ */
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/rdtjitterbuffer.c b/subprojects/gst-plugins-ugly/gst/realmedia/rdtjitterbuffer.c
new file mode 100644 (file)
index 0000000..d0b8de0
--- /dev/null
@@ -0,0 +1,531 @@
+/* GStreamer
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#include <string.h>
+#include <stdlib.h>
+
+#include "rdtjitterbuffer.h"
+#include "gstrdtbuffer.h"
+
+GST_DEBUG_CATEGORY_STATIC (rdt_jitter_buffer_debug);
+#define GST_CAT_DEFAULT rdt_jitter_buffer_debug
+
+#define MAX_WINDOW     RDT_JITTER_BUFFER_MAX_WINDOW
+#define MAX_TIME       (2 * GST_SECOND)
+
+/* signals and args */
+enum
+{
+  LAST_SIGNAL
+};
+
+enum
+{
+  PROP_0
+};
+
+/* GObject vmethods */
+static void rdt_jitter_buffer_finalize (GObject * object);
+
+/* static guint rdt_jitter_buffer_signals[LAST_SIGNAL] = { 0 }; */
+
+G_DEFINE_TYPE (RDTJitterBuffer, rdt_jitter_buffer, G_TYPE_OBJECT);
+
+static void
+rdt_jitter_buffer_class_init (RDTJitterBufferClass * klass)
+{
+  GObjectClass *gobject_class;
+
+  gobject_class = (GObjectClass *) klass;
+
+  gobject_class->finalize = rdt_jitter_buffer_finalize;
+
+  GST_DEBUG_CATEGORY_INIT (rdt_jitter_buffer_debug, "rdtjitterbuffer", 0,
+      "RDT Jitter Buffer");
+}
+
+static void
+rdt_jitter_buffer_init (RDTJitterBuffer * jbuf)
+{
+  jbuf->packets = g_queue_new ();
+
+  rdt_jitter_buffer_reset_skew (jbuf);
+}
+
+static void
+rdt_jitter_buffer_finalize (GObject * object)
+{
+  RDTJitterBuffer *jbuf;
+
+  jbuf = RDT_JITTER_BUFFER_CAST (object);
+
+  rdt_jitter_buffer_flush (jbuf);
+  g_queue_free (jbuf->packets);
+
+  G_OBJECT_CLASS (rdt_jitter_buffer_parent_class)->finalize (object);
+}
+
+/**
+ * rdt_jitter_buffer_new:
+ *
+ * Create an #RDTJitterBuffer.
+ *
+ * Returns: a new #RDTJitterBuffer. Use g_object_unref() after usage.
+ */
+RDTJitterBuffer *
+rdt_jitter_buffer_new (void)
+{
+  RDTJitterBuffer *jbuf;
+
+  jbuf = g_object_new (RDT_TYPE_JITTER_BUFFER, NULL);
+
+  return jbuf;
+}
+
+void
+rdt_jitter_buffer_reset_skew (RDTJitterBuffer * jbuf)
+{
+  jbuf->base_time = -1;
+  jbuf->base_rtptime = -1;
+  jbuf->ext_rtptime = -1;
+  jbuf->window_pos = 0;
+  jbuf->window_filling = TRUE;
+  jbuf->window_min = 0;
+  jbuf->skew = 0;
+  jbuf->prev_send_diff = -1;
+}
+
+/* For the clock skew we use a windowed low point averaging algorithm as can be
+ * found in http://www.grame.fr/pub/TR-050601.pdf. The idea is that the jitter is
+ * composed of:
+ *
+ *  J = N + n
+ *
+ *   N   : a constant network delay.
+ *   n   : random added noise. The noise is concentrated around 0
+ *
+ * In the receiver we can track the elapsed time at the sender with:
+ *
+ *  send_diff(i) = (Tsi - Ts0);
+ *
+ *   Tsi : The time at the sender at packet i
+ *   Ts0 : The time at the sender at the first packet
+ *
+ * This is the difference between the RDT timestamp in the first received packet
+ * and the current packet.
+ *
+ * At the receiver we have to deal with the jitter introduced by the network.
+ *
+ *  recv_diff(i) = (Tri - Tr0)
+ *
+ *   Tri : The time at the receiver at packet i
+ *   Tr0 : The time at the receiver at the first packet
+ *
+ * Both of these values contain a jitter Ji, a jitter for packet i, so we can
+ * write:
+ *
+ *  recv_diff(i) = (Cri + D + ni) - (Cr0 + D + n0))
+ *
+ *    Cri    : The time of the clock at the receiver for packet i
+ *    D + ni : The jitter when receiving packet i
+ *
+ * We see that the network delay is irrelevant here as we can eliminate D:
+ *
+ *  recv_diff(i) = (Cri + ni) - (Cr0 + n0))
+ *
+ * The drift is now expressed as:
+ *
+ *  Drift(i) = recv_diff(i) - send_diff(i);
+ *
+ * We now keep the W latest values of Drift and find the minimum (this is the
+ * one with the lowest network jitter and thus the one which is least affected
+ * by it). We average this lowest value to smooth out the resulting network skew.
+ *
+ * Both the window and the weighting used for averaging influence the accuracy
+ * of the drift estimation. Finding the correct parameters turns out to be a
+ * compromise between accuracy and inertia. 
+ *
+ * We use a 2 second window or up to 512 data points, which is statistically big
+ * enough to catch spikes (FIXME, detect spikes).
+ * We also use a rather large weighting factor (125) to smoothly adapt. During
+ * startup, when filling the window, we use a parabolic weighting factor, the
+ * more the window is filled, the faster we move to the detected possible skew.
+ *
+ * Returns: @time adjusted with the clock skew.
+ */
+static GstClockTime
+calculate_skew (RDTJitterBuffer * jbuf, guint32 rtptime, GstClockTime time,
+    guint32 clock_rate)
+{
+  guint64 ext_rtptime;
+  guint64 send_diff, recv_diff;
+  gint64 delta;
+  gint64 old;
+  gint pos, i;
+  GstClockTime gstrtptime, out_time;
+
+  //ext_rtptime = gst_rtp_buffer_ext_timestamp (&jbuf->ext_rtptime, rtptime);
+  ext_rtptime = rtptime;
+
+  gstrtptime = gst_util_uint64_scale_int (ext_rtptime, GST_SECOND, clock_rate);
+
+again:
+  /* first time, lock on to time and gstrtptime */
+  if (jbuf->base_time == -1)
+    jbuf->base_time = time;
+  if (jbuf->base_rtptime == -1)
+    jbuf->base_rtptime = gstrtptime;
+
+  if (gstrtptime >= jbuf->base_rtptime)
+    send_diff = gstrtptime - jbuf->base_rtptime;
+  else {
+    /* elapsed time at sender, timestamps can go backwards and thus be smaller
+     * than our base time, take a new base time in that case. */
+    GST_DEBUG ("backward timestamps at server, taking new base time");
+    jbuf->base_rtptime = gstrtptime;
+    jbuf->base_time = time;
+    send_diff = 0;
+  }
+
+  GST_DEBUG ("extrtp %" G_GUINT64_FORMAT ", gstrtp %" GST_TIME_FORMAT ", base %"
+      GST_TIME_FORMAT ", send_diff %" GST_TIME_FORMAT, ext_rtptime,
+      GST_TIME_ARGS (gstrtptime), GST_TIME_ARGS (jbuf->base_rtptime),
+      GST_TIME_ARGS (send_diff));
+
+  if (jbuf->prev_send_diff != -1 && time != -1) {
+    gint64 delta_diff;
+
+    if (send_diff > jbuf->prev_send_diff)
+      delta_diff = send_diff - jbuf->prev_send_diff;
+    else
+      delta_diff = jbuf->prev_send_diff - send_diff;
+
+    /* server changed rtp timestamps too quickly, reset skew detection and start
+     * again. This value is sortof arbitrary and can be a bad measurement up if
+     * there are many packets missing because then we get a big gap that is
+     * unrelated to a timestamp switch. */
+    if (delta_diff > GST_SECOND) {
+      GST_DEBUG ("delta changed too quickly %" GST_TIME_FORMAT " reset skew",
+          GST_TIME_ARGS (delta_diff));
+      rdt_jitter_buffer_reset_skew (jbuf);
+      goto again;
+    }
+  }
+  jbuf->prev_send_diff = send_diff;
+
+  /* we don't have an arrival timestamp so we can't do skew detection. we
+   * should still apply a timestamp based on RDT timestamp and base_time */
+  if (time == -1)
+    goto no_skew;
+
+  /* elapsed time at receiver, includes the jitter */
+  recv_diff = time - jbuf->base_time;
+
+  GST_DEBUG ("time %" GST_TIME_FORMAT ", base %" GST_TIME_FORMAT ", recv_diff %"
+      GST_TIME_FORMAT, GST_TIME_ARGS (time), GST_TIME_ARGS (jbuf->base_time),
+      GST_TIME_ARGS (recv_diff));
+
+  /* measure the diff */
+  delta = ((gint64) recv_diff) - ((gint64) send_diff);
+
+  pos = jbuf->window_pos;
+
+  if (jbuf->window_filling) {
+    /* we are filling the window */
+    GST_DEBUG ("filling %d, delta %" G_GINT64_FORMAT, pos, delta);
+    jbuf->window[pos++] = delta;
+    /* calc the min delta we observed */
+    if (pos == 1 || delta < jbuf->window_min)
+      jbuf->window_min = delta;
+
+    if (send_diff >= MAX_TIME || pos >= MAX_WINDOW) {
+      jbuf->window_size = pos;
+
+      /* window filled */
+      GST_DEBUG ("min %" G_GINT64_FORMAT, jbuf->window_min);
+
+      /* the skew is now the min */
+      jbuf->skew = jbuf->window_min;
+      jbuf->window_filling = FALSE;
+    } else {
+      gint perc_time, perc_window, perc;
+
+      /* figure out how much we filled the window, this depends on the amount of
+       * time we have or the max number of points we keep. */
+      perc_time = send_diff * 100 / MAX_TIME;
+      perc_window = pos * 100 / MAX_WINDOW;
+      perc = MAX (perc_time, perc_window);
+
+      /* make a parabolic function, the closer we get to the MAX, the more value
+       * we give to the scaling factor of the new value */
+      perc = perc * perc;
+
+      /* quickly go to the min value when we are filling up, slowly when we are
+       * just starting because we're not sure it's a good value yet. */
+      jbuf->skew =
+          (perc * jbuf->window_min + ((10000 - perc) * jbuf->skew)) / 10000;
+      jbuf->window_size = pos + 1;
+    }
+  } else {
+    /* pick old value and store new value. We keep the previous value in order
+     * to quickly check if the min of the window changed */
+    old = jbuf->window[pos];
+    jbuf->window[pos++] = delta;
+
+    if (delta <= jbuf->window_min) {
+      /* if the new value we inserted is smaller or equal to the current min,
+       * it becomes the new min */
+      jbuf->window_min = delta;
+    } else if (old == jbuf->window_min) {
+      gint64 min = G_MAXINT64;
+
+      /* if we removed the old min, we have to find a new min */
+      for (i = 0; i < jbuf->window_size; i++) {
+        /* we found another value equal to the old min, we can stop searching now */
+        if (jbuf->window[i] == old) {
+          min = old;
+          break;
+        }
+        if (jbuf->window[i] < min)
+          min = jbuf->window[i];
+      }
+      jbuf->window_min = min;
+    }
+    /* average the min values */
+    jbuf->skew = (jbuf->window_min + (124 * jbuf->skew)) / 125;
+    GST_DEBUG ("delta %" G_GINT64_FORMAT ", new min: %" G_GINT64_FORMAT,
+        delta, jbuf->window_min);
+  }
+  /* wrap around in the window */
+  if (pos >= jbuf->window_size)
+    pos = 0;
+  jbuf->window_pos = pos;
+
+no_skew:
+  /* the output time is defined as the base timestamp plus the RDT time
+   * adjusted for the clock skew .*/
+  out_time = jbuf->base_time + send_diff + jbuf->skew;
+
+  GST_DEBUG ("skew %" G_GINT64_FORMAT ", out %" GST_TIME_FORMAT,
+      jbuf->skew, GST_TIME_ARGS (out_time));
+
+  return out_time;
+}
+
+/**
+ * rdt_jitter_buffer_insert:
+ * @jbuf: an #RDTJitterBuffer
+ * @buf: a buffer
+ * @time: a running_time when this buffer was received in nanoseconds
+ * @clock_rate: the clock-rate of the payload of @buf
+ * @tail: TRUE when the tail element changed.
+ *
+ * Inserts @buf into the packet queue of @jbuf. The sequence number of the
+ * packet will be used to sort the packets. This function takes ownerhip of
+ * @buf when the function returns %TRUE.
+ * @buf should have writable metadata when calling this function.
+ *
+ * Returns: %FALSE if a packet with the same number already existed.
+ */
+gboolean
+rdt_jitter_buffer_insert (RDTJitterBuffer * jbuf, GstBuffer * buf,
+    GstClockTime time, guint32 clock_rate, gboolean * tail)
+{
+  GList *list;
+  guint32 rtptime;
+  guint16 seqnum;
+  GstRDTPacket packet;
+  gboolean more;
+
+  g_return_val_if_fail (jbuf != NULL, FALSE);
+  g_return_val_if_fail (buf != NULL, FALSE);
+
+  more = gst_rdt_buffer_get_first_packet (buf, &packet);
+  /* programmer error */
+  g_return_val_if_fail (more == TRUE, FALSE);
+
+  seqnum = gst_rdt_packet_data_get_seq (&packet);
+  /* do skew calculation by measuring the difference between rtptime and the
+   * receive time, this function will retimestamp @buf with the skew corrected
+   * running time. */
+  rtptime = gst_rdt_packet_data_get_timestamp (&packet);
+
+  /* loop the list to skip strictly smaller seqnum buffers */
+  for (list = jbuf->packets->head; list; list = g_list_next (list)) {
+    guint16 qseq;
+    gint gap;
+
+    more =
+        gst_rdt_buffer_get_first_packet (GST_BUFFER_CAST (list->data), &packet);
+    /* programmer error */
+    g_return_val_if_fail (more == TRUE, FALSE);
+
+    qseq = gst_rdt_packet_data_get_seq (&packet);
+
+    /* compare the new seqnum to the one in the buffer */
+    gap = gst_rdt_buffer_compare_seqnum (seqnum, qseq);
+
+    /* we hit a packet with the same seqnum, notify a duplicate */
+    if (G_UNLIKELY (gap == 0))
+      goto duplicate;
+
+    /* seqnum > qseq, we can stop looking */
+    if (G_LIKELY (gap < 0))
+      break;
+  }
+
+
+  if (clock_rate) {
+    time = calculate_skew (jbuf, rtptime, time, clock_rate);
+    GST_BUFFER_TIMESTAMP (buf) = time;
+  }
+
+  if (list)
+    g_queue_insert_before (jbuf->packets, list, buf);
+  else
+    g_queue_push_tail (jbuf->packets, buf);
+
+  /* tail was changed when we did not find a previous packet, we set the return
+   * flag when requested. */
+  if (tail)
+    *tail = (list == NULL);
+
+  return TRUE;
+
+  /* ERRORS */
+duplicate:
+  {
+    GST_WARNING ("duplicate packet %d found", (gint) seqnum);
+    return FALSE;
+  }
+}
+
+/**
+ * rdt_jitter_buffer_pop:
+ * @jbuf: an #RDTJitterBuffer
+ *
+ * Pops the oldest buffer from the packet queue of @jbuf. The popped buffer will
+ * have its timestamp adjusted with the incoming running_time and the detected
+ * clock skew.
+ *
+ * Returns: a #GstBuffer or %NULL when there was no packet in the queue.
+ */
+GstBuffer *
+rdt_jitter_buffer_pop (RDTJitterBuffer * jbuf)
+{
+  GstBuffer *buf;
+
+  g_return_val_if_fail (jbuf != NULL, FALSE);
+
+  buf = g_queue_pop_tail (jbuf->packets);
+
+  return buf;
+}
+
+/**
+ * rdt_jitter_buffer_peek:
+ * @jbuf: an #RDTJitterBuffer
+ *
+ * Peek the oldest buffer from the packet queue of @jbuf. Register a callback
+ * with rdt_jitter_buffer_set_tail_changed() to be notified when an older packet
+ * was inserted in the queue.
+ *
+ * Returns: a #GstBuffer or %NULL when there was no packet in the queue.
+ */
+GstBuffer *
+rdt_jitter_buffer_peek (RDTJitterBuffer * jbuf)
+{
+  GstBuffer *buf;
+
+  g_return_val_if_fail (jbuf != NULL, FALSE);
+
+  buf = g_queue_peek_tail (jbuf->packets);
+
+  return buf;
+}
+
+/**
+ * rdt_jitter_buffer_flush:
+ * @jbuf: an #RDTJitterBuffer
+ *
+ * Flush all packets from the jitterbuffer.
+ */
+void
+rdt_jitter_buffer_flush (RDTJitterBuffer * jbuf)
+{
+  GstBuffer *buffer;
+
+  g_return_if_fail (jbuf != NULL);
+
+  while ((buffer = g_queue_pop_head (jbuf->packets)))
+    gst_buffer_unref (buffer);
+}
+
+/**
+ * rdt_jitter_buffer_num_packets:
+ * @jbuf: an #RDTJitterBuffer
+ *
+ * Get the number of packets currently in "jbuf.
+ *
+ * Returns: The number of packets in @jbuf.
+ */
+guint
+rdt_jitter_buffer_num_packets (RDTJitterBuffer * jbuf)
+{
+  g_return_val_if_fail (jbuf != NULL, 0);
+
+  return jbuf->packets->length;
+}
+
+/**
+ * rdt_jitter_buffer_get_ts_diff:
+ * @jbuf: an #RDTJitterBuffer
+ *
+ * Get the difference between the timestamps of first and last packet in the
+ * jitterbuffer.
+ *
+ * Returns: The difference expressed in the timestamp units of the packets.
+ */
+guint32
+rdt_jitter_buffer_get_ts_diff (RDTJitterBuffer * jbuf)
+{
+  guint64 high_ts, low_ts;
+  GstBuffer *high_buf, *low_buf;
+  guint32 result;
+
+  g_return_val_if_fail (jbuf != NULL, 0);
+
+  high_buf = g_queue_peek_head (jbuf->packets);
+  low_buf = g_queue_peek_tail (jbuf->packets);
+
+  if (!high_buf || !low_buf || high_buf == low_buf)
+    return 0;
+
+  //high_ts = gst_rtp_buffer_get_timestamp (high_buf);
+  //low_ts = gst_rtp_buffer_get_timestamp (low_buf);
+  high_ts = 0;
+  low_ts = 0;
+
+  /* it needs to work if ts wraps */
+  if (high_ts >= low_ts) {
+    result = (guint32) (high_ts - low_ts);
+  } else {
+    result = (guint32) (high_ts + G_MAXUINT32 + 1 - low_ts);
+  }
+  return result;
+}
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/rdtjitterbuffer.h b/subprojects/gst-plugins-ugly/gst/realmedia/rdtjitterbuffer.h
new file mode 100644 (file)
index 0000000..7eea5e6
--- /dev/null
@@ -0,0 +1,91 @@
+/* GStreamer
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.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 __RDT_JITTER_BUFFER_H__
+#define __RDT_JITTER_BUFFER_H__
+
+#include <gst/gst.h>
+
+typedef struct _RDTJitterBuffer RDTJitterBuffer;
+typedef struct _RDTJitterBufferClass RDTJitterBufferClass;
+
+#define RDT_TYPE_JITTER_BUFFER             (rdt_jitter_buffer_get_type())
+#define RDT_JITTER_BUFFER(src)             (G_TYPE_CHECK_INSTANCE_CAST((src),RDT_TYPE_JITTER_BUFFER,RDTJitterBuffer))
+#define RDT_JITTER_BUFFER_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),RDT_TYPE_JITTER_BUFFER,RDTJitterBufferClass))
+#define RDT_IS_JITTER_BUFFER(src)          (G_TYPE_CHECK_INSTANCE_TYPE((src),RDT_TYPE_JITTER_BUFFER))
+#define RDT_IS_JITTER_BUFFER_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),RDT_TYPE_JITTER_BUFFER))
+#define RDT_JITTER_BUFFER_CAST(src)        ((RDTJitterBuffer *)(src))
+
+/**
+ * RTPTailChanged:
+ * @jbuf: an #RDTJitterBuffer
+ * @user_data: user data specified when registering
+ *
+ * This callback will be called when the tail buffer of @jbuf changed.
+ */
+typedef void (*RTPTailChanged) (RDTJitterBuffer *jbuf, gpointer user_data);
+
+#define RDT_JITTER_BUFFER_MAX_WINDOW 512
+/**
+ * RDTJitterBuffer:
+ *
+ * A JitterBuffer in the #RTPSession
+ */
+struct _RDTJitterBuffer {
+  GObject        object;
+
+  GQueue        *packets;
+
+  /* for calculating skew */
+  GstClockTime   base_time;
+  GstClockTime   base_rtptime;
+  guint64        ext_rtptime;
+  gint64         window[RDT_JITTER_BUFFER_MAX_WINDOW];
+  guint          window_pos;
+  guint          window_size;
+  gboolean       window_filling;
+  gint64         window_min;
+  gint64         skew;
+  gint64         prev_send_diff;
+};
+
+struct _RDTJitterBufferClass {
+  GObjectClass   parent_class;
+};
+
+GType rdt_jitter_buffer_get_type (void);
+
+/* managing lifetime */
+RDTJitterBuffer*      rdt_jitter_buffer_new              (void);
+
+void                  rdt_jitter_buffer_reset_skew       (RDTJitterBuffer *jbuf);
+
+gboolean              rdt_jitter_buffer_insert           (RDTJitterBuffer *jbuf, GstBuffer *buf,
+                                                         GstClockTime time,
+                                                         guint32 clock_rate,
+                                                         gboolean *tail);
+GstBuffer *           rdt_jitter_buffer_peek             (RDTJitterBuffer *jbuf);
+GstBuffer *           rdt_jitter_buffer_pop              (RDTJitterBuffer *jbuf);
+
+void                  rdt_jitter_buffer_flush            (RDTJitterBuffer *jbuf);
+
+guint                 rdt_jitter_buffer_num_packets      (RDTJitterBuffer *jbuf);
+guint32               rdt_jitter_buffer_get_ts_diff      (RDTJitterBuffer *jbuf);
+
+#endif /* __RDT_JITTER_BUFFER_H__ */
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/rdtmanager.c b/subprojects/gst-plugins-ugly/gst/realmedia/rdtmanager.c
new file mode 100644 (file)
index 0000000..978bc9e
--- /dev/null
@@ -0,0 +1,1371 @@
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
+ *               <2013> Wim Taymans <wim.taymans@gmail.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.
+ */
+/*
+ * Unless otherwise indicated, Source Code is licensed under MIT license.
+ * See further explanation attached in License Statement (distributed in the file
+ * LICENSE).
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+/* Element-Checklist-Version: 5 */
+
+/**
+ * SECTION:element-rdtmanager
+ * @title: rdtmanager
+ * @see_also: GstRtspSrc
+ *
+ * A simple RTP session manager used internally by rtspsrc.
+ */
+
+/* #define HAVE_RTCP */
+
+#include "gstrdtbuffer.h"
+#include "rdtmanager.h"
+#include "rdtjitterbuffer.h"
+
+#include <gst/glib-compat-private.h>
+
+#include <stdio.h>
+
+GST_DEBUG_CATEGORY_STATIC (rdtmanager_debug);
+#define GST_CAT_DEFAULT (rdtmanager_debug)
+
+/* GstRDTManager signals and args */
+enum
+{
+  SIGNAL_REQUEST_PT_MAP,
+  SIGNAL_CLEAR_PT_MAP,
+
+  SIGNAL_ON_NEW_SSRC,
+  SIGNAL_ON_SSRC_COLLISION,
+  SIGNAL_ON_SSRC_VALIDATED,
+  SIGNAL_ON_SSRC_ACTIVE,
+  SIGNAL_ON_SSRC_SDES,
+  SIGNAL_ON_BYE_SSRC,
+  SIGNAL_ON_BYE_TIMEOUT,
+  SIGNAL_ON_TIMEOUT,
+  SIGNAL_ON_NPT_STOP,
+  LAST_SIGNAL
+};
+
+#define DEFAULT_LATENCY_MS      200
+
+enum
+{
+  PROP_0,
+  PROP_LATENCY
+};
+
+static GstStaticPadTemplate gst_rdt_manager_recv_rtp_sink_template =
+GST_STATIC_PAD_TEMPLATE ("recv_rtp_sink_%u",
+    GST_PAD_SINK,
+    GST_PAD_REQUEST,
+    GST_STATIC_CAPS ("application/x-rdt")
+    );
+
+static GstStaticPadTemplate gst_rdt_manager_recv_rtcp_sink_template =
+GST_STATIC_PAD_TEMPLATE ("recv_rtcp_sink_%u",
+    GST_PAD_SINK,
+    GST_PAD_REQUEST,
+    GST_STATIC_CAPS ("application/x-rtcp")
+    );
+
+static GstStaticPadTemplate gst_rdt_manager_recv_rtp_src_template =
+GST_STATIC_PAD_TEMPLATE ("recv_rtp_src_%u_%u_%u",
+    GST_PAD_SRC,
+    GST_PAD_SOMETIMES,
+    GST_STATIC_CAPS ("application/x-rdt")
+    );
+
+static GstStaticPadTemplate gst_rdt_manager_rtcp_src_template =
+GST_STATIC_PAD_TEMPLATE ("rtcp_src_%u",
+    GST_PAD_SRC,
+    GST_PAD_REQUEST,
+    GST_STATIC_CAPS ("application/x-rtcp")
+    );
+
+static void gst_rdt_manager_finalize (GObject * object);
+static void gst_rdt_manager_set_property (GObject * object,
+    guint prop_id, const GValue * value, GParamSpec * pspec);
+static void gst_rdt_manager_get_property (GObject * object,
+    guint prop_id, GValue * value, GParamSpec * pspec);
+
+static gboolean gst_rdt_manager_query_src (GstPad * pad, GstObject * parent,
+    GstQuery * query);
+static gboolean gst_rdt_manager_src_activate_mode (GstPad * pad,
+    GstObject * parent, GstPadMode mode, gboolean active);
+
+static GstClock *gst_rdt_manager_provide_clock (GstElement * element);
+static GstStateChangeReturn gst_rdt_manager_change_state (GstElement * element,
+    GstStateChange transition);
+static GstPad *gst_rdt_manager_request_new_pad (GstElement * element,
+    GstPadTemplate * templ, const gchar * name, const GstCaps * caps);
+static void gst_rdt_manager_release_pad (GstElement * element, GstPad * pad);
+
+static gboolean gst_rdt_manager_parse_caps (GstRDTManager * rdtmanager,
+    GstRDTManagerSession * session, GstCaps * caps);
+static gboolean gst_rdt_manager_event_rdt (GstPad * pad, GstObject * parent,
+    GstEvent * event);
+
+static GstFlowReturn gst_rdt_manager_chain_rdt (GstPad * pad,
+    GstObject * parent, GstBuffer * buffer);
+static GstFlowReturn gst_rdt_manager_chain_rtcp (GstPad * pad,
+    GstObject * parent, GstBuffer * buffer);
+static void gst_rdt_manager_loop (GstPad * pad);
+
+static guint gst_rdt_manager_signals[LAST_SIGNAL] = { 0 };
+
+#define JBUF_LOCK(sess)   (g_mutex_lock (&(sess)->jbuf_lock))
+
+#define JBUF_LOCK_CHECK(sess,label) G_STMT_START {    \
+  JBUF_LOCK (sess);                                   \
+  if (sess->srcresult != GST_FLOW_OK)                 \
+    goto label;                                       \
+} G_STMT_END
+
+#define JBUF_UNLOCK(sess) (g_mutex_unlock (&(sess)->jbuf_lock))
+#define JBUF_WAIT(sess)   (g_cond_wait (&(sess)->jbuf_cond, &(sess)->jbuf_lock))
+
+#define JBUF_WAIT_CHECK(sess,label) G_STMT_START {    \
+  JBUF_WAIT(sess);                                    \
+  if (sess->srcresult != GST_FLOW_OK)                 \
+    goto label;                                       \
+} G_STMT_END
+
+#define JBUF_SIGNAL(sess) (g_cond_signal (&(sess)->jbuf_cond))
+
+/* Manages the receiving end of the packets.
+ *
+ * There is one such structure for each RTP session (audio/video/...).
+ * We get the RTP/RTCP packets and stuff them into the session manager. 
+ */
+struct _GstRDTManagerSession
+{
+  /* session id */
+  gint id;
+  /* the parent bin */
+  GstRDTManager *dec;
+
+  gboolean active;
+  /* we only support one ssrc and one pt */
+  guint32 ssrc;
+  guint8 pt;
+  gint clock_rate;
+  GstCaps *caps;
+  gint64 clock_base;
+
+  GstSegment segment;
+
+  /* the last seqnum we pushed out */
+  guint32 last_popped_seqnum;
+  /* the next expected seqnum */
+  guint32 next_seqnum;
+  /* last output time */
+  GstClockTime last_out_time;
+
+  /* the pads of the session */
+  GstPad *recv_rtp_sink;
+  GstPad *recv_rtp_src;
+  GstPad *recv_rtcp_sink;
+  GstPad *rtcp_src;
+
+  GstFlowReturn srcresult;
+  gboolean blocked;
+  gboolean eos;
+  gboolean waiting;
+  gboolean discont;
+  GstClockID clock_id;
+
+  /* jitterbuffer, lock and cond */
+  RDTJitterBuffer *jbuf;
+  GMutex jbuf_lock;
+  GCond jbuf_cond;
+
+  /* some accounting */
+  guint64 num_late;
+  guint64 num_duplicates;
+};
+
+/* find a session with the given id */
+static GstRDTManagerSession *
+find_session_by_id (GstRDTManager * rdtmanager, gint id)
+{
+  GSList *walk;
+
+  for (walk = rdtmanager->sessions; walk; walk = g_slist_next (walk)) {
+    GstRDTManagerSession *sess = (GstRDTManagerSession *) walk->data;
+
+    if (sess->id == id)
+      return sess;
+  }
+  return NULL;
+}
+
+/* create a session with the given id */
+static GstRDTManagerSession *
+create_session (GstRDTManager * rdtmanager, gint id)
+{
+  GstRDTManagerSession *sess;
+
+  sess = g_new0 (GstRDTManagerSession, 1);
+  sess->id = id;
+  sess->dec = rdtmanager;
+  sess->jbuf = rdt_jitter_buffer_new ();
+  g_mutex_init (&sess->jbuf_lock);
+  g_cond_init (&sess->jbuf_cond);
+  rdtmanager->sessions = g_slist_prepend (rdtmanager->sessions, sess);
+
+  return sess;
+}
+
+static gboolean
+forward_sticky_events (GstPad * pad, GstEvent ** event, gpointer user_data)
+{
+  GstPad *srcpad = GST_PAD_CAST (user_data);
+
+  gst_pad_push_event (srcpad, gst_event_ref (*event));
+
+  return TRUE;
+}
+
+static gboolean
+activate_session (GstRDTManager * rdtmanager, GstRDTManagerSession * session,
+    guint32 ssrc, guint8 pt)
+{
+  GstPadTemplate *templ;
+  GstElementClass *klass;
+  gchar *name;
+  GstCaps *caps;
+  GValue ret = { 0 };
+  GValue args[3] = { {0}
+  , {0}
+  , {0}
+  };
+
+  GST_DEBUG_OBJECT (rdtmanager, "creating stream");
+
+  session->ssrc = ssrc;
+  session->pt = pt;
+
+  /* get pt map */
+  g_value_init (&args[0], GST_TYPE_ELEMENT);
+  g_value_set_object (&args[0], rdtmanager);
+  g_value_init (&args[1], G_TYPE_UINT);
+  g_value_set_uint (&args[1], session->id);
+  g_value_init (&args[2], G_TYPE_UINT);
+  g_value_set_uint (&args[2], pt);
+
+  g_value_init (&ret, GST_TYPE_CAPS);
+  g_value_set_boxed (&ret, NULL);
+
+  g_signal_emitv (args, gst_rdt_manager_signals[SIGNAL_REQUEST_PT_MAP], 0,
+      &ret);
+
+  g_value_unset (&args[0]);
+  g_value_unset (&args[1]);
+  g_value_unset (&args[2]);
+  caps = (GstCaps *) g_value_dup_boxed (&ret);
+  g_value_unset (&ret);
+
+  if (caps)
+    gst_rdt_manager_parse_caps (rdtmanager, session, caps);
+
+  name = g_strdup_printf ("recv_rtp_src_%u_%u_%u", session->id, ssrc, pt);
+  klass = GST_ELEMENT_GET_CLASS (rdtmanager);
+  templ = gst_element_class_get_pad_template (klass, "recv_rtp_src_%u_%u_%u");
+  session->recv_rtp_src = gst_pad_new_from_template (templ, name);
+  g_free (name);
+
+  gst_pad_set_element_private (session->recv_rtp_src, session);
+  gst_pad_set_query_function (session->recv_rtp_src, gst_rdt_manager_query_src);
+  gst_pad_set_activatemode_function (session->recv_rtp_src,
+      gst_rdt_manager_src_activate_mode);
+
+  gst_pad_set_active (session->recv_rtp_src, TRUE);
+
+  gst_pad_sticky_events_foreach (session->recv_rtp_sink, forward_sticky_events,
+      session->recv_rtp_src);
+  gst_pad_set_caps (session->recv_rtp_src, caps);
+  gst_caps_unref (caps);
+
+  gst_element_add_pad (GST_ELEMENT_CAST (rdtmanager), session->recv_rtp_src);
+
+  return TRUE;
+}
+
+static void
+free_session (GstRDTManagerSession * session)
+{
+  g_object_unref (session->jbuf);
+  g_cond_clear (&session->jbuf_cond);
+  g_mutex_clear (&session->jbuf_lock);
+  g_free (session);
+}
+
+#define gst_rdt_manager_parent_class parent_class
+G_DEFINE_TYPE (GstRDTManager, gst_rdt_manager, GST_TYPE_ELEMENT);
+GST_ELEMENT_REGISTER_DEFINE (rdtmanager, "rdtmanager",
+    GST_RANK_NONE, GST_TYPE_RDT_MANAGER);
+
+/* BOXED:UINT,UINT */
+#define g_marshal_value_peek_uint(v)     g_value_get_uint (v)
+
+static void
+gst_rdt_manager_marshal_BOXED__UINT_UINT (GClosure * closure,
+    GValue * return_value,
+    guint n_param_values,
+    const GValue * param_values,
+    gpointer invocation_hint, gpointer marshal_data)
+{
+  typedef gpointer (*GMarshalFunc_BOXED__UINT_UINT) (gpointer data1,
+      guint arg_1, guint arg_2, gpointer data2);
+  register GMarshalFunc_BOXED__UINT_UINT callback;
+  register GCClosure *cc = (GCClosure *) closure;
+  register gpointer data1, data2;
+  gpointer v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure)) {
+    data1 = closure->data;
+    data2 = g_value_peek_pointer (param_values + 0);
+  } else {
+    data1 = g_value_peek_pointer (param_values + 0);
+    data2 = closure->data;
+  }
+  callback =
+      (GMarshalFunc_BOXED__UINT_UINT) (marshal_data ? marshal_data :
+      cc->callback);
+
+  v_return = callback (data1,
+      g_marshal_value_peek_uint (param_values + 1),
+      g_marshal_value_peek_uint (param_values + 2), data2);
+
+  g_value_take_boxed (return_value, v_return);
+}
+
+static void
+gst_rdt_manager_marshal_VOID__UINT_UINT (GClosure * closure,
+    GValue * return_value,
+    guint n_param_values,
+    const GValue * param_values,
+    gpointer invocation_hint, gpointer marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__UINT_UINT) (gpointer data1,
+      guint arg_1, guint arg_2, gpointer data2);
+  register GMarshalFunc_VOID__UINT_UINT callback;
+  register GCClosure *cc = (GCClosure *) closure;
+  register gpointer data1, data2;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure)) {
+    data1 = closure->data;
+    data2 = g_value_peek_pointer (param_values + 0);
+  } else {
+    data1 = g_value_peek_pointer (param_values + 0);
+    data2 = closure->data;
+  }
+  callback =
+      (GMarshalFunc_VOID__UINT_UINT) (marshal_data ? marshal_data :
+      cc->callback);
+
+  callback (data1,
+      g_marshal_value_peek_uint (param_values + 1),
+      g_marshal_value_peek_uint (param_values + 2), data2);
+}
+
+static void
+gst_rdt_manager_class_init (GstRDTManagerClass * g_class)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstRDTManagerClass *klass;
+
+  klass = (GstRDTManagerClass *) g_class;
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+
+  gobject_class->finalize = gst_rdt_manager_finalize;
+  gobject_class->set_property = gst_rdt_manager_set_property;
+  gobject_class->get_property = gst_rdt_manager_get_property;
+
+  g_object_class_install_property (gobject_class, PROP_LATENCY,
+      g_param_spec_uint ("latency", "Buffer latency in ms",
+          "Amount of ms to buffer", 0, G_MAXUINT, DEFAULT_LATENCY_MS,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstRDTManager::request-pt-map:
+   * @rdtmanager: the object which received the signal
+   * @session: the session
+   * @pt: the pt
+   *
+   * Request the payload type as #GstCaps for @pt in @session.
+   */
+  gst_rdt_manager_signals[SIGNAL_REQUEST_PT_MAP] =
+      g_signal_new ("request-pt-map", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, request_pt_map),
+      NULL, NULL, gst_rdt_manager_marshal_BOXED__UINT_UINT, GST_TYPE_CAPS, 2,
+      G_TYPE_UINT, G_TYPE_UINT);
+
+  /**
+   * GstRDTManager::clear-pt-map:
+   * @rtpbin: the object which received the signal
+   *
+   * Clear all previously cached pt-mapping obtained with
+   * GstRDTManager::request-pt-map.
+   */
+  gst_rdt_manager_signals[SIGNAL_CLEAR_PT_MAP] =
+      g_signal_new ("clear-pt-map", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, clear_pt_map),
+      NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE);
+
+  /**
+   * GstRDTManager::on-bye-ssrc:
+   * @rtpbin: the object which received the signal
+   * @session: the session
+   * @ssrc: the SSRC
+   *
+   * Notify of an SSRC that became inactive because of a BYE packet.
+   */
+  gst_rdt_manager_signals[SIGNAL_ON_BYE_SSRC] =
+      g_signal_new ("on-bye-ssrc", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, on_bye_ssrc),
+      NULL, NULL, gst_rdt_manager_marshal_VOID__UINT_UINT, G_TYPE_NONE, 2,
+      G_TYPE_UINT, G_TYPE_UINT);
+  /**
+   * GstRDTManager::on-bye-timeout:
+   * @rtpbin: the object which received the signal
+   * @session: the session
+   * @ssrc: the SSRC
+   *
+   * Notify of an SSRC that has timed out because of BYE
+   */
+  gst_rdt_manager_signals[SIGNAL_ON_BYE_TIMEOUT] =
+      g_signal_new ("on-bye-timeout", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, on_bye_timeout),
+      NULL, NULL, gst_rdt_manager_marshal_VOID__UINT_UINT, G_TYPE_NONE, 2,
+      G_TYPE_UINT, G_TYPE_UINT);
+  /**
+   * GstRDTManager::on-timeout:
+   * @rtpbin: the object which received the signal
+   * @session: the session
+   * @ssrc: the SSRC
+   *
+   * Notify of an SSRC that has timed out
+   */
+  gst_rdt_manager_signals[SIGNAL_ON_TIMEOUT] =
+      g_signal_new ("on-timeout", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, on_timeout),
+      NULL, NULL, gst_rdt_manager_marshal_VOID__UINT_UINT, G_TYPE_NONE, 2,
+      G_TYPE_UINT, G_TYPE_UINT);
+
+  /**
+   * GstRDTManager::on-npt-stop:
+   * @rtpbin: the object which received the signal
+   * @session: the session
+   * @ssrc: the SSRC
+   *
+   * Notify that SSRC sender has sent data up to the configured NPT stop time.
+   */
+  gst_rdt_manager_signals[SIGNAL_ON_NPT_STOP] =
+      g_signal_new ("on-npt-stop", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRDTManagerClass, on_npt_stop),
+      NULL, NULL, gst_rdt_manager_marshal_VOID__UINT_UINT, G_TYPE_NONE, 2,
+      G_TYPE_UINT, G_TYPE_UINT);
+
+
+  gstelement_class->provide_clock =
+      GST_DEBUG_FUNCPTR (gst_rdt_manager_provide_clock);
+  gstelement_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_rdt_manager_change_state);
+  gstelement_class->request_new_pad =
+      GST_DEBUG_FUNCPTR (gst_rdt_manager_request_new_pad);
+  gstelement_class->release_pad =
+      GST_DEBUG_FUNCPTR (gst_rdt_manager_release_pad);
+
+  /* sink pads */
+  gst_element_class_add_static_pad_template (gstelement_class,
+      &gst_rdt_manager_recv_rtp_sink_template);
+  gst_element_class_add_static_pad_template (gstelement_class,
+      &gst_rdt_manager_recv_rtcp_sink_template);
+  /* src pads */
+  gst_element_class_add_static_pad_template (gstelement_class,
+      &gst_rdt_manager_recv_rtp_src_template);
+  gst_element_class_add_static_pad_template (gstelement_class,
+      &gst_rdt_manager_rtcp_src_template);
+
+  gst_element_class_set_static_metadata (gstelement_class, "RTP Decoder",
+      "Codec/Parser/Network",
+      "Accepts raw RTP and RTCP packets and sends them forward",
+      "Wim Taymans <wim.taymans@gmail.com>");
+
+  GST_DEBUG_CATEGORY_INIT (rdtmanager_debug, "rdtmanager", 0, "RTP decoder");
+}
+
+static void
+gst_rdt_manager_init (GstRDTManager * rdtmanager)
+{
+  rdtmanager->provided_clock = gst_system_clock_obtain ();
+  rdtmanager->latency = DEFAULT_LATENCY_MS;
+  GST_OBJECT_FLAG_SET (rdtmanager, GST_ELEMENT_FLAG_PROVIDE_CLOCK);
+}
+
+static void
+gst_rdt_manager_finalize (GObject * object)
+{
+  GstRDTManager *rdtmanager;
+
+  rdtmanager = GST_RDT_MANAGER (object);
+
+  g_slist_foreach (rdtmanager->sessions, (GFunc) free_session, NULL);
+  g_slist_free (rdtmanager->sessions);
+  g_clear_object (&rdtmanager->provided_clock);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static gboolean
+gst_rdt_manager_query_src (GstPad * pad, GstObject * parent, GstQuery * query)
+{
+  GstRDTManager *rdtmanager;
+  gboolean res;
+
+  rdtmanager = GST_RDT_MANAGER (parent);
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_LATENCY:
+    {
+      GstClockTime latency;
+
+      latency = rdtmanager->latency * GST_MSECOND;
+
+      /* we pretend to be live with a 3 second latency */
+      gst_query_set_latency (query, TRUE, latency, -1);
+
+      GST_DEBUG_OBJECT (rdtmanager, "reporting %" GST_TIME_FORMAT " of latency",
+          GST_TIME_ARGS (latency));
+      res = TRUE;
+      break;
+    }
+    default:
+      res = gst_pad_query_default (pad, parent, query);
+      break;
+  }
+  return res;
+}
+
+static gboolean
+gst_rdt_manager_src_activate_mode (GstPad * pad, GstObject * parent,
+    GstPadMode mode, gboolean active)
+{
+  gboolean result;
+  GstRDTManager *rdtmanager;
+  GstRDTManagerSession *session;
+
+  session = gst_pad_get_element_private (pad);
+  rdtmanager = session->dec;
+
+  switch (mode) {
+    case GST_PAD_MODE_PUSH:
+      if (active) {
+        /* allow data processing */
+        JBUF_LOCK (session);
+        GST_DEBUG_OBJECT (rdtmanager, "Enabling pop on queue");
+        /* Mark as non flushing */
+        session->srcresult = GST_FLOW_OK;
+        gst_segment_init (&session->segment, GST_FORMAT_TIME);
+        session->last_popped_seqnum = -1;
+        session->last_out_time = -1;
+        session->next_seqnum = -1;
+        session->eos = FALSE;
+        JBUF_UNLOCK (session);
+
+        /* start pushing out buffers */
+        GST_DEBUG_OBJECT (rdtmanager, "Starting task on srcpad");
+        result =
+            gst_pad_start_task (pad, (GstTaskFunction) gst_rdt_manager_loop,
+            pad, NULL);
+      } else {
+        /* make sure all data processing stops ASAP */
+        JBUF_LOCK (session);
+        /* mark ourselves as flushing */
+        session->srcresult = GST_FLOW_FLUSHING;
+        GST_DEBUG_OBJECT (rdtmanager, "Disabling pop on queue");
+        /* this unblocks any waiting pops on the src pad task */
+        JBUF_SIGNAL (session);
+        /* unlock clock, we just unschedule, the entry will be released by
+         * the locking streaming thread. */
+        if (session->clock_id)
+          gst_clock_id_unschedule (session->clock_id);
+        JBUF_UNLOCK (session);
+
+        /* NOTE this will hardlock if the state change is called from the src pad
+         * task thread because we will _join() the thread. */
+        GST_DEBUG_OBJECT (rdtmanager, "Stopping task on srcpad");
+        result = gst_pad_stop_task (pad);
+      }
+      break;
+    default:
+      result = FALSE;
+      break;
+  }
+  return result;
+}
+
+static GstFlowReturn
+gst_rdt_manager_handle_data_packet (GstRDTManagerSession * session,
+    GstClockTime timestamp, GstRDTPacket * packet)
+{
+  GstRDTManager *rdtmanager;
+  guint16 seqnum;
+  gboolean tail;
+  GstFlowReturn res;
+  GstBuffer *buffer;
+
+  rdtmanager = session->dec;
+
+  res = GST_FLOW_OK;
+
+  seqnum = 0;
+  GST_DEBUG_OBJECT (rdtmanager,
+      "Received packet #%d at time %" GST_TIME_FORMAT, seqnum,
+      GST_TIME_ARGS (timestamp));
+
+  buffer = gst_rdt_packet_to_buffer (packet);
+
+  JBUF_LOCK_CHECK (session, out_flushing);
+
+  /* insert the packet into the queue now, FIXME, use seqnum */
+  if (!rdt_jitter_buffer_insert (session->jbuf, buffer, timestamp,
+          session->clock_rate, &tail))
+    goto duplicate;
+
+  /* signal addition of new buffer when the _loop is waiting. */
+  if (session->waiting)
+    JBUF_SIGNAL (session);
+
+finished:
+  JBUF_UNLOCK (session);
+
+  return res;
+
+  /* ERRORS */
+out_flushing:
+  {
+    res = session->srcresult;
+    GST_DEBUG_OBJECT (rdtmanager, "flushing %s", gst_flow_get_name (res));
+    gst_buffer_unref (buffer);
+    goto finished;
+  }
+duplicate:
+  {
+    GST_WARNING_OBJECT (rdtmanager, "Duplicate packet #%d detected, dropping",
+        seqnum);
+    session->num_duplicates++;
+    gst_buffer_unref (buffer);
+    goto finished;
+  }
+}
+
+static gboolean
+gst_rdt_manager_parse_caps (GstRDTManager * rdtmanager,
+    GstRDTManagerSession * session, GstCaps * caps)
+{
+  GstStructure *caps_struct;
+  guint val;
+
+  /* first parse the caps */
+  caps_struct = gst_caps_get_structure (caps, 0);
+
+  GST_DEBUG_OBJECT (rdtmanager, "got caps");
+
+  /* we need a clock-rate to convert the rtp timestamps to GStreamer time and to
+   * measure the amount of data in the buffer */
+  if (!gst_structure_get_int (caps_struct, "clock-rate", &session->clock_rate))
+    session->clock_rate = 1000;
+
+  if (session->clock_rate <= 0)
+    goto wrong_rate;
+
+  GST_DEBUG_OBJECT (rdtmanager, "got clock-rate %d", session->clock_rate);
+
+  /* gah, clock-base is uint. If we don't have a base, we will use the first
+   * buffer timestamp as the base time. This will screw up sync but it's better
+   * than nothing. */
+  if (gst_structure_get_uint (caps_struct, "clock-base", &val))
+    session->clock_base = val;
+  else
+    session->clock_base = -1;
+
+  GST_DEBUG_OBJECT (rdtmanager, "got clock-base %" G_GINT64_FORMAT,
+      session->clock_base);
+
+  /* first expected seqnum */
+  if (gst_structure_get_uint (caps_struct, "seqnum-base", &val))
+    session->next_seqnum = val;
+  else
+    session->next_seqnum = -1;
+
+  GST_DEBUG_OBJECT (rdtmanager, "got seqnum-base %d", session->next_seqnum);
+
+  return TRUE;
+
+  /* ERRORS */
+wrong_rate:
+  {
+    GST_DEBUG_OBJECT (rdtmanager, "Invalid clock-rate %d", session->clock_rate);
+    return FALSE;
+  }
+}
+
+static gboolean
+gst_rdt_manager_event_rdt (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  GstRDTManager *rdtmanager;
+  GstRDTManagerSession *session;
+  gboolean res;
+
+  rdtmanager = GST_RDT_MANAGER (parent);
+  /* find session */
+  session = gst_pad_get_element_private (pad);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CAPS:
+    {
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      res = gst_rdt_manager_parse_caps (rdtmanager, session, caps);
+      gst_event_unref (event);
+      break;
+    }
+    default:
+      res = gst_pad_event_default (pad, parent, event);
+      break;
+  }
+  return res;
+}
+
+static GstFlowReturn
+gst_rdt_manager_chain_rdt (GstPad * pad, GstObject * parent, GstBuffer * buffer)
+{
+  GstFlowReturn res;
+  GstRDTManager *rdtmanager;
+  GstRDTManagerSession *session;
+  GstClockTime timestamp;
+  GstRDTPacket packet;
+  guint32 ssrc;
+  guint8 pt;
+  gboolean more;
+
+  rdtmanager = GST_RDT_MANAGER (parent);
+
+  GST_DEBUG_OBJECT (rdtmanager, "got RDT packet");
+
+  ssrc = 0;
+  pt = 0;
+
+  GST_DEBUG_OBJECT (rdtmanager, "SSRC %08x, PT %d", ssrc, pt);
+
+  /* find session */
+  session = gst_pad_get_element_private (pad);
+
+  /* see if we have the pad */
+  if (!session->active) {
+    activate_session (rdtmanager, session, ssrc, pt);
+    session->active = TRUE;
+  }
+
+  if (GST_BUFFER_IS_DISCONT (buffer)) {
+    GST_DEBUG_OBJECT (rdtmanager, "received discont");
+    session->discont = TRUE;
+  }
+
+  res = GST_FLOW_OK;
+
+  /* take the timestamp of the buffer. This is the time when the packet was
+   * received and is used to calculate jitter and clock skew. We will adjust
+   * this timestamp with the smoothed value after processing it in the
+   * jitterbuffer. */
+  timestamp = GST_BUFFER_TIMESTAMP (buffer);
+  /* bring to running time */
+  timestamp = gst_segment_to_running_time (&session->segment, GST_FORMAT_TIME,
+      timestamp);
+
+  more = gst_rdt_buffer_get_first_packet (buffer, &packet);
+  while (more) {
+    GstRDTType type;
+
+    type = gst_rdt_packet_get_type (&packet);
+    GST_DEBUG_OBJECT (rdtmanager, "Have packet of type %04x", type);
+
+    if (GST_RDT_IS_DATA_TYPE (type)) {
+      GST_DEBUG_OBJECT (rdtmanager, "We have a data packet");
+      res = gst_rdt_manager_handle_data_packet (session, timestamp, &packet);
+    } else {
+      switch (type) {
+        default:
+          GST_DEBUG_OBJECT (rdtmanager, "Ignoring packet");
+          break;
+      }
+    }
+    if (res != GST_FLOW_OK)
+      break;
+
+    more = gst_rdt_packet_move_to_next (&packet);
+  }
+
+  gst_buffer_unref (buffer);
+
+  return res;
+}
+
+/* push packets from the queue to the downstream demuxer */
+static void
+gst_rdt_manager_loop (GstPad * pad)
+{
+  GstRDTManager *rdtmanager;
+  GstRDTManagerSession *session;
+  GstBuffer *buffer;
+  GstFlowReturn result;
+
+  rdtmanager = GST_RDT_MANAGER (GST_PAD_PARENT (pad));
+
+  session = gst_pad_get_element_private (pad);
+
+  JBUF_LOCK_CHECK (session, flushing);
+  GST_DEBUG_OBJECT (rdtmanager, "Peeking item");
+  while (TRUE) {
+    /* always wait if we are blocked */
+    if (!session->blocked) {
+      /* if we have a packet, we can exit the loop and grab it */
+      if (rdt_jitter_buffer_num_packets (session->jbuf) > 0)
+        break;
+      /* no packets but we are EOS, do eos logic */
+      if (session->eos)
+        goto do_eos;
+    }
+    /* underrun, wait for packets or flushing now */
+    session->waiting = TRUE;
+    JBUF_WAIT_CHECK (session, flushing);
+    session->waiting = FALSE;
+  }
+
+  buffer = rdt_jitter_buffer_pop (session->jbuf);
+
+  GST_DEBUG_OBJECT (rdtmanager, "Got item %p", buffer);
+
+  if (session->discont) {
+    GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
+    session->discont = FALSE;
+  }
+
+  JBUF_UNLOCK (session);
+
+  result = gst_pad_push (session->recv_rtp_src, buffer);
+  if (result != GST_FLOW_OK)
+    goto pause;
+
+  return;
+
+  /* ERRORS */
+flushing:
+  {
+    GST_DEBUG_OBJECT (rdtmanager, "we are flushing");
+    gst_pad_pause_task (session->recv_rtp_src);
+    JBUF_UNLOCK (session);
+    return;
+  }
+do_eos:
+  {
+    /* store result, we are flushing now */
+    GST_DEBUG_OBJECT (rdtmanager, "We are EOS, pushing EOS downstream");
+    session->srcresult = GST_FLOW_EOS;
+    gst_pad_pause_task (session->recv_rtp_src);
+    gst_pad_push_event (session->recv_rtp_src, gst_event_new_eos ());
+    JBUF_UNLOCK (session);
+    return;
+  }
+pause:
+  {
+    GST_DEBUG_OBJECT (rdtmanager, "pausing task, reason %s",
+        gst_flow_get_name (result));
+
+    JBUF_LOCK (session);
+    /* store result */
+    session->srcresult = result;
+    /* we don't post errors or anything because upstream will do that for us
+     * when we pass the return value upstream. */
+    gst_pad_pause_task (session->recv_rtp_src);
+    JBUF_UNLOCK (session);
+    return;
+  }
+}
+
+static GstFlowReturn
+gst_rdt_manager_chain_rtcp (GstPad * pad, GstObject * parent,
+    GstBuffer * buffer)
+{
+  GstRDTManager *src;
+
+#ifdef HAVE_RTCP
+  gboolean valid;
+  GstRTCPPacket packet;
+  gboolean more;
+#endif
+
+  src = GST_RDT_MANAGER (parent);
+
+  GST_DEBUG_OBJECT (src, "got rtcp packet");
+
+#ifdef HAVE_RTCP
+  valid = gst_rtcp_buffer_validate (buffer);
+  if (!valid)
+    goto bad_packet;
+
+  /* position on first packet */
+  more = gst_rtcp_buffer_get_first_packet (buffer, &packet);
+  while (more) {
+    switch (gst_rtcp_packet_get_type (&packet)) {
+      case GST_RTCP_TYPE_SR:
+      {
+        guint32 ssrc, rtptime, packet_count, octet_count;
+        guint64 ntptime;
+        guint count, i;
+
+        gst_rtcp_packet_sr_get_sender_info (&packet, &ssrc, &ntptime, &rtptime,
+            &packet_count, &octet_count);
+
+        GST_DEBUG_OBJECT (src,
+            "got SR packet: SSRC %08x, NTP %" G_GUINT64_FORMAT
+            ", RTP %u, PC %u, OC %u", ssrc, ntptime, rtptime, packet_count,
+            octet_count);
+
+        count = gst_rtcp_packet_get_rb_count (&packet);
+        for (i = 0; i < count; i++) {
+          guint32 ssrc, exthighestseq, jitter, lsr, dlsr;
+          guint8 fractionlost;
+          gint32 packetslost;
+
+          gst_rtcp_packet_get_rb (&packet, i, &ssrc, &fractionlost,
+              &packetslost, &exthighestseq, &jitter, &lsr, &dlsr);
+
+          GST_DEBUG_OBJECT (src, "got RB packet %d: SSRC %08x, FL %u"
+              ", PL %u, HS %u, JITTER %u, LSR %u, DLSR %u", ssrc, fractionlost,
+              packetslost, exthighestseq, jitter, lsr, dlsr);
+        }
+        break;
+      }
+      case GST_RTCP_TYPE_RR:
+      {
+        guint32 ssrc;
+        guint count, i;
+
+        ssrc = gst_rtcp_packet_rr_get_ssrc (&packet);
+
+        GST_DEBUG_OBJECT (src, "got RR packet: SSRC %08x", ssrc);
+
+        count = gst_rtcp_packet_get_rb_count (&packet);
+        for (i = 0; i < count; i++) {
+          guint32 ssrc, exthighestseq, jitter, lsr, dlsr;
+          guint8 fractionlost;
+          gint32 packetslost;
+
+          gst_rtcp_packet_get_rb (&packet, i, &ssrc, &fractionlost,
+              &packetslost, &exthighestseq, &jitter, &lsr, &dlsr);
+
+          GST_DEBUG_OBJECT (src, "got RB packet %d: SSRC %08x, FL %u"
+              ", PL %u, HS %u, JITTER %u, LSR %u, DLSR %u", ssrc, fractionlost,
+              packetslost, exthighestseq, jitter, lsr, dlsr);
+        }
+        break;
+      }
+      case GST_RTCP_TYPE_SDES:
+      {
+        guint chunks, i, j;
+        gboolean more_chunks, more_items;
+
+        chunks = gst_rtcp_packet_sdes_get_chunk_count (&packet);
+        GST_DEBUG_OBJECT (src, "got SDES packet with %d chunks", chunks);
+
+        more_chunks = gst_rtcp_packet_sdes_first_chunk (&packet);
+        i = 0;
+        while (more_chunks) {
+          guint32 ssrc;
+
+          ssrc = gst_rtcp_packet_sdes_get_ssrc (&packet);
+
+          GST_DEBUG_OBJECT (src, "chunk %d, SSRC %08x", i, ssrc);
+
+          more_items = gst_rtcp_packet_sdes_first_item (&packet);
+          j = 0;
+          while (more_items) {
+            GstRTCPSDESType type;
+            guint8 len;
+            gchar *data;
+
+            gst_rtcp_packet_sdes_get_item (&packet, &type, &len, &data);
+
+            GST_DEBUG_OBJECT (src, "item %d, type %d, len %d, data %s", j,
+                type, len, data);
+
+            more_items = gst_rtcp_packet_sdes_next_item (&packet);
+            j++;
+          }
+          more_chunks = gst_rtcp_packet_sdes_next_chunk (&packet);
+          i++;
+        }
+        break;
+      }
+      case GST_RTCP_TYPE_BYE:
+      {
+        guint count, i;
+        gchar *reason;
+
+        reason = gst_rtcp_packet_bye_get_reason (&packet);
+        GST_DEBUG_OBJECT (src, "got BYE packet (reason: %s)",
+            GST_STR_NULL (reason));
+        g_free (reason);
+
+        count = gst_rtcp_packet_bye_get_ssrc_count (&packet);
+        for (i = 0; i < count; i++) {
+          guint32 ssrc;
+
+
+          ssrc = gst_rtcp_packet_bye_get_nth_ssrc (&packet, i);
+
+          GST_DEBUG_OBJECT (src, "SSRC: %08x", ssrc);
+        }
+        break;
+      }
+      case GST_RTCP_TYPE_APP:
+        GST_DEBUG_OBJECT (src, "got APP packet");
+        break;
+      default:
+        GST_WARNING_OBJECT (src, "got unknown RTCP packet");
+        break;
+    }
+    more = gst_rtcp_packet_move_to_next (&packet);
+  }
+  gst_buffer_unref (buffer);
+  return GST_FLOW_OK;
+
+bad_packet:
+  {
+    GST_WARNING_OBJECT (src, "got invalid RTCP packet");
+    return GST_FLOW_OK;
+  }
+#else
+  return GST_FLOW_OK;
+#endif
+}
+
+static void
+gst_rdt_manager_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstRDTManager *src;
+
+  src = GST_RDT_MANAGER (object);
+
+  switch (prop_id) {
+    case PROP_LATENCY:
+      src->latency = g_value_get_uint (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_rdt_manager_get_property (GObject * object, guint prop_id, GValue * value,
+    GParamSpec * pspec)
+{
+  GstRDTManager *src;
+
+  src = GST_RDT_MANAGER (object);
+
+  switch (prop_id) {
+    case PROP_LATENCY:
+      g_value_set_uint (value, src->latency);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static GstClock *
+gst_rdt_manager_provide_clock (GstElement * element)
+{
+  GstRDTManager *rdtmanager;
+
+  rdtmanager = GST_RDT_MANAGER (element);
+
+  return GST_CLOCK_CAST (gst_object_ref (rdtmanager->provided_clock));
+}
+
+static GstStateChangeReturn
+gst_rdt_manager_change_state (GstElement * element, GstStateChange transition)
+{
+  GstStateChangeReturn ret;
+
+  switch (transition) {
+    default:
+      break;
+  }
+
+  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      /* we're NO_PREROLL when going to PAUSED */
+      ret = GST_STATE_CHANGE_NO_PREROLL;
+      break;
+    default:
+      break;
+  }
+
+  return ret;
+}
+
+/* Create a pad for receiving RTP for the session in @name
+ */
+static GstPad *
+create_recv_rtp (GstRDTManager * rdtmanager, GstPadTemplate * templ,
+    const gchar * name)
+{
+  guint sessid;
+  GstRDTManagerSession *session;
+
+  /* first get the session number */
+  if (name == NULL || sscanf (name, "recv_rtp_sink_%u", &sessid) != 1)
+    goto no_name;
+
+  GST_DEBUG_OBJECT (rdtmanager, "finding session %d", sessid);
+
+  /* get or create session */
+  session = find_session_by_id (rdtmanager, sessid);
+  if (!session) {
+    GST_DEBUG_OBJECT (rdtmanager, "creating session %d", sessid);
+    /* create session now */
+    session = create_session (rdtmanager, sessid);
+    if (session == NULL)
+      goto create_error;
+  }
+  /* check if pad was requested */
+  if (session->recv_rtp_sink != NULL)
+    goto existed;
+
+  GST_DEBUG_OBJECT (rdtmanager, "getting RTP sink pad");
+
+  session->recv_rtp_sink = gst_pad_new_from_template (templ, name);
+  gst_pad_set_element_private (session->recv_rtp_sink, session);
+  gst_pad_set_event_function (session->recv_rtp_sink,
+      gst_rdt_manager_event_rdt);
+  gst_pad_set_chain_function (session->recv_rtp_sink,
+      gst_rdt_manager_chain_rdt);
+  gst_pad_set_active (session->recv_rtp_sink, TRUE);
+  gst_element_add_pad (GST_ELEMENT_CAST (rdtmanager), session->recv_rtp_sink);
+
+  return session->recv_rtp_sink;
+
+  /* ERRORS */
+no_name:
+  {
+    g_warning ("rdtmanager: invalid name given");
+    return NULL;
+  }
+create_error:
+  {
+    /* create_session already warned */
+    return NULL;
+  }
+existed:
+  {
+    g_warning ("rdtmanager: recv_rtp pad already requested for session %d",
+        sessid);
+    return NULL;
+  }
+}
+
+/* Create a pad for receiving RTCP for the session in @name
+ */
+static GstPad *
+create_recv_rtcp (GstRDTManager * rdtmanager, GstPadTemplate * templ,
+    const gchar * name)
+{
+  guint sessid;
+  GstRDTManagerSession *session;
+
+  /* first get the session number */
+  if (name == NULL || sscanf (name, "recv_rtcp_sink_%u", &sessid) != 1)
+    goto no_name;
+
+  GST_DEBUG_OBJECT (rdtmanager, "finding session %d", sessid);
+
+  /* get the session, it must exist or we error */
+  session = find_session_by_id (rdtmanager, sessid);
+  if (!session)
+    goto no_session;
+
+  /* check if pad was requested */
+  if (session->recv_rtcp_sink != NULL)
+    goto existed;
+
+  GST_DEBUG_OBJECT (rdtmanager, "getting RTCP sink pad");
+
+  session->recv_rtcp_sink = gst_pad_new_from_template (templ, name);
+  gst_pad_set_element_private (session->recv_rtp_sink, session);
+  gst_pad_set_chain_function (session->recv_rtcp_sink,
+      gst_rdt_manager_chain_rtcp);
+  gst_pad_set_active (session->recv_rtcp_sink, TRUE);
+  gst_element_add_pad (GST_ELEMENT_CAST (rdtmanager), session->recv_rtcp_sink);
+
+  return session->recv_rtcp_sink;
+
+  /* ERRORS */
+no_name:
+  {
+    g_warning ("rdtmanager: invalid name given");
+    return NULL;
+  }
+no_session:
+  {
+    g_warning ("rdtmanager: no session with id %d", sessid);
+    return NULL;
+  }
+existed:
+  {
+    g_warning ("rdtmanager: recv_rtcp pad already requested for session %d",
+        sessid);
+    return NULL;
+  }
+}
+
+/* Create a pad for sending RTCP for the session in @name
+ */
+static GstPad *
+create_rtcp (GstRDTManager * rdtmanager, GstPadTemplate * templ,
+    const gchar * name)
+{
+  guint sessid;
+  GstRDTManagerSession *session;
+
+  /* first get the session number */
+  if (name == NULL || sscanf (name, "rtcp_src_%u", &sessid) != 1)
+    goto no_name;
+
+  /* get or create session */
+  session = find_session_by_id (rdtmanager, sessid);
+  if (!session)
+    goto no_session;
+
+  /* check if pad was requested */
+  if (session->rtcp_src != NULL)
+    goto existed;
+
+  session->rtcp_src = gst_pad_new_from_template (templ, name);
+  gst_pad_set_active (session->rtcp_src, TRUE);
+  gst_element_add_pad (GST_ELEMENT_CAST (rdtmanager), session->rtcp_src);
+
+  return session->rtcp_src;
+
+  /* ERRORS */
+no_name:
+  {
+    g_warning ("rdtmanager: invalid name given");
+    return NULL;
+  }
+no_session:
+  {
+    g_warning ("rdtmanager: session with id %d does not exist", sessid);
+    return NULL;
+  }
+existed:
+  {
+    g_warning ("rdtmanager: rtcp_src pad already requested for session %d",
+        sessid);
+    return NULL;
+  }
+}
+
+/* 
+ */
+static GstPad *
+gst_rdt_manager_request_new_pad (GstElement * element,
+    GstPadTemplate * templ, const gchar * name, const GstCaps * caps)
+{
+  GstRDTManager *rdtmanager;
+  GstElementClass *klass;
+  GstPad *result;
+
+  g_return_val_if_fail (templ != NULL, NULL);
+  g_return_val_if_fail (GST_IS_RDT_MANAGER (element), NULL);
+
+  rdtmanager = GST_RDT_MANAGER (element);
+  klass = GST_ELEMENT_GET_CLASS (element);
+
+  /* figure out the template */
+  if (templ == gst_element_class_get_pad_template (klass, "recv_rtp_sink_%u")) {
+    result = create_recv_rtp (rdtmanager, templ, name);
+  } else if (templ == gst_element_class_get_pad_template (klass,
+          "recv_rtcp_sink_%u")) {
+    result = create_recv_rtcp (rdtmanager, templ, name);
+  } else if (templ == gst_element_class_get_pad_template (klass, "rtcp_src_%u")) {
+    result = create_rtcp (rdtmanager, templ, name);
+  } else
+    goto wrong_template;
+
+  return result;
+
+  /* ERRORS */
+wrong_template:
+  {
+    g_warning ("rdtmanager: this is not our template");
+    return NULL;
+  }
+}
+
+static void
+gst_rdt_manager_release_pad (GstElement * element, GstPad * pad)
+{
+}
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/rdtmanager.h b/subprojects/gst-plugins-ugly/gst/realmedia/rdtmanager.h
new file mode 100644 (file)
index 0000000..d7a60fd
--- /dev/null
@@ -0,0 +1,93 @@
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.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.
+ */
+/*
+ * Unless otherwise indicated, Source Code is licensed under MIT license.
+ * See further explanation attached in License Statement (distributed in the file
+ * LICENSE).
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef __GST_RDT_MANAGER_H__
+#define __GST_RDT_MANAGER_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_RDT_MANAGER           (gst_rdt_manager_get_type())
+#define GST_IS_RDT_MANAGER(obj)        (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RDT_MANAGER))
+#define GST_IS_RDT_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RDT_MANAGER))
+#define GST_RDT_MANAGER(obj)           (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RDT_MANAGER, GstRDTManager))
+#define GST_RDT_MANAGER_CLASS(klass)   (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RDT_MANAGER, GstRDTManagerClass))
+
+typedef struct _GstRDTManager GstRDTManager;
+typedef struct _GstRDTManagerClass GstRDTManagerClass;
+typedef struct _GstRDTManagerSession GstRDTManagerSession;
+
+struct _GstRDTManager {
+  GstElement  element;
+
+  guint       latency;
+  GSList     *sessions;
+  GstClock   *provided_clock;
+};
+
+struct _GstRDTManagerClass {
+  GstElementClass parent_class;
+
+  /* get the caps for pt */
+  GstCaps* (*request_pt_map)    (GstRDTManager *rtpdec, guint session, guint pt);
+
+  void     (*clear_pt_map)      (GstRDTManager *rtpdec);
+
+  void     (*on_new_ssrc)       (GstRDTManager *rtpdec, guint session, guint32 ssrc);
+  void     (*on_ssrc_collision) (GstRDTManager *rtpdec, guint session, guint32 ssrc);
+  void     (*on_ssrc_validated) (GstRDTManager *rtpdec, guint session, guint32 ssrc);
+  void     (*on_ssrc_active)    (GstRDTManager *rtpdec, guint session, guint32 ssrc);
+  void     (*on_ssrc_sdes)      (GstRDTManager *rtpdec, guint session, guint32 ssrc);
+  void     (*on_bye_ssrc)       (GstRDTManager *rtpdec, guint session, guint32 ssrc);
+  void     (*on_bye_timeout)    (GstRDTManager *rtpdec, guint session, guint32 ssrc);
+  void     (*on_timeout)        (GstRDTManager *rtpdec, guint session, guint32 ssrc);
+  void     (*on_npt_stop)       (GstRDTManager *rtpdec, guint session, guint32 ssrc);
+};
+
+GType gst_rdt_manager_get_type(void);
+
+GST_ELEMENT_REGISTER_DECLARE (rdtmanager);
+
+G_END_DECLS
+
+#endif /* __GST_RDT_MANAGER_H__ */
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/realhash.c b/subprojects/gst-plugins-ugly/gst/realmedia/realhash.c
new file mode 100644 (file)
index 0000000..4a18189
--- /dev/null
@@ -0,0 +1,324 @@
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.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.
+ */
+/* Element-Checklist-Version: 5 */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+#include <string.h>
+
+#include <gst/gst.h>
+
+#include "realhash.h"
+
+void rtsp_ext_real_calc_response_and_checksum (char *response,
+    char *chksum, char *challenge);
+
+/*
+ * The following code has been copied from
+ * xine-lib-1.1.1/src/input/libreal/real.c.
+ */
+
+static const unsigned char xor_table[] = {
+  0x05, 0x18, 0x74, 0xd0, 0x0d, 0x09, 0x02, 0x53,
+  0xc0, 0x01, 0x05, 0x05, 0x67, 0x03, 0x19, 0x70,
+  0x08, 0x27, 0x66, 0x10, 0x10, 0x72, 0x08, 0x09,
+  0x63, 0x11, 0x03, 0x71, 0x08, 0x08, 0x70, 0x02,
+  0x10, 0x57, 0x05, 0x18, 0x54, 0x00, 0x00, 0x00
+};
+
+#define LE_32(x) GST_READ_UINT32_LE(x)
+#define BE_32C(x,y) GST_WRITE_UINT32_BE(x,y)
+#define LE_32C(x,y) GST_WRITE_UINT32_LE(x,y)
+
+static void
+hash (char *field, char *param)
+{
+  uint32_t a, b, c, d;
+
+  /* fill variables */
+  a = LE_32 (field);
+  b = LE_32 (field + 4);
+  c = LE_32 (field + 8);
+  d = LE_32 (field + 12);
+
+  a = ((b & c) | (~b & d)) + LE_32 ((param + 0x00)) + a - 0x28955B88;
+  a = ((a << 0x07) | (a >> 0x19)) + b;
+  d = ((a & b) | (~a & c)) + LE_32 ((param + 0x04)) + d - 0x173848AA;
+  d = ((d << 0x0c) | (d >> 0x14)) + a;
+  c = ((d & a) | (~d & b)) + LE_32 ((param + 0x08)) + c + 0x242070DB;
+  c = ((c << 0x11) | (c >> 0x0f)) + d;
+  b = ((c & d) | (~c & a)) + LE_32 ((param + 0x0c)) + b - 0x3E423112;
+  b = ((b << 0x16) | (b >> 0x0a)) + c;
+  a = ((b & c) | (~b & d)) + LE_32 ((param + 0x10)) + a - 0x0A83F051;
+  a = ((a << 0x07) | (a >> 0x19)) + b;
+  d = ((a & b) | (~a & c)) + LE_32 ((param + 0x14)) + d + 0x4787C62A;
+  d = ((d << 0x0c) | (d >> 0x14)) + a;
+  c = ((d & a) | (~d & b)) + LE_32 ((param + 0x18)) + c - 0x57CFB9ED;
+  c = ((c << 0x11) | (c >> 0x0f)) + d;
+  b = ((c & d) | (~c & a)) + LE_32 ((param + 0x1c)) + b - 0x02B96AFF;
+  b = ((b << 0x16) | (b >> 0x0a)) + c;
+  a = ((b & c) | (~b & d)) + LE_32 ((param + 0x20)) + a + 0x698098D8;
+  a = ((a << 0x07) | (a >> 0x19)) + b;
+  d = ((a & b) | (~a & c)) + LE_32 ((param + 0x24)) + d - 0x74BB0851;
+  d = ((d << 0x0c) | (d >> 0x14)) + a;
+  c = ((d & a) | (~d & b)) + LE_32 ((param + 0x28)) + c - 0x0000A44F;
+  c = ((c << 0x11) | (c >> 0x0f)) + d;
+  b = ((c & d) | (~c & a)) + LE_32 ((param + 0x2C)) + b - 0x76A32842;
+  b = ((b << 0x16) | (b >> 0x0a)) + c;
+  a = ((b & c) | (~b & d)) + LE_32 ((param + 0x30)) + a + 0x6B901122;
+  a = ((a << 0x07) | (a >> 0x19)) + b;
+  d = ((a & b) | (~a & c)) + LE_32 ((param + 0x34)) + d - 0x02678E6D;
+  d = ((d << 0x0c) | (d >> 0x14)) + a;
+  c = ((d & a) | (~d & b)) + LE_32 ((param + 0x38)) + c - 0x5986BC72;
+  c = ((c << 0x11) | (c >> 0x0f)) + d;
+  b = ((c & d) | (~c & a)) + LE_32 ((param + 0x3c)) + b + 0x49B40821;
+  b = ((b << 0x16) | (b >> 0x0a)) + c;
+
+  a = ((b & d) | (~d & c)) + LE_32 ((param + 0x04)) + a - 0x09E1DA9E;
+  a = ((a << 0x05) | (a >> 0x1b)) + b;
+  d = ((a & c) | (~c & b)) + LE_32 ((param + 0x18)) + d - 0x3FBF4CC0;
+  d = ((d << 0x09) | (d >> 0x17)) + a;
+  c = ((d & b) | (~b & a)) + LE_32 ((param + 0x2c)) + c + 0x265E5A51;
+  c = ((c << 0x0e) | (c >> 0x12)) + d;
+  b = ((c & a) | (~a & d)) + LE_32 ((param + 0x00)) + b - 0x16493856;
+  b = ((b << 0x14) | (b >> 0x0c)) + c;
+  a = ((b & d) | (~d & c)) + LE_32 ((param + 0x14)) + a - 0x29D0EFA3;
+  a = ((a << 0x05) | (a >> 0x1b)) + b;
+  d = ((a & c) | (~c & b)) + LE_32 ((param + 0x28)) + d + 0x02441453;
+  d = ((d << 0x09) | (d >> 0x17)) + a;
+  c = ((d & b) | (~b & a)) + LE_32 ((param + 0x3c)) + c - 0x275E197F;
+  c = ((c << 0x0e) | (c >> 0x12)) + d;
+  b = ((c & a) | (~a & d)) + LE_32 ((param + 0x10)) + b - 0x182C0438;
+  b = ((b << 0x14) | (b >> 0x0c)) + c;
+  a = ((b & d) | (~d & c)) + LE_32 ((param + 0x24)) + a + 0x21E1CDE6;
+  a = ((a << 0x05) | (a >> 0x1b)) + b;
+  d = ((a & c) | (~c & b)) + LE_32 ((param + 0x38)) + d - 0x3CC8F82A;
+  d = ((d << 0x09) | (d >> 0x17)) + a;
+  c = ((d & b) | (~b & a)) + LE_32 ((param + 0x0c)) + c - 0x0B2AF279;
+  c = ((c << 0x0e) | (c >> 0x12)) + d;
+  b = ((c & a) | (~a & d)) + LE_32 ((param + 0x20)) + b + 0x455A14ED;
+  b = ((b << 0x14) | (b >> 0x0c)) + c;
+  a = ((b & d) | (~d & c)) + LE_32 ((param + 0x34)) + a - 0x561C16FB;
+  a = ((a << 0x05) | (a >> 0x1b)) + b;
+  d = ((a & c) | (~c & b)) + LE_32 ((param + 0x08)) + d - 0x03105C08;
+  d = ((d << 0x09) | (d >> 0x17)) + a;
+  c = ((d & b) | (~b & a)) + LE_32 ((param + 0x1c)) + c + 0x676F02D9;
+  c = ((c << 0x0e) | (c >> 0x12)) + d;
+  b = ((c & a) | (~a & d)) + LE_32 ((param + 0x30)) + b - 0x72D5B376;
+  b = ((b << 0x14) | (b >> 0x0c)) + c;
+
+  a = (b ^ c ^ d) + LE_32 ((param + 0x14)) + a - 0x0005C6BE;
+  a = ((a << 0x04) | (a >> 0x1c)) + b;
+  d = (a ^ b ^ c) + LE_32 ((param + 0x20)) + d - 0x788E097F;
+  d = ((d << 0x0b) | (d >> 0x15)) + a;
+  c = (d ^ a ^ b) + LE_32 ((param + 0x2c)) + c + 0x6D9D6122;
+  c = ((c << 0x10) | (c >> 0x10)) + d;
+  b = (c ^ d ^ a) + LE_32 ((param + 0x38)) + b - 0x021AC7F4;
+  b = ((b << 0x17) | (b >> 0x09)) + c;
+  a = (b ^ c ^ d) + LE_32 ((param + 0x04)) + a - 0x5B4115BC;
+  a = ((a << 0x04) | (a >> 0x1c)) + b;
+  d = (a ^ b ^ c) + LE_32 ((param + 0x10)) + d + 0x4BDECFA9;
+  d = ((d << 0x0b) | (d >> 0x15)) + a;
+  c = (d ^ a ^ b) + LE_32 ((param + 0x1c)) + c - 0x0944B4A0;
+  c = ((c << 0x10) | (c >> 0x10)) + d;
+  b = (c ^ d ^ a) + LE_32 ((param + 0x28)) + b - 0x41404390;
+  b = ((b << 0x17) | (b >> 0x09)) + c;
+  a = (b ^ c ^ d) + LE_32 ((param + 0x34)) + a + 0x289B7EC6;
+  a = ((a << 0x04) | (a >> 0x1c)) + b;
+  d = (a ^ b ^ c) + LE_32 ((param + 0x00)) + d - 0x155ED806;
+  d = ((d << 0x0b) | (d >> 0x15)) + a;
+  c = (d ^ a ^ b) + LE_32 ((param + 0x0c)) + c - 0x2B10CF7B;
+  c = ((c << 0x10) | (c >> 0x10)) + d;
+  b = (c ^ d ^ a) + LE_32 ((param + 0x18)) + b + 0x04881D05;
+  b = ((b << 0x17) | (b >> 0x09)) + c;
+  a = (b ^ c ^ d) + LE_32 ((param + 0x24)) + a - 0x262B2FC7;
+  a = ((a << 0x04) | (a >> 0x1c)) + b;
+  d = (a ^ b ^ c) + LE_32 ((param + 0x30)) + d - 0x1924661B;
+  d = ((d << 0x0b) | (d >> 0x15)) + a;
+  c = (d ^ a ^ b) + LE_32 ((param + 0x3c)) + c + 0x1fa27cf8;
+  c = ((c << 0x10) | (c >> 0x10)) + d;
+  b = (c ^ d ^ a) + LE_32 ((param + 0x08)) + b - 0x3B53A99B;
+  b = ((b << 0x17) | (b >> 0x09)) + c;
+
+  a = ((~d | b) ^ c) + LE_32 ((param + 0x00)) + a - 0x0BD6DDBC;
+  a = ((a << 0x06) | (a >> 0x1a)) + b;
+  d = ((~c | a) ^ b) + LE_32 ((param + 0x1c)) + d + 0x432AFF97;
+  d = ((d << 0x0a) | (d >> 0x16)) + a;
+  c = ((~b | d) ^ a) + LE_32 ((param + 0x38)) + c - 0x546BDC59;
+  c = ((c << 0x0f) | (c >> 0x11)) + d;
+  b = ((~a | c) ^ d) + LE_32 ((param + 0x14)) + b - 0x036C5FC7;
+  b = ((b << 0x15) | (b >> 0x0b)) + c;
+  a = ((~d | b) ^ c) + LE_32 ((param + 0x30)) + a + 0x655B59C3;
+  a = ((a << 0x06) | (a >> 0x1a)) + b;
+  d = ((~c | a) ^ b) + LE_32 ((param + 0x0C)) + d - 0x70F3336E;
+  d = ((d << 0x0a) | (d >> 0x16)) + a;
+  c = ((~b | d) ^ a) + LE_32 ((param + 0x28)) + c - 0x00100B83;
+  c = ((c << 0x0f) | (c >> 0x11)) + d;
+  b = ((~a | c) ^ d) + LE_32 ((param + 0x04)) + b - 0x7A7BA22F;
+  b = ((b << 0x15) | (b >> 0x0b)) + c;
+  a = ((~d | b) ^ c) + LE_32 ((param + 0x20)) + a + 0x6FA87E4F;
+  a = ((a << 0x06) | (a >> 0x1a)) + b;
+  d = ((~c | a) ^ b) + LE_32 ((param + 0x3c)) + d - 0x01D31920;
+  d = ((d << 0x0a) | (d >> 0x16)) + a;
+  c = ((~b | d) ^ a) + LE_32 ((param + 0x18)) + c - 0x5CFEBCEC;
+  c = ((c << 0x0f) | (c >> 0x11)) + d;
+  b = ((~a | c) ^ d) + LE_32 ((param + 0x34)) + b + 0x4E0811A1;
+  b = ((b << 0x15) | (b >> 0x0b)) + c;
+  a = ((~d | b) ^ c) + LE_32 ((param + 0x10)) + a - 0x08AC817E;
+  a = ((a << 0x06) | (a >> 0x1a)) + b;
+  d = ((~c | a) ^ b) + LE_32 ((param + 0x2c)) + d - 0x42C50DCB;
+  d = ((d << 0x0a) | (d >> 0x16)) + a;
+  c = ((~b | d) ^ a) + LE_32 ((param + 0x08)) + c + 0x2AD7D2BB;
+  c = ((c << 0x0f) | (c >> 0x11)) + d;
+  b = ((~a | c) ^ d) + LE_32 ((param + 0x24)) + b - 0x14792C6F;
+  b = ((b << 0x15) | (b >> 0x0b)) + c;
+
+  a += LE_32 (field);
+  b += LE_32 (field + 4);
+  c += LE_32 (field + 8);
+  d += LE_32 (field + 12);
+
+  LE_32C (field, a);
+  LE_32C (field + 4, b);
+  LE_32C (field + 8, c);
+  LE_32C (field + 12, d);
+}
+
+static void
+call_hash (char *key, char *challenge, int len)
+{
+  uint8_t *ptr1, *ptr2;
+  uint32_t a, b, c, d, tmp;
+
+  ptr1 = (uint8_t *) (key + 16);
+  ptr2 = (uint8_t *) (key + 20);
+
+  a = LE_32 (ptr1);
+  b = (a >> 3) & 0x3f;
+  a += len * 8;
+  LE_32C (ptr1, a);
+
+  if (a < (len << 3))
+    ptr2 += 4;
+
+  tmp = LE_32 (ptr2) + (len >> 0x1d);
+  LE_32C (ptr2, tmp);
+  a = 64 - b;
+  c = 0;
+  if (a <= len) {
+
+    memcpy (key + b + 24, challenge, a);
+    hash (key, key + 24);
+    c = a;
+    d = c + 0x3f;
+
+    while (d < len) {
+      hash (key, challenge + d - 0x3f);
+      d += 64;
+      c += 64;
+    }
+    b = 0;
+  }
+
+  memcpy (key + b + 24, challenge + c, len - c);
+}
+
+void
+gst_rtsp_ext_real_calc_response_and_checksum (char *response, char *chksum,
+    char *challenge)
+{
+  int ch_len, table_len, resp_len;
+  int i;
+  char *ptr;
+  char buf[128];
+  char field[128];
+  char zres[20];
+  char buf1[128];
+  char buf2[128];
+
+  /* initialize return values */
+  memset (response, 0, 64);
+  memset (chksum, 0, 34);
+
+  /* initialize buffer */
+  memset (buf, 0, 128);
+  ptr = buf;
+  BE_32C (ptr, 0xa1e9149d);
+  ptr += 4;
+  BE_32C (ptr, 0x0e6b3b59);
+  ptr += 4;
+
+  if ((ch_len = MIN (strlen (challenge), 56)) == 40) {
+    challenge[32] = 0;
+    ch_len = 32;
+  }
+  memcpy (ptr, challenge, ch_len);
+
+  /* xor challenge bytewise with xor_table */
+  table_len = MIN (strlen ((char *) xor_table), 56);
+  for (i = 0; i < table_len; i++)
+    ptr[i] = ptr[i] ^ xor_table[i];
+
+  /* initialize our field */
+  BE_32C (field, 0x01234567);
+  BE_32C (field + 4, 0x89ABCDEF);
+  BE_32C (field + 8, 0xFEDCBA98);
+  BE_32C (field + 12, 0x76543210);
+  BE_32C (field + 16, 0x00000000);
+  BE_32C (field + 20, 0x00000000);
+
+  /* calculate response */
+  call_hash (field, buf, 64);
+  memset (buf1, 0, 64);
+  *buf1 = (char) 128;
+  memcpy (buf2, field + 16, 8);
+  i = (LE_32 ((buf2)) >> 3) & 0x3f;
+  if (i < 56)
+    i = 56 - i;
+  else
+    i = 120 - i;
+  call_hash (field, buf1, i);
+  call_hash (field, buf2, 8);
+  memcpy (zres, field, 16);
+
+  /* convert zres to ascii string */
+  for (i = 0; i < 16; i++) {
+    char a, b;
+
+    a = (zres[i] >> 4) & 15;
+    b = zres[i] & 15;
+
+    response[i * 2] = ((a < 10) ? (a + 48) : (a + 87)) & 255;
+    response[i * 2 + 1] = ((b < 10) ? (b + 48) : (b + 87)) & 255;
+  }
+
+  /* add tail */
+  resp_len = strlen (response);
+  strcpy (&response[resp_len], "01d0a8e3");
+
+  /* calculate checksum */
+  for (i = 0; i < resp_len / 4; i++)
+    chksum[i] = response[i * 4];
+}
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/realhash.h b/subprojects/gst-plugins-ugly/gst/realmedia/realhash.h
new file mode 100644 (file)
index 0000000..40b6500
--- /dev/null
@@ -0,0 +1,31 @@
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.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_RTSP_HASH_H__
+#define __GST_RTSP_HASH_H__
+
+G_BEGIN_DECLS
+
+void
+gst_rtsp_ext_real_calc_response_and_checksum (char *response, char *chksum,
+    char *challenge);
+
+G_END_DECLS
+
+#endif /* __GST_RTSP_HASH_H__ */
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/realmedia.c b/subprojects/gst-plugins-ugly/gst/realmedia/realmedia.c
new file mode 100644 (file)
index 0000000..71749f6
--- /dev/null
@@ -0,0 +1,50 @@
+/* GStreamer
+ * Copyright (C) <2009> Wim Taymans <wim.taymans@gmail.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 "rmdemux.h"
+#include "rademux.h"
+#include "rdtdepay.h"
+#include "rdtmanager.h"
+#include "rtspreal.h"
+#include "pnmsrc.h"
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  gboolean ret = FALSE;
+
+  ret |= GST_ELEMENT_REGISTER (rmdemux, plugin);
+  ret |= GST_ELEMENT_REGISTER (rademux, plugin);
+  ret |= GST_ELEMENT_REGISTER (rdtdepay, plugin);
+  ret |= GST_ELEMENT_REGISTER (rdtmanager, plugin);
+  ret |= GST_ELEMENT_REGISTER (rtspreal, plugin);
+  ret |= GST_ELEMENT_REGISTER (pnmsrc, plugin);
+
+  return ret;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    realmedia,
+    "RealMedia support plugins",
+    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/rmdemux.c b/subprojects/gst-plugins-ugly/gst/realmedia/rmdemux.c
new file mode 100644 (file)
index 0000000..1873cc1
--- /dev/null
@@ -0,0 +1,2672 @@
+/* GStreamer RealMedia demuxer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2003> David A. Schleef <ds@schleef.org>
+ * Copyright (C) <2004> Stephane Loeuillet <gstreamer@leroutier.net>
+ * Copyright (C) <2005> Owen Fraser-Green <owen@discobabe.net>
+ * Copyright (C) <2005> Michael Smith <fluendo.com>
+ * Copyright (C) <2006> Wim Taymans <wim@fluendo.com>
+ * Copyright (C) <2006> Tim-Philipp Müller <tim centricular net>
+ * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.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 "rmdemux.h"
+#include "rmutils.h"
+
+#include <string.h>
+#include <ctype.h>
+
+#define RMDEMUX_GUINT32_GET(a)  GST_READ_UINT32_BE(a)
+#define RMDEMUX_GUINT16_GET(a)  GST_READ_UINT16_BE(a)
+#define RMDEMUX_FOURCC_GET(a)   GST_READ_UINT32_LE(a)
+#define HEADER_SIZE 10
+#define DATA_SIZE 8
+
+#define MAX_FRAGS 256
+
+static const guint8 sipr_subpk_size[4] = { 29, 19, 37, 20 };
+
+typedef struct _GstRMDemuxIndex GstRMDemuxIndex;
+
+struct _GstRMDemuxStream
+{
+  guint32 subtype;
+  guint32 fourcc;
+  guint32 subformat;
+  guint32 format;
+
+  int id;
+  GstPad *pad;
+  gboolean discont;
+  int timescale;
+
+  int sample_index;
+  GstRMDemuxIndex *index;
+  int index_length;
+  gint framerate_numerator;
+  gint framerate_denominator;
+  guint32 seek_offset;
+
+  guint16 width;
+  guint16 height;
+  guint16 flavor;
+  guint16 rate;                 /* samplerate         */
+  guint16 n_channels;           /* channels           */
+  guint16 sample_width;         /* bits_per_sample    */
+  guint16 leaf_size;            /* subpacket_size     */
+  guint32 packet_size;          /* coded_frame_size   */
+  guint16 version;
+  guint32 extra_data_size;      /* codec_data_length  */
+  guint8 *extra_data;           /* extras             */
+  guint32 bitrate;
+
+  gboolean needs_descrambling;
+  guint subpackets_needed;      /* subpackets needed for descrambling    */
+  GPtrArray *subpackets;        /* array containing subpacket GstBuffers */
+
+  /* Variables needed for fixing timestamps. */
+  GstClockTime next_ts, last_ts;
+  guint16 next_seq, last_seq;
+
+  gint frag_seqnum;
+  gint frag_subseq;
+  guint frag_length;
+  guint frag_current;
+  guint frag_count;
+  guint frag_offset[MAX_FRAGS];
+  GstAdapter *adapter;
+
+  GstTagList *pending_tags;
+};
+
+struct _GstRMDemuxIndex
+{
+  guint32 offset;
+  GstClockTime timestamp;
+};
+
+static GstStaticPadTemplate gst_rmdemux_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("application/vnd.rn-realmedia")
+    );
+
+static GstStaticPadTemplate gst_rmdemux_videosrc_template =
+GST_STATIC_PAD_TEMPLATE ("video_%u",
+    GST_PAD_SRC,
+    GST_PAD_SOMETIMES,
+    GST_STATIC_CAPS_ANY);
+
+static GstStaticPadTemplate gst_rmdemux_audiosrc_template =
+GST_STATIC_PAD_TEMPLATE ("audio_%u",
+    GST_PAD_SRC,
+    GST_PAD_SOMETIMES,
+    GST_STATIC_CAPS_ANY);
+
+GST_DEBUG_CATEGORY_STATIC (rmdemux_debug);
+#define GST_CAT_DEFAULT rmdemux_debug
+
+static GstElementClass *parent_class = NULL;
+
+static void gst_rmdemux_class_init (GstRMDemuxClass * klass);
+static void gst_rmdemux_base_init (GstRMDemuxClass * klass);
+static void gst_rmdemux_init (GstRMDemux * rmdemux);
+static void gst_rmdemux_finalize (GObject * object);
+static GstStateChangeReturn gst_rmdemux_change_state (GstElement * element,
+    GstStateChange transition);
+static GstFlowReturn gst_rmdemux_chain (GstPad * pad, GstObject * parent,
+    GstBuffer * buffer);
+static void gst_rmdemux_loop (GstPad * pad);
+static gboolean gst_rmdemux_sink_activate (GstPad * sinkpad,
+    GstObject * parent);
+static gboolean gst_rmdemux_sink_activate_mode (GstPad * sinkpad,
+    GstObject * parent, GstPadMode mode, gboolean active);
+static gboolean gst_rmdemux_sink_event (GstPad * pad, GstObject * parent,
+    GstEvent * event);
+static gboolean gst_rmdemux_src_event (GstPad * pad, GstObject * parent,
+    GstEvent * event);
+static void gst_rmdemux_send_event (GstRMDemux * rmdemux, GstEvent * event);
+static gboolean gst_rmdemux_src_query (GstPad * pad, GstObject * parent,
+    GstQuery * query);
+static gboolean gst_rmdemux_perform_seek (GstRMDemux * rmdemux,
+    GstEvent * event);
+
+static void gst_rmdemux_parse__rmf (GstRMDemux * rmdemux, const guint8 * data,
+    int length);
+static void gst_rmdemux_parse_prop (GstRMDemux * rmdemux, const guint8 * data,
+    int length);
+static void gst_rmdemux_parse_mdpr (GstRMDemux * rmdemux,
+    const guint8 * data, int length);
+static guint gst_rmdemux_parse_indx (GstRMDemux * rmdemux, const guint8 * data,
+    int length);
+static void gst_rmdemux_parse_data (GstRMDemux * rmdemux, const guint8 * data,
+    int length);
+static void gst_rmdemux_parse_cont (GstRMDemux * rmdemux, const guint8 * data,
+    int length);
+static GstFlowReturn gst_rmdemux_parse_packet (GstRMDemux * rmdemux,
+    GstBuffer * in, guint16 version);
+static void gst_rmdemux_parse_indx_data (GstRMDemux * rmdemux,
+    const guint8 * data, int length);
+static void gst_rmdemux_stream_clear_cached_subpackets (GstRMDemux * rmdemux,
+    GstRMDemuxStream * stream);
+static GstRMDemuxStream *gst_rmdemux_get_stream_by_id (GstRMDemux * rmdemux,
+    int id);
+
+static GType
+gst_rmdemux_get_type (void)
+{
+  static GType rmdemux_type = 0;
+
+  if (!rmdemux_type) {
+    static const GTypeInfo rmdemux_info = {
+      sizeof (GstRMDemuxClass),
+      (GBaseInitFunc) gst_rmdemux_base_init, NULL,
+      (GClassInitFunc) gst_rmdemux_class_init,
+      NULL, NULL, sizeof (GstRMDemux), 0,
+      (GInstanceInitFunc) gst_rmdemux_init,
+    };
+
+    rmdemux_type =
+        g_type_register_static (GST_TYPE_ELEMENT, "GstRMDemux", &rmdemux_info,
+        0);
+  }
+  return rmdemux_type;
+}
+
+GST_ELEMENT_REGISTER_DEFINE (rmdemux, "rmdemux",
+    GST_RANK_PRIMARY, GST_TYPE_RMDEMUX);
+
+static void
+gst_rmdemux_base_init (GstRMDemuxClass * klass)
+{
+  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+
+  gst_element_class_add_static_pad_template (element_class,
+      &gst_rmdemux_sink_template);
+  gst_element_class_add_static_pad_template (element_class,
+      &gst_rmdemux_videosrc_template);
+  gst_element_class_add_static_pad_template (element_class,
+      &gst_rmdemux_audiosrc_template);
+  gst_element_class_set_static_metadata (element_class, "RealMedia Demuxer",
+      "Codec/Demuxer",
+      "Demultiplex a RealMedia file into audio and video streams",
+      "David Schleef <ds@schleef.org>");
+}
+
+static void
+gst_rmdemux_class_init (GstRMDemuxClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+
+  parent_class = g_type_class_peek_parent (klass);
+
+  gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_rmdemux_change_state);
+
+  GST_DEBUG_CATEGORY_INIT (rmdemux_debug, "rmdemux",
+      0, "Demuxer for Realmedia streams");
+
+  gobject_class->finalize = gst_rmdemux_finalize;
+}
+
+static void
+gst_rmdemux_finalize (GObject * object)
+{
+  GstRMDemux *rmdemux = GST_RMDEMUX (object);
+
+  if (rmdemux->adapter) {
+    g_object_unref (rmdemux->adapter);
+    rmdemux->adapter = NULL;
+  }
+  if (rmdemux->flowcombiner) {
+    gst_flow_combiner_free (rmdemux->flowcombiner);
+    rmdemux->flowcombiner = NULL;
+  }
+
+  GST_CALL_PARENT (G_OBJECT_CLASS, finalize, (object));
+}
+
+static void
+gst_rmdemux_init (GstRMDemux * rmdemux)
+{
+  rmdemux->sinkpad =
+      gst_pad_new_from_static_template (&gst_rmdemux_sink_template, "sink");
+  gst_pad_set_event_function (rmdemux->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_rmdemux_sink_event));
+  gst_pad_set_chain_function (rmdemux->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_rmdemux_chain));
+  gst_pad_set_activate_function (rmdemux->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_rmdemux_sink_activate));
+  gst_pad_set_activatemode_function (rmdemux->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_rmdemux_sink_activate_mode));
+
+  gst_element_add_pad (GST_ELEMENT (rmdemux), rmdemux->sinkpad);
+
+  rmdemux->adapter = gst_adapter_new ();
+  rmdemux->first_ts = GST_CLOCK_TIME_NONE;
+  rmdemux->base_ts = GST_CLOCK_TIME_NONE;
+  rmdemux->need_newsegment = TRUE;
+  rmdemux->have_group_id = FALSE;
+  rmdemux->group_id = G_MAXUINT;
+  rmdemux->flowcombiner = gst_flow_combiner_new ();
+  rmdemux->seek_seqnum = GST_SEQNUM_INVALID;
+
+  gst_rm_utils_run_tests ();
+}
+
+static gboolean
+gst_rmdemux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  gboolean ret;
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEGMENT:
+      gst_event_unref (event);
+      ret = TRUE;
+      break;
+    default:
+      ret = gst_pad_event_default (pad, parent, event);
+      break;
+  }
+  return ret;
+}
+
+static gboolean
+gst_rmdemux_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  gboolean ret = TRUE;
+
+  GstRMDemux *rmdemux = GST_RMDEMUX (parent);
+
+  GST_LOG_OBJECT (rmdemux, "handling src event");
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEEK:
+    {
+      gboolean running;
+      guint32 seqnum;
+
+      GST_LOG_OBJECT (rmdemux, "Event on src: SEEK");
+
+      seqnum = gst_event_get_seqnum (event);
+      if (seqnum == rmdemux->seek_seqnum) {
+        GST_LOG_OBJECT (pad,
+            "Drop duplicated SEEK event seqnum %" G_GUINT32_FORMAT, seqnum);
+        gst_event_unref (event);
+        break;
+      }
+
+      /* can't seek if we are not seekable, FIXME could pass the
+       * seek query upstream after converting it to bytes using
+       * the average bitrate of the stream. */
+      if (!rmdemux->seekable) {
+        ret = FALSE;
+        GST_DEBUG ("seek on non seekable stream");
+        goto done_unref;
+      }
+
+      GST_OBJECT_LOCK (rmdemux);
+      /* check if we can do the seek now */
+      running = rmdemux->running;
+      GST_OBJECT_UNLOCK (rmdemux);
+
+      /* now do the seek */
+      if (running) {
+        ret = gst_rmdemux_perform_seek (rmdemux, event);
+      } else
+        ret = TRUE;
+
+      gst_event_unref (event);
+      break;
+    }
+    default:
+      GST_LOG_OBJECT (rmdemux, "Event on src: type=%d", GST_EVENT_TYPE (event));
+      ret = gst_pad_event_default (pad, parent, event);
+      break;
+  }
+
+  return ret;
+
+done_unref:
+  GST_DEBUG ("error handling event");
+  gst_event_unref (event);
+  return ret;
+}
+
+/* Validate that this looks like a reasonable point to seek to */
+static gboolean
+gst_rmdemux_validate_offset (GstRMDemux * rmdemux)
+{
+  GstBuffer *buffer;
+  GstFlowReturn flowret;
+  guint16 version, length;
+  gboolean ret = TRUE;
+  GstMapInfo map;
+
+  buffer = NULL;
+  flowret = gst_pad_pull_range (rmdemux->sinkpad, rmdemux->offset, 4, &buffer);
+
+  if (flowret != GST_FLOW_OK) {
+    GST_DEBUG_OBJECT (rmdemux, "Failed to pull data at offset %d",
+        rmdemux->offset);
+    return FALSE;
+  }
+  /* TODO: Can we also be seeking to a 'DATA' chunk header? Check this.
+   * Also, for the case we currently handle, can we check any more? It's pretty
+   * sucky to not be validating a little more heavily than this... */
+  /* This should now be the start of a data packet header. That begins with
+   * a 2-byte 'version' field, which has to be 0 or 1, then a length. I'm not
+   * certain what values are valid for length, but it must always be at least
+   * 4 bytes, and we can check that it won't take us past our known total size
+   */
+
+  gst_buffer_map (buffer, &map, GST_MAP_READ);
+  version = RMDEMUX_GUINT16_GET (map.data);
+  if (version != 0 && version != 1) {
+    GST_DEBUG_OBJECT (rmdemux, "Expected version 0 or 1, got %d",
+        (int) version);
+    ret = FALSE;
+  }
+
+  length = RMDEMUX_GUINT16_GET (map.data + 2);
+  /* TODO: Also check against total stream length */
+  if (length < 4) {
+    GST_DEBUG_OBJECT (rmdemux, "Expected length >= 4, got %d", (int) length);
+    ret = FALSE;
+  }
+  gst_buffer_unmap (buffer, &map);
+
+  if (ret) {
+    rmdemux->offset += 4;
+    gst_adapter_clear (rmdemux->adapter);
+    gst_adapter_push (rmdemux->adapter, buffer);
+  } else {
+    GST_WARNING_OBJECT (rmdemux, "Failed to validate seek offset at %d",
+        rmdemux->offset);
+    gst_buffer_unref (buffer);
+  }
+
+  return ret;
+}
+
+static gboolean
+find_seek_offset_bytes (GstRMDemux * rmdemux, guint target)
+{
+  int i;
+  GSList *cur;
+  gboolean ret = FALSE;
+
+  for (cur = rmdemux->streams; cur; cur = cur->next) {
+    GstRMDemuxStream *stream = cur->data;
+
+    /* Search backwards through this stream's index until we find the first
+     * timestamp before our target time */
+    for (i = stream->index_length - 1; i >= 0; i--) {
+      if (stream->index[i].offset <= target) {
+        /* Set the seek_offset for the stream so we don't bother parsing it
+         * until we've passed that point */
+        stream->seek_offset = stream->index[i].offset;
+        rmdemux->offset = stream->index[i].offset;
+        ret = TRUE;
+        break;
+      }
+    }
+  }
+  return ret;
+}
+
+static gboolean
+find_seek_offset_time (GstRMDemux * rmdemux, GstClockTime time)
+{
+  int i, n_stream;
+  gboolean ret = FALSE;
+  GSList *cur;
+  GstClockTime earliest = GST_CLOCK_TIME_NONE;
+
+  n_stream = 0;
+  for (cur = rmdemux->streams; cur; cur = cur->next, n_stream++) {
+    GstRMDemuxStream *stream = cur->data;
+
+    /* Search backwards through this stream's index until we find the first
+     * timestamp before our target time */
+    for (i = stream->index_length - 1; i >= 0; i--) {
+      if (stream->index[i].timestamp <= time) {
+        /* Set the seek_offset for the stream so we don't bother parsing it
+         * until we've passed that point */
+        stream->seek_offset = stream->index[i].offset;
+
+        /* If it's also the earliest timestamp we've seen of all streams, then
+         * that's our target!
+         */
+        if (earliest == GST_CLOCK_TIME_NONE ||
+            stream->index[i].timestamp < earliest) {
+          earliest = stream->index[i].timestamp;
+          rmdemux->offset = stream->index[i].offset;
+          GST_DEBUG_OBJECT (rmdemux,
+              "We're looking for %" GST_TIME_FORMAT
+              " and we found that stream %d has the latest index at %"
+              GST_TIME_FORMAT, GST_TIME_ARGS (rmdemux->segment.start), n_stream,
+              GST_TIME_ARGS (earliest));
+        }
+
+        ret = TRUE;
+
+        break;
+      }
+    }
+    stream->discont = TRUE;
+  }
+  return ret;
+}
+
+static gboolean
+gst_rmdemux_perform_seek (GstRMDemux * rmdemux, GstEvent * event)
+{
+  gboolean validated;
+  gboolean ret = TRUE;
+  gboolean flush;
+  GstFormat format;
+  gdouble rate;
+  GstSeekFlags flags;
+  GstSeekType cur_type, stop_type;
+  gint64 cur, stop;
+  gboolean update;
+  guint32 seqnum = GST_SEQNUM_INVALID;
+  GstEvent *fl_event;
+
+  if (event) {
+    GST_DEBUG_OBJECT (rmdemux, "seek with event");
+
+    seqnum = gst_event_get_seqnum (event);
+    gst_event_parse_seek (event, &rate, &format, &flags,
+        &cur_type, &cur, &stop_type, &stop);
+
+    /* we can only seek on time */
+    if (format != GST_FORMAT_TIME) {
+      GST_DEBUG_OBJECT (rmdemux, "can only seek on TIME");
+      goto error;
+    }
+    /* cannot yet do backwards playback */
+    if (rate <= 0.0) {
+      GST_DEBUG_OBJECT (rmdemux, "can only seek with positive rate, not %lf",
+          rate);
+      goto error;
+    }
+  } else {
+    GST_DEBUG_OBJECT (rmdemux, "seek without event");
+
+    flags = 0;
+    rate = 1.0;
+  }
+
+  GST_DEBUG_OBJECT (rmdemux, "seek, rate %g", rate);
+
+  flush = flags & GST_SEEK_FLAG_FLUSH;
+
+  /* first step is to unlock the streaming thread if it is
+   * blocked in a chain call, we do this by starting the flush. */
+  if (flush) {
+    fl_event = gst_event_new_flush_start ();
+    if (seqnum != GST_SEQNUM_INVALID)
+      gst_event_set_seqnum (fl_event, seqnum);
+    gst_pad_push_event (rmdemux->sinkpad, fl_event);
+
+    fl_event = gst_event_new_flush_start ();
+    if (seqnum != GST_SEQNUM_INVALID)
+      gst_event_set_seqnum (fl_event, seqnum);
+    gst_rmdemux_send_event (rmdemux, fl_event);
+  } else {
+    gst_pad_pause_task (rmdemux->sinkpad);
+  }
+
+  GST_LOG_OBJECT (rmdemux, "Done starting flushes");
+
+  /* now grab the stream lock so that streaming cannot continue, for
+   * non flushing seeks when the element is in PAUSED this could block
+   * forever. */
+  GST_PAD_STREAM_LOCK (rmdemux->sinkpad);
+
+  GST_LOG_OBJECT (rmdemux, "Took streamlock");
+
+  if (event) {
+    if (!gst_segment_do_seek (&rmdemux->segment, rate, format, flags,
+            cur_type, cur, stop_type, stop, &update)) {
+      ret = FALSE;
+      goto done;
+    }
+
+    rmdemux->seek_seqnum = seqnum;
+  }
+
+  GST_DEBUG_OBJECT (rmdemux, "segment positions set to %" GST_TIME_FORMAT "-%"
+      GST_TIME_FORMAT, GST_TIME_ARGS (rmdemux->segment.start),
+      GST_TIME_ARGS (rmdemux->segment.stop));
+
+  /* we need to stop flushing on the sinkpad as we're going to use it
+   * next. We can do this as we have the STREAM lock now. */
+  fl_event = gst_event_new_flush_stop (TRUE);
+  if (seqnum != GST_SEQNUM_INVALID)
+    gst_event_set_seqnum (fl_event, seqnum);
+  gst_pad_push_event (rmdemux->sinkpad, fl_event);
+
+  GST_LOG_OBJECT (rmdemux, "Pushed FLUSH_STOP event");
+
+  /* For each stream, find the first index offset equal to or before our seek 
+   * target. Of these, find the smallest offset. That's where we seek to.
+   *
+   * Then we pull 4 bytes from that offset, and validate that we've seeked to a
+   * what looks like a plausible packet.
+   * If that fails, restart, with the seek target set to one less than the
+   * offset we just tried. If we run out of places to try, treat that as a fatal
+   * error.
+   */
+  if (!find_seek_offset_time (rmdemux, rmdemux->segment.position)) {
+    GST_LOG_OBJECT (rmdemux, "Failed to find seek offset by time");
+    ret = FALSE;
+    goto done;
+  }
+
+  GST_LOG_OBJECT (rmdemux, "Validating offset %u", rmdemux->offset);
+  validated = gst_rmdemux_validate_offset (rmdemux);
+  while (!validated) {
+    GST_INFO_OBJECT (rmdemux, "Failed to validate offset at %u",
+        rmdemux->offset);
+    if (!find_seek_offset_bytes (rmdemux, rmdemux->offset - 1)) {
+      ret = FALSE;
+      goto done;
+    }
+    validated = gst_rmdemux_validate_offset (rmdemux);
+  }
+
+  GST_LOG_OBJECT (rmdemux, "Found final offset. Excellent!");
+
+  /* now we have a new position, prepare for streaming again */
+  {
+    /* Reset the demuxer state */
+    rmdemux->state = RMDEMUX_STATE_DATA_PACKET;
+
+    if (flush) {
+      fl_event = gst_event_new_flush_stop (TRUE);
+      if (seqnum != GST_SEQNUM_INVALID)
+        gst_event_set_seqnum (fl_event, seqnum);
+      gst_rmdemux_send_event (rmdemux, fl_event);
+    }
+
+    /* must send newsegment event from streaming thread, so just set flag */
+    rmdemux->need_newsegment = TRUE;
+
+    /* notify start of new segment */
+    if (rmdemux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
+      GstMessage *msg =
+          gst_message_new_segment_start (GST_OBJECT_CAST (rmdemux),
+          GST_FORMAT_TIME, rmdemux->segment.position);
+      if (seqnum != GST_SEQNUM_INVALID)
+        gst_message_set_seqnum (msg, seqnum);
+      gst_element_post_message (GST_ELEMENT_CAST (rmdemux), msg);
+    }
+
+    /* restart our task since it might have been stopped when we did the 
+     * flush. */
+    gst_pad_start_task (rmdemux->sinkpad, (GstTaskFunction) gst_rmdemux_loop,
+        rmdemux->sinkpad, NULL);
+  }
+
+done:
+  /* streaming can continue now */
+  GST_PAD_STREAM_UNLOCK (rmdemux->sinkpad);
+
+  return ret;
+
+error:
+  {
+    GST_DEBUG_OBJECT (rmdemux, "seek failed");
+    return FALSE;
+  }
+}
+
+
+static gboolean
+gst_rmdemux_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
+{
+  gboolean res = FALSE;
+  GstRMDemux *rmdemux;
+
+  rmdemux = GST_RMDEMUX (parent);
+
+  switch (GST_QUERY_TYPE (query)) {
+    case GST_QUERY_POSITION:
+      GST_DEBUG_OBJECT (rmdemux, "Position query: no idea from demuxer!");
+      break;
+    case GST_QUERY_DURATION:{
+      GstFormat fmt;
+
+      gst_query_parse_duration (query, &fmt, NULL);
+      if (fmt == GST_FORMAT_TIME) {
+        GST_OBJECT_LOCK (rmdemux);
+        if (G_LIKELY (rmdemux->running)) {
+          gst_query_set_duration (query, GST_FORMAT_TIME, rmdemux->duration);
+          GST_DEBUG_OBJECT (rmdemux, "duration set to %" GST_TIME_FORMAT,
+              GST_TIME_ARGS (rmdemux->duration));
+          res = TRUE;
+        }
+        GST_OBJECT_UNLOCK (rmdemux);
+      }
+      break;
+    }
+    case GST_QUERY_SEEKING:{
+      GstFormat fmt;
+
+      gst_query_parse_seeking (query, &fmt, NULL, NULL, NULL);
+      if (fmt == GST_FORMAT_TIME) {
+        GST_OBJECT_LOCK (rmdemux);
+        if (G_LIKELY (rmdemux->running)) {
+          gst_query_set_seeking (query, GST_FORMAT_TIME, rmdemux->seekable,
+              0, rmdemux->duration);
+          res = TRUE;
+        }
+        GST_OBJECT_UNLOCK (rmdemux);
+      }
+      break;
+    }
+    case GST_QUERY_SEGMENT:
+    {
+      GstFormat format;
+      gint64 start, stop;
+
+      format = rmdemux->segment.format;
+
+      start =
+          gst_segment_to_stream_time (&rmdemux->segment, format,
+          rmdemux->segment.start);
+      if ((stop = rmdemux->segment.stop) == -1)
+        stop = rmdemux->segment.duration;
+      else
+        stop = gst_segment_to_stream_time (&rmdemux->segment, format, stop);
+
+      gst_query_set_segment (query, rmdemux->segment.rate, format, start, stop);
+      res = TRUE;
+      break;
+    }
+    default:
+      res = gst_pad_query_default (pad, parent, query);
+      break;
+  }
+
+  return res;
+}
+
+static void
+gst_rmdemux_free_stream (GstRMDemux * rmdemux, GstRMDemuxStream * stream)
+{
+  g_object_unref (stream->adapter);
+  gst_rmdemux_stream_clear_cached_subpackets (rmdemux, stream);
+  if (stream->pending_tags)
+    gst_tag_list_unref (stream->pending_tags);
+  if (stream->subpackets)
+    g_ptr_array_free (stream->subpackets, TRUE);
+  g_free (stream->index);
+  g_free (stream);
+}
+
+static void
+gst_rmdemux_reset (GstRMDemux * rmdemux)
+{
+  GSList *cur;
+
+  GST_OBJECT_LOCK (rmdemux);
+  rmdemux->running = FALSE;
+  GST_OBJECT_UNLOCK (rmdemux);
+
+  for (cur = rmdemux->streams; cur; cur = cur->next) {
+    GstRMDemuxStream *stream = cur->data;
+
+    gst_flow_combiner_remove_pad (rmdemux->flowcombiner, stream->pad);
+    gst_element_remove_pad (GST_ELEMENT (rmdemux), stream->pad);
+    gst_rmdemux_free_stream (rmdemux, stream);
+  }
+  g_slist_free (rmdemux->streams);
+  rmdemux->streams = NULL;
+  rmdemux->n_audio_streams = 0;
+  rmdemux->n_video_streams = 0;
+
+  if (rmdemux->pending_tags != NULL) {
+    gst_tag_list_unref (rmdemux->pending_tags);
+    rmdemux->pending_tags = NULL;
+  }
+
+  gst_adapter_clear (rmdemux->adapter);
+  rmdemux->state = RMDEMUX_STATE_HEADER;
+  rmdemux->have_pads = FALSE;
+
+  gst_segment_init (&rmdemux->segment, GST_FORMAT_UNDEFINED);
+  rmdemux->first_ts = GST_CLOCK_TIME_NONE;
+  rmdemux->base_ts = GST_CLOCK_TIME_NONE;
+  rmdemux->need_newsegment = TRUE;
+
+  rmdemux->have_group_id = FALSE;
+  rmdemux->group_id = G_MAXUINT;
+
+  rmdemux->seek_seqnum = GST_SEQNUM_INVALID;
+}
+
+static GstStateChangeReturn
+gst_rmdemux_change_state (GstElement * element, GstStateChange transition)
+{
+  GstRMDemux *rmdemux = GST_RMDEMUX (element);
+  GstStateChangeReturn res;
+
+  switch (transition) {
+    case GST_STATE_CHANGE_NULL_TO_READY:
+      break;
+    case GST_STATE_CHANGE_READY_TO_PAUSED:
+      rmdemux->state = RMDEMUX_STATE_HEADER;
+      rmdemux->have_pads = FALSE;
+      gst_segment_init (&rmdemux->segment, GST_FORMAT_TIME);
+      rmdemux->running = FALSE;
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+      break;
+    default:
+      break;
+  }
+
+  res = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      break;
+    case GST_STATE_CHANGE_PAUSED_TO_READY:{
+      gst_rmdemux_reset (rmdemux);
+      break;
+    }
+    case GST_STATE_CHANGE_READY_TO_NULL:
+      break;
+    default:
+      break;
+  }
+
+  return res;
+}
+
+/* this function is called when the pad is activated and should start
+ * processing data.
+ *
+ * We check if we can do random access to decide if we work push or
+ * pull based.
+ */
+static gboolean
+gst_rmdemux_sink_activate (GstPad * sinkpad, GstObject * parent)
+{
+  GstQuery *query;
+  gboolean pull_mode;
+
+  query = gst_query_new_scheduling ();
+
+  if (!gst_pad_peer_query (sinkpad, query)) {
+    gst_query_unref (query);
+    goto activate_push;
+  }
+
+  pull_mode = gst_query_has_scheduling_mode_with_flags (query,
+      GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE);
+  gst_query_unref (query);
+
+  if (!pull_mode)
+    goto activate_push;
+
+  GST_DEBUG_OBJECT (sinkpad, "activating pull");
+  return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PULL, TRUE);
+
+activate_push:
+  {
+    GST_DEBUG_OBJECT (sinkpad, "activating push");
+    return gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PUSH, TRUE);
+  }
+}
+
+static gboolean
+gst_rmdemux_sink_activate_mode (GstPad * sinkpad, GstObject * parent,
+    GstPadMode mode, gboolean active)
+{
+  gboolean res;
+  GstRMDemux *demux;
+
+  demux = GST_RMDEMUX (parent);
+
+  switch (mode) {
+    case GST_PAD_MODE_PUSH:
+      demux->seekable = FALSE;
+      demux->running = active;
+      res = TRUE;
+      break;
+    case GST_PAD_MODE_PULL:
+      if (active) {
+        demux->seekable = TRUE;
+        demux->offset = 0;
+        demux->loop_state = RMDEMUX_LOOP_STATE_HEADER;
+        demux->data_offset = G_MAXUINT;
+        res =
+            gst_pad_start_task (sinkpad, (GstTaskFunction) gst_rmdemux_loop,
+            sinkpad, NULL);
+      } else {
+        res = gst_pad_stop_task (sinkpad);
+      }
+      break;
+    default:
+      res = FALSE;
+      break;
+  }
+  return res;
+}
+
+
+/* random access mode - just pass over to our chain function */
+static void
+gst_rmdemux_loop (GstPad * pad)
+{
+  GstRMDemux *rmdemux;
+  GstBuffer *buffer;
+  GstFlowReturn ret = GST_FLOW_OK;
+  guint size;
+
+  rmdemux = GST_RMDEMUX (GST_PAD_PARENT (pad));
+
+  GST_LOG_OBJECT (rmdemux, "loop with state=%d and offset=0x%x",
+      rmdemux->loop_state, rmdemux->offset);
+
+  switch (rmdemux->state) {
+    case RMDEMUX_STATE_HEADER:
+      size = HEADER_SIZE;
+      break;
+    case RMDEMUX_STATE_HEADER_DATA:
+      size = DATA_SIZE;
+      break;
+    case RMDEMUX_STATE_DATA_PACKET:
+      size = rmdemux->avg_packet_size;
+      break;
+    case RMDEMUX_STATE_EOS:
+      GST_LOG_OBJECT (rmdemux, "At EOS, pausing task");
+      ret = GST_FLOW_EOS;
+      goto need_pause;
+    default:
+      GST_LOG_OBJECT (rmdemux, "Default: requires %d bytes (state is %d)",
+          (int) rmdemux->size, rmdemux->state);
+      size = rmdemux->size;
+  }
+
+  buffer = NULL;
+  ret = gst_pad_pull_range (pad, rmdemux->offset, size, &buffer);
+  if (ret != GST_FLOW_OK) {
+    if (rmdemux->offset == rmdemux->index_offset) {
+      /* The index isn't available so forget about it */
+      rmdemux->loop_state = RMDEMUX_LOOP_STATE_DATA;
+      rmdemux->offset = rmdemux->data_offset;
+      GST_OBJECT_LOCK (rmdemux);
+      rmdemux->running = TRUE;
+      rmdemux->seekable = FALSE;
+      GST_OBJECT_UNLOCK (rmdemux);
+      return;
+    } else {
+      GST_DEBUG_OBJECT (rmdemux, "Unable to pull %d bytes at offset 0x%08x "
+          "(pull_range returned flow %s, state is %d)", (gint) size,
+          rmdemux->offset, gst_flow_get_name (ret), GST_STATE (rmdemux));
+      goto need_pause;
+    }
+  }
+
+  size = gst_buffer_get_size (buffer);
+
+  /* Defer to the chain function */
+  ret = gst_rmdemux_chain (pad, GST_OBJECT_CAST (rmdemux), buffer);
+  if (ret != GST_FLOW_OK) {
+    GST_DEBUG_OBJECT (rmdemux, "Chain flow failed at offset 0x%08x",
+        rmdemux->offset);
+    goto need_pause;
+  }
+
+  rmdemux->offset += size;
+
+  switch (rmdemux->loop_state) {
+    case RMDEMUX_LOOP_STATE_HEADER:
+      if (rmdemux->offset >= rmdemux->data_offset) {
+        /* It's the end of the header */
+        rmdemux->loop_state = RMDEMUX_LOOP_STATE_INDEX;
+        rmdemux->offset = rmdemux->index_offset;
+      }
+      break;
+    case RMDEMUX_LOOP_STATE_INDEX:
+      if (rmdemux->state == RMDEMUX_STATE_HEADER) {
+        if (rmdemux->index_offset == 0) {
+          /* We've read the last index */
+          rmdemux->loop_state = RMDEMUX_LOOP_STATE_DATA;
+          rmdemux->offset = rmdemux->data_offset;
+          GST_OBJECT_LOCK (rmdemux);
+          rmdemux->running = TRUE;
+          GST_OBJECT_UNLOCK (rmdemux);
+        } else {
+          /* Get the next index */
+          rmdemux->offset = rmdemux->index_offset;
+        }
+      }
+      break;
+    case RMDEMUX_LOOP_STATE_DATA:
+      break;
+  }
+
+  return;
+
+  /* ERRORS */
+need_pause:
+  {
+    const gchar *reason = gst_flow_get_name (ret);
+
+    GST_LOG_OBJECT (rmdemux, "pausing task, reason %s", reason);
+    rmdemux->segment_running = FALSE;
+    gst_pad_pause_task (rmdemux->sinkpad);
+
+    if (ret == GST_FLOW_EOS) {
+      /* perform EOS logic */
+      if (rmdemux->segment.flags & GST_SEEK_FLAG_SEGMENT) {
+        gint64 stop;
+
+        /* for segment playback we need to post when (in stream time)
+         * we stopped, this is either stop (when set) or the duration. */
+        if ((stop = rmdemux->segment.stop) == -1)
+          stop = rmdemux->segment.duration;
+
+        GST_LOG_OBJECT (rmdemux, "Sending segment done, at end of segment");
+        gst_element_post_message (GST_ELEMENT (rmdemux),
+            gst_message_new_segment_done (GST_OBJECT (rmdemux),
+                GST_FORMAT_TIME, stop));
+        gst_rmdemux_send_event (rmdemux,
+            gst_event_new_segment_done (GST_FORMAT_TIME, stop));
+      } else {
+        /* normal playback, send EOS to all linked pads */
+        GST_LOG_OBJECT (rmdemux, "Sending EOS, at end of stream");
+        gst_rmdemux_send_event (rmdemux, gst_event_new_eos ());
+      }
+    } else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
+      GST_ELEMENT_FLOW_ERROR (rmdemux, ret);
+      gst_rmdemux_send_event (rmdemux, gst_event_new_eos ());
+    }
+    return;
+  }
+}
+
+static gboolean
+gst_rmdemux_fourcc_isplausible (guint32 fourcc)
+{
+  int i;
+
+  for (i = 0; i < 4; i++) {
+    if (!isprint ((int) ((unsigned char *) (&fourcc))[i])) {
+      return FALSE;
+    }
+  }
+  return TRUE;
+}
+
+static GstFlowReturn
+gst_rmdemux_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+  const guint8 *data;
+  guint16 version;
+  guint avail;
+
+  GstRMDemux *rmdemux = GST_RMDEMUX (parent);
+
+  if (rmdemux->base_ts == -1) {
+    if (GST_BUFFER_DTS_IS_VALID (buffer))
+      rmdemux->base_ts = GST_BUFFER_DTS (buffer);
+    else
+      rmdemux->base_ts = GST_BUFFER_PTS (buffer);
+
+    GST_LOG_OBJECT (rmdemux, "base_ts %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (rmdemux->base_ts));
+  }
+
+  gst_adapter_push (rmdemux->adapter, buffer);
+
+  GST_LOG_OBJECT (rmdemux, "Chaining buffer of size %" G_GSIZE_FORMAT,
+      gst_buffer_get_size (buffer));
+
+  while (TRUE) {
+    avail = gst_adapter_available (rmdemux->adapter);
+
+    GST_LOG_OBJECT (rmdemux, "looping in chain, avail %u", avail);
+    switch (rmdemux->state) {
+      case RMDEMUX_STATE_HEADER:
+      {
+        if (gst_adapter_available (rmdemux->adapter) < HEADER_SIZE)
+          goto unlock;
+
+        data = gst_adapter_map (rmdemux->adapter, HEADER_SIZE);
+
+        rmdemux->object_id = RMDEMUX_FOURCC_GET (data + 0);
+        rmdemux->size = RMDEMUX_GUINT32_GET (data + 4) - HEADER_SIZE;
+        rmdemux->object_version = RMDEMUX_GUINT16_GET (data + 8);
+
+        /* Sanity-check. We assume that the FOURCC is printable ASCII */
+        if (!gst_rmdemux_fourcc_isplausible (rmdemux->object_id)) {
+          /* Failed. Remain in HEADER state, try again... We flush only 
+           * the actual FOURCC, not the entire header, because we could 
+           * need to resync anywhere at all... really, this should never 
+           * happen. */
+          GST_WARNING_OBJECT (rmdemux, "Bogus looking header, unprintable "
+              "FOURCC");
+          gst_adapter_unmap (rmdemux->adapter);
+          gst_adapter_flush (rmdemux->adapter, 4);
+
+          break;
+        }
+
+        GST_LOG_OBJECT (rmdemux, "header found with object_id=%"
+            GST_FOURCC_FORMAT
+            " size=%08x object_version=%d",
+            GST_FOURCC_ARGS (rmdemux->object_id), rmdemux->size,
+            rmdemux->object_version);
+
+        gst_adapter_unmap (rmdemux->adapter);
+        gst_adapter_flush (rmdemux->adapter, HEADER_SIZE);
+
+        switch (rmdemux->object_id) {
+          case GST_MAKE_FOURCC ('.', 'R', 'M', 'F'):
+            rmdemux->state = RMDEMUX_STATE_HEADER_RMF;
+            break;
+          case GST_MAKE_FOURCC ('P', 'R', 'O', 'P'):
+            rmdemux->state = RMDEMUX_STATE_HEADER_PROP;
+            break;
+          case GST_MAKE_FOURCC ('M', 'D', 'P', 'R'):
+            rmdemux->state = RMDEMUX_STATE_HEADER_MDPR;
+            break;
+          case GST_MAKE_FOURCC ('I', 'N', 'D', 'X'):
+            rmdemux->state = RMDEMUX_STATE_HEADER_INDX;
+            break;
+          case GST_MAKE_FOURCC ('D', 'A', 'T', 'A'):
+            rmdemux->state = RMDEMUX_STATE_HEADER_DATA;
+            break;
+          case GST_MAKE_FOURCC ('C', 'O', 'N', 'T'):
+            rmdemux->state = RMDEMUX_STATE_HEADER_CONT;
+            break;
+          default:
+            rmdemux->state = RMDEMUX_STATE_HEADER_UNKNOWN;
+            break;
+        }
+        break;
+      }
+      case RMDEMUX_STATE_HEADER_UNKNOWN:
+      {
+        if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
+          goto unlock;
+
+        GST_WARNING_OBJECT (rmdemux, "Unknown object_id %" GST_FOURCC_FORMAT,
+            GST_FOURCC_ARGS (rmdemux->object_id));
+
+        gst_adapter_flush (rmdemux->adapter, rmdemux->size);
+        rmdemux->state = RMDEMUX_STATE_HEADER;
+        break;
+      }
+      case RMDEMUX_STATE_HEADER_RMF:
+      {
+        if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
+          goto unlock;
+
+        if ((rmdemux->object_version == 0) || (rmdemux->object_version == 1)) {
+          data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
+          gst_rmdemux_parse__rmf (rmdemux, data, rmdemux->size);
+          gst_adapter_unmap (rmdemux->adapter);
+          gst_adapter_flush (rmdemux->adapter, rmdemux->size);
+        } else {
+          gst_adapter_flush (rmdemux->adapter, rmdemux->size);
+        }
+        rmdemux->state = RMDEMUX_STATE_HEADER;
+        break;
+      }
+      case RMDEMUX_STATE_HEADER_PROP:
+      {
+        if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
+          goto unlock;
+
+        data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
+        gst_rmdemux_parse_prop (rmdemux, data, rmdemux->size);
+        gst_adapter_unmap (rmdemux->adapter);
+        gst_adapter_flush (rmdemux->adapter, rmdemux->size);
+
+        rmdemux->state = RMDEMUX_STATE_HEADER;
+        break;
+      }
+      case RMDEMUX_STATE_HEADER_MDPR:
+      {
+        if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
+          goto unlock;
+
+        data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
+        gst_rmdemux_parse_mdpr (rmdemux, data, rmdemux->size);
+        gst_adapter_unmap (rmdemux->adapter);
+        gst_adapter_flush (rmdemux->adapter, rmdemux->size);
+
+        rmdemux->state = RMDEMUX_STATE_HEADER;
+        break;
+      }
+      case RMDEMUX_STATE_HEADER_CONT:
+      {
+        if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
+          goto unlock;
+
+        data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
+        gst_rmdemux_parse_cont (rmdemux, data, rmdemux->size);
+        gst_adapter_unmap (rmdemux->adapter);
+        gst_adapter_flush (rmdemux->adapter, rmdemux->size);
+
+        rmdemux->state = RMDEMUX_STATE_HEADER;
+        break;
+      }
+      case RMDEMUX_STATE_HEADER_DATA:
+      {
+        /* If we haven't already done so then signal there are no more pads */
+        if (!rmdemux->have_pads) {
+          GST_LOG_OBJECT (rmdemux, "no more pads");
+          gst_element_no_more_pads (GST_ELEMENT (rmdemux));
+          rmdemux->have_pads = TRUE;
+        }
+
+        /* The actual header is only 8 bytes */
+        rmdemux->size = DATA_SIZE;
+        GST_LOG_OBJECT (rmdemux, "data available %" G_GSIZE_FORMAT,
+            gst_adapter_available (rmdemux->adapter));
+        if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
+          goto unlock;
+
+        data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
+        gst_rmdemux_parse_data (rmdemux, data, rmdemux->size);
+        gst_adapter_unmap (rmdemux->adapter);
+        gst_adapter_flush (rmdemux->adapter, rmdemux->size);
+
+        rmdemux->state = RMDEMUX_STATE_DATA_PACKET;
+        break;
+      }
+      case RMDEMUX_STATE_HEADER_INDX:
+      {
+        if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
+          goto unlock;
+
+        data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
+        rmdemux->size = gst_rmdemux_parse_indx (rmdemux, data, rmdemux->size);
+        /* Only flush the header */
+        gst_adapter_unmap (rmdemux->adapter);
+        gst_adapter_flush (rmdemux->adapter, HEADER_SIZE);
+
+        rmdemux->state = RMDEMUX_STATE_INDX_DATA;
+        break;
+      }
+      case RMDEMUX_STATE_INDX_DATA:
+      {
+        /* There's not always an data to get... */
+        if (rmdemux->size > 0) {
+          if (gst_adapter_available (rmdemux->adapter) < rmdemux->size)
+            goto unlock;
+
+          data = gst_adapter_map (rmdemux->adapter, rmdemux->size);
+          gst_rmdemux_parse_indx_data (rmdemux, data, rmdemux->size);
+          gst_adapter_unmap (rmdemux->adapter);
+          gst_adapter_flush (rmdemux->adapter, rmdemux->size);
+        }
+
+        rmdemux->state = RMDEMUX_STATE_HEADER;
+        break;
+      }
+      case RMDEMUX_STATE_DATA_PACKET:
+      {
+        guint8 header[4];
+
+        if (gst_adapter_available (rmdemux->adapter) < 2)
+          goto unlock;
+
+        gst_adapter_copy (rmdemux->adapter, header, 0, 2);
+        version = RMDEMUX_GUINT16_GET (header);
+        GST_LOG_OBJECT (rmdemux, "Data packet with version=%d", version);
+
+        if (version == 0 || version == 1) {
+          guint16 length;
+
+          if (gst_adapter_available (rmdemux->adapter) < 4)
+            goto unlock;
+
+          gst_adapter_copy (rmdemux->adapter, header, 0, 4);
+
+          length = RMDEMUX_GUINT16_GET (header + 2);
+          GST_LOG_OBJECT (rmdemux, "Got length %d", length);
+
+          if (length < 4) {
+            GST_LOG_OBJECT (rmdemux, "length too small, dropping");
+            /* Invalid, just drop it */
+            gst_adapter_flush (rmdemux->adapter, 4);
+          } else {
+            GstBuffer *buffer;
+
+            avail = gst_adapter_available (rmdemux->adapter);
+            if (avail < length)
+              goto unlock;
+
+            GST_LOG_OBJECT (rmdemux, "we have %u available and we needed %d",
+                avail, length);
+
+            /* flush version and length */
+            gst_adapter_flush (rmdemux->adapter, 4);
+            length -= 4;
+
+            buffer = gst_adapter_take_buffer (rmdemux->adapter, length);
+
+            ret = gst_rmdemux_parse_packet (rmdemux, buffer, version);
+            rmdemux->chunk_index++;
+          }
+
+          if (rmdemux->chunk_index == rmdemux->n_chunks || length == 0)
+            rmdemux->state = RMDEMUX_STATE_HEADER;
+        } else {
+          /* Stream done */
+          gst_adapter_flush (rmdemux->adapter, 2);
+
+          if (rmdemux->data_offset == 0) {
+            GST_LOG_OBJECT (rmdemux,
+                "No further data, internal demux state EOS");
+            rmdemux->state = RMDEMUX_STATE_EOS;
+          } else
+            rmdemux->state = RMDEMUX_STATE_HEADER;
+        }
+        break;
+      }
+      case RMDEMUX_STATE_EOS:
+        gst_rmdemux_send_event (rmdemux, gst_event_new_eos ());
+        goto unlock;
+      default:
+        GST_WARNING_OBJECT (rmdemux, "Unhandled state %d", rmdemux->state);
+        goto unlock;
+    }
+  }
+
+unlock:
+  return ret;
+}
+
+static GstRMDemuxStream *
+gst_rmdemux_get_stream_by_id (GstRMDemux * rmdemux, int id)
+{
+  GSList *cur;
+
+  for (cur = rmdemux->streams; cur; cur = cur->next) {
+    GstRMDemuxStream *stream = cur->data;
+
+    if (stream->id == id) {
+      return stream;
+    }
+  }
+
+  return NULL;
+}
+
+static void
+gst_rmdemux_send_event (GstRMDemux * rmdemux, GstEvent * event)
+{
+  GSList *cur;
+
+  for (cur = rmdemux->streams; cur; cur = cur->next) {
+    GstRMDemuxStream *stream = cur->data;
+
+    GST_DEBUG_OBJECT (rmdemux, "Pushing %s event on pad %s",
+        GST_EVENT_TYPE_NAME (event), GST_PAD_NAME (stream->pad));
+
+    switch (GST_EVENT_TYPE (event)) {
+      case GST_EVENT_FLUSH_STOP:
+        stream->last_ts = -1;
+        stream->next_ts = -1;
+        stream->last_seq = -1;
+        stream->next_seq = -1;
+        break;
+      default:
+        break;
+    }
+    gst_event_ref (event);
+    gst_pad_push_event (stream->pad, event);
+  }
+  gst_event_unref (event);
+}
+
+static void
+gst_rmdemux_add_stream (GstRMDemux * rmdemux, GstRMDemuxStream * stream)
+{
+  GstCaps *stream_caps = NULL;
+  const gchar *codec_tag = NULL;
+  gchar *codec_name = NULL;
+  gchar *stream_id;
+  int version = 0;
+
+  if (stream->subtype == GST_RMDEMUX_STREAM_VIDEO) {
+    char *name = g_strdup_printf ("video_%u", rmdemux->n_video_streams);
+
+    stream->pad =
+        gst_pad_new_from_static_template (&gst_rmdemux_videosrc_template, name);
+    g_free (name);
+
+    codec_tag = GST_TAG_VIDEO_CODEC;
+
+    switch (stream->fourcc) {
+      case GST_RM_VDO_RV10:
+        version = 1;
+        break;
+      case GST_RM_VDO_RV20:
+        version = 2;
+        break;
+      case GST_RM_VDO_RV30:
+        version = 3;
+        break;
+      case GST_RM_VDO_RV40:
+        version = 4;
+        break;
+      default:
+        stream_caps = gst_caps_new_simple ("video/x-unknown-fourcc",
+            "fourcc", G_TYPE_UINT, stream->fourcc, NULL);
+        GST_WARNING_OBJECT (rmdemux,
+            "Unknown video FOURCC code \"%" GST_FOURCC_FORMAT "\" (%08x)",
+            GST_FOURCC_ARGS (stream->fourcc), stream->fourcc);
+    }
+
+    if (version) {
+      stream_caps =
+          gst_caps_new_simple ("video/x-pn-realvideo", "rmversion", G_TYPE_INT,
+          (int) version,
+          "format", G_TYPE_INT,
+          (int) stream->format,
+          "subformat", G_TYPE_INT, (int) stream->subformat, NULL);
+    }
+
+    if (stream_caps) {
+      gst_caps_set_simple (stream_caps,
+          "width", G_TYPE_INT, stream->width,
+          "height", G_TYPE_INT, stream->height,
+          "framerate", GST_TYPE_FRACTION, stream->framerate_numerator,
+          stream->framerate_denominator, NULL);
+    }
+    rmdemux->n_video_streams++;
+
+  } else if (stream->subtype == GST_RMDEMUX_STREAM_AUDIO) {
+    char *name = g_strdup_printf ("audio_%u", rmdemux->n_audio_streams);
+
+    stream->pad =
+        gst_pad_new_from_static_template (&gst_rmdemux_audiosrc_template, name);
+    GST_LOG_OBJECT (rmdemux, "Created audio pad \"%s\"", name);
+    g_free (name);
+
+    codec_tag = GST_TAG_AUDIO_CODEC;
+
+    switch (stream->fourcc) {
+        /* Older RealAudio Codecs */
+      case GST_RM_AUD_14_4:
+        version = 1;
+        break;
+
+      case GST_RM_AUD_28_8:
+        version = 2;
+        break;
+
+        /* DolbyNet (Dolby AC3, low bitrate) */
+      case GST_RM_AUD_DNET:
+        stream_caps =
+            gst_caps_new_simple ("audio/x-ac3", "rate", G_TYPE_INT,
+            (int) stream->rate, NULL);
+        stream->needs_descrambling = TRUE;
+        stream->subpackets_needed = 1;
+        stream->subpackets = NULL;
+        break;
+
+        /* MPEG-4 based */
+      case GST_RM_AUD_RAAC:
+      case GST_RM_AUD_RACP:
+        stream_caps =
+            gst_caps_new_simple ("audio/mpeg", "mpegversion", G_TYPE_INT,
+            (int) 4, "framed", G_TYPE_BOOLEAN, TRUE, NULL);
+        if (stream->extra_data_size > 0) {
+          /* strip off an unknown byte in the extra data */
+          stream->extra_data_size--;
+          stream->extra_data++;
+        }
+        stream->needs_descrambling = TRUE;
+        stream->subpackets_needed = 1;
+        stream->subpackets = NULL;
+        break;
+
+        /* Sony ATRAC3 */
+      case GST_RM_AUD_ATRC:
+        stream_caps = gst_caps_new_empty_simple ("audio/x-vnd.sony.atrac3");
+        stream->needs_descrambling = TRUE;
+        stream->subpackets_needed = stream->height;
+        stream->subpackets = NULL;
+        break;
+
+        /* RealAudio G2 audio */
+      case GST_RM_AUD_COOK:
+        version = 8;
+        stream->needs_descrambling = TRUE;
+        stream->subpackets_needed = stream->height;
+        stream->subpackets = NULL;
+        break;
+
+        /* RALF is lossless */
+      case GST_RM_AUD_RALF:
+        GST_DEBUG_OBJECT (rmdemux, "RALF");
+        stream_caps = gst_caps_new_empty_simple ("audio/x-ralf-mpeg4-generic");
+        break;
+
+      case GST_RM_AUD_SIPR:
+
+        if (stream->flavor > 3) {
+          GST_WARNING_OBJECT (rmdemux, "bad SIPR flavor %d, freeing it",
+              stream->flavor);
+          g_object_unref (stream->pad);
+          gst_rmdemux_free_stream (rmdemux, stream);
+          goto beach;
+        }
+
+        GST_DEBUG_OBJECT (rmdemux, "SIPR");
+        stream_caps = gst_caps_new_empty_simple ("audio/x-sipro");
+        stream->needs_descrambling = TRUE;
+        stream->subpackets_needed = stream->height;
+        stream->subpackets = NULL;
+        stream->leaf_size = sipr_subpk_size[stream->flavor];
+
+        break;
+
+      default:
+        stream_caps = gst_caps_new_simple ("video/x-unknown-fourcc",
+            "fourcc", G_TYPE_UINT, stream->fourcc, NULL);
+        GST_WARNING_OBJECT (rmdemux,
+            "Unknown audio FOURCC code \"%" GST_FOURCC_FORMAT "\" (%08x)",
+            GST_FOURCC_ARGS (stream->fourcc), stream->fourcc);
+        break;
+    }
+
+    if (version) {
+      stream_caps =
+          gst_caps_new_simple ("audio/x-pn-realaudio", "raversion", G_TYPE_INT,
+          (int) version, NULL);
+    }
+
+    if (stream_caps) {
+      gst_caps_set_simple (stream_caps,
+          "flavor", G_TYPE_INT, (int) stream->flavor,
+          "rate", G_TYPE_INT, (int) stream->rate,
+          "channels", G_TYPE_INT, (int) stream->n_channels,
+          "width", G_TYPE_INT, (int) stream->sample_width,
+          "leaf_size", G_TYPE_INT, (int) stream->leaf_size,
+          "packet_size", G_TYPE_INT, (int) stream->packet_size,
+          "bitrate", G_TYPE_INT, (int) stream->bitrate,
+          "height", G_TYPE_INT, (int) stream->height, NULL);
+    }
+    rmdemux->n_audio_streams++;
+  } else {
+    GST_WARNING_OBJECT (rmdemux, "not adding stream of type %d, freeing it",
+        stream->subtype);
+    gst_rmdemux_free_stream (rmdemux, stream);
+    goto beach;
+  }
+
+  GST_PAD_ELEMENT_PRIVATE (stream->pad) = stream;
+  rmdemux->streams = g_slist_append (rmdemux->streams, stream);
+  GST_LOG_OBJECT (rmdemux, "n_streams is now %d",
+      g_slist_length (rmdemux->streams));
+
+  GST_LOG ("stream->pad = %p, stream_caps = %" GST_PTR_FORMAT, stream->pad,
+      stream_caps);
+
+  if (stream->pad && stream_caps) {
+    GstEvent *event;
+
+    GST_LOG_OBJECT (rmdemux, "%d bytes of extra data for stream %s",
+        stream->extra_data_size, GST_PAD_NAME (stream->pad));
+
+    /* add codec_data if there is any */
+    if (stream->extra_data_size > 0) {
+      GstBuffer *buffer;
+
+      buffer = gst_buffer_new_and_alloc (stream->extra_data_size);
+      gst_buffer_fill (buffer, 0, stream->extra_data, stream->extra_data_size);
+
+      gst_caps_set_simple (stream_caps, "codec_data", GST_TYPE_BUFFER,
+          buffer, NULL);
+
+      gst_buffer_unref (buffer);
+    }
+
+    gst_pad_use_fixed_caps (stream->pad);
+
+    gst_pad_set_event_function (stream->pad,
+        GST_DEBUG_FUNCPTR (gst_rmdemux_src_event));
+    gst_pad_set_query_function (stream->pad,
+        GST_DEBUG_FUNCPTR (gst_rmdemux_src_query));
+
+    GST_DEBUG_OBJECT (rmdemux, "adding pad %s with caps %" GST_PTR_FORMAT
+        ", stream_id=%d", GST_PAD_NAME (stream->pad), stream_caps, stream->id);
+    gst_pad_set_active (stream->pad, TRUE);
+
+    stream_id =
+        gst_pad_create_stream_id_printf (stream->pad,
+        GST_ELEMENT_CAST (rmdemux), "%03u", stream->id);
+
+    event =
+        gst_pad_get_sticky_event (rmdemux->sinkpad, GST_EVENT_STREAM_START, 0);
+    if (event) {
+      if (gst_event_parse_group_id (event, &rmdemux->group_id))
+        rmdemux->have_group_id = TRUE;
+      else
+        rmdemux->have_group_id = FALSE;
+      gst_event_unref (event);
+    } else if (!rmdemux->have_group_id) {
+      rmdemux->have_group_id = TRUE;
+      rmdemux->group_id = gst_util_group_id_next ();
+    }
+
+    event = gst_event_new_stream_start (stream_id);
+    if (rmdemux->have_group_id)
+      gst_event_set_group_id (event, rmdemux->group_id);
+
+    gst_pad_push_event (stream->pad, event);
+    g_free (stream_id);
+
+    gst_pad_set_caps (stream->pad, stream_caps);
+
+    codec_name = gst_pb_utils_get_codec_description (stream_caps);
+
+    /* save for later, we must send the tags after the newsegment event */
+    if (codec_tag != NULL && codec_name != NULL) {
+      if (stream->pending_tags == NULL)
+        stream->pending_tags = gst_tag_list_new_empty ();
+      gst_tag_list_add (stream->pending_tags, GST_TAG_MERGE_KEEP,
+          codec_tag, codec_name, NULL);
+      g_free (codec_name);
+    }
+    gst_element_add_pad (GST_ELEMENT_CAST (rmdemux), stream->pad);
+    gst_flow_combiner_add_pad (rmdemux->flowcombiner, stream->pad);
+  }
+
+beach:
+
+  if (stream_caps)
+    gst_caps_unref (stream_caps);
+}
+
+static int
+re_skip_pascal_string (const guint8 * ptr)
+{
+  int length;
+
+  length = ptr[0];
+
+  return length + 1;
+}
+
+static void
+gst_rmdemux_parse__rmf (GstRMDemux * rmdemux, const guint8 * data, int length)
+{
+  GST_LOG_OBJECT (rmdemux, "file_version: %d", RMDEMUX_GUINT32_GET (data));
+  GST_LOG_OBJECT (rmdemux, "num_headers: %d", RMDEMUX_GUINT32_GET (data + 4));
+}
+
+static void
+gst_rmdemux_parse_prop (GstRMDemux * rmdemux, const guint8 * data, int length)
+{
+  GST_LOG_OBJECT (rmdemux, "max bitrate: %d", RMDEMUX_GUINT32_GET (data));
+  GST_LOG_OBJECT (rmdemux, "avg bitrate: %d", RMDEMUX_GUINT32_GET (data + 4));
+  GST_LOG_OBJECT (rmdemux, "max packet size: %d",
+      RMDEMUX_GUINT32_GET (data + 8));
+  rmdemux->avg_packet_size = RMDEMUX_GUINT32_GET (data + 12);
+  GST_LOG_OBJECT (rmdemux, "avg packet size: %d", rmdemux->avg_packet_size);
+  rmdemux->num_packets = RMDEMUX_GUINT32_GET (data + 16);
+  GST_LOG_OBJECT (rmdemux, "number of packets: %d", rmdemux->num_packets);
+
+  GST_LOG_OBJECT (rmdemux, "duration: %d", RMDEMUX_GUINT32_GET (data + 20));
+  rmdemux->duration = RMDEMUX_GUINT32_GET (data + 20) * GST_MSECOND;
+
+  GST_LOG_OBJECT (rmdemux, "preroll: %d", RMDEMUX_GUINT32_GET (data + 24));
+  rmdemux->index_offset = RMDEMUX_GUINT32_GET (data + 28);
+  GST_LOG_OBJECT (rmdemux, "offset of INDX section: 0x%08x",
+      rmdemux->index_offset);
+  rmdemux->data_offset = RMDEMUX_GUINT32_GET (data + 32);
+  GST_LOG_OBJECT (rmdemux, "offset of DATA section: 0x%08x",
+      rmdemux->data_offset);
+  GST_LOG_OBJECT (rmdemux, "n streams: %d", RMDEMUX_GUINT16_GET (data + 36));
+  GST_LOG_OBJECT (rmdemux, "flags: 0x%04x", RMDEMUX_GUINT16_GET (data + 38));
+}
+
+static void
+gst_rmdemux_parse_mdpr (GstRMDemux * rmdemux, const guint8 * data, int length)
+{
+  GstRMDemuxStream *stream;
+  char *stream1_type_string;
+  char *stream2_type_string;
+  guint str_len = 0;
+  int stream_type;
+  int offset;
+  guint32 max_bitrate;
+  guint32 avg_bitrate;
+
+  stream = g_new0 (GstRMDemuxStream, 1);
+
+  stream->id = RMDEMUX_GUINT16_GET (data);
+  stream->index = NULL;
+  stream->seek_offset = 0;
+  stream->last_ts = -1;
+  stream->next_ts = -1;
+  stream->discont = TRUE;
+  stream->adapter = gst_adapter_new ();
+  GST_LOG_OBJECT (rmdemux, "stream_number=%d", stream->id);
+
+  /* parse the bitrates */
+  max_bitrate = RMDEMUX_GUINT32_GET (data + 2);
+  avg_bitrate = RMDEMUX_GUINT32_GET (data + 6);
+  stream->bitrate = avg_bitrate;
+  GST_LOG_OBJECT (rmdemux, "Stream max bitrate=%u", max_bitrate);
+  GST_LOG_OBJECT (rmdemux, "Stream avg bitrate=%u", avg_bitrate);
+  if (max_bitrate != 0) {
+    if (stream->pending_tags == NULL)
+      stream->pending_tags = gst_tag_list_new_empty ();
+    gst_tag_list_add (stream->pending_tags, GST_TAG_MERGE_REPLACE,
+        GST_TAG_MAXIMUM_BITRATE, max_bitrate, NULL);
+  }
+  if (avg_bitrate != 0) {
+    if (stream->pending_tags == NULL)
+      stream->pending_tags = gst_tag_list_new_empty ();
+    gst_tag_list_add (stream->pending_tags, GST_TAG_MERGE_REPLACE,
+        GST_TAG_BITRATE, avg_bitrate, NULL);
+  }
+
+  offset = 30;
+  stream1_type_string = gst_rm_utils_read_string8 (data + offset,
+      length - offset, &str_len);
+  offset += str_len;
+  stream2_type_string = gst_rm_utils_read_string8 (data + offset,
+      length - offset, &str_len);
+  offset += str_len;
+
+  /* stream1_type_string for audio and video stream is a "put_whatever_you_want" field :
+   * observed values :
+   * - "[The ]Video/Audio Stream" (File produced by an official Real encoder)
+   * - "RealVideoPremierePlugIn-VIDEO/AUDIO" (File produced by Abobe Premiere)
+   *
+   * so, we should not rely on it to know which stream type it is
+   */
+
+  GST_LOG_OBJECT (rmdemux, "stream type: %s", stream1_type_string);
+  GST_LOG_OBJECT (rmdemux, "MIME type=%s", stream2_type_string);
+
+  if (strcmp (stream2_type_string, "video/x-pn-realvideo") == 0) {
+    stream_type = GST_RMDEMUX_STREAM_VIDEO;
+  } else if (strcmp (stream2_type_string,
+          "video/x-pn-multirate-realvideo") == 0) {
+    stream_type = GST_RMDEMUX_STREAM_VIDEO;
+  } else if (strcmp (stream2_type_string, "audio/x-pn-realaudio") == 0) {
+    stream_type = GST_RMDEMUX_STREAM_AUDIO;
+  } else if (strcmp (stream2_type_string,
+          "audio/x-pn-multirate-realaudio") == 0) {
+    stream_type = GST_RMDEMUX_STREAM_AUDIO;
+  } else if (strcmp (stream2_type_string,
+          "audio/x-pn-multirate-realaudio-live") == 0) {
+    stream_type = GST_RMDEMUX_STREAM_AUDIO;
+  } else if (strcmp (stream2_type_string, "audio/x-ralf-mpeg4-generic") == 0) {
+    /* Another audio type found in the real testsuite */
+    stream_type = GST_RMDEMUX_STREAM_AUDIO;
+  } else if (strcmp (stream1_type_string, "") == 0 &&
+      strcmp (stream2_type_string, "logical-fileinfo") == 0) {
+    stream_type = GST_RMDEMUX_STREAM_FILEINFO;
+  } else {
+    stream_type = GST_RMDEMUX_STREAM_UNKNOWN;
+    GST_WARNING_OBJECT (rmdemux, "unknown stream type \"%s\",\"%s\"",
+        stream1_type_string, stream2_type_string);
+  }
+  g_free (stream1_type_string);
+  g_free (stream2_type_string);
+
+  offset += 4;
+
+  stream->subtype = stream_type;
+  switch (stream_type) {
+
+    case GST_RMDEMUX_STREAM_VIDEO:
+      /* RV10/RV20/RV30/RV40 => video/x-pn-realvideo, version=1,2,3,4 */
+      stream->fourcc = RMDEMUX_FOURCC_GET (data + offset + 8);
+      stream->width = RMDEMUX_GUINT16_GET (data + offset + 12);
+      stream->height = RMDEMUX_GUINT16_GET (data + offset + 14);
+      stream->rate = RMDEMUX_GUINT16_GET (data + offset + 16);
+      stream->subformat = RMDEMUX_GUINT32_GET (data + offset + 26);
+      stream->format = RMDEMUX_GUINT32_GET (data + offset + 30);
+      stream->extra_data_size = length - (offset + 26);
+      stream->extra_data = (guint8 *) data + offset + 26;
+      /* Natural way to represent framerates here requires unsigned 32 bit
+       * numerator, which we don't have. For the nasty case, approximate...
+       */
+      {
+        guint32 numerator = RMDEMUX_GUINT16_GET (data + offset + 22) * 65536 +
+            RMDEMUX_GUINT16_GET (data + offset + 24);
+        if (numerator > G_MAXINT) {
+          stream->framerate_numerator = (gint) (numerator >> 1);
+          stream->framerate_denominator = 32768;
+        } else {
+          stream->framerate_numerator = (gint) numerator;
+          stream->framerate_denominator = 65536;
+        }
+      }
+
+      GST_DEBUG_OBJECT (rmdemux,
+          "Video stream with fourcc=%" GST_FOURCC_FORMAT
+          " width=%d height=%d rate=%d framerate=%d/%d subformat=%x format=%x extra_data_size=%d",
+          GST_FOURCC_ARGS (stream->fourcc), stream->width, stream->height,
+          stream->rate, stream->framerate_numerator,
+          stream->framerate_denominator, stream->subformat, stream->format,
+          stream->extra_data_size);
+      break;
+    case GST_RMDEMUX_STREAM_AUDIO:{
+      stream->version = RMDEMUX_GUINT16_GET (data + offset + 4);
+      GST_INFO ("stream version = %u", stream->version);
+      switch (stream->version) {
+        case 3:
+          stream->fourcc = GST_RM_AUD_14_4;
+          stream->packet_size = 20;
+          stream->rate = 8000;
+          stream->n_channels = 1;
+          stream->sample_width = 16;
+          stream->flavor = 1;
+          stream->leaf_size = 0;
+          stream->height = 0;
+          break;
+        case 4:
+          stream->flavor = RMDEMUX_GUINT16_GET (data + offset + 22);
+          stream->packet_size = RMDEMUX_GUINT32_GET (data + offset + 24);
+          /* stream->frame_size = RMDEMUX_GUINT32_GET (data + offset + 42); */
+          stream->leaf_size = RMDEMUX_GUINT16_GET (data + offset + 44);
+          stream->height = RMDEMUX_GUINT16_GET (data + offset + 40);
+          stream->rate = RMDEMUX_GUINT16_GET (data + offset + 48);
+          stream->sample_width = RMDEMUX_GUINT16_GET (data + offset + 52);
+          stream->n_channels = RMDEMUX_GUINT16_GET (data + offset + 54);
+          stream->fourcc = RMDEMUX_FOURCC_GET (data + offset + 62);
+          stream->extra_data_size = RMDEMUX_GUINT32_GET (data + offset + 69);
+          GST_DEBUG_OBJECT (rmdemux, "%u bytes of extra codec data",
+              stream->extra_data_size);
+          if (length - (offset + 73) >= stream->extra_data_size) {
+            stream->extra_data = (guint8 *) data + offset + 73;
+          } else {
+            GST_WARNING_OBJECT (rmdemux, "codec data runs beyond MDPR chunk");
+            stream->extra_data_size = 0;
+          }
+          break;
+        case 5:
+          stream->flavor = RMDEMUX_GUINT16_GET (data + offset + 22);
+          stream->packet_size = RMDEMUX_GUINT32_GET (data + offset + 24);
+          /* stream->frame_size = RMDEMUX_GUINT32_GET (data + offset + 42); */
+          stream->leaf_size = RMDEMUX_GUINT16_GET (data + offset + 44);
+          stream->height = RMDEMUX_GUINT16_GET (data + offset + 40);
+          stream->rate = RMDEMUX_GUINT16_GET (data + offset + 54);
+          stream->sample_width = RMDEMUX_GUINT16_GET (data + offset + 58);
+          stream->n_channels = RMDEMUX_GUINT16_GET (data + offset + 60);
+          stream->fourcc = RMDEMUX_FOURCC_GET (data + offset + 66);
+          stream->extra_data_size = RMDEMUX_GUINT32_GET (data + offset + 74);
+          GST_DEBUG_OBJECT (rmdemux, "%u bytes of extra codec data",
+              stream->extra_data_size);
+          if (length - (offset + 78) >= stream->extra_data_size) {
+            stream->extra_data = (guint8 *) data + offset + 78;
+          } else {
+            GST_WARNING_OBJECT (rmdemux, "codec data runs beyond MDPR chunk");
+            stream->extra_data_size = 0;
+          }
+          break;
+        default:{
+          GST_WARNING_OBJECT (rmdemux, "Unhandled audio stream version %d",
+              stream->version);
+          break;
+        }
+      }
+      /*  14_4, 28_8, cook, dnet, sipr, raac, racp, ralf, atrc */
+      GST_DEBUG_OBJECT (rmdemux,
+          "Audio stream with rate=%d sample_width=%d n_channels=%d",
+          stream->rate, stream->sample_width, stream->n_channels);
+
+      break;
+    }
+    case GST_RMDEMUX_STREAM_FILEINFO:
+    {
+      int element_nb;
+
+      /* Length of this section */
+      GST_DEBUG_OBJECT (rmdemux, "length2: 0x%08x",
+          RMDEMUX_GUINT32_GET (data + offset));
+      offset += 4;
+
+      /* Unknown : 00 00 00 00 */
+      offset += 4;
+
+      /* Number of variables that would follow (loop iterations) */
+      element_nb = RMDEMUX_GUINT32_GET (data + offset);
+      offset += 4;
+
+      while (element_nb) {
+        /* Category Id : 00 00 00 XX 00 00 */
+        offset += 6;
+
+        /* Variable Name */
+        offset += re_skip_pascal_string (data + offset);
+
+        /* Variable Value Type */
+        /*   00 00 00 00 00 => integer/boolean, preceded by length */
+        /*   00 00 00 02 00 => pascal string, preceded by length, no trailing \0 */
+        offset += 5;
+
+        /* Variable Value */
+        offset += re_skip_pascal_string (data + offset);
+
+        element_nb--;
+      }
+    }
+      break;
+    case GST_RMDEMUX_STREAM_UNKNOWN:
+    default:
+      break;
+  }
+
+  gst_rmdemux_add_stream (rmdemux, stream);
+}
+
+static guint
+gst_rmdemux_parse_indx (GstRMDemux * rmdemux, const guint8 * data, int length)
+{
+  int n;
+  int id;
+
+  n = RMDEMUX_GUINT32_GET (data);
+  id = RMDEMUX_GUINT16_GET (data + 4);
+  rmdemux->index_offset = RMDEMUX_GUINT32_GET (data + 6);
+
+  GST_DEBUG_OBJECT (rmdemux, "Number of indices=%d Stream ID=%d length=%d", n,
+      id, length);
+
+  /* Point to the next index_stream */
+  rmdemux->index_stream = gst_rmdemux_get_stream_by_id (rmdemux, id);
+
+  /* Return the length of the index */
+  return 14 * n;
+}
+
+static void
+gst_rmdemux_parse_indx_data (GstRMDemux * rmdemux, const guint8 * data,
+    int length)
+{
+  int i;
+  int n;
+  GstRMDemuxIndex *index;
+
+  /* The number of index records */
+  n = length / 14;
+
+  if (rmdemux->index_stream == NULL)
+    return;
+
+  /* don't parse the index a second time when operating pull-based and
+   * reaching the end of the file */
+  if (rmdemux->index_stream->index_length > 0) {
+    GST_DEBUG_OBJECT (rmdemux, "Already have an index for this stream");
+    return;
+  }
+
+  index = g_malloc (sizeof (GstRMDemuxIndex) * n);
+  rmdemux->index_stream->index = index;
+  rmdemux->index_stream->index_length = n;
+
+  for (i = 0; i < n; i++) {
+    index[i].timestamp = RMDEMUX_GUINT32_GET (data + 2) * GST_MSECOND;
+    index[i].offset = RMDEMUX_GUINT32_GET (data + 6);
+
+    GST_DEBUG_OBJECT (rmdemux, "Index found for timestamp=%f (at offset=%x)",
+        gst_guint64_to_gdouble (index[i].timestamp) / GST_SECOND,
+        index[i].offset);
+    data += 14;
+  }
+}
+
+static void
+gst_rmdemux_parse_data (GstRMDemux * rmdemux, const guint8 * data, int length)
+{
+  rmdemux->n_chunks = RMDEMUX_GUINT32_GET (data);
+  rmdemux->data_offset = RMDEMUX_GUINT32_GET (data + 4);
+  rmdemux->chunk_index = 0;
+  GST_DEBUG_OBJECT (rmdemux, "Data chunk found with %d packets "
+      "(next data at 0x%08x)", rmdemux->n_chunks, rmdemux->data_offset);
+}
+
+static void
+gst_rmdemux_parse_cont (GstRMDemux * rmdemux, const guint8 * data, int length)
+{
+  GstTagList *tags;
+
+  tags = gst_rm_utils_read_tags (data, length, gst_rm_utils_read_string16);
+
+  if (tags) {
+    GstTagList *old_tags = rmdemux->pending_tags;
+
+    GST_LOG_OBJECT (rmdemux, "tags: %" GST_PTR_FORMAT, tags);
+
+    rmdemux->pending_tags =
+        gst_tag_list_merge (old_tags, tags, GST_TAG_MERGE_APPEND);
+
+    gst_tag_list_unref (tags);
+    if (old_tags)
+      gst_tag_list_unref (old_tags);
+
+    gst_tag_list_set_scope (rmdemux->pending_tags, GST_TAG_SCOPE_GLOBAL);
+  }
+}
+
+static void
+gst_rmdemux_stream_clear_cached_subpackets (GstRMDemux * rmdemux,
+    GstRMDemuxStream * stream)
+{
+  if (stream->subpackets == NULL || stream->subpackets->len == 0)
+    return;
+
+  GST_DEBUG_OBJECT (rmdemux, "discarding %u previously collected subpackets",
+      stream->subpackets->len);
+  g_ptr_array_foreach (stream->subpackets, (GFunc) gst_mini_object_unref, NULL);
+  g_ptr_array_set_size (stream->subpackets, 0);
+}
+
+static GstFlowReturn
+gst_rmdemux_descramble_audio (GstRMDemux * rmdemux, GstRMDemuxStream * stream)
+{
+  GstFlowReturn ret = GST_FLOW_ERROR;
+  GstBuffer *outbuf;
+  GstMapInfo outmap;
+  guint packet_size = stream->packet_size;
+  guint height = stream->subpackets->len;
+  guint leaf_size = stream->leaf_size;
+  guint p, x;
+
+  g_assert (stream->height == height);
+
+  GST_LOG ("packet_size = %u, leaf_size = %u, height= %u", packet_size,
+      leaf_size, height);
+
+  outbuf = gst_buffer_new_and_alloc (height * packet_size);
+  gst_buffer_map (outbuf, &outmap, GST_MAP_WRITE);
+
+  for (p = 0; p < height; ++p) {
+    GstBuffer *b = g_ptr_array_index (stream->subpackets, p);
+    GstMapInfo map;
+
+    gst_buffer_map (b, &map, GST_MAP_READ);
+
+    if (p == 0) {
+      GST_BUFFER_PTS (outbuf) = GST_BUFFER_PTS (b);
+      GST_BUFFER_DTS (outbuf) = GST_BUFFER_DTS (b);
+    }
+
+    for (x = 0; x < packet_size / leaf_size; ++x) {
+      guint idx;
+
+      idx = height * x + ((height + 1) / 2) * (p % 2) + (p / 2);
+
+      /* GST_LOG ("%3u => %3u", (height * p) + x, idx); */
+      memcpy (outmap.data + leaf_size * idx, map.data + leaf_size * x,
+          leaf_size);
+    }
+    gst_buffer_unmap (b, &map);
+  }
+  gst_buffer_unmap (outbuf, &outmap);
+
+  /* some decoders, such as realaudiodec, need to be fed in packet units */
+  for (p = 0; p < height; ++p) {
+    GstBuffer *subbuf;
+
+    subbuf =
+        gst_buffer_copy_region (outbuf, GST_BUFFER_COPY_ALL, p * packet_size,
+        packet_size);
+
+    GST_LOG_OBJECT (rmdemux, "pushing buffer dts %" GST_TIME_FORMAT ", pts %"
+        GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_DTS (subbuf)),
+        GST_TIME_ARGS (GST_BUFFER_PTS (subbuf)));
+
+    if (stream->discont) {
+      GST_BUFFER_FLAG_SET (subbuf, GST_BUFFER_FLAG_DISCONT);
+      stream->discont = FALSE;
+    }
+
+    ret = gst_pad_push (stream->pad, subbuf);
+    if (ret != GST_FLOW_OK)
+      break;
+  }
+
+  gst_buffer_unref (outbuf);
+
+  gst_rmdemux_stream_clear_cached_subpackets (rmdemux, stream);
+
+  return ret;
+}
+
+static GstFlowReturn
+gst_rmdemux_descramble_dnet_audio (GstRMDemux * rmdemux,
+    GstRMDemuxStream * stream)
+{
+  GstBuffer *buf;
+
+  buf = g_ptr_array_index (stream->subpackets, 0);
+  g_ptr_array_index (stream->subpackets, 0) = NULL;
+  g_ptr_array_set_size (stream->subpackets, 0);
+
+  buf = gst_rm_utils_descramble_dnet_buffer (buf);
+
+  if (stream->discont) {
+    GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
+    stream->discont = FALSE;
+  }
+  return gst_pad_push (stream->pad, buf);
+}
+
+static GstFlowReturn
+gst_rmdemux_descramble_mp4a_audio (GstRMDemux * rmdemux,
+    GstRMDemuxStream * stream)
+{
+  GstFlowReturn res;
+  GstBuffer *buf, *outbuf;
+  guint frames, index, i;
+  GstMapInfo map;
+  GstClockTime timestamp;
+
+  res = GST_FLOW_OK;
+
+  buf = g_ptr_array_index (stream->subpackets, 0);
+  g_ptr_array_index (stream->subpackets, 0) = NULL;
+  g_ptr_array_set_size (stream->subpackets, 0);
+
+  gst_buffer_map (buf, &map, GST_MAP_READ);
+  timestamp = GST_BUFFER_PTS (buf);
+
+  frames = (map.data[1] & 0xf0) >> 4;
+  index = 2 * frames + 2;
+
+  for (i = 0; i < frames; i++) {
+    guint len = (map.data[i * 2 + 2] << 8) | map.data[i * 2 + 3];
+
+    outbuf = gst_buffer_copy_region (buf, GST_BUFFER_COPY_ALL, index, len);
+    if (i == 0) {
+      GST_BUFFER_PTS (outbuf) = timestamp;
+      GST_BUFFER_DTS (outbuf) = timestamp;
+    }
+
+    index += len;
+
+    if (stream->discont) {
+      GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
+      stream->discont = FALSE;
+    }
+    res = gst_pad_push (stream->pad, outbuf);
+    if (res != GST_FLOW_OK)
+      break;
+  }
+  gst_buffer_unmap (buf, &map);
+  gst_buffer_unref (buf);
+  return res;
+}
+
+static GstFlowReturn
+gst_rmdemux_descramble_sipr_audio (GstRMDemux * rmdemux,
+    GstRMDemuxStream * stream)
+{
+  GstFlowReturn ret;
+  GstBuffer *outbuf;
+  GstMapInfo outmap;
+  guint packet_size = stream->packet_size;
+  guint height = stream->subpackets->len;
+  guint p;
+
+  g_assert (stream->height == height);
+
+  GST_LOG ("packet_size = %u, leaf_size = %u, height= %u", packet_size,
+      stream->leaf_size, height);
+
+  outbuf = gst_buffer_new_and_alloc (height * packet_size);
+  gst_buffer_map (outbuf, &outmap, GST_MAP_WRITE);
+
+  for (p = 0; p < height; ++p) {
+    GstBuffer *b = g_ptr_array_index (stream->subpackets, p);
+
+    if (p == 0) {
+      GST_BUFFER_DTS (outbuf) = GST_BUFFER_DTS (b);
+      GST_BUFFER_PTS (outbuf) = GST_BUFFER_PTS (b);
+    }
+
+    gst_buffer_extract (b, 0, outmap.data + packet_size * p, packet_size);
+  }
+  gst_buffer_unmap (outbuf, &outmap);
+
+  GST_LOG_OBJECT (rmdemux, "pushing buffer dts %" GST_TIME_FORMAT ", pts %"
+      GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_DTS (outbuf)),
+      GST_TIME_ARGS (GST_BUFFER_PTS (outbuf)));
+
+  if (stream->discont) {
+    GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
+    stream->discont = FALSE;
+  }
+
+  outbuf = gst_rm_utils_descramble_sipr_buffer (outbuf);
+
+  ret = gst_pad_push (stream->pad, outbuf);
+
+  gst_rmdemux_stream_clear_cached_subpackets (rmdemux, stream);
+
+  return ret;
+}
+
+static GstFlowReturn
+gst_rmdemux_handle_scrambled_packet (GstRMDemux * rmdemux,
+    GstRMDemuxStream * stream, GstBuffer * buf, gboolean keyframe)
+{
+  GstFlowReturn ret;
+
+  if (stream->subpackets == NULL)
+    stream->subpackets = g_ptr_array_sized_new (stream->subpackets_needed);
+
+  GST_LOG ("Got subpacket %u/%u, len=%" G_GSIZE_FORMAT ", key=%d",
+      stream->subpackets->len + 1, stream->subpackets_needed,
+      gst_buffer_get_size (buf), keyframe);
+
+  if (keyframe && stream->subpackets->len > 0) {
+    gst_rmdemux_stream_clear_cached_subpackets (rmdemux, stream);
+  }
+
+  g_ptr_array_add (stream->subpackets, buf);
+
+  if (stream->subpackets->len < stream->subpackets_needed)
+    return GST_FLOW_OK;
+
+  g_assert (stream->subpackets->len >= 1);
+
+  switch (stream->fourcc) {
+    case GST_RM_AUD_DNET:
+      ret = gst_rmdemux_descramble_dnet_audio (rmdemux, stream);
+      break;
+    case GST_RM_AUD_COOK:
+    case GST_RM_AUD_ATRC:
+      ret = gst_rmdemux_descramble_audio (rmdemux, stream);
+      break;
+    case GST_RM_AUD_RAAC:
+    case GST_RM_AUD_RACP:
+      ret = gst_rmdemux_descramble_mp4a_audio (rmdemux, stream);
+      break;
+    case GST_RM_AUD_SIPR:
+      ret = gst_rmdemux_descramble_sipr_audio (rmdemux, stream);
+      break;
+    default:
+      ret = GST_FLOW_ERROR;
+      g_assert_not_reached ();
+  }
+
+  return ret;
+}
+
+#define PARSE_NUMBER(data, size, number, label) \
+G_STMT_START {                                  \
+  if (size < 2)                                 \
+    goto label;                                 \
+  number = GST_READ_UINT16_BE (data);           \
+  if (!(number & 0xc000)) {                     \
+    if (size < 4)                               \
+      goto label;                               \
+    number = GST_READ_UINT32_BE (data);         \
+    data += 4;                                  \
+    size -= 4;                                  \
+  } else {                                      \
+    number &= 0x3fff;                           \
+    data += 2;                                  \
+    size -= 2;                                  \
+  }                                             \
+} G_STMT_END
+
+static GstFlowReturn
+gst_rmdemux_parse_video_packet (GstRMDemux * rmdemux, GstRMDemuxStream * stream,
+    GstBuffer * in, guint offset, guint16 version,
+    GstClockTime timestamp, gboolean key)
+{
+  GstFlowReturn ret;
+  GstMapInfo map;
+  const guint8 *data;
+  gsize size;
+
+  gst_buffer_map (in, &map, GST_MAP_READ);
+
+  if (map.size < offset)
+    goto not_enough_data;
+
+  data = map.data + offset;
+  size = map.size - offset;
+
+  /* if size <= 2, we want this method to return the same GstFlowReturn as it
+   * was previously for that given stream. */
+  ret = GST_PAD_LAST_FLOW_RETURN (stream->pad);
+
+  while (size > 2) {
+    guint8 pkg_header;
+    guint pkg_offset;
+    guint pkg_length;
+    guint pkg_subseq = 0, pkg_seqnum = G_MAXUINT;
+    guint fragment_size;
+    GstBuffer *fragment;
+
+    pkg_header = *data++;
+    size--;
+
+    /* packet header
+     * bit 7: 1=last block in block chain
+     * bit 6: 1=short header (only one block?)
+     */
+    if ((pkg_header & 0xc0) == 0x40) {
+      /* skip unknown byte */
+      data++;
+      size--;
+      pkg_offset = 0;
+      pkg_length = size;
+    } else {
+      if ((pkg_header & 0x40) == 0) {
+        pkg_subseq = (*data++) & 0x7f;
+        size--;
+      } else {
+        pkg_subseq = 0;
+      }
+
+      /* length */
+      PARSE_NUMBER (data, size, pkg_length, not_enough_data);
+
+      /* offset */
+      PARSE_NUMBER (data, size, pkg_offset, not_enough_data);
+
+      /* seqnum */
+      if (size < 1)
+        goto not_enough_data;
+
+      pkg_seqnum = *data++;
+      size--;
+    }
+
+    GST_DEBUG_OBJECT (rmdemux,
+        "seq %d, subseq %d, offset %d, length %d, size %" G_GSIZE_FORMAT
+        ", header %02x", pkg_seqnum, pkg_subseq, pkg_offset, pkg_length, size,
+        pkg_header);
+
+    /* calc size of fragment */
+    if ((pkg_header & 0xc0) == 0x80) {
+      fragment_size = pkg_offset;
+    } else {
+      if ((pkg_header & 0xc0) == 0)
+        fragment_size = size;
+      else
+        fragment_size = pkg_length;
+    }
+    GST_DEBUG_OBJECT (rmdemux, "fragment size %d", fragment_size);
+
+    if (map.size < (data - map.data) + fragment_size)
+      goto not_enough_data;
+
+    /* get the fragment */
+    fragment =
+        gst_buffer_copy_region (in, GST_BUFFER_COPY_ALL, data - map.data,
+        fragment_size);
+
+    if (pkg_subseq == 1) {
+      GST_DEBUG_OBJECT (rmdemux, "start new fragment");
+      gst_adapter_clear (stream->adapter);
+      stream->frag_current = 0;
+      stream->frag_count = 0;
+      stream->frag_length = pkg_length;
+    } else if (pkg_subseq == 0) {
+      GST_DEBUG_OBJECT (rmdemux, "non fragmented packet");
+      stream->frag_current = 0;
+      stream->frag_count = 0;
+      stream->frag_length = fragment_size;
+    }
+
+    /* put fragment in adapter */
+    gst_adapter_push (stream->adapter, fragment);
+    stream->frag_offset[stream->frag_count] = stream->frag_current;
+    stream->frag_current += fragment_size;
+    stream->frag_count++;
+
+    if (stream->frag_count > MAX_FRAGS)
+      goto too_many_fragments;
+
+    GST_DEBUG_OBJECT (rmdemux, "stored fragment in adapter %d/%d",
+        stream->frag_current, stream->frag_length);
+
+    /* flush fragment when complete */
+    if (stream->frag_current >= stream->frag_length) {
+      GstBuffer *out;
+      GstMapInfo outmap;
+      guint8 *outdata;
+      guint header_size;
+      gint i, avail;
+
+      /* calculate header size, which is:
+       * 1 byte for the number of fragments - 1
+       * for each fragment:
+       *   4 bytes 0x00000001 little endian
+       *   4 bytes fragment offset
+       *
+       * This is also the matroska header for realvideo, the decoder needs the
+       * fragment offsets, both in ffmpeg and real .so, so we just give it that
+       * in front of the data.
+       */
+      header_size = 1 + (8 * (stream->frag_count));
+
+      GST_DEBUG_OBJECT (rmdemux,
+          "fragmented completed. count %d, header_size %u", stream->frag_count,
+          header_size);
+
+      avail = gst_adapter_available (stream->adapter);
+
+      out = gst_buffer_new_and_alloc (header_size + avail);
+      gst_buffer_map (out, &outmap, GST_MAP_WRITE);
+      outdata = outmap.data;
+
+      /* create header */
+      *outdata++ = stream->frag_count - 1;
+      for (i = 0; i < stream->frag_count; i++) {
+        GST_WRITE_UINT32_LE (outdata, 0x00000001);
+        outdata += 4;
+        GST_WRITE_UINT32_LE (outdata, stream->frag_offset[i]);
+        outdata += 4;
+      }
+
+      /* copy packet data after the header now */
+      gst_adapter_copy (stream->adapter, outdata, 0, avail);
+      gst_adapter_flush (stream->adapter, avail);
+
+      stream->frag_current = 0;
+      stream->frag_count = 0;
+      stream->frag_length = 0;
+
+      if (timestamp != -1) {
+        if (rmdemux->first_ts != -1 && timestamp > rmdemux->first_ts)
+          timestamp -= rmdemux->first_ts;
+        else
+          timestamp = 0;
+
+        if (rmdemux->base_ts != -1)
+          timestamp += rmdemux->base_ts;
+      }
+      gst_buffer_unmap (out, &outmap);
+
+      /* video has DTS */
+      GST_BUFFER_DTS (out) = timestamp;
+      GST_BUFFER_PTS (out) = GST_CLOCK_TIME_NONE;
+
+      GST_LOG_OBJECT (rmdemux, "pushing timestamp %" GST_TIME_FORMAT,
+          GST_TIME_ARGS (timestamp));
+
+      if (stream->discont) {
+        GST_BUFFER_FLAG_SET (out, GST_BUFFER_FLAG_DISCONT);
+        stream->discont = FALSE;
+      }
+
+      if (!key) {
+        GST_BUFFER_FLAG_SET (out, GST_BUFFER_FLAG_DELTA_UNIT);
+      }
+
+      ret = gst_pad_push (stream->pad, out);
+      ret = gst_flow_combiner_update_flow (rmdemux->flowcombiner, ret);
+      if (ret != GST_FLOW_OK)
+        break;
+
+      timestamp = GST_CLOCK_TIME_NONE;
+    }
+    data += fragment_size;
+    size -= fragment_size;
+  }
+  GST_DEBUG_OBJECT (rmdemux, "%" G_GSIZE_FORMAT " bytes left", size);
+
+done:
+  gst_buffer_unmap (in, &map);
+  gst_buffer_unref (in);
+
+  return ret;
+
+  /* ERRORS */
+not_enough_data:
+  {
+    GST_ELEMENT_WARNING (rmdemux, STREAM, DECODE, ("Skipping bad packet."),
+        (NULL));
+    ret = GST_FLOW_OK;
+    goto done;
+  }
+too_many_fragments:
+  {
+    GST_ELEMENT_ERROR (rmdemux, STREAM, DECODE,
+        ("Got more fragments (%u) than can be handled (%u)",
+            stream->frag_count, MAX_FRAGS), (NULL));
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
+}
+
+static GstFlowReturn
+gst_rmdemux_parse_audio_packet (GstRMDemux * rmdemux, GstRMDemuxStream * stream,
+    GstBuffer * in, guint offset, guint16 version,
+    GstClockTime timestamp, gboolean key)
+{
+  GstFlowReturn ret;
+  GstBuffer *buffer;
+
+  if (gst_buffer_get_size (in) < offset)
+    goto not_enough_data;
+
+  buffer = gst_buffer_copy_region (in, GST_BUFFER_COPY_MEMORY, offset, -1);
+
+  if (rmdemux->first_ts != -1 && timestamp > rmdemux->first_ts)
+    timestamp -= rmdemux->first_ts;
+  else
+    timestamp = 0;
+
+  if (rmdemux->base_ts != -1)
+    timestamp += rmdemux->base_ts;
+
+  GST_BUFFER_PTS (buffer) = timestamp;
+  GST_BUFFER_DTS (buffer) = timestamp;
+
+  if (stream->needs_descrambling) {
+    GST_LOG_OBJECT (rmdemux, "descramble timestamp %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (timestamp));
+    ret = gst_rmdemux_handle_scrambled_packet (rmdemux, stream, buffer, key);
+  } else {
+    GST_LOG_OBJECT (rmdemux,
+        "Pushing buffer of size %" G_GSIZE_FORMAT ", timestamp %"
+        GST_TIME_FORMAT "to pad %s", gst_buffer_get_size (buffer),
+        GST_TIME_ARGS (timestamp), GST_PAD_NAME (stream->pad));
+
+    if (stream->discont) {
+      GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
+      stream->discont = FALSE;
+    }
+    ret = gst_pad_push (stream->pad, buffer);
+  }
+
+done:
+  gst_buffer_unref (in);
+
+  return ret;
+
+  /* ERRORS */
+not_enough_data:
+  {
+    GST_ELEMENT_WARNING (rmdemux, STREAM, DECODE, ("Skipping bad packet."),
+        (NULL));
+    ret = GST_FLOW_OK;
+    goto done;
+  }
+}
+
+static GstFlowReturn
+gst_rmdemux_parse_packet (GstRMDemux * rmdemux, GstBuffer * in, guint16 version)
+{
+  guint16 id;
+  GstRMDemuxStream *stream;
+  gsize size, offset;
+  GstFlowReturn cret, ret;
+  GstClockTime timestamp;
+  gboolean key;
+  GstMapInfo map;
+  guint8 *data;
+  guint8 flags;
+  guint32 ts;
+
+  gst_buffer_map (in, &map, GST_MAP_READ);
+  data = map.data;
+  size = map.size;
+
+  if (size < 4 + 6 + 1 + 2)
+    goto not_enough_data;
+
+  /* stream number */
+  id = RMDEMUX_GUINT16_GET (data);
+
+  stream = gst_rmdemux_get_stream_by_id (rmdemux, id);
+  if (!stream || !stream->pad)
+    goto unknown_stream;
+
+  /* timestamp in Msec */
+  ts = RMDEMUX_GUINT32_GET (data + 2);
+  timestamp = ts * GST_MSECOND;
+
+  rmdemux->segment.position = timestamp;
+
+  GST_LOG_OBJECT (rmdemux, "Parsing a packet for stream=%d, timestamp=%"
+      GST_TIME_FORMAT ", size %" G_GSIZE_FORMAT ", version=%d, ts=%u", id,
+      GST_TIME_ARGS (timestamp), size, version, ts);
+
+  if (rmdemux->first_ts == GST_CLOCK_TIME_NONE) {
+    GST_DEBUG_OBJECT (rmdemux, "First timestamp: %" GST_TIME_FORMAT,
+        GST_TIME_ARGS (timestamp));
+    rmdemux->first_ts = timestamp;
+  }
+
+  /* skip stream_id and timestamp */
+  data += (2 + 4);
+  size -= (2 + 4);
+
+  /* get flags */
+  flags = GST_READ_UINT8 (data + 1);
+
+  data += 2;
+  size -= 2;
+
+  /* version 1 has an extra byte */
+  if (version == 1) {
+    if (size < 1)
+      goto not_enough_data;
+
+    data += 1;
+    size -= 1;
+  }
+  offset = data - map.data;
+  gst_buffer_unmap (in, &map);
+
+  key = (flags & 0x02) != 0;
+  GST_DEBUG_OBJECT (rmdemux, "flags %d, Keyframe %d", flags, key);
+
+  if (rmdemux->need_newsegment) {
+    GstEvent *event;
+
+    event = gst_event_new_segment (&rmdemux->segment);
+
+    GST_DEBUG_OBJECT (rmdemux, "sending NEWSEGMENT event, segment.start= %"
+        GST_TIME_FORMAT, GST_TIME_ARGS (rmdemux->segment.start));
+
+    gst_rmdemux_send_event (rmdemux, event);
+    rmdemux->need_newsegment = FALSE;
+
+    if (rmdemux->pending_tags != NULL) {
+      gst_rmdemux_send_event (rmdemux,
+          gst_event_new_tag (rmdemux->pending_tags));
+      rmdemux->pending_tags = NULL;
+    }
+  }
+
+  if (stream->pending_tags != NULL) {
+    GST_LOG_OBJECT (stream->pad, "tags %" GST_PTR_FORMAT, stream->pending_tags);
+    gst_pad_push_event (stream->pad, gst_event_new_tag (stream->pending_tags));
+    stream->pending_tags = NULL;
+  }
+
+  if ((rmdemux->offset + size) <= stream->seek_offset) {
+    GST_DEBUG_OBJECT (rmdemux,
+        "Stream %d is skipping: seek_offset=%d, offset=%d, size=%"
+        G_GSIZE_FORMAT, stream->id, stream->seek_offset, rmdemux->offset, size);
+    cret = GST_FLOW_OK;
+    gst_buffer_unref (in);
+    goto beach;
+  }
+
+  /* do special headers */
+  if (stream->subtype == GST_RMDEMUX_STREAM_VIDEO) {
+    ret =
+        gst_rmdemux_parse_video_packet (rmdemux, stream, in, offset,
+        version, timestamp, key);
+  } else if (stream->subtype == GST_RMDEMUX_STREAM_AUDIO) {
+    ret =
+        gst_rmdemux_parse_audio_packet (rmdemux, stream, in, offset,
+        version, timestamp, key);
+  } else {
+    gst_buffer_unref (in);
+    ret = GST_FLOW_OK;
+  }
+
+  cret = gst_flow_combiner_update_pad_flow (rmdemux->flowcombiner, stream->pad,
+      ret);
+
+beach:
+  return cret;
+
+  /* ERRORS */
+unknown_stream:
+  {
+    GST_WARNING_OBJECT (rmdemux, "No stream for stream id %d in parsing "
+        "data packet", id);
+    gst_buffer_unmap (in, &map);
+    gst_buffer_unref (in);
+    return GST_FLOW_OK;
+  }
+
+  /* ERRORS */
+not_enough_data:
+  {
+    GST_ELEMENT_WARNING (rmdemux, STREAM, DECODE, ("Skipping bad packet."),
+        (NULL));
+    gst_buffer_unmap (in, &map);
+    gst_buffer_unref (in);
+    return GST_FLOW_OK;
+  }
+}
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/rmdemux.h b/subprojects/gst-plugins-ugly/gst/realmedia/rmdemux.h
new file mode 100644 (file)
index 0000000..40e1a0b
--- /dev/null
@@ -0,0 +1,166 @@
+/* GStreamer RealMedia demuxer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ *
+ * 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_RMDEMUX_H__
+#define __GST_RMDEMUX_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstadapter.h>
+#include <gst/base/gstflowcombiner.h>
+#include <gst/pbutils/descriptions.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_RMDEMUX \
+  (gst_rmdemux_get_type())
+#define GST_RMDEMUX(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RMDEMUX,GstRMDemux))
+#define GST_RMDEMUX_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RMDEMUX,GstRMDemuxClass))
+#define GST_IS_RMDEMUX(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RMDEMUX))
+#define GST_IS_RMDEMUX_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RMDEMUX))
+
+typedef enum
+{
+  RMDEMUX_STATE_NULL,
+  RMDEMUX_STATE_HEADER,
+  RMDEMUX_STATE_HEADER_UNKNOWN,
+  RMDEMUX_STATE_HEADER_RMF,
+  RMDEMUX_STATE_HEADER_PROP,
+  RMDEMUX_STATE_HEADER_MDPR,
+  RMDEMUX_STATE_HEADER_INDX,
+  RMDEMUX_STATE_HEADER_DATA,
+  RMDEMUX_STATE_HEADER_CONT,
+  RMDEMUX_STATE_HEADER_SEEKING,
+  RMDEMUX_STATE_SEEKING,
+  RMDEMUX_STATE_DATA_PACKET,
+  RMDEMUX_STATE_SEEKING_EOS,
+  RMDEMUX_STATE_EOS,
+  RMDEMUX_STATE_INDX_DATA
+} GstRMDemuxState;
+
+typedef enum
+{
+  RMDEMUX_LOOP_STATE_HEADER,
+  RMDEMUX_LOOP_STATE_INDEX,
+  RMDEMUX_LOOP_STATE_DATA
+} GstRMDemuxLoopState;
+
+typedef enum
+{
+  GST_RMDEMUX_STREAM_UNKNOWN,
+  GST_RMDEMUX_STREAM_VIDEO,
+  GST_RMDEMUX_STREAM_AUDIO,
+  GST_RMDEMUX_STREAM_FILEINFO
+} GstRMDemuxStreamType;
+
+typedef struct _GstRMDemux GstRMDemux;
+typedef struct _GstRMDemuxClass GstRMDemuxClass;
+typedef struct _GstRMDemuxStream GstRMDemuxStream;
+
+struct _GstRMDemux {
+  GstElement element;
+
+  /* pads */
+  GstPad *sinkpad;
+
+  gboolean have_group_id;
+  guint group_id;
+
+  GSList *streams;
+  guint n_video_streams;
+  guint n_audio_streams;
+  GstAdapter *adapter;
+  gboolean have_pads;
+
+  GstFlowCombiner *flowcombiner;
+
+  guint32 timescale;
+  guint64 duration;
+  guint32 avg_packet_size;
+  guint32 index_offset;
+  guint32 data_offset;
+  guint32 num_packets;
+
+  guint offset;
+  gboolean seekable;
+  guint32 seek_seqnum;
+
+  GstRMDemuxState state;
+  GstRMDemuxLoopState loop_state;
+  GstRMDemuxStream *index_stream;
+
+  /* playback start/stop positions */
+  GstSegment segment;
+  gboolean segment_running;
+  gboolean running;
+
+  /* Whether we need to send a newsegment event */
+  gboolean need_newsegment;
+
+  /* Current timestamp */
+  GstClockTime cur_timestamp;
+
+  /* First timestamp */
+  GstClockTime base_ts;
+  GstClockTime first_ts;
+
+  int n_chunks;
+  int chunk_index;
+
+  guint32 object_id;
+  guint32 size;
+  guint16 object_version;
+
+  /* container tags for all streams */
+  GstTagList *pending_tags;
+};
+
+struct _GstRMDemuxClass {
+  GstElementClass parent_class;
+};
+
+/* RealMedia VideoCodec FOURCC codes */
+#define GST_RM_VDO_RV10 GST_MAKE_FOURCC('R','V','1','0') // RealVideo 1
+#define GST_RM_VDO_RV20 GST_MAKE_FOURCC('R','V','2','0') // RealVideo G2
+#define GST_RM_VDO_RV30 GST_MAKE_FOURCC('R','V','3','0') // RealVideo 8
+#define GST_RM_VDO_RV40 GST_MAKE_FOURCC('R','V','4','0') // RealVideo 9+10
+
+/* RealMedia AudioCodec FOURCC codes */
+#define GST_RM_AUD_14_4 GST_MAKE_FOURCC('1','4','_','4') // 14.4 Audio Codec
+#define GST_RM_AUD_28_8 GST_MAKE_FOURCC('2','8','_','8') // 28.8 Audio Codec
+#define GST_RM_AUD_COOK GST_MAKE_FOURCC('c','o','o','k') // Cooker G2 Audio Codec
+#define GST_RM_AUD_DNET GST_MAKE_FOURCC('d','n','e','t') // DolbyNet Audio Codec (low bitrate Dolby AC3)
+#define GST_RM_AUD_SIPR GST_MAKE_FOURCC('s','i','p','r') // Sipro/ACELP.NET Voice Codec
+#define GST_RM_AUD_RAAC GST_MAKE_FOURCC('r','a','a','c') // LE-AAC Audio Codec
+#define GST_RM_AUD_RACP GST_MAKE_FOURCC('r','a','c','p') // HE-AAC Audio Codec
+#define GST_RM_AUD_RALF GST_MAKE_FOURCC('r','a','l','f') // RealAudio Lossless
+#define GST_RM_AUD_ATRC GST_MAKE_FOURCC('a','t','r','c') // Sony ATRAC3 Audio Codec
+
+#define GST_RM_AUD_xRA4 GST_MAKE_FOURCC('.','r','a','4') // Not a real audio codec
+#define GST_RM_AUD_xRA5 GST_MAKE_FOURCC('.','r','a','5') // Not a real audio codec
+
+GST_ELEMENT_REGISTER_DECLARE (rmdemux);
+
+G_END_DECLS
+
+#endif /* __GST_RMDEMUX_H__ */
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/rmutils.c b/subprojects/gst-plugins-ugly/gst/realmedia/rmutils.c
new file mode 100644 (file)
index 0000000..c9bc098
--- /dev/null
@@ -0,0 +1,294 @@
+/* GStreamer RealMedia utility functions
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include "rmutils.h"
+
+gchar *
+gst_rm_utils_read_string8 (const guint8 * data, guint datalen,
+    guint * p_total_len)
+{
+  gint length;
+
+  if (p_total_len)
+    *p_total_len = 0;
+
+  if (datalen < 1)
+    return NULL;
+
+  length = GST_READ_UINT8 (data);
+  if (datalen < (1 + length))
+    return NULL;
+
+  if (p_total_len)
+    *p_total_len = 1 + length;
+
+  return g_strndup ((gchar *) data + 1, length);
+}
+
+gchar *
+gst_rm_utils_read_string16 (const guint8 * data, guint datalen,
+    guint * p_total_len)
+{
+  gint length;
+
+  if (p_total_len)
+    *p_total_len = 0;
+
+  if (datalen < 2)
+    return NULL;
+
+  length = GST_READ_UINT16_BE (data);
+  if (datalen < (2 + length))
+    return NULL;
+
+  if (p_total_len)
+    *p_total_len = 2 + length;
+
+  return g_strndup ((gchar *) data + 2, length);
+}
+
+GstTagList *
+gst_rm_utils_read_tags (const guint8 * data, guint datalen,
+    GstRmUtilsStringReadFunc read_string_func)
+{
+  const gchar *gst_tags[] = { GST_TAG_TITLE, GST_TAG_ARTIST,
+    GST_TAG_COPYRIGHT, GST_TAG_COMMENT
+  };
+  GstTagList *tags;
+  guint i;
+
+  g_assert (read_string_func != NULL);
+
+  GST_DEBUG ("File Content : (CONT) len = %d", datalen);
+
+  tags = gst_tag_list_new_empty ();
+
+  for (i = 0; i < G_N_ELEMENTS (gst_tags); ++i) {
+    gchar *str = NULL;
+    guint total_length = 0;
+
+    str = read_string_func (data, datalen, &total_length);
+    data += total_length;
+    datalen -= total_length;
+
+    if (str != NULL && !g_utf8_validate (str, -1, NULL)) {
+      const gchar *encoding;
+      gchar *tmp;
+
+      encoding = g_getenv ("GST_TAG_ENCODING");
+      if (encoding == NULL || *encoding == '\0') {
+        if (g_get_charset (&encoding))
+          encoding = "ISO-8859-15";
+      }
+      GST_DEBUG ("converting tag from %s to UTF-8", encoding);
+      tmp = g_convert_with_fallback (str, -1, "UTF-8", encoding, (gchar *) "*",
+          NULL, NULL, NULL);
+      g_free (str);
+      str = tmp;
+    }
+
+    GST_DEBUG ("%s = %s", gst_tags[i], GST_STR_NULL (str));
+    if (str != NULL && *str != '\0') {
+      gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, gst_tags[i], str, NULL);
+    }
+    g_free (str);
+  }
+
+  if (gst_tag_list_n_tags (tags) > 0)
+    return tags;
+
+  gst_tag_list_unref (tags);
+  return NULL;
+}
+
+GstBuffer *
+gst_rm_utils_descramble_dnet_buffer (GstBuffer * buf)
+{
+  GstMapInfo map;
+  guint8 *data, *end, tmp;
+
+  buf = gst_buffer_make_writable (buf);
+
+  /* dnet = byte-order swapped AC3 */
+  gst_buffer_map (buf, &map, GST_MAP_READWRITE);
+  data = map.data;
+  end = data + map.size;
+  while ((data + 1) < end) {
+    /* byte-swap */
+    tmp = data[0];
+    data[0] = data[1];
+    data[1] = tmp;
+    data += sizeof (guint16);
+  }
+  gst_buffer_unmap (buf, &map);
+  return buf;
+}
+
+static void
+gst_rm_utils_swap_nibbles (guint8 * data, gint idx1, gint idx2, gint len)
+{
+  guint8 *d1, *d2, tmp1 = 0, tmp2, tmp1n, tmp2n;
+
+  if ((idx2 & 1) && !(idx1 & 1)) {
+    /* align destination to a byte by swapping the indexes */
+    tmp1 = idx1;
+    idx1 = idx2;
+    idx2 = tmp1;
+  }
+  d1 = data + (idx1 >> 1);
+  d2 = data + (idx2 >> 1);
+
+  /* check if we have aligned offsets and we can copy bytes */
+  if ((idx1 & 1) == (idx2 & 1)) {
+    if (idx1 & 1) {
+      /* swap first nibble */
+      tmp1 = *d1;
+      tmp2 = *d2;
+      *d1++ = (tmp2 & 0xf0) | (tmp1 & 0x0f);
+      *d2++ = (tmp1 & 0xf0) | (tmp2 & 0x0f);
+      len--;
+    }
+    for (; len > 1; len -= 2) {
+      /* swap 2 nibbles */
+      tmp1 = *d1;
+      *d1++ = *d2;
+      *d2++ = tmp1;
+    }
+    if (len) {
+      /* swap leftover nibble */
+      tmp1 = *d1;
+      tmp2 = *d2;
+      *d1 = (tmp2 & 0x0f) | (tmp1 & 0xf0);
+      *d2 = (tmp1 & 0x0f) | (tmp2 & 0xf0);
+    }
+  } else {
+    /* preload nibbles from source */
+    tmp2n = *d1;
+    tmp2 = *d2;
+
+    for (; len > 1; len -= 2) {
+      /* assemble nibbles */
+      *d1++ = (tmp2n & 0x0f) | (tmp2 << 4);
+      tmp1n = *d1;
+      *d2++ = (tmp1n << 4) | (tmp1 >> 4);
+
+      tmp1 = tmp1n;
+      tmp2n = (tmp2 >> 4);
+      tmp2 = *d2;
+    }
+    if (len) {
+      /* last leftover */
+      *d1 = (tmp2 << 4) | (tmp2n & 0x0f);
+      *d2 = (tmp1 >> 4) | (tmp2 & 0xf0);
+    } else {
+      *d1 = (tmp1 & 0xf0) | (tmp2n);
+    }
+  }
+}
+
+static const gint sipr_swap_index[38][2] = {
+  {0, 63}, {1, 22}, {2, 44}, {3, 90},
+  {5, 81}, {7, 31}, {8, 86}, {9, 58},
+  {10, 36}, {12, 68}, {13, 39}, {14, 73},
+  {15, 53}, {16, 69}, {17, 57}, {19, 88},
+  {20, 34}, {21, 71}, {24, 46}, {25, 94},
+  {26, 54}, {28, 75}, {29, 50}, {32, 70},
+  {33, 92}, {35, 74}, {38, 85}, {40, 56},
+  {42, 87}, {43, 65}, {45, 59}, {48, 79},
+  {49, 93}, {51, 89}, {55, 95}, {61, 76},
+  {67, 83}, {77, 80}
+};
+
+GstBuffer *
+gst_rm_utils_descramble_sipr_buffer (GstBuffer * buf)
+{
+  GstMapInfo map;
+  gint n, bs;
+  gsize size;
+
+  size = gst_buffer_get_size (buf);
+
+  /* split the packet in 96 blocks of nibbles */
+  bs = size * 2 / 96;
+  if (bs == 0)
+    return buf;
+
+  buf = gst_buffer_make_writable (buf);
+
+  gst_buffer_map (buf, &map, GST_MAP_WRITE);
+
+  /* we need to perform 38 swaps on the blocks */
+  for (n = 0; n < 38; n++) {
+    gint idx1, idx2;
+
+    /* get the indexes of the blocks of nibbles that need swapping */
+    idx1 = bs * sipr_swap_index[n][0];
+    idx2 = bs * sipr_swap_index[n][1];
+
+    /* swap the blocks */
+    gst_rm_utils_swap_nibbles (map.data, idx1, idx2, bs);
+  }
+  gst_buffer_unmap (buf, &map);
+
+  return buf;
+}
+
+void
+gst_rm_utils_run_tests (void)
+{
+#if 0
+  guint8 tab1[] = { 0x10, 0x32, 0x54, 0x76, 0x98, 0xba, 0xdc, 0xfe };
+  guint8 tab2[8];
+
+  memcpy (tab2, tab1, 8);
+  gst_util_dump_mem (tab2, 8);
+
+  gst_rm_utils_swap_nibbles (tab2, 0, 8, 4);
+  gst_util_dump_mem (tab2, 8);
+  memcpy (tab2, tab1, 8);
+  gst_rm_utils_swap_nibbles (tab2, 0, 8, 5);
+  gst_util_dump_mem (tab2, 8);
+
+  memcpy (tab2, tab1, 8);
+  gst_rm_utils_swap_nibbles (tab2, 1, 8, 4);
+  gst_util_dump_mem (tab2, 8);
+  memcpy (tab2, tab1, 8);
+  gst_rm_utils_swap_nibbles (tab2, 1, 8, 5);
+  gst_util_dump_mem (tab2, 8);
+
+  memcpy (tab2, tab1, 8);
+  gst_rm_utils_swap_nibbles (tab2, 0, 9, 4);
+  gst_util_dump_mem (tab2, 8);
+  memcpy (tab2, tab1, 8);
+  gst_rm_utils_swap_nibbles (tab2, 0, 9, 5);
+  gst_util_dump_mem (tab2, 8);
+
+  memcpy (tab2, tab1, 8);
+  gst_rm_utils_swap_nibbles (tab2, 1, 9, 4);
+  gst_util_dump_mem (tab2, 8);
+  memcpy (tab2, tab1, 8);
+  gst_rm_utils_swap_nibbles (tab2, 1, 9, 5);
+  gst_util_dump_mem (tab2, 8);
+#endif
+}
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/rmutils.h b/subprojects/gst-plugins-ugly/gst/realmedia/rmutils.h
new file mode 100644 (file)
index 0000000..cf8bbb5
--- /dev/null
@@ -0,0 +1,50 @@
+/* GStreamer RealMedia utility functions
+ * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ *
+ * 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_RM_UTILS_H__
+#define __GST_RM_UTILS_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+typedef gchar * (*GstRmUtilsStringReadFunc) (const guint8 * data, guint datalen, guint * p_strlen);
+
+gchar         *gst_rm_utils_read_string8  (const guint8 * data,
+                                           guint          datalen,
+                                           guint        * p_totallen);
+
+gchar         *gst_rm_utils_read_string16 (const guint8 * data,
+                                           guint          datalen,
+                                           guint        * p_totallen);
+
+GstTagList    *gst_rm_utils_read_tags     (const guint8            * data,
+                                           guint                     datalen,
+                                           GstRmUtilsStringReadFunc  func);
+
+GstBuffer     *gst_rm_utils_descramble_dnet_buffer (GstBuffer * buf);
+GstBuffer     *gst_rm_utils_descramble_sipr_buffer (GstBuffer * buf);
+
+void gst_rm_utils_run_tests (void);
+
+
+G_END_DECLS
+
+#endif /* __GST_RM_UTILS_H__ */
+
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/rtspreal.c b/subprojects/gst-plugins-ugly/gst/realmedia/rtspreal.c
new file mode 100644 (file)
index 0000000..5804747
--- /dev/null
@@ -0,0 +1,735 @@
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.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.
+ */
+/* Element-Checklist-Version: 5 */
+
+/**
+ * SECTION:element-rtspreal
+ * @title: rtspreal
+ *
+ * A RealMedia RTSP extension
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <gst/rtsp/gstrtspextension.h>
+
+#include "realhash.h"
+#include "rtspreal.h"
+#include "asmrules.h"
+
+GST_DEBUG_CATEGORY_STATIC (rtspreal_debug);
+#define GST_CAT_DEFAULT (rtspreal_debug)
+
+#define SERVER_PREFIX "RealServer"
+#define DEFAULT_BANDWIDTH      "10485800"
+
+static GstRTSPResult
+rtsp_ext_real_get_transports (GstRTSPExtension * ext,
+    GstRTSPLowerTrans protocols, gchar ** transport)
+{
+  GstRTSPReal *ctx = (GstRTSPReal *) ext;
+  GString *str;
+
+  if (!ctx->isreal)
+    return GST_RTSP_OK;
+
+  GST_DEBUG_OBJECT (ext, "generating transports for %d", protocols);
+
+  str = g_string_new ("");
+
+  /*
+     if (protocols & GST_RTSP_LOWER_TRANS_UDP_MCAST) {
+     g_string_append (str, "x-real-rdt/mcast;client_port=%%u1;mode=play,");
+     }
+     if (protocols & GST_RTSP_LOWER_TRANS_UDP) {
+     g_string_append (str, "x-real-rdt/udp;client_port=%%u1;mode=play,");
+     g_string_append (str, "x-pn-tng/udp;client_port=%%u1;mode=play,");
+     }
+   */
+  if (protocols & GST_RTSP_LOWER_TRANS_TCP) {
+    g_string_append (str, "x-real-rdt/tcp;mode=play,");
+    g_string_append (str, "x-pn-tng/tcp;mode=play,");
+  }
+
+  /* if we added something, remove trailing ',' */
+  if (str->len > 0)
+    g_string_truncate (str, str->len - 1);
+
+  *transport = g_string_free (str, FALSE);
+
+  return GST_RTSP_OK;
+}
+
+static GstRTSPResult
+rtsp_ext_real_before_send (GstRTSPExtension * ext, GstRTSPMessage * request)
+{
+  GstRTSPReal *ctx = (GstRTSPReal *) ext;
+
+  switch (request->type_data.request.method) {
+    case GST_RTSP_OPTIONS:
+    {
+      gst_rtsp_message_add_header (request, GST_RTSP_HDR_USER_AGENT,
+          //"RealMedia Player (" GST_PACKAGE_NAME ")");
+          "RealMedia Player Version 6.0.9.1235 (linux-2.0-libc6-i386-gcc2.95)");
+      gst_rtsp_message_add_header (request, GST_RTSP_HDR_CLIENT_CHALLENGE,
+          "9e26d33f2984236010ef6253fb1887f7");
+      gst_rtsp_message_add_header (request, GST_RTSP_HDR_COMPANY_ID,
+          "KnKV4M4I/B2FjJ1TToLycw==");
+      gst_rtsp_message_add_header (request, GST_RTSP_HDR_GUID,
+          "00000000-0000-0000-0000-000000000000");
+      gst_rtsp_message_add_header (request, GST_RTSP_HDR_REGION_DATA, "0");
+      gst_rtsp_message_add_header (request, GST_RTSP_HDR_PLAYER_START_TIME,
+          "[28/03/2003:22:50:23 00:00]");
+      gst_rtsp_message_add_header (request, GST_RTSP_HDR_CLIENT_ID,
+          "Linux_2.4_6.0.9.1235_play32_RN01_EN_586");
+      ctx->isreal = FALSE;
+      break;
+    }
+    case GST_RTSP_DESCRIBE:
+    {
+      if (ctx->isreal) {
+        gst_rtsp_message_add_header (request, GST_RTSP_HDR_BANDWIDTH,
+            DEFAULT_BANDWIDTH);
+        gst_rtsp_message_add_header (request, GST_RTSP_HDR_GUID,
+            "00000000-0000-0000-0000-000000000000");
+        gst_rtsp_message_add_header (request, GST_RTSP_HDR_REGION_DATA, "0");
+        gst_rtsp_message_add_header (request, GST_RTSP_HDR_CLIENT_ID,
+            "Linux_2.4_6.0.9.1235_play32_RN01_EN_586");
+        gst_rtsp_message_add_header (request, GST_RTSP_HDR_MAX_ASM_WIDTH, "1");
+        gst_rtsp_message_add_header (request, GST_RTSP_HDR_LANGUAGE, "en-US");
+        gst_rtsp_message_add_header (request, GST_RTSP_HDR_REQUIRE,
+            "com.real.retain-entity-for-setup");
+      }
+      break;
+    }
+    case GST_RTSP_SETUP:
+    {
+      if (ctx->isreal) {
+        gchar *value =
+            g_strdup_printf ("%s, sd=%s", ctx->challenge2, ctx->checksum);
+        gst_rtsp_message_add_header (request, GST_RTSP_HDR_REAL_CHALLENGE2,
+            value);
+        gst_rtsp_message_add_header (request, GST_RTSP_HDR_IF_MATCH, ctx->etag);
+        g_free (value);
+      }
+      break;
+    }
+    default:
+      break;
+  }
+  return GST_RTSP_OK;
+}
+
+static GstRTSPResult
+rtsp_ext_real_after_send (GstRTSPExtension * ext, GstRTSPMessage * req,
+    GstRTSPMessage * resp)
+{
+  GstRTSPReal *ctx = (GstRTSPReal *) ext;
+
+  switch (req->type_data.request.method) {
+    case GST_RTSP_OPTIONS:
+    {
+      gchar *challenge1 = NULL;
+      gchar *server = NULL;
+
+      gst_rtsp_message_get_header (resp, GST_RTSP_HDR_SERVER, &server, 0);
+
+      gst_rtsp_message_get_header (resp, GST_RTSP_HDR_REAL_CHALLENGE1,
+          &challenge1, 0);
+      if (!challenge1)
+        goto no_challenge1;
+
+      gst_rtsp_ext_real_calc_response_and_checksum (ctx->challenge2,
+          ctx->checksum, challenge1);
+
+      GST_DEBUG_OBJECT (ctx, "Found Real challenge tag");
+      ctx->isreal = TRUE;
+      break;
+    }
+    case GST_RTSP_DESCRIBE:
+    {
+      gchar *etag = NULL;
+      guint len;
+
+      gst_rtsp_message_get_header (resp, GST_RTSP_HDR_ETAG, &etag, 0);
+      if (etag) {
+        len = sizeof (ctx->etag);
+        strncpy (ctx->etag, etag, len);
+        ctx->etag[len - 1] = '\0';
+      }
+      break;
+    }
+    default:
+      break;
+  }
+  return GST_RTSP_OK;
+
+  /* ERRORS */
+no_challenge1:
+  {
+    GST_DEBUG_OBJECT (ctx, "Could not find challenge tag.");
+    ctx->isreal = FALSE;
+    return GST_RTSP_OK;
+  }
+}
+
+#define ENSURE_SIZE(size)              \
+G_STMT_START {                        \
+  while (data_len < size) {            \
+    data_len += 1024;                  \
+    data = g_realloc (data, data_len); \
+  }                                    \
+} G_STMT_END
+
+#define READ_BUFFER_GEN(src, func, name, dest, dest_len)    \
+G_STMT_START {                                             \
+  dest = (gchar *)func (src, name);                         \
+  dest_len = 0;                                                    \
+  if (!dest) {                                              \
+    dest = (char *) "";                                     \
+  }                                                         \
+  else if (!strncmp (dest, "buffer;\"", 8)) {               \
+    dest += 8;                                              \
+    dest_len = strlen (dest) - 1;                           \
+    dest[dest_len] = '\0';                                  \
+    g_base64_decode_inplace (dest, &dest_len);            \
+  }                                                         \
+} G_STMT_END
+
+#define READ_BUFFER(sdp, name, dest, dest_len)        \
+ READ_BUFFER_GEN(sdp, gst_sdp_message_get_attribute_val, name, dest, dest_len)
+#define READ_BUFFER_M(media, name, dest, dest_len)    \
+ READ_BUFFER_GEN(media, gst_sdp_media_get_attribute_val, name, dest, dest_len)
+
+#define READ_INT_GEN(src, func, name, dest)               \
+G_STMT_START {                                           \
+  const gchar *val = func (src, name);                          \
+  if (val && !strncmp (val, "integer;", 8))               \
+      dest = atoi (val + 8);                              \
+    else                                                  \
+      dest = 0;                                           \
+} G_STMT_END
+
+#define READ_INT(sdp, name, dest)                             \
+ READ_INT_GEN(sdp, gst_sdp_message_get_attribute_val, name, dest)
+#define READ_INT_M(media, name, dest)                         \
+ READ_INT_GEN(media, gst_sdp_media_get_attribute_val, name, dest)
+
+#define READ_STRING(media, name, dest, dest_len)              \
+G_STMT_START {                                               \
+  const gchar *val = gst_sdp_media_get_attribute_val (media, name); \
+  if (val && !strncmp (val, "string;\"", 8)) {                \
+    dest = (gchar *) val + 8;                                 \
+    dest_len = strlen (dest) - 1;                             \
+    dest[dest_len] = '\0';                                    \
+  } else {                                                    \
+    dest = (char *) "";                                       \
+    dest_len = 0;                                             \
+  }                                                           \
+} G_STMT_END
+
+#define WRITE_STRING1(datap, str, str_len)            \
+G_STMT_START {                                       \
+  *datap = str_len;                                   \
+  memcpy ((datap) + 1, str, str_len);                 \
+  datap += str_len + 1;                               \
+} G_STMT_END
+
+#define WRITE_STRING2(datap, str, str_len)            \
+G_STMT_START {                                       \
+  GST_WRITE_UINT16_BE (datap, str_len);               \
+  memcpy (datap + 2, str, str_len);                   \
+  datap += str_len + 2;                               \
+} G_STMT_END
+
+static GstRTSPResult
+rtsp_ext_real_parse_sdp (GstRTSPExtension * ext, GstSDPMessage * sdp,
+    GstStructure * props)
+{
+  GstRTSPReal *ctx = (GstRTSPReal *) ext;
+  guint size;
+  gint i;
+  gchar *title, *author, *copyright, *comment;
+  gsize title_len, author_len, copyright_len, comment_len;
+  guint8 *data = NULL, *datap;
+  guint data_len = 0, offset;
+  GstBuffer *buf;
+  gchar *opaque_data;
+  gsize opaque_data_len, asm_rule_book_len;
+  GHashTable *vars;
+  GString *rules;
+
+  /* don't bother for non-real formats */
+  READ_INT (sdp, "IsRealDataType", ctx->isreal);
+  if (!ctx->isreal)
+    return TRUE;
+
+  /* Force PAUSE | PLAY */
+  //src->methods |= GST_RTSP_PLAY | GST_RTSP_PAUSE;
+
+  ctx->n_streams = gst_sdp_message_medias_len (sdp);
+
+  ctx->max_bit_rate = 0;
+  ctx->avg_bit_rate = 0;
+  ctx->max_packet_size = 0;
+  ctx->avg_packet_size = 0;
+  ctx->duration = 0;
+
+  for (i = 0; i < ctx->n_streams; i++) {
+    const GstSDPMedia *media;
+    gint intval;
+
+    media = gst_sdp_message_get_media (sdp, i);
+
+    READ_INT_M (media, "MaxBitRate", intval);
+    ctx->max_bit_rate += intval;
+    READ_INT_M (media, "AvgBitRate", intval);
+    ctx->avg_bit_rate += intval;
+    READ_INT_M (media, "MaxPacketSize", intval);
+    ctx->max_packet_size = MAX (ctx->max_packet_size, intval);
+    READ_INT_M (media, "AvgPacketSize", intval);
+    ctx->avg_packet_size = (ctx->avg_packet_size * i + intval) / (i + 1);
+    READ_INT_M (media, "Duration", intval);
+    ctx->duration = MAX (ctx->duration, intval);
+  }
+
+  /* FIXME: use GstByteWriter to write the header */
+  /* PROP */
+  offset = 0;
+  size = 50;
+  ENSURE_SIZE (size);
+  datap = data + offset;
+
+  memcpy (datap + 0, "PROP", 4);
+  GST_WRITE_UINT32_BE (datap + 4, size);
+  GST_WRITE_UINT16_BE (datap + 8, 0);
+  GST_WRITE_UINT32_BE (datap + 10, ctx->max_bit_rate);
+  GST_WRITE_UINT32_BE (datap + 14, ctx->avg_bit_rate);
+  GST_WRITE_UINT32_BE (datap + 18, ctx->max_packet_size);
+  GST_WRITE_UINT32_BE (datap + 22, ctx->avg_packet_size);
+  GST_WRITE_UINT32_BE (datap + 26, 0);
+  GST_WRITE_UINT32_BE (datap + 30, ctx->duration);
+  GST_WRITE_UINT32_BE (datap + 34, 0);
+  GST_WRITE_UINT32_BE (datap + 38, 0);
+  GST_WRITE_UINT32_BE (datap + 42, 0);
+  GST_WRITE_UINT16_BE (datap + 46, ctx->n_streams);
+  GST_WRITE_UINT16_BE (datap + 48, 0);
+  offset += size;
+
+  /* CONT */
+  READ_BUFFER (sdp, "Title", title, title_len);
+  READ_BUFFER (sdp, "Author", author, author_len);
+  READ_BUFFER (sdp, "Comment", comment, comment_len);
+  READ_BUFFER (sdp, "Copyright", copyright, copyright_len);
+
+  size = 18 + title_len + author_len + comment_len + copyright_len;
+  ENSURE_SIZE (offset + size);
+  datap = data + offset;
+
+  memcpy (datap, "CONT", 4);
+  GST_WRITE_UINT32_BE (datap + 4, size);
+  GST_WRITE_UINT16_BE (datap + 8, 0);   /* Version */
+  datap += 10;
+  WRITE_STRING2 (datap, title, title_len);
+  WRITE_STRING2 (datap, author, author_len);
+  WRITE_STRING2 (datap, copyright, copyright_len);
+  WRITE_STRING2 (datap, comment, comment_len);
+  offset += size;
+
+  /* fix the hashtale for the rule parser */
+  rules = g_string_new ("");
+  vars = g_hash_table_new (g_str_hash, g_str_equal);
+  g_hash_table_insert (vars, (gchar *) "Bandwidth",
+      (gchar *) DEFAULT_BANDWIDTH);
+
+  /* MDPR */
+  for (i = 0; i < ctx->n_streams; i++) {
+    const GstSDPMedia *media;
+    guint32 len;
+    GstRTSPRealStream *stream;
+    gchar *str;
+    gint rulematches[MAX_RULEMATCHES];
+    gint sel, j, n;
+
+    media = gst_sdp_message_get_media (sdp, i);
+
+    if (media->media && !strcmp (media->media, "data"))
+      continue;
+
+    stream = g_new0 (GstRTSPRealStream, 1);
+    ctx->streams = g_list_append (ctx->streams, stream);
+
+    READ_INT_M (media, "MaxBitRate", stream->max_bit_rate);
+    READ_INT_M (media, "AvgBitRate", stream->avg_bit_rate);
+    READ_INT_M (media, "MaxPacketSize", stream->max_packet_size);
+    READ_INT_M (media, "AvgPacketSize", stream->avg_packet_size);
+    READ_INT_M (media, "StartTime", stream->start_time);
+    READ_INT_M (media, "Preroll", stream->preroll);
+    READ_INT_M (media, "Duration", stream->duration);
+    READ_STRING (media, "StreamName", str, stream->stream_name_len);
+    stream->stream_name = g_strndup (str, stream->stream_name_len);
+    READ_STRING (media, "mimetype", str, stream->mime_type_len);
+    stream->mime_type = g_strndup (str, stream->mime_type_len);
+
+    /* FIXME: Depending on the current bandwidth, we need to select one
+     * bandwidth out of a list offered by the server. Someone needs to write
+     * a parser for strings like
+     *
+     * #($Bandwidth < 67959),TimestampDelivery=T,DropByN=T,priority=9;
+     * #($Bandwidth >= 67959) && ($Bandwidth < 167959),AverageBandwidth=67959,
+     * Priority=9;#($Bandwidth >= 67959) && ($Bandwidth < 167959),
+     * AverageBandwidth=0,Priority=5,OnDepend=\"1\";
+     * #($Bandwidth >= 167959) && ($Bandwidth < 267959),
+     * AverageBandwidth=167959,Priority=9;
+     * #($Bandwidth >= 167959) && ($Bandwidth < 267959),AverageBandwidth=0,
+     * Priority=5,OnDepend=\"3\";#($Bandwidth >= 267959),
+     * AverageBandwidth=267959,Priority=9;#($Bandwidth >= 267959),
+     * AverageBandwidth=0,Priority=5,OnDepend=\"5\";
+     *
+     * As I don't know how to do that, I just use the first entry (sel = 0).
+     * But to give you a starting point, I offer you above string
+     * in the variable 'asm_rule_book'.
+     */
+    READ_STRING (media, "ASMRuleBook", str, asm_rule_book_len);
+    stream->rulebook = gst_asm_rule_book_new (str);
+
+    n = gst_asm_rule_book_match (stream->rulebook, vars, rulematches);
+    for (j = 0; j < n; j++) {
+      g_string_append_printf (rules, "stream=%u;rule=%u,", i, rulematches[j]);
+    }
+
+    /* get the MLTI for the first matched rules */
+    sel = rulematches[0];
+
+    READ_BUFFER_M (media, "OpaqueData", opaque_data, opaque_data_len);
+
+    if (opaque_data_len < 4) {
+      GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 4",
+          opaque_data_len);
+      goto strange_opaque_data;
+    }
+    if (strncmp (opaque_data, "MLTI", 4)) {
+      GST_DEBUG_OBJECT (ctx, "no MLTI found, appending all");
+      stream->type_specific_data_len = opaque_data_len;
+      stream->type_specific_data = g_memdup2 (opaque_data, opaque_data_len);
+      goto no_type_specific;
+    }
+    opaque_data += 4;
+    opaque_data_len -= 4;
+
+    if (opaque_data_len < 2) {
+      GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 2",
+          opaque_data_len);
+      goto strange_opaque_data;
+    }
+    stream->num_rules = GST_READ_UINT16_BE (opaque_data);
+    opaque_data += 2;
+    opaque_data_len -= 2;
+
+    if (sel >= stream->num_rules) {
+      GST_DEBUG_OBJECT (ctx, "sel %d >= num_rules %d", sel, stream->num_rules);
+      goto strange_opaque_data;
+    }
+
+    if (opaque_data_len < 2 * sel) {
+      GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT
+          " < 2 * sel (%d)", opaque_data_len, 2 * sel);
+      goto strange_opaque_data;
+    }
+    opaque_data += 2 * sel;
+    opaque_data_len -= 2 * sel;
+
+    if (opaque_data_len < 2) {
+      GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 2",
+          opaque_data_len);
+      goto strange_opaque_data;
+    }
+    stream->codec = GST_READ_UINT16_BE (opaque_data);
+    opaque_data += 2;
+    opaque_data_len -= 2;
+
+    if (opaque_data_len < 2 * (stream->num_rules - sel - 1)) {
+      GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT
+          " < %d", opaque_data_len, 2 * (stream->num_rules - sel - 1));
+      goto strange_opaque_data;
+    }
+    opaque_data += 2 * (stream->num_rules - sel - 1);
+    opaque_data_len -= 2 * (stream->num_rules - sel - 1);
+
+    if (opaque_data_len < 2) {
+      GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 2",
+          opaque_data_len);
+      goto strange_opaque_data;
+    }
+    stream->num_rules = GST_READ_UINT16_BE (opaque_data);
+    opaque_data += 2;
+    opaque_data_len -= 2;
+
+    if (stream->codec > stream->num_rules) {
+      GST_DEBUG_OBJECT (ctx, "codec %d > num_rules %d", stream->codec,
+          stream->num_rules);
+      goto strange_opaque_data;
+    }
+
+    for (j = 0; j < stream->codec; j++) {
+      if (opaque_data_len < 4) {
+        GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 4",
+            opaque_data_len);
+        goto strange_opaque_data;
+      }
+      len = GST_READ_UINT32_BE (opaque_data);
+      opaque_data += 4;
+      opaque_data_len -= 4;
+
+      if (opaque_data_len < len) {
+        GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < len %d",
+            opaque_data_len, len);
+        goto strange_opaque_data;
+      }
+      opaque_data += len;
+      opaque_data_len -= len;
+    }
+
+    if (opaque_data_len < 4) {
+      GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < 4",
+          opaque_data_len);
+      goto strange_opaque_data;
+    }
+    stream->type_specific_data_len = GST_READ_UINT32_BE (opaque_data);
+    opaque_data += 4;
+    opaque_data_len -= 4;
+
+    if (opaque_data_len < stream->type_specific_data_len) {
+      GST_DEBUG_OBJECT (ctx, "opaque_data_len %" G_GSIZE_FORMAT " < %d",
+          opaque_data_len, stream->type_specific_data_len);
+      goto strange_opaque_data;
+    }
+    stream->type_specific_data =
+        g_memdup2 (opaque_data, stream->type_specific_data_len);
+
+  no_type_specific:
+    size =
+        46 + stream->stream_name_len + stream->mime_type_len +
+        stream->type_specific_data_len;
+    ENSURE_SIZE (offset + size);
+    datap = data + offset;
+
+    memcpy (datap, "MDPR", 4);
+    GST_WRITE_UINT32_BE (datap + 4, size);
+    GST_WRITE_UINT16_BE (datap + 8, 0);
+    GST_WRITE_UINT16_BE (datap + 10, i);
+    GST_WRITE_UINT32_BE (datap + 12, stream->max_bit_rate);
+    GST_WRITE_UINT32_BE (datap + 16, stream->avg_bit_rate);
+    GST_WRITE_UINT32_BE (datap + 20, stream->max_packet_size);
+    GST_WRITE_UINT32_BE (datap + 24, stream->avg_packet_size);
+    GST_WRITE_UINT32_BE (datap + 28, stream->start_time);
+    GST_WRITE_UINT32_BE (datap + 32, stream->preroll);
+    GST_WRITE_UINT32_BE (datap + 36, stream->duration);
+    datap += 40;
+    WRITE_STRING1 (datap, stream->stream_name, stream->stream_name_len);
+    WRITE_STRING1 (datap, stream->mime_type, stream->mime_type_len);
+    GST_WRITE_UINT32_BE (datap, stream->type_specific_data_len);
+    if (stream->type_specific_data_len)
+      memcpy (datap + 4, stream->type_specific_data,
+          stream->type_specific_data_len);
+    offset += size;
+  }
+
+  /* destroy the rulebook hashtable now */
+  g_hash_table_destroy (vars);
+
+  /* strip final , if we added some stream rules */
+  if (rules->len > 0) {
+    rules = g_string_truncate (rules, rules->len - 1);
+  }
+
+  /* and store rules in the context */
+  ctx->rules = g_string_free (rules, FALSE);
+
+  /* DATA */
+  size = 18;
+  ENSURE_SIZE (offset + size);
+  datap = data + offset;
+
+  memcpy (datap, "DATA", 4);
+  GST_WRITE_UINT32_BE (datap + 4, size);
+  GST_WRITE_UINT16_BE (datap + 8, 0);
+  GST_WRITE_UINT32_BE (datap + 10, 0);  /* number of packets */
+  GST_WRITE_UINT32_BE (datap + 14, 0);  /* next data header */
+  offset += size;
+
+  buf = gst_buffer_new_wrapped (data, offset);
+
+  /* Set on caps */
+  GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_HEADER);
+  gst_structure_set (props, "config", GST_TYPE_BUFFER, buf, NULL);
+  gst_buffer_unref (buf);
+
+  /* Overwrite encoding and media fields */
+  gst_structure_set (props, "encoding-name", G_TYPE_STRING, "X-REAL-RDT", NULL);
+  gst_structure_set (props, "media", G_TYPE_STRING, "application", NULL);
+
+  return TRUE;
+
+  /* ERRORS */
+strange_opaque_data:
+  {
+    g_string_free (rules, TRUE);
+    g_hash_table_destroy (vars);
+    g_free (data);
+
+    GST_ELEMENT_ERROR (ctx, RESOURCE, WRITE, ("Strange opaque data."), (NULL));
+    return FALSE;
+  }
+}
+
+static GstRTSPResult
+rtsp_ext_real_stream_select (GstRTSPExtension * ext, GstRTSPUrl * url)
+{
+  GstRTSPReal *ctx = (GstRTSPReal *) ext;
+  GstRTSPResult res;
+  GstRTSPMessage request = { 0 };
+  GstRTSPMessage response = { 0 };
+  gchar *req_url;
+
+  if (!ctx->isreal)
+    return GST_RTSP_OK;
+
+  if (!ctx->rules)
+    return GST_RTSP_OK;
+
+  req_url = gst_rtsp_url_get_request_uri (url);
+
+  /* create SET_PARAMETER */
+  if ((res = gst_rtsp_message_init_request (&request, GST_RTSP_SET_PARAMETER,
+              req_url)) < 0)
+    goto create_request_failed;
+
+  g_free (req_url);
+
+  gst_rtsp_message_add_header (&request, GST_RTSP_HDR_SUBSCRIBE, ctx->rules);
+
+  /* send SET_PARAMETER */
+  if ((res = gst_rtsp_extension_send (ext, &request, &response)) < 0)
+    goto send_error;
+
+  gst_rtsp_message_unset (&request);
+  gst_rtsp_message_unset (&response);
+
+  return GST_RTSP_OK;
+
+  /* ERRORS */
+create_request_failed:
+  {
+    GST_ELEMENT_ERROR (ctx, LIBRARY, INIT,
+        ("Could not create request."), (NULL));
+    g_free (req_url);
+    goto reset;
+  }
+send_error:
+  {
+    GST_ELEMENT_ERROR (ctx, RESOURCE, WRITE,
+        ("Could not send message."), (NULL));
+    goto reset;
+  }
+reset:
+  {
+    gst_rtsp_message_unset (&request);
+    gst_rtsp_message_unset (&response);
+    return res;
+  }
+}
+
+static void gst_rtsp_real_extension_init (gpointer g_iface,
+    gpointer iface_data);
+static void gst_rtsp_real_finalize (GObject * obj);
+
+#define gst_rtsp_real_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstRTSPReal, gst_rtsp_real, GST_TYPE_ELEMENT,
+    G_IMPLEMENT_INTERFACE (GST_TYPE_RTSP_EXTENSION,
+        gst_rtsp_real_extension_init));
+GST_ELEMENT_REGISTER_DEFINE (rtspreal, "rtspreal",
+    GST_RANK_MARGINAL, GST_TYPE_RTSP_REAL);
+
+static void
+gst_rtsp_real_class_init (GstRTSPRealClass * g_class)
+{
+  GObjectClass *gobject_class = (GObjectClass *) g_class;
+  GstElementClass *gstelement_class = (GstElementClass *) g_class;
+
+  gobject_class->finalize = gst_rtsp_real_finalize;
+
+  gst_element_class_set_static_metadata (gstelement_class,
+      "RealMedia RTSP Extension", "Network/Extension/Protocol",
+      "Extends RTSP so that it can handle RealMedia setup",
+      "Wim Taymans <wim.taymans@gmail.com>");
+
+  GST_DEBUG_CATEGORY_INIT (rtspreal_debug, "rtspreal", 0,
+      "RealMedia RTSP extension");
+}
+
+static void
+gst_rtsp_real_init (GstRTSPReal * rtspreal)
+{
+  rtspreal->isreal = FALSE;
+}
+
+static void
+gst_rtsp_stream_free (GstRTSPRealStream * stream)
+{
+  g_free (stream->stream_name);
+  g_free (stream->mime_type);
+  gst_asm_rule_book_free (stream->rulebook);
+  g_free (stream->type_specific_data);
+
+  g_free (stream);
+}
+
+static void
+gst_rtsp_real_finalize (GObject * obj)
+{
+  GstRTSPReal *r = (GstRTSPReal *) obj;
+
+  g_list_foreach (r->streams, (GFunc) gst_rtsp_stream_free, NULL);
+  g_list_free (r->streams);
+  g_free (r->rules);
+
+  G_OBJECT_CLASS (parent_class)->finalize (obj);
+}
+
+static void
+gst_rtsp_real_extension_init (gpointer g_iface, gpointer iface_data)
+{
+  GstRTSPExtensionInterface *iface = (GstRTSPExtensionInterface *) g_iface;
+
+  iface->before_send = rtsp_ext_real_before_send;
+  iface->after_send = rtsp_ext_real_after_send;
+  iface->parse_sdp = rtsp_ext_real_parse_sdp;
+  iface->stream_select = rtsp_ext_real_stream_select;
+  iface->get_transports = rtsp_ext_real_get_transports;
+}
diff --git a/subprojects/gst-plugins-ugly/gst/realmedia/rtspreal.h b/subprojects/gst-plugins-ugly/gst/realmedia/rtspreal.h
new file mode 100644 (file)
index 0000000..f5cea96
--- /dev/null
@@ -0,0 +1,93 @@
+/* GStreamer
+ * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.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_RTSP_REAL_H__
+#define __GST_RTSP_REAL_H__
+
+#include <gst/gst.h>
+
+#include "asmrules.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_RTSP_REAL             (gst_rtsp_real_get_type())
+#define GST_IS_RTSP_REAL(obj)                  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTSP_REAL))
+#define GST_IS_RTSP_REAL_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTSP_REAL))
+#define GST_RTSP_REAL(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTSP_REAL, GstRTSPReal))
+#define GST_RTSP_REAL_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTSP_REAL, GstRTSPRealClass))
+
+typedef struct _GstRTSPReal GstRTSPReal;
+typedef struct _GstRTSPRealClass GstRTSPRealClass;
+
+typedef struct _GstRTSPRealStream GstRTSPRealStream;
+
+struct _GstRTSPRealStream {
+  guint  id;
+  guint  max_bit_rate;
+  guint  avg_bit_rate;
+  guint  max_packet_size;
+  guint  avg_packet_size;
+  guint  start_time;
+  guint  preroll;
+  guint  duration;
+  gchar *stream_name;
+  guint  stream_name_len;
+  gchar *mime_type;
+  guint  mime_type_len;
+
+  GstASMRuleBook *rulebook;
+
+  gchar *type_specific_data;
+  guint  type_specific_data_len;
+
+  guint16 num_rules, j, sel, codec;
+};
+
+struct _GstRTSPReal {
+  GstElement  element;
+
+  gchar checksum[34];
+  gchar challenge2[64];
+  gchar etag[64];
+  gboolean isreal;
+
+  guint   n_streams;
+  GList  *streams;
+
+  guint  max_bit_rate;
+  guint  avg_bit_rate;
+  guint  max_packet_size;
+  guint  avg_packet_size;
+  guint  duration;
+
+  gchar *rules;
+};
+
+struct _GstRTSPRealClass {
+  GstElementClass parent_class;
+};
+
+GType gst_rtsp_real_get_type(void);
+
+GST_ELEMENT_REGISTER_DECLARE (rtspreal);
+
+
+G_END_DECLS
+
+#endif /* __GST_RTSP_REAL_H__ */
diff --git a/subprojects/gst-plugins-ugly/gst/xingmux/gstxingmux.c b/subprojects/gst-plugins-ugly/gst/xingmux/gstxingmux.c
new file mode 100644 (file)
index 0000000..33087cc
--- /dev/null
@@ -0,0 +1,683 @@
+/*
+ * Copyright (c) 2006 Christophe Fergeau  <teuf@gnome.org>
+ * Copyright (c) 2008 Sebastian Dröge  <slomo@circular-chaos.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/* Xing SDK: http://www.mp3-tech.org/programmer/sources/vbrheadersdk.zip */
+
+
+/**
+ * SECTION:element-xingmux
+ * @title: xingmux
+ *
+ * xingmux adds a Xing header to MP3 files. This contains information about the duration and size
+ * of the file and a seek table and is very useful for getting an almost correct duration and better
+ * seeking on VBR MP3 files.
+ *
+ * This element will remove any existing Xing, LAME or VBRI headers from the beginning of the file.
+ *
+ * ## Example launch line
+ * |[
+ * gst-launch-1.0 audiotestsrc num-buffers=1000 ! audioconvert ! lamemp3enc ! xingmux ! filesink location=test.mp3
+ * gst-launch-1.0 filesrc location=test.mp3 ! xingmux ! filesink location=test2.mp3
+ * gst-launch-1.0 filesrc location=test.mp3 ! mp3parse ! xingmux ! filesink location=test2.mp3
+ * ]|
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include "gstxingmux.h"
+
+GST_DEBUG_CATEGORY_STATIC (xing_mux_debug);
+#define GST_CAT_DEFAULT xing_mux_debug
+
+#define gst_xing_mux_parent_class parent_class
+G_DEFINE_TYPE (GstXingMux, gst_xing_mux, GST_TYPE_ELEMENT);
+GST_ELEMENT_REGISTER_DEFINE (xingmux, "xingmux", GST_RANK_MARGINAL,
+    GST_TYPE_XING_MUX);
+
+/* Xing Header stuff */
+#define GST_XING_FRAME_FIELD   (1 << 0)
+#define GST_XING_BYTES_FIELD   (1 << 1)
+#define GST_XING_TOC_FIELD     (1 << 2)
+#define GST_XING_QUALITY_FIELD (1 << 3)
+
+typedef struct _GstXingSeekEntry
+{
+  gint64 timestamp;
+  gint byte;
+} GstXingSeekEntry;
+
+static inline GstXingSeekEntry *
+gst_xing_seek_entry_new (void)
+{
+  return g_slice_new (GstXingSeekEntry);
+}
+
+static inline void
+gst_xing_seek_entry_free (GstXingSeekEntry * entry)
+{
+  g_slice_free (GstXingSeekEntry, entry);
+}
+
+static void gst_xing_mux_finalize (GObject * obj);
+static GstStateChangeReturn
+gst_xing_mux_change_state (GstElement * element, GstStateChange transition);
+static GstFlowReturn gst_xing_mux_chain (GstPad * pad, GstObject * parent,
+    GstBuffer * buffer);
+static gboolean gst_xing_mux_sink_event (GstPad * pad, GstObject * parent,
+    GstEvent * event);
+
+static GstStaticPadTemplate gst_xing_mux_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/mpeg, "
+        "mpegversion = (int) 1, " "layer = (int) [ 1, 3 ]"));
+
+
+static GstStaticPadTemplate gst_xing_mux_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/mpeg, "
+        "mpegversion = (int) 1, " "layer = (int) [ 1, 3 ]"));
+static const guint mp3types_bitrates[2][3][16] = {
+  {
+        {0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448,},
+        {0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384,},
+        {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320,}
+      },
+  {
+        {0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256,},
+        {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160,},
+        {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160,}
+      },
+};
+
+static const guint mp3types_freqs[3][3] = { {44100, 48000, 32000},
+{22050, 24000, 16000},
+{11025, 12000, 8000}
+};
+
+static gboolean
+parse_header (guint32 header, guint * ret_size, guint * ret_spf,
+    gulong * ret_rate)
+{
+  guint length, spf;
+  gulong samplerate, bitrate, layer, padding;
+  gint lsf, mpg25;
+
+  if ((header & 0xffe00000) != 0xffe00000) {
+    g_warning ("invalid sync");
+    return FALSE;
+  }
+
+  if (((header >> 19) & 3) == 0x01) {
+    g_warning ("invalid MPEG version");
+    return FALSE;
+  }
+
+  if (((header >> 17) & 3) == 0x00) {
+    g_warning ("invalid MPEG layer");
+    return FALSE;
+  }
+
+  if (((header >> 12) & 0xf) == 0xf || ((header >> 12) & 0xf) == 0x0) {
+    g_warning ("invalid bitrate");
+    return FALSE;
+  }
+
+  if (((header >> 10) & 0x3) == 0x3) {
+    g_warning ("invalid sampling rate");
+    return FALSE;
+  }
+
+  if (header & 0x00000002) {
+    g_warning ("invalid emphasis");
+    return FALSE;
+  }
+
+  if (header & (1 << 20)) {
+    lsf = (header & (1 << 19)) ? 0 : 1;
+    mpg25 = 0;
+  } else {
+    lsf = 1;
+    mpg25 = 1;
+  }
+
+  layer = 4 - ((header >> 17) & 0x3);
+
+  bitrate = (header >> 12) & 0xF;
+  bitrate = mp3types_bitrates[lsf][layer - 1][bitrate] * 1000;
+  if (bitrate == 0)
+    return FALSE;
+
+  samplerate = (header >> 10) & 0x3;
+  samplerate = mp3types_freqs[lsf + mpg25][samplerate];
+
+  padding = (header >> 9) & 0x1;
+
+  switch (layer) {
+    case 1:
+      length = 4 * ((bitrate * 12) / samplerate + padding);
+      break;
+    case 2:
+      length = (bitrate * 144) / samplerate + padding;
+      break;
+    default:
+    case 3:
+      length = (bitrate * 144) / (samplerate << lsf) + padding;
+      break;
+  }
+
+  if (layer == 1)
+    spf = 384;
+  else if (layer == 2 || lsf == 0)
+    spf = 1152;
+  else
+    spf = 576;
+
+  if (ret_size)
+    *ret_size = length;
+  if (ret_spf)
+    *ret_spf = spf;
+  if (ret_rate)
+    *ret_rate = samplerate;
+
+  return TRUE;
+}
+
+static guint
+get_xing_offset (guint32 header)
+{
+  guint mpeg_version = (header >> 19) & 0x3;
+  guint channel_mode = (header >> 6) & 0x3;
+
+  if (mpeg_version == 0x3) {
+    if (channel_mode == 0x3) {
+      return 0x11;
+    } else {
+      return 0x20;
+    }
+  } else {
+    if (channel_mode == 0x3) {
+      return 0x09;
+    } else {
+      return 0x11;
+    }
+  }
+}
+
+static gboolean
+has_xing_header (guint32 header, GstBuffer * buffer, gsize size)
+{
+  gboolean ret;
+  GstMapInfo map;
+  guint8 *data;
+
+  gst_buffer_map (buffer, &map, GST_MAP_READ);
+  data = map.data;
+  data += 4;
+  data += get_xing_offset (header);
+
+  if (memcmp (data, "Xing", 4) == 0 ||
+      memcmp (data, "Info", 4) == 0 || memcmp (data, "VBRI", 4) == 0)
+    ret = TRUE;
+  else
+    ret = FALSE;
+
+  gst_buffer_unmap (buffer, &map);
+  return ret;
+}
+
+static GstBuffer *
+generate_xing_header (GstXingMux * xing)
+{
+  guint8 *xing_flags;
+  guint32 xing_flags_tmp = 0;
+  GstBuffer *xing_header;
+  GstMapInfo map;
+  guchar *data;
+
+  guint32 header;
+  guint32 header_be;
+  guint size, spf, xing_offset;
+  gulong rate;
+  guint bitrate = 0x00;
+
+  gint64 duration;
+  gint64 byte_count;
+
+  header = xing->first_header;
+
+  /* Set bitrate and choose lowest possible size */
+  do {
+    bitrate++;
+
+    header &= 0xffff0fff;
+    header |= bitrate << 12;
+
+    if (!parse_header (header, &size, &spf, &rate)) {
+      GST_ERROR ("Failed to parse header!");
+      return NULL;
+    }
+    xing_offset = get_xing_offset (header);
+  } while (size < (4 + xing_offset + 4 + 4 + 4 + 4 + 100) && bitrate < 0xe);
+
+  if (bitrate == 0xe) {
+    GST_ERROR ("No usable bitrate found!");
+    return NULL;
+  }
+
+  xing_header = gst_buffer_new_and_alloc (size);
+
+  gst_buffer_map (xing_header, &map, GST_MAP_WRITE);
+  data = map.data;
+  memset (data, 0, size);
+  header_be = GUINT32_TO_BE (header);
+  memcpy (data, &header_be, 4);
+
+  data += 4;
+  data += xing_offset;
+
+  memcpy (data, "Xing", 4);
+  data += 4;
+
+  xing_flags = data;
+  data += 4;
+
+  if (xing->duration != GST_CLOCK_TIME_NONE) {
+    duration = xing->duration;
+  } else {
+    GstFormat fmt = GST_FORMAT_TIME;
+
+    if (!gst_pad_peer_query_duration (xing->sinkpad, fmt, &duration))
+      duration = GST_CLOCK_TIME_NONE;
+  }
+
+  if (duration != GST_CLOCK_TIME_NONE) {
+    guint32 number_of_frames;
+
+    /* The Xing Header contains a NumberOfFrames field, which verifies to:
+     * Duration = NumberOfFrames *SamplesPerFrame/SamplingRate
+     * SamplesPerFrame and SamplingRate are values for the current frame. 
+     */
+    number_of_frames = gst_util_uint64_scale (duration, rate, GST_SECOND) / spf;
+    number_of_frames += 1;      /* Xing Header Frame */
+    GST_DEBUG ("Setting number of frames to %u", number_of_frames);
+    number_of_frames = GUINT32_TO_BE (number_of_frames);
+    memcpy (data, &number_of_frames, 4);
+    xing_flags_tmp |= GST_XING_FRAME_FIELD;
+    data += 4;
+  }
+
+  if (xing->byte_count != 0) {
+    byte_count = xing->byte_count;
+  } else {
+    GstFormat fmt = GST_FORMAT_BYTES;
+
+    if (!gst_pad_peer_query_duration (xing->sinkpad, fmt, &byte_count))
+      byte_count = 0;
+    if (byte_count == -1)
+      byte_count = 0;
+  }
+
+  if (byte_count != 0) {
+    guint32 nbytes;
+
+    if (byte_count > G_MAXUINT32) {
+      GST_DEBUG ("Too large stream: %" G_GINT64_FORMAT " > %u bytes",
+          byte_count, G_MAXUINT32);
+    } else {
+      nbytes = byte_count;
+      GST_DEBUG ("Setting number of bytes to %u", nbytes);
+      nbytes = GUINT32_TO_BE (nbytes);
+      memcpy (data, &nbytes, 4);
+      xing_flags_tmp |= GST_XING_BYTES_FIELD;
+      data += 4;
+    }
+  }
+
+  if (xing->seek_table != NULL && byte_count != 0
+      && duration != GST_CLOCK_TIME_NONE) {
+    GList *it;
+    gint percent = 0;
+
+    xing_flags_tmp |= GST_XING_TOC_FIELD;
+
+    GST_DEBUG ("Writing seek table");
+    for (it = xing->seek_table; it != NULL && percent < 100; it = it->next) {
+      GstXingSeekEntry *entry = (GstXingSeekEntry *) it->data;
+      gint64 pos;
+      guchar byte;
+
+      while ((entry->timestamp * 100) / duration >= percent) {
+        pos = (entry->byte * 256) / byte_count;
+        GST_DEBUG ("  %d %% -- %" G_GINT64_FORMAT " 1/256", percent, pos);
+        byte = (guchar) pos;
+        memcpy (data, &byte, 1);
+        data++;
+        percent++;
+      }
+    }
+
+    if (percent < 100) {
+      guchar b;
+      gint i;
+
+      memcpy (&b, data - 1, 1);
+
+      for (i = percent; i < 100; i++) {
+        GST_DEBUG ("  %d %% -- %d 1/256", i, b);
+        memcpy (data, &b, 1);
+        data++;
+      }
+    }
+  }
+
+  GST_DEBUG ("Setting Xing flags to 0x%x\n", xing_flags_tmp);
+  xing_flags_tmp = GUINT32_TO_BE (xing_flags_tmp);
+  memcpy (xing_flags, &xing_flags_tmp, 4);
+  gst_buffer_unmap (xing_header, &map);
+  return xing_header;
+}
+
+static void
+gst_xing_mux_class_init (GstXingMuxClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+
+  gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_xing_mux_finalize);
+  gstelement_class->change_state =
+      GST_DEBUG_FUNCPTR (gst_xing_mux_change_state);
+
+  gst_element_class_add_static_pad_template (gstelement_class,
+      &gst_xing_mux_src_template);
+  gst_element_class_add_static_pad_template (gstelement_class,
+      &gst_xing_mux_sink_template);
+
+  GST_DEBUG_CATEGORY_INIT (xing_mux_debug, "xingmux", 0, "Xing Header Muxer");
+
+  gst_element_class_set_static_metadata (gstelement_class, "MP3 Xing muxer",
+      "Formatter/Muxer/Metadata",
+      "Adds a Xing header to the beginning of a VBR MP3 file",
+      "Christophe Fergeau <teuf@gnome.org>");
+}
+
+static void
+gst_xing_mux_finalize (GObject * obj)
+{
+  GstXingMux *xing = GST_XING_MUX (obj);
+
+  if (xing->adapter) {
+    g_object_unref (xing->adapter);
+    xing->adapter = NULL;
+  }
+
+  if (xing->seek_table) {
+    g_list_foreach (xing->seek_table, (GFunc) gst_xing_seek_entry_free, NULL);
+    g_list_free (xing->seek_table);
+    xing->seek_table = NULL;
+  }
+
+  G_OBJECT_CLASS (parent_class)->finalize (obj);
+}
+
+static void
+xing_reset (GstXingMux * xing)
+{
+  xing->duration = GST_CLOCK_TIME_NONE;
+  xing->byte_count = 0;
+
+  gst_adapter_clear (xing->adapter);
+
+  if (xing->seek_table) {
+    g_list_foreach (xing->seek_table, (GFunc) gst_xing_seek_entry_free, NULL);
+    g_list_free (xing->seek_table);
+    xing->seek_table = NULL;
+  }
+
+  xing->sent_xing = FALSE;
+}
+
+
+static void
+gst_xing_mux_init (GstXingMux * xing)
+{
+  /* pad through which data comes in to the element */
+  xing->sinkpad =
+      gst_pad_new_from_static_template (&gst_xing_mux_sink_template, "sink");
+  gst_pad_set_chain_function (xing->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_xing_mux_chain));
+  gst_pad_set_event_function (xing->sinkpad,
+      GST_DEBUG_FUNCPTR (gst_xing_mux_sink_event));
+  GST_PAD_SET_PROXY_CAPS (xing->sinkpad);
+  gst_element_add_pad (GST_ELEMENT (xing), xing->sinkpad);
+
+  /* pad through which data goes out of the element */
+  xing->srcpad =
+      gst_pad_new_from_static_template (&gst_xing_mux_src_template, "src");
+  gst_element_add_pad (GST_ELEMENT (xing), xing->srcpad);
+
+  xing->adapter = gst_adapter_new ();
+
+  xing_reset (xing);
+}
+
+static GstFlowReturn
+gst_xing_mux_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
+{
+  GstXingMux *xing = GST_XING_MUX (parent);
+  GstFlowReturn ret = GST_FLOW_OK;
+
+  gst_adapter_push (xing->adapter, buffer);
+
+  while (gst_adapter_available (xing->adapter) >= 4) {
+    const guchar *data;
+    guint32 header;
+    GstBuffer *outbuf;
+    GstClockTime duration;
+    guint size, spf;
+    gulong rate;
+    GstXingSeekEntry *seek_entry;
+
+    data = gst_adapter_map (xing->adapter, 4);
+    header = GST_READ_UINT32_BE (data);
+    gst_adapter_unmap (xing->adapter);
+
+    if (!parse_header (header, &size, &spf, &rate)) {
+      GST_DEBUG ("Lost sync, resyncing");
+      gst_adapter_flush (xing->adapter, 1);
+      continue;
+    }
+
+    if (gst_adapter_available (xing->adapter) < size)
+      break;
+
+    outbuf = gst_adapter_take_buffer (xing->adapter, size);
+
+    if (!xing->sent_xing) {
+      if (has_xing_header (header, outbuf, size)) {
+        GST_LOG_OBJECT (xing, "Dropping old Xing header");
+        gst_buffer_unref (outbuf);
+        continue;
+      } else {
+        GstBuffer *xing_header;
+        guint64 xing_header_size;
+
+        xing->first_header = header;
+
+        xing_header = generate_xing_header (xing);
+
+        if (xing_header == NULL) {
+          GST_ERROR ("Can't generate Xing header");
+          gst_buffer_unref (outbuf);
+          return GST_FLOW_ERROR;
+        }
+
+        xing_header_size = gst_buffer_get_size (xing_header);
+
+        if ((ret = gst_pad_push (xing->srcpad, xing_header)) != GST_FLOW_OK) {
+          GST_ERROR_OBJECT (xing, "Failed to push Xing header: %s",
+              gst_flow_get_name (ret));
+          gst_buffer_unref (xing_header);
+          gst_buffer_unref (outbuf);
+          return ret;
+        }
+
+        xing->byte_count += xing_header_size;
+        xing->sent_xing = TRUE;
+      }
+    }
+
+    seek_entry = gst_xing_seek_entry_new ();
+    seek_entry->timestamp =
+        (xing->duration == GST_CLOCK_TIME_NONE) ? 0 : xing->duration;
+    /* Workaround for parsers checking that the first seek table entry is 0 */
+    seek_entry->byte = (seek_entry->timestamp == 0) ? 0 : xing->byte_count;
+    xing->seek_table = g_list_append (xing->seek_table, seek_entry);
+
+    duration = gst_util_uint64_scale_ceil (spf, GST_SECOND, rate);
+
+    GST_BUFFER_TIMESTAMP (outbuf) =
+        (xing->duration == GST_CLOCK_TIME_NONE) ? 0 : xing->duration;
+    GST_BUFFER_DURATION (outbuf) = duration;
+    GST_BUFFER_OFFSET (outbuf) = xing->byte_count;
+    xing->byte_count += gst_buffer_get_size (outbuf);
+    GST_BUFFER_OFFSET_END (outbuf) = xing->byte_count;
+
+    if (xing->duration == GST_CLOCK_TIME_NONE)
+      xing->duration = duration;
+    else
+      xing->duration += duration;
+
+    if ((ret = gst_pad_push (xing->srcpad, outbuf)) != GST_FLOW_OK) {
+      GST_ERROR_OBJECT (xing, "Failed to push MP3 frame: %s",
+          gst_flow_get_name (ret));
+      return ret;
+    }
+  }
+
+  return ret;
+}
+
+static gboolean
+gst_xing_mux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+  GstXingMux *xing;
+  gboolean result;
+
+  xing = GST_XING_MUX (parent);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEGMENT:
+      if (xing->sent_xing) {
+        GST_ERROR ("Already sent Xing header, dropping NEWSEGMENT event!");
+        gst_event_unref (event);
+        result = FALSE;
+      } else {
+        GstSegment segment;
+
+        gst_event_copy_segment (event, &segment);
+
+        if (segment.format == GST_FORMAT_BYTES) {
+          result = gst_pad_push_event (xing->srcpad, event);
+        } else {
+
+          gst_event_unref (event);
+          gst_segment_init (&segment, GST_FORMAT_BYTES);
+          event = gst_event_new_segment (&segment);
+
+          result = gst_pad_push_event (xing->srcpad, event);
+        }
+      }
+      break;
+
+    case GST_EVENT_EOS:{
+      GstEvent *n_event;
+
+      GST_DEBUG_OBJECT (xing, "handling EOS event");
+
+      if (xing->sent_xing) {
+        GstSegment segment;
+
+        gst_segment_init (&segment, GST_FORMAT_BYTES);
+        n_event = gst_event_new_segment (&segment);
+
+        if (G_UNLIKELY (!gst_pad_push_event (xing->srcpad, n_event))) {
+          GST_WARNING
+              ("Failed to seek to position 0 for pushing the Xing header");
+        } else {
+          GstBuffer *header;
+          GstFlowReturn ret;
+
+          header = generate_xing_header (xing);
+
+          if (header == NULL) {
+            GST_ERROR ("Can't generate Xing header");
+          } else {
+
+            GST_INFO ("Writing real Xing header to beginning of stream");
+
+            if ((ret = gst_pad_push (xing->srcpad, header)) != GST_FLOW_OK)
+              GST_WARNING ("Failed to push updated Xing header: %s\n",
+                  gst_flow_get_name (ret));
+          }
+        }
+      }
+      result = gst_pad_push_event (xing->srcpad, event);
+      break;
+    }
+    default:
+      result = gst_pad_event_default (pad, parent, event);
+      break;
+  }
+
+  return result;
+}
+
+
+static GstStateChangeReturn
+gst_xing_mux_change_state (GstElement * element, GstStateChange transition)
+{
+  GstXingMux *xing;
+  GstStateChangeReturn result;
+
+  xing = GST_XING_MUX (element);
+
+  result = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+  switch (transition) {
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      xing_reset (xing);
+      break;
+    default:
+      break;
+  }
+
+  return result;
+}
diff --git a/subprojects/gst-plugins-ugly/gst/xingmux/gstxingmux.h b/subprojects/gst-plugins-ugly/gst/xingmux/gstxingmux.h
new file mode 100644 (file)
index 0000000..0d8e82c
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2006 Christophe Fergeau  <teuf@gnome.org>
+ * Copyright (c) 2008 Sebastian Dröge  <slomo@circular-chaos.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/gst.h>
+#include <gst/base/gstadapter.h>
+
+#ifndef __GST_XINGMUX_H__
+#define __GST_XINGMUX_H__
+
+G_BEGIN_DECLS
+
+/* Standard macros for defining types for this element.  */
+#define GST_TYPE_XING_MUX \
+  (gst_xing_mux_get_type())
+#define GST_XING_MUX(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_XING_MUX,GstXingMux))
+#define GST_XING_MUX_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_XING_MUX,GstXingMuxClass))
+#define GST_IS_XING_MUX(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_XING_MUX))
+#define GST_IS_XING_MUX_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_XING_MUX))
+
+typedef struct _GstXingMux GstXingMux;
+typedef struct _GstXingMuxClass GstXingMuxClass;
+
+/* Definition of structure storing data for this element. */
+
+/**
+ * GstXingMux:
+ *
+ * Opaque data structure.
+ */
+struct _GstXingMux {
+  GstElement element;
+
+  GstPad *sinkpad, *srcpad;
+
+  /* < private > */
+
+  GstAdapter *adapter;
+  GstClockTime duration;
+  guint64 byte_count;
+  guint64 frame_count;
+  GList *seek_table;
+  gboolean sent_xing;
+
+  /* Copy of the first frame header */
+  guint32 first_header;
+};
+
+/* Standard definition defining a class for this element. */
+
+/**
+ * GstXingMuxClass:
+ *
+ * Opaque data structure.
+ */
+struct _GstXingMuxClass {
+  GstElementClass parent_class;
+};
+
+/* Standard function returning type information. */
+GType gst_xing_mux_get_type (void);
+GST_ELEMENT_REGISTER_DECLARE (xingmux);
+
+G_END_DECLS
+
+#endif /* __GST_XINGMUX_H__ */
diff --git a/subprojects/gst-plugins-ugly/gst/xingmux/meson.build b/subprojects/gst-plugins-ugly/gst/xingmux/meson.build
new file mode 100644 (file)
index 0000000..d5b9f64
--- /dev/null
@@ -0,0 +1,15 @@
+xing_sources = [
+  'plugin.c',
+  'gstxingmux.c',
+]
+
+gstxingmux = library('gstxingmux',
+  xing_sources,
+  c_args : ugly_args,
+  include_directories : [configinc],
+  dependencies : [gstbase_dep],
+  install : true,
+  install_dir : plugins_install_dir,
+)
+pkgconfig.generate(gstxingmux, install_dir : plugins_pkgconfig_install_dir)
+plugins += [gstxingmux]
diff --git a/subprojects/gst-plugins-ugly/gst/xingmux/plugin.c b/subprojects/gst-plugins-ugly/gst/xingmux/plugin.c
new file mode 100644 (file)
index 0000000..21dabbb
--- /dev/null
@@ -0,0 +1,37 @@
+/* GStreamer
+ * Copyright (C) <2008> Jan Schmidt <jan.schmidt@sun.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 <gst/gst.h>
+#include "gstxingmux.h"
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  return GST_ELEMENT_REGISTER (xingmux, plugin);
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    xingmux,
+    "Add XING tags to mpeg audio files",
+    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
diff --git a/subprojects/gst-plugins-ugly/hooks/pre-commit.hook b/subprojects/gst-plugins-ugly/hooks/pre-commit.hook
new file mode 100755 (executable)
index 0000000..6f17740
--- /dev/null
@@ -0,0 +1,83 @@
+#!/bin/sh
+#
+# Check that the code follows a consistent code style
+#
+
+# Check for existence of indent, and error out if not present.
+# On some *bsd systems the binary seems to be called gnunindent,
+# so check for that first.
+
+version=`gnuindent --version 2>/dev/null`
+if test "x$version" = "x"; then
+  version=`gindent --version 2>/dev/null`
+  if test "x$version" = "x"; then
+    version=`indent --version 2>/dev/null`
+    if test "x$version" = "x"; then
+      echo "GStreamer git pre-commit hook:"
+      echo "Did not find GNU indent, please install it before continuing."
+      exit 1
+    else
+      INDENT=indent
+    fi
+  else
+    INDENT=gindent
+  fi
+else
+  INDENT=gnuindent
+fi
+
+case `$INDENT --version` in
+  GNU*)
+      ;;
+  default)
+      echo "GStreamer git pre-commit hook:"
+      echo "Did not find GNU indent, please install it before continuing."
+      echo "(Found $INDENT, but it doesn't seem to be GNU indent)"
+      exit 1
+      ;;
+esac
+
+INDENT_PARAMETERS="--braces-on-if-line \
+       --case-brace-indentation0 \
+       --case-indentation2 \
+       --braces-after-struct-decl-line \
+       --line-length80 \
+       --no-tabs \
+       --cuddle-else \
+       --dont-line-up-parentheses \
+       --continuation-indentation4 \
+       --honour-newlines \
+       --tab-size8 \
+       --indent-level2 \
+       --leave-preprocessor-space"
+
+echo "--Checking style--"
+for file in `git diff-index --cached --name-only HEAD --diff-filter=ACMR| grep "\.c$"` ; do
+    # nf is the temporary checkout. This makes sure we check against the
+    # revision in the index (and not the checked out version).
+    nf=`git checkout-index --temp ${file} | cut -f 1`
+    newfile=`mktemp /tmp/${nf}.XXXXXX` || exit 1
+    $INDENT ${INDENT_PARAMETERS} \
+       $nf -o $newfile 2>> /dev/null
+    # FIXME: Call indent twice as it tends to do line-breaks
+    # different for every second call.
+    $INDENT ${INDENT_PARAMETERS} \
+        $newfile 2>> /dev/null
+    diff -u -p "${nf}" "${newfile}"
+    r=$?
+    rm "${newfile}"
+    rm "${nf}"
+    if [ $r != 0 ] ; then
+echo "================================================================================================="
+echo " Code style error in: $file                                                                      "
+echo "                                                                                                 "
+echo " Please fix before committing. Don't forget to run git add before trying to commit again.        "
+echo " If the whole file is to be committed, this should work (run from the top-level directory):      "
+echo "                                                                                                 "
+echo "   gst-indent $file; git add $file; git commit"
+echo "                                                                                                 "
+echo "================================================================================================="
+        exit 1
+    fi
+done
+echo "--Checking style pass--"
diff --git a/subprojects/gst-plugins-ugly/meson.build b/subprojects/gst-plugins-ugly/meson.build
new file mode 100644 (file)
index 0000000..c5c78fc
--- /dev/null
@@ -0,0 +1,318 @@
+project('gst-plugins-ugly', 'c',
+  version : '1.19.2',
+  meson_version : '>= 0.54',
+  default_options : [ 'warning_level=1',
+                      'buildtype=debugoptimized' ])
+
+gst_version = meson.project_version()
+version_arr = gst_version.split('.')
+gst_version_major = version_arr[0].to_int()
+gst_version_minor = version_arr[1].to_int()
+gst_version_micro = version_arr[2].to_int()
+ if version_arr.length() == 4
+  gst_version_nano = version_arr[3].to_int()
+else
+  gst_version_nano = 0
+endif
+gst_version_is_dev = gst_version_minor % 2 == 1 and gst_version_micro < 90
+
+have_cxx = add_languages('cpp', native: false, required: false)
+
+glib_req = '>= 2.56.0'
+gst_req = '>= @0@.@1@.0'.format(gst_version_major, gst_version_minor)
+
+api_version = '1.0'
+
+plugins_install_dir = join_paths(get_option('libdir'), 'gstreamer-1.0')
+plugins = []
+
+cc = meson.get_compiler('c')
+if have_cxx
+  cxx = meson.get_compiler('cpp')
+endif
+
+if cc.get_id() == 'msvc'
+  msvc_args = [
+      # Ignore several spurious warnings for things gstreamer does very commonly
+      # If a warning is completely useless and spammy, use '/wdXXXX' to suppress it
+      # If a warning is harmless but hard to fix, use '/woXXXX' so it's shown once
+      # NOTE: Only add warnings here if you are sure they're spurious
+      '/wd4018', # implicit signed/unsigned conversion
+      '/wd4146', # unary minus on unsigned (beware INT_MIN)
+      '/wd4244', # lossy type conversion (e.g. double -> int)
+      '/wd4305', # truncating type conversion (e.g. double -> float)
+      cc.get_supported_arguments(['/utf-8']), # set the input encoding to utf-8
+
+      # Enable some warnings on MSVC to match GCC/Clang behaviour
+      '/w14062', # enumerator 'identifier' in switch of enum 'enumeration' is not handled
+      '/w14101', # 'identifier' : unreferenced local variable
+      '/w14189', # 'identifier' : local variable is initialized but not referenced
+  ]
+  if have_cxx
+    add_project_arguments(msvc_args, language: ['c', 'cpp'])
+  else
+    add_project_arguments(msvc_args, language: 'c')
+  endif
+  # Disable SAFESEH with MSVC for plugins and libs that use external deps that
+  # are built with MinGW
+  noseh_link_args = ['/SAFESEH:NO']
+else
+  noseh_link_args = []
+endif
+
+if cc.has_link_argument('-Wl,-Bsymbolic-functions')
+  add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c')
+endif
+if have_cxx and cxx.has_link_argument('-Wl,-Bsymbolic-functions')
+  add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'cpp')
+endif
+
+cdata = configuration_data()
+check_headers = [
+  ['HAVE_DLFCN_H', 'dlfcn.h'],
+  ['HAVE_INTTYPES_H', 'inttypes.h'],
+  ['HAVE_MALLOC_H', 'malloc.h'],
+  ['HAVE_MEMORY_H', 'memory.h'],
+  ['HAVE_STDINT_H', 'stdint.h'],
+  ['HAVE_STDLIB_H', 'stdlib.h'],
+  ['HAVE_STRINGS_H', 'strings.h'],
+  ['HAVE_STRING_H', 'string.h'],
+  ['HAVE_SYS_STAT_H', 'sys/stat.h'],
+  ['HAVE_SYS_TYPES_H', 'sys/types.h'],
+  ['HAVE_UNISTD_H', 'unistd.h'],
+  ['HAVE_WINSOCK2_H', 'winsock2.h'],
+]
+
+foreach h : check_headers
+  if cc.has_header(h.get(1))
+    cdata.set(h.get(0), 1)
+  endif
+endforeach
+
+check_functions = [
+  ['HAVE_DCGETTEXT', 'dcgettext'], # FIXME: this looks unused
+]
+
+foreach f : check_functions
+  if cc.has_function(f.get(1))
+    cdata.set(f.get(0), 1)
+  endif
+endforeach
+
+cdata.set('SIZEOF_CHAR', cc.sizeof('char'))
+cdata.set('SIZEOF_INT', cc.sizeof('int'))
+cdata.set('SIZEOF_LONG', cc.sizeof('long'))
+cdata.set('SIZEOF_SHORT', cc.sizeof('short'))
+cdata.set('SIZEOF_VOIDP', cc.sizeof('void*'))
+
+cdata.set_quoted('VERSION', gst_version)
+cdata.set_quoted('PACKAGE', 'gst-plugins-ugly')
+cdata.set_quoted('GST_LICENSE', 'LGPL')
+cdata.set_quoted('GETTEXT_PACKAGE', 'gst-plugins-ugly-1.0')
+cdata.set_quoted('LOCALEDIR', join_paths(get_option('prefix'), get_option('localedir')))
+
+# GStreamer package name and origin url
+gst_package_name = get_option('package-name')
+if gst_package_name == ''
+  if gst_version_nano == 0
+    gst_package_name = 'GStreamer Ugly Plug-ins source release'
+  elif gst_version_nano == 1
+    gst_package_name = 'GStreamer Ugly Plug-ins git'
+  else
+    gst_package_name = 'GStreamer Ugly Plug-ins prerelease'
+  endif
+endif
+cdata.set_quoted('GST_PACKAGE_NAME', gst_package_name)
+cdata.set_quoted('GST_PACKAGE_ORIGIN', get_option('package-origin'))
+
+# Mandatory GST deps
+gst_dep = dependency('gstreamer-1.0', version : gst_req,
+    fallback : ['gstreamer', 'gst_dep'])
+gstapp_dep = dependency('gstreamer-app-1.0', version : gst_req,
+    fallback : ['gst-plugins-base', 'app_dep'])
+gstvideo_dep = dependency('gstreamer-video-1.0', version : gst_req,
+    fallback : ['gst-plugins-base', 'video_dep'])
+gstpbutils_dep = dependency('gstreamer-pbutils-1.0', version : gst_req,
+    fallback : ['gst-plugins-base', 'pbutils_dep'])
+gsttag_dep = dependency('gstreamer-tag-1.0', version : gst_req,
+    fallback : ['gst-plugins-base', 'tag_dep'])
+gstfft_dep = dependency('gstreamer-fft-1.0', version : gst_req,
+    fallback : ['gst-plugins-base', 'fft_dep'])
+gstaudio_dep = dependency('gstreamer-audio-1.0', version : gst_req,
+    fallback : ['gst-plugins-base', 'audio_dep'])
+gstbase_dep = dependency('gstreamer-base-1.0', version : gst_req,
+  fallback : ['gstreamer', 'gst_base_dep'])
+gstriff_dep = dependency('gstreamer-riff-1.0', version : gst_req,
+    fallback : ['gst-plugins-base', 'riff_dep'])
+gstrtp_dep = dependency('gstreamer-rtp-1.0', version : gst_req,
+    fallback : ['gst-plugins-base', 'rtp_dep'])
+gstnet_dep = dependency('gstreamer-net-1.0', version : gst_req,
+  fallback : ['gstreamer', 'gst_net_dep'])
+gstsdp_dep = dependency('gstreamer-sdp-1.0', version : gst_req,
+    fallback : ['gst-plugins-base', 'sdp_dep'])
+gstrtsp_dep = dependency('gstreamer-rtsp-1.0', version : gst_req,
+    fallback : ['gst-plugins-base', 'rtsp_dep'])
+gstcheck_dep = dependency('gstreamer-check-1.0', version : gst_req,
+    required : get_option('tests'),
+    fallback : ['gstreamer', 'gst_check_dep'])
+gstcontroller_dep = dependency('gstreamer-controller-1.0', version : gst_req,
+  fallback : ['gstreamer', 'gst_controller_dep'])
+
+orc_dep = dependency('orc-0.4', version : '>= 0.4.16', required : get_option('orc'),
+    fallback : ['orc', 'orc_dep'])
+if orc_dep.found()
+  cdata.set('HAVE_ORC', 1) # used by a52dec for cpu detection
+else
+  cdata.set('DISABLE_ORC', 1)
+endif
+
+gmodule_dep = dependency('gmodule-2.0', fallback : ['glib', 'libgmodule_dep'])
+
+if gmodule_dep.version().version_compare('< 2.67.4')
+  cdata.set('g_memdup2(ptr,sz)', '(G_LIKELY(((guint64)(sz)) < G_MAXUINT)) ? g_memdup(ptr,sz) : (g_abort(),NULL)')
+endif
+
+ugly_args = ['-DHAVE_CONFIG_H']
+configinc = include_directories('.')
+libsinc = include_directories('gst-libs')
+
+# Disable compiler warnings for unused variables and args if gst debug system is disabled
+if gst_dep.type_name() == 'internal'
+  gst_debug_disabled = not subproject('gstreamer').get_variable('gst_debug')
+else
+  # We can't check that in the case of subprojects as we won't
+  # be able to build against an internal dependency (which is not built yet)
+  gst_debug_disabled = cc.has_header_symbol('gst/gstconfig.h', 'GST_DISABLE_GST_DEBUG', dependencies: gst_dep)
+endif
+
+if gst_debug_disabled
+  message('GStreamer debug system is disabled')
+  if cc.has_argument('-Wno-unused')
+    add_project_arguments('-Wno-unused', language: 'c')
+  endif
+  if have_cxx and cxx.has_argument ('-Wno-unused')
+    add_project_arguments('-Wno-unused', language: 'cpp')
+  endif
+else
+  message('GStreamer debug system is enabled')
+endif
+
+warning_flags = [
+  '-Wmissing-declarations',
+  '-Wredundant-decls',
+  '-Wwrite-strings',
+  '-Wformat',
+  '-Wformat-nonliteral',
+  '-Wformat-security',
+  '-Winit-self',
+  '-Wmissing-include-dirs',
+  '-Waddress',
+  '-Wno-multichar',
+  '-Wvla',
+  '-Wpointer-arith',
+  '-Waggregate-return',
+  '-fno-strict-aliasing',
+  # Symbol visibility
+  '-fvisibility=hidden',
+]
+
+warning_c_flags = [
+  '-Wmissing-prototypes',
+  '-Wold-style-definition',
+  '-Wdeclaration-after-statement',
+  '-Wnested-externs'
+]
+
+foreach extra_arg : warning_flags
+  if cc.has_argument (extra_arg)
+    add_project_arguments([extra_arg], language: 'c')
+  endif
+  if have_cxx and cxx.has_argument (extra_arg)
+    add_project_arguments([extra_arg], language: 'cpp')
+  endif
+endforeach
+
+foreach extra_arg : warning_c_flags
+  if cc.has_argument (extra_arg)
+    add_project_arguments([extra_arg], language: 'c')
+  endif
+endforeach
+
+# Define G_DISABLE_DEPRECATED for development versions
+if gst_version_is_dev
+  message('Disabling deprecated GLib API')
+  add_project_arguments('-DG_DISABLE_DEPRECATED', language: 'c')
+endif
+
+cast_checks = get_option('gobject-cast-checks')
+if cast_checks.disabled() or (cast_checks.auto() and not gst_version_is_dev)
+  message('Disabling GLib cast checks')
+  add_project_arguments('-DG_DISABLE_CAST_CHECKS', language: 'c')
+endif
+
+glib_asserts = get_option('glib-asserts')
+if glib_asserts.disabled() or (glib_asserts.auto() and not gst_version_is_dev)
+  message('Disabling GLib asserts')
+  add_project_arguments('-DG_DISABLE_ASSERT', language: 'c')
+endif
+
+glib_checks = get_option('glib-checks')
+if glib_checks.disabled() or (glib_checks.auto() and not gst_version_is_dev)
+  message('Disabling GLib checks')
+  add_project_arguments('-DG_DISABLE_CHECKS', language: 'c')
+endif
+
+presetdir = join_paths(get_option('datadir'), 'gstreamer-' + api_version, 'presets')
+
+pkgconfig = import('pkgconfig')
+plugins_pkgconfig_install_dir = join_paths(plugins_install_dir, 'pkgconfig')
+if get_option('default_library') == 'shared'
+  # If we don't build static plugins there is no need to generate pc files
+  plugins_pkgconfig_install_dir = disabler()
+endif
+
+python3 = import('python').find_installation()
+subdir('gst')
+subdir('ext')
+subdir('tests')
+
+# xgettext is optional (on Windows for instance)
+if find_program('xgettext', required : get_option('nls')).found()
+  cdata.set('ENABLE_NLS', 1)
+  subdir('po')
+endif
+subdir('docs')
+subdir('scripts')
+
+# Set release date
+if gst_version_nano == 0
+  extract_release_date = find_program('scripts/extract-release-date-from-doap-file.py')
+  run_result = run_command(extract_release_date, gst_version, files('gst-plugins-ugly.doap'))
+  if run_result.returncode() == 0
+    release_date = run_result.stdout().strip()
+    cdata.set_quoted('GST_PACKAGE_RELEASE_DATETIME', release_date)
+    message('Package release date: ' + release_date)
+  else
+    # Error out if our release can't be found in the .doap file
+    error(run_result.stderr())
+  endif
+endif
+
+configure_file(output : 'config.h', configuration : cdata)
+
+run_command(python3, '-c', 'import shutil; shutil.copy("hooks/pre-commit.hook", ".git/hooks/pre-commit")')
+
+if meson.version().version_compare('>= 0.54')
+  plugin_names = []
+  foreach plugin: plugins
+    # FIXME: Use str.subtring() when we can depend on Meson 0.56
+    split = plugin.name().split('gst')
+    if split.length() == 2
+      plugin_names += [split[1]]
+    else
+      warning('Need substring API in meson >= 0.56 to properly parse plugin name: ' + plugin.name())
+      plugin_names += [plugin.name()]
+    endif
+  endforeach
+  summary({'Plugins':plugin_names}, list_sep: ', ')
+endif
diff --git a/subprojects/gst-plugins-ugly/meson_options.txt b/subprojects/gst-plugins-ugly/meson_options.txt
new file mode 100644 (file)
index 0000000..0b59d01
--- /dev/null
@@ -0,0 +1,39 @@
+option('x264_libraries', type : 'string', value : '',
+       description : 'Colon separated list of additional x264 library paths, e.g. for 10-bit version')
+
+# Feature options for plugins without external deps
+option('asfdemux', type : 'feature', value : 'auto')
+option('dvdlpcmdec', type : 'feature', value : 'auto')
+option('dvdsub', type : 'feature', value : 'auto')
+option('realmedia', type : 'feature', value : 'auto')
+option('xingmux', type : 'feature', value : 'auto')
+
+# Feature options for plugins that need external deps
+option('a52dec', type : 'feature', value : 'auto', description : 'Dolby Digital (AC-3) audio decoder plugin')
+option('amrnb', type : 'feature', value : 'auto', description : 'Adaptive Multi-Rate Narrow-Band audio codec plugin')
+option('amrwbdec', type : 'feature', value : 'auto', description : 'Adaptive Multi-Rate Wide-Band audio decoder plugin')
+option('cdio', type : 'feature', value : 'auto', description : 'CD audio source plugin')
+option('dvdread', type : 'feature', value : 'auto', description : 'DVD video source plugin')
+option('mpeg2dec', type : 'feature', value : 'auto', description : 'MPEG 2 video decoder plugin')
+option('sidplay', type : 'feature', value : 'auto', description : 'Commodore 64 audio decoder plugin')
+option('x264', type : 'feature', value : 'auto', description : 'H.264 video encoder plugin')
+
+# Common feature options
+option('nls', type : 'feature', value : 'auto', yield: true,
+       description : 'Enable native language support (translations)')
+option('orc', type : 'feature', value : 'auto', yield : true)
+option('tests', type : 'feature', value : 'auto', yield : true)
+option('gobject-cast-checks', type : 'feature', value : 'auto', yield : true,
+       description: 'Enable run-time GObject cast checks (auto = enabled for development, disabled for stable releases)')
+option('glib-asserts', type : 'feature', value : 'enabled', yield : true,
+       description: 'Enable GLib assertion (auto = enabled for development, disabled for stable releases)')
+option('glib-checks', type : 'feature', value : 'enabled', yield : true,
+       description: 'Enable GLib checks such as API guards (auto = enabled for development, disabled for stable releases)')
+
+# Common options
+option('package-name', type : 'string', yield : true,
+       description : 'package name to use in plugins')
+option('package-origin', type : 'string', value : 'Unknown package origin', yield: true,
+       description : 'package origin URL to use in plugins')
+option('doc', type : 'feature', value : 'auto', yield: true,
+       description: 'Enable documentation.')
\ No newline at end of file
diff --git a/subprojects/gst-plugins-ugly/po/LINGUAS b/subprojects/gst-plugins-ugly/po/LINGUAS
new file mode 100644 (file)
index 0000000..99428b1
--- /dev/null
@@ -0,0 +1 @@
+af ast az bg ca cs da de el en_GB eo es eu fi fr fur gl hr hu id it ja lt lv ms mt nb nl or pl pt_BR ro ru sk sl sq sr sv ta tr uk vi zh_CN
diff --git a/subprojects/gst-plugins-ugly/po/POTFILES b/subprojects/gst-plugins-ugly/po/POTFILES
new file mode 100644 (file)
index 0000000..5520fe1
--- /dev/null
@@ -0,0 +1,3 @@
+ext/cdio/gstcdiocddasrc.c
+ext/dvdread/dvdreadsrc.c
+gst/asfdemux/gstasfdemux.c
diff --git a/subprojects/gst-plugins-ugly/po/af.po b/subprojects/gst-plugins-ugly/po/af.po
new file mode 100644 (file)
index 0000000..27b75ef
--- /dev/null
@@ -0,0 +1,234 @@
+# Translation of gstreamer plugin messages to Afrikaans. 
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is put in the public domain.
+# Petri Jooste <rkwjpj@puk.ac.za>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins 0.7.6\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2004-03-18 14:16+0200\n"
+"Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n"
+"Language-Team: Afrikaans <i18n@af.org.za>\n"
+"Language: af\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#, fuzzy
+msgid "Could not read from CD."
+msgstr "Kon nie skryf na lêer \"%s\" nie."
+
+msgid "Could not open CD device for reading."
+msgstr "Kon nie CD-toestel oopmaak om te lees nie."
+
+#, fuzzy
+msgid "Disc is not an Audio CD."
+msgstr "Toestel is nie oop nie."
+
+msgid "Could not open DVD"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not open DVD title %d"
+msgstr "Kon nie vfs-lêer \"%s\" toemaak nie."
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr ""
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not read DVD."
+msgstr "Kon nie skryf na lêer \"%s\" nie."
+
+msgid "This stream contains no data."
+msgstr ""
+
+#, fuzzy
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Kon nie skryf na lêer \"%s\" nie."
+
+#, fuzzy
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Kon nie vfs-lêer \"%s\" toemaak nie."
+
+#~ msgid "Could not open file \"%s\" for writing."
+#~ msgstr "Kon nie lêer \"%s\" oopmaak om in te skryf nie."
+
+#~ msgid "Error closing file \"%s\"."
+#~ msgstr "Fout tydens toemaak van lêer \"%s\"."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "Kon nie lêer \"%s\" oopmaak om te lees nie."
+
+#~ msgid "No filename specified."
+#~ msgstr "Geen lêernaam gespesifiseer."
+
+#~ msgid "No or invalid input audio, AVI stream will be corrupt."
+#~ msgstr "Geen of ongeldige klanktoevoer, AVI-stroom sal korrup wees."
+
+#~ msgid "Could not open audio device \"%s\" for writing."
+#~ msgstr "Kon nie oudio-toestel \"%s\" oopmaak vir skryf nie."
+
+#~ msgid "Could not open control device \"%s\" for writing."
+#~ msgstr "Kon nie beheertoestel \"%s\" oopmaak vir skryf nie."
+
+#~ msgid "Could not configure audio device \"%s\"."
+#~ msgstr "Kon nie oudio-toestel \"%s\" konfigureer nie."
+
+#~ msgid "Could not set audio device \"%s\" to %d Hz."
+#~ msgstr "Kon nie klanktoestel \"%s\" verstel na %d Hz nie."
+
+#~ msgid "Could not close audio device \"%s\"."
+#~ msgstr "Kon nie oudio-toestel \"%s\" toemaak nie."
+
+#~ msgid "Could not close control device \"%s\"."
+#~ msgstr "Kon nie beheertoestel \"%s\" toemaak nie."
+
+#~ msgid "Could not open video device \"%s\" for writing."
+#~ msgstr "Kon nie video-toestel \"%s\" oopmaak vir skryf nie."
+
+#~ msgid "Could not close video device \"%s\"."
+#~ msgstr "Kon nie video-toestel \"%s\" toemaak nie."
+
+#~ msgid "Could not write to device \"%s\"."
+#~ msgstr "Kon nie skryf na toestel \"%s\" nie."
+
+#~ msgid "OSS device \"%s\" is already in use by another program."
+#~ msgstr "OSS-toestel \"%s\" is reeds in gebruik deur 'n ander program."
+
+#~ msgid "Could not access device \"%s\", check its permissions."
+#~ msgstr "Kon nie toegang kry tot toestel \"%s\" nie, kyk na toegangsregte."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Toestel \"%s\" bestaan nie."
+
+#~ msgid "Could not open device \"%s\" for writing."
+#~ msgstr "Kon nie toestel \"%s\" oopmaak vir skryf nie."
+
+#~ msgid "Could not open device \"%s\" for reading."
+#~ msgstr "Kon nie toestel \"%s\" oopmaak vir lees nie."
+
+#~ msgid "Volume"
+#~ msgstr "Volume"
+
+#~ msgid "Bass"
+#~ msgstr "Bas"
+
+#~ msgid "Treble"
+#~ msgstr "Treble"
+
+#~ msgid "Synth"
+#~ msgstr "Sintetiseerder"
+
+#~ msgid "PCM"
+#~ msgstr "PCM"
+
+#~ msgid "Speaker"
+#~ msgstr "Luidspreker"
+
+#~ msgid "Line-in"
+#~ msgstr "Lyn-in"
+
+#~ msgid "Microphone"
+#~ msgstr "Mikrofoon"
+
+#~ msgid "CD"
+#~ msgstr "CD"
+
+#~ msgid "Mixer"
+#~ msgstr "Menger"
+
+#~ msgid "PCM-2"
+#~ msgstr "PCM-2"
+
+#~ msgid "Record"
+#~ msgstr "Neem op"
+
+#~ msgid "In-gain"
+#~ msgstr "In-versterking"
+
+#~ msgid "Out-gain"
+#~ msgstr "Uit-versterking"
+
+#~ msgid "Line-1"
+#~ msgstr "Lyn-1"
+
+#~ msgid "Line-2"
+#~ msgstr "Lyn-2"
+
+#~ msgid "Line-3"
+#~ msgstr "Lyn-3"
+
+#~ msgid "Digital-1"
+#~ msgstr "Digitaal-1"
+
+#~ msgid "Digital-2"
+#~ msgstr "Digitaal-2"
+
+#~ msgid "Digital-3"
+#~ msgstr "Digitaal-3"
+
+#~ msgid "Phone-in"
+#~ msgstr "Telefoon-in"
+
+#~ msgid "Phone-out"
+#~ msgstr "Telefoon-uit"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgid "Radio"
+#~ msgstr "Radio"
+
+#~ msgid "Monitor"
+#~ msgstr "Monitor"
+
+#, fuzzy
+#~ msgid "PC Speaker"
+#~ msgstr "Luidspreker"
+
+#~ msgid "Could not open vfs file \"%s\" for reading."
+#~ msgstr "Kon nie vfs-lêer \"%s\" oopmaak vir lees nie."
+
+#, fuzzy
+#~ msgid "No filename given."
+#~ msgstr "Geen lêernaam gespesifiseer."
+
+#, fuzzy
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Kon nie vfs-lêer \"%s\" oopmaak vir skryf nie."
+
+#, fuzzy
+#~ msgid "No filename given"
+#~ msgstr "Geen lêernaam gespesifiseer."
+
+#~ msgid "No device specified."
+#~ msgstr "Geen toestel gespesifiseer"
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Kon nie toestel \"%s\" oopmaak vir lees en skryf nie."
+
+#~ msgid "Device is open."
+#~ msgstr "Toestel is oop."
+
+#~ msgid "Device \"%s\" is not a capture device."
+#~ msgstr "Toestel \"%s\" is nie 'n vasleggingtoestel nie."
+
+#~ msgid "Could not get buffers from device \"%s\"."
+#~ msgstr "Kon nie buffers vanaf toestel \"%s\" verkry nie."
+
+#~ msgid "Could not get enough buffers from device \"%s\"."
+#~ msgstr "Kon nie genoeg buffers vanaf toestel \"%s\" kry nie."
diff --git a/subprojects/gst-plugins-ugly/po/ast.po b/subprojects/gst-plugins-ugly/po/ast.po
new file mode 100644 (file)
index 0000000..9f7ecec
--- /dev/null
@@ -0,0 +1,76 @@
+# Asturian translation for gst-plugins-ugly
+# This file is put in the public domain.
+#
+# enolp <enolp@softastur.org>, 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.10.0\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2016-11-01 17:53+0200\n"
+"PO-Revision-Date: 2018-07-14 12:03+0100\n"
+"Last-Translator: enolp <enolp@softastur.org>\n"
+"Language-Team: Asturian <ubuntu-l10n-ast@lists.ubuntu.com>\n"
+"Language: ast\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Lokalize 2.0\n"
+
+#: ext/cdio/gstcdiocddasrc.c:199
+msgid "Could not read from CD."
+msgstr "Nun pudo lleese dende'l CD."
+
+#: ext/cdio/gstcdiocddasrc.c:406
+msgid "Could not open CD device for reading."
+msgstr "Nun pudo abrise'l preséu de CDs pa la llectura."
+
+#: ext/cdio/gstcdiocddasrc.c:413
+msgid "Disc is not an Audio CD."
+msgstr "El discu nun ye un CD d'audiu."
+
+#: ext/dvdread/dvdreadsrc.c:231 ext/dvdread/dvdreadsrc.c:238
+msgid "Could not open DVD"
+msgstr "Nun pudo abrise'l DVD"
+
+#: ext/dvdread/dvdreadsrc.c:245 ext/dvdread/dvdreadsrc.c:621
+#: ext/dvdread/dvdreadsrc.c:628
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Nun pudo abrise'l titulu del DVD %d"
+
+#: ext/dvdread/dvdreadsrc.c:251
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Fallu al dir al capítulu %d del títulu del DVD %d"
+
+#: ext/dvdread/dvdreadsrc.c:635
+#, c-format
+msgid "Could not open DVD title %d. Interactive titles are not supported by this element"
+msgstr "Nun pudo abrise'l títulu del DVD %d. Esti elementu nun sofita los elementos interactivos."
+
+#: ext/dvdread/dvdreadsrc.c:990
+msgid "Could not read DVD. This may be because the DVD is encrypted and a DVD decryption library is not installed."
+msgstr "Nun pudo lleese'l DVD. Esto podría ser porque'l DVD ta cifráu y nun s'instaló una biblioteca de descifráu de DVDs."
+
+#: ext/dvdread/dvdreadsrc.c:993
+msgid "Could not read DVD."
+msgstr "Nun pudo lleese'l DVD."
+
+#: ext/lame/gstlamemp3enc.c:395
+msgid "Failed to configure LAME mp3 audio encoder. Check your encoding parameters."
+msgstr "Fallu al configurar el codificador d'audiu MP3 de LAME. Comprueba los parámetros de codificación."
+
+#: ext/lame/gstlamemp3enc.c:427 ext/twolame/gsttwolamemp2enc.c:488
+#, c-format
+msgid "The requested bitrate %d kbit/s for property '%s' is not allowed. The bitrate was changed to %d kbit/s."
+msgstr "La tasa de bits %d kbit/s solicitada pa la propieda «%s» nun ta permitida. Camudóse la tasa de bits a %d kbit/s."
+
+#: ext/twolame/gsttwolamemp2enc.c:411
+msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+msgstr "Fallu al configurar el codificador TwoLAME. Comprueba los parámetros de codificación."
+
+#: gst/asfdemux/gstasfdemux.c:446
+msgid "This stream contains no data."
+msgstr "Esti fluxu nun contién datos."
diff --git a/subprojects/gst-plugins-ugly/po/az.po b/subprojects/gst-plugins-ugly/po/az.po
new file mode 100644 (file)
index 0000000..d3c3870
--- /dev/null
@@ -0,0 +1,235 @@
+# Translation of 'gst-plugins' messages to Azerbaijani.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is put in the public domain.
+# Mətin Əmirov <metin@karegen.com>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-0.8.0\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2004-03-19 18:29+0200\n"
+"Last-Translator: Metin Amiroff <metin@karegen.com>\n"
+"Language-Team: Azerbaijani <translation-team-az@lists.sourceforge.net>\n"
+"Language: az\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.0.2\n"
+
+#, fuzzy
+msgid "Could not read from CD."
+msgstr "\"%s\" faylına yazıla bilmədi."
+
+msgid "Could not open CD device for reading."
+msgstr "CD avadanlığı oxuma üçün açıla bilmədi."
+
+#, fuzzy
+msgid "Disc is not an Audio CD."
+msgstr "Avadanlıq açıq deyil."
+
+msgid "Could not open DVD"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not open DVD title %d"
+msgstr "\"%s\" vfs faylı bağlana bilmədi."
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr ""
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not read DVD."
+msgstr "\"%s\" faylına yazıla bilmədi."
+
+msgid "This stream contains no data."
+msgstr ""
+
+#, fuzzy
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "\"%s\" faylına yazıla bilmədi."
+
+#, fuzzy
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "\"%s\" vfs faylı bağlana bilmədi."
+
+#~ msgid "Could not open file \"%s\" for writing."
+#~ msgstr "\"%s\" faylı yazma üçün açıla bilmədi."
+
+#~ msgid "Error closing file \"%s\"."
+#~ msgstr "\"%s\" faylı bağlana bilmədi."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "\"%s\" faylı oxuma üçün açıla bilmədi."
+
+#~ msgid "No filename specified."
+#~ msgstr "Fayl adı verilməyib."
+
+#~ msgid "No or invalid input audio, AVI stream will be corrupt."
+#~ msgstr "Səhv ya da olmayan audio girişi, AVI yayımı pozulacaqdır."
+
+#~ msgid "Could not open audio device \"%s\" for writing."
+#~ msgstr "\"%s\" audio avadanlığı yazma üçün açıla bilmədi."
+
+#~ msgid "Could not open control device \"%s\" for writing."
+#~ msgstr "\"%s\" idarə avadanlığı yazma üçün açıla bilmədi."
+
+#~ msgid "Could not configure audio device \"%s\"."
+#~ msgstr "\"%s\" audio avadanlığı quraşdırıla bilmədi."
+
+#~ msgid "Could not set audio device \"%s\" to %d Hz."
+#~ msgstr "\"%s\" audio avadanlığı %d Hz-ə keçirilə bilmədi."
+
+#~ msgid "Could not close audio device \"%s\"."
+#~ msgstr "\"%s\" audio avadanlığı bağlana bilmədi."
+
+#~ msgid "Could not close control device \"%s\"."
+#~ msgstr "\"%s\" idarə avadanlığı bağlana bilmədi."
+
+#~ msgid "Could not open video device \"%s\" for writing."
+#~ msgstr "\"%s\" video avadanlığı yazma üçün açıla bilmədi."
+
+#~ msgid "Could not close video device \"%s\"."
+#~ msgstr "\"%s\" video avadanlığı bağlana bilmədi."
+
+#~ msgid "Could not write to device \"%s\"."
+#~ msgstr "\"%s\" avadanlığına yazıla bilmədi."
+
+#~ msgid "OSS device \"%s\" is already in use by another program."
+#~ msgstr "\"%s\" OSS avadanlığı başqa bir proqram tərəfindən istifadədədir."
+
+#~ msgid "Could not access device \"%s\", check its permissions."
+#~ msgstr "\"%s\" avadanlığına yetişə bilmədi, səlahiyyətlərini yoxlayın."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "\"%s\" avadanlığı mövcud deyil."
+
+#~ msgid "Could not open device \"%s\" for writing."
+#~ msgstr "\"%s\" avadanlığı yazma üçün açıla bilmədi."
+
+#~ msgid "Could not open device \"%s\" for reading."
+#~ msgstr "\"%s\" avadanlığı oxuma üçün açıla bilmədi."
+
+#~ msgid "Volume"
+#~ msgstr "Səs"
+
+#~ msgid "Bass"
+#~ msgstr "Bas"
+
+#~ msgid "Treble"
+#~ msgstr "İncə"
+
+#~ msgid "Synth"
+#~ msgstr "Sint"
+
+#~ msgid "PCM"
+#~ msgstr "PCM"
+
+#~ msgid "Speaker"
+#~ msgstr "Spiker"
+
+#~ msgid "Line-in"
+#~ msgstr "Xətd-giriş"
+
+#~ msgid "Microphone"
+#~ msgstr "Mikrofon"
+
+#~ msgid "CD"
+#~ msgstr "CD"
+
+#~ msgid "Mixer"
+#~ msgstr "Mikser"
+
+#~ msgid "PCM-2"
+#~ msgstr "PCM-2"
+
+#~ msgid "Record"
+#~ msgstr "Qeyd"
+
+#~ msgid "In-gain"
+#~ msgstr "Giriş-gain"
+
+#~ msgid "Out-gain"
+#~ msgstr "Çıxış-gain"
+
+#~ msgid "Line-1"
+#~ msgstr "Xətd-1"
+
+#~ msgid "Line-2"
+#~ msgstr "Xətd-2"
+
+#~ msgid "Line-3"
+#~ msgstr "Xətd-3"
+
+#~ msgid "Digital-1"
+#~ msgstr "Dijital-1"
+
+#~ msgid "Digital-2"
+#~ msgstr "Dijital-2"
+
+#~ msgid "Digital-3"
+#~ msgstr "Dijital-3"
+
+#~ msgid "Phone-in"
+#~ msgstr "Telefon-girişi"
+
+#~ msgid "Phone-out"
+#~ msgstr "Telefon-çıxışı"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgid "Radio"
+#~ msgstr "Radio"
+
+#~ msgid "Monitor"
+#~ msgstr "Monitor"
+
+#, fuzzy
+#~ msgid "PC Speaker"
+#~ msgstr "Spiker"
+
+#~ msgid "Could not open vfs file \"%s\" for reading."
+#~ msgstr "\"%s\" vfs faylı oxuma üçün açıla bilmədi."
+
+#, fuzzy
+#~ msgid "No filename given."
+#~ msgstr "Fayl adı verilməyib."
+
+#, fuzzy
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "\"%s\" vfs faylı yazma üçün açıla bilmədi."
+
+#, fuzzy
+#~ msgid "No filename given"
+#~ msgstr "Fayl adı verilməyib."
+
+#~ msgid "No device specified."
+#~ msgstr "Avadanlıq bildirilməyib."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "\"%s\" avadanlığı oxuma və yazma üçün açıla bilmədi."
+
+#~ msgid "Device is open."
+#~ msgstr "Avadanlıq açıqdır."
+
+#~ msgid "Device \"%s\" is not a capture device."
+#~ msgstr "\"%s\" avadanlığı capture avadanlığı deyil."
+
+#~ msgid "Could not get buffers from device \"%s\"."
+#~ msgstr "\"%s\" avadanlığından bufferlər alına bilmədi."
+
+#~ msgid "Could not get enough buffers from device \"%s\"."
+#~ msgstr "\"%s\" avadanlığından kifayət qədər bufferlər alına bilmədi."
diff --git a/subprojects/gst-plugins-ugly/po/bg.po b/subprojects/gst-plugins-ugly/po/bg.po
new file mode 100644 (file)
index 0000000..5491240
--- /dev/null
@@ -0,0 +1,82 @@
+# Bulgarian translation of gst-plugins-ugly.
+# Copyright (C) 2007, 2008, 2009, 2010, 2011, 2016 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Alexander Shopov <ash@kambanaria.org>, 2007, 2008, 2009, 2010, 2011, 2016.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.7.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2016-02-21 21:03+0200\n"
+"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
+"Language-Team: Bulgarian <dict@ludost.net>\n"
+"Language: bg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "Could not read from CD."
+msgstr "CD-то не може да бъде прочетено."
+
+msgid "Could not open CD device for reading."
+msgstr "Не може да се чете от устройството за CD-та."
+
+msgid "Disc is not an Audio CD."
+msgstr "Дискът не е аудио CD."
+
+msgid "Could not open DVD"
+msgstr "DVD-то не може да бъде отворено"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Заглавната част %d от DVD-то не може да бъде отворена"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Не може да се премине към раздел %d от заглавната част %d на DVD-то"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Заглавната част %d от DVD-то не може да бъде отворена. Интерактивни части не "
+"се поддържат от този елемент"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"DVD-то не може да бъде прочетено. Причината може да е, че DVD-то е шифрирано "
+"и не е инсталирана библиотека за дешифриране."
+
+msgid "Could not read DVD."
+msgstr "DVD-то не може да бъде прочетено."
+
+msgid "This stream contains no data."
+msgstr "Потокът не съдържа данни."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Кодерът за mp3 — LAME не може да бъде настроен. Проверете настройките за "
+#~ "кодиране."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Поисканата честота в битове %d kbit/s за свойството „%s“ не е позволена. "
+#~ "Тя бе променена на %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Кодерът TwoLAME не може да бъде настроен. Проверете настройките за "
+#~ "кодиране."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Вътрешна грешка в потока от данни."
diff --git a/subprojects/gst-plugins-ugly/po/ca.po b/subprojects/gst-plugins-ugly/po/ca.po
new file mode 100644 (file)
index 0000000..1d5b437
--- /dev/null
@@ -0,0 +1,84 @@
+# Catalan translation for gstreamer.
+# Copyright © 2004, 2005, 2010 Free Software Foundation, Inc.
+# This file is put in the public domain.
+# Jordi Mallach <jordi@sindominio.net>, 2004, 2005, 2010.
+# Jordi Estrada <jordi.estrada@yamaha-motor.es>, 2011.
+# Gil Forcada <gforcada@gnome.org>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 0.10.17.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-01-01 14:19+0100\n"
+"Last-Translator: Gil Forcada <gforcada@gnome.org>\n"
+"Language-Team: Catalan <ca@dodds.net>\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "Could not read from CD."
+msgstr "No s'ha pogut llegir des del CD."
+
+msgid "Could not open CD device for reading."
+msgstr "No s'ha pogut obrir el dispositiu de CD per a lectura."
+
+msgid "Disc is not an Audio CD."
+msgstr "El disc no és un CD d'àudio."
+
+msgid "Could not open DVD"
+msgstr "No s'ha pogut obrir el DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "No s'ha pogut obrir el títol %d del DVD"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "No s'ha pogut anar al capítol %d del títol %d del DVD."
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"No s'ha pogut obrir el títol %d del DVD. Els títols interactius no són "
+"compatibles amb aquest element"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"No s'ha pogut llegir el DVD. Possiblement el DVD està encriptat i la "
+"biblioteca de desencriptació de DVD no està instal·lada."
+
+msgid "Could not read DVD."
+msgstr "No s'ha pogut llegir el DVD."
+
+msgid "This stream contains no data."
+msgstr "Aquest flux no conté dades."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "No s'ha pogut configurar el codificador LAME. Comproveu els paràmetres de "
+#~ "codificació."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "La taxa de bits %d kbit/s per a la propietat «%s» no és permesa. S'ha "
+#~ "canviat la taxa de bits a %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "No s'ha pogut configurar el codificador TwoLAME. Comproveu els paràmetres "
+#~ "de codificació."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "S'ha produït un error intern de flux de dades."
diff --git a/subprojects/gst-plugins-ugly/po/cs.po b/subprojects/gst-plugins-ugly/po/cs.po
new file mode 100644 (file)
index 0000000..eecac79
--- /dev/null
@@ -0,0 +1,84 @@
+# Czech translations of gst-plugins-ugly.
+# Copyright (C) 2007, 2008, 2009 the author(s) of gst-plugins-ugly.
+# Copyright (C) 2004 Miloslav Trmac <mitr@volny.cz>.
+# This file is put in the public domain.
+#
+# Miloslav Trmac <mitr@volny.cz>, 2004.
+# Petr Kovar <pknbe@volny.cz>, 2007, 2008, 2009.
+# Marek Černocký <marek@manet.cz>, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2013-09-07 07:06+0200\n"
+"Last-Translator: Marek Černocký <marek@manet.cz>\n"
+"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Gtranslator 2.91.6\n"
+
+msgid "Could not read from CD."
+msgstr "Nezdařilo se čtení z CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Nezdařilo se otevřít zařízení CD pro čtení."
+
+msgid "Disc is not an Audio CD."
+msgstr "Disk není zvukovým CD."
+
+msgid "Could not open DVD"
+msgstr "Nezdařilo se otevřít DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Nezdařilo se otevřít titul DVD %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Nezdařil se přechod na kapitolu %d titulu DVD %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Nezdařilo se otevřít titul DVD %d. Interaktivní tituly nejsou tímto prvkem "
+"podporovány"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Nezdařilo se čtení DVD. To může být způsobeno tím, že je DVD šifrováno a "
+"knihovna pro dešifrování DVD není nainstalována."
+
+msgid "Could not read DVD."
+msgstr "Nezdařilo se čtení DVD."
+
+msgid "This stream contains no data."
+msgstr "Tento proud neobsahuje žádná data."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Selhalo nastavení zvukového kodéru LAME mp3. Zkontrolujte parametry "
+#~ "kódování."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Požadovaný datový tok %d kb/s za sekundu není u vlastnosti „%s“ povolen. "
+#~ "Datový tok byl změněn na %d kb/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr "Selhalo nastavení kodéru TwoLAME. Zkontrolujte parametry kódování."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Interní chyba datového proudu."
diff --git a/subprojects/gst-plugins-ugly/po/da.po b/subprojects/gst-plugins-ugly/po/da.po
new file mode 100644 (file)
index 0000000..40172a3
--- /dev/null
@@ -0,0 +1,97 @@
+# Danish translation of gst-plugins-ugly.
+# Copyright (C) 2011 gst.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+#
+# Mogens Jaeger <mogens@jaeger.tf>, 2007.
+# Joe Hansen <joedalton2@yahoo.dk>, 2008, 2009, 2011, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly-1.0.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-12-09 03:56+0100\n"
+"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
+"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
+"Language: da\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Could not read from CD."
+msgstr "Kunne ikke åbne cd."
+
+msgid "Could not open CD device for reading."
+msgstr "Kunne ikke åbne cd-enhed."
+
+msgid "Disc is not an Audio CD."
+msgstr "Disk er ikke en lyd-cd."
+
+msgid "Could not open DVD"
+msgstr "Kunne ikke åbne dvd"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Kunne ikke åbne dvd-titel %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Kunne ikke gå til kapitel %d i dvd-titel %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Kunne ikke åbne dvd-titel %d. Interaktive titler er ikke understøttet i "
+"dette element"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Kunne ikke læse dvd. Dette kan være fordi dvd'en er krypteret og et dvd-"
+"dekrypteringsbibliotek ikke er installeret."
+
+msgid "Could not read DVD."
+msgstr "Kunne ikke læse dvd."
+
+msgid "This stream contains no data."
+msgstr "Denne strøm indeholder ingen data."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Kunne ikke konfigurere LAME mp3-lydindkoderen. Kontroller dine "
+#~ "indkoderparametre."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Den krævede bithastighed %d kbit/s for egenskab %s er ikke tilladt. "
+#~ "Bithastigheden blev ændret til %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Kunne ikke konfigurere TwoLAME-indkoderen. Kontroller dine "
+#~ "indkoderparametre."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Intern datastrømfejl."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Ugyldig titelinformation på dvd."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Kunne ikke læse titelinformation på dvd."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Kunne ikke åbne dvd-enhed %s."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Mislykkedes i at indstille PGC-baseret søgning."
+
+#~ msgid "This file is encrypted and cannot be played."
+#~ msgstr "Filen er krypteret og kan ikke afspilles."
diff --git a/subprojects/gst-plugins-ugly/po/de.po b/subprojects/gst-plugins-ugly/po/de.po
new file mode 100644 (file)
index 0000000..4fc0d21
--- /dev/null
@@ -0,0 +1,101 @@
+# German translations for gst-plugins-ugly 1.3.2
+# Copyright (C) 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+#
+# PCM = PCM
+# Line-in = Eingang
+# Line-out = Ausgang
+# Pipeline = Weiterleitung
+# Stream = Strom
+# Christian Kirbach <christian.kirbach@gmail.com>, 2009, 2011, 2012, 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.3.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2014-05-22 18:29+0100\n"
+"Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
+"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 1.5.4\n"
+
+msgid "Could not read from CD."
+msgstr "Von der CD konnte nicht gelesen werden."
+
+msgid "Could not open CD device for reading."
+msgstr "Das CD-Laufwerk konnte nicht zum Lesen geöffnet werden."
+
+msgid "Disc is not an Audio CD."
+msgstr "Das Medium ist keine Audio-CD."
+
+msgid "Could not open DVD"
+msgstr "Die DVD konnte nicht geöffnet werden."
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Der Titel »%d« der DVD konnte nicht geöffnet werden."
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Springen zu Kapitel %d des DVD-Titels »%d« schlug fehl"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Der DVD-Titel »%d« konnte nicht geöffnet werden. Interaktive Titel werden "
+"von diesem Element nicht unterstützt"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"DVD konnten nicht gelesen werden. Dies könnte daran liegen, dass die DVD "
+"verschlüsselt ist und eine Bibliothek zur DVD-Entschlüsselung nicht "
+"installiert ist."
+
+msgid "Could not read DVD."
+msgstr "DVD konnten nicht gelesen werden."
+
+msgid "This stream contains no data."
+msgstr "Dieser Strom enthält keine Daten."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Konfigurieren des MP3 Audio-Enkodierers »LAME« schlug fehl. Überprüfen "
+#~ "Sie die Parameter zum Enkodieren."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Die angeforderte Bitrate von %d kBit/s ist für die Eigenschaft »%s« nicht "
+#~ "erlaubt. Die Bitrate wurde auf %d kBit/s abgeändert."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Konfigurieren des Enkodierers »TwoLAME« schlug fehl. Überprüfen Sie die "
+#~ "Parameter zum Enkodieren. "
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Interner Datenstromfehler."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Ungültige Titelinformation auf der DVD."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Die Titelinformationen der DVD konnten nicht gelesen werden."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Öffnen des DVD-Geräts »%s« schlug fehl."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "PGC-basiertes Suchen schlug fehl."
diff --git a/subprojects/gst-plugins-ugly/po/el.po b/subprojects/gst-plugins-ugly/po/el.po
new file mode 100644 (file)
index 0000000..7bbc820
--- /dev/null
@@ -0,0 +1,82 @@
+# Greek translation for gst-plugins-ugly package of GStreamer project.
+# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 GStreamer core team
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Simos Xenitellis <simos.lists@googlemail.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 0.10.17.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-03-18 01:04+0100\n"
+"Last-Translator: Savvas Radevic <vicedar@gmail.com>\n"
+"Language-Team: Greek <team@lists.gnome.gr>\n"
+"Language: el\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "Could not read from CD."
+msgstr "Δέν μπόρεσε να γινει ανάγνωση το CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Δέν ήταν δυνατό το άνοιγμα της συσκευής CD για την ανάγνωση. "
+
+msgid "Disc is not an Audio CD."
+msgstr "Ο δίσκος δεν είναι ένα ακουστικό CD."
+
+msgid "Could not open DVD"
+msgstr "Δεν ήταν δυνατό το άνοιγμα του DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Δεν ήταν δυνατό το άνοιγμα του τίτλου DVD %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Αποτυχία μετάβασης στο κεφάλαιο %d του τίτλου του DVD %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Δεν ήταν δυνατό το άνοιγμα του τίτλου DVD %d. Οι διαδραστικοί τίτλοι δεν "
+"υποστηρίζονται από αυτό το στοιχείο"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Δεν είναι δυνατή η ανάγνωση του DVD. Αυτό μπορεί να οφείλεται στο ότι το DVD "
+"είναι κρυπτογραφημένο και μια βιβλιοθήκη αποκρυπτογράφησης DVD δεν έχει "
+"εγκατασταθεί."
+
+msgid "Could not read DVD."
+msgstr "Δεν είναι δυνατή η ανάγνωση του DVD."
+
+msgid "This stream contains no data."
+msgstr "Η ροή αυτή δεν περιέχει καθόλου δεδομένα."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Αδυναμία ρύθμισης του κωδικοποιητή LAME. Ελέγξτε τις παραμέτρους "
+#~ "κωδικοποίησης."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Ο αιτούμενος ρυθμός μετάδοσης %d kbit/s για την ιδιοκτησία '%s' δεν είναι "
+#~ "επιτρεπτός.Ορυθμός μετάδοσης άλλαξε σε %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Αδυναμία ρύθμισης του κωδικοποιητή TwoLAME. Ελέγξτε τις παραμέτρους "
+#~ "κωδικοποίησης."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Εσωτερικό σφάλμα ροής δεδομένων."
diff --git a/subprojects/gst-plugins-ugly/po/en_GB.po b/subprojects/gst-plugins-ugly/po/en_GB.po
new file mode 100644 (file)
index 0000000..527b2b0
--- /dev/null
@@ -0,0 +1,240 @@
+# English (British) translation.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Gareth Owen <gowen72@yahoo.com>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins 0.8.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2004-04-26 10:41-0400\n"
+"Last-Translator: Gareth Owen <gowen72@yahoo.com>\n"
+"Language-Team: English (British) <en_gb@li.org>\n"
+"Language: en_GB\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#, fuzzy
+msgid "Could not read from CD."
+msgstr "Could not write to file \"%s\"."
+
+msgid "Could not open CD device for reading."
+msgstr "Could not open CD device for reading."
+
+#, fuzzy
+msgid "Disc is not an Audio CD."
+msgstr "Device is not open."
+
+msgid "Could not open DVD"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not open DVD title %d"
+msgstr "Could not close vfs file \"%s\"."
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr ""
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not read DVD."
+msgstr "Could not write to file \"%s\"."
+
+msgid "This stream contains no data."
+msgstr ""
+
+#, fuzzy
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Could not write to file \"%s\"."
+
+#, fuzzy
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Could not close vfs file \"%s\"."
+
+#~ msgid "Could not open file \"%s\" for writing."
+#~ msgstr "Could not open file \"%s\" for writing."
+
+#~ msgid "Error closing file \"%s\"."
+#~ msgstr "Error closing file \"%s\"."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "Could not open file \"%s\" for reading."
+
+#~ msgid "No filename specified."
+#~ msgstr "No filename specified."
+
+#~ msgid "No or invalid input audio, AVI stream will be corrupt."
+#~ msgstr "No or invalid input audio, AVI stream will be corrupt."
+
+#~ msgid "Could not open audio device \"%s\" for writing."
+#~ msgstr "Could not open audio device \"%s\" for writing."
+
+#~ msgid "Could not open control device \"%s\" for writing."
+#~ msgstr "Could not open control device \"%s\" for writing."
+
+#~ msgid "Could not configure audio device \"%s\"."
+#~ msgstr "Could not configure audio device \"%s\"."
+
+#~ msgid "Could not set audio device \"%s\" to %d Hz."
+#~ msgstr "Could not set audio device \"%s\" to %d Hz."
+
+#~ msgid "Could not close audio device \"%s\"."
+#~ msgstr "Could not close audio device \"%s\"."
+
+#~ msgid "Could not close control device \"%s\"."
+#~ msgstr "Could not close control device \"%s\"."
+
+#~ msgid "Could not open video device \"%s\" for writing."
+#~ msgstr "Could not open video device \"%s\" for writing."
+
+#~ msgid "Could not close video device \"%s\"."
+#~ msgstr "Could not close video device \"%s\"."
+
+#~ msgid "Could not write to device \"%s\"."
+#~ msgstr "Could not write to device \"%s\"."
+
+#~ msgid "OSS device \"%s\" is already in use by another program."
+#~ msgstr "OSS device \"%s\" is already in use by another program."
+
+#~ msgid "Could not access device \"%s\", check its permissions."
+#~ msgstr "Could not access device \"%s\", check its permissions."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Device \"%s\" does not exist."
+
+#~ msgid "Could not open device \"%s\" for writing."
+#~ msgstr "Could not open device \"%s\" for writing."
+
+#~ msgid "Could not open device \"%s\" for reading."
+#~ msgstr "Could not open device \"%s\" for reading."
+
+#, fuzzy
+#~ msgid "Your OSS device could not be probed correctly"
+#~ msgstr "Your oss device could not be probed correctly"
+
+#~ msgid "Volume"
+#~ msgstr "Volume"
+
+#~ msgid "Bass"
+#~ msgstr "Bass"
+
+#~ msgid "Treble"
+#~ msgstr "Treble"
+
+#~ msgid "Synth"
+#~ msgstr "Synth"
+
+#~ msgid "PCM"
+#~ msgstr "PCM"
+
+#~ msgid "Speaker"
+#~ msgstr "Speaker"
+
+#~ msgid "Line-in"
+#~ msgstr "Line-in"
+
+#~ msgid "Microphone"
+#~ msgstr "Microphone"
+
+#~ msgid "CD"
+#~ msgstr "CD"
+
+#~ msgid "Mixer"
+#~ msgstr "Mixer"
+
+#~ msgid "PCM-2"
+#~ msgstr "PCM-2"
+
+#~ msgid "Record"
+#~ msgstr "Record"
+
+#~ msgid "In-gain"
+#~ msgstr "In-gain"
+
+#~ msgid "Out-gain"
+#~ msgstr "Out-gain"
+
+#~ msgid "Line-1"
+#~ msgstr "Line-1"
+
+#~ msgid "Line-2"
+#~ msgstr "Line-2"
+
+#~ msgid "Line-3"
+#~ msgstr "Line-3"
+
+#~ msgid "Digital-1"
+#~ msgstr "Digital-1"
+
+#~ msgid "Digital-2"
+#~ msgstr "Digital-2"
+
+#~ msgid "Digital-3"
+#~ msgstr "Digital-3"
+
+#~ msgid "Phone-in"
+#~ msgstr "Phone-in"
+
+#~ msgid "Phone-out"
+#~ msgstr "Phone-out"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgid "Radio"
+#~ msgstr "Radio"
+
+#~ msgid "Monitor"
+#~ msgstr "Monitor"
+
+#, fuzzy
+#~ msgid "PC Speaker"
+#~ msgstr "Speaker"
+
+#~ msgid "Could not open vfs file \"%s\" for reading."
+#~ msgstr "Could not open vfs file \"%s\" for reading."
+
+#, fuzzy
+#~ msgid "No filename given."
+#~ msgstr "No filename given"
+
+#, fuzzy
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Could not open vfs file \"%s\" for writing."
+
+#~ msgid "No filename given"
+#~ msgstr "No filename given"
+
+#, fuzzy
+#~ msgid "Your OSS device doesn't support mono or stereo."
+#~ msgstr "Your oss device could not be probed correctly"
+
+#~ msgid "No device specified."
+#~ msgstr "No device specified."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Could not open device \"%s\" for reading and writing."
+
+#~ msgid "Device is open."
+#~ msgstr "Device is open."
+
+#~ msgid "Device \"%s\" is not a capture device."
+#~ msgstr "Device \"%s\" is not a capture device."
+
+#~ msgid "Could not get buffers from device \"%s\"."
+#~ msgstr "Could not get buffers from device \"%s\"."
+
+#~ msgid "Could not get enough buffers from device \"%s\"."
+#~ msgstr "Could not get enough buffers from device \"%s\"."
diff --git a/subprojects/gst-plugins-ugly/po/eo.po b/subprojects/gst-plugins-ugly/po/eo.po
new file mode 100644 (file)
index 0000000..03a7a5a
--- /dev/null
@@ -0,0 +1,80 @@
+# Esperanto translations for gst-plugins-ugly.
+# Copyright (C) 2014 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+#
+# Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>, 2011.
+# Benno Schulenberg <benno@vertaalt.nl>, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.4.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2014-09-21 21:03+0200\n"
+"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
+"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
+"Language: eo\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"X-Generator: Lokalize 1.0\n"
+
+msgid "Could not read from CD."
+msgstr "Ne eblis legi de la KD."
+
+msgid "Could not open CD device for reading."
+msgstr "Ne eblis malfermi la KD-aparaton por legi."
+
+msgid "Disc is not an Audio CD."
+msgstr "La disko ne estas son-KD."
+
+msgid "Could not open DVD"
+msgstr "Ne eblis malfermi la DVD-n"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Ne eblis malfermi titolon \"%d\" de la DVD"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Fiaskis iri al ĉapitro %d de la DVD-titolo %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Ne eblis malfermi DVD-titolon \"%d\"; ĉi tiu elemento ne subtenas interagajn "
+"titolojn"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Ne eblis legi la DVD-n. Eble la DVD estas ĉifrita sed biblioteko por DVD-"
+"malĉifrado ne estas instalita."
+
+msgid "Could not read DVD."
+msgstr "Ne eblis legi la DVD-n."
+
+msgid "This stream contains no data."
+msgstr "Tiu fluo enhavas neniun datumon."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr "Fiaskis agordi la LAME-kodilon. Kontrolu viajn kodad-parametrojn."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "La petita bitrapido je %d kbit/s ne estas permesata por la atributo \"%s"
+#~ "\". La bitrapido estas ŝanĝite al %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Fiaskis agordi la TwoLAME-kodilon. Kontrolu viajn kodad-parametrojn."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Interna datum-flu-eraro."
diff --git a/subprojects/gst-plugins-ugly/po/es.po b/subprojects/gst-plugins-ugly/po/es.po
new file mode 100644 (file)
index 0000000..e8cdc4d
--- /dev/null
@@ -0,0 +1,98 @@
+# translation of gst-plugins-ugly-0.10.17.2.po to Español
+# spanish translation for gst-plugins-ugly
+# This file is put in the public domain.
+# Jorge González <jorgegonz@svn.gnome.org>, 2007, 2009, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 0.10.17.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2011-10-02 15:45+0200\n"
+"Last-Translator: Jorge González González <aloriel@gmail.com>\n"
+"Language-Team: Spanish <es@li.org>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+
+msgid "Could not read from CD."
+msgstr "No se pudo leer del CD."
+
+msgid "Could not open CD device for reading."
+msgstr "No se pudo abrir el dispositivo de CD para su lectura."
+
+msgid "Disc is not an Audio CD."
+msgstr "El disco no es un CD de sonido."
+
+msgid "Could not open DVD"
+msgstr "No se pudo abrir el DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "No se pudo abrir el título %d del DVD"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Falló al ir al capítulo %d del título %d del DVD"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"No se pudo abrir el título %d del DVD. Los títulos interactivos no están "
+"soportados por este elemento."
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"No se pudo leer el DVD. Puede ser debido a que el DVD está cifrado y la "
+"biblioteca de descifrado del DVD no está instalada."
+
+msgid "Could not read DVD."
+msgstr "No se pudo leer el DVD."
+
+msgid "This stream contains no data."
+msgstr "Este medio no contiene datos."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Falló al configurar el codificador LAME. Compruebe sus parámetros de "
+#~ "codificación."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "La tasa de bits %d kbps solicitada para la propiedad «%s» no está "
+#~ "permitida. La tasa de bits se cambió a %d kbps."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Falló al configurar el codificador TwoLAME. Compruebe sus parámetros de "
+#~ "codificación."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Error del flujo de datos interno."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Información del título del DVD no válida."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "No se pudo leer la información del título para el DVD."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Falló abrir el dispositivo DVD «%s»."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Falló al establecer la búsqueda basada en PGC."
+
+#~ msgid "This file is encrypted and cannot be played."
+#~ msgstr "Este archivo está cifrado y no se puede reproducir."
diff --git a/subprojects/gst-plugins-ugly/po/eu.po b/subprojects/gst-plugins-ugly/po/eu.po
new file mode 100644 (file)
index 0000000..7a133fc
--- /dev/null
@@ -0,0 +1,99 @@
+# translation of gst-plugins-ugly.master.po to Basque
+# Copyright (C) 2004, 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+#
+# Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>, 2009.
+# Mikel Olasagasti Uranga <hey_neken@mundurat.net>, 2009, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly-0.10.13.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2010-03-07 13:12+0200\n"
+"Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n"
+"Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
+"Language: eu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "Could not read from CD."
+msgstr "Ezin izan da CDtik irakurri."
+
+msgid "Could not open CD device for reading."
+msgstr "Ezin izan da CD gailua ireki irakurtzeko."
+
+msgid "Disc is not an Audio CD."
+msgstr "Ez da Audio CD disko bat."
+
+msgid "Could not open DVD"
+msgstr "Ezin izan da DVDa ireki"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Ezin izan da DVDko %d. titulua ireki"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Huts egin du DVDko %2$d. tituluaren %1$d. kapitulura joatean"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Ezin izan da DVDko %d. titulua ireki. Elementu honek ez ditu onartzen titulu "
+"interaktiboak"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not read DVD."
+msgstr "Ezin izan da DVDa ireki"
+
+msgid "This stream contains no data."
+msgstr "Korronte honek ez du daturik."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Huts egin du TwoLAME kodetzailea konfiguratzean. Begiratu kodetze-"
+#~ "parametroak ondo dauden."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Ez da onartzen '%2$s' propietatearentzat eskatutako %1$d kbit/s-ko bit-"
+#~ "emaria. Bit-emaria aldatu egin da, eta orain %3$d kbit/s-koa da."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Huts egin du TwoLAME kodetzailea konfiguratzean. Begiratu kodetze-"
+#~ "parametroak ondo dauden."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Datu-korrontearen barne-errorea."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Huts egin du LAME kodetzailea konfiguratzean. Begiratu kodetze-"
+#~ "parametroak ondo dauden."
+
+#, fuzzy
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Ezin izan da CDtik irakurri."
+
+#, fuzzy
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Ezin izan da DVDko %d. titulua ireki"
diff --git a/subprojects/gst-plugins-ugly/po/fi.po b/subprojects/gst-plugins-ugly/po/fi.po
new file mode 100644 (file)
index 0000000..5426e0d
--- /dev/null
@@ -0,0 +1,102 @@
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Finnish messages for gst-plugins-ugly.
+# Copyright (C) 2007 Ilkka Tuohela.
+# Copyright (C) 2008-2009 Tommi Vainikainen.
+# Suomennos: http://gnome.fi/
+#
+# Ilkka Tuohela <hile@iki.fi>, 2007.
+# Tommi Vainikainen <thv@iki.fi>, 2008-2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 0.10.10.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2009-03-10 20:41+0200\n"
+"Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
+"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
+"Language: fi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: KBabel 1.11.2\n"
+
+msgid "Could not read from CD."
+msgstr "Lukeminen CD:ltä ei onnistunut."
+
+msgid "Could not open CD device for reading."
+msgstr "CD-laitetta ei voitu avata luettavaksi."
+
+msgid "Disc is not an Audio CD."
+msgstr "Levy ei ole ääni-CD."
+
+msgid "Could not open DVD"
+msgstr "DVD:tä ei voitu avata"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "DVD:n ohjelmaa %d ei voitu avata"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Ei voitu siirtyä kappaleeseen %d DVD:n ohjelmassa %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"DVD:n ohjelmaa %d ei voitu avata. Tämä elementti ei tue interaktiivisia "
+"ohjelmia"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not read DVD."
+msgstr "DVD:tä ei voitu avata"
+
+msgid "This stream contains no data."
+msgstr "Virta ei sisällä tietoa."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr "TwoLAME-kodekkia ei voitu määritellä. Tarkista kodekkiasetuksesi."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Pyydetty bittinopeus %d kb/s ominaisuudelle \"%s\" ei ole sallittu. "
+#~ "Bittinopeus asetettiin arvoon %d kb/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr "TwoLAME-kodekkia ei voitu määritellä. Tarkista kodekkiasetuksesi."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Sisäinen tietovirtavirhe."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
+#~ msgstr "LAME-kodekkia ei voitu määritellä. Tarkista kodekkiasetuksesi."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "DVD:llä on virheellisiä ohjelmatietoja."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Ohjelmatietoja ei voitu lukea DVD:ltä."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "DVD-laitetta \"%s\" ei voitu avata."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "PGC-pohjaista siirtymistä ei voitu asettaa."
+
+#~ msgid "This file is encrypted and cannot be played."
+#~ msgstr "Tiedosto on salattu eikä sitä voi toistaa."
diff --git a/subprojects/gst-plugins-ugly/po/fr.po b/subprojects/gst-plugins-ugly/po/fr.po
new file mode 100644 (file)
index 0000000..18dee2b
--- /dev/null
@@ -0,0 +1,82 @@
+# Translation of gst-plugins-ugly to French
+# Copyright (C) 2003-2011 GStreamer core team
+# This file is distributed under the same license as the gst-plugins-ugly package.
+#
+# Claude Paroz <claude@2xlibre.net>, 2008-2011.
+# Stéphane Aulery <lkppo@free.fr>, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.7.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2015-12-27 01:51+0100\n"
+"Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
+"Language-Team: French <traduc@traduc.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Could not read from CD."
+msgstr "Impossible de lire le CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Impossible d’ouvrir le lecteur de CD."
+
+msgid "Disc is not an Audio CD."
+msgstr "Le disque n’est pas un CD audio."
+
+msgid "Could not open DVD"
+msgstr "Impossible d’ouvrir le DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Impossible d’ouvrir le DVD intitulé %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Impossible d’aller au chapitre %d du DVD intitulé %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Impossible d’ouvrir le DVD intitulé %d. Les titres interactifs ne sont pas "
+"pris en charge par cet élément"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Impossible de lire le DVD. Il se peut que le DVD soit chiffré et qu’aucune "
+"bibliothèque de déchiffrement de DVD de ne soit installée."
+
+msgid "Could not read DVD."
+msgstr "Impossible de lire le DVD."
+
+msgid "This stream contains no data."
+msgstr "Ce flux ne contient aucune données."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "La configuration de l’encodeur audio mp3 LAME a échoué. Vérifiez vos "
+#~ "paramètres d’encodage."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Le débit de transfert demandé de %d kbit/s pour la propriété « %s » n’est "
+#~ "pas autorisé. Le débit de transfert a été défini à %d kbits/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "La configuration de l’encodeur TwoLAME a échoué. Vérifiez vos paramètres "
+#~ "d’encodage."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Erreur du flux de données interne."
diff --git a/subprojects/gst-plugins-ugly/po/fur.po b/subprojects/gst-plugins-ugly/po/fur.po
new file mode 100644 (file)
index 0000000..8409950
--- /dev/null
@@ -0,0 +1,79 @@
+# Friulian messages for gst-plugins-ugly-1.10.0.
+# This file is put in the public domain.
+# Fabio Tomat <f.t.public@gmail.com>, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.10.0\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2016-11-30 16:23+0100\n"
+"Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n"
+"Language-Team: Friulian <f.t.public@gmail.com>\n"
+"Language: fur\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 1.8.11\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "Could not read from CD."
+msgstr "Impussibil lei dal CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Impussibil vierzi il dispositîf CD par lei."
+
+msgid "Disc is not an Audio CD."
+msgstr "Il disc nol è un CD Audio."
+
+msgid "Could not open DVD"
+msgstr "Impussibil vierzi il DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Impussibil vierzi il titul DVD %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "No si è rivâts a lâ al cjapitul %d dal titul DVD %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Impussibil vierzi il titul DVD %d. I titui interatîfs no son supuartâts di "
+"chest element"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Impussibil lei il DVD. Al podarès jessi par vie che il DVD al è cifrât e une "
+"librarie di decifradure no je instalade."
+
+msgid "Could not read DVD."
+msgstr "Impussibil lei il DVD."
+
+msgid "This stream contains no data."
+msgstr "Il flus nol conten dâts."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "No si è rivâts a configurâ il codificadôr audio mp3 LAME. Controle i "
+#~ "parametris di codifiche."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Il bitrate domandât (%d kbit/s) pe proprietât '%s' nol è permetût. Il "
+#~ "bitrate al è stât cambiât a %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "No si è rivâts a configurâ il codificadôr TwoLAME. Controle i parametris "
+#~ "di codifiche."
diff --git a/subprojects/gst-plugins-ugly/po/gl.po b/subprojects/gst-plugins-ugly/po/gl.po
new file mode 100644 (file)
index 0000000..a70d68d
--- /dev/null
@@ -0,0 +1,84 @@
+# Galician translation of gst-plugins-ugly.
+# Copyright (C) 2009 gst-plugins-ugly's COPYRIGHT HOLDER
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Fran Diéguez <frandieguez@ubuntu.com>, 2009, 2010.
+# Fran Dieguez <frandieguez@gnome.org>, 2012.
+# Francisco Diéguez <frandieguez@ubuntu.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-12-15 03:47+0200\n"
+"Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n"
+"Language-Team: Galician <proxecto@trasno.net>\n"
+"Language: gl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Virtaal 0.7.1\n"
+"X-Project-Style: gnome\n"
+
+msgid "Could not read from CD."
+msgstr "Non foi posíbel ler desde o CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Non foi posíbel abrir o dispositivo de CD para a súa lectura."
+
+msgid "Disc is not an Audio CD."
+msgstr "O disco non é un CD de son."
+
+msgid "Could not open DVD"
+msgstr "Non foi posíbel abrir o DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Non foi posíbel abrir o título %d do DVD"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Produciuse un erro ao ir ao capítulo %d do título %d do DVD"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Non foi posíbel abrir o título %d de DVD. Este elemento non é compatíbel cos "
+"títulos interactivos"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Non foi posíbel ler o DVD. Isto pode ser porque o DVD está cifrado e non ten "
+"instalada unha biblioteca de descifrado de DVD."
+
+msgid "Could not read DVD."
+msgstr "Non foi posíbel ler o DVD"
+
+msgid "This stream contains no data."
+msgstr "Este fluxo non contén datos."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Produciuse un erro ao configurar o codificador LAME mp3. Comprobe os seus "
+#~ "parámetros de codificación."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Non se permite o bitrate solicitado %d kbit/s para a propiedade '%s'. O "
+#~ "bitrate cambiouse a %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Produciuse un fallo ao configurar o codificador TwoLAME. Comprobe os seus "
+#~ "parámetros de codificación."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Erro de fluxo de datos interno."
diff --git a/subprojects/gst-plugins-ugly/po/hr.po b/subprojects/gst-plugins-ugly/po/hr.po
new file mode 100644 (file)
index 0000000..3ca1300
--- /dev/null
@@ -0,0 +1,86 @@
+# Translation of gst-plugins-ugly messages to Croatian.
+# This file is put in the public domain.
+# Copyright (C) 2004-2010, 2019 GStreamer core team.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+#
+# Tomislav Krznar <tomislav.krznar@gmail.com>, 2012.
+# Božidar Putanec <bozidarp@yahoo.com>, 2016, 2018, 2019.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly-1.15.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2019-02-03 13:14-0800\n"
+"Last-Translator: Božidar Putanec <bozidarp@yahoo.com>\n"
+"Language-Team: Croatian <lokalizacija@linux.hr>\n"
+"Language: hr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Poedit 2.2.1\n"
+
+msgid "Could not read from CD."
+msgstr "Nije moguće čitati CD."
+
+msgid "Could not open CD device for reading."
+msgstr "CD uređaj nije moguće otvoriti za čitanje."
+
+msgid "Disc is not an Audio CD."
+msgstr "Disk nije Audio CD."
+
+msgid "Could not open DVD"
+msgstr "DVD nije moguće otvoriti"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Nije moguće otvoriti DVD naslov %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Nije uspjelo otvoriti poglavlje %d DVD naslova %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Nije moguće otvoriti DVD naslov %d. Ovaj element ne podržava interaktivne "
+"naslove"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"DVD nije moguće čitati. DVD je možda je šifriran a biblioteka za "
+"dešifriranje\n"
+"nije instalirana."
+
+msgid "Could not read DVD."
+msgstr "DVD nije moguće čitati."
+
+msgid "This stream contains no data."
+msgstr "Ovaj protok ne sadrži podatke."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Konfiguracija LAME mp3 audiokodera nije uspjela. Provjerite parametre "
+#~ "kodiranja."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Tražena brzina (bitrate) %d kbit/s za svojstvo „%s“ nije dopuštena. "
+#~ "Brzina (bitrate) je promijenjena u %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Konfiguracija TwoLAME kodera nije uspjela. Provjerite parametre kodiranja."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Interna greška toka (stream) podataka."
diff --git a/subprojects/gst-plugins-ugly/po/hu.po b/subprojects/gst-plugins-ugly/po/hu.po
new file mode 100644 (file)
index 0000000..ed48784
--- /dev/null
@@ -0,0 +1,94 @@
+# Hungarian translation of gst-plugins-ugly
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+#
+# Gabor Kelemen <kelemeng@gnome.hu>, 2007, 2008, 2009, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-11-30 15:02+0100\n"
+"Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
+"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
+"Language: hu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.4\n"
+"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
+
+msgid "Could not read from CD."
+msgstr "A CD nem olvasható."
+
+msgid "Could not open CD device for reading."
+msgstr "Nem nyitható meg a CD eszköz olvasásra."
+
+msgid "Disc is not an Audio CD."
+msgstr "A lemez nem hang CD."
+
+msgid "Could not open DVD"
+msgstr "A DVD nem nyitható meg"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Nem nyitható meg a(z) %d. DVD cím"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "A(z) $%2d. DVD cím $%1d. fejezetére ugrás meghiúsult"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Nem nyitható meg a(z) %d. DVD cím. Ez az elem nem támogatja az interaktív "
+"címeket."
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Nem olvasható a DVD. Ezt az okozhatja, hogy a DVD titkosított, és a DVD-"
+"visszafejtő programkönyvtár nincs telepítve."
+
+msgid "Could not read DVD."
+msgstr "Nem olvasható a DVD."
+
+msgid "This stream contains no data."
+msgstr "Ez az adatfolyam nem tartalmaz adatokat."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "A LAME MP3 hangkódoló beállítása meghiúsult. Ellenőrizze a kódolás "
+#~ "beállításait."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "A kért %d kbit/s bitsebesség nem engedélyezett a(z) „%s” tulajdonsághoz. "
+#~ "A bitsebesség módosítva %d kbit/s-re."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "A TwoLAME kódoló beállítása meghiúsult. Ellenőrizze a kódolás "
+#~ "beállításait."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Belső adatfolyam-hiba."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "A DVD címinformációi érvénytelenek."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "A DVD címinformációi nem olvashatók."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Nem nyitható meg a DVD eszköz („%s”)."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "A PGC alapú keresés beállítása meghiúsult."
diff --git a/subprojects/gst-plugins-ugly/po/id.po b/subprojects/gst-plugins-ugly/po/id.po
new file mode 100644 (file)
index 0000000..79e3f50
--- /dev/null
@@ -0,0 +1,90 @@
+# Indonesian translations for gst-plugins-ugly package.
+# This file is put in the public domain.
+# Andhika Padmawan <andhika.padmawan@gmail.com>, 2009-2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.2.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2013-11-09 15:57+0100\n"
+"PO-Revision-Date: 2014-01-27 20:04+0700\n"
+"Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n"
+"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
+"Language: id\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ext/cdio/gstcdiocddasrc.c:199
+msgid "Could not read from CD."
+msgstr "Tak dapat membaca dari CD."
+
+#: ext/cdio/gstcdiocddasrc.c:406
+msgid "Could not open CD device for reading."
+msgstr "Tak dapat membuka divais CD untuk dibaca."
+
+#: ext/cdio/gstcdiocddasrc.c:413
+msgid "Disc is not an Audio CD."
+msgstr "Cakram bukan CD Audio."
+
+#: ext/dvdread/dvdreadsrc.c:228 ext/dvdread/dvdreadsrc.c:235
+msgid "Could not open DVD"
+msgstr "Tak dapat membuka DVD"
+
+#: ext/dvdread/dvdreadsrc.c:242 ext/dvdread/dvdreadsrc.c:618
+#: ext/dvdread/dvdreadsrc.c:625
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Tak dapat membuka judul DVD %d"
+
+#: ext/dvdread/dvdreadsrc.c:248
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Gagal pergi ke bab %d dari judul DVD %d"
+
+#: ext/dvdread/dvdreadsrc.c:632
+#, c-format
+msgid "Could not open DVD title %d. Interactive titles are not supported by this element"
+msgstr "Tak dapat membuka judul DVD %d. Judul interaktif tidak didukung oleh elemen ini"
+
+#: ext/dvdread/dvdreadsrc.c:985
+msgid "Could not read DVD. This may be because the DVD is encrypted and a DVD decryption library is not installed."
+msgstr "Tak dapat membaca DVD. Hal ini karena DVD terenkripsi dan pustaka dekripsi DVD tidak diinstal."
+
+#: ext/dvdread/dvdreadsrc.c:988
+msgid "Could not read DVD."
+msgstr "Tak dapat membaca DVD."
+
+#: ext/lame/gstlamemp3enc.c:394
+msgid "Failed to configure LAME mp3 audio encoder. Check your encoding parameters."
+msgstr "Gagal mengatur penyandi audio mp3 LAME. Cek parameter penyandian anda."
+
+#: ext/lame/gstlamemp3enc.c:426 ext/twolame/gsttwolamemp2enc.c:486
+#, c-format
+msgid "The requested bitrate %d kbit/s for property '%s' is not allowed. The bitrate was changed to %d kbit/s."
+msgstr "Bitrasi %d kbit/s yang diminta untuk properti '%s' tidak diizinkan. Bitrasi diubah ke %d kbit/s."
+
+#: ext/twolame/gsttwolamemp2enc.c:411
+msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+msgstr "Gagal mengatur penyandi TwoLAME. Cek parameter penyandian anda."
+
+#: gst/asfdemux/gstasfdemux.c:412
+msgid "This stream contains no data."
+msgstr "Arus ini tidak berisi data."
+
+#: gst/asfdemux/gstasfdemux.c:419 gst/asfdemux/gstasfdemux.c:1971
+msgid "Internal data stream error."
+msgstr "Galat arus data internal."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Informasi judul tidak sah pada DVD."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Tak dapat membaca informasi judul untuk DVD."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Gagal membuka divais DVD '%s'."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Gagal mengatur pencarian berbasis PGC."
diff --git a/subprojects/gst-plugins-ugly/po/it.po b/subprojects/gst-plugins-ugly/po/it.po
new file mode 100644 (file)
index 0000000..2298788
--- /dev/null
@@ -0,0 +1,98 @@
+# Italian translation for gst-plugins-ugly package of GStreamer project.
+# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 GStreamer core team
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Luca Ferretti <elle.uca@infinito.it>, 2007, 2008, 2009.Luca Ferretti <elle.uca@infinito.it>, 2009.
+# Sebastiano Pistore <sebastianopistore.info@protonmail.ch>", 2017.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.10.0\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2017-09-15 09:56+0200\n"
+"Last-Translator: Sebastiano Pistore <sebastianopistore.info@protonmail.ch>\n"
+"Language-Team: Italian <tp@lists.linux.it>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 2.0.3\n"
+
+msgid "Could not read from CD."
+msgstr "Impossibile leggere dal CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Impossibile aprire il dispositivo CD in lettura."
+
+msgid "Disc is not an Audio CD."
+msgstr "Il disco non è un CD audio."
+
+msgid "Could not open DVD"
+msgstr "Impossibile aprire il DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Impossibile aprire il titolo %d del DVD"
+
+# go --> open (più comune in italiano)
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Apertura del capitolo %d del titolo %d del DVD non riuscita"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Impossibile aprire il titolo %d del DVD. I titoli interattivi non sono "
+"supportati da questo elemento"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Impossibile leggere il DVD. Questo potrebbe essere dovuto al fatto che il "
+"DVD è crittografato ed all'assenza nel sistema di una libreria di decodifica "
+"DVD."
+
+msgid "Could not read DVD."
+msgstr "Impossibile leggere il DVD."
+
+# NEW
+msgid "This stream contains no data."
+msgstr "Questo flusso non contiene dati."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Configurazione dell'encoder LAME mp3 non riuscita. Verificare i parametri "
+#~ "di codifica."
+
+# NEW
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Il bitrate richiesto di %d kbit/s per la proprietà «%s» non è consentito. "
+#~ "Il bitrate è stato cambiato a %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Configurazione dell'encoder TwoLAME non riuscita. Verificare i parametri "
+#~ "di codifica."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Informazioni del titolo non valide sul DVD."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Impossibile leggere le informazioni del titolo per il DVD."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Apertura del device DVD «%s» non riuscita."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Impostazione del posizionamento basato su PGC non riuscita."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Errore interno dello stream di dati."
diff --git a/subprojects/gst-plugins-ugly/po/ja.po b/subprojects/gst-plugins-ugly/po/ja.po
new file mode 100644 (file)
index 0000000..7c6d48a
--- /dev/null
@@ -0,0 +1,94 @@
+# Japanese translation of gst-plugins-ugly
+# Copyright (C) 2007, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Makoto Kato <makoto.kt@gmail.com>, 2009-2011
+# Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>, 2012
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-12-22 19:42+0900\n"
+"Last-Translator: Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>\n"
+"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.5.4\n"
+
+msgid "Could not read from CD."
+msgstr "CDを読むことができません。"
+
+msgid "Could not open CD device for reading."
+msgstr "読み込み用にCDデバイスを開くことができません。"
+
+msgid "Disc is not an Audio CD."
+msgstr "ディスクは音声CDではありません。"
+
+msgid "Could not open DVD"
+msgstr "DVDを開くことができません"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "DVDタイトル %d を開くことができません"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "DVDタイトル %2$d のチャプター %1$d へ移動できません"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"DVDタイトル %d を開くことができません。この要素はインタラクティブタイトルをサ"
+"ポートしていません。"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"DVDを読み込むことができませんでした。DVDが暗号化されているかDVDを解読するライ"
+"ブラリがインストールされていないからかもしれません。"
+
+msgid "Could not read DVD."
+msgstr "DVDを読み込むことができません。"
+
+msgid "This stream contains no data."
+msgstr "このストリームはデータを含んでいません。"
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "LAME MP3 音声エンコーダーの構成に失敗しました。エンコーディングパラメータ"
+#~ "をチェックしてください。"
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "要求されたビットレート %d kbit/s はプロパティ '%s' では許可されません。そ"
+#~ "のためビットレートは %d kbit/s へ変更されました。"
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "TwoLAMEエンコーダーの構成に失敗しました。エンコード用のパラメータをチェッ"
+#~ "クしてください。"
+
+#~ msgid "Internal data stream error."
+#~ msgstr "内部データストリームエラー。"
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "DVD上のタイトル情報が不正です。"
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "DVDからタイトル情報を読み込むことができません。"
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "DVDデバイス '%s' を開くことができません。"
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "プログラム・チェーン (PGC) のシークに失敗しました。"
diff --git a/subprojects/gst-plugins-ugly/po/lt.po b/subprojects/gst-plugins-ugly/po/lt.po
new file mode 100644 (file)
index 0000000..59263df
--- /dev/null
@@ -0,0 +1,103 @@
+# translation of gst-plugins-ugly-0.10.7.2 to Lithuanian
+# This file is put in the public domain.
+#
+# Gintautas Miliauskas <gintas@akl.lt>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly-0.10.7.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2008-05-14 02:52+0300\n"
+"Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n"
+"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
+"Language: lt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms:  nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n"
+"%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#, fuzzy
+msgid "Could not read from CD."
+msgstr "Nepavyko perskaityti DVD įrašo informacijos."
+
+#, fuzzy
+msgid "Could not open CD device for reading."
+msgstr "Nepavyko atverti %d DVD įrašo"
+
+msgid "Disc is not an Audio CD."
+msgstr ""
+
+msgid "Could not open DVD"
+msgstr "Nepavyko atverti DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Nepavyko atverti %d DVD įrašo"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Nepavyko peršokti į %2$d DVD įrašo %1$d dalį"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Nepavyko atverti %d DVD įrašo. Šis elementas nepalaiko interaktyvių įrašų"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not read DVD."
+msgstr "Nepavyko atverti DVD"
+
+msgid "This stream contains no data."
+msgstr "Šiame sraute nėra duomenų."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Nepavyko sukonfigūruoti LAME kodavimo programos. Patikrinkite kodavimo "
+#~ "parametrus."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Pageidautas bitų dažnis %d kbit/s savybei „%s“ neleidžiamas. Bitų dažnis "
+#~ "pakeistas į %d kbit/s."
+
+#, fuzzy
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Nepavyko sukonfigūruoti LAME kodavimo programos. Patikrinkite kodavimo "
+#~ "parametrus."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Nepavyko sukonfigūruoti LAME kodavimo programos. Patikrinkite kodavimo "
+#~ "parametrus."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Netaisyklinga DVD įrašo informacija."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Nepavyko perskaityti DVD įrašo informacijos."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Nepavyko atverti DVD įrenginio „%s“."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Nepavyko nustatyti PGC paieškos."
+
+#~ msgid "This file is encrypted and cannot be played."
+#~ msgstr "Šis failas užšifruotas ir negali būti parodytas."
diff --git a/subprojects/gst-plugins-ugly/po/lv.po b/subprojects/gst-plugins-ugly/po/lv.po
new file mode 100644 (file)
index 0000000..b0bee10
--- /dev/null
@@ -0,0 +1,95 @@
+# Latvain translation of gst-plugins
+# This file is put in the public domain.
+# Arvis Lācis <arvis.lacis@inbox.lv>, 2009.
+# Rihards Prieditis <rprieditis@gmail.com>, 2011.
+# Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>, 2014.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.2.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2014-04-20 16:24+0300\n"
+"Last-Translator: Rihards Prieditis <rprieditis@gmail.com>\n"
+"Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n"
+"Language: lv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
+"2);\n"
+"X-Generator: Lokalize 1.5\n"
+
+msgid "Could not read from CD."
+msgstr "Nevarēja nolasīt no CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Nevarēja atvērt CD ierīci lasīšanai."
+
+msgid "Disc is not an Audio CD."
+msgstr "Disks nav Audio CD."
+
+msgid "Could not open DVD"
+msgstr "Nevarēja atvērt DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Nevarēja atvērt DVD nosaukumu %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Neizdevās pāriet uz %d nodaļu DVD nosaukumā %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Nevarēja atvērt DVD nosaukumu %d. Šis elements nenodrošina interaktīvos "
+"nosaukumus."
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Nevarēja nolasīt DVD. Iespējams, ka DVD ir šifrēts un DVD atšifrēšanas "
+"bibliotēka nav instalēta."
+
+msgid "Could not read DVD."
+msgstr "Nevarēja nolasīt DVD."
+
+msgid "This stream contains no data."
+msgstr "Šī straume nesatur datus."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Neizdevās konfigurēt LAME mp3 audio kodētāju. Pārbaudiet savus kodēšanas "
+#~ "parametrus."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Pieprasītais straumēšanas ātrums %d kbiti/s nepieciešamajai īpašībai “%s” "
+#~ "nav atļauts. Straumēšanas ātrums tika mainīts uz %d kbitiem/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Neizdevās konfigurēt TwoLAME kodētāju. Pārbaudiet savus kodēšanas "
+#~ "parametrus."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Iekšēja datu plūsmas kļūda."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Nederīga DVD virsraksta informācija."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Nevarēja nolasīt virsrakstu informāciju no DVD."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Neizdevās atvērt DVD ierīci \"%s\"."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Neizdevās uzstādīt PCG balstīto meklēšanu."
diff --git a/subprojects/gst-plugins-ugly/po/meson.build b/subprojects/gst-plugins-ugly/po/meson.build
new file mode 100644 (file)
index 0000000..2657c01
--- /dev/null
@@ -0,0 +1,3 @@
+i18n = import('i18n')
+
+i18n.gettext('gst-plugins-ugly-1.0', preset: 'glib')
diff --git a/subprojects/gst-plugins-ugly/po/ms.po b/subprojects/gst-plugins-ugly/po/ms.po
new file mode 100644 (file)
index 0000000..df644d8
--- /dev/null
@@ -0,0 +1,94 @@
+# translation of gst-plugins-ugly-0.10.11.2.po to Malay
+# This file is put in the public domain.
+#
+# Muhammad Najmi bin Ahmad Zabidi <najmi.zabidi@gmail.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly-0.10.11.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2009-07-16 15:07+0800\n"
+"Last-Translator: Muhammad Najmi bin Ahmad Zabidi <najmi.zabidi@gmail.com>\n"
+"Language-Team: Malay <translation-team-ms@lists.sourceforge.net>\n"
+"Language: ms\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+msgid "Could not read from CD."
+msgstr "Tidak dapat baca dari CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Tidak dapat buka peranti CD untuk baca."
+
+msgid "Disc is not an Audio CD."
+msgstr "Cakera bukan CD Audio"
+
+msgid "Could not open DVD"
+msgstr "Tidak dapat buka DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Tidak dapat buka tajuk %d DVD"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Gagal untuk ke bab %d pata tajuk DVD %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Gagal buka tajuk %d DVD. Tajuk interaktrif tidak disokong oleh elemen ini"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not read DVD."
+msgstr "Tidak dapat buka DVD"
+
+msgid "This stream contains no data."
+msgstr "Aliran ini tiada data."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Gagal mengkonfigur pengenkod TwoLAME. Periksa parameter pengenkod anda."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Kadarbit %d yang diminta untuk properti '%s' tidak dibenarkan. Kadarbit "
+#~ "telah ditukar ke %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Gagal mengkonfigur pengenkod TwoLAME. Periksa parameter pengenkod anda."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Ralat aliran data dalaman."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
+#~ msgstr "Gagal mengkonfigur pengekod LAME. Periksa parameter pengenkod anda."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Maklumat tajuk pada DVD tidak sah."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Tidak dapat baca maklumat tajuk pada DVD."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Gagal membuka peranti DVD %s'."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Gagal untuk menetapkan carian berasaskan PGC."
diff --git a/subprojects/gst-plugins-ugly/po/mt.po b/subprojects/gst-plugins-ugly/po/mt.po
new file mode 100644 (file)
index 0000000..e782f13
--- /dev/null
@@ -0,0 +1,99 @@
+# Maltese translation for gst-plugins-ugly.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# NAME OF AUTHOR <michelbugeja@rabatmalta.com>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly-0.10.9.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2008-11-13 18:18+0100\n"
+"Last-Translator: Michel Bugeja <michelbugeja@rabatmalta.com>\n"
+"Language-Team: Maltese <translation-team-mt@lists.sourceforge.net>\n"
+"Language: mt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Maltese\n"
+"X-Poedit-Country: Malta\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid "Could not read from CD."
+msgstr "Ma nistax naqra mis-CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Ma nistax niftaħ is-CD biex naqra."
+
+msgid "Disc is not an Audio CD."
+msgstr "Id-diska mijhiex CD tal-awdjo."
+
+msgid "Could not open DVD"
+msgstr "Ma nistax niftaħ DVD."
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Ma nistax niftaħ titlu %d tad-DVD"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Problema biex immur kapitlu %d mit-titlu %d tad-DVD"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Ma nistax niftaħ titlu %d tad-DVD. Titli nterattivi mhux issapportjati minn "
+"dan l-element"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not read DVD."
+msgstr "Ma nistax niftaħ DVD."
+
+msgid "This stream contains no data."
+msgstr "L-istream ma fiha l-ebda data."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Problema biex nissetja LAME encoder. Iċċekkja l-parametri tal-encoding."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Mhux permess il-bitrate %d kbit/s rikjesta għal '%s'. Għalhekk il-bitrate "
+#~ "ġiet mibdula għal %d kbit/s."
+
+#, fuzzy
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Problema biex nissetja LAME encoder. Iċċekkja l-parametri tal-encoding."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Problema interna fid-data stream."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Problema biex nissetja LAME encoder. Iċċekkja l-parametri tal-encoding."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "L-informazzjoni tat-titlu tad-DVD mhux validu."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Ma nistax naqra l-informazzjoni tat-titlu tad-DVD."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Problema biex niftaħ l-apparat tad-DVD '%s'."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Problema biex nissettja tfittxija bbażata fuq PGC."
diff --git a/subprojects/gst-plugins-ugly/po/nb.po b/subprojects/gst-plugins-ugly/po/nb.po
new file mode 100644 (file)
index 0000000..8f41f95
--- /dev/null
@@ -0,0 +1,91 @@
+# Norwegian bokmaal translation of gst-plugins-ugly.
+# This file is put in the public domain.
+#
+# Kjartan Maraas <kmaraas@gnome.org>, 2004-2007.
+# Johnny A. Solbu <johnny@solbu.net>, 2012
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-12-21 21:38+0100\n"
+"Last-Translator: Johnny A. Solbu <johnny@solbu.net>\n"
+"Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
+"Language: nb_NO\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.5.4\n"
+
+msgid "Could not read from CD."
+msgstr "Kunne ikke lese fra CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Kunne ikke åpne CD-enheten for lesing."
+
+msgid "Disc is not an Audio CD."
+msgstr "Disken er ikke en lyd-CD."
+
+msgid "Could not open DVD"
+msgstr "Kunne ikke åpne DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Kunne ikke åpne DVD-tittel %d."
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Klarte ikke å gå til kapittel %d på DVD tittel %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Kunne ikke åpne DVD-tittel %d. Interaktive titler er ikke støttet av dette "
+"elementet"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Kunne ikke lese DVD-en. Dette kan være fordi DVD-en er kryptert DVD-"
+"dekrypteringsbiblioteket ikke er installert."
+
+msgid "Could not read DVD."
+msgstr "Kunne ikke lese DVD"
+
+msgid "This stream contains no data."
+msgstr "Denne strømmen inneholde ikke data."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr "Kunne ikke konfigurere LAME-koder. Sjekk parametere for kodingen."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Forespurt bitrate %d kbit/s for egenskap «%s» er ikke tillatt. Bitraten "
+#~ "ble endret til %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Kunne ikke konfigurere TwoLAME-enkoder. Sjekk parameterene for kodingen."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Intern feil i datastrøm."
+
+#~ msgid "This file is encrypted and cannot be played."
+#~ msgstr "Denne filen er kryptert og kan ikke spilles av."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Ugyldig tittelinformasjon på DVD."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Kunne ikke åpne DVD-enhet «%s»."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Kunne ikke sette PGC-basert søking."
diff --git a/subprojects/gst-plugins-ugly/po/nl.po b/subprojects/gst-plugins-ugly/po/nl.po
new file mode 100644 (file)
index 0000000..7a69672
--- /dev/null
@@ -0,0 +1,95 @@
+# translation of gst-plugins-ugly-1.10.0.nl.po to Dutch
+# Copyright (C) 2004, 2007, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Freek de Kruijf <f.de.kruijf@gmail.com>, 2007, 2008, 2009, 2011, 2012, 2014, 2017.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.10.0\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2017-10-24 23:30+0100\n"
+"Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
+"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+msgid "Could not read from CD."
+msgstr "Kan niet van de cd lezen."
+
+msgid "Could not open CD device for reading."
+msgstr "Kan het CD-apparaat niet openen voor lezen."
+
+msgid "Disc is not an Audio CD."
+msgstr "De schrijf is geen audio-CD"
+
+msgid "Could not open DVD"
+msgstr "Kan DVD niet openen"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Kan DVD-titel %d niet openen"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Kan niet naar hoofdstuk %d van DVD-titel %d gaan"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Kan de DVD-titel %d niet openen. Interactieve titels worden door dit element "
+"niet ondersteund"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Kon dvd niet lezen. Dit kan veroorzaakt zijn omdat de dvd versleuteld is en "
+"een bibliotheek voor ontcijferen van een dvd niet is geïnstalleerd."
+
+msgid "Could not read DVD."
+msgstr "Kon dvd niet lezen"
+
+msgid "This stream contains no data."
+msgstr "Deze stroom bevat geen gegevens."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Instellen van de LAME mp3-encoder is mislukt. Controleer uw parameters "
+#~ "voor codering."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "De gevraagde bitsnelheid %d kbits/s voor eigenschap '%s' is niet "
+#~ "toegestaan. De bitsnelheid is gewijzigd in %d kbits/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Kan de TwoLAME-encoder niet configureren. Controleer uw "
+#~ "encodingparameters."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Fout met interne gegevensstroom."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Ongeldige titelinformatie op de DVD."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Kan de titelinformatie van de DVD niet lezen."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Kan het DVD-apparaat '%s' niet openen."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Kan op PGC gebaseerd zoeken niet instellen."
diff --git a/subprojects/gst-plugins-ugly/po/or.po b/subprojects/gst-plugins-ugly/po/or.po
new file mode 100644 (file)
index 0000000..ec93527
--- /dev/null
@@ -0,0 +1,255 @@
+# Oriya translation of gst-plugins-0.8.3.pot.
+# Copyright (C) 2004, Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-0.8.3 package.
+# Gora Mohanty <gora_mohanty@yahoo.co.in>, 2004.
+# $Id$
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-0.8.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2004-09-27 13:32+0530\n"
+"Last-Translator: Gora Mohanty <gora_mohanty@yahoo.co.in>\n"
+"Language-Team: Oriya <gora_mohanty@yahoo.co.in>\n"
+"Language: or\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#, fuzzy
+msgid "Could not read from CD."
+msgstr "\"%s\" ଫାଇଲ ଲେଖିହେଲା ନାହିଁ."
+
+msgid "Could not open CD device for reading."
+msgstr "ସି.ଡି. ଯନ୍ତ୍ର ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#, fuzzy
+msgid "Disc is not an Audio CD."
+msgstr "ଯନ୍ତ୍ର ଖୋଲାଯାଇ ନାହିଁ."
+
+msgid "Could not open DVD"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not open DVD title %d"
+msgstr "ଭି.ଏଫ.ଏସ. ଫାଇଲ \"%s\" ବନ୍ଦ କରିହେଲା ନାହିଁ."
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr ""
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not read DVD."
+msgstr "\"%s\" ଫାଇଲ ଲେଖିହେଲା ନାହିଁ."
+
+msgid "This stream contains no data."
+msgstr ""
+
+#, fuzzy
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "\"%s\" ଫାଇଲ ଲେଖିହେଲା ନାହିଁ."
+
+#, fuzzy
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "ଭି.ଏଫ.ଏସ. ଫାଇଲ \"%s\" ବନ୍ଦ କରିହେଲା ନାହିଁ."
+
+#~ msgid "Could not open file \"%s\" for writing."
+#~ msgstr "\"%s\" ଫାଇଲ ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#~ msgid "Error closing file \"%s\"."
+#~ msgstr "\"%s\" ଫାଇଲ ବନ୍ଦ କରିବାରେ ତ୍ରୁଟି."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "\"%s\" ଫାଇଲ ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#~ msgid "No filename specified."
+#~ msgstr "କୌଣସି ଫାଇଲନାମ ଉଲ୍ଲେଖିତ ହୋଇ ନାହିଁ."
+
+#~ msgid "No or invalid input audio, AVI stream will be corrupt."
+#~ msgstr "ନିବେଶ ଧ୍ବନି ନାହିଁ ବା ଅବୈଧ ଅଛି. ଏ.ଭି.ଆଇ. ଧାରା ଭ୍ରଷ୍ଟ ହୋଇଯିବ."
+
+#~ msgid "Could not open audio device \"%s\" for writing."
+#~ msgstr "\"%s\" ଧ୍ବନି ଯନ୍ତ୍ର ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#~ msgid "Could not open control device \"%s\" for writing."
+#~ msgstr "\"%s\" ନିୟନ୍ତ୍ରଣ ଯନ୍ତ୍ର ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#~ msgid "Could not configure audio device \"%s\"."
+#~ msgstr "\"%s\" ଧ୍ବନି ଯନ୍ତ୍ର ବିନ୍ଯାସ କରିହେଲା ନାହିଁ."
+
+#~ msgid "Could not set audio device \"%s\" to %d Hz."
+#~ msgstr "\"%s\" ଧ୍ବନି ଯନ୍ତ୍ରକୁ %d ହର୍ଜରେ ବିନ୍ଯାସ କରିହେଲା ନାହିଁ."
+
+#~ msgid "Could not close audio device \"%s\"."
+#~ msgstr "\"%s\" ଧ୍ବନି ଯନ୍ତ୍ର ବନ୍ଦ କରିହେଲା ନାହିଁ."
+
+#~ msgid "Could not close control device \"%s\"."
+#~ msgstr "\"%s\" ନିୟନ୍ତ୍ରଣ ଯନ୍ତ୍ର ବନ୍ଦ କରିହେଲା ନାହିଁ."
+
+#~ msgid "Could not open video device \"%s\" for writing."
+#~ msgstr "\"%s\" ଭିଡିଓ ଯନ୍ତ୍ର ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#~ msgid "Could not close video device \"%s\"."
+#~ msgstr "\"%s\" ଭିଡିଓ ଯନ୍ତ୍ର ବନ୍ଦ କରିହେଲା ନାହିଁ."
+
+#~ msgid "Could not write to device \"%s\"."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ରରେ ଲେଖିହେଲା ନାହିଁ."
+
+#~ msgid "OSS device \"%s\" is already in use by another program."
+#~ msgstr "\"%s\" ଓ.ଏସ.ଏସ. ଯନ୍ତ୍ର ପୂର୍ବରୁ ଅନ୍ଯ କାରିକା ଦ୍ବାରା ବ୍ଯବହାର କରାଯାଉଛି."
+
+#~ msgid "Could not access device \"%s\", check its permissions."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ର ବ୍ଯବହାର କରିହେଲା ନାହିଁ, ତାହାର ଅନୁମତି ଦେଖନ୍ତୁ."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ର ଅବସ୍ଥିତ ନାହିଁ."
+
+#~ msgid "Could not open device \"%s\" for writing."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ର ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#~ msgid "Could not open device \"%s\" for reading."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ର ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#~ msgid "Your OSS device could not be probed correctly"
+#~ msgstr "ଆପଣଙ୍କର ଓ.ଏସ.ଏସ. ଯନ୍ତ୍ରର ଠିକ ଭାବରେ ଅନୁସନ୍ଧାନ କରିହେଲା ନାହିଁ."
+
+#~ msgid "Volume"
+#~ msgstr "ପ୍ରବଳତା"
+
+#~ msgid "Bass"
+#~ msgstr "ଅନୁଚ୍ଚ ସ୍ବର"
+
+#~ msgid "Treble"
+#~ msgstr "ଉଚ୍ଚ ସ୍ବର"
+
+#~ msgid "Synth"
+#~ msgstr "ସିନ୍ଥେସାଇଜର"
+
+#~ msgid "PCM"
+#~ msgstr "ପି.ସି.ଏମ."
+
+#~ msgid "Speaker"
+#~ msgstr "ସ୍ବରବର୍ଦ୍ଧକ ୟନ୍ତ୍ର"
+
+#~ msgid "Line-in"
+#~ msgstr "ଲାଇନ-ଇନ"
+
+#~ msgid "Microphone"
+#~ msgstr "ମାଇକ୍ରୋଫୋନ୍"
+
+#~ msgid "CD"
+#~ msgstr "ସି.ଡି."
+
+#~ msgid "Mixer"
+#~ msgstr "ମିଶ୍ରଣ ଯନ୍ତ୍ର"
+
+#~ msgid "PCM-2"
+#~ msgstr "ପି.ସି.ଏମ.-୨"
+
+#~ msgid "Record"
+#~ msgstr "ଅନୁଲିପିକରଣ"
+
+#~ msgid "In-gain"
+#~ msgstr "ନିବେଶ-ବୃଦ୍ଧି"
+
+#~ msgid "Out-gain"
+#~ msgstr "ନିର୍ଗମ-ବୃଦ୍ଧି"
+
+#~ msgid "Line-1"
+#~ msgstr "ଲାଇନ-୧"
+
+#~ msgid "Line-2"
+#~ msgstr "ଲାଇନ-୨"
+
+#~ msgid "Line-3"
+#~ msgstr "ଲାଇନ-୩"
+
+#~ msgid "Digital-1"
+#~ msgstr "ସାଂଖ୍ଯିକ-୧"
+
+#~ msgid "Digital-2"
+#~ msgstr "ସାଂଖ୍ଯିକ-୨"
+
+#~ msgid "Digital-3"
+#~ msgstr "ସାଂଖ୍ଯିକ-୩"
+
+#~ msgid "Phone-in"
+#~ msgstr "ଫୋନ-ନିବେଶ"
+
+#~ msgid "Phone-out"
+#~ msgstr "ଫୋନ-ନିର୍ଗମ"
+
+#~ msgid "Video"
+#~ msgstr "ଭିଡିଓ"
+
+#~ msgid "Radio"
+#~ msgstr "ରେଡିଓ"
+
+#~ msgid "Monitor"
+#~ msgstr "ପ୍ରଦର୍ଶିକା"
+
+#, fuzzy
+#~ msgid "PC Speaker"
+#~ msgstr "ସ୍ବରବର୍ଦ୍ଧକ ୟନ୍ତ୍ର"
+
+#~ msgid "Could not open vfs file \"%s\" for reading."
+#~ msgstr "ଭି.ଏଫ.ଏସ. ଫାଇଲ \"%s\" ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#, fuzzy
+#~ msgid "No filename given."
+#~ msgstr "କୌଣସି ଫାଇଲନାମ ଦିଆଯାଇ ନାହିଁ"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "ଭି.ଏଫ.ଏସ. ଫାଇଲ \"%s\" ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "କୌଣସି ଫାଇଲନାମ ଦିଆଯାଇ ନାହିଁ"
+
+#, fuzzy
+#~ msgid "Your OSS device doesn't support mono or stereo."
+#~ msgstr "ଆପଣଙ୍କର ଓ.ଏସ.ଏସ. ଯନ୍ତ୍ରର ଠିକ ଭାବରେ ଅନୁସନ୍ଧାନ କରିହେଲା ନାହିଁ."
+
+#~ msgid "No device specified."
+#~ msgstr "କୌଣସି ଯନ୍ତ୍ର ଉଲ୍ଲେଖିତ କରାଯାଇ ନାହିଁ."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ର ପଢ଼ିବା ଓ ଲେଖିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+#~ msgid "Device is open."
+#~ msgstr "ଯନ୍ତ୍ର ଖୋଲାଯାଇଚ୍ଛି."
+
+#~ msgid "Device \"%s\" is not a capture device."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ର ଗୋଟିଏ ଅନୁଲିପିକାର ନୁହେଁ."
+
+#~ msgid "Could not get buffers from device \"%s\"."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ରରୁ ଅସ୍ଥାୟୀ ସଞ୍ଚୟ ସ୍ଥାନ ଆଣିହେଲା ନାହିଁ."
+
+#~ msgid "Could not get enough buffers from device \"%s\"."
+#~ msgstr "\"%s\" ଯନ୍ତ୍ରରୁ ପର୍ଯ୍ଯାପ୍ତ ଅସ୍ଥାୟୀ ସଞ୍ଚୟ ସ୍ଥାନ ଆଣିହେଲା ନାହିଁ."
+
+#~ msgid ""
+#~ "The %s element could not be found. This element is essential for "
+#~ "playback. Please install the right plug-in and verify that it works by "
+#~ "running 'gst-inspect %s'"
+#~ msgstr ""
+#~ "%s ଉପାଦାନ ମିଳିଲା ନାହିଁ. ପୁନଃପ୍ରଦର୍ଶନ ପାଇଁ ଏହି ଉପାଦାନଟି ଆବଶ୍ଯକ. ଦୟା କରି ସଠିକ ପ୍ଲଗ୍ଇନ୍ "
+#~ "ସ୍ଥାପିତ କରନ୍ତୁ, ଓ 'gst-inspect %s' ଚଳାଇ ଯାଞ୍ଚ କରନ୍ତୁ କି ଏହା କାର୍ଯ୍ଯକାରୀ ଅଛି"
+
+#~ msgid ""
+#~ "No usable colorspace element could be found.\n"
+#~ "Please install one and restart."
+#~ msgstr ""
+#~ "କୌଣସି ବ୍ଯବହାରଯୋଗ୍ଯ ରଙ୍ଗକ୍ଷେତ୍ର ଉପାଦାନ ମିଳିଲା ନାହିଁ.\n"
+#~ "ଦୟା କରି ଗୋଟିଏ ଉପାଦାନ ସ୍ଥାପିତ କରି ପୁନଃପ୍ରାରମ୍ଭ କରନ୍ତୁ."
diff --git a/subprojects/gst-plugins-ugly/po/pl.po b/subprojects/gst-plugins-ugly/po/pl.po
new file mode 100644 (file)
index 0000000..5748aa5
--- /dev/null
@@ -0,0 +1,79 @@
+# Polish translation for gst-plugins-ugly.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Jakub Bogusz <qboosh@pld-linux.org>, 2007-2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-11-28 19:34+0100\n"
+"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
+"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Could not read from CD."
+msgstr "Odczyt z CD nie powiódł się."
+
+msgid "Could not open CD device for reading."
+msgstr "Nie udało się otworzyć urządzenia CD do odczytu."
+
+msgid "Disc is not an Audio CD."
+msgstr "Płyta nie jest płytą CD Audio."
+
+msgid "Could not open DVD"
+msgstr "Nie udało się otworzyć DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Nie udało się otworzyć tytułu DVD %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Nie udało się przemieścić do rozdziału %d tytułu DVD %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Nie udało się otworzyć tytułu DVD %d. Interaktywne tytułu nie są obsługiwane "
+"przez ten element"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Nie udało się odczytać DVD. Powodem może być to, że płyta jest zaszyfrowana, "
+"a biblioteka odszyfrowująca nie została zainstalowana."
+
+msgid "Could not read DVD."
+msgstr "Nie udało się odczytać DVD."
+
+msgid "This stream contains no data."
+msgstr "Ten strumień nie zawiera danych."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Nie udało się skonfigurować kodera dźwięku mp3 LAME. Proszę sprawdzić "
+#~ "parametry kodowania."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Żądana prędkość bitowa %d kbit/s dla właściwości '%s' nie jest dozwolona. "
+#~ "Prędkość bitowa zmieniona na %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Nie udało się skonfigurować kodera TwoLAME. Proszę sprawdzić parametry "
+#~ "kodowania."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Błąd wewnętrzny strumienia danych."
diff --git a/subprojects/gst-plugins-ugly/po/pt_BR.po b/subprojects/gst-plugins-ugly/po/pt_BR.po
new file mode 100644 (file)
index 0000000..586f642
--- /dev/null
@@ -0,0 +1,98 @@
+# Brazilian Portuguese translation of gst-plugins-ugly.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Copyright (C) 2007-2013 Free Software Foundation, Inc.
+# Raphael Higino <In memoriam>, 2007.
+# Fabrício Godoy <skarllot@gmail.com>, 2008-2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly-1.7.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2015-12-28 19:54-0200\n"
+"Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
+"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
+"net>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+msgid "Could not read from CD."
+msgstr "Não foi possível ler as informações do CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Não foi possível abrir o dispositivo de CD para leitura."
+
+msgid "Disc is not an Audio CD."
+msgstr "O disco não é um CD de áudio."
+
+msgid "Could not open DVD"
+msgstr "Não foi possível abrir o DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Não foi possível abrir o título %d do DVD"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Falha ao avançar para o capítulo %d do título %d do DVD"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Não foi possível abrir o título %d do DVD. Não há suporte a títulos "
+"interativos por este elemento"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Não foi possível ler o DVD. O motivo pode ser que o DVD está criptografado e "
+"uma biblioteca de descriptografia de DVD não está instalada."
+
+msgid "Could not read DVD."
+msgstr "Não foi possível ler o DVD."
+
+msgid "This stream contains no data."
+msgstr "Este fluxo não contém dados."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Falha ao configurar o codificador de áudio MP3 LAME. Verifique seus "
+#~ "parâmetros de codificação."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "A taxa de bits, %d kbits/s, requisitada pela propriedade \"%s\" não é "
+#~ "permitida. A taxa de bits foi alterada para %d kbits/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Falha ao configurar o codificador TwoLAME. Verifique seus parâmetros de "
+#~ "codificação."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Erro interno no fluxo de dados."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "As informações de título no DVD são inválidas."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Não foi possível ler as informações de título do DVD."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Falha ao abrir o dispositivo de DVD \"%s\"."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Falha ao definir busca baseada em PGC."
+
+#~ msgid "This file is encrypted and cannot be played."
+#~ msgstr "Este arquivo está criptografado e não pôde ser reproduzido."
diff --git a/subprojects/gst-plugins-ugly/po/ro.po b/subprojects/gst-plugins-ugly/po/ro.po
new file mode 100644 (file)
index 0000000..34b9ec0
--- /dev/null
@@ -0,0 +1,85 @@
+# Romanian translation for gst-plugins-ugly
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Lucian Adrian Grijincu <lucian.grijincu@gmail.com>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 0.10.14.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2010-08-16 03:32+0300\n"
+"Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
+"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
+"Language: ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
+"20)) ? 1 : 2);;\n"
+"X-Generator: Virtaal 0.6.1\n"
+
+msgid "Could not read from CD."
+msgstr "Nu s-a putut citi de pe CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Nu s-a putut deschide dispozitivul CD pentru citire."
+
+msgid "Disc is not an Audio CD."
+msgstr "Discul nu este un CD audio."
+
+msgid "Could not open DVD"
+msgstr "Nu s-a putut deschide DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Nu s-a putut deschide titlul DVD %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Nu s-a putut sări la capitolul %d al titlului DVD %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Nu s-a putut deschide titlul DVD %d. Titlurile interactive nu sunt suportate "
+"de acest element"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not read DVD."
+msgstr "Nu s-a putut deschide DVD"
+
+msgid "This stream contains no data."
+msgstr "Fluxul acesta nu conține date."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Nu s-a putut configura codorul TwoLAME. Verificați parametrii de codare."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Rata de biți solicitată de %d kbiți/s pentru proprietatea „%s” nu este "
+#~ "permisă. Rata de biți a fost modificată la %d kbiți/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Nu s-a putut configura codorul TwoLAME. Verificați parametrii de codare."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Eroare internă a fluxului de date."
+
+#, fuzzy
+#~ msgid ""
+#~ "Failed to configure LAMEMP3ENC encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Nu s-a putut configura codorul LAME. Verificați parametrii de codare."
diff --git a/subprojects/gst-plugins-ugly/po/ru.po b/subprojects/gst-plugins-ugly/po/ru.po
new file mode 100644 (file)
index 0000000..3655689
--- /dev/null
@@ -0,0 +1,98 @@
+# Translation for gst-plugins-ugly messages to Russian
+# This file is put in the public domain.
+#
+# Артём Попов <artfwo@gmail.com>, 2009.
+# Pavel Maryanov <acid_jack@ukr.net>, 2009.
+# Yuri Kozlov <yuray@komyakino.ru>, 2011, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-12-01 13:38+0400\n"
+"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
+"Language-Team: Russian <gnu@mx.ru>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.4\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgid "Could not read from CD."
+msgstr "Не удалось прочесть CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Не удалось открыть CD-устройство для чтения."
+
+msgid "Disc is not an Audio CD."
+msgstr "Диск не в формате аудио-CD."
+
+msgid "Could not open DVD"
+msgstr "Не удалось открыть DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Не удалось открыть DVD-раздел %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Ошибка перехода к эпизоду %d DVD-раздела %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Не удалось открыть DVD-раздел %d. Интерактивные разделы не поддерживаются "
+"этим элементом"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Не удалось прочесть DVD. Это могло произойти из-за того, что DVD закодирован "
+"и не установлена библиотека декодирования DVD."
+
+msgid "Could not read DVD."
+msgstr "Не удалось прочесть DVD."
+
+msgid "This stream contains no data."
+msgstr "Поток не содержит данных."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Не удалось настроить аудио-кодировщик mp3 LAME. Проверьте параметры "
+#~ "кодирования."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Запрошенный битрейт в %d кбит/с для свойства «%s» недопустим. Битрейт был "
+#~ "изменён на %d кбит/с."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Не удалось настроить кодировщик TwoLAME. Проверьте параметры кодирования."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Внутренняя ошибка потока данных."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Неверные сведения о разделах на DVD."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Не удалось прочесть сведения о разделах для DVD."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Ошибка при открытии DVD-устройства «%s»."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Не удалось включить PGC-позиционирование."
+
+#~ msgid "This file is encrypted and cannot be played."
+#~ msgstr "Файл зашифрован и не может быть воспроизведён."
diff --git a/subprojects/gst-plugins-ugly/po/sk.po b/subprojects/gst-plugins-ugly/po/sk.po
new file mode 100644 (file)
index 0000000..77a1699
--- /dev/null
@@ -0,0 +1,289 @@
+# Czech translations of gst-plugins.
+# Copyright (C) 2004 gst-plugins' COPYRIGHT HOLDER
+# This file is put in the public domain.
+# Peter Tuhársky <tuharsky@misbb.sk>, 2007, 2009, 2010, 2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.2.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2014-01-30 10:28+0100\n"
+"Last-Translator: Peter Tuharsky <tuharsky@misbb.sk>\n"
+"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
+"Language: sk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Poedit-Language: Slovak\n"
+"X-Poedit-Country: SLOVAKIA\n"
+
+msgid "Could not read from CD."
+msgstr "Nepodarilo sa čítať z CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Nepodarilo sa otvoriť zariadenie CD na čítanie."
+
+msgid "Disc is not an Audio CD."
+msgstr "Tento disk nie je zvukové CD."
+
+msgid "Could not open DVD"
+msgstr "Nepodarilo sa otvoriť DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Nepodarilo sa otvoriť DVD titul %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Nepodarilo sa preskočiť na kapitolu %d pre DVD titul %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Nepodarilo sa otvoriť DVD titul %d. Interaktívne tituly nie sú podporované "
+"týmto prvkom"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Nepodarilo sa čítať DVD. Možno je DVD šifrované a nie je nainštalovaná "
+"dešifrovacia knižnica."
+
+msgid "Could not read DVD."
+msgstr "Nepodarilo sa čítať DVD."
+
+msgid "This stream contains no data."
+msgstr "Tento prúd neobsahuje žiadne údaje."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Nepodarilo sa nastaviť LAME mp3 enkodér. Skontrolujte svoje kódovacie "
+#~ "nastavenia, prosím."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Požadovaná bitová rýchlosť %d kbit/s pre vlastnosť '%s' nie je dovolená. "
+#~ "Bitová rýchlosť bola nastavená na %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Nepodarilo sa nastaviť TwoLAME enkodér. Skontrolujte svoje kódovacie "
+#~ "nastavenia, prosím."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Vnútorná chyba prúdu údajov."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "Chybný titul na DVD."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "Nepodarilo sa načítať informáciu o titule DVD."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "Nepodarilo sa otvoriť DVD zariadenie '%s'."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "Nepodarilo sa nastaviť preskočenie na báze PGC. "
+
+#~ msgid "This file is encrypted and cannot be played."
+#~ msgstr "Tento súbor je šifrovaný a nedá sa prehrať."
+
+#~ msgid "Could not open file \"%s\" for writing."
+#~ msgstr "Nemohu otevřít soubor \"%s\" pro zápis."
+
+#~ msgid "Error closing file \"%s\"."
+#~ msgstr "Chyba při zavírání souboru \"%s\"."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "Nemohu otevřít soubor \"%s\" pro čtení."
+
+#~ msgid "No filename specified."
+#~ msgstr "Nezadán název souboru."
+
+#~ msgid "No or invalid input audio, AVI stream will be corrupt."
+#~ msgstr "Žádný nebo neplatný vstup zvuku, proud AVI bude poškozen."
+
+#~ msgid "Could not open audio device \"%s\" for writing."
+#~ msgstr "Nemohu otevřít zařízení zvuku \"%s\" pro zápis."
+
+#~ msgid "Could not open control device \"%s\" for writing."
+#~ msgstr "Nemohu otevřít řídicí zařízení \"%s\" pro zápis."
+
+#~ msgid "Could not configure audio device \"%s\"."
+#~ msgstr "Nemohu nastavit zařízení zvuku \"%s\"."
+
+#~ msgid "Could not set audio device \"%s\" to %d Hz."
+#~ msgstr "Nemohu nastavit zařízení zvuku \"%s\" na %d Hz."
+
+#~ msgid "Could not close audio device \"%s\"."
+#~ msgstr "Nemohu zavřít zařízení zvuku \"%s\"."
+
+#~ msgid "Could not close control device \"%s\"."
+#~ msgstr "Nemohu zavřít řídicí zařízení \"%s\"."
+
+#~ msgid "Could not open video device \"%s\" for writing."
+#~ msgstr "Nemohu otevřít zařízení videa \"%s\" pro zápis."
+
+#~ msgid "Could not close video device \"%s\"."
+#~ msgstr "Nemohu zavřít zařízení videa \"%s\"."
+
+#~ msgid "Could not write to device \"%s\"."
+#~ msgstr "Nemohu zapisovat do zařízení \"%s\"."
+
+#~ msgid "OSS device \"%s\" is already in use by another program."
+#~ msgstr "Zařízení OSS \"%s\" již používá jiný program."
+
+#~ msgid "Could not access device \"%s\", check its permissions."
+#~ msgstr "Nemohu přistupovat k zařízení \"%s\", zkontrolujte jeho oprávnění."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Zařízení \"%s\" neexistuje."
+
+#~ msgid "Could not open device \"%s\" for writing."
+#~ msgstr "Nemohu otevřít zažízení \"%s\" pro zápis."
+
+#~ msgid "Could not open device \"%s\" for reading."
+#~ msgstr "Nemohu otevřít zažízení \"%s\" pro čtení."
+
+#~ msgid "Your OSS device could not be probed correctly"
+#~ msgstr "Vaše zařízení OSS nebylo možné správně najít"
+
+#~ msgid "Volume"
+#~ msgstr "Hlasitost"
+
+#~ msgid "Bass"
+#~ msgstr "Basy"
+
+#~ msgid "Treble"
+#~ msgstr "Výšky"
+
+#~ msgid "Synth"
+#~ msgstr "Synth"
+
+#~ msgid "PCM"
+#~ msgstr "PCM"
+
+#~ msgid "Speaker"
+#~ msgstr "Reproduktor"
+
+#~ msgid "Line-in"
+#~ msgstr "Line-in"
+
+#~ msgid "Microphone"
+#~ msgstr "Mikrofon"
+
+#~ msgid "CD"
+#~ msgstr "CD"
+
+#~ msgid "Mixer"
+#~ msgstr "Mixér"
+
+#~ msgid "PCM-2"
+#~ msgstr "PCM-2"
+
+#~ msgid "Record"
+#~ msgstr "Nahrávání"
+
+#~ msgid "In-gain"
+#~ msgstr "Vstupní-zisk"
+
+#~ msgid "Out-gain"
+#~ msgstr "Výstupní-zisk"
+
+#~ msgid "Line-1"
+#~ msgstr "Line-1"
+
+#~ msgid "Line-2"
+#~ msgstr "Line-2"
+
+#~ msgid "Line-3"
+#~ msgstr "Line-3"
+
+#~ msgid "Digital-1"
+#~ msgstr "Digitální-1"
+
+#~ msgid "Digital-2"
+#~ msgstr "Digitální-2"
+
+#~ msgid "Digital-3"
+#~ msgstr "Digitální-3"
+
+#~ msgid "Phone-in"
+#~ msgstr "Telefon-in"
+
+#~ msgid "Phone-out"
+#~ msgstr "Telefon-out"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgid "Radio"
+#~ msgstr "Rádio"
+
+#~ msgid "Monitor"
+#~ msgstr "Monitor"
+
+#, fuzzy
+#~ msgid "PC Speaker"
+#~ msgstr "Reproduktor"
+
+#~ msgid "Could not open vfs file \"%s\" for reading."
+#~ msgstr "Nemohu otevřít soubor vfs \"%s\" pro čtení."
+
+#, fuzzy
+#~ msgid "No filename given."
+#~ msgstr "Nezadán název souboru"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "Nemohu otevřít soubor vfs \"%s\" pro zápis: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Nezadán název souboru"
+
+#, fuzzy
+#~ msgid "Your OSS device doesn't support mono or stereo."
+#~ msgstr "Vaše zařízení OSS nebylo možné správně najít"
+
+#~ msgid "No device specified."
+#~ msgstr "Nezadáno zařízení."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "Nemohu otevřít zařízení \"%s\" pro čtení a zápis."
+
+#~ msgid "Device is open."
+#~ msgstr "Zařízení je otevřeno."
+
+#~ msgid "Device \"%s\" is not a capture device."
+#~ msgstr "Zařízení \"%s\" není zachytávací zařízení."
+
+#~ msgid "Could not get buffers from device \"%s\"."
+#~ msgstr "Nemohu od zařízení \"%s\" získat vyrovnávací paměti."
+
+#~ msgid "Could not get enough buffers from device \"%s\"."
+#~ msgstr "Nemohu od zařízení \"%s\" získat dost vyrovnávacích pamětí."
+
+#~ msgid ""
+#~ "The %s element could not be found. This element is essential for "
+#~ "playback. Please install the right plug-in and verify that it works by "
+#~ "running 'gst-inspect %s'"
+#~ msgstr ""
+#~ "Element %s nelze najít. Tento element je pro přehrávání nutný. "
+#~ "Nainstalujte prosím potřebný modul a ověřte, že funguje, spuštěním 'gst-"
+#~ "inspect %s'"
+
+#~ msgid ""
+#~ "No usable colorspace element could be found.\n"
+#~ "Please install one and restart."
+#~ msgstr ""
+#~ "Nenalezen použitelný element colorspace.\n"
+#~ "Nainstalujte prosím nějaký a restartujte."
diff --git a/subprojects/gst-plugins-ugly/po/sl.po b/subprojects/gst-plugins-ugly/po/sl.po
new file mode 100644 (file)
index 0000000..32f4366
--- /dev/null
@@ -0,0 +1,84 @@
+# Slovenian translation for gst-plugins-ugly.
+# Copyright (C) 2009 - 2012 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Matej Urbančič <matej.urban@gmail.com>, 2009.
+# Klemen Košir <klemen.kosir@gmx.com>, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 0.10.17.2\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-03-26 22:48+0100\n"
+"Last-Translator: Klemen Košir <klemen.kosir@gmx.com>\n"
+"Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
+"Language: sl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
+"%100==4 ? 3 : 0);\n"
+
+msgid "Could not read from CD."
+msgstr "S CD-ja ni mogoče brati."
+
+msgid "Could not open CD device for reading."
+msgstr "Naprave CD ni mogoče odpreti za branje."
+
+msgid "Disc is not an Audio CD."
+msgstr "Disk ni zvočni CD."
+
+msgid "Could not open DVD"
+msgstr "DVD-ja ni mogoče odpreti"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "DVD naslova %d ni mogoče odpreti."
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Napaka med odpiranjem poglavja %d DVD naslova %d."
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr "DVD naslova %d ni mogoče odpreti. Interaktivni naslovi niso podprti."
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"DVD-ja ni mogoče prebrati. Verjetno je DVD šifriran, knjižnica za "
+"dešifriranje pa ni nameščena."
+
+msgid "Could not read DVD."
+msgstr "DVD-ja ni mogoče prebrati."
+
+msgid "This stream contains no data."
+msgstr "Pretok ne vsebuje podatkov."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Napaka med nastavljanjem zvočnega kodirnika mp3 LAME. Preverite parametre "
+#~ "kodiranja."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Zahtevana bitna hitrost %d kbit/s za lastnost \"%s\" ni dovoljena. Bitna "
+#~ "hitrost je bila spremenjena na %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Napaka med nastavljanjem kodirnika TwoLAME. Preverite parametre kodiranja."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Notranja napaka pretoka podatkov."
+
+#~ msgid "Failed to configure LAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Napaka med nastavljanjem kodirnika LAME. Preverite parametre kodiranja."
diff --git a/subprojects/gst-plugins-ugly/po/sq.po b/subprojects/gst-plugins-ugly/po/sq.po
new file mode 100644 (file)
index 0000000..2cecc8b
--- /dev/null
@@ -0,0 +1,256 @@
+# Përkthimi i mesazheve të gst-plugins në shqip.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Laurent Dhima <laurenti@alblinux.net>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins 0.8.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2004-08-07 20:29+0200\n"
+"Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
+"Language-Team: Albanian <begraj@hotmail.com>\n"
+"Language: sq\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#, fuzzy
+msgid "Could not read from CD."
+msgstr "I pamundur shkrimi tek file \"%s\"."
+
+msgid "Could not open CD device for reading."
+msgstr "I pamundur hapja e dispozitivit CD për lexim."
+
+#, fuzzy
+msgid "Disc is not an Audio CD."
+msgstr "Dispozitivi nuk është hapur."
+
+msgid "Could not open DVD"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not open DVD title %d"
+msgstr "E pamundur mbyllja e file vfs \"%s\"."
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr ""
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#, fuzzy
+msgid "Could not read DVD."
+msgstr "I pamundur shkrimi tek file \"%s\"."
+
+msgid "This stream contains no data."
+msgstr ""
+
+#, fuzzy
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "I pamundur shkrimi tek file \"%s\"."
+
+#, fuzzy
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "E pamundur mbyllja e file vfs \"%s\"."
+
+#~ msgid "Could not open file \"%s\" for writing."
+#~ msgstr "E pamundur hapja e file \"%s\" në shkrim."
+
+#~ msgid "Error closing file \"%s\"."
+#~ msgstr "Gabim gjatë mbylljes së file \"%s\"."
+
+#~ msgid "Could not open file \"%s\" for reading."
+#~ msgstr "E pamundur hapja e file \"%s\" për lexim."
+
+#~ msgid "No filename specified."
+#~ msgstr "Nuk është përcaktuar emri i file."
+
+#~ msgid "No or invalid input audio, AVI stream will be corrupt."
+#~ msgstr "Input audio i gabuar ose mungon, stream AVI mund të jetë i dëmtuar."
+
+#~ msgid "Could not open audio device \"%s\" for writing."
+#~ msgstr "E pamundur hapja e dispozitivit të zërit \"%s\" për shkrim."
+
+#~ msgid "Could not open control device \"%s\" for writing."
+#~ msgstr "E pamundur hapja e dispozitivit të kontrollit \"%s\" për shkrim."
+
+#~ msgid "Could not configure audio device \"%s\"."
+#~ msgstr "I pamundur konfigurimi i dispozitivit të zërit \"%s\"."
+
+#~ msgid "Could not set audio device \"%s\" to %d Hz."
+#~ msgstr "I pamundur rregullimi i dispozitivit audio \"%s\" në %d Hz."
+
+#~ msgid "Could not close audio device \"%s\"."
+#~ msgstr "E pamundur mbyllja e dispozitivit audio \"%s\"."
+
+#~ msgid "Could not close control device \"%s\"."
+#~ msgstr "E pamundur mbyllja e dispozitivit të kontrollit \"%s\"."
+
+#~ msgid "Could not open video device \"%s\" for writing."
+#~ msgstr "E pamundur hapja e dispozitivit video \"%s\" për shkrim."
+
+#~ msgid "Could not close video device \"%s\"."
+#~ msgstr "E pamundur mbyllja e dispozitivit video \"%s\"."
+
+#~ msgid "Could not write to device \"%s\"."
+#~ msgstr "I pamundur shkrimi në dispozitivin \"%s\"."
+
+#~ msgid "OSS device \"%s\" is already in use by another program."
+#~ msgstr ""
+#~ "Dispozitivi OSS \"%s\" është duke u përdorur nga një tjetër program."
+
+#~ msgid "Could not access device \"%s\", check its permissions."
+#~ msgstr ""
+#~ "E pamundur futja në dispozitivin \"%s\", kontrollo të drejtat e tij."
+
+#~ msgid "Device \"%s\" does not exist."
+#~ msgstr "Dispozitivi \"%s\" nuk ekziston."
+
+#~ msgid "Could not open device \"%s\" for writing."
+#~ msgstr "E pamundur hapja e dispozitivit \"%s\" për shkrim."
+
+#~ msgid "Could not open device \"%s\" for reading."
+#~ msgstr "E pamundur hapja e dispozitivit \"%s\" për lexim."
+
+#~ msgid "Your OSS device could not be probed correctly"
+#~ msgstr "Dispozitivi juaj OSS mund të mos provohet korrektësisht"
+
+#~ msgid "Volume"
+#~ msgstr "Volumi"
+
+#~ msgid "Bass"
+#~ msgstr "Bas"
+
+#~ msgid "Treble"
+#~ msgstr "Treble"
+
+#~ msgid "Synth"
+#~ msgstr "Sintetizuesi"
+
+#~ msgid "PCM"
+#~ msgstr "PCM"
+
+#~ msgid "Speaker"
+#~ msgstr "Zë folës"
+
+#~ msgid "Line-in"
+#~ msgstr "Linja-hyrje"
+
+#~ msgid "Microphone"
+#~ msgstr "Mikrofoni"
+
+#~ msgid "CD"
+#~ msgstr "CD"
+
+#~ msgid "Mixer"
+#~ msgstr "Kontrolli i volumit"
+
+#~ msgid "PCM-2"
+#~ msgstr "PCM-2"
+
+#~ msgid "Record"
+#~ msgstr "Regjistrimi"
+
+#~ msgid "In-gain"
+#~ msgstr "In-gain"
+
+#~ msgid "Out-gain"
+#~ msgstr "Out-gain"
+
+#~ msgid "Line-1"
+#~ msgstr "Linja-1"
+
+#~ msgid "Line-2"
+#~ msgstr "Linja-2"
+
+#~ msgid "Line-3"
+#~ msgstr "Linja-3"
+
+#~ msgid "Digital-1"
+#~ msgstr "Dixhitale-1"
+
+#~ msgid "Digital-2"
+#~ msgstr "Dixhitale-2"
+
+#~ msgid "Digital-3"
+#~ msgstr "Dixhitale-3"
+
+#~ msgid "Phone-in"
+#~ msgstr "Phone-hyrja"
+
+#~ msgid "Phone-out"
+#~ msgstr "Phone-dalja"
+
+#~ msgid "Video"
+#~ msgstr "Video"
+
+#~ msgid "Radio"
+#~ msgstr "Radio"
+
+#~ msgid "Monitor"
+#~ msgstr "Ekrani"
+
+#, fuzzy
+#~ msgid "PC Speaker"
+#~ msgstr "Zë folës"
+
+#~ msgid "Could not open vfs file \"%s\" for reading."
+#~ msgstr "E pamundur hapja e file vfs \"%s\" për lexim."
+
+#, fuzzy
+#~ msgid "No filename given."
+#~ msgstr "Nuk është dhënë asnjë emër file"
+
+#~ msgid "Could not open vfs file \"%s\" for writing: %s."
+#~ msgstr "E pamundur hapja e file vfs \"%s\" për shkrim: %s."
+
+#~ msgid "No filename given"
+#~ msgstr "Nuk është dhënë asnjë emër file"
+
+#, fuzzy
+#~ msgid "Your OSS device doesn't support mono or stereo."
+#~ msgstr "Dispozitivi juaj OSS mund të mos provohet korrektësisht"
+
+#~ msgid "No device specified."
+#~ msgstr "Nuk është përcaktuar asnjë dispozitiv."
+
+#~ msgid "Could not open device \"%s\" for reading and writing."
+#~ msgstr "E pamundur hapja e dispozitivit \"%s\" për lexim dhe shkrim."
+
+#~ msgid "Device is open."
+#~ msgstr "Dispozitivi është i hapur."
+
+#~ msgid "Device \"%s\" is not a capture device."
+#~ msgstr "Dispozitivi \"%s\" nuk është një dispozitiv marrje."
+
+#~ msgid "Could not get buffers from device \"%s\"."
+#~ msgstr "E pamundur marrja e buffers nga dispozitivi \"%s\"."
+
+#~ msgid "Could not get enough buffers from device \"%s\"."
+#~ msgstr "E pamundur marrja e buffers të mjaftueshëm nga dispozitivi \"%s\"."
+
+#~ msgid ""
+#~ "The %s element could not be found. This element is essential for "
+#~ "playback. Please install the right plug-in and verify that it works by "
+#~ "running 'gst-inspect %s'"
+#~ msgstr ""
+#~ "E pamundur gjetja e elementit %s. Ky element është thelbësor për "
+#~ "playback. Ju lutem instaloni plug-in e duhur dhe kontrollo funksionimin "
+#~ "duke ekzekutuar 'gst-inspect %s'"
+
+#~ msgid ""
+#~ "No usable colorspace element could be found.\n"
+#~ "Please install one and restart."
+#~ msgstr ""
+#~ "Nuk arrin të gjehet asnjë element ngjyra e hapësirës.\n"
+#~ "Ju lutem instaloni një dhe rinisni."
diff --git a/subprojects/gst-plugins-ugly/po/sr.po b/subprojects/gst-plugins-ugly/po/sr.po
new file mode 100644 (file)
index 0000000..4eb1483
--- /dev/null
@@ -0,0 +1,80 @@
+# Serbian translation of gst-plugins
+# This file is put in the public domain.
+# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly-1.1.4\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2013-10-03 22:30+0200\n"
+"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
+"Language-Team: Serbian <(nothing)>\n"
+"Language: sr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Project-Style: gnome\n"
+
+msgid "Could not read from CD."
+msgstr "Не могу да читам ЦД."
+
+msgid "Could not open CD device for reading."
+msgstr "Не могу да отворим ЦД уређај ради читања."
+
+msgid "Disc is not an Audio CD."
+msgstr "Диск није Звучни ЦД."
+
+msgid "Could not open DVD"
+msgstr "Не могу да отворим ДВД"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Не могу да отворим ДВД наслов „%d“"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Нисам успео да стигнем до поглавља „%d“ ДВД наслова „%d“"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Не могу да отворим ДВД наслов „%d“. Овај елемент не подржава међудејствене "
+"наслове"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Не могу да читам ДВД. Можда зато што је ДВД шифрован а библиотека за "
+"дешифровање ДВД-а није инсталирана."
+
+msgid "Could not read DVD."
+msgstr "Не могу да читам ДВД."
+
+msgid "This stream contains no data."
+msgstr "Овај ток не садржи податке."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Нисам успео да подесим енкодер звука ЛАМЕ мп3. Проверите ваше параметре "
+#~ "кодирања."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Тражени проток података од %d kbit/s за „%s“ није допуштен. Проток "
+#~ "података је постављен на %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Нисам успео да подесим ДваЛАМЕ енкодер. Проверите ваше параметре кодирања."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Унутрашња грешка тока података."
diff --git a/subprojects/gst-plugins-ugly/po/sv.po b/subprojects/gst-plugins-ugly/po/sv.po
new file mode 100644 (file)
index 0000000..e843c4a
--- /dev/null
@@ -0,0 +1,76 @@
+# Swedish translation for gst-plugins-ugly.
+# Copyright (C) 2007, 2008, 2009, 2014, 2015, 2019 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Daniel Nylander <po@danielnylander.se>, 2007, 2008, 2009.
+# Sebastian Rasmussen <sebras@gmail.com>, 2014, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.15.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-01-17 02:02+0000\n"
+"PO-Revision-Date: 2019-01-17 02:02+0000\n"
+"Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 1.8.6\n"
+
+#: ext/cdio/gstcdiocddasrc.c:199
+msgid "Could not read from CD."
+msgstr "Kunde inte läsa från cd."
+
+#: ext/cdio/gstcdiocddasrc.c:406
+msgid "Could not open CD device for reading."
+msgstr "Kunde inte öppna cd-enheten för läsning."
+
+#: ext/cdio/gstcdiocddasrc.c:413
+msgid "Disc is not an Audio CD."
+msgstr "Skivan är inte en ljud-cd."
+
+#: ext/dvdread/dvdreadsrc.c:231 ext/dvdread/dvdreadsrc.c:238
+msgid "Could not open DVD"
+msgstr "Kunde inte öppna dvd"
+
+#: ext/dvdread/dvdreadsrc.c:245 ext/dvdread/dvdreadsrc.c:622
+#: ext/dvdread/dvdreadsrc.c:629
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Kunde inte öppna dvd-titel %d"
+
+#: ext/dvdread/dvdreadsrc.c:251
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Misslyckades med att gå till kapitel %d för dvd-titel %d"
+
+#: ext/dvdread/dvdreadsrc.c:636
+#, c-format
+msgid "Could not open DVD title %d. Interactive titles are not supported by this element"
+msgstr "Kunde inte öppna dvd-titel %d. Interaktiva titlar stöds inte av det här elementet"
+
+#: ext/dvdread/dvdreadsrc.c:991
+msgid "Could not read DVD. This may be because the DVD is encrypted and a DVD decryption library is not installed."
+msgstr "Kunde ej läsa dvd. Detta kan vara för att dvd:n är krypterad och ett dvd-avkrypteringsbibliotek inte är installerat."
+
+#: ext/dvdread/dvdreadsrc.c:994
+msgid "Could not read DVD."
+msgstr "Kunde inte läsa dvd."
+
+#: gst/asfdemux/gstasfdemux.c:446 gst/asfdemux/gstasfdemux.c:454
+msgid "This stream contains no data."
+msgstr "Den här strömmen innehåller inget data."
+
+#~ msgid "Failed to configure LAME mp3 audio encoder. Check your encoding parameters."
+#~ msgstr "Misslyckades med att konfigurera LAME mp3 ljudkodare. Kontrollera dina kodningsparametrar."
+
+#~ msgid "The requested bitrate %d kbit/s for property '%s' is not allowed. The bitrate was changed to %d kbit/s."
+#~ msgstr "Den begärda bitfrekvensen %d kbit/s för egenskapen \"%s\" tillåts inte. Bitfrekvensen ändrades till %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr "Misslyckades med att konfigurera TwoLAME-kodaren. Kontrollera dina kodningsparametrar."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Fel i intern dataström."
diff --git a/subprojects/gst-plugins-ugly/po/ta.po b/subprojects/gst-plugins-ugly/po/ta.po
new file mode 100644 (file)
index 0000000..cd8db03
--- /dev/null
@@ -0,0 +1,64 @@
+# Tamil messages for gst-plugins-ugly.
+# This file is put in the public domain.
+# List of contributors follow:
+# Poorajith <gokulkannanst@gmail.com>, 2019.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.15.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-01-17 02:02+0000\n"
+"PO-Revision-Date: 2019-02-06 01:10+0530\n"
+"Last-Translator: Arun Isaac <arunisaac@systemreboot.net>\n"
+"Language-Team: Tamil <tamil@systemreboot.net>\n"
+"Language: ta\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ext/cdio/gstcdiocddasrc.c:199
+msgid "Could not read from CD."
+msgstr "குறுவட்டைப் படிக்க இயலவில்லை."
+
+#: ext/cdio/gstcdiocddasrc.c:406
+msgid "Could not open CD device for reading."
+msgstr "குறுவட்டுக் கருவியைப் படிப்பதற்காகத் திறக்க இயலவில்லை."
+
+#: ext/cdio/gstcdiocddasrc.c:413
+msgid "Disc is not an Audio CD."
+msgstr "இவ்வட்டு ஒலி குறுவட்டல்ல."
+
+#: ext/dvdread/dvdreadsrc.c:231 ext/dvdread/dvdreadsrc.c:238
+msgid "Could not open DVD"
+msgstr "இறுவட்டைத் திறக்க இயல்வில்லை"
+
+#: ext/dvdread/dvdreadsrc.c:245 ext/dvdread/dvdreadsrc.c:622
+#: ext/dvdread/dvdreadsrc.c:629
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "%d என்ற இறுவட்டுத் தலைப்பைத் திறக்க இயலவில்லை"
+
+#: ext/dvdread/dvdreadsrc.c:251
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "இறுவட்டுத் தலைப்பு %2$d யில் %1$d என்ற அத்தியாயத்திற்குச் செல்ல இயலவில்லை"
+
+#: ext/dvdread/dvdreadsrc.c:636
+#, c-format
+msgid "Could not open DVD title %d. Interactive titles are not supported by this element"
+msgstr "%d என்ற இறுவட்டுத் தலைப்பைத் திறக்க இயலவில்லை. ஊடாட்ட தலைப்புகளுக்கு இவ்வுறுப்பில் ஆதரவில்லை"
+
+#: ext/dvdread/dvdreadsrc.c:991
+msgid "Could not read DVD. This may be because the DVD is encrypted and a DVD decryption library is not installed."
+msgstr ""
+"இறுவட்டைப் படிக்க இயலவில்லை. இது இறுவட்டு மறையாக்கப்பட்டிருந்து அதனை மறைவிலக்க\n"
+"தேவையான நிரலகம் நிறுவப்படாததால் இருக்கலாம்."
+
+#: ext/dvdread/dvdreadsrc.c:994
+msgid "Could not read DVD."
+msgstr "இறுவட்டைப் படிக்க இயலவில்லை."
+
+#: gst/asfdemux/gstasfdemux.c:446 gst/asfdemux/gstasfdemux.c:454
+msgid "This stream contains no data."
+msgstr "இத்தரவுத்தொடரில் எத்தரவுமில்லை."
diff --git a/subprojects/gst-plugins-ugly/po/tr.po b/subprojects/gst-plugins-ugly/po/tr.po
new file mode 100644 (file)
index 0000000..679622c
--- /dev/null
@@ -0,0 +1,92 @@
+# translation of gst-plugins-ugly-1.0.3.po to Turkish
+# This file is put in the public domain.
+# Server Acim <sacim@kde.org.tr>, 2009.
+# Server Acim <sacim@kde.org.tr>, 2013.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly-1.0.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-12-01 01:19+0200\n"
+"Last-Translator: Server Acim <serveracim@gmail.com>\n"
+"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+msgid "Could not read from CD."
+msgstr "CD okuyamıyor."
+
+msgid "Could not open CD device for reading."
+msgstr "Okumak için CD aygıtını açamıyor."
+
+msgid "Disc is not an Audio CD."
+msgstr "Bu disk bir Ses CD'si değil."
+
+msgid "Could not open DVD"
+msgstr "DVD açılamıyor"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "DVD başlığı açılamıyor %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Bu dosyalara okunamadı:bölüm %d ve DVD başlığı %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"DVD başlığı açılamadı %d. Bu öğede etkileşimli Interactive başlıklar "
+"desteklenmiyor"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"DVD okunamıyor. Bunun sebebi, DVD'nin şifrelenmiş olması veya DVD şifre "
+"çzöme kitaplığının kurulu olmaması olabilir."
+
+msgid "Could not read DVD."
+msgstr "DVD okunamıyor."
+
+msgid "This stream contains no data."
+msgstr "Akış veri içermiyor."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "LAME mp3 kodlayıcı yapılandırılamadı. Kodlama parametrelerinizi "
+#~ "denetleyiniz."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "İstenen bit oranı %d kbit/s bu özellik için '%s' onaylanmadı. Bu yüzden "
+#~ "bit oranı şuna dönüştürüldü %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "TwoLAME kodlayıcı yapılandırılamadı. Kodlama parametrelerinizi "
+#~ "denetleyiniz."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "İç veri akış hatası."
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "DVD'de geçersiz başlık bilgisi."
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "DVD'deki başlık bilgisi okunamıyor."
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "DVD aygıtı açılamadı '%s'."
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "PGC tabanlı arama ayarlanamadı."
diff --git a/subprojects/gst-plugins-ugly/po/uk.po b/subprojects/gst-plugins-ugly/po/uk.po
new file mode 100644 (file)
index 0000000..881905a
--- /dev/null
@@ -0,0 +1,87 @@
+# Ukrainian translation to gst-plugins-ugly.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+#
+# Maxim V. Dziumanenko <dziumanenko@gmail.com>, 2007.
+# Yuri Chornoivan <yurchor@ukr.net>, 2011, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.0.3\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2012-11-28 20:25+0200\n"
+"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
+"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Lokalize 1.5\n"
+
+msgid "Could not read from CD."
+msgstr "Не вдалося прочитати дані з компакт-диска."
+
+msgid "Could not open CD device for reading."
+msgstr "Не вдалося відкрити носій для читання."
+
+msgid "Disc is not an Audio CD."
+msgstr "Диск не записано у форматі Audio CD."
+
+msgid "Could not open DVD"
+msgstr "Не вдалося відкрити DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Не вдалося відкрити частину DVD %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Не вдалося перейти до розділу %d частини DVD %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Не вдалося відкрити заголовок DVD %d. Інтерактивні заголовки не "
+"підтримуються цим елементом"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Не вдалося прочитати DVD. Причиною може бути те, що DVD зашифровано, а "
+"бібліотеку розшифрування DVD не встановлено."
+
+msgid "Could not read DVD."
+msgstr "Не вдалося прочитати DVD."
+
+msgid "This stream contains no data."
+msgstr "Потік не містить даних."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Помилка при налаштовуванні кодера LAME для звукових даних у форматі MP3. "
+#~ "Перевірте параметри кодування."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Запитана бітова швидкість %d кбіт/с для властивості «%s» є неприпустимою. "
+#~ "Бітову швидкість змінено на %d кбіт/с."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Помилка при налаштовуванні кодувальника TwoLAME. Перевірте параметри "
+#~ "кодування."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Помилка внутрішнього потоку даних."
+
+#~ msgid "This file is encrypted and cannot be played."
+#~ msgstr "Файл зашифрований та не може бути відтворений."
diff --git a/subprojects/gst-plugins-ugly/po/vi.po b/subprojects/gst-plugins-ugly/po/vi.po
new file mode 100644 (file)
index 0000000..57fd8c4
--- /dev/null
@@ -0,0 +1,84 @@
+# Vietnamese translation for GST Plugins Ugly.
+# Copyright © 2014 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Clytie Siddall <clytie@riverland.net.au>, 2007-2010.
+# Trần Ngọc Quân <vnwildman@gmail.com>, 2012-2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.3.90\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2014-06-30 09:20+0700\n"
+"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
+"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
+"Language: vi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Language-Team-Website: <http://translationproject.org/team/vi.html>\n"
+"X-Generator: LocFactoryEditor 1.8\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+
+msgid "Could not read from CD."
+msgstr "Không thể đọc từ đĩa CD."
+
+msgid "Could not open CD device for reading."
+msgstr "Không thể mở thiết bị đĩa CD để đọc."
+
+msgid "Disc is not an Audio CD."
+msgstr "Đây không phải là một đĩa CD âm nhạc."
+
+msgid "Could not open DVD"
+msgstr "Không thể mở đĩa DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "Không thể mở đĩa DVD tên %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "Gặp lỗi khi nhảy đến chương %d của đĩa DVD tên %d"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr ""
+"Không thể mở đĩa DVD tên %d. Phần tử này không hỗ trợ tiêu đề tương tác."
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+"Không thể đọc đĩa DVD. Nguyên nhân có thể là DVD đã bị mã hóa và thư viện "
+"giải mã DVD chưa được cài đặt."
+
+msgid "Could not read DVD."
+msgstr "Không thể đọc đĩa DVD."
+
+msgid "This stream contains no data."
+msgstr "Luồng này không chứa dữ liệu."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr ""
+#~ "Gặp lỗi khi cấu hình bộ giải mã âm thanh mp3 của LAME. Hãy kiểm tra các "
+#~ "tham số giải mã."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr ""
+#~ "Không cho phép tỷ lệ đã yêu cầu %d kbit/giây cho thuộc tính “%s” nên tỷ "
+#~ "lệ bit bị thay đổi thành %d kbit/g."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr ""
+#~ "Gặp lỗi khi cấu hình bộ biên mã TwoLAME. Hãy kiểm tra lại các tham số "
+#~ "giải mã."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Lỗi luồng dữ liệu nội bộ."
diff --git a/subprojects/gst-plugins-ugly/po/zh_CN.po b/subprojects/gst-plugins-ugly/po/zh_CN.po
new file mode 100644 (file)
index 0000000..be611e4
--- /dev/null
@@ -0,0 +1,86 @@
+# Chinese (simplified) translation for gst-plugins-ugly.
+# Copyright (C) 2007 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gst-plugins-ugly package.
+# Wenzheng Hu <db_lobster@163.com>, 2007.
+# LI Daobing <lidaobing@gmail.com>, 2008, 2009.
+# Wylmer Wang <wantinghard@gmail.com>, 2011.
+# Mingye Wang <arthur200126@gmail.com>, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-ugly 1.5.1\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2019-02-26 11:48+0000\n"
+"PO-Revision-Date: 2015-08-28 15:36+0800\n"
+"Last-Translator: Mingye Wang <arthur200126@gmail.com>\n"
+"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.4\n"
+
+msgid "Could not read from CD."
+msgstr "无法读取 CD。"
+
+msgid "Could not open CD device for reading."
+msgstr "无法打开以读方式打开 CD 设备。"
+
+msgid "Disc is not an Audio CD."
+msgstr "盘类型不是音频 CD。"
+
+msgid "Could not open DVD"
+msgstr "无法打开 DVD"
+
+#, c-format
+msgid "Could not open DVD title %d"
+msgstr "无法打开 DVD 标题 %d"
+
+#, c-format
+msgid "Failed to go to chapter %d of DVD title %d"
+msgstr "跳转到章节 %d, DVD 标题 %d 失败"
+
+#, c-format
+msgid ""
+"Could not open DVD title %d. Interactive titles are not supported by this "
+"element"
+msgstr "无法打开 DVD 标题 %d. 这个元素不支持互动标题"
+
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr "无法读取 DVD。可能 DVD 光盘已加密,但 DVD 解密库没有安装。"
+
+msgid "Could not read DVD."
+msgstr "无法读取 DVD。"
+
+msgid "This stream contains no data."
+msgstr "这个串流中没有包含数据."
+
+#~ msgid ""
+#~ "Failed to configure LAME mp3 audio encoder. Check your encoding "
+#~ "parameters."
+#~ msgstr "配置 LAME mp3 编码器失败. 请检查你的编码参数."
+
+#~ msgid ""
+#~ "The requested bitrate %d kbit/s for property '%s' is not allowed. The "
+#~ "bitrate was changed to %d kbit/s."
+#~ msgstr "不允许的比特率 %d kbit/s 于 '%s'. 比特率已改变成 %d kbit/s."
+
+#~ msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
+#~ msgstr "设置 TwoLAME 编码器失败. 请检查你的编码参数."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "内部数据流错误。"
+
+#~ msgid "Invalid title information on DVD."
+#~ msgstr "无效的 DVD 标题信息。"
+
+#~ msgid "Could not read title information for DVD."
+#~ msgstr "无法读取为 DVD 读取标题信息。"
+
+#~ msgid "Failed to open DVD device '%s'."
+#~ msgstr "无法打开 DVD 设备 '%s'。"
+
+#~ msgid "Failed to set PGC based seeking."
+#~ msgstr "设置基于 PGC 的定位失败。"
diff --git a/subprojects/gst-plugins-ugly/scripts/dist-translations.py b/subprojects/gst-plugins-ugly/scripts/dist-translations.py
new file mode 100755 (executable)
index 0000000..65148d6
--- /dev/null
@@ -0,0 +1,42 @@
+#!/usr/bin/env python3
+#
+# Copyright (C) 2020 Tim-Philipp Müller <tim centricular net>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+
+import os
+import subprocess
+import shutil
+import tempfile
+
+if __name__ == "__main__":
+    dist_root = os.environ['MESON_DIST_ROOT']
+    build_root = os.environ['MESON_BUILD_ROOT']
+    source_root = os.environ['MESON_SOURCE_ROOT']
+    pwd = os.environ['PWD']
+    tmpdir = tempfile.gettempdir()
+
+    module = os.path.basename(os.path.normpath(source_root))
+
+    # Generate pot file
+    print('Generating pot file ...')
+    subprocess.run(['ninja', '-C', build_root, module + '-1.0-pot'], check=True)
+
+    # Dist pot file in tarball
+    print('Copying pot file into dist staging directory ...')
+    pot_src = os.path.join(source_root, 'po', module + '-1.0.pot')
+    dist_po_dir = os.path.join(dist_root, 'po')
+    shutil.copy2(pot_src, dist_po_dir)
diff --git a/subprojects/gst-plugins-ugly/scripts/extract-release-date-from-doap-file.py b/subprojects/gst-plugins-ugly/scripts/extract-release-date-from-doap-file.py
new file mode 100755 (executable)
index 0000000..f09b60e
--- /dev/null
@@ -0,0 +1,45 @@
+#!/usr/bin/env python3
+#
+# extract-release-date-from-doap-file.py VERSION DOAP-FILE
+#
+# Extract release date for the given release version from a DOAP file
+#
+# Copyright (C) 2020 Tim-Philipp Müller <tim centricular com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+
+import sys
+import xml.etree.ElementTree as ET
+
+if len(sys.argv) != 3:
+  sys.exit('Usage: {} VERSION DOAP-FILE'.format(sys.argv[0]))
+
+release_version = sys.argv[1]
+doap_fn = sys.argv[2]
+
+tree = ET.parse(doap_fn)
+root = tree.getroot()
+
+namespaces = {'doap': 'http://usefulinc.com/ns/doap#'}
+
+for v in root.findall('doap:release/doap:Version', namespaces=namespaces):
+  if v.findtext('doap:revision', namespaces=namespaces) == release_version:
+    release_date = v.findtext('doap:created', namespaces=namespaces)
+    if release_date:
+      print(release_date)
+      sys.exit(0)
+
+sys.exit('Could not find a release with version {} in {}'.format(release_version, doap_fn))
diff --git a/subprojects/gst-plugins-ugly/scripts/meson.build b/subprojects/gst-plugins-ugly/scripts/meson.build
new file mode 100644 (file)
index 0000000..f5d9106
--- /dev/null
@@ -0,0 +1,4 @@
+# dist scripts
+if not meson.is_subproject()
+  meson.add_dist_script('dist-translations.py')
+endif
diff --git a/subprojects/gst-plugins-ugly/tests/check/elements/amrnbenc.c b/subprojects/gst-plugins-ugly/tests/check/elements/amrnbenc.c
new file mode 100644 (file)
index 0000000..3875e80
--- /dev/null
@@ -0,0 +1,144 @@
+/*
+ * GStreamer
+ *
+ * unit test for amrnbenc
+ *
+ * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/check/gstcheck.h>
+#include <gst/audio/audio.h>
+
+#define SRC_CAPS "audio/x-raw, format = (string)" GST_AUDIO_NE (S16) ", " \
+    "layout = (string) interleaved, channels = (int) 1, rate = (int) 8000"
+#define SINK_CAPS "audio/AMR"
+
+static GstPad *srcpad, *sinkpad;
+
+static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (SINK_CAPS)
+    );
+
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (SRC_CAPS)
+    );
+
+static void
+buffer_unref (void *buffer, void *user_data)
+{
+  gst_buffer_unref (GST_BUFFER (buffer));
+}
+
+static GstElement *
+setup_amrnbenc (void)
+{
+  GstElement *amrnbenc;
+  GstCaps *caps;
+  GstBus *bus;
+
+  GST_DEBUG ("setup_amrnbenc");
+
+  amrnbenc = gst_check_setup_element ("amrnbenc");
+  srcpad = gst_check_setup_src_pad (amrnbenc, &srctemplate);
+  sinkpad = gst_check_setup_sink_pad (amrnbenc, &sinktemplate);
+  gst_pad_set_active (srcpad, TRUE);
+  gst_pad_set_active (sinkpad, TRUE);
+
+  bus = gst_bus_new ();
+  gst_element_set_bus (amrnbenc, bus);
+
+  fail_unless (gst_element_set_state (amrnbenc,
+          GST_STATE_PLAYING) != GST_STATE_CHANGE_FAILURE,
+      "could not set to playing");
+
+  caps = gst_caps_from_string (SRC_CAPS);
+  gst_check_setup_events (srcpad, amrnbenc, caps, GST_FORMAT_TIME);
+  gst_caps_unref (caps);
+
+  buffers = NULL;
+  return amrnbenc;
+}
+
+static void
+cleanup_amrnbenc (GstElement * amrnbenc)
+{
+  GstBus *bus;
+
+  /* free encoded buffers */
+  g_list_foreach (buffers, buffer_unref, NULL);
+  g_list_free (buffers);
+  buffers = NULL;
+
+  bus = GST_ELEMENT_BUS (amrnbenc);
+  gst_bus_set_flushing (bus, TRUE);
+  gst_object_unref (bus);
+
+  GST_DEBUG ("cleanup_amrnbenc");
+  gst_pad_set_active (srcpad, FALSE);
+  gst_pad_set_active (sinkpad, FALSE);
+  gst_check_teardown_src_pad (amrnbenc);
+  gst_check_teardown_sink_pad (amrnbenc);
+  gst_check_teardown_element (amrnbenc);
+}
+
+/* push a random block of audio of the given size */
+static void
+push_data (gint size, GstFlowReturn expected_return)
+{
+  GstBuffer *buffer;
+  GstFlowReturn res;
+
+  buffer = gst_buffer_new_and_alloc (size);
+  /* make valgrind happier */
+  gst_buffer_memset (buffer, 0, 0, size);
+
+  res = gst_pad_push (srcpad, buffer);
+  fail_unless (res == expected_return,
+      "pushing audio returned %d (%s) not %d (%s)", res,
+      gst_flow_get_name (res), expected_return,
+      gst_flow_get_name (expected_return));
+}
+
+GST_START_TEST (test_enc)
+{
+  GstElement *amrnbenc;
+
+  amrnbenc = setup_amrnbenc ();
+  push_data (1000, GST_FLOW_OK);
+
+  cleanup_amrnbenc (amrnbenc);
+}
+
+GST_END_TEST;
+
+static Suite *
+amrnbenc_suite ()
+{
+  Suite *s = suite_create ("amrnbenc");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_enc);
+  return s;
+}
+
+GST_CHECK_MAIN (amrnbenc);
diff --git a/subprojects/gst-plugins-ugly/tests/check/elements/mpeg2dec.c b/subprojects/gst-plugins-ugly/tests/check/elements/mpeg2dec.c
new file mode 100644 (file)
index 0000000..1c8030f
--- /dev/null
@@ -0,0 +1,1971 @@
+/* GStreamer
+ *
+ * unit test for mpeg2dec
+ *
+ * Copyright (c) 2006 Sebastian Dröge <slomo@circular-chaos.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <unistd.h>
+
+#include <gst/check/gstcheck.h>
+#include <gst/video/video-info.h>
+
+/* For ease of programming we use globals to keep refs for our floating
+ * src and sink pads we create; otherwise we always have to do get_pad,
+ * get_peer, and then remove references in every test function */
+static GstPad *mysrcpad, *mysinkpad;
+
+/* mpeg2 video created with gst-launch-0.10 videotestsrc num-buffers=32 pattern=blue ! "video/x-raw,format=(string)I420,width=176,height=144,framerate=(fraction)25/1" ! ffenc_mpeg2video ! filesink location=test.mpg
+*/
+
+static const guint8 test_stream1[] = {
+  0x00, 0x00, 0x01, 0xb3, 0x0b, 0x00, 0x90, 0x13,
+  0xff, 0xff, 0xe0, 0x28, 0x00, 0x00, 0x01, 0xb5,
+  0x14, 0x8a, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+  0x01, 0xb8, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x0f, 0xff, 0xf8, 0x00, 0x00,
+  0x01, 0xb5, 0x8f, 0xff, 0xf3, 0x41, 0x80, 0x00,
+  0x00, 0x01, 0x01, 0x13, 0xf8, 0xe5, 0x29, 0x4b,
+  0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x88, 0x00, 0x00, 0x01, 0x02, 0x13, 0xf8, 0xe5,
+  0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x03, 0x13,
+  0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01,
+  0x04, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb,
+  0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00,
+  0x00, 0x01, 0x05, 0x13, 0xf8, 0xe5, 0x29, 0x4b,
+  0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x88, 0x00, 0x00, 0x01, 0x06, 0x13, 0xf8, 0xe5,
+  0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x07, 0x13,
+  0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01,
+  0x08, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb,
+  0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00,
+  0x00, 0x01, 0x09, 0x13, 0xf8, 0xe5, 0x29, 0x4b,
+  0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x88, 0x00, 0x00, 0x01, 0x00, 0x00, 0x57, 0xff,
+  0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f,
+  0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00,
+  0x97, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+  0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00,
+  0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00,
+  0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x00, 0x01, 0x17, 0xff, 0xfb, 0x80,
+  0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
+  0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x00, 0x01, 0x57, 0xff,
+  0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f,
+  0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x01,
+  0x97, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+  0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x00, 0x01, 0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00,
+  0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00,
+  0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x00, 0x02, 0x17, 0xff, 0xfb, 0x80,
+  0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
+  0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x00, 0x02, 0x57, 0xff,
+  0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f,
+  0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x02,
+  0x97, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+  0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x00, 0x02, 0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00,
+  0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00,
+  0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00,
+  0x00, 0x01, 0x00, 0x03, 0x17, 0xff, 0xfb, 0x80,
+  0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
+  0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3,
+  0x80, 0x00, 0x00, 0x01, 0x00, 0x03, 0x57, 0xff,
+  0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f,
+  0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12,
+  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x03,
+  0x97, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+  0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0xb3, 0x0b, 0x00, 0x90, 0x13, 0xff, 0xff, 0xe0,
+  0x28, 0x00, 0x00, 0x01, 0xb5, 0x14, 0x8a, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb8, 0x00,
+  0x08, 0x07, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00,
+  0x0f, 0xff, 0xf8, 0x00, 0x00, 0x01, 0xb5, 0x8f,
+  0xff, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
+  0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00,
+  0x01, 0x02, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7,
+  0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88,
+  0x00, 0x00, 0x01, 0x03, 0x13, 0xf8, 0xe5, 0x29,
+  0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x88, 0x00, 0x00, 0x01, 0x04, 0x13, 0xf8,
+  0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x05,
+  0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00,
+  0x01, 0x06, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7,
+  0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88,
+  0x00, 0x00, 0x01, 0x07, 0x13, 0xf8, 0xe5, 0x29,
+  0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x88, 0x00, 0x00, 0x01, 0x08, 0x13, 0xf8,
+  0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x09,
+  0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x57, 0xff, 0xfb, 0x80, 0x00,
+  0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
+  0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x00, 0x00, 0x97, 0xff, 0xfb,
+  0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3,
+  0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0xd7,
+  0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
+  0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00,
+  0x01, 0x17, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01,
+  0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00,
+  0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x00, 0x01, 0x57, 0xff, 0xfb, 0x80, 0x00,
+  0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
+  0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x00, 0x01, 0x97, 0xff, 0xfb,
+  0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3,
+  0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x01, 0xd7,
+  0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
+  0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00,
+  0x02, 0x17, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01,
+  0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00,
+  0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x00, 0x02, 0x57, 0xff, 0xfb, 0x80, 0x00,
+  0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
+  0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x00, 0x02, 0x97, 0xff, 0xfb,
+  0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3,
+  0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x02, 0xd7,
+  0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
+  0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09,
+  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00,
+  0x03, 0x17, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01,
+  0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00,
+  0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
+  0x01, 0x00, 0x03, 0x57, 0xff, 0xfb, 0x80, 0x00,
+  0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
+  0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80,
+  0x00, 0x00, 0x01, 0x00, 0x03, 0x97, 0xff, 0xfb,
+  0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3,
+  0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70,
+  0xb3, 0x80, 0x00, 0x00, 0x01, 0xb3, 0x0b, 0x00,
+  0x90, 0x13, 0xff, 0xff, 0xe0, 0x28, 0x00, 0x00,
+  0x01, 0xb5, 0x14, 0x8a, 0x00, 0x01, 0x00, 0x00,
+  0x00, 0x00, 0x01, 0xb8, 0x00, 0x08, 0x22, 0x80,
+  0x00, 0x00, 0x01, 0x00, 0x00, 0x0f, 0xff, 0xf8,
+  0x00, 0x00, 0x01, 0xb5, 0x8f, 0xff, 0xf3, 0x41,
+  0x80, 0x00, 0x00, 0x01, 0x01, 0x13, 0xf8, 0xe5,
+  0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x02, 0x13,
+  0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01,
+  0x03, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb,
+  0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00,
+  0x00, 0x01, 0x04, 0x13, 0xf8, 0xe5, 0x29, 0x4b,
+  0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x88, 0x00, 0x00, 0x01, 0x05, 0x13, 0xf8, 0xe5,
+  0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x06, 0x13,
+  0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01,
+  0x07, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb,
+  0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00,
+  0x00, 0x01, 0x08, 0x13, 0xf8, 0xe5, 0x29, 0x4b,
+  0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x88, 0x00, 0x00, 0x01, 0x09, 0x13, 0xf8, 0xe5,
+  0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x00, 0x00,
+  0x57, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+  0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
+  0x09, 0x12, 0x70, 0xb3, 0x80,
+};
+
+static const guint test_stream_sizes[] = {
+  497, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
+  497, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
+  497, 90
+};
+
+/* mpeg2 video created with gst-launch-0.10 videotestsrc num-buffers=32 pattern=blue ! "video/x-raw,format=(string)I420,width=183,height=217,framerate=(fraction)25/1" ! ffenc_mpeg2video ! filesink location=test.mpg
+*/
+
+static const guint8 test_stream2[] = {
+  0x00, 0x00, 0x01, 0xb3, 0x0b, 0x70, 0xd9, 0x13,
+  0xff, 0xff, 0xe0, 0x28, 0x00, 0x00, 0x01, 0xb5,
+  0x14, 0x8a, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+  0x01, 0xb8, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x0f, 0xff, 0xf8, 0x00, 0x00,
+  0x01, 0xb5, 0x8f, 0xff, 0xf3, 0x41, 0x80, 0x00,
+  0x00, 0x01, 0x01, 0x23, 0xf9, 0x45, 0x29, 0x4b,
+  0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
+  0x02, 0x23, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
+  0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x03, 0x23,
+  0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x20, 0x00, 0x00, 0x01, 0x04, 0x23, 0xf9, 0x45,
+  0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
+  0x00, 0x01, 0x05, 0x23, 0xf9, 0x45, 0x29, 0x4b,
+  0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
+  0x06, 0x23, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
+  0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x07, 0x23,
+  0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x20, 0x00, 0x00, 0x01, 0x08, 0x23, 0xf9, 0x45,
+  0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
+  0x00, 0x01, 0x09, 0x23, 0xf9, 0x45, 0x29, 0x4b,
+  0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
+  0x0a, 0x23, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
+  0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x0b, 0x23,
+  0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x20, 0x00, 0x00, 0x01, 0x0c, 0x23, 0xf9, 0x45,
+  0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
+  0x00, 0x01, 0x0d, 0x23, 0xf9, 0x45, 0x29, 0x4b,
+  0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
+  0x0e, 0x23, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
+  0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x00, 0x00,
+  0x57, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+  0x01, 0x1a, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
+  0x1a, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x1a,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x1a, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x05, 0x1a, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x06, 0x1a, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x07, 0x1a, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x08, 0x1a, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x09, 0x1a, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
+  0x1a, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x1a,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x1a, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x0d, 0x1a, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x0e, 0x1a, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x00, 0x00, 0x97, 0xff, 0xfb, 0x80,
+  0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
+  0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x00,
+  0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+  0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x00, 0x01, 0x17, 0xff, 0xfb, 0x80,
+  0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
+  0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x01,
+  0x57, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+  0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x00, 0x01, 0x97, 0xff, 0xfb, 0x80,
+  0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
+  0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x01,
+  0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+  0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x00, 0x02, 0x17, 0xff, 0xfb, 0x80,
+  0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
+  0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x02,
+  0x57, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+  0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x00, 0x02, 0x97, 0xff, 0xfb, 0x80,
+  0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
+  0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x02,
+  0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+  0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x00, 0x03, 0x17, 0xff, 0xfb, 0x80,
+  0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
+  0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x03,
+  0x57, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
+  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+  0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x00, 0x03, 0x97, 0xff, 0xfb, 0x80,
+  0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
+  0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0xb3, 0x0b,
+  0x70, 0xd9, 0x13, 0xff, 0xff, 0xe0, 0x28, 0x00,
+  0x00, 0x01, 0xb5, 0x14, 0x8a, 0x00, 0x01, 0x00,
+  0x00, 0x00, 0x00, 0x01, 0xb8, 0x00, 0x08, 0x07,
+  0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0f, 0xff,
+  0xf8, 0x00, 0x00, 0x01, 0xb5, 0x8f, 0xff, 0xf3,
+  0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x13, 0xf9,
+  0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20,
+  0x00, 0x00, 0x01, 0x02, 0x13, 0xf9, 0x45, 0x29,
+  0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00,
+  0x01, 0x03, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7,
+  0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+  0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x04,
+  0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+  0x22, 0x20, 0x00, 0x00, 0x01, 0x05, 0x13, 0xf9,
+  0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20,
+  0x00, 0x00, 0x01, 0x06, 0x13, 0xf9, 0x45, 0x29,
+  0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00,
+  0x01, 0x07, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7,
+  0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+  0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x08,
+  0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+  0x22, 0x20, 0x00, 0x00, 0x01, 0x09, 0x13, 0xf9,
+  0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20,
+  0x00, 0x00, 0x01, 0x0a, 0x13, 0xf9, 0x45, 0x29,
+  0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00,
+  0x01, 0x0b, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7,
+  0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+  0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x0c,
+  0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+  0x22, 0x20, 0x00, 0x00, 0x01, 0x0d, 0x13, 0xf9,
+  0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20,
+  0x00, 0x00, 0x01, 0x0e, 0x13, 0xf9, 0x45, 0x29,
+  0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x57, 0xff, 0xfb, 0x80, 0x00,
+  0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
+  0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x00, 0x97,
+  0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
+  0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0xd7, 0xff, 0xfb, 0x80, 0x00,
+  0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
+  0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x01, 0x17,
+  0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
+  0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x00, 0x01, 0x57, 0xff, 0xfb, 0x80, 0x00,
+  0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
+  0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x01, 0x97,
+  0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
+  0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x00, 0x01, 0xd7, 0xff, 0xfb, 0x80, 0x00,
+  0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
+  0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x02, 0x17,
+  0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
+  0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x00, 0x02, 0x57, 0xff, 0xfb, 0x80, 0x00,
+  0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
+  0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x02, 0x97,
+  0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
+  0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x00, 0x02, 0xd7, 0xff, 0xfb, 0x80, 0x00,
+  0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
+  0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x03, 0x17,
+  0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
+  0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x00, 0x03, 0x57, 0xff, 0xfb, 0x80, 0x00,
+  0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
+  0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x03, 0x97,
+  0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
+  0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0xb3, 0x0b, 0x70, 0xd9, 0x13, 0xff, 0xff,
+  0xe0, 0x28, 0x00, 0x00, 0x01, 0xb5, 0x14, 0x8a,
+  0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb8,
+  0x00, 0x08, 0x22, 0x80, 0x00, 0x00, 0x01, 0x00,
+  0x00, 0x0f, 0xff, 0xf8, 0x00, 0x00, 0x01, 0xb5,
+  0x8f, 0xff, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
+  0x01, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
+  0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x02, 0x13,
+  0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x20, 0x00, 0x00, 0x01, 0x03, 0x13, 0xf9, 0x45,
+  0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
+  0x00, 0x01, 0x04, 0x13, 0xf9, 0x45, 0x29, 0x4b,
+  0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
+  0x05, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
+  0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x06, 0x13,
+  0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x20, 0x00, 0x00, 0x01, 0x07, 0x13, 0xf9, 0x45,
+  0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
+  0x00, 0x01, 0x08, 0x13, 0xf9, 0x45, 0x29, 0x4b,
+  0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
+  0x09, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
+  0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x0a, 0x13,
+  0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x20, 0x00, 0x00, 0x01, 0x0b, 0x13, 0xf9, 0x45,
+  0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
+  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
+  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
+  0x00, 0x01, 0x0c, 0x13, 0xf9, 0x45, 0x29, 0x4b,
+  0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
+  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
+  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
+  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
+  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
+  0x0d, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
+  0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
+  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
+  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
+  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x0e, 0x13,
+  0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
+  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
+  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
+  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
+  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
+  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
+  0x20, 0x00, 0x00, 0x01, 0x00, 0x00, 0x57, 0xff,
+  0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f,
+  0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
+  0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
+  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08,
+  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
+  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09, 0x12,
+  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
+  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12, 0x70,
+  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
+  0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1,
+  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
+  0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc,
+  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
+  0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
+  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
+  0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
+  0xa5, 0xfb, 0x85, 0xe6, 0xc0
+};
+
+static const guint test_stream2_sizes[] = {
+  803, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
+  803, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
+  803, 228
+};
+
+
+static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/mpeg, "
+        "systemstream=(boolean)false, " "mpegversion=(int)2")
+    );
+
+GstElement *
+setup_mpeg2dec ()
+{
+  GstElement *mpeg2dec;
+  GstCaps *caps;
+
+  GST_DEBUG ("setup_mpeg2dec");
+  mpeg2dec = gst_check_setup_element ("mpeg2dec");
+  mysrcpad = gst_check_setup_src_pad (mpeg2dec, &srctemplate);
+  mysinkpad = gst_check_setup_sink_pad (mpeg2dec, &sinktemplate);
+  gst_pad_set_active (mysrcpad, TRUE);
+  gst_pad_set_active (mysinkpad, TRUE);
+
+  caps = gst_caps_new_simple ("video/mpeg",
+      "systemstream", G_TYPE_BOOLEAN, FALSE,
+      "mpegversion", G_TYPE_INT, 2, NULL);
+  gst_check_setup_events (mysrcpad, mpeg2dec, caps, GST_FORMAT_TIME);
+  gst_caps_unref (caps);
+
+  return mpeg2dec;
+}
+
+void
+cleanup_mpeg2dec (GstElement * mpeg2dec)
+{
+  GST_DEBUG ("cleanup_mpeg2dec");
+  gst_element_set_state (mpeg2dec, GST_STATE_NULL);
+
+  gst_pad_set_active (mysrcpad, FALSE);
+  gst_pad_set_active (mysinkpad, FALSE);
+  gst_check_teardown_src_pad (mpeg2dec);
+  gst_check_teardown_sink_pad (mpeg2dec);
+  gst_check_teardown_element (mpeg2dec);
+}
+
+GST_START_TEST (test_decode_stream1)
+{
+  GstElement *mpeg2dec;
+  GstBuffer *inbuffer, *outbuffer;
+  GstBus *bus;
+  int i, num_buffers;
+  GstCaps *out_caps, *caps;
+  guint offset = 0;
+  GstVideoInfo info;
+
+  mpeg2dec = setup_mpeg2dec ();
+
+  fail_unless (gst_element_set_state (mpeg2dec,
+          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+      "could not set to playing");
+  bus = gst_bus_new ();
+
+  gst_element_set_bus (mpeg2dec, bus);
+
+  for (i = 0; i < G_N_ELEMENTS (test_stream_sizes); i++) {
+    inbuffer =
+        gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY,
+        (guint8 *) test_stream1 + offset, test_stream_sizes[i], 0,
+        test_stream_sizes[i], NULL, NULL);
+    offset += test_stream_sizes[i];
+    ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+    gst_buffer_ref (inbuffer);
+    /* should decode the buffer without problems */
+    fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+
+    gst_buffer_unref (inbuffer);
+  }
+
+  num_buffers = g_list_length (buffers);
+
+  /* should be 30 buffers, one per decoded frame */
+  fail_unless_equals_int (num_buffers, 30);
+
+  /* each buffer should have these caps */
+  gst_video_info_init (&info);
+  gst_video_info_set_format (&info, GST_VIDEO_FORMAT_I420, 176, 144);
+  GST_VIDEO_INFO_PAR_N (&info) = GST_VIDEO_INFO_PAR_D (&info) = 1;
+  GST_VIDEO_INFO_FPS_N (&info) = 25;
+  GST_VIDEO_INFO_FPS_D (&info) = 1;
+  GST_VIDEO_INFO_FPS_D (&info) = 1;
+  GST_VIDEO_INFO_CHROMA_SITE (&info) = GST_VIDEO_CHROMA_SITE_MPEG2;
+  gst_video_colorimetry_from_string (&GST_VIDEO_INFO_COLORIMETRY (&info),
+      "2:0:0:0");
+  GST_VIDEO_INFO_MULTIVIEW_MODE (&info) = GST_VIDEO_MULTIVIEW_MODE_MONO;
+
+  out_caps = gst_video_info_to_caps (&info);
+
+  caps = gst_pad_get_current_caps (mysinkpad);
+  GST_LOG ("output caps %" GST_PTR_FORMAT, caps);
+  fail_unless (gst_caps_is_equal_fixed (caps, out_caps), "Incorrect out caps");
+  gst_caps_unref (caps);
+
+  for (i = 0; i < num_buffers; ++i) {
+    outbuffer = GST_BUFFER (buffers->data);
+    fail_if (outbuffer == NULL);
+
+    /* I420 with 176x144 should have this size if nothing else was negotiated */
+    fail_unless_equals_int (gst_buffer_get_size (outbuffer), 38016);
+
+    buffers = g_list_remove (buffers, outbuffer);
+    gst_buffer_unref (outbuffer);
+    outbuffer = NULL;
+  }
+
+  gst_caps_unref (out_caps);
+  g_list_free (buffers);
+  buffers = NULL;
+
+  gst_bus_set_flushing (bus, TRUE);
+  gst_element_set_bus (mpeg2dec, NULL);
+  gst_object_unref (GST_OBJECT (bus));
+  cleanup_mpeg2dec (mpeg2dec);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_decode_stream2)
+{
+  GstElement *mpeg2dec;
+  GstBuffer *inbuffer, *outbuffer;
+  GstBus *bus;
+  int i, num_buffers;
+  GstCaps *out_caps;
+  GstCaps *caps;
+  guint offset = 0;
+  GstVideoInfo info;
+
+  mpeg2dec = setup_mpeg2dec ();
+
+  fail_unless (gst_element_set_state (mpeg2dec,
+          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+      "could not set to playing");
+  bus = gst_bus_new ();
+
+  gst_element_set_bus (mpeg2dec, bus);
+
+  for (i = 0; i < G_N_ELEMENTS (test_stream2_sizes); i++) {
+    inbuffer =
+        gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY,
+        (guint8 *) test_stream2 + offset, test_stream2_sizes[i], 0,
+        test_stream2_sizes[i], NULL, NULL);
+    offset += test_stream2_sizes[i];
+    ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+    gst_buffer_ref (inbuffer);
+    /* should decode the buffer without problems */
+    fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+
+    gst_buffer_unref (inbuffer);
+  }
+
+
+  num_buffers = g_list_length (buffers);
+
+  /* should be 30 buffers, one per decoded frame */
+  fail_unless_equals_int (num_buffers, 30);
+
+  /* each buffer should have these caps */
+  gst_video_info_init (&info);
+  gst_video_info_set_format (&info, GST_VIDEO_FORMAT_I420, 183, 217);
+  GST_VIDEO_INFO_PAR_N (&info) = GST_VIDEO_INFO_PAR_D (&info) = 1;
+  GST_VIDEO_INFO_FPS_N (&info) = 25;
+  GST_VIDEO_INFO_FPS_D (&info) = 1;
+  GST_VIDEO_INFO_FPS_D (&info) = 1;
+  GST_VIDEO_INFO_CHROMA_SITE (&info) = GST_VIDEO_CHROMA_SITE_MPEG2;
+  gst_video_colorimetry_from_string (&GST_VIDEO_INFO_COLORIMETRY (&info),
+      "2:0:0:0");
+  GST_VIDEO_INFO_MULTIVIEW_MODE (&info) = GST_VIDEO_MULTIVIEW_MODE_MONO;
+
+  out_caps = gst_video_info_to_caps (&info);
+
+  caps = gst_pad_get_current_caps (mysinkpad);
+  GST_LOG ("output caps %" GST_PTR_FORMAT, caps);
+  GST_LOG ("expected caps %" GST_PTR_FORMAT, out_caps);
+  fail_unless (gst_caps_is_equal_fixed (caps, out_caps), "Incorrect out caps");
+  gst_caps_unref (caps);
+
+  for (i = 0; i < num_buffers; ++i) {
+    outbuffer = GST_BUFFER (buffers->data);
+    fail_if (outbuffer == NULL);
+
+    /* I420 with 183x217 must have this size */
+    fail_unless_equals_int (gst_buffer_get_size (outbuffer), 60168);
+
+    buffers = g_list_remove (buffers, outbuffer);
+    gst_buffer_unref (outbuffer);
+    outbuffer = NULL;
+  }
+
+  gst_caps_unref (out_caps);
+  g_list_free (buffers);
+  buffers = NULL;
+
+  gst_bus_set_flushing (bus, TRUE);
+  gst_element_set_bus (mpeg2dec, NULL);
+  gst_object_unref (GST_OBJECT (bus));
+  cleanup_mpeg2dec (mpeg2dec);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_decode_garbage)
+{
+  GstElement *mpeg2dec;
+  GstBuffer *inbuffer;
+  GstBus *bus;
+  int i, num_buffers;
+  guint32 *tmpbuf;
+
+  mpeg2dec = setup_mpeg2dec ();
+
+  fail_unless (gst_element_set_state (mpeg2dec,
+          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+      "could not set to playing");
+  bus = gst_bus_new ();
+
+  /* initialize the buffer with something that is no mpeg2 */
+  tmpbuf = g_new (guint32, 4096);
+  for (i = 0; i < 4096; i++) {
+    tmpbuf[i] = i;
+  }
+  inbuffer = gst_buffer_new_wrapped (tmpbuf, 4096 * sizeof (guint32));
+
+  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+  gst_buffer_ref (inbuffer);
+
+  gst_element_set_bus (mpeg2dec, bus);
+
+  /* should be possible to push without problems but nothing gets decoded */
+  fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+
+  gst_buffer_unref (inbuffer);
+
+  num_buffers = g_list_length (buffers);
+
+  /* should be 0 buffers as decoding should've been impossible */
+  fail_unless_equals_int (num_buffers, 0);
+
+  g_list_free (buffers);
+  buffers = NULL;
+
+  gst_bus_set_flushing (bus, TRUE);
+  gst_element_set_bus (mpeg2dec, NULL);
+  gst_object_unref (GST_OBJECT (bus));
+  cleanup_mpeg2dec (mpeg2dec);
+}
+
+GST_END_TEST;
+Suite *
+mpeg2dec_suite (void)
+{
+  Suite *s = suite_create ("mpeg2dec");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_decode_stream1);
+  tcase_add_test (tc_chain, test_decode_stream2);
+  tcase_add_test (tc_chain, test_decode_garbage);
+
+  return s;
+}
+
+GST_CHECK_MAIN (mpeg2dec);
diff --git a/subprojects/gst-plugins-ugly/tests/check/elements/x264enc.c b/subprojects/gst-plugins-ugly/tests/check/elements/x264enc.c
new file mode 100644 (file)
index 0000000..27f8fdf
--- /dev/null
@@ -0,0 +1,416 @@
+/* GStreamer
+ *
+ * unit test for x264enc
+ *
+ * Copyright (C) <2008> Mark Nauwelaerts <mnauw@users.sf.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/check/gstcheck.h>
+#include <gst/video/video.h>
+
+/* For ease of programming we use globals to keep refs for our floating
+ * src and sink pads we create; otherwise we always have to do get_pad,
+ * get_peer, and then remove references in every test function */
+static GstPad *mysrcpad, *mysinkpad;
+
+#define VIDEO_CAPS_STRING "video/x-raw, " \
+                           "width = (int) 384, " \
+                           "height = (int) 288, " \
+                           "framerate = (fraction) 25/1"
+
+#define H264_CAPS_STRING "video/x-h264, " \
+                           "width = (int) 384, " \
+                           "height = (int) 288, " \
+                           "framerate = (fraction) 25/1"
+
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (VIDEO_CAPS_STRING));
+
+static void cleanup_x264enc (GstElement * x264enc);
+
+static GstElement *
+setup_x264enc (const gchar * profile, const gchar * stream_format,
+    GstVideoFormat input_format)
+{
+  GstPadTemplate *sink_tmpl, *tmpl;
+  GstElement *x264enc;
+  GstCaps *caps, *tmpl_caps;
+
+  GST_DEBUG ("setup_x264enc");
+
+  caps = gst_caps_from_string (H264_CAPS_STRING);
+  gst_caps_set_simple (caps, "profile", G_TYPE_STRING, profile,
+      "stream-format", G_TYPE_STRING, stream_format, NULL);
+  sink_tmpl = gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, caps);
+  gst_caps_unref (caps);
+
+  x264enc = gst_check_setup_element ("x264enc");
+  mysrcpad = gst_check_setup_src_pad (x264enc, &srctemplate);
+  mysinkpad = gst_check_setup_sink_pad_from_template (x264enc, sink_tmpl);
+  gst_pad_set_active (mysrcpad, TRUE);
+  gst_pad_set_active (mysinkpad, TRUE);
+
+  caps = gst_caps_from_string (VIDEO_CAPS_STRING);
+  gst_caps_set_simple (caps, "format", G_TYPE_STRING,
+      gst_video_format_to_string (input_format), NULL);
+
+  tmpl = gst_element_get_pad_template (x264enc, "sink");
+  tmpl_caps = gst_pad_template_get_caps (tmpl);
+
+  if (gst_caps_can_intersect (caps, tmpl_caps)) {
+    gst_check_setup_events (mysrcpad, x264enc, caps, GST_FORMAT_TIME);
+  } else {
+    cleanup_x264enc (x264enc);
+    x264enc = NULL;
+  }
+
+  gst_caps_unref (tmpl_caps);
+  gst_caps_unref (caps);
+  gst_object_unref (sink_tmpl);
+
+  return x264enc;
+}
+
+static void
+cleanup_x264enc (GstElement * x264enc)
+{
+  GST_DEBUG ("cleanup_x264enc");
+  gst_element_set_state (x264enc, GST_STATE_NULL);
+
+  gst_pad_set_active (mysrcpad, FALSE);
+  gst_pad_set_active (mysinkpad, FALSE);
+  gst_check_teardown_src_pad (x264enc);
+  gst_check_teardown_sink_pad (x264enc);
+  gst_check_teardown_element (x264enc);
+}
+
+static void
+check_caps (GstCaps * caps, const gchar * profile, gint profile_id)
+{
+  GstStructure *s;
+  const GValue *sf, *avcc, *pf;
+  const gchar *stream_format;
+  const gchar *caps_profile;
+
+  fail_unless (caps != NULL);
+
+  GST_INFO ("caps %" GST_PTR_FORMAT, caps);
+  s = gst_caps_get_structure (caps, 0);
+  fail_unless (s != NULL);
+  fail_if (!gst_structure_has_name (s, "video/x-h264"));
+  sf = gst_structure_get_value (s, "stream-format");
+  fail_unless (sf != NULL);
+  fail_unless (G_VALUE_HOLDS_STRING (sf));
+  stream_format = g_value_get_string (sf);
+  fail_unless (stream_format != NULL);
+  if (strcmp (stream_format, "avc") == 0) {
+    GstMapInfo map;
+    GstBuffer *buf;
+
+    avcc = gst_structure_get_value (s, "codec_data");
+    fail_unless (avcc != NULL);
+    fail_unless (GST_VALUE_HOLDS_BUFFER (avcc));
+    buf = gst_value_get_buffer (avcc);
+    fail_unless (buf != NULL);
+    gst_buffer_map (buf, &map, GST_MAP_READ);
+    fail_unless_equals_int (map.data[0], 1);
+    fail_unless (map.data[1] == profile_id,
+        "Expected profile ID %#04x, got %#04x", profile_id, map.data[1]);
+    gst_buffer_unmap (buf, &map);
+  } else if (strcmp (stream_format, "byte-stream") == 0) {
+    fail_if (gst_structure_get_value (s, "codec_data") != NULL);
+  } else {
+    fail_if (TRUE, "unexpected stream-format in caps: %s", stream_format);
+  }
+
+  pf = gst_structure_get_value (s, "profile");
+  fail_unless (pf != NULL);
+  fail_unless (G_VALUE_HOLDS_STRING (pf));
+  caps_profile = g_value_get_string (pf);
+  fail_unless (caps_profile != NULL);
+  fail_unless (!strcmp (caps_profile, profile));
+}
+
+static const GstVideoFormat formats_420_8[] =
+    { GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_NV12,
+  GST_VIDEO_FORMAT_UNKNOWN
+};
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+static const GstVideoFormat formats_420_10[] =
+    { GST_VIDEO_FORMAT_I420_10LE, GST_VIDEO_FORMAT_UNKNOWN };
+static const GstVideoFormat formats_422[] =
+    { GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_I422_10LE,
+  GST_VIDEO_FORMAT_UNKNOWN
+};
+
+static const GstVideoFormat formats_444[] =
+    { GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_Y444_10LE,
+  GST_VIDEO_FORMAT_UNKNOWN
+};
+#else
+static const GstVideoFormat formats_420_10[] =
+    { GST_VIDEO_FORMAT_I420_10BE, GST_VIDEO_FORMAT_UNKNOWN };
+static const GstVideoFormat formats_422[] =
+    { GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_I422_10BE,
+  GST_VIDEO_FORMAT_UNKNOWN
+};
+
+static const GstVideoFormat formats_444[] =
+    { GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_Y444_10BE,
+  GST_VIDEO_FORMAT_UNKNOWN
+};
+#endif
+
+static void
+test_video_profile (const gchar * profile, gint profile_id,
+    const GstVideoFormat input_formats[], gint input_format_index)
+{
+  GstVideoFormat input_format = input_formats[input_format_index];
+  GstElement *x264enc;
+  GstBuffer *inbuffer, *outbuffer;
+  int i, num_buffers;
+  GstVideoInfo vinfo;
+  GstCaps *caps;
+
+  fail_unless (gst_video_info_set_format (&vinfo, input_format, 384, 288));
+
+  x264enc = setup_x264enc (profile, "avc", input_format);
+  if (x264enc == NULL) {
+    g_printerr ("WARNING: input format '%s' not supported\n",
+        gst_video_format_to_string (input_format));
+    return;
+  }
+
+  fail_unless (gst_element_set_state (x264enc,
+          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+      "could not set to playing");
+
+  /* check that we only accept input formats compatible with the output caps */
+  caps = gst_pad_peer_query_caps (mysrcpad, NULL);
+  for (i = 0; i < gst_caps_get_size (caps); i++) {
+    GstStructure *s = gst_caps_get_structure (caps, i);
+    const GValue *v, *vi;
+    guint vlen, j = 0;
+
+    v = gst_structure_get_value (s, "format");
+
+    if (G_VALUE_TYPE (v) == G_TYPE_STRING) {
+      vlen = 1;
+      vi = v;
+    } else if (G_VALUE_TYPE (v) == GST_TYPE_LIST) {
+      vlen = gst_value_list_get_size (v);
+      fail_unless (vlen > 0, "Got empty format list");
+      vi = gst_value_list_get_value (v, 0);
+    } else {
+      fail ("Bad format in structure: %" GST_PTR_FORMAT, s);
+      g_assert_not_reached ();
+    }
+
+    while (TRUE) {
+      const gchar *str = g_value_get_string (vi);
+      GstVideoFormat format = gst_video_format_from_string (str);
+      int k;
+
+      for (k = 0;; k++) {
+        fail_unless (input_formats[k] != GST_VIDEO_FORMAT_UNKNOWN,
+            "Bad format: %s", str);
+        if (input_formats[k] == format)
+          break;
+      }
+
+      if (++j < vlen)
+        vi = gst_value_list_get_value (v, j);
+      else
+        break;
+    }
+  }
+  gst_caps_unref (caps);
+
+  /* corresponds to buffer for the size mentioned in the caps */
+  inbuffer = gst_buffer_new_and_alloc (GST_VIDEO_INFO_SIZE (&vinfo));
+
+  /* makes valgrind's memcheck happier */
+  gst_buffer_memset (inbuffer, 0, 0, -1);
+  GST_BUFFER_TIMESTAMP (inbuffer) = 0;
+  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+  fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
+
+  /* send eos to have all flushed if needed */
+  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()) == TRUE);
+
+  num_buffers = g_list_length (buffers);
+  fail_unless (num_buffers == 1);
+
+  /* check output caps */
+  {
+    GstCaps *outcaps;
+
+    outcaps = gst_pad_get_current_caps (mysinkpad);
+    check_caps (outcaps, profile, profile_id);
+    gst_caps_unref (outcaps);
+  }
+
+  /* validate buffers */
+  for (i = 0; i < num_buffers; ++i) {
+    outbuffer = GST_BUFFER (buffers->data);
+    fail_if (outbuffer == NULL);
+
+    switch (i) {
+      case 0:
+      {
+        gint nsize, npos, j, type, next_type;
+        GstMapInfo map;
+        const guint8 *data;
+        gsize size;
+
+        gst_buffer_map (outbuffer, &map, GST_MAP_READ);
+        data = map.data;
+        size = map.size;
+
+        npos = 0;
+        j = 0;
+        /* need SPS first */
+        next_type = 7;
+        /* loop through NALs */
+        while (npos < size) {
+          fail_unless (size - npos >= 4);
+          nsize = GST_READ_UINT32_BE (data + npos);
+          fail_unless (nsize > 0);
+          fail_unless (npos + 4 + nsize <= size);
+          type = data[npos + 4] & 0x1F;
+          /* check the first NALs, disregard AU (9), SEI (6) */
+          if (type != 9 && type != 6) {
+            fail_unless (type == next_type);
+            switch (type) {
+              case 7:
+                /* SPS */
+                next_type = 8;
+                break;
+              case 8:
+                /* PPS */
+                next_type = 5;
+                break;
+              default:
+                break;
+            }
+            j++;
+          }
+          npos += nsize + 4;
+        }
+        gst_buffer_unmap (outbuffer, &map);
+        /* should have reached the exact end */
+        fail_unless (npos == size);
+        break;
+      }
+      default:
+        break;
+    }
+
+    buffers = g_list_remove (buffers, outbuffer);
+
+    ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1);
+    gst_buffer_unref (outbuffer);
+    outbuffer = NULL;
+  }
+
+  cleanup_x264enc (x264enc);
+  g_list_free (buffers);
+  buffers = NULL;
+}
+
+GST_START_TEST (test_video_baseline)
+{
+  gint i;
+
+  for (i = 0; formats_420_8[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
+    test_video_profile ("constrained-baseline", 0x42, formats_420_8, i);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_video_main)
+{
+  gint i;
+
+  for (i = 0; formats_420_8[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
+    test_video_profile ("main", 0x4d, formats_420_8, i);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_video_high)
+{
+  gint i;
+
+  for (i = 0; formats_420_8[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
+    test_video_profile ("high", 0x64, formats_420_8, i);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_video_high10)
+{
+  gint i;
+
+  for (i = 0; formats_420_10[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
+    test_video_profile ("high-10", 0x6e, formats_420_10, i);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_video_high422)
+{
+  gint i;
+
+  for (i = 0; formats_422[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
+    test_video_profile ("high-4:2:2", 0x7A, formats_422, i);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_video_high444)
+{
+  gint i;
+
+  for (i = 0; formats_444[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
+    test_video_profile ("high-4:4:4", 0xF4, formats_444, i);
+}
+
+GST_END_TEST;
+
+Suite *
+x264enc_suite (void)
+{
+  Suite *s = suite_create ("x264enc");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_video_baseline);
+  tcase_add_test (tc_chain, test_video_main);
+  tcase_add_test (tc_chain, test_video_high);
+  tcase_add_test (tc_chain, test_video_high10);
+  tcase_add_test (tc_chain, test_video_high422);
+  tcase_add_test (tc_chain, test_video_high444);
+
+  return s;
+}
+
+GST_CHECK_MAIN (x264enc);
diff --git a/subprojects/gst-plugins-ugly/tests/check/elements/xingmux.c b/subprojects/gst-plugins-ugly/tests/check/elements/xingmux.c
new file mode 100644 (file)
index 0000000..b1fa510
--- /dev/null
@@ -0,0 +1,154 @@
+/* GStreamer
+ *
+ * Copyright (C) 2008 Sebastian Dröge <slomo@circular-chaos.org>
+ *
+ * xingmux.c: Unit test for the xingmux element
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#include <gst/gst.h>
+#include <gst/base/gstbasetransform.h>
+#include <gst/check/gstcheck.h>
+
+#include <math.h>
+
+#include "xingmux_testdata.h"
+
+/* For ease of programming we use globals to keep refs for our floating
+ * src and sink pads we create; otherwise we always have to do get_pad,
+ * get_peer, and then remove references in every test function */
+GstPad *mysrcpad, *mysinkpad;
+
+static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/mpeg, " "mpegversion = (int) 1," "layer = (int) 3")
+    );
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/mpeg, " "mpegversion = (int) 1," "layer = (int) 3")
+    );
+
+GstElement *
+setup_xingmux ()
+{
+  GstElement *xingmux;
+  GstCaps *caps;
+
+  GST_DEBUG ("setup_xingmux");
+  xingmux = gst_check_setup_element ("xingmux");
+  mysrcpad = gst_check_setup_src_pad (xingmux, &srctemplate);
+  mysinkpad = gst_check_setup_sink_pad (xingmux, &sinktemplate);
+  gst_pad_set_active (mysrcpad, TRUE);
+  gst_pad_set_active (mysinkpad, TRUE);
+
+  caps = gst_caps_new_simple ("audio/mpeg",
+      "mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 3, NULL);
+  gst_check_setup_events (mysrcpad, xingmux, caps, GST_FORMAT_TIME);
+  gst_caps_unref (caps);
+
+  return xingmux;
+}
+
+void
+cleanup_xingmux (GstElement * xingmux)
+{
+  GST_DEBUG ("cleanup_xingmux");
+
+  g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
+  g_list_free (buffers);
+  buffers = NULL;
+
+  gst_pad_set_active (mysrcpad, FALSE);
+  gst_pad_set_active (mysinkpad, FALSE);
+  gst_check_teardown_src_pad (xingmux);
+  gst_check_teardown_sink_pad (xingmux);
+  gst_check_teardown_element (xingmux);
+}
+
+GST_START_TEST (test_xing_remux)
+{
+  GstElement *xingmux;
+  GstBuffer *inbuffer;
+  GList *it;
+  const guint8 *verify_data;
+
+  xingmux = setup_xingmux ();
+
+  fail_unless (gst_element_set_state (xingmux,
+          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+      "could not set to playing");
+
+  inbuffer = gst_buffer_new_and_alloc (sizeof (test_xing));
+  gst_buffer_fill (inbuffer, 0, test_xing, sizeof (test_xing));
+
+  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+
+  /* pushing gives away my reference ... */
+  fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
+  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
+  /* ... and puts a new buffer on the global list */
+  fail_unless_equals_int (g_list_length (buffers), 93);
+
+  verify_data = test_xing;
+  for (it = buffers; it != NULL; it = it->next) {
+    GstBuffer *outbuffer = (GstBuffer *) it->data;
+    GstMapInfo map;
+
+    gst_buffer_map (outbuffer, &map, GST_MAP_READ);
+
+    if (it == buffers) {
+      gint j;
+
+      /* Empty Xing header, should be the same as input data until the "Xing" marker
+       * and zeroes afterwards. */
+      fail_unless (memcmp (map.data, test_xing, 25) == 0);
+      for (j = 26; j < map.size; j++)
+        fail_unless (map.data[j] == 0);
+      verify_data += map.size;
+    } else if (it->next != NULL) {
+      /* Should contain the raw MP3 data without changes */
+      fail_unless (memcmp (map.data, verify_data, map.size) == 0);
+      verify_data += map.size;
+    } else {
+      /* Last buffer is the rewrite of the first buffer and should be exactly the same
+       * as the old Xing header we had */
+      fail_unless (memcmp (test_xing, map.data, map.size) == 0);
+    }
+    gst_buffer_unmap (outbuffer, &map);
+  }
+
+  /* cleanup */
+  cleanup_xingmux (xingmux);
+}
+
+GST_END_TEST;
+
+Suite *
+xingmux_suite (void)
+{
+  Suite *s = suite_create ("xingmux");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_xing_remux);
+
+  return s;
+}
+
+GST_CHECK_MAIN (xingmux);
diff --git a/subprojects/gst-plugins-ugly/tests/check/elements/xingmux_testdata.h b/subprojects/gst-plugins-ugly/tests/check/elements/xingmux_testdata.h
new file mode 100644 (file)
index 0000000..2319ee2
--- /dev/null
@@ -0,0 +1,4777 @@
+static const guint8 test_xing[] = {
+0xff, 0xfb, 0x30, 0xc4, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x69, 0x6e, 
+0x67, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 
+0x5c, 0x00, 0x00, 0x95, 0x2e, 0x00, 0x03, 0x06, 
+0x09, 0x0c, 0x0f, 0x11, 0x14, 0x17, 0x1a, 0x1d, 
+0x1f, 0x1f, 0x22, 0x25, 0x28, 0x2b, 0x2d, 0x30, 
+0x33, 0x36, 0x39, 0x3b, 0x3b, 0x3e, 0x41, 0x44, 
+0x47, 0x49, 0x4c, 0x4f, 0x52, 0x55, 0x57, 0x57, 
+0x5a, 0x5d, 0x60, 0x63, 0x65, 0x68, 0x6b, 0x6e, 
+0x71, 0x73, 0x73, 0x76, 0x79, 0x7c, 0x7f, 0x81, 
+0x84, 0x87, 0x8a, 0x8d, 0x8f, 0x8f, 0x92, 0x95, 
+0x98, 0x9b, 0x9d, 0xa0, 0xa3, 0xa6, 0xa9, 0xab, 
+0xab, 0xae, 0xb1, 0xb4, 0xb7, 0xb9, 0xbc, 0xbf, 
+0xc2, 0xc5, 0xc7, 0xc7, 0xca, 0xcd, 0xd0, 0xd3, 
+0xd5, 0xd8, 0xdb, 0xde, 0xe1, 0xe3, 0xe3, 0xe6, 
+0xe9, 0xec, 0xef, 0xf1, 0xf4, 0xf7, 0xfa, 0xfd, 
+0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 0xff, 0xfb, 0x90, 0xc4, 
+0x00, 0x03, 0x8f, 0xd4, 0x59, 0x42, 0x6d, 0xe1, 
+0x27, 0x02, 0xde, 0x92, 0x67, 0x09, 0xed, 0x25, 
+0x29, 0x00, 0x00, 0x0a, 0x70, 0xcc, 0x4b, 0x4c, 
+0xac, 0xbc, 0xcc, 0x4a, 0xcc, 0xbd, 0x24, 0xd7, 
+0xce, 0xcc, 0xca, 0xa8, 0xf5, 0x2b, 0x8d, 0x80, 
+0xa8, 0xfd, 0x43, 0x9a, 0xc1, 0xcb, 0x43, 0x30, 
+0x10, 0xd0, 0x06, 0x91, 0x6a, 0x0e, 0xbb, 0xd9, 
+0x7b, 0x5c, 0x72, 0x1c, 0x87, 0x20, 0x0c, 0x02, 
+0x00, 0x80, 0x60, 0x50, 0x2b, 0x15, 0x8a, 0xc5, 
+0x62, 0xb2, 0x74, 0x68, 0xd1, 0xa0, 0x40, 0x81, 
+0x02, 0x04, 0x08, 0x18, 0x04, 0xc1, 0xf0, 0x7c, 
+0x1f, 0x07, 0xc1, 0x00, 0x40, 0x10, 0x04, 0x01, 
+0x30, 0x7c, 0x1f, 0x07, 0xc1, 0xf0, 0x40, 0x10, 
+0x04, 0x01, 0x03, 0x22, 0x70, 0xff, 0xe6, 0x4b, 
+0x87, 0xff, 0x97, 0x07, 0xc1, 0xfb, 0xbf, 0xc1, 
+0x00, 0x40, 0x10, 0x0c, 0x27, 0xfc, 0xb8, 0x3e, 
+0x0f, 0x83, 0xe1, 0xf0, 0x40, 0x10, 0x04, 0x01, 
+0x04, 0x89, 0xc1, 0xf0, 0x7e, 0xe2, 0x80, 0x80, 
+0x34, 0x60, 0x02, 0x05, 0x06, 0x08, 0xa0, 0xa0, 
+0x60, 0xba, 0x0f, 0x06, 0x11, 0xa0, 0xf8, 0x61, 
+0x0e, 0x25, 0x06, 0x51, 0xab, 0x64, 0x67, 0xb4, 
+0x1b, 0x66, 0x12, 0x01, 0x3a, 0x60, 0xf0, 0x0a, 
+0x26, 0x06, 0x20, 0x90, 0x70, 0x53, 0x1a, 0x38, 
+0x80, 0x12, 0x86, 0x3c, 0x51, 0x87, 0x0c, 0x61, 
+0x41, 0x18, 0x10, 0x00, 0x10, 0x05, 0xc1, 0x2f, 
+0x0a, 0x0e, 0xa4, 0x4a, 0x82, 0xaa, 0x55, 0x8a, 
+0xbb, 0x56, 0x15, 0x87, 0x33, 0xa6, 0x74, 0xe5, 
+0x00, 0x20, 0x04, 0x00, 0x80, 0x10, 0x06, 0x04, 
+0x41, 0x10, 0x44, 0x11, 0x14, 0x8a, 0x45, 0x22, 
+0x91, 0x48, 0xa8, 0x54, 0x2a, 0x15, 0x13, 0x22, 
+0x44, 0x88, 0x89, 0x0a, 0x14, 0x28, 0x50, 0xa1, 
+0x42, 0x85, 0x0a, 0x24, 0x48, 0x91, 0x22, 0x44, 
+0x89, 0x12, 0x25, 0x41, 0x41, 0x41, 0x41, 0x42, 
+0x82, 0x82, 0x82, 0x82, 0x41, 0x41, 0x41, 0x41, 
+0x42, 0x82, 0x82, 0x82, 0x82, 0x41, 0x41, 0x41, 
+0x41, 0x42, 0x82, 0x82, 0x82, 0x82, 0x41, 0x41, 
+0x41, 0x41, 0x42, 0x82, 0x82, 0x82, 0x82, 0x41, 
+0x41, 0x41, 0x41, 0x42, 0x82, 0x82, 0x82, 0x82, 
+0x41, 0x41, 0x41, 0x41, 0x42, 0x82, 0x82, 0x82, 
+0x82, 0x41, 0x41, 0x41, 0x41, 0x42, 0x82, 0x82, 
+0x82, 0x82, 0x41, 0x41, 0x41, 0x41, 0x42, 0x95, 
+0x32, 0x88, 0xad, 0x32, 0xe4, 0xdc, 0x34, 0x09, 
+0x55, 0x36, 0xd6, 0x8e, 0x30, 0xf8, 0x87, 0xdd, 
+0x36, 0x72, 0xfd, 0x01, 0x36, 0x47, 0x87, 0xab, 
+0x30, 0xe7, 0xc2, 0x26, 0x30, 0x42, 0x80, 0x71, 
+0x30, 0x0e, 0xc0, 0x94, 0x36, 0xa3, 0x8c, 0xe3, 
+0x3b, 0x43, 0x5f, 0xa1, 0x8c, 0x50, 0x07, 0x43, 
+0x67, 0x16, 0x5d, 0xe2, 0x17, 0xf6, 0xbf, 0xdd, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xbf, 0xff, 0xe9, 0x30, 0x05, 0xc0, 0x37, 0x30, 
+0x1e, 0x80, 0x9e, 0x30, 0x3d, 0x41, 0x33, 0x30, 
+0x73, 0x82, 0x72, 0x31, 0x0c, 0xff, 0xfb, 0x92, 
+0xc4, 0x2a, 0x83, 0xc8, 0x60, 0x25, 0x16, 0x0e, 
+0xff, 0x82, 0x81, 0x27, 0x85, 0x22, 0xc1, 0xff, 
+0xec, 0x90, 0xc7, 0x7f, 0x36, 0xd8, 0xb9, 0x6d, 
+0x36, 0xaf, 0xc7, 0x81, 0x31, 0x13, 0x02, 0xaa, 
+0x30, 0x83, 0x41, 0xbb, 0x30, 0x49, 0x41, 0x3b, 
+0x30, 0x44, 0x81, 0x14, 0x30, 0x45, 0x41, 0xd5, 
+0x3a, 0xf8, 0xf3, 0x22, 0x06, 0x47, 0xf6, 0xb8, 
+0xff, 0xc3, 0x94, 0x99, 0x9c, 0xed, 0xfa, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xd6, 0x32, 0x84, 0xae, 0x32, 0xd8, 0xe3, 
+0x33, 0xed, 0x5e, 0x36, 0x9a, 0xa1, 0x30, 0xf0, 
+0xc8, 0x12, 0x36, 0x3e, 0x3e, 0x9e, 0x36, 0x14, 
+0xc7, 0xe2, 0x30, 0xdf, 0x02, 0x3d, 0x30, 0x3d, 
+0xc0, 0x84, 0x30, 0x12, 0x00, 0x87, 0x36, 0xfb, 
+0x60, 0xe4, 0x1a, 0x73, 0x62, 0x20, 0x4c, 0x56, 
+0x04, 0x43, 0x57, 0x1a, 0x5a, 0xb0, 0xe7, 0x52, 
+0x3d, 0x3f, 0xfd, 0xdf, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xa0, 0xc0, 0x26, 0x00, 0xe0, 0xc0, 
+0x97, 0x02, 0xbc, 0xc1, 0x22, 0x05, 0x50, 0xc2, 
+0x23, 0x0a, 0xdc, 0xc4, 0xea, 0x21, 0x18, 0xe0, 
+0x01, 0xfd, 0x18, 0xdf, 0x3e, 0x21, 0x28, 0xc5, 
+0x05, 0x0b, 0xec, 0xc2, 0x60, 0x07, 0xe0, 0xc1, 
+0x4e, 0x05, 0xb8, 0xc1, 0x35, 0x05, 0x1c, 0xc1, 
+0x34, 0x08, 0xa0, 0xf1, 0x2a, 0x8c, 0xac, 0x35, 
+0x00, 0x0c, 0xed, 0xd8, 0x87, 0xe9, 0xec, 0x3d, 
+0x5f, 0xea, 0xff, 0x57, 0xff, 0xff, 0xff, 0xff, 
+0xf7, 0xd7, 0xff, 0xff, 0xff, 0xf5, 0x26, 0x20, 
+0xa6, 0xa2, 0x99, 0x97, 0x1c, 0x9b, 0xd5, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x32, 0x20, 0x97, 
+0x32, 0x64, 0xc6, 0x33, 0x41, 0x39, 0x35, 0x86, 
+0x5a, 0x30, 0xca, 0x87, 0x43, 0x35, 0x4a, 0xf8, 
+0x53, 0x35, 0x27, 0x07, 0x17, 0x30, 0xbb, 0x42, 
+0x04, 0x30, 0x30, 0x80, 0x81, 0x30, 0x11, 0xc0, 
+0x68, 0x36, 0x42, 0xcc, 0xe0, 0x36, 0x03, 0x56, 
+0x9a, 0x00, 0x44, 0x54, 0xd6, 0x75, 0x67, 0x94, 
+0x12, 0xeb, 0xfa, 0x0c, 0x02, 0xf0, 0x0b, 0xcc, 
+0x09, 0xe0, 0x29, 0x0c, 0x12, 0xd0, 0x51, 0xcc, 
+0x23, 0x00, 0xa7, 0x0c, 0x50, 0x91, 0xff, 0x4e, 
+0x0c, 0x0f, 0x42, 0xcd, 0xff, 0xb2, 0x00, 0xcc, 
+0x52, 0x00, 0xb9, 0x8c, 0x26, 0x90, 0x7d, 0x4c, 
+0x14, 0xd0, 0x5c, 0xcc, 0x12, 0xc0, 0x53, 0x0c, 
+0x12, 0x90, 0x8d, 0xce, 0xf6, 0xc4, 0xc9, 0x83, 
+0x90, 0x7d, 0x9c, 0x3f, 0xf0, 0xe5, 0x25, 0xff, 
+0xfb, 0x92, 0xc4, 0xaa, 0x83, 0xc8, 0x18, 0x23, 
+0x16, 0x0e, 0xff, 0x82, 0x81, 0x2d, 0x85, 0x22, 
+0x81, 0xff, 0xec, 0x90, 0xbe, 0x5b, 0xbf, 0xff, 
+0xf6, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x8f, 0xff, 
+0xfa, 0x3f, 0xd1, 0xf6, 0xe8, 0x4c, 0x41, 0x4d, 
+0x45, 0x33, 0x2e, 0x39, 0x37, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x32, 
+0x1c, 0x98, 0x32, 0x50, 0xcb, 0x33, 0x25, 0x3e, 
+0x35, 0x4a, 0x6b, 0x30, 0xc3, 0x47, 0x6c, 0x35, 
+0x19, 0x39, 0x9a, 0x34, 0xf6, 0xc7, 0x42, 0x30, 
+0xb2, 0x82, 0x17, 0x30, 0x2c, 0x40, 0x90, 0x30, 
+0x14, 0x80, 0x5d, 0x36, 0x7a, 0xa0, 0xe1, 0x15, 
+0x33, 0x59, 0x19, 0x40, 0x44, 0xa4, 0xd5, 0x75, 
+0xa7, 0x56, 0x1c, 0xea, 0xfa, 0x7f, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x18, 0x07, 
+0x00, 0x12, 0x18, 0x14, 0xa0, 0x4d, 0x98, 0x26, 
+0x80, 0x9c, 0x18, 0x47, 0xa1, 0x41, 0x98, 0xa4, 
+0x83, 0xd7, 0x1c, 0x2e, 0xfd, 0x5c, 0x1c, 0x15, 
+0x83, 0xdc, 0x18, 0xa7, 0x21, 0x68, 0x98, 0x4d, 
+0x80, 0xf7, 0x18, 0x29, 0x00, 0xba, 0x18, 0x24, 
+0xa0, 0xaa, 0x98, 0x23, 0xc1, 0x21, 0x1d, 0x95, 
+0xa1, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6, 
+0xc8, 0x23, 0x18, 0x0e, 0xff, 0x82, 0x81, 0x33, 
+0x05, 0x62, 0x81, 0xff, 0xec, 0x90, 0x92, 0x87, 
+0xa0, 0xe3, 0x3b, 0x76, 0x21, 0xfa, 0x7b, 0x0f, 
+0x56, 0x8f, 0xab, 0xfd, 0x54, 0x7f, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xd4, 0x98, 
+0x82, 0x9a, 0x8a, 0x66, 0x5c, 0x72, 0x6e, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0x32, 0x18, 0x99, 0x32, 0x44, 0xce, 0x33, 
+0x01, 0x47, 0x35, 0x16, 0x78, 0x30, 0xba, 0x87, 
+0x97, 0x34, 0xe5, 0x7a, 0xcf, 0x34, 0xc3, 0x87, 
+0x6d, 0x30, 0xaa, 0x42, 0x26, 0x30, 0x27, 0x00, 
+0xa1, 0x30, 0x17, 0x40, 0x4e, 0x36, 0xb2, 0x7c, 
+0xe1, 0xf4, 0x43, 0x5b, 0x97, 0x80, 0xc4, 0x94, 
+0xd6, 0x75, 0x67, 0x86, 0x13, 0xeb, 0xfa, 0x3f, 
+0xe8, 0x30, 0x10, 0x40, 0x1b, 0x30, 0x2b, 0x00, 
+0x90, 0x30, 0x4f, 0x41, 0x2b, 0x30, 0x92, 0x02, 
+0x68, 0x31, 0x4f, 0xc7, 0x5f, 0x38, 0x88, 0xb8, 
+0x4d, 0x38, 0x54, 0xc7, 0x6b, 0x31, 0x54, 0x02, 
+0xba, 0x30, 0x9c, 0xc1, 0xeb, 0x30, 0x51, 0x41, 
+0x79, 0x30, 0x46, 0x81, 0x5a, 0x30, 0x44, 0xc2, 
+0x4f, 0x3a, 0xbb, 0x93, 0x22, 0x10, 0x41, 0xf6, 
+0x70, 0xed, 0xc6, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
+0x83, 0xc7, 0xe4, 0x23, 0x18, 0x0e, 0xff, 0x82, 
+0x81, 0x2f, 0x05, 0x22, 0x81, 0xff, 0xec, 0x90, 
+0x29, 0x2d, 0xf2, 0xdd, 0xfe, 0x8f, 0xfb, 0x6f, 
+0xff, 0xff, 0xff, 0xff, 0xf4, 0x7f, 0xff, 0xd1, 
+0xfe, 0x8f, 0xb7, 0x42, 0x62, 0x0a, 0x6a, 0x29, 
+0x99, 0x71, 0xc9, 0xbd, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x32, 0x14, 0x98, 0x32, 0x30, 
+0xd3, 0x32, 0xe5, 0x4c, 0x34, 0xda, 0x85, 0x30, 
+0xb2, 0x47, 0xbc, 0x34, 0xae, 0xbb, 0xf0, 0x34, 
+0x8e, 0xc7, 0x94, 0x30, 0xa1, 0x02, 0x37, 0x30, 
+0x21, 0xc0, 0xae, 0x30, 0x19, 0x80, 0x43, 0x36, 
+0xea, 0x58, 0xe2, 0x93, 0x53, 0x5d, 0x16, 0xc0, 
+0xc4, 0xe4, 0xd5, 0x75, 0xa4, 0x2b, 0x67, 0x52, 
+0x0c, 0x05, 0x60, 0x05, 0x0c, 0x0d, 0x10, 0x27, 
+0x4c, 0x17, 0x40, 0x51, 0x0c, 0x2a, 0xb0, 0xa8, 
+0x4c, 0x61, 0x82, 0x02, 0x0e, 0x79, 0xbf, 0x50, 
+0x8e, 0x6a, 0x82, 0x06, 0x0c, 0x62, 0x90, 0xc1, 
+0xcc, 0x2d, 0x20, 0x8a, 0x8c, 0x17, 0x20, 0x6c, 
+0x8c, 0x13, 0xb0, 0x65, 0x4c, 0x12, 0xc0, 0xac, 
+0x8e, 0xf3, 0x68, 0xc9, 0xc5, 0xcb, 0xb8, 0xc3, 
+0xdd, 0x87, 0xfe, 0x5f, 0x60, 0xff, 0xfb, 0x92, 
+0xc4, 0xff, 0x83, 0xc7, 0x00, 0x23, 0x18, 0x0e, 
+0xff, 0x82, 0x81, 0x36, 0x85, 0x62, 0x81, 0xff, 
+0xec, 0x90, 0xfa, 0xb2, 0x5f, 0x7f, 0xaf, 0xaa, 
+0x8f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0xff, 
+0xef, 0xff, 0x7f, 0xa9, 0x31, 0x05, 0x35, 0x14, 
+0xcc, 0xb8, 0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x32, 0x08, 0x9b, 
+0x32, 0x1c, 0xd4, 0x32, 0xc1, 0x53, 0x34, 0x9e, 
+0x90, 0x30, 0xa9, 0x87, 0xe1, 0x34, 0x76, 0x7c, 
+0xff, 0x34, 0x57, 0x87, 0xb9, 0x30, 0x98, 0x42, 
+0x46, 0x30, 0x1c, 0x00, 0xbd, 0x30, 0x1c, 0x40, 
+0x34, 0x37, 0x22, 0x34, 0xe3, 0x72, 0x43, 0x5f, 
+0x95, 0x01, 0x45, 0x14, 0xba, 0x75, 0x67, 0xb0, 
+0x15, 0x67, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x51, 
+0x80, 0xbe, 0x00, 0x39, 0x81, 0xac, 0x04, 0x71, 
+0x82, 0xfa, 0x09, 0x99, 0x85, 0x6c, 0x14, 0x01, 
+0x8c, 0x66, 0x3d, 0x29, 0xd0, 0x8d, 0xd2, 0x39, 
+0xce, 0x9e, 0x3d, 0xc9, 0x8c, 0x80, 0x17, 0x51, 
+0x85, 0xae, 0x11, 0x19, 0x82, 0xda, 0x0d, 0xa9, 
+0x82, 0x60, 0x0c, 0xd1, 0x82, 0x3e, 0x15, 0xff, 
+0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6, 0xa8, 0x23, 
+0x18, 0x0e, 0xff, 0x82, 0xa1, 0x3a, 0x05, 0x22, 
+0x41, 0xff, 0xec, 0x90, 0xf9, 0xd8, 0xf0, 0x99, 
+0x20, 0xc1, 0x77, 0xd8, 0x63, 0xb7, 0x0c, 0x4b, 
+0x2d, 0xb9, 0x6f, 0x91, 0xfb, 0xbd, 0x5d, 0x74, 
+0xff, 0xff, 0xff, 0xff, 0xef, 0x5b, 0x5d, 0xff, 
+0xff, 0x77, 0xfb, 0xbd, 0x69, 0x88, 0x29, 0xa8, 
+0xa6, 0x65, 0xc7, 0x26, 0xea, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x32, 
+0x04, 0x9a, 0x32, 0x08, 0xd7, 0x32, 0xa5, 0x58, 
+0x34, 0x52, 0x9d, 0x30, 0xa0, 0x48, 0x02, 0x34, 
+0x3b, 0xbd, 0xfa, 0x34, 0x1e, 0xc7, 0xda, 0x30, 
+0x8e, 0x02, 0x55, 0x30, 0x16, 0xc0, 0xca, 0x30, 
+0x1e, 0x80, 0x25, 0x37, 0x5a, 0x00, 0xe4, 0x11, 
+0x53, 0x60, 0x13, 0xc1, 0x45, 0x24, 0xb9, 0x75, 
+0xa4, 0x21, 0x76, 0x7a, 0x01, 0xc0, 0x78, 0x18, 
+0x20, 0x20, 0x4b, 0x98, 0x37, 0xc0, 0xa6, 0x18, 
+0x65, 0x21, 0x5b, 0x98, 0xe5, 0xc4, 0x21, 0x1d, 
+0xd2, 0xbf, 0x6c, 0x1d, 0xae, 0xc4, 0x2e, 0x18, 
+0xe7, 0x61, 0x9b, 0x98, 0x68, 0x41, 0x35, 0x18, 
+0x33, 0x80, 0xfc, 0x18, 0x2a, 0x20, 0xef, 0x98, 
+0x27, 0x01, 0x98, 0x1b, 0x02, 0x0c, 0x62, 0x91, 
+0x09, 0x67, 0x16, 0x1d, 0xac, 0x3f, 0xf1, 0xbb, 
+0x0f, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc8, 
+0x54, 0x25, 0x18, 0x0e, 0xff, 0x82, 0xa1, 0x3f, 
+0x05, 0x22, 0x41, 0xff, 0xec, 0x90, 0x53, 0xa1, 
+0xef, 0xbf, 0xd7, 0xfe, 0xef, 0xff, 0x5f, 0xd9, 
+0xfb, 0xff, 0xdf, 0x5a, 0x3e, 0xff, 0x57, 0x7f, 
+0xfb, 0xdd, 0xd4, 0x98, 0x82, 0x9a, 0x8a, 0x66, 
+0x5c, 0x72, 0x6f, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x31, 0xf8, 0x9b, 0x31, 0xf4, 0xd8, 0x32, 
+0x79, 0x5f, 0x34, 0x16, 0xa6, 0x30, 0x96, 0x88, 
+0x23, 0x33, 0xff, 0x7e, 0xe3, 0x33, 0xe3, 0x07, 
+0xfb, 0x30, 0x84, 0x42, 0x62, 0x30, 0x10, 0x00, 
+0xd9, 0x30, 0x20, 0xc0, 0x14, 0x37, 0x81, 0xdc, 
+0xe4, 0xb0, 0x23, 0x62, 0x92, 0x01, 0xc5, 0x54, 
+0xba, 0x79, 0x64, 0x41, 0x06, 0xdb, 0x5a, 0x46, 
+0x81, 0x06, 0x30, 0x41, 0x80, 0x86, 0x30, 0x71, 
+0xc1, 0x37, 0x30, 0xcd, 0x02, 0x8c, 0x31, 0xd2, 
+0x47, 0xc9, 0x3b, 0xce, 0xbb, 0x2b, 0x3b, 0x86, 
+0x47, 0xe5, 0x31, 0xd3, 0x83, 0x14, 0x30, 0xd1, 
+0x42, 0x61, 0x30, 0x65, 0xc1, 0xf9, 0x30, 0x50, 
+0x81, 0xe4, 0x30, 0x49, 0xc3, 0x3b, 0x35, 0xac, 
+0x2c, 0xc4, 0x82, 0x22, 0xd5, 0xae, 0x46, 0xb6, 
+0xfa, 0x4b, 0x2d, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
+0x83, 0xc6, 0xa8, 0x23, 0x18, 0x0e, 0xff, 0x82, 
+0xa1, 0x46, 0x85, 0x22, 0x01, 0xff, 0xf0, 0x90, 
+0xb8, 0xae, 0x47, 0xe3, 0x7d, 0x5d, 0x76, 0xfd, 
+0x8f, 0xf7, 0x7f, 0x7f, 0xfb, 0xbf, 0xb1, 0xd5, 
+0x7f, 0xf5, 0xf7, 0x7f, 0xbb, 0xd6, 0x98, 0x82, 
+0x9a, 0x8a, 0x66, 0x5c, 0x72, 0x6e, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0x31, 0xf4, 0x9a, 0x31, 0xe0, 
+0xdd, 0x32, 0x55, 0x62, 0x33, 0xca, 0xb1, 0x30, 
+0x8c, 0xc8, 0x3e, 0x33, 0xbf, 0xbf, 0xb8, 0x33, 
+0xa5, 0x48, 0x18, 0x30, 0x79, 0x82, 0x6f, 0x30, 
+0x09, 0x40, 0xe4, 0x30, 0x23, 0x00, 0x03, 0x37, 
+0xa9, 0xa8, 0xe5, 0x4f, 0x13, 0x63, 0x10, 0xc2, 
+0x0a, 0xc9, 0x72, 0xf3, 0x48, 0x42, 0xec, 0xf4, 
+0x18, 0x14, 0x40, 0x03, 0x98, 0x27, 0x20, 0x45, 
+0x98, 0x42, 0x00, 0xa5, 0x18, 0x76, 0xe1, 0x5d, 
+0x99, 0x0d, 0x44, 0x28, 0x1e, 0xcf, 0x7f, 0x86, 
+0x1e, 0xa5, 0x44, 0x3a, 0x19, 0x0d, 0xa1, 0xaf, 
+0x98, 0x77, 0xc1, 0x56, 0x18, 0x39, 0x41, 0x22, 
+0x18, 0x2c, 0x61, 0x18, 0x98, 0x27, 0x81, 0xdf, 
+0x18, 0x18, 0x40, 0x9c, 0x18, 0x05, 0x20, 0x15, 
+0x82, 0x00, 0x04, 0x02, 0x6e, 0xff, 0xfb, 0x92, 
+0xc4, 0xff, 0x83, 0xc6, 0xc8, 0x23, 0x18, 0x0e, 
+0xff, 0x82, 0xa1, 0x46, 0x85, 0x22, 0x01, 0xff, 
+0xf0, 0x90, 0x15, 0x01, 0x2f, 0x1e, 0xe5, 0x03, 
+0x76, 0xab, 0xce, 0xb3, 0x7c, 0x77, 0xf4, 0xaa, 
+0x95, 0xaf, 0xb7, 0xa6, 0xff, 0xec, 0xfb, 0xaa, 
+0xfa, 0xb7, 0x3e, 0x84, 0x7a, 0x9f, 0xd0, 0x9e, 
+0xff, 0xa7, 0x7f, 0xa9, 0x31, 0x05, 0x35, 0x14, 
+0xcc, 0xb8, 0xe4, 0xde, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x31, 0x98, 0x85, 
+0x31, 0x84, 0xbe, 0x31, 0xd9, 0x37, 0x33, 0x06, 
+0x60, 0x30, 0x71, 0x87, 0x51, 0x33, 0x10, 0x78, 
+0x9d, 0x32, 0xfa, 0x07, 0x31, 0x30, 0x60, 0xc2, 
+0x2a, 0x30, 0x00, 0x00, 0xcf, 0x1e, 0x03, 0xf8, 
+0xdb, 0x05, 0x13, 0x83, 0xb0, 0x0d, 0x5e, 0x30, 
+0x0c, 0x22, 0xa9, 0x27, 0x96, 0x7b, 0x02, 0x26, 
+0x05, 0x58, 0x03, 0x46, 0x09, 0xf0, 0x0e, 0xc6, 
+0x10, 0xc8, 0x25, 0xe6, 0x1e, 0x00, 0x51, 0x06, 
+0x44, 0x18, 0xf7, 0x67, 0xb8, 0xc7, 0x51, 0x27, 
+0xae, 0x28, 0xfc, 0x66, 0x44, 0x00, 0x66, 0x86, 
+0x1e, 0x08, 0x53, 0xe6, 0x0e, 0x18, 0x48, 0xa6, 
+0x0a, 0x80, 0x46, 0xc6, 0x09, 0x38, 0x79, 0x26, 
+0xb1, 0x9e, 0x98, 0x90, 0x58, 0x0d, 0x02, 0xa9, 
+0x43, 0x2b, 0x7d, 0x23, 0x13, 0xf6, 0x3a, 0xff, 
+0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6, 0xa4, 0x23, 
+0x18, 0x0e, 0xff, 0x82, 0xa1, 0x7a, 0x87, 0xa1, 
+0xc1, 0xff, 0xb4, 0x98, 0x05, 0xd8, 0xcf, 0x1b, 
+0xfe, 0xb6, 0xa3, 0xec, 0x7f, 0xff, 0xeb, 0xfd, 
+0x8d, 0xeb, 0xda, 0xea, 0xfe, 0x87, 0x7d, 0x75, 
+0x9c, 0xe9, 0x59, 0xf1, 0xd7, 0x74, 0x2d, 0x31, 
+0x05, 0x35, 0x14, 0xcc, 0xb8, 0xe4, 0xde, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x31, 
+0x94, 0x82, 0x31, 0x70, 0xc1, 0x31, 0xb5, 0x3a, 
+0x32, 0xc2, 0x69, 0x30, 0x68, 0x47, 0x64, 0x32, 
+0xd3, 0xb9, 0x38, 0x32, 0xbf, 0x47, 0x44, 0x30, 
+0x56, 0x82, 0x35, 0x10, 0x01, 0xb4, 0x10, 0x08, 
+0x61, 0xb7, 0x48, 0x87, 0x08, 0x57, 0x9a, 0xc0, 
+0x56, 0x1c, 0x46, 0x54, 0x2f, 0x34, 0xee, 0x75, 
+0x18, 0x1a, 0x00, 0x1b, 0x98, 0x2f, 0x20, 0x39, 
+0x98, 0x4e, 0x00, 0x9e, 0x18, 0x8a, 0xe1, 0x55, 
+0x99, 0x39, 0x84, 0x0f, 0x1f, 0xec, 0x7e, 0xa7, 
+0x1f, 0xbb, 0x44, 0x29, 0x19, 0x38, 0xe1, 0xbc, 
+0x98, 0x89, 0x01, 0x77, 0x18, 0x3f, 0x41, 0x4c, 
+0x18, 0x2d, 0xe1, 0x46, 0x98, 0x27, 0x02, 0x2f, 
+0x18, 0x17, 0x40, 0xb8, 0x18, 0x04, 0xe0, 0x1b, 
+0x83, 0x00, 0x08, 0x03, 0x2c, 0x26, 0x82, 0x4e, 
+0x39, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6, 
+0x4c, 0x25, 0x1a, 0x0e, 0xff, 0x82, 0xa9, 0x69, 
+0x85, 0xa1, 0xc1, 0xff, 0xf0, 0x90, 0xc9, 0x43, 
+0xed, 0x49, 0x4d, 0x9d, 0xff, 0xd4, 0xea, 0xfd, 
+0xd5, 0xfd, 0xd8, 0xe7, 0x7d, 0x48, 0xff, 0x5f, 
+0xf4, 0xff, 0xe5, 0x5e, 0x96, 0xfc, 0xff, 0xf5, 
+0x7f, 0xfd, 0xdb, 0x4d, 0xfd, 0x17, 0xd3, 0xe8, 
+0xbf, 0xef, 0xfd, 0x07, 0xfd, 0x3a, 0x4f, 0xb2, 
+0xbf, 0xfe, 0x09, 0xa9, 0x4c, 0x41, 0x4d, 0x45, 
+0x33, 0x2e, 0x39, 0x37, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0x31, 0x88, 0x83, 0x31, 0x5c, 0xc0, 0x31, 
+0x91, 0x3f, 0x32, 0x7e, 0x6e, 0x30, 0x5e, 0x07, 
+0x79, 0x32, 0x95, 0x79, 0xc1, 0x32, 0x82, 0x07, 
+0x59, 0x30, 0x4c, 0x42, 0x3c, 0x30, 0x04, 0xc0, 
+0xe3, 0x30, 0x23, 0x40, 0x07, 0x37, 0x00, 0xec, 
+0xe1, 0xa9, 0xc3, 0x59, 0x89, 0x04, 0x89, 0x2a, 
+0x89, 0xed, 0x93, 0xe0, 0x44, 0xc0, 0xdb, 0x01, 
+0x20, 0xc1, 0x7e, 0x01, 0x60, 0xc2, 0x77, 0x04, 
+0x6c, 0xc4, 0x60, 0x09, 0xb0, 0xc9, 0xe3, 0x1d, 
+0x94, 0xff, 0xf0, 0xde, 0xe4, 0xfe, 0x65, 0x1e, 
+0x74, 0xc9, 0xd6, 0x0d, 0x18, 0xc4, 0x47, 0x0b, 
+0x7c, 0xc1, 0xef, 0x0a, 0x5c, 0xc1, 0x5a, 0x0a, 
+0x48, 0xc1, 0x1d, 0x11, 0xa4, 0xc0, 0xa7, 0x05, 
+0xd4, 0xc0, 0x20, 0x00, 0xe0, 0x2a, 0x00, 0x48, 
+0x0e, 0xc0, 0x9b, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
+0x83, 0xc6, 0x24, 0x25, 0x1a, 0x0e, 0xff, 0x82, 
+0xa9, 0xbb, 0xb3, 0x61, 0x81, 0xf6, 0x89, 0xb8, 
+0x89, 0x20, 0xe4, 0x29, 0x9e, 0x4a, 0x8f, 0x9c, 
+0xd7, 0xfd, 0x68, 0x27, 0xfb, 0x69, 0xff, 0x5d, 
+0xad, 0xff, 0xd9, 0xed, 0xfb, 0xbf, 0xff, 0xff, 
+0xa7, 0xcb, 0xdb, 0xd7, 0xfe, 0xfd, 0x2c, 0xdd, 
+0x7e, 0xba, 0xd6, 0xdf, 0xa7, 0xcf, 0xd4, 0x46, 
+0x8a, 0x06, 0x9f, 0xc6, 0x5f, 0x4a, 0xd3, 0x10, 
+0x53, 0x51, 0x4c, 0xcb, 0x8e, 0x4d, 0xea, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0x31, 0x84, 0x82, 0x31, 0x40, 
+0xc3, 0x31, 0x6d, 0x40, 0x32, 0x32, 0x75, 0x30, 
+0x54, 0x47, 0x88, 0x32, 0x53, 0xba, 0x3a, 0x32, 
+0x42, 0x47, 0x6a, 0x30, 0x41, 0x02, 0x45, 0x30, 
+0x0b, 0x00, 0xec, 0x30, 0x24, 0x80, 0x16, 0x37, 
+0x28, 0xb8, 0xe1, 0xc8, 0xb3, 0x59, 0x07, 0xc4, 
+0x89, 0x4a, 0x85, 0xee, 0x93, 0x66, 0x58, 0xa9, 
+0xc8, 0x0c, 0x07, 0xc0, 0x0a, 0xcc, 0x0d, 0xd0, 
+0x06, 0x4c, 0x16, 0xe0, 0x21, 0x8c, 0x29, 0x30, 
+0x4f, 0xcc, 0x5d, 0xe0, 0xf9, 0x0e, 0x64, 0x37, 
+0x66, 0x8e, 0x55, 0x41, 0x02, 0x8c, 0x5d, 0x50, 
+0x71, 0xce, 0x7e, 0x67, 0x0d, 0x12, 0x5f, 0x0c, 
+0xb5, 0x5f, 0x4c, 0x8c, 0xa6, 0x0c, 0x4a, 0x34, 
+0x8c, 0x03, 0x05, 0xd2, 0xd1, 0xb9, 0xbe, 0x92, 
+0xb9, 0x7d, 0x8b, 0xff, 0x4f, 0xff, 0xfb, 0x92, 
+0xc4, 0xff, 0x83, 0xc6, 0x78, 0x25, 0x1a, 0x0e, 
+0xff, 0x82, 0xa9, 0xb2, 0x2c, 0x21, 0x81, 0xf6, 
+0x89, 0xb8, 0x5e, 0xfa, 0x3a, 0x51, 0x51, 0xe4, 
+0xaa, 0x8e, 0xa5, 0x29, 0x20, 0x30, 0x71, 0x3f, 
+0xff, 0xff, 0xff, 0x7f, 0xff, 0xd5, 0xff, 0xef, 
+0xff, 0xfa, 0x93, 0x10, 0x53, 0x51, 0x4c, 0xcb, 
+0x8e, 0x4d, 0xea, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x31, 0x70, 0x81, 
+0x31, 0x34, 0xc2, 0x31, 0x39, 0x43, 0x31, 0xee, 
+0x78, 0x30, 0x49, 0x07, 0x97, 0x32, 0x0f, 0x7a, 
+0xa3, 0x31, 0xff, 0x07, 0x79, 0x30, 0x35, 0xc2, 
+0x4c, 0x30, 0x10, 0xc0, 0xf7, 0x30, 0x26, 0x40, 
+0x25, 0x37, 0x40, 0x84, 0xe2, 0x27, 0x63, 0x5a, 
+0x86, 0x05, 0x89, 0x2a, 0xb9, 0xed, 0x93, 0xd8, 
+0x22, 0x60, 0x67, 0x80, 0xb4, 0x60, 0xac, 0x00, 
+0x2c, 0x61, 0x18, 0x81, 0x66, 0x61, 0xf1, 0x03, 
+0x50, 0x64, 0x64, 0x8a, 0x36, 0x7c, 0x75, 0x4c, 
+0xc2, 0x7b, 0xc4, 0x8a, 0xb2, 0x64, 0x5a, 0x04, 
+0xf8, 0x61, 0xdc, 0x84, 0xc2, 0x60, 0xcc, 0x84, 
+0x7e, 0x60, 0x82, 0x04, 0x84, 0x60, 0x61, 0x87, 
+0xd6, 0x66, 0x9a, 0x49, 0x83, 0x05, 0xc2, 0x30, 
+0x2a, 0xc0, 0x34, 0xb8, 0x02, 0x31, 0x3f, 0xff, 
+0xfb, 0x92, 0xc4, 0xff, 0x82, 0x46, 0x78, 0x25, 
+0x1a, 0x0e, 0xff, 0x82, 0xa9, 0x5a, 0x0c, 0xa2, 
+0x9d, 0xfe, 0x88, 0xe0, 0x7b, 0xa0, 0x1a, 0x99, 
+0xeb, 0x2f, 0xdc, 0x37, 0xad, 0x28, 0xbf, 0xfe, 
+0xff, 0xef, 0xff, 0x3b, 0xfe, 0xea, 0xbe, 0xb7, 
+0x7d, 0x3b, 0xbe, 0xfd, 0xdd, 0x0b, 0x4c, 0x41, 
+0x4d, 0x45, 0x33, 0x2e, 0x39, 0x37, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 
+0x16, 0xc0, 0x80, 0x30, 0x11, 0x80, 0xc3, 0x30, 
+0x11, 0x41, 0x44, 0x30, 0x19, 0x02, 0x7d, 0x30, 
+0x3d, 0xc7, 0xa2, 0x31, 0xc6, 0xba, 0xfa, 0x36, 
+0xe1, 0x78, 0x63, 0x0a, 0x22, 0x55, 0x30, 0x58, 
+0x0f, 0xe3, 0x09, 0xe0, 0x30, 0x30, 0xeb, 0x01, 
+0x23, 0x11, 0x20, 0x63, 0x3b, 0x61, 0x11, 0xa4, 
+0xa5, 0x5a, 0xf7, 0x49, 0xad, 0xe6, 0xcf, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xd2, 0x60, 0x6a, 0x00, 0xd2, 0x18, 
+0x15, 0xf9, 0x84, 0x6c, 0x04, 0x71, 0x87, 0xce, 
+0x0b, 0x49, 0x91, 0xa4, 0x22, 0xf1, 0xf2, 0x6f, 
+0x05, 0x61, 0xef, 0xa0, 0x25, 0x11, 0x91, 0x7a, 
+0x12, 0x59, 0x87, 0x64, 0x12, 0x71, 0x83, 0x1c, 
+0x11, 0xd1, 0x81, 0xde, 0x12, 0x29, 0x81, 0x48, 
+0x1f, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6, 
+0x7c, 0x25, 0x1a, 0x0e, 0xff, 0x82, 0xa9, 0x60, 
+0x85, 0xa1, 0xc1, 0xff, 0xf0, 0x90, 0x71, 0x95, 
+0x29, 0x46, 0x07, 0x17, 0x8a, 0x01, 0x16, 0x0d, 
+0xb8, 0x40, 0x72, 0xf9, 0xce, 0xb9, 0x92, 0xbf, 
+0x21, 0xec, 0x66, 0x60, 0x87, 0xea, 0xf7, 0xfd, 
+0x3f, 0xbb, 0xff, 0x7e, 0x5a, 0xbf, 0xcb, 0xff, 
+0xa7, 0xef, 0x74, 0x4d, 0xf6, 0x50, 0x98, 0x82, 
+0x9a, 0x8a, 0x66, 0x5c, 0x72, 0x6f, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x30, 0x15, 0x80, 0x7f, 0x30, 0x10, 0x40, 
+0xc2, 0x30, 0x0e, 0x01, 0x47, 0x30, 0x14, 0x42, 
+0x80, 0x30, 0x31, 0x87, 0xad, 0x31, 0x7a, 0x7b, 
+0x41, 0x35, 0xb4, 0x79, 0x13, 0x06, 0xd2, 0x5a, 
+0x30, 0x6b, 0x10, 0x73, 0x0a, 0x50, 0x3d, 0x30, 
+0xee, 0x00, 0x53, 0x11, 0x50, 0x4c, 0x3b, 0x70, 
+0xa1, 0xe4, 0xd5, 0x5c, 0xf6, 0xc9, 0xec, 0x60, 
+0xde, 0xa3, 0x03, 0x74, 0x07, 0x43, 0x05, 0x88, 
+0x00, 0x33, 0x08, 0xec, 0x06, 0x93, 0x0f, 0xa8, 
+0x12, 0x43, 0x23, 0x6c, 0x39, 0x53, 0xe5, 0xc1, 
+0xa9, 0x33, 0xe0, 0x2c, 0x3e, 0x13, 0x23, 0x00, 
+0x21, 0x63, 0x0e, 0xbc, 0x23, 0xb3, 0x06, 0x0c, 
+0x23, 0x73, 0x03, 0x60, 0x24, 0x63, 0x02, 0x1c, 
+0x3f, 0x33, 0x1f, 0xd3, 0x40, 0x02, 0xe1, 0x90, 
+0x2a, 0xc8, 0x6e, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
+0x83, 0xc8, 0x7c, 0x27, 0x1a, 0x0f, 0xfb, 0x64, 
+0xa1, 0x58, 0x05, 0x61, 0xc1, 0xff, 0xf0, 0x90, 
+0x70, 0x44, 0xb2, 0x7e, 0xf6, 0x65, 0x5f, 0x60, 
+0xaf, 0x5b, 0xfd, 0x7d, 0x68, 0xfd, 0xbf, 0x6f, 
+0xff, 0xa3, 0x6b, 0xbf, 0xa9, 0xd4, 0xfd, 0x0e, 
+0xfa, 0xb7, 0x7d, 0xef, 0x8d, 0xbb, 0x5a, 0x62, 
+0x0a, 0x6a, 0x29, 0x99, 0x71, 0xc9, 0xba, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0x00, 0x24, 0x40, 0x00, 0x62, 
+0xf2, 0x51, 0x87, 0x0f, 0x66, 0x15, 0x6a, 0x18, 
+0x73, 0x56, 0x60, 0x2c, 0x8a, 0x5c, 0x61, 0x8b, 
+0x50, 0x70, 0x61, 0x7c, 0x8a, 0x34, 0x60, 0x0a, 
+0x03, 0x26, 0x60, 0x26, 0x01, 0x58, 0x60, 0x35, 
+0x00, 0x4c, 0x36, 0x64, 0x76, 0x43, 0x60, 0xee, 
+0x52, 0x62, 0x26, 0xa3, 0x27, 0xbd, 0x98, 0x5b, 
+0xdb, 0xf7, 0x7f, 0xa8, 0xc0, 0xe4, 0x02, 0x0c, 
+0xc1, 0x67, 0x00, 0x80, 0xc2, 0x3c, 0x00, 0xf8, 
+0xc3, 0xef, 0x03, 0x74, 0xc8, 0xe0, 0x0a, 0xe8, 
+0xf9, 0x9d, 0x4f, 0xb0, 0xf8, 0x32, 0x0c, 0x40, 
+0xc8, 0xc3, 0x07, 0x7c, 0xc3, 0xa6, 0x08, 0xa0, 
+0xc1, 0x74, 0x08, 0xc8, 0xcc, 0x39, 0x1c, 0xc6, 
+0x6f, 0xd8, 0xc2, 0x65, 0x30, 0x1a, 0x18, 0x90, 
+0x00, 0x8b, 0x6d, 0xb8, 0x41, 0xff, 0xfb, 0x92, 
+0xc4, 0xff, 0x83, 0xc7, 0x10, 0x27, 0x1a, 0x0f, 
+0xfb, 0x64, 0xa1, 0x60, 0x85, 0xa1, 0xc1, 0xff, 
+0xf0, 0x90, 0x72, 0xf9, 0xcb, 0xfc, 0xfd, 0x7f, 
+0x3f, 0xf1, 0xfd, 0xff, 0xdb, 0xff, 0x7f, 0x5b, 
+0x02, 0xdd, 0x66, 0xaf, 0xff, 0xf5, 0xb2, 0xcc, 
+0x9f, 0xf6, 0x16, 0xa9, 0x9f, 0x4f, 0xb1, 0xfa, 
+0x7f, 0x3b, 0x27, 0xf6, 0x50, 0x98, 0x82, 0x9a, 
+0x8a, 0x66, 0x5c, 0x72, 0x6f, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x20, 0x00, 0x03, 
+0x14, 0x07, 0xd3, 0x0c, 0xcc, 0x23, 0x08, 0x14, 
+0x73, 0x07, 0xe8, 0x43, 0x01, 0x58, 0x7b, 0x93, 
+0x0c, 0xb7, 0xb9, 0xb3, 0x0c, 0x20, 0x79, 0xf3, 
+0x00, 0x08, 0x26, 0x43, 0x02, 0x44, 0x11, 0x53, 
+0x02, 0xc4, 0x05, 0x31, 0x2f, 0x21, 0xc6, 0x43, 
+0x40, 0xeb, 0x91, 0x11, 0x35, 0x5a, 0x9f, 0x29, 
+0x3d, 0x80, 0x8f, 0xb3, 0xe2, 0x73, 0x03, 0xac, 
+0x08, 0xe3, 0x05, 0xa8, 0x03, 0xd3, 0x08, 0xfc, 
+0x00, 0xb3, 0x0f, 0xc0, 0x08, 0xa3, 0x23, 0x94, 
+0x1c, 0x53, 0xe6, 0xd8, 0xc6, 0x53, 0xe1, 0x34, 
+0x22, 0xd3, 0x23, 0x08, 0x1a, 0x43, 0x0e, 0x7c, 
+0x21, 0x53, 0x05, 0x9c, 0x22, 0xd3, 0x02, 0xa8, 
+0x24, 0x63, 0x01, 0x14, 0x3f, 0x93, 0x05, 0xd3, 
+0xc5, 0x06, 0x04, 0xa0, 0x55, 0xb0, 0xdc, 0xff, 
+0xfb, 0x92, 0xc4, 0xff, 0x82, 0x47, 0x18, 0x25, 
+0x20, 0xce, 0x7f, 0x62, 0xa1, 0x70, 0x8f, 0x61, 
+0xc1, 0xfe, 0x89, 0x28, 0xe4, 0x93, 0x93, 0xf7, 
+0x8d, 0x86, 0xff, 0xa7, 0xa2, 0xee, 0xd7, 0xbf, 
+0xd6, 0x8f, 0xff, 0xff, 0x52, 0xb6, 0x69, 0xa1, 
+0x1b, 0x7e, 0x8f, 0xd9, 0x46, 0xfd, 0x28, 0x6a, 
+0x19, 0xe4, 0xd3, 0x10, 0x53, 0x51, 0x4c, 0xcb, 
+0x8e, 0x4d, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 
+0x13, 0x40, 0x7a, 0x30, 0x0b, 0x00, 0xc3, 0x30, 
+0x04, 0xc1, 0x46, 0x30, 0x00, 0x02, 0x85, 0x30, 
+0x03, 0x47, 0xbc, 0x30, 0x5e, 0xbb, 0xac, 0x31, 
+0x5b, 0x7a, 0x23, 0x04, 0xf2, 0x69, 0x30, 0xa0, 
+0x11, 0xc3, 0x0b, 0x40, 0x5c, 0x30, 0xf5, 0x00, 
+0x30, 0x51, 0x18, 0x8b, 0xb8, 0x93, 0x27, 0x28, 
+0xc3, 0xe7, 0x20, 0xb7, 0x9b, 0x3a, 0xc8, 0x24, 
+0x80, 0xc0, 0x5e, 0x00, 0xdc, 0xc0, 0x99, 0x00, 
+0x58, 0x30, 0x1f, 0x13, 0x06, 0xfc, 0x00, 0x33, 
+0x10, 0x10, 0x03, 0x63, 0x69, 0xac, 0x11, 0x43, 
+0x67, 0x10, 0x07, 0x43, 0x0f, 0xcc, 0x09, 0x53, 
+0xca, 0x36, 0x8d, 0x1c, 0xec, 0x31, 0x9b, 0xec, 
+0x09, 0xc2, 0x2a, 0xa2, 0x0b, 0x00, 0x76, 0xa9, 
+0x06, 0xcc, 0x5d, 0xb7, 0x7b, 0xbf, 0xff, 0xff, 
+0x8c, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0x47, 
+0x10, 0x25, 0x1a, 0x4e, 0xff, 0x82, 0xa1, 0x5f, 
+0x05, 0x61, 0xc1, 0xff, 0xf0, 0x90, 0x43, 0x22, 
+0x97, 0xe8, 0x11, 0x5c, 0xaf, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xa5, 0x31, 0x05, 0x35, 0x14, 
+0xcc, 0xb8, 0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x30, 0x12, 0x00, 0x79, 0x30, 0x09, 0x40, 
+0xc0, 0x30, 0x01, 0x01, 0x47, 0x0b, 0x05, 0x0c, 
+0x60, 0x12, 0x8f, 0x7a, 0x60, 0x83, 0x77, 0x5e, 
+0x62, 0x2e, 0xf4, 0xa6, 0x11, 0x04, 0xd8, 0x61, 
+0x62, 0x24, 0x66, 0x17, 0x20, 0xce, 0x61, 0xec, 
+0x02, 0x40, 0x62, 0x33, 0x27, 0x73, 0x2b, 0x26, 
+0x51, 0x97, 0xb2, 0x47, 0x63, 0x06, 0xf5, 0x30, 
+0xc0, 0xd5, 0x02, 0x30, 0xc1, 0x40, 0x01, 0x64, 
+0xc1, 0xf9, 0x00, 0xc8, 0xc3, 0x72, 0x00, 0xac, 
+0xc7, 0xcb, 0x03, 0x38, 0xf2, 0xac, 0x23, 0x08, 
+0xf1, 0x6f, 0x01, 0x08, 0xc7, 0xa4, 0x04, 0x00, 
+0xf1, 0x96, 0xa4, 0xd1, 0xf7, 0x6c, 0xc6, 0x47, 
+0xe0, 0x93, 0x79, 0x30, 0x19, 0x23, 0x15, 0x09, 
+0x89, 0x00, 0x15, 0x3a, 0x7a, 0xe4, 0x94, 0x97, 
+0xef, 0x76, 0x5f, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
+0x82, 0x46, 0xe8, 0x27, 0x1a, 0x0f, 0xfb, 0x64, 
+0xa1, 0x22, 0x0a, 0x63, 0x5d, 0xfe, 0x08, 0xe0, 
+0x7f, 0xfe, 0x3b, 0x77, 0x3b, 0xae, 0x9f, 0xdd, 
+0xee, 0xff, 0xff, 0xfd, 0xfb, 0xaa, 0xfd, 0xdf, 
+0x46, 0xef, 0xbf, 0xfa, 0xd3, 0x10, 0x53, 0x51, 
+0x4c, 0xcb, 0x8e, 0x4d, 0xd5, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x30, 0x11, 0x40, 0x76, 0x30, 
+0x07, 0x00, 0xc1, 0x11, 0x82, 0x8c, 0x60, 0x0b, 
+0x85, 0x0a, 0x60, 0x34, 0x0f, 0x78, 0x61, 0x6a, 
+0xf7, 0x40, 0x65, 0xa8, 0xf4, 0x86, 0x17, 0xa4, 
+0xde, 0x61, 0x80, 0x25, 0x06, 0x17, 0x80, 0xdc, 
+0x61, 0xee, 0x04, 0x26, 0x23, 0x00, 0x34, 0x1e, 
+0xe0, 0x4c, 0x9e, 0xad, 0x0f, 0x7c, 0x82, 0xde, 
+0x67, 0x3a, 0xcc, 0x0f, 0xc0, 0x2c, 0x4c, 0x17, 
+0x50, 0x1f, 0x8c, 0x24, 0x20, 0x1a, 0x4c, 0x3e, 
+0xf0, 0x25, 0x0c, 0x8e, 0x00, 0x81, 0xcf, 0x9a, 
+0x34, 0x7a, 0x4f, 0x83, 0x60, 0x64, 0x4c, 0x8b, 
+0x10, 0x38, 0xcc, 0x38, 0x00, 0x74, 0x0c, 0x13, 
+0xa0, 0x86, 0x8c, 0x05, 0x90, 0x90, 0x4c, 0x01, 
+0xf0, 0xfd, 0x8c, 0x53, 0x4e, 0x06, 0x0c, 0x47, 
+0x40, 0xca, 0x3a, 0xf4, 0x49, 0xff, 0xfb, 0x92, 
+0xc4, 0xff, 0x83, 0x46, 0xc4, 0x27, 0x1a, 0x0f, 
+0xfb, 0x64, 0xa1, 0x40, 0x8a, 0xa2, 0x05, 0xfe, 
+0x88, 0xe0, 0x65, 0xf4, 0x57, 0xdc, 0xf9, 0x47, 
+0xfa, 0x19, 0xa6, 0xdd, 0xe8, 0xba, 0x9d, 0x7e, 
+0xff, 0xf2, 0x9a, 0x7f, 0xfa, 0x34, 0xed, 0x6d, 
+0x9f, 0xdf, 0xd3, 0xf9, 0xeb, 0x7e, 0x7a, 0x94, 
+0xc4, 0x14, 0xd4, 0x53, 0x32, 0xe3, 0x93, 0x75, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 0x10, 0x00, 
+0x73, 0x30, 0x05, 0x40, 0xbe, 0x11, 0x82, 0x8e, 
+0x60, 0x18, 0x05, 0x08, 0x60, 0x50, 0x8f, 0x72, 
+0x62, 0x27, 0x77, 0x02, 0x68, 0x86, 0xf4, 0x26, 
+0x1d, 0xc4, 0xe0, 0x61, 0xa2, 0x25, 0xe6, 0x18, 
+0x20, 0xf2, 0x61, 0xf0, 0x05, 0x86, 0x23, 0x20, 
+0x6a, 0x07, 0x73, 0x22, 0x4c, 0x56, 0xb7, 0xb2, 
+0x47, 0x39, 0x81, 0xfe, 0xaf, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 
+0x06, 0x08, 0x18, 0x17, 0x46, 0x0b, 0xb0, 0x12, 
+0x66, 0x12, 0x18, 0x11, 0xc6, 0x1f, 0x60, 0x1c, 
+0xa6, 0x46, 0xc8, 0x5e, 0x87, 0xcb, 0xe3, 0x18, 
+0x47, 0xc0, 0x88, 0x51, 0x06, 0x45, 0x30, 0x12, 
+0x86, 0x1b, 0xa8, 0x37, 0x26, 0x09, 0x58, 0x42, 
+0x66, 0x01, 0xc0, 0x47, 0xc6, 0x02, 0x30, 0xff, 
+0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6, 0xe8, 0x27, 
+0x1a, 0x0f, 0xfb, 0x64, 0xa1, 0x61, 0x05, 0x61, 
+0xc1, 0xff, 0xf0, 0x90, 0x7e, 0x66, 0x3e, 0xa6, 
+0x98, 0x04, 0x60, 0x30, 0x05, 0x5b, 0x4f, 0x5c, 
+0x7a, 0x92, 0x8e, 0xf3, 0xdd, 0x2e, 0xaf, 0x49, 
+0xde, 0x96, 0x73, 0xab, 0xfa, 0x91, 0xff, 0xff, 
+0xf2, 0xaa, 0xfd, 0xa8, 0xff, 0x31, 0xfb, 0xa8, 
+0xf4, 0xa7, 0x5b, 0x7c, 0x36, 0x98, 0x82, 0x9a, 
+0x8a, 0x66, 0x5c, 0x72, 0x6e, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 
+0xf4, 0x70, 0x30, 0x30, 0xbd, 0x30, 0x09, 0x44, 
+0x31, 0x26, 0x83, 0x30, 0x35, 0x07, 0xb2, 0x31, 
+0x68, 0x7b, 0x50, 0x31, 0x62, 0x87, 0x9c, 0x30, 
+0x46, 0xc2, 0x71, 0x30, 0x37, 0x81, 0x34, 0x30, 
+0x31, 0x00, 0x80, 0x37, 0xc8, 0xec, 0xe3, 0x04, 
+0xc3, 0x5b, 0x01, 0x08, 0x89, 0xea, 0xb1, 0xef, 
+0x90, 0x4f, 0x83, 0x9e, 0xdf, 0xff, 0xd4, 0x60, 
+0x83, 0x01, 0x8a, 0x60, 0xbb, 0x81, 0x48, 0x61, 
+0x20, 0x01, 0x66, 0x61, 0xf4, 0x82, 0x58, 0x64, 
+0x68, 0x07, 0x92, 0x7c, 0xa2, 0xbd, 0xfe, 0x7b, 
+0xec, 0x06, 0xc6, 0x64, 0x4c, 0x80, 0x72, 0x61, 
+0xb3, 0x03, 0x40, 0x60, 0x8d, 0x04, 0x10, 0x60, 
+0x0a, 0x84, 0x76, 0x60, 0x34, 0x87, 0xdc, 0x65, 
+0x5a, 0x51, 0x81, 0x85, 0xe2, 0xa0, 0x45, 0x92, 
+0xf4, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc8, 
+0x6c, 0x27, 0x1a, 0x0f, 0xfb, 0x64, 0xa1, 0x5e, 
+0x05, 0x61, 0xc1, 0xff, 0xf0, 0x90, 0x47, 0x67, 
+0xe8, 0xaf, 0xf1, 0x38, 0x65, 0xbd, 0x63, 0x3d, 
+0x7c, 0xb7, 0xf6, 0xfd, 0xdf, 0xff, 0xef, 0xfd, 
+0x4d, 0xff, 0x59, 0xbe, 0x8f, 0x7f, 0xef, 0x77, 
+0xcb, 0x26, 0x20, 0xa6, 0xa2, 0x99, 0x97, 0x1c, 
+0x9b, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x00, 0x82, 0x60, 0x00, 0x61, 0xc2, 0x08, 
+0x34, 0xe8, 0x60, 0x36, 0x89, 0x8d, 0xb5, 0x06, 
+0x05, 0x38, 0xa4, 0xe6, 0x24, 0xd4, 0xfe, 0xa6, 
+0x24, 0x28, 0xa3, 0x26, 0x06, 0x90, 0x33, 0xc6, 
+0x04, 0xb8, 0x19, 0x66, 0x03, 0xf8, 0x0a, 0xa7, 
+0x3c, 0x48, 0x76, 0x67, 0x20, 0x2e, 0x72, 0x22, 
+0x06, 0xa7, 0x20, 0x9f, 0xb0, 0x09, 0xff, 0xee, 
+0xff, 0x5a, 0x10, 0x60, 0x85, 0x81, 0x9c, 0x60, 
+0xbc, 0x01, 0x6e, 0x61, 0x1f, 0x81, 0xa8, 0x61, 
+0xf2, 0x02, 0xe2, 0x64, 0x62, 0x89, 0x20, 0x7c, 
+0x7e, 0x49, 0x98, 0x7b, 0xc9, 0x88, 0x58, 0x64, 
+0x44, 0x00, 0x3e, 0x61, 0xac, 0x83, 0x0e, 0x60, 
+0x85, 0x84, 0x02, 0x42, 0x11, 0xb1, 0x81, 0x10, 
+0x1f, 0x59, 0x9a, 0xa9, 0x66, 0x0d, 0x17, 0x08, 
+0x80, 0xab, 0x29, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
+0x83, 0xc6, 0xfc, 0x25, 0x1a, 0x0e, 0xff, 0x82, 
+0x81, 0x55, 0x05, 0xa1, 0xc1, 0xff, 0xf0, 0x90, 
+0xf1, 0x8f, 0x58, 0xa3, 0xbc, 0xf7, 0x4b, 0xa3, 
+0xe7, 0x7d, 0x9c, 0x9d, 0xc9, 0xea, 0xff, 0xfa, 
+0x7e, 0x77, 0x47, 0xf6, 0x23, 0x6f, 0xd1, 0xf7, 
+0x68, 0xfd, 0x1a, 0x3c, 0xcd, 0x29, 0x88, 0x29, 
+0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xea, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0x30, 0xcc, 0x6a, 0x04, 0x17, 0x26, 
+0x10, 0x28, 0x06, 0x39, 0xcf, 0xa6, 0x09, 0x80, 
+0xf4, 0x06, 0x3f, 0xff, 0x57, 0x86, 0x3e, 0xc0, 
+0xf1, 0x86, 0x0b, 0x78, 0x4e, 0x66, 0x07, 0xc0, 
+0x27, 0xc6, 0x06, 0x60, 0x12, 0x46, 0xf9, 0x28, 
+0x9c, 0x50, 0xec, 0x6b, 0x40, 0xa0, 0xd1, 0x2d, 
+0x56, 0x3c, 0xf2, 0x09, 0x78, 0x61, 0x82, 0x1c, 
+0x06, 0xb9, 0x82, 0xf2, 0x06, 0x41, 0x84, 0x78, 
+0x07, 0x99, 0x87, 0xbe, 0x0d, 0x71, 0x91, 0x6c, 
+0x2a, 0x59, 0xf1, 0x4b, 0x52, 0x49, 0xee, 0x74, 
+0x27, 0x59, 0x90, 0xee, 0x04, 0x01, 0x86, 0x90, 
+0x0b, 0x51, 0x81, 0xf0, 0x0f, 0xb1, 0x80, 0x30, 
+0x11, 0x89, 0x81, 0x4e, 0x1f, 0x11, 0x80, 0xfa, 
+0x0a, 0x41, 0x80, 0x24, 0x01, 0x78, 0x84, 0x00, 
+0x40, 0x6e, 0x8b, 0x22, 0x69, 0xff, 0xfb, 0x90, 
+0xc4, 0xff, 0x82, 0x47, 0x3c, 0x25, 0x20, 0xce, 
+0x7f, 0x62, 0xa1, 0x56, 0x05, 0x61, 0xc1, 0xff, 
+0xf0, 0x90, 0xf2, 0xc3, 0xed, 0x7f, 0x39, 0x3f, 
+0xff, 0x5b, 0xf5, 0x53, 0xf7, 0x75, 0xff, 0xdd, 
+0x67, 0xef, 0xfe, 0xc6, 0x7f, 0x9b, 0xf4, 0xf7, 
+0xfa, 0x97, 0xaf, 0xcb, 0x26, 0x20, 0xa6, 0xa2, 
+0x99, 0x97, 0x1c, 0x9b, 0xd5, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x30, 0x0b, 0x80, 0x69, 
+0x15, 0x02, 0xd8, 0xc0, 0x2d, 0x04, 0xfc, 0xc0, 
+0x86, 0x09, 0xe0, 0xc1, 0x5d, 0x1e, 0x4c, 0xc9, 
+0x14, 0xe9, 0x64, 0xe3, 0x9d, 0xe0, 0x4c, 0x65, 
+0x09, 0xc0, 0xc4, 0x1c, 0x50, 0xcc, 0x33, 0xc2, 
+0x6c, 0xc3, 0xe0, 0x16, 0x8c, 0x44, 0xc2, 0x2c, 
+0xec, 0xc6, 0xc5, 0x92, 0x15, 0x1b, 0xc9, 0x17, 
+0x96, 0x60, 0x7e, 0xdf, 0xe8, 0x30, 0x44, 0xc0, 
+0xe0, 0x30, 0x5e, 0x00, 0xd9, 0x30, 0x8e, 0xc1, 
+0x10, 0x30, 0xf5, 0x81, 0xeb, 0x32, 0x29, 0x45, 
+0xfa, 0x3e, 0x0e, 0xaf, 0x7c, 0x3d, 0xb5, 0x45, 
+0x9c, 0x32, 0x18, 0x80, 0xd1, 0x30, 0xce, 0x41, 
+0x4f, 0x30, 0x39, 0xc1, 0xed, 0x30, 0x0f, 0x42, 
+0x2a, 0x30, 0x30, 0x83, 0xdd, 0x30, 0x24, 0x01, 
+0x45, 0x30, 0x06, 0x40, 0x2e, 0x0b, 0xff, 0xfb, 
+0x92, 0xc4, 0xff, 0x83, 0xc6, 0x74, 0x25, 0x1a, 
+0x0e, 0xff, 0x82, 0xa9, 0x66, 0x07, 0xa1, 0xc1, 
+0xff, 0xb4, 0x98, 0x00, 0x0a, 0x0d, 0xe1, 0xa4, 
+0x9c, 0x78, 0xb4, 0xf3, 0xdb, 0xce, 0xdd, 0xe8, 
+0xee, 0x57, 0x5d, 0x1f, 0xfd, 0xff, 0xd3, 0x63, 
+0xff, 0xfb, 0xf7, 0x7a, 0xed, 0xff, 0xcc, 0x7e, 
+0xfd, 0xfd, 0x09, 0x88, 0x29, 0xa8, 0xa6, 0x65, 
+0xc7, 0x26, 0xea, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x0a, 
+0x40, 0x64, 0x1d, 0x02, 0xcc, 0xc0, 0x38, 0x04, 
+0xe8, 0xc0, 0x99, 0x09, 0xcc, 0xc1, 0x84, 0x1e, 
+0x10, 0xca, 0x1d, 0xe7, 0x90, 0xe7, 0x99, 0xdc, 
+0x8c, 0x6e, 0xc9, 0xbc, 0xc4, 0x48, 0x51, 0x8c, 
+0x34, 0x82, 0x80, 0xc3, 0xe4, 0x19, 0x4c, 0x44, 
+0x02, 0x70, 0xec, 0x88, 0x84, 0x92, 0xd5, 0x03, 
+0xcf, 0x14, 0x97, 0xd7, 0x39, 0x66, 0x83, 0x05, 
+0x08, 0x10, 0xd3, 0x06, 0xcc, 0x10, 0xc3, 0x0a, 
+0x20, 0x15, 0xd3, 0x11, 0x64, 0x27, 0x23, 0x27, 
+0x10, 0x79, 0x53, 0xfe, 0x0f, 0xbc, 0x13, 0xf7, 
+0xb0, 0x72, 0xb3, 0x25, 0xd4, 0x14, 0x23, 0x0e, 
+0x68, 0x16, 0x03, 0x03, 0xc8, 0x22, 0x63, 0x01, 
+0xb0, 0x27, 0x53, 0x04, 0x04, 0x45, 0xe3, 0x02, 
+0xf4, 0x17, 0x23, 0x00, 0x98, 0x03, 0x90, 0x68, 
+0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc7, 0x20, 
+0x27, 0x1a, 0x0f, 0xfb, 0x64, 0x81, 0x61, 0x87, 
+0xa1, 0xc1, 0xff, 0xb4, 0x98, 0x01, 0x00, 0x64, 
+0x89, 0xb1, 0x34, 0xa6, 0x51, 0x3e, 0xce, 0xed, 
+0xce, 0x27, 0xd3, 0xd3, 0x4f, 0x65, 0xf4, 0xea, 
+0x21, 0xde, 0xdf, 0x5e, 0x53, 0x7f, 0xaf, 0xee, 
+0x44, 0x5c, 0xb6, 0xd7, 0x58, 0xaa, 0x5f, 0xf7, 
+0xd3, 0xf6, 0x58, 0xa4, 0x7b, 0xe8, 0x4c, 0x41, 
+0x4d, 0x45, 0x33, 0x2e, 0x39, 0x37, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0x30, 0x07, 0x00, 0x53, 0x0b, 0x01, 0x2c, 0x60, 
+0x1c, 0x82, 0x1e, 0x60, 0x49, 0x04, 0x3c, 0x60, 
+0xba, 0x8d, 0x0e, 0x64, 0xdd, 0x64, 0xbe, 0x73, 
+0x0e, 0xcf, 0x26, 0x34, 0x04, 0x38, 0x61, 0xf2, 
+0x23, 0xa6, 0x16, 0xe1, 0x22, 0x61, 0xa8, 0x0b, 
+0x86, 0x1d, 0x61, 0x2e, 0x72, 0xe3, 0xe2, 0xc6, 
+0x8b, 0x3e, 0x04, 0x97, 0xce, 0x60, 0x7f, 0xfe, 
+0x83, 0x04, 0x6c, 0x0f, 0x03, 0x05, 0xe0, 0x0f, 
+0x93, 0x08, 0xcc, 0x14, 0xa3, 0x0f, 0x10, 0x25, 
+0xb3, 0x21, 0xec, 0x74, 0x63, 0xdc, 0xe3, 0x93, 
+0x83, 0xd7, 0x5c, 0x6e, 0xa3, 0x20, 0xc0, 0x15, 
+0x93, 0x0c, 0x4c, 0x11, 0x53, 0x02, 0xfc, 0x1d, 
+0x53, 0x01, 0xe4, 0x21, 0xc3, 0x03, 0xd8, 0x3c, 
+0x93, 0x02, 0xc8, 0x13, 0xf3, 0x00, 0x94, 0x02, 
+0xc0, 0x60, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 
+0xc7, 0x10, 0x27, 0x1a, 0x0f, 0xfb, 0x64, 0xa1, 
+0x8a, 0x07, 0x61, 0x81, 0xff, 0xb4, 0x98, 0x00, 
+0xa0, 0xea, 0x18, 0xa4, 0xe3, 0xc6, 0xc7, 0x9d, 
+0xd9, 0xf9, 0xd2, 0x9e, 0x87, 0x7f, 0xd4, 0xea, 
+0x75, 0xfb, 0x99, 0xfc, 0xb6, 0x8d, 0xdf, 0xec, 
+0xb7, 0xdd, 0xff, 0xf4, 0x3b, 0xed, 0xff, 0xa1, 
+0x31, 0x05, 0x35, 0x14, 0xcc, 0xb8, 0xe4, 0xde, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0x30, 0x07, 0xc0, 0x5e, 0x30, 0x00, 
+0xc0, 0xad, 0x30, 0x13, 0x81, 0x34, 0x30, 0x2f, 
+0x42, 0x67, 0x30, 0x74, 0x07, 0x60, 0x33, 0x03, 
+0x78, 0xca, 0x3b, 0xca, 0x75, 0x23, 0x20, 0x12, 
+0x69, 0x31, 0x2a, 0x14, 0xc3, 0x0d, 0x60, 0xae, 
+0x30, 0xf5, 0x07, 0x73, 0x10, 0xc0, 0xc0, 0x3a, 
+0xe2, 0xe0, 0xe4, 0x75, 0x20, 0xf3, 0xc5, 0x25, 
+0xf5, 0xf0, 0xa8, 0x27, 0x12, 0xd6, 0x60, 0x43, 
+0x00, 0xea, 0x60, 0x5b, 0x80, 0xf4, 0x60, 0x8a, 
+0x01, 0x5a, 0x60, 0xf2, 0x82, 0x8c, 0x62, 0x29, 
+0x08, 0x1e, 0x6e, 0x3b, 0xc0, 0x6e, 0x6d, 0xe0, 
+0x07, 0xc2, 0x62, 0x15, 0x81, 0x8c, 0x78, 0x23, 
+0x81, 0x92, 0x9c, 0x06, 0x3e, 0x84, 0x9a, 0x07, 
+0xcc, 0x65, 0x74, 0xb1, 0x82, 0x01, 0x2a, 0xdc, 
+0xfa, 0xcd, 0x6e, 0xdd, 0xff, 0xfb, 0x92, 0xc4, 
+0xff, 0x83, 0xc7, 0x10, 0x27, 0x1c, 0x0f, 0xfb, 
+0x64, 0xb1, 0x69, 0x07, 0x61, 0xc1, 0xff, 0xb4, 
+0x98, 0x9e, 0xfe, 0xdc, 0x14, 0xff, 0xbe, 0x39, 
+0x08, 0xe2, 0x29, 0x32, 0x50, 0x9a, 0x03, 0x83, 
+0xc0, 0xc4, 0xb4, 0xa9, 0x9f, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xe9, 0x4c, 0x41, 0x4d, 0x45, 0x33, 
+0x2e, 0x39, 0x37, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x08, 0x00, 0x6b, 
+0x30, 0x04, 0x00, 0xc6, 0x30, 0x1a, 0xc1, 0x5f, 
+0x30, 0x3b, 0x02, 0xb8, 0x30, 0x8f, 0xc8, 0x53, 
+0x33, 0xb1, 0x3f, 0xf3, 0x3e, 0x73, 0x84, 0x33, 
+0x27, 0x22, 0xbe, 0x31, 0x65, 0x18, 0x13, 0x0f, 
+0xb0, 0xd3, 0x31, 0x1a, 0x09, 0x63, 0x13, 0x30, 
+0xf3, 0x3c, 0x73, 0xf0, 0x85, 0x44, 0xcf, 0x75, 
+0x22, 0xf1, 0x4a, 0x43, 0xf6, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xdb, 0xa0, 0xc0, 0xf9, 0x03, 0x70, 0xc1, 0x44, 
+0x03, 0xc4, 0xc1, 0xe1, 0x05, 0x30, 0xc3, 0x36, 
+0x09, 0x9c, 0xc7, 0x41, 0x1d, 0xa8, 0xef, 0x5e, 
+0xe8, 0x68, 0xee, 0x2d, 0x1c, 0x68, 0xc6, 0xfa, 
+0x06, 0x54, 0xc2, 0x8d, 0x02, 0xd4, 0xc0, 0x7f, 
+0x06, 0x0c, 0xc0, 0x95, 0x07, 0x28, 0xff, 0xfb, 
+0x92, 0xc4, 0xff, 0x82, 0x47, 0x18, 0x29, 0x1a, 
+0x0f, 0xfb, 0x64, 0xa1, 0x4d, 0x0a, 0x63, 0x29, 
+0xfe, 0x08, 0xe0, 0xc1, 0x00, 0x0c, 0xec, 0xd6, 
+0x90, 0xf3, 0x12, 0x88, 0x8b, 0x52, 0xb9, 0xa1, 
+0x9a, 0xd7, 0xad, 0x71, 0xe9, 0xad, 0x1e, 0x8f, 
+0xf8, 0x6f, 0xf5, 0xff, 0xff, 0xf4, 0xe8, 0xff, 
+0x5e, 0xd7, 0x79, 0x0f, 0x77, 0x47, 0xe8, 0x4c, 
+0x41, 0x4d, 0x45, 0x33, 0x2e, 0x39, 0x37, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x06, 
+0xc0, 0x66, 0x30, 0x06, 0xc0, 0xc3, 0x30, 0x1d, 
+0x01, 0x58, 0x30, 0x3f, 0xc2, 0xb1, 0x30, 0x99, 
+0x88, 0x36, 0x33, 0xf1, 0x7f, 0x22, 0x3f, 0x6c, 
+0x82, 0x83, 0x29, 0x72, 0xb9, 0x31, 0x70, 0x18, 
+0x43, 0x0f, 0xc0, 0xda, 0x31, 0x19, 0x09, 0xf3, 
+0x12, 0xe1, 0x04, 0x3c, 0x44, 0x40, 0x85, 0x74, 
+0xb8, 0x75, 0xe2, 0x91, 0x7a, 0xf8, 0x3d, 0x5b, 
+0x3f, 0xff, 0x51, 0x81, 0xf4, 0x07, 0x19, 0x82, 
+0x86, 0x07, 0xe1, 0x83, 0xb4, 0x0b, 0x19, 0x86, 
+0x5a, 0x14, 0x81, 0x8e, 0x4c, 0x3f, 0x49, 0xdd, 
+0x77, 0xee, 0x99, 0xdb, 0x18, 0x3c, 0xd9, 0x8d, 
+0xba, 0x0e, 0x31, 0x84, 0xf0, 0x04, 0xb1, 0x80, 
+0xd4, 0x0b, 0xa1, 0x81, 0x50, 0x0e, 0x19, 0x82, 
+0x2a, 0x19, 0x81, 0xb0, 0xe1, 0x46, 0x28, 0x11, 
+0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc8, 0xb8, 
+0x27, 0x18, 0x0f, 0xfb, 0x64, 0x81, 0x41, 0x05, 
+0x62, 0x01, 0xff, 0xf0, 0x90, 0x96, 0x79, 0x72, 
+0xc3, 0x55, 0x6f, 0xd9, 0x34, 0x9d, 0x87, 0xfc, 
+0x77, 0x7a, 0x9f, 0x96, 0xff, 0xff, 0xfb, 0xbf, 
+0xdf, 0xff, 0xab, 0xf7, 0xff, 0xbf, 0xfd, 0x69, 
+0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xf5, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x30, 0x04, 0x80, 0x63, 0x30, 0x08, 0x80, 0xbc, 
+0x30, 0x20, 0x41, 0x53, 0x30, 0x44, 0x02, 0xa6, 
+0x30, 0xa3, 0x48, 0x1b, 0x34, 0x2e, 0xbe, 0x3f, 
+0x34, 0x16, 0xc8, 0x0d, 0x30, 0xae, 0x82, 0xb2, 
+0x30, 0x5e, 0xc1, 0x87, 0x30, 0x3f, 0xc0, 0xe1, 
+0x30, 0x45, 0x00, 0xa8, 0x30, 0x4a, 0xc1, 0x15, 
+0x3c, 0x14, 0xb0, 0x72, 0x82, 0x5d, 0xba, 0x91, 
+0x78, 0xa5, 0x26, 0x6c, 0x5e, 0xdf, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xd6, 0x60, 0x6d, 0x81, 0x90, 0x60, 0x8b, 0x01, 
+0xc6, 0x60, 0xcc, 0x82, 0x88, 0x61, 0x5d, 0x04, 
+0xc2, 0x63, 0x16, 0x8e, 0xb0, 0x74, 0x34, 0x72, 
+0xd0, 0x73, 0xb2, 0x8e, 0x28, 0x62, 0xf4, 0x03, 
+0x6a, 0x61, 0x0b, 0x80, 0xca, 0x60, 0x23, 0x82, 
+0x72, 0x60, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 
+0xc7, 0x94, 0x29, 0x18, 0x0f, 0xfb, 0x64, 0x81, 
+0x3f, 0x05, 0x22, 0x01, 0xff, 0xf0, 0x90, 0x51, 
+0x83, 0x00, 0x60, 0x7f, 0x05, 0x7a, 0x76, 0x5c, 
+0x66, 0x4a, 0x30, 0x5d, 0xd6, 0x1d, 0x0c, 0xe5, 
+0xcb, 0x4e, 0xed, 0x77, 0x8d, 0xf5, 0xf5, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0x77, 0xfb, 0xbd, 0x1d, 
+0xdf, 0xff, 0xff, 0xad, 0x31, 0x05, 0x35, 0x14, 
+0xcc, 0xb8, 0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x30, 0x02, 0xc0, 0x5c, 0x30, 0x0b, 
+0x40, 0xb9, 0x30, 0x22, 0x81, 0x4c, 0x30, 0x48, 
+0x42, 0x9b, 0x30, 0xac, 0x07, 0xfa, 0x34, 0x69, 
+0xfd, 0x48, 0x34, 0x50, 0x07, 0xee, 0x30, 0xb7, 
+0x42, 0xad, 0x30, 0x61, 0x81, 0x86, 0x30, 0x3f, 
+0x80, 0xe8, 0x30, 0x44, 0xc0, 0xb3, 0x30, 0x49, 
+0x01, 0x24, 0x3b, 0xc5, 0x00, 0x52, 0x9a, 0x5c, 
+0x3a, 0xf0, 0xe4, 0x5e, 0xb8, 0x46, 0xca, 0xbf, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x49, 0x81, 
+0xb4, 0x06, 0x79, 0x82, 0x2a, 0x07, 0x61, 0x83, 
+0x24, 0x0a, 0xb9, 0x85, 0x5e, 0x14, 0x21, 0x8c, 
+0x20, 0x3d, 0xf9, 0xcf, 0x83, 0xe3, 0x69, 0xcd, 
+0x80, 0x3b, 0xd9, 0x8b, 0x96, 0x0e, 0xd1, 0x84, 
+0x08, 0x02, 0x21, 0x80, 0x64, 0x09, 0x71, 0x81, 
+0x64, 0x0b, 0xc9, 0x82, 0xff, 0xfb, 0x92, 0xc4, 
+0xff, 0x83, 0xc9, 0x1c, 0x29, 0x18, 0x0f, 0xff, 
+0x64, 0x81, 0x37, 0x85, 0x22, 0x41, 0xff, 0xec, 
+0x90, 0x1e, 0x15, 0x81, 0xde, 0xef, 0x19, 0x30, 
+0xc9, 0x72, 0x98, 0x6c, 0x6b, 0x79, 0x59, 0xef, 
+0x52, 0x7d, 0x3f, 0x67, 0xdd, 0xff, 0xff, 0xff, 
+0xff, 0x47, 0xff, 0xff, 0xa5, 0x31, 0x05, 0x35, 
+0x14, 0xcc, 0xb8, 0xe4, 0xdd, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x30, 0x00, 0x80, 0x59, 
+0x30, 0x0d, 0x00, 0xb4, 0x30, 0x25, 0x41, 0x47, 
+0x30, 0x4c, 0x02, 0x90, 0x30, 0xb4, 0xc7, 0xd9, 
+0x34, 0xa2, 0xbc, 0x3f, 0x34, 0x87, 0xc7, 0xcf, 
+0x30, 0xbf, 0x02, 0xa4, 0x30, 0x64, 0x41, 0x89, 
+0x30, 0x40, 0x40, 0xef, 0x30, 0x43, 0x80, 0xba, 
+0x30, 0x48, 0x41, 0x35, 0x3b, 0xb5, 0x70, 0x52, 
+0x62, 0x6b, 0xb8, 0x90, 0xfc, 0x52, 0x93, 0x37, 
+0x2f, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xeb, 0x30, 0x37, 0x40, 
+0xd2, 0x30, 0x44, 0x00, 0xf7, 0x30, 0x62, 0xc1, 
+0x68, 0x30, 0xa8, 0x82, 0xa5, 0x31, 0x7d, 0x48, 
+0x20, 0x39, 0xc3, 0x3f, 0x54, 0x39, 0x83, 0xc7, 
+0xde, 0x31, 0x6b, 0x02, 0x01, 0x30, 0x7c, 0x40, 
+0x21, 0x30, 0x06, 0xc1, 0x21, 0x30, 0xff, 0xfb, 
+0x92, 0xc4, 0xff, 0x83, 0xc8, 0x94, 0x27, 0x18, 
+0x0f, 0xff, 0x64, 0x81, 0x24, 0x85, 0x62, 0x41, 
+0xff, 0xec, 0x90, 0x31, 0x41, 0x6e, 0x30, 0x47, 
+0x82, 0xa5, 0x3c, 0x6d, 0x93, 0x2b, 0x16, 0x2e, 
+0x4b, 0x0e, 0x8c, 0xeb, 0x1b, 0x47, 0x7b, 0x9d, 
+0xe3, 0x7f, 0xf4, 0xfd, 0x9d, 0x1f, 0xff, 0xff, 
+0xf5, 0xfe, 0xbe, 0xef, 0xf7, 0x7f, 0xff, 0xfe, 
+0xb4, 0xc4, 0x14, 0xd4, 0x53, 0x32, 0xe3, 0x93, 
+0x75, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x04, 0x80, 
+0xa4, 0x60, 0x1e, 0x81, 0x5e, 0x60, 0x4f, 0x02, 
+0x80, 0x60, 0xa0, 0x85, 0x06, 0x61, 0x7a, 0x0f, 
+0x64, 0x69, 0xb2, 0xf6, 0x44, 0x69, 0x79, 0x0f, 
+0x54, 0x61, 0x8d, 0x85, 0x3a, 0x60, 0xcc, 0x03, 
+0x10, 0x60, 0x80, 0x01, 0xe4, 0x60, 0x86, 0x81, 
+0x86, 0x60, 0x8d, 0x02, 0x88, 0x76, 0xcb, 0x80, 
+0x64, 0xb4, 0xd4, 0x71, 0xe1, 0xc8, 0xbd, 0x38, 
+0x66, 0xca, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0x4f, 0xff, 0xff, 0xff, 0xff, 0x49, 0x97, 
+0xc5, 0xc9, 0x9d, 0x66, 0xe1, 0xaa, 0x4a, 0x39, 
+0xc8, 0x33, 0x51, 0x8a, 0x38, 0x3b, 0x99, 0xc3, 
+0x3f, 0xd0, 0x69, 0xc1, 0x84, 0x39, 0xc9, 0x89, 
+0xb6, 0x0e, 0xf0, 0x90, 0x67, 0x80, 0x00, 0x3b, 
+0x8c, 0xb6, 0x4d, 0xcd, 0x07, 0x90, 0x8c, 0xb5, 
+0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc9, 0x20, 
+0x29, 0x18, 0x0f, 0xff, 0x64, 0x81, 0x3a, 0x05, 
+0x22, 0x41, 0xff, 0xec, 0x90, 0x2d, 0x8c, 0x24, 
+0x04, 0x50, 0x79, 0x9c, 0xc6, 0x84, 0xc1, 0xbf, 
+0x4f, 0xff, 0xfb, 0xbf, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0x4a, 0x62, 0x0a, 0x6a, 0x29, 0x99, 
+0x71, 0xc9, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0x11, 0x00, 0x9a, 0x60, 0x22, 0x01, 0x50, 0x60, 
+0x53, 0x82, 0x72, 0x60, 0xa7, 0x04, 0xec, 0x61, 
+0x8a, 0x8f, 0x1a, 0x6a, 0x1b, 0x73, 0xe6, 0x69, 
+0xe0, 0x8f, 0x0a, 0x61, 0x9c, 0x05, 0x24, 0x60, 
+0xd1, 0x83, 0x12, 0x60, 0x80, 0x81, 0xf2, 0x60, 
+0x84, 0x01, 0x94, 0x60, 0x8a, 0x82, 0xaa, 0x76, 
+0x2c, 0x20, 0x64, 0x84, 0xd7, 0x71, 0x21, 0xf8, 
+0xa5, 0x26, 0x75, 0xed, 0xfb, 0xff, 0xd7, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 
+0x66, 0x5f, 0x97, 0x86, 0x73, 0x1c, 0xa6, 0xa5, 
+0xaa, 0x87, 0x1a, 0x50, 0xe6, 0x28, 0x08, 0xf8, 
+0x47, 0x07, 0x57, 0x8c, 0xc7, 0x00, 0x98, 0xf1, 
+0x06, 0x25, 0xd0, 0x3f, 0xe6, 0x0c, 0x68, 0x01, 
+0x43, 0x00, 0x72, 0x99, 0x86, 0x97, 0x1a, 0x25, 
+0x1b, 0x99, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 
+0xc9, 0x14, 0x27, 0x18, 0x0f, 0xff, 0x64, 0x80, 
+0xfc, 0x04, 0x62, 0x81, 0xdf, 0xf4, 0x50, 0x78, 
+0x59, 0x98, 0x4e, 0x07, 0x20, 0x05, 0x9d, 0x46, 
+0x7c, 0x16, 0x77, 0xbb, 0xff, 0xff, 0xec, 0xff, 
+0xff, 0xfd, 0xdf, 0xff, 0xff, 0xfb, 0xbe, 0x9f, 
+0xff, 0xf5, 0xa6, 0x20, 0xa6, 0xa2, 0x99, 0x97, 
+0x1c, 0x9b, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x24, 0x01, 0x18, 0xc0, 0x4b, 0x02, 
+0x8c, 0xc0, 0xb0, 0x04, 0xc0, 0xc1, 0x5d, 0x09, 
+0xa4, 0xc3, 0x34, 0x1d, 0x88, 0xd5, 0x01, 0xe2, 
+0xc8, 0xd4, 0x84, 0x1d, 0x70, 0xc3, 0x57, 0x0a, 
+0x24, 0xc1, 0xaa, 0x06, 0x20, 0xc1, 0x00, 0x03, 
+0xf8, 0xc1, 0x05, 0x03, 0x4c, 0xc1, 0x0e, 0x05, 
+0x88, 0xeb, 0x19, 0x80, 0x48, 0xe9, 0xa8, 0xe3, 
+0xc3, 0x92, 0xfa, 0x73, 0x96, 0x55, 0xf4, 0x7f, 
+0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xa4, 0xcb, 0xe2, 0xfc, 0xce, 0x53, 
+0xa8, 0xd4, 0x45, 0x84, 0xe2, 0x7a, 0x80, 0xc4, 
+0xe2, 0x20, 0x3c, 0xe0, 0x2b, 0xfa, 0x9c, 0xdf, 
+0x58, 0x1f, 0x54, 0xc4, 0x9b, 0x08, 0x68, 0xc1, 
+0x78, 0x00, 0xb4, 0xc0, 0x09, 0x03, 0x60, 0xcd, 
+0x04, 0x9c, 0xd1, 0xf8, 0xff, 0xfb, 0x92, 0xc4, 
+0xff, 0x83, 0xc9, 0x0c, 0x29, 0x18, 0x0f, 0xff, 
+0x64, 0x81, 0x13, 0x04, 0xa2, 0x81, 0xdf, 0xf4, 
+0x50, 0xa0, 0xcc, 0x52, 0xb8, 0xc2, 0xa0, 0x3d, 
+0x00, 0x4d, 0x76, 0x34, 0xa0, 0xdf, 0xa7, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xd5, 0xff, 0xd9, 0xf4, 
+0xff, 0xa5, 0x31, 0x05, 0x35, 0x14, 0xcc, 0xb8, 
+0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x0b, 0x80, 0x9e, 0x60, 
+0x31, 0x01, 0x6c, 0x60, 0x6b, 0x82, 0xaa, 0x60, 
+0xd0, 0x05, 0x60, 0x61, 0xe6, 0x90, 0x76, 0x6c, 
+0x65, 0x7e, 0x22, 0x6c, 0x1b, 0x90, 0x6e, 0x61, 
+0xf7, 0x05, 0xb4, 0x60, 0xf9, 0x83, 0x86, 0x60, 
+0x94, 0x82, 0x56, 0x60, 0x93, 0x01, 0xf8, 0x60, 
+0x98, 0x83, 0x4e, 0x78, 0x6f, 0xe6, 0x54, 0x04, 
+0x8e, 0x6d, 0x71, 0xff, 0x87, 0x29, 0x33, 0x38, 
+0xbd, 0xbf, 0x7f, 0xfa, 0xe8, 0xff, 0xff, 0xff, 
+0xff, 0xfb, 0xbf, 0xff, 0xff, 0xff, 0xac, 0xca, 
+0x32, 0x98, 0xcc, 0x23, 0x44, 0xd1, 0x34, 0xf8, 
+0xdd, 0x49, 0x84, 0xc4, 0x2b, 0x1d, 0x40, 0xdb, 
+0x8a, 0xe3, 0x98, 0xda, 0xd5, 0x1c, 0x78, 0xc3, 
+0xea, 0x07, 0xbc, 0xc1, 0x37, 0x00, 0xf0, 0xc0, 
+0x16, 0x02, 0xbc, 0xd7, 0xef, 0x63, 0xff, 0xfb, 
+0x92, 0xc4, 0xff, 0x83, 0xc9, 0x18, 0x27, 0x18, 
+0x0f, 0xff, 0x64, 0x81, 0x08, 0x04, 0x62, 0x81, 
+0xdf, 0xf4, 0x50, 0x81, 0x75, 0x4d, 0x60, 0x91, 
+0x31, 0x18, 0x21, 0x1f, 0x5a, 0xf4, 0xb4, 0xa8, 
+0x33, 0xe8, 0xff, 0xfd, 0xbf, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xe8, 0x4c, 0x41, 0x4d, 0x45, 
+0x33, 0x2e, 0x39, 0x37, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 0x00, 
+0x00, 0x48, 0x30, 0x1a, 0x40, 0xb1, 0x30, 0x38, 
+0x01, 0x4c, 0x30, 0x6b, 0xc2, 0x9f, 0x30, 0xfb, 
+0x08, 0x06, 0x36, 0x67, 0x7d, 0x78, 0x36, 0x41, 
+0x08, 0x02, 0x31, 0x03, 0x42, 0xcd, 0x30, 0x7f, 
+0x01, 0xc0, 0x30, 0x49, 0x81, 0x30, 0x30, 0x48, 
+0x41, 0x05, 0x30, 0x4a, 0x01, 0xb4, 0x3b, 0xe8, 
+0x23, 0x29, 0x05, 0x43, 0x46, 0xbe, 0xfe, 0x43, 
+0xf4, 0xe1, 0x9b, 0x2a, 0xfa, 0x3f, 0xec, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xff, 
+0xec, 0xd2, 0x65, 0x11, 0x52, 0x65, 0xf9, 0xac, 
+0x68, 0x62, 0x92, 0x6e, 0x3c, 0xe8, 0x62, 0x06, 
+0x0f, 0x1e, 0x6d, 0x68, 0xf5, 0x6e, 0x6d, 0x0f, 
+0x0e, 0xba, 0x61, 0xe5, 0x84, 0x0c, 0x60, 0x92, 
+0x00, 0xaa, 0x60, 0x13, 0x81, 0x48, 0x6c, 0x87, 
+0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc9, 0x58, 
+0x29, 0x16, 0x0f, 0xff, 0x64, 0x81, 0x01, 0x04, 
+0x62, 0xc1, 0xdf, 0xf0, 0x50, 0x79, 0xc3, 0x79, 
+0x06, 0xb7, 0x46, 0x18, 0x90, 0x0e, 0x8f, 0xce, 
+0x2c, 0xba, 0x1b, 0xeb, 0x4f, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xa6, 0x20, 
+0xa6, 0xa2, 0x99, 0x97, 0x1c, 0x9b, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0x30, 0x02, 0xc0, 0x41, 0x30, 0x1c, 0x00, 0xa8, 
+0x30, 0x3a, 0x41, 0x41, 0x30, 0x6f, 0x82, 0x8c, 
+0x31, 0x02, 0xc7, 0xcf, 0x36, 0x99, 0xbb, 0xcb, 
+0x36, 0x72, 0x47, 0xcd, 0x31, 0x0a, 0x02, 0xbe, 
+0x30, 0x81, 0x41, 0xbf, 0x30, 0x49, 0xc1, 0x35, 
+0x30, 0x46, 0x81, 0x0a, 0x30, 0x48, 0x41, 0xc3, 
+0x3b, 0x98, 0x93, 0x26, 0x06, 0x47, 0xf6, 0xb8, 
+0xff, 0xc3, 0x94, 0x96, 0xf9, 0x6d, 0x7f, 0x4f, 
+0xff, 0xff, 0xff, 0xff, 0xf4, 0x7f, 0xa3, 0xff, 
+0xfe, 0x8f, 0xff, 0xdb, 0xa0, 0xca, 0x32, 0xa8, 
+0xcb, 0xa3, 0x74, 0xd0, 0x55, 0x48, 0xdb, 0x8a, 
+0x24, 0xc3, 0xef, 0x1f, 0x20, 0xda, 0x0c, 0xf1, 
+0xc8, 0xd9, 0x61, 0x1e, 0x60, 0xc3, 0xaa, 0x08, 
+0x7c, 0xc1, 0x11, 0x01, 0xa8, 0xc0, 0x34, 0x02, 
+0x64, 0xda, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 
+0xc9, 0x7c, 0x27, 0x16, 0x0f, 0xff, 0x64, 0x80, 
+0xfd, 0x04, 0x62, 0xc1, 0xdf, 0xf0, 0x50, 0x6e, 
+0x43, 0x8a, 0x6e, 0xcd, 0x78, 0x89, 0x31, 0x38, 
+0x19, 0x0d, 0x5c, 0x69, 0x6a, 0xc3, 0x9d, 0x48, 
+0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xd1, 0xfe, 0x84, 0xc4, 0x14, 0xd4, 0x53, 0x32, 
+0xe3, 0x93, 0x7a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0x30, 0x04, 0x80, 0x38, 0x30, 0x1e, 
+0x40, 0xa1, 0x30, 0x3c, 0x01, 0x36, 0x30, 0x72, 
+0xc2, 0x79, 0x31, 0x0a, 0x07, 0x92, 0x36, 0xc9, 
+0x7a, 0x06, 0x36, 0xa0, 0x87, 0x94, 0x31, 0x11, 
+0x42, 0xaf, 0x30, 0x82, 0x81, 0xbc, 0x30, 0x49, 
+0x01, 0x38, 0x30, 0x45, 0x41, 0x13, 0x30, 0x46, 
+0x01, 0xd0, 0x3b, 0x08, 0xc3, 0x25, 0x07, 0x47, 
+0xc6, 0xbe, 0xfe, 0x43, 0xf4, 0xf8, 0x3d, 0x5b, 
+0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 
+0xff, 0xfd, 0xff, 0xff, 0x51, 0x94, 0x05, 0x69, 
+0x96, 0xe7, 0x01, 0x9f, 0x8a, 0xe9, 0xb5, 0x74, 
+0xd1, 0x87, 0x98, 0x40, 0x09, 0xb2, 0x83, 0xf0, 
+0xb9, 0xb1, 0x30, 0x3e, 0x89, 0x87, 0x12, 0x11, 
+0xa1, 0x81, 0xf8, 0x03, 0xf9, 0x80, 0x8a, 0x04, 
+0x51, 0xb6, 0x9b, 0xa7, 0xff, 0xfb, 0x92, 0xc4, 
+0xff, 0x83, 0xc9, 0x98, 0x2b, 0x16, 0x0f, 0xff, 
+0x64, 0x81, 0x03, 0x04, 0x62, 0xc1, 0xdf, 0xf0, 
+0x50, 0x1f, 0xd5, 0x1b, 0x0d, 0x04, 0x62, 0x80, 
+0x2a, 0x1b, 0x38, 0xb1, 0x65, 0x06, 0xfa, 0xd3, 
+0xe8, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xfd, 0x29, 0x88, 0x29, 0xa8, 0xa6, 0x65, 
+0xc7, 0x26, 0xf5, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x30, 0x06, 0xc0, 0x31, 
+0x30, 0x1f, 0x80, 0x98, 0x30, 0x3e, 0x41, 0x2b, 
+0x30, 0x76, 0x02, 0x64, 0x31, 0x11, 0x47, 0x57, 
+0x36, 0xf6, 0xb8, 0x2f, 0x36, 0xcc, 0xc7, 0x59, 
+0x31, 0x17, 0x02, 0x9e, 0x30, 0x84, 0x41, 0xb9, 
+0x30, 0x48, 0xc1, 0x3d, 0x30, 0x43, 0x81, 0x18, 
+0x30, 0x43, 0xc1, 0xdd, 0x3a, 0xb9, 0x33, 0x22, 
+0x08, 0x47, 0xf6, 0xb8, 0xff, 0xc6, 0x29, 0x01, 
+0xcf, 0xfd, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xf4, 0x19, 0x42, 0x57, 0x19, 0x64, 
+0x72, 0x99, 0xea, 0xb2, 0x1b, 0x39, 0x56, 0x98, 
+0x75, 0xa4, 0x1b, 0x1b, 0x0d, 0x1f, 0xd4, 0x1a, 
+0xf8, 0xe4, 0x03, 0x18, 0x6c, 0x81, 0x25, 0x98, 
+0x1d, 0x20, 0x48, 0x18, 0x0a, 0x00, 0x3f, 0x9b, 
+0x95, 0xa4, 0x72, 0x6c, 0xe9, 0xb1, 0xff, 0xfb, 
+0x92, 0xc4, 0xff, 0x83, 0xc9, 0x54, 0x29, 0x16, 
+0x0f, 0xff, 0x64, 0x81, 0x03, 0x04, 0x62, 0xc1, 
+0xdf, 0xf0, 0x50, 0x8f, 0xe6, 0x2b, 0x02, 0x23, 
+0x8b, 0x8d, 0x15, 0x58, 0x33, 0xd4, 0x8f, 0x4f, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x1f, 
+0xe8, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x39, 
+0x37, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 0x0b, 
+0x00, 0x32, 0x30, 0x27, 0x40, 0xa9, 0x30, 0x4a, 
+0x01, 0x4a, 0x30, 0x8a, 0xc2, 0xa5, 0x31, 0x3f, 
+0x88, 0x14, 0x38, 0x20, 0xfd, 0xcc, 0x37, 0xef, 
+0x08, 0x1c, 0x31, 0x45, 0xc2, 0xed, 0x30, 0x99, 
+0x81, 0xf6, 0x30, 0x53, 0x01, 0x70, 0x30, 0x4b, 
+0xc1, 0x4b, 0x30, 0x4b, 0x02, 0x32, 0x3b, 0xea, 
+0xe3, 0x29, 0x0f, 0x40, 0x03, 0x3b, 0x76, 0x1f, 
+0xfa, 0x7b, 0x07, 0xd5, 0xff, 0xff, 0x57, 0xff, 
+0xff, 0xfe, 0xaf, 0xff, 0x7f, 0xff, 0xfd, 0xff, 
+0xef, 0xf5, 0x19, 0x10, 0x4b, 0x99, 0x2e, 0x65, 
+0x19, 0x98, 0x9e, 0x9a, 0xb3, 0x32, 0x18, 0x62, 
+0xc3, 0xaf, 0x9a, 0x94, 0xfc, 0x97, 0x9a, 0x83, 
+0x83, 0x9a, 0x98, 0x5a, 0xe1, 0x08, 0x18, 0x16, 
+0xc0, 0x46, 0x98, 0x09, 0xe0, 0x30, 0x1b, 0x31, 
+0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc8, 0xe4, 
+0x27, 0x16, 0x0f, 0xff, 0x64, 0x81, 0x03, 0x84, 
+0x62, 0xc1, 0xdf, 0xf0, 0x50, 0x5a, 0x70, 0x7a, 
+0xc1, 0xac, 0x4c, 0xc0, 0x22, 0x2a, 0x6b, 0x3a, 
+0xb3, 0xca, 0x0d, 0xf5, 0xa7, 0xd1, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x31, 
+0x05, 0x35, 0x14, 0xcc, 0xb8, 0xe4, 0xdd, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x30, 0x0d, 0x40, 0x29, 0x30, 0x28, 0x80, 0x9e, 
+0x30, 0x4c, 0xc1, 0x3d, 0x30, 0x8e, 0x02, 0x8c, 
+0x31, 0x46, 0xc7, 0xc9, 0x38, 0x4f, 0x3b, 0x83, 
+0x38, 0x1c, 0xc7, 0xd3, 0x31, 0x4c, 0x02, 0xd8, 
+0x30, 0x9a, 0xc1, 0xf1, 0x30, 0x52, 0x41, 0x75, 
+0x30, 0x49, 0x81, 0x52, 0x30, 0x48, 0xc2, 0x3f, 
+0x3b, 0x7b, 0x33, 0x24, 0x0e, 0x41, 0xf6, 0x70, 
+0xff, 0xbf, 0x94, 0x96, 0xf9, 0x6d, 0x1f, 0xff, 
+0xdb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xe8, 0xff, 0xfd, 0xba, 0x0c, 0x87, 0x26, 0x0c, 
+0x92, 0x33, 0x4c, 0xc5, 0x51, 0x0d, 0x4a, 0x9c, 
+0xcc, 0x2f, 0x71, 0xe2, 0x0d, 0x3d, 0xae, 0x9a, 
+0x8d, 0x35, 0x51, 0xd7, 0x8c, 0x2b, 0x40, 0x88, 
+0x4c, 0x0a, 0x30, 0x26, 0x8c, 0x05, 0xa0, 0x14, 
+0xcd, 0xaa, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 
+0xc9, 0x84, 0x29, 0x14, 0x0f, 0xff, 0x64, 0x80, 
+0xfe, 0x84, 0x63, 0x01, 0xdf, 0xf0, 0x50, 0xa2, 
+0x38, 0x65, 0x2c, 0xd6, 0x86, 0x10, 0x11, 0x29, 
+0x35, 0x5d, 0x69, 0xd0, 0xbb, 0x3a, 0xbf, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 
+0x98, 0x82, 0x9a, 0x8a, 0x66, 0x5c, 0x72, 0x6e, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0x30, 0x0f, 0x00, 0x1e, 0x30, 0x2a, 
+0xc0, 0x93, 0x30, 0x4e, 0x81, 0x2e, 0x30, 0x91, 
+0x42, 0x71, 0x31, 0x4d, 0x87, 0x78, 0x38, 0x7a, 
+0xf9, 0x1e, 0x38, 0x47, 0x07, 0x84, 0x31, 0x52, 
+0x42, 0xc3, 0x30, 0x9c, 0x01, 0xec, 0x30, 0x51, 
+0x81, 0x76, 0x30, 0x47, 0xc1, 0x59, 0x30, 0x45, 
+0x82, 0x4a, 0x3a, 0xeb, 0x83, 0x23, 0x11, 0x41, 
+0xc6, 0x76, 0xec, 0x43, 0x74, 0xf6, 0x1e, 0xaf, 
+0xf7, 0xff, 0xaa, 0x8f, 0xff, 0xff, 0xff, 0xff, 
+0xbf, 0xff, 0xfe, 0xff, 0xf7, 0xfa, 0x8c, 0x84, 
+0x26, 0x4c, 0x8d, 0x34, 0x0c, 0xbc, 0x52, 0xcd, 
+0x3b, 0xa0, 0x0c, 0x2d, 0x41, 0xec, 0x4d, 0x30, 
+0x5e, 0xe4, 0x4d, 0x28, 0x21, 0xe1, 0xcc, 0x29, 
+0x10, 0x8c, 0x8c, 0x08, 0xe0, 0x2a, 0xcc, 0x06, 
+0x50, 0x11, 0x8d, 0xb4, 0xff, 0xfb, 0x92, 0xc4, 
+0xff, 0x83, 0xc9, 0x88, 0x2b, 0x14, 0x0f, 0xff, 
+0x64, 0x80, 0xfa, 0x84, 0x63, 0x01, 0xdf, 0xf0, 
+0x50, 0x99, 0x38, 0x9c, 0xe8, 0xd7, 0x25, 0xc0, 
+0x31, 0x35, 0x35, 0x9d, 0x59, 0xe0, 0x83, 0x7a, 
+0xd3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xfd, 0x3f, 0xff, 0xf4, 0x26, 0x20, 0xa6, 
+0xa2, 0x99, 0x97, 0x1c, 0x9b, 0xd5, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x30, 0x14, 0xc0, 0x19, 
+0x30, 0x33, 0x00, 0xa0, 0x30, 0x5c, 0xc1, 0x4b, 
+0x30, 0xa9, 0x82, 0xac, 0x31, 0x84, 0x48, 0x29, 
+0x39, 0xd7, 0xbe, 0x3b, 0x39, 0x9b, 0xc8, 0x39, 
+0x31, 0x88, 0x03, 0x0e, 0x30, 0xb4, 0x42, 0x2d, 
+0x30, 0x5c, 0xc1, 0xb3, 0x30, 0x4f, 0x81, 0x92, 
+0x30, 0x4c, 0xc2, 0xad, 0x3c, 0x1d, 0xb3, 0x28, 
+0x16, 0x2e, 0x5b, 0x0c, 0x72, 0xdf, 0xca, 0x4b, 
+0x67, 0x17, 0xbb, 0xee, 0xff, 0x5d, 0x3f, 0x6f, 
+0xff, 0xff, 0xee, 0xfb, 0xf7, 0x7f, 0x5f, 0xa3, 
+0xdd, 0xfe, 0xef, 0x2a, 0x64, 0x19, 0x34, 0x64, 
+0x41, 0xaa, 0x65, 0x9a, 0xa0, 0x69, 0x55, 0x1a, 
+0x61, 0x59, 0x8f, 0xa8, 0x69, 0x13, 0x79, 0x4c, 
+0x68, 0xd4, 0x8f, 0x58, 0x61, 0x36, 0x04, 0x82, 
+0x60, 0x3c, 0x81, 0x70, 0x60, 0x37, 0xff, 0xfb, 
+0x92, 0xc4, 0xff, 0x83, 0xc9, 0x88, 0x29, 0x14, 
+0x0f, 0xff, 0x64, 0x81, 0x07, 0x84, 0x63, 0x01, 
+0xdf, 0xf0, 0x50, 0x00, 0x72, 0x6e, 0x34, 0x71, 
+0xc6, 0x25, 0x66, 0xbc, 0x2b, 0x82, 0x89, 0xc9, 
+0x22, 0xeb, 0x48, 0x42, 0xec, 0xb2, 0xa4, 0x7f, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0x42, 0x62, 0x0a, 0x6a, 0x29, 0x99, 0x71, 0xc9, 
+0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x02, 
+0xc0, 0x49, 0x00, 0x00, 0x06, 0xf0, 0xbb, 0x66, 
+0x71, 0x07, 0x9d, 0xa6, 0x12, 0x41, 0x80, 0x68, 
+0x96, 0xcd, 0x06, 0x86, 0x01, 0x84, 0x61, 0x2a, 
+0x07, 0x26, 0x06, 0x80, 0x44, 0x60, 0x1c, 0x02, 
+0xc6, 0x4a, 0x66, 0x36, 0x45, 0x9c, 0x87, 0xf0, 
+0xa7, 0xa9, 0x98, 0x38, 0xff, 0xf5, 0x9b, 0xda, 
+0xf1, 0xbd, 0x54, 0x20, 0xc8, 0x02, 0x6c, 0xc8, 
+0x53, 0x58, 0xca, 0xa5, 0x5c, 0xd1, 0xba, 0x60, 
+0xc2, 0x8c, 0x1f, 0xe4, 0xd1, 0x3f, 0xf6, 0xa4, 
+0xd0, 0xc6, 0x1f, 0x44, 0xc2, 0x47, 0x09, 0x40, 
+0xc0, 0x62, 0x03, 0x1c, 0xc0, 0x77, 0x00, 0xa8, 
+0xdd, 0x08, 0x53, 0x8f, 0xc6, 0x8d, 0x82, 0x50, 
+0x05, 0x14, 0x52, 0xe9, 0xd5, 0x91, 0x04, 0x1b, 
+0xd6, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc9, 0xfc, 
+0x29, 0x12, 0x0f, 0xff, 0x64, 0x80, 0xff, 0x04, 
+0x63, 0x01, 0xdf, 0xf0, 0x50, 0xff, 0xd3, 0xfe, 
+0x9f, 0xff, 0xfa, 0x13, 0x10, 0x53, 0x51, 0x4c, 
+0xcb, 0x8e, 0x4d, 0xea, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0x03, 0x01, 0x96, 0x60, 0x6d, 0x01, 0x0c, 0x60, 
+0xc1, 0x82, 0x4e, 0x61, 0x5f, 0x04, 0xd0, 0x63, 
+0x22, 0x8e, 0xc2, 0x74, 0x58, 0x70, 0x72, 0x73, 
+0xdb, 0x8e, 0xee, 0x63, 0x27, 0x05, 0xb0, 0x61, 
+0x6c, 0x84, 0x3e, 0x60, 0xb4, 0x83, 0x6e, 0x60, 
+0x94, 0x03, 0x3c, 0x60, 0x8a, 0x85, 0x8a, 0x75, 
+0x7c, 0x66, 0x40, 0x30, 0x5f, 0xf6, 0x18, 0xed, 
+0xc3, 0x14, 0x96, 0xdc, 0xbd, 0x9f, 0x77, 0x77, 
+0x4f, 0xff, 0xa3, 0xff, 0xfe, 0xbf, 0xfb, 0xbf, 
+0xfd, 0x3e, 0xef, 0xaf, 0x77, 0xa0, 0xc7, 0xf2, 
+0x68, 0xc7, 0xe3, 0x64, 0xca, 0x15, 0x70, 0xd0, 
+0xaa, 0x8c, 0xc2, 0x67, 0x20, 0x60, 0xd0, 0x4e, 
+0xfa, 0x60, 0xcf, 0xdd, 0x1f, 0xc0, 0xc2, 0x1e, 
+0x09, 0x7c, 0xc0, 0x49, 0x03, 0x48, 0xc0, 0x80, 
+0x00, 0x6c, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x82, 
+0xc6, 0xb8, 0x25, 0x35, 0x4c, 0xfb, 0x22, 0xb1, 
+0x0a, 0x04, 0x63, 0x01, 0xdf, 0xf0, 0x50, 0xdd, 
+0xe7, 0xa3, 0x92, 0x42, 0x4d, 0x84, 0x4b, 0x07, 
+0x15, 0x92, 0xe5, 0xd6, 0x90, 0x83, 0xec, 0xb2, 
+0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xf4, 0x26, 0x20, 0xa6, 0xa2, 0x99, 0x97, 
+0x1c, 0x9b, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x26, 0x03, 0xf0, 0xc1, 0x05, 0x02, 0x34, 
+0xc1, 0xc2, 0x04, 0xf0, 0xc3, 0x31, 0x0a, 0x6c, 
+0xc7, 0x40, 0x1f, 0xc8, 0xef, 0x05, 0xf1, 0xa0, 
+0xed, 0xe4, 0x20, 0x30, 0xc7, 0x49, 0x0c, 0x84, 
+0xc3, 0x44, 0x09, 0x88, 0xc1, 0x98, 0x07, 0xe0, 
+0xc1, 0x47, 0x07, 0x8c, 0xc1, 0x2c, 0x0c, 0xe0, 
+0xd7, 0x10, 0xa3, 0x13, 0x88, 0x4b, 0x50, 0xb9, 
+0xda, 0xc3, 0xef, 0x2f, 0xb0, 0xf1, 0x9b, 0x5b, 
+0xe6, 0xfd, 0x7d, 0x5f, 0xff, 0xff, 0xff, 0xbf, 
+0xfb, 0x9f, 0x5f, 0xd1, 0xfa, 0x73, 0xfd, 0x37, 
+0x63, 0xfa, 0x14, 0x63, 0xe1, 0x36, 0x63, 0xd9, 
+0xb4, 0x64, 0xc2, 0xc2, 0x67, 0xcd, 0x58, 0x61, 
+0x20, 0x10, 0x6a, 0x67, 0xaa, 0xfe, 0xea, 0x67, 
+0x74, 0x10, 0x1e, 0x60, 0xfa, 0x84, 0xd4, 0x60, 
+0x17, 0x01, 0xc2, 0x60, 0xff, 0xfb, 0x90, 0xc4, 
+0xff, 0x83, 0xc9, 0xb8, 0x29, 0x12, 0x0f, 0xff, 
+0x64, 0x80, 0xfd, 0x84, 0x63, 0x01, 0xdf, 0xf0, 
+0x50, 0x44, 0x80, 0x14, 0x6f, 0x43, 0x79, 0xca, 
+0x5e, 0xc6, 0xc7, 0x22, 0x03, 0x8a, 0xa9, 0x74, 
+0xf2, 0xc8, 0x81, 0x06, 0xdb, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x31, 
+0x05, 0x35, 0x14, 0xcc, 0xb8, 0xe4, 0xdd, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x00, 0x01, 0xd4, 0x48, 0xc0, 
+0x00, 0x01, 0x60, 0x17, 0x8c, 0x06, 0xa0, 0x0a, 
+0x0c, 0x0c, 0x30, 0x1d, 0xcc, 0x16, 0xa0, 0x43, 
+0x8c, 0x34, 0xf0, 0xd6, 0xcd, 0x5c, 0x66, 0x7a, 
+0x4d, 0x54, 0x10, 0xda, 0x4c, 0x35, 0x00, 0x53, 
+0x8e, 0xe3, 0x03, 0x35, 0x4b, 0x64, 0xcf, 0xcc, 
+0xe3, 0x38, 0xdb, 0xcc, 0x7e, 0x6d, 0x00, 0x00, 
+0x19, 0x5b, 0xb1, 0x0d, 0xca, 0x25, 0x96, 0xec, 
+0x76, 0xbe, 0x9f, 0xfc, 0x62, 0x62, 0xda, 0x1f, 
+0x51, 0xb2, 0x66, 0x34, 0x90, 0x86, 0x31, 0x17, 
+0xe6, 0x3c, 0xa6, 0xc6, 0x63, 0x4b, 0xe6, 0x0e, 
+0x98, 0xe9, 0x06, 0x64, 0x77, 0x0c, 0xc6, 0x61, 
+0xa8, 0xe5, 0x06, 0x0c, 0x70, 0x44, 0xe6, 0x00, 
+0x58, 0x19, 0x81, 0xc0, 0x7c, 0x9b, 0x5c, 0xa4, 
+0x70, 0x46, 0x29, 0xab, 0x06, 0xff, 0xfb, 0x92, 
+0xc4, 0xff, 0x83, 0xca, 0x3c, 0x29, 0x10, 0x0f, 
+0xff, 0x84, 0x80, 0xfb, 0x84, 0x63, 0x01, 0xdf, 
+0xf0, 0x50, 0x61, 0x84, 0x65, 0x22, 0xf3, 0x4e, 
+0xe6, 0x59, 0x31, 0x05, 0x35, 0x14, 0xcc, 0xb8, 
+0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x81, 0xc8, 
+0x00, 0x00, 0x01, 0x80, 0x95, 0x30, 0x25, 0xc0, 
+0x33, 0x30, 0x42, 0x00, 0x94, 0x30, 0x79, 0xc1, 
+0x4d, 0x31, 0x17, 0x84, 0x14, 0x37, 0x27, 0x5f, 
+0x4e, 0x36, 0xfa, 0x84, 0x2a, 0x31, 0x17, 0xc1, 
+0xa7, 0x30, 0x79, 0x81, 0x52, 0x30, 0x37, 0x81, 
+0x20, 0x03, 0x52, 0xc6, 0x40, 0xd2, 0x1e, 0xa0, 
+0x32, 0x82, 0x58, 0x0c, 0x0a, 0x09, 0x0f, 0x40, 
+0x72, 0xc8, 0x01, 0x36, 0x5f, 0x34, 0x7f, 0xeb, 
+0xff, 0xd1, 0xcd, 0xeb, 0xce, 0xdb, 0xf8, 0x25, 
+0x73, 0xcd, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xfd, 0x26, 0x33, 0x10, 0x66, 0x2f, 0x98, 0x06, 
+0x38, 0x27, 0x66, 0x5b, 0xcc, 0xc6, 0x0d, 0x60, 
+0xeb, 0xe6, 0x5d, 0x0f, 0x20, 0xe6, 0x5a, 0x60, 
+0xe7, 0xe6, 0x0b, 0x48, 0x46, 0x05, 0x40, 0xff, 
+0xfb, 0x92, 0xc4, 0xff, 0x82, 0xc8, 0xec, 0x53, 
+0x1d, 0x4f, 0xf0, 0x47, 0x20, 0xc9, 0x84, 0xa3, 
+0x41, 0xdf, 0xf0, 0x55, 0x35, 0xc5, 0x81, 0x07, 
+0x36, 0xd1, 0x24, 0xe1, 0x2b, 0x43, 0x57, 0x8b, 
+0x03, 0x88, 0xaa, 0x49, 0xe5, 0x9e, 0xc0, 0x23, 
+0x5a, 0x62, 0x0a, 0x6a, 0x29, 0x99, 0x71, 0xc9, 
+0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 
+0x33, 0xc0, 0x30, 0x30, 0x5d, 0x00, 0x7a, 0x30, 
+0x9b, 0x41, 0x47, 0x31, 0x14, 0x82, 0xbe, 0x32, 
+0x71, 0x48, 0x5b, 0x3f, 0xcb, 0xbf, 0x1f, 0x3f, 
+0x6a, 0x48, 0x8d, 0x32, 0x6f, 0x83, 0x8a, 0x31, 
+0x12, 0x42, 0xf5, 0x30, 0x7f, 0xc2, 0x99, 0x31, 
+0x76, 0x28, 0xc3, 0x14, 0x14, 0x5b, 0x30, 0xc3, 
+0x17, 0x13, 0x02, 0x80, 0x36, 0x04, 0x80, 0x4a, 
+0x54, 0x30, 0x37, 0x02, 0x1c, 0x9f, 0xbd, 0xdd, 
+0xef, 0xbd, 0xff, 0xb9, 0xff, 0x7d, 0x7a, 0xb2, 
+0xd3, 0xfb, 0xfa, 0x5c, 0x1e, 0xe6, 0x0d, 0xd5, 
+0xd8, 0x79, 0xbe, 0x86, 0xd3, 0xdd, 0xd2, 0x8f, 
+0xf4, 0x6d, 0x65, 0xb9, 0x45, 0x76, 0xbb, 0x47, 
+0xec, 0x6a, 0x3e, 0x1b, 0xa4, 0xc6, 0x32, 0x08, 
+0xc5, 0x83, 0x04, 0xc6, 0x74, 0xf0, 0xca, 0x49, 
+0xb4, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x82, 0xca, 
+0x8c, 0x7b, 0x18, 0xef, 0xd4, 0x49, 0x40, 0xc9, 
+0x04, 0xa3, 0x41, 0xdf, 0xf0, 0x54, 0xc1, 0x87, 
+0x1d, 0xc8, 0xca, 0xaa, 0xe6, 0x50, 0xca, 0x5b, 
+0x1d, 0x48, 0xc1, 0x3e, 0x08, 0xec, 0xc0, 0x08, 
+0x03, 0x80, 0xc0, 0x8a, 0x00, 0x08, 0xdb, 0xe3, 
+0xc3, 0x85, 0x28, 0xcd, 0x60, 0x27, 0x12, 0x25, 
+0x2a, 0x17, 0x9a, 0x8b, 0x32, 0xc9, 0x88, 0x29, 
+0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xf5, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x30, 0x36, 0x00, 0x43, 0x30, 0x5f, 0x40, 
+0x63, 0x30, 0x9d, 0x01, 0x24, 0x31, 0x17, 0x42, 
+0x81, 0x32, 0x76, 0x87, 0xa2, 0x3f, 0xf0, 0xf9, 
+0x9c, 0x3f, 0x8e, 0x07, 0xda, 0x32, 0x74, 0x43, 
+0x57, 0x31, 0x12, 0x02, 0xe4, 0x30, 0x7c, 0x82, 
+0x98, 0x30, 0x58, 0x42, 0x91, 0x30, 0x49, 0x84, 
+0x66, 0x30, 0x2b, 0x01, 0x72, 0x30, 0x08, 0xc0, 
+0x39, 0x06, 0x00, 0x10, 0x03, 0xbc, 0x26, 0x82, 
+0x4e, 0x3d, 0xca, 0x07, 0xda, 0xa6, 0xe7, 0x6a, 
+0xea, 0x07, 0xbb, 0xc6, 0x75, 0x31, 0x3d, 0x16, 
+0xbb, 0xdb, 0xff, 0xfd, 0x3f, 0x99, 0xdf, 0x2d, 
+0xf6, 0x3f, 0xd2, 0xad, 0xfd, 0x33, 0xaf, 0x8e, 
+0xbb, 0x51, 0x8c, 0x04, 0x19, 0x8a, 0x66, 0x11, 
+0x8b, 0x89, 0xf9, 0x92, 0x73, 0x91, 0x82, 0xb8, 
+0x3c, 0x19, 0x93, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
+0x83, 0xcc, 0xb8, 0x7b, 0x0c, 0x0f, 0xf8, 0x49, 
+0x40, 0xce, 0x84, 0xa3, 0x41, 0xdf, 0xf0, 0x55, 
+0x53, 0xd0, 0xa9, 0x92, 0xbc, 0x3b, 0x29, 0x82, 
+0x26, 0x12, 0x11, 0x80, 0x4a, 0x07, 0x59, 0x81, 
+0x22, 0x00, 0x89, 0xb8, 0x86, 0x67, 0x0f, 0x48, 
+0x1a, 0xcc, 0x40, 0x24, 0x49, 0x54, 0x4f, 0x6c, 
+0x9f, 0x00, 0x8d, 0x7f, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xa6, 
+0x20, 0xa6, 0xa2, 0x99, 0x97, 0x1c, 0x9b, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0x00, 0x00, 0xd4, 0x49, 0x00, 
+0x00, 0x03, 0x01, 0x24, 0x01, 0x03, 0x02, 0x28, 
+0x00, 0xa3, 0x03, 0xbc, 0x05, 0x73, 0x06, 0xd0, 
+0x0d, 0x63, 0x0f, 0xbc, 0x2b, 0x53, 0x67, 0x39, 
+0x4c, 0xf3, 0x64, 0xbc, 0x2c, 0xd3, 0x0f, 0xa0, 
+0x13, 0x23, 0xd3, 0xc4, 0x4d, 0x66, 0xf9, 0x33, 
+0xa3, 0xe0, 0xcb, 0x3b, 0x73, 0x16, 0xa1, 0x41, 
+0x00, 0x46, 0x47, 0x00, 0x4a, 0xea, 0x46, 0x27, 
+0xef, 0x76, 0xbe, 0x9f, 0xe8, 0xea, 0x80, 0xd9, 
+0xfc, 0xd1, 0x76, 0xff, 0xa6, 0xef, 0x83, 0x46, 
+0x2f, 0x90, 0x06, 0x27, 0x18, 0x66, 0x29, 0xa8, 
+0x46, 0x40, 0x4e, 0xe6, 0x09, 0x98, 0xf2, 0x46, 
+0x44, 0xd7, 0x50, 0x46, 0x42, 0xb8, 0xee, 0x86, 
+0x07, 0x20, 0x49, 0x66, 0x01, 0xd0, 0x1e, 0x46, 
+0x04, 0xb0, 0x03, 0xc6, 0xe7, 0xff, 0xfb, 0x92, 
+0xc4, 0xff, 0x83, 0xcc, 0x14, 0x3d, 0x0c, 0x0f, 
+0xfd, 0xa4, 0xc1, 0x02, 0x04, 0xa3, 0x41, 0xdf, 
+0xf0, 0x50, 0x12, 0x1c, 0x40, 0xfe, 0x6b, 0x40, 
+0xd8, 0xb1, 0x29, 0x50, 0xbd, 0xd2, 0x60, 0x7d, 
+0x9f, 0xf4, 0x26, 0x20, 0xa6, 0xa2, 0x99, 0x97, 
+0x1c, 0x9b, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 0x32, 0x80, 
+0x57, 0x30, 0x55, 0xc0, 0x21, 0x30, 0x8c, 0x00, 
+0xbe, 0x30, 0xf8, 0x41, 0xbd, 0x32, 0x30, 0x85, 
+0x58, 0x3e, 0x33, 0x68, 0x36, 0x3d, 0xdb, 0x05, 
+0x94, 0x32, 0x2c, 0xc2, 0x8d, 0x30, 0xee, 0x02, 
+0x66, 0x30, 0x67, 0x02, 0x3e, 0x30, 0x42, 0xc2, 
+0x43, 0x30, 0x32, 0x83, 0xe8, 0x33, 0x75, 0x20, 
+0xc1, 0xe2, 0xf1, 0x00, 0x11, 0x60, 0xda, 0x44, 
+0x07, 0x1b, 0x9c, 0xbf, 0xc5, 0x3a, 0x4d, 0xbe, 
+0x2d, 0xde, 0xae, 0xa6, 0xa7, 0xf7, 0x7b, 0xbf, 
+0xbb, 0xd5, 0xb4, 0xf3, 0x7f, 0xbe, 0xbf, 0xdf, 
+0xfe, 0xfe, 0x87, 0x1d, 0x75, 0xfe, 0xa3, 0x16, 
+0x88, 0x13, 0x12, 0x4c, 0x23, 0x12, 0x14, 0x53, 
+0x1b, 0x67, 0xa3, 0x04, 0x18, 0x79, 0xf3, 0x1d, 
+0xff, 0xad, 0xf3, 0x1d, 0x00, 0x78, 0x33, 0xff, 
+0xfb, 0x92, 0xc4, 0xff, 0x82, 0x49, 0x8c, 0x55, 
+0x1b, 0x4f, 0xf0, 0x47, 0x28, 0xd7, 0x04, 0x63, 
+0x41, 0xdf, 0xf0, 0x50, 0x02, 0xd4, 0x25, 0x23, 
+0x01, 0x44, 0x0f, 0xb3, 0x02, 0x74, 0x02, 0xd3, 
+0x75, 0x06, 0x4e, 0x26, 0x68, 0x35, 0xb8, 0x50, 
+0x68, 0x92, 0xab, 0x9e, 0xd9, 0x3d, 0x80, 0x8f, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0x5a, 0x62, 0x0a, 0x6a, 0x29, 
+0x99, 0x71, 0xc9, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 
+0x34, 0xc0, 0x64, 0x30, 0x57, 0x00, 0x00, 0x30, 
+0x8d, 0x40, 0x9b, 0x30, 0xf9, 0x01, 0x7e, 0x32, 
+0x33, 0xc4, 0x9f, 0x3e, 0x47, 0xa2, 0x9d, 0x3d, 
+0xee, 0xc4, 0xe1, 0x32, 0x2e, 0x82, 0x5c, 0x30, 
+0xed, 0x42, 0x55, 0x30, 0x64, 0xc2, 0x3d, 0x30, 
+0x3d, 0x82, 0x44, 0x30, 0x2b, 0xc3, 0xed, 0x32, 
+0xdd, 0x2c, 0xc1, 0x02, 0xe1, 0x50, 0x2a, 0xc0, 
+0x34, 0xb8, 0x02, 0x59, 0x3f, 0x79, 0xed, 0x96, 
+0x19, 0xe9, 0xfb, 0x79, 0x3f, 0xd7, 0xed, 0xff, 
+0x4f, 0xff, 0xfb, 0x4a, 0xec, 0xfb, 0x7d, 0xcf, 
+0xc9, 0x7e, 0x76, 0x8f, 0x93, 0xa0, 0xc5, 0x91, 
+0xf8, 0xc4, 0x23, 0x0c, 0xc3, 0xd5, 0x10, 0xc5, 
+0x69, 0xfc, 0xc0, 0xd7, 0x1e, 0xa0, 0xc6, 0x50, 
+0xec, 0xa8, 0xc6, 0x1b, 0x1e, 0x30, 0xc0, 0x7e, 
+0x09, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xcb, 
+0x30, 0x2d, 0x0e, 0x0f, 0xff, 0x84, 0x81, 0x00, 
+0x84, 0xa3, 0x41, 0xdf, 0xf0, 0x50, 0x64, 0xc0, 
+0x64, 0x04, 0x10, 0xc0, 0xa2, 0x00, 0xe0, 0xdd, 
+0xa0, 0x83, 0x8a, 0x15, 0x4d, 0x6c, 0x0d, 0x1a, 
+0x27, 0x2a, 0xd7, 0xba, 0x4d, 0x6c, 0xb2, 0x62, 
+0x0a, 0x6a, 0x29, 0x99, 0x71, 0xc9, 0xbd, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x30, 0x36, 0x80, 0x71, 0x08, 0x0b, 0x08, 
+0xc2, 0x38, 0x01, 0xd8, 0xc3, 0xeb, 0x04, 0xf4, 
+0xc8, 0xd8, 0x0f, 0x60, 0xf9, 0x5f, 0x72, 0x98, 
+0xf7, 0xf8, 0x10, 0x88, 0xc8, 0xbf, 0x08, 0xa4, 
+0xc3, 0xb0, 0x09, 0x08, 0xc1, 0x86, 0x08, 0xe0, 
+0xc0, 0xe1, 0x09, 0x1c, 0xc0, 0x92, 0x0f, 0xc8, 
+0xc8, 0xd4, 0xc3, 0x01, 0x8b, 0xc6, 0x00, 0x8b, 
+0x2d, 0xb8, 0x40, 0x72, 0xf9, 0xcb, 0xfc, 0x53, 
+0xa4, 0xfe, 0x12, 0xf5, 0x75, 0x31, 0xbf, 0x14, 
+0xfb, 0xbf, 0xff, 0xde, 0xdf, 0xef, 0xfe, 0x97, 
+0xfa, 0x91, 0xbf, 0xa7, 0x5d, 0xee, 0xea, 0x31, 
+0x50, 0x7f, 0x30, 0xf4, 0xc2, 0x30, 0xc1, 0x47, 
+0x31, 0x06, 0x82, 0x30, 0x28, 0x87, 0xb3, 0x31, 
+0x43, 0xfb, 0x65, 0x31, 0x37, 0x87, 0x97, 0x30, 
+0x10, 0xc2, 0x5e, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
+0x83, 0xca, 0xd8, 0x2b, 0x0e, 0x0f, 0xff, 0x84, 
+0x80, 0xcf, 0x84, 0xa3, 0x41, 0xdf, 0xf0, 0x55, 
+0x30, 0x1e, 0x41, 0x0d, 0x30, 0x2a, 0x40, 0x45, 
+0x07, 0x77, 0x4e, 0x2e, 0x3c, 0x35, 0xb8, 0x10, 
+0x78, 0x9a, 0xab, 0x9f, 0x29, 0x3d, 0x80, 0x8f, 
+0xb1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0x5a, 0x62, 0x0a, 0x6a, 
+0x29, 0x99, 0x71, 0xc9, 0xba, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0x30, 0x38, 0x40, 0x7e, 0x30, 
+0x59, 0x00, 0x19, 0x30, 0x8f, 0x40, 0x4d, 0x30, 
+0xfb, 0x00, 0xf4, 0x32, 0x38, 0x43, 0x05, 0x3e, 
+0x63, 0x96, 0x37, 0x3e, 0x09, 0xc3, 0x59, 0x32, 
+0x30, 0x81, 0xf0, 0x30, 0xea, 0x42, 0x2f, 0x30, 
+0x5e, 0x42, 0x35, 0x33, 0x2a, 0x46, 0x31, 0xcf, 
+0xf5, 0x30, 0xbd, 0x4d, 0x04, 0x06, 0x03, 0xa0, 
+0x2a, 0xc8, 0x6e, 0x71, 0xc9, 0x64, 0xfd, 0xee, 
+0xfe, 0xff, 0xff, 0xf2, 0xe7, 0xff, 0xdf, 0xff, 
+0x57, 0xfc, 0x1e, 0xfa, 0x75, 0xfb, 0x3f, 0xff, 
+0x76, 0x8f, 0xf4, 0x7d, 0xbf, 0xde, 0xdd, 0x0e, 
+0xf6, 0xe8, 0x4f, 0x93, 0xa0, 0x12, 0x28, 0x0c, 
+0x3c, 0x80, 0xc1, 0x0f, 0x40, 0xae, 0x40, 0x0f, 
+0x33, 0x00, 0x64, 0x30, 0xa3, 0x05, 0xa1, 0x7e, 
+0x83, 0x05, 0x64, 0x2f, 0xe2, 0xff, 0xfb, 0x92, 
+0xc4, 0xff, 0x83, 0xca, 0xc0, 0x2d, 0x0e, 0x0f, 
+0xff, 0x84, 0x81, 0x02, 0x84, 0xa3, 0x41, 0xdf, 
+0xf0, 0x50, 0x00, 0x39, 0x4c, 0x02, 0x60, 0x17, 
+0x0c, 0x03, 0x40, 0x03, 0x8a, 0x51, 0x81, 0xde, 
+0x8d, 0x71, 0x46, 0x28, 0x3a, 0xf9, 0x91, 0x6f, 
+0x6b, 0xbd, 0xde, 0xa4, 0xc4, 0x14, 0xd4, 0x53, 
+0x32, 0xe3, 0x93, 0x7a, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x3a, 0x00, 
+0x8b, 0x30, 0x5a, 0x40, 0x32, 0x30, 0x8f, 0x80, 
+0x1e, 0x30, 0xfc, 0x40, 0xa7, 0x32, 0x39, 0x02, 
+0x1a, 0x3e, 0x6b, 0xcf, 0x0a, 0x3e, 0x11, 0x82, 
+0x7c, 0x32, 0x30, 0xc1, 0xb9, 0x30, 0xe8, 0x82, 
+0x1a, 0x30, 0x5b, 0x02, 0x2e, 0x30, 0x2c, 0xc2, 
+0x47, 0x30, 0x14, 0x03, 0xf6, 0x30, 0xa5, 0x38, 
+0x42, 0x31, 0x20, 0x02, 0x2d, 0xb7, 0x42, 0x0b, 
+0x97, 0xce, 0x5f, 0x30, 0xc9, 0x57, 0xf9, 0x5f, 
+0xa3, 0x90, 0xba, 0x9d, 0x5f, 0x6f, 0xf4, 0x68, 
+0xd9, 0xfe, 0x8b, 0x4b, 0x6c, 0xd9, 0xa7, 0xec, 
+0x75, 0x3e, 0xee, 0x96, 0x7b, 0x28, 0x31, 0x30, 
+0x7b, 0x30, 0xbc, 0xc2, 0x30, 0x61, 0x47, 0x30, 
+0x36, 0x84, 0x30, 0x0a, 0x07, 0xbb, 0x30, 0x85, 
+0xfb, 0xa9, 0x30, 0x7d, 0x87, 0xa3, 0x30, 0xff, 
+0xfb, 0x92, 0xc4, 0xff, 0x82, 0x4b, 0x38, 0x7b, 
+0x0e, 0x0f, 0xf4, 0x49, 0x40, 0xc7, 0x04, 0x25, 
+0x25, 0xbf, 0xe8, 0x56, 0x0d, 0x82, 0x66, 0x30, 
+0x26, 0xc1, 0x1b, 0x30, 0x2c, 0xc0, 0x59, 0x01, 
+0x79, 0x0e, 0x32, 0x06, 0x0e, 0xb9, 0x13, 0x13, 
+0x55, 0xa9, 0xf2, 0x93, 0xd8, 0x08, 0xfb, 0x3f, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0x5a, 0x62, 0x0a, 0x6a, 0x29, 0x99, 
+0x71, 0xc9, 0xbd, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 
+0x3b, 0xc0, 0x96, 0x30, 0x5b, 0x00, 0x4d, 0x0e, 
+0x12, 0x08, 0xc3, 0xf0, 0x01, 0x30, 0xc8, 0xe7, 
+0x04, 0x24, 0xf9, 0xbe, 0x19, 0x74, 0xf8, 0x55, 
+0x06, 0x0c, 0xc8, 0xc0, 0x05, 0xf0, 0xc3, 0x99, 
+0x08, 0x1c, 0xc1, 0x5f, 0x08, 0xa4, 0xc0, 0x98, 
+0x09, 0x10, 0xc0, 0x2b, 0x0f, 0xe4, 0x43, 0x4f, 
+0x20, 0x18, 0x16, 0x00, 0xaa, 0x38, 0xdd, 0xe3, 
+0x92, 0xca, 0x3b, 0xcf, 0x6d, 0x27, 0x7d, 0x2d, 
+0xd1, 0x4f, 0x6d, 0xff, 0xf7, 0x23, 0xfa, 0xaa, 
+0xe9, 0xff, 0x4d, 0x88, 0xaf, 0xb7, 0x47, 0xdd, 
+0xa3, 0xed, 0x4d, 0x1f, 0x26, 0x60, 0x25, 0x80, 
+0xf0, 0x60, 0x13, 0x01, 0x82, 0x60, 0x04, 0x82, 
+0x8c, 0x58, 0x0a, 0x1c, 0xc0, 0x08, 0x1e, 0xf0, 
+0xc0, 0x27, 0xee, 0xc0, 0xc1, 0x21, 0xe9, 0x0c, 
+0x1d, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xcb, 
+0x20, 0x2b, 0x0e, 0x0f, 0xff, 0x84, 0x80, 0xfe, 
+0x84, 0xa3, 0x41, 0xdf, 0xf0, 0x50, 0xc9, 0xac, 
+0xc2, 0xb0, 0x48, 0x0c, 0x2e, 0x01, 0x88, 0xc3, 
+0xd4, 0x03, 0xc5, 0x88, 0xc0, 0xa5, 0xc4, 0xa1, 
+0x39, 0x46, 0x1e, 0xf9, 0x05, 0xba, 0xec, 0xb2, 
+0xb4, 0xc4, 0x14, 0xd4, 0x53, 0x32, 0xe3, 0x93, 
+0x75, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x30, 0x3d, 0x00, 0xa1, 0x30, 0x5c, 0x40, 
+0x62, 0x30, 0x90, 0x00, 0x2f, 0x30, 0xfc, 0x40, 
+0x0c, 0x32, 0x39, 0x00, 0x7b, 0x3e, 0x6f, 0xc6, 
+0xe1, 0x3e, 0x14, 0x80, 0x38, 0x32, 0x2e, 0xc1, 
+0x3d, 0x30, 0xe3, 0x81, 0xf0, 0x30, 0x53, 0x82, 
+0x22, 0x30, 0x1f, 0xc2, 0x45, 0x04, 0x07, 0xf0, 
+0x60, 0x1a, 0x70, 0xc0, 0xc4, 0x94, 0x08, 0xa3, 
+0x6f, 0x04, 0x96, 0x5f, 0x45, 0x7d, 0xcc, 0xa0, 
+0x7f, 0xa3, 0xa6, 0x8e, 0xcb, 0xbf, 0xef, 0x4f, 
+0xf5, 0x54, 0x9d, 0x1f, 0xe8, 0x8a, 0x16, 0xdb, 
+0xf2, 0x3f, 0x7e, 0x9f, 0xd1, 0x4f, 0xc8, 0x18, 
+0x8c, 0x3b, 0x98, 0x42, 0x60, 0x03, 0x14, 0x73, 
+0x03, 0x28, 0x63, 0x01, 0x4c, 0x7b, 0xd3, 0x09, 
+0x23, 0xba, 0x93, 0x09, 0x34, 0x7a, 0x53, 0x02, 
+0xb0, 0x26, 0xe3, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
+0x83, 0xca, 0xbc, 0x2b, 0x0e, 0x0f, 0xff, 0x84, 
+0x80, 0xda, 0x84, 0xe3, 0x41, 0xff, 0x6c, 0x94, 
+0x02, 0xec, 0x12, 0x73, 0x02, 0xf4, 0x06, 0xd3, 
+0x7b, 0x07, 0x0e, 0x32, 0x13, 0x12, 0xb9, 0x94, 
+0x13, 0x15, 0xad, 0xec, 0x91, 0xd8, 0x04, 0xfd, 
+0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xad, 0x31, 0x05, 0x35, 0x14, 
+0xcc, 0xb8, 0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x30, 0x3e, 0xc0, 0xac, 0x30, 
+0x5c, 0x80, 0x77, 0x30, 0x90, 0xc0, 0x5a, 0x30, 
+0xfc, 0x00, 0x77, 0x32, 0x38, 0xc1, 0xb0, 0x3e, 
+0x6b, 0x0f, 0x6e, 0x3e, 0x10, 0x41, 0x32, 0x32, 
+0x2d, 0x00, 0xfa, 0x30, 0xe1, 0x41, 0xd9, 0x30, 
+0x50, 0x42, 0x1d, 0x30, 0x18, 0x82, 0x42, 0x30, 
+0x03, 0x83, 0xf7, 0x30, 0xf5, 0x3c, 0x2e, 0x30, 
+0x20, 0x02, 0xa8, 0xf3, 0xd7, 0x24, 0x96, 0x51, 
+0xde, 0x37, 0x97, 0x09, 0x79, 0x76, 0xfa, 0x78, 
+0x9e, 0xfa, 0x35, 0x7f, 0xfd, 0x3a, 0x7e, 0xbf, 
+0xa6, 0x2e, 0x8d, 0x9f, 0x47, 0xef, 0xa3, 0xde, 
+0xde, 0xcf, 0x27, 0x49, 0x10, 0x61, 0xb1, 0xc1, 
+0x80, 0x8c, 0xa4, 0x8b, 0x63, 0x06, 0xdc, 0xcc, 
+0x04, 0x81, 0x23, 0x0c, 0x23, 0xd8, 0xd7, 0x0c, 
+0x23, 0x61, 0x1f, 0x8c, 0x07, 0xff, 0xfb, 0x92, 
+0xc4, 0xff, 0x83, 0xca, 0xc4, 0x2b, 0x0e, 0x0f, 
+0xff, 0x84, 0x80, 0xfe, 0x84, 0xa3, 0x41, 0xdf, 
+0xf0, 0x50, 0x90, 0x59, 0xcc, 0x06, 0xc0, 0x29, 
+0x8c, 0x06, 0x60, 0x0e, 0x8e, 0x1c, 0x34, 0xe6, 
+0x83, 0x84, 0xb0, 0x0a, 0x05, 0xdc, 0xc9, 0x1d, 
+0x80, 0x7c, 0xe7, 0xfd, 0x29, 0x88, 0x29, 0xa8, 
+0xa6, 0x65, 0xc7, 0x26, 0xea, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x40, 0x00, 
+0xb7, 0x30, 0x5d, 0x40, 0x8a, 0x30, 0x90, 0x80, 
+0x83, 0x30, 0xfb, 0xc0, 0xca, 0x32, 0x37, 0x02, 
+0xa9, 0x3e, 0x62, 0xd6, 0x8f, 0x3e, 0x07, 0x82, 
+0x39, 0x32, 0x2a, 0xc0, 0xaf, 0x30, 0xde, 0x01, 
+0xc0, 0x30, 0x4c, 0x02, 0x14, 0x30, 0x11, 0x42, 
+0x3f, 0x30, 0x0e, 0xc3, 0xf4, 0x31, 0xcd, 0x30, 
+0x00, 0x31, 0x1d, 0x02, 0x2d, 0x97, 0xa2, 0x4b, 
+0x2f, 0xa2, 0xbe, 0xec, 0xa3, 0xfd, 0x0c, 0xf6, 
+0xfa, 0xb4, 0x5a, 0xbf, 0x67, 0xff, 0xef, 0xd3, 
+0xfe, 0x9f, 0xf6, 0x7b, 0xba, 0x5f, 0xfe, 0x8f, 
+0x21, 0x49, 0x87, 0xc3, 0x89, 0x82, 0x25, 0xe0, 
+0x15, 0x45, 0x31, 0x02, 0x82, 0x30, 0x31, 0x47, 
+0xb5, 0x31, 0x4d, 0x3b, 0x63, 0x31, 0x48, 0x47, 
+0x9f, 0x30, 0x43, 0x02, 0x70, 0x30, 0x36, 0xff, 
+0xfb, 0x92, 0xc4, 0xff, 0x82, 0x4b, 0x14, 0x2b, 
+0x0e, 0x0f, 0xff, 0x84, 0x80, 0xcf, 0x04, 0x64, 
+0x55, 0xcf, 0xec, 0x56, 0x41, 0x33, 0x30, 0x31, 
+0x40, 0x7f, 0x37, 0xc0, 0xd8, 0xe3, 0x24, 0x53, 
+0x5b, 0x80, 0xc8, 0x89, 0x8a, 0xbd, 0xec, 0x91, 
+0xce, 0x02, 0x7e, 0xcf, 0xff, 0xd7, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x69, 
+0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xf5, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 
+0x41, 0x40, 0xc0, 0x30, 0x5d, 0x80, 0x9f, 0x30, 
+0x90, 0x40, 0xa6, 0x30, 0xfa, 0x81, 0x17, 0x32, 
+0x34, 0xc3, 0x84, 0x3e, 0x56, 0x1c, 0xf8, 0x3d, 
+0xfb, 0x43, 0x1c, 0x32, 0x27, 0x00, 0x5a, 0x30, 
+0xda, 0xc1, 0xa9, 0x30, 0x48, 0x42, 0x0d, 0x30, 
+0x08, 0x82, 0x3a, 0x30, 0x17, 0x83, 0xf1, 0x32, 
+0x75, 0x34, 0xc0, 0xa2, 0xe1, 0x40, 0x2a, 0xda, 
+0x7c, 0x66, 0xa7, 0x28, 0xef, 0x65, 0x7c, 0x4a, 
+0x73, 0xcf, 0xfa, 0xba, 0xed, 0xfb, 0x3e, 0xff, 
+0xfa, 0x35, 0xf7, 0x37, 0xfb, 0xbf, 0xa1, 0xdf, 
+0x4e, 0xee, 0x85, 0xbd, 0x7b, 0xfa, 0xcc, 0x39, 
+0x1b, 0x8c, 0x06, 0x2e, 0xcc, 0x0c, 0x50, 0x8c, 
+0x57, 0xa0, 0x4c, 0x0f, 0x41, 0xeb, 0x0c, 0x67, 
+0x5e, 0xc9, 0x8c, 0x65, 0x81, 0xe6, 0x0c, 0x13, 
+0x90, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xca, 
+0x94, 0x2b, 0x0e, 0x0f, 0xff, 0x84, 0x81, 0x03, 
+0x04, 0xa3, 0x41, 0xdf, 0xf0, 0x50, 0x9c, 0xcc, 
+0x0e, 0x60, 0x4e, 0x0c, 0x0c, 0x80, 0x21, 0x8d, 
+0xf2, 0x41, 0x38, 0xb1, 0x70, 0xd6, 0xc0, 0xa1, 
+0xe2, 0x5a, 0xac, 0x7b, 0xe4, 0x13, 0xe1, 0x89, 
+0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xea, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0x30, 0x42, 0x80, 0xcb, 0x30, 0x5e, 0x40, 
+0xb0, 0x30, 0x90, 0x00, 0xc9, 0x30, 0xf9, 0x41, 
+0x5a, 0x32, 0x32, 0x04, 0x4f, 0x3e, 0x45, 0xe2, 
+0xe9, 0x3d, 0xeb, 0x03, 0xed, 0x12, 0x44, 0x78, 
+0xc3, 0x5c, 0x06, 0x38, 0xc1, 0x10, 0x08, 0x08, 
+0x2a, 0x11, 0xb9, 0x80, 0xfe, 0x1f, 0x51, 0x98, 
+0xe9, 0x46, 0x0a, 0x17, 0x88, 0xc0, 0x8b, 0x25, 
+0xf0, 0x99, 0x9f, 0xa2, 0xbe, 0xe4, 0x4a, 0x1e, 
+0xf2, 0x4c, 0xd3, 0x6f, 0x0e, 0x6d, 0xeb, 0xf6, 
+0xff, 0xa3, 0xb3, 0xff, 0xda, 0x9a, 0xd9, 0xb3, 
+0xfb, 0xfa, 0x7f, 0x3f, 0x6f, 0xc8, 0x18, 0x68, 
+0x36, 0x81, 0x4b, 0x83, 0x06, 0xd4, 0x13, 0x1b, 
+0x27, 0xc3, 0x04, 0x8c, 0x7a, 0x33, 0x1e, 0x7b, 
+0xad, 0xb3, 0x1d, 0xec, 0x79, 0x13, 0x05, 0x80, 
+0x27, 0x23, 0x03, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
+0x83, 0xca, 0xe8, 0x2d, 0x0e, 0x0f, 0xff, 0x84, 
+0x80, 0xd0, 0x84, 0xa3, 0x41, 0xdf, 0xf0, 0x55, 
+0xd4, 0x13, 0xd3, 0x03, 0x2c, 0x08, 0xf3, 0x7c, 
+0x13, 0x0e, 0x2e, 0x71, 0x35, 0xa8, 0x4c, 0x68, 
+0x90, 0xab, 0xde, 0x49, 0x1c, 0xe0, 0x27, 0x5f, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xfd, 0x69, 0x88, 0x29, 0xa8, 0xa6, 
+0x65, 0xc7, 0x26, 0xf5, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x30, 0x43, 0xc0, 0xd4, 0x30, 
+0x5e, 0x00, 0xc3, 0x30, 0x8f, 0xc0, 0xe8, 0x30, 
+0xf8, 0x01, 0x9b, 0x32, 0x2e, 0xc5, 0x0c, 0x3e, 
+0x30, 0xa8, 0x7c, 0x3d, 0xd6, 0xc4, 0xac, 0x32, 
+0x1f, 0x00, 0x63, 0x30, 0xd3, 0xc1, 0x75, 0x30, 
+0x3f, 0xc1, 0xfb, 0x30, 0x03, 0x42, 0x32, 0x30, 
+0x27, 0x03, 0xe5, 0x33, 0xb5, 0x24, 0xc2, 0x22, 
+0xe1, 0x00, 0x15, 0x60, 0x9e, 0x99, 0xab, 0xd4, 
+0x77, 0x9e, 0x9a, 0xc3, 0x5e, 0xbe, 0x8b, 0x38, 
+0x4e, 0xe4, 0xfa, 0x7d, 0x3f, 0xd3, 0xfd, 0x65, 
+0x17, 0xfc, 0xae, 0xdd, 0xba, 0x3f, 0xd1, 0xe6, 
+0xc4, 0xe9, 0xac, 0x86, 0x01, 0x38, 0x0b, 0x02, 
+0x20, 0x27, 0x4c, 0x02, 0x00, 0x45, 0x0c, 0x06, 
+0xd0, 0x8a, 0x4c, 0x12, 0x01, 0xa9, 0x8c, 0x7a, 
+0x5c, 0xd6, 0x0d, 0xdf, 0x9a, 0xff, 0xfb, 0x92, 
+0xc4, 0xff, 0x83, 0xca, 0xa4, 0x2b, 0x0e, 0x0f, 
+0xff, 0x84, 0x81, 0x01, 0x04, 0xa3, 0x41, 0xdf, 
+0xf0, 0x50, 0x58, 0xc5, 0x54, 0x88, 0x4c, 0x37, 
+0x84, 0x58, 0xc2, 0xc0, 0x20, 0x0c, 0x35, 0xc1, 
+0x24, 0xc3, 0xb8, 0x1c, 0x0e, 0x68, 0x48, 0x68, 
+0xed, 0x6e, 0x40, 0xf3, 0x93, 0xf5, 0xce, 0x7f, 
+0xd2, 0x98, 0x82, 0x9a, 0x8a, 0x66, 0x5c, 0x72, 
+0x6e, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x44, 0x80, 
+0xdd, 0x30, 0x5e, 0x40, 0xd2, 0x30, 0x8e, 0x81, 
+0x09, 0x30, 0xf6, 0x41, 0xd6, 0x32, 0x2a, 0x85, 
+0xc1, 0x3e, 0x18, 0x6d, 0xc7, 0x3d, 0xbe, 0x05, 
+0x63, 0x32, 0x1a, 0x40, 0xb6, 0x30, 0xcf, 0x81, 
+0x58, 0x30, 0x3b, 0x01, 0xee, 0x30, 0x0c, 0x82, 
+0x2d, 0x30, 0x2e, 0xc3, 0xde, 0x30, 0x22, 0xc1, 
+0x46, 0x30, 0x05, 0x80, 0x2f, 0x0b, 0x80, 0x08, 
+0x0d, 0xd1, 0x64, 0x4d, 0x29, 0x94, 0x4f, 0xb6, 
+0x8f, 0x38, 0x1d, 0xf6, 0xf4, 0xdb, 0xbd, 0x97, 
+0xd9, 0xa3, 0xde, 0x8f, 0x56, 0xaa, 0xbf, 0xfc, 
+0xd5, 0x9e, 0xcb, 0x32, 0x7e, 0x73, 0xa7, 0xb3, 
+0xa1, 0xbf, 0x0e, 0x56, 0x60, 0x15, 0x00, 0xce, 
+0x54, 0x02, 0xd0, 0xc0, 0x35, 0x04, 0xf4, 0xc0, 
+0x92, 0x09, 0xd0, 0xc1, 0x77, 0x1e, 0x2c, 0xff, 
+0xfb, 0x92, 0xc4, 0xff, 0x82, 0xca, 0xf8, 0x2b, 
+0x0e, 0x0f, 0xff, 0x84, 0x80, 0xe4, 0x84, 0xe3, 
+0x95, 0xff, 0x6c, 0x94, 0xc9, 0xc4, 0xe8, 0x3c, 
+0xe6, 0x4d, 0xde, 0x4c, 0x6b, 0x89, 0xc0, 0xc4, 
+0x3c, 0x51, 0x4c, 0x34, 0x42, 0x7c, 0xc3, 0xe0, 
+0x18, 0x0c, 0x44, 0xc2, 0x5c, 0xec, 0xc8, 0x45, 
+0x92, 0x15, 0x1b, 0xc9, 0x17, 0x96, 0x54, 0xce, 
+0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xfa, 0xd3, 0x10, 0x53, 0x51, 
+0x4c, 0xcb, 0x8e, 0x4d, 0xea, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 
+0x50, 0x41, 0x0a, 0x30, 0x6c, 0x81, 0x07, 0x30, 
+0xa2, 0xc1, 0x50, 0x31, 0x17, 0x02, 0x5f, 0x32, 
+0x73, 0x47, 0x54, 0x3f, 0xec, 0xb9, 0xe4, 0x3f, 
+0x87, 0x46, 0xea, 0x32, 0x5f, 0x81, 0x29, 0x30, 
+0xe8, 0x41, 0x6d, 0x30, 0x3e, 0xc2, 0x2d, 0x30, 
+0x18, 0x42, 0x76, 0x30, 0x3d, 0x84, 0x63, 0x30, 
+0x2d, 0x01, 0x75, 0x30, 0x09, 0x40, 0x38, 0x06, 
+0x00, 0x12, 0x07, 0x61, 0x35, 0x27, 0x1e, 0x29, 
+0x1e, 0x7d, 0xf9, 0xd5, 0xa0, 0xdf, 0xd4, 0x8b, 
+0x3f, 0xda, 0xea, 0xfe, 0xb4, 0x9a, 0xdf, 0xdf, 
+0x5b, 0xff, 0xd7, 0xff, 0xff, 0xff, 0x55, 0xe8, 
+0xdf, 0xfe, 0xff, 0x2f, 0x93, 0xff, 0x4b, 0x7f, 
+0xed, 0x4f, 0x1b, 0xd0, 0xb3, 0xee, 0xaa, 0xfd, 
+0x06, 0x01, 0x38, 0x0c, 0x42, 0x10, 0x2c, 0xcc, 
+0x04, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xcb, 
+0xdc, 0x3b, 0x0e, 0x0f, 0xfd, 0xa4, 0xc1, 0x0d, 
+0x85, 0x23, 0x41, 0xff, 0x6c, 0x90, 0x00, 0x4e, 
+0x0c, 0x0a, 0x50, 0x9b, 0xcc, 0x19, 0xe1, 0xde, 
+0x0c, 0xac, 0x7e, 0x63, 0x8e, 0xa3, 0x1d, 0xa0, 
+0xc7, 0x4c, 0x9b, 0x4c, 0x46, 0x85, 0x20, 0xc3, 
+0x48, 0x29, 0x8c, 0x3d, 0xc1, 0xac, 0xc4, 0x40, 
+0x2a, 0x0e, 0xc0, 0x98, 0x49, 0x2d, 0x50, 0x3c, 
+0xf1, 0x49, 0x7d, 0x7c, 0x2a, 0x4c, 0x41, 0x4d, 
+0x45, 0x33, 0x2e, 0x39, 0x37, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0x30, 0x51, 0x01, 0x13, 0x30, 0x6c, 0x41, 
+0x18, 0x30, 0xa1, 0x01, 0x71, 0x31, 0x14, 0xc2, 
+0x9c, 0x32, 0x6d, 0x08, 0x11, 0x3f, 0xc7, 0x7f, 
+0x65, 0x3f, 0x62, 0x07, 0xa7, 0x32, 0x58, 0xc1, 
+0x74, 0x30, 0xe3, 0x01, 0x4a, 0x30, 0x39, 0x02, 
+0x1e, 0x30, 0x20, 0x82, 0x6f, 0x30, 0x45, 0x44, 
+0x58, 0x30, 0x32, 0x41, 0x70, 0x30, 0x0a, 0x80, 
+0x37, 0x04, 0x80, 0x10, 0x06, 0x48, 0x93, 0x13, 
+0x4b, 0x4b, 0x0f, 0xb6, 0xcd, 0x9c, 0x52, 0x76, 
+0xed, 0xad, 0xf5, 0x7f, 0x6f, 0x55, 0xbd, 0xfd, 
+0x7e, 0x9f, 0xed, 0x5f, 0xfc, 0xfd, 0xed, 0xf9, 
+0xff, 0xd9, 0x5f, 0xf4, 0xff, 0xd3, 0xaa, 0xd3, 
+0xff, 0x7a, 0x7e, 0xb7, 0xfc, 0x7f, 0xb1, 0x96, 
+0xfc, 0x39, 0x41, 0x80, 0x40, 0x02, 0xf8, 0x00, 
+0x0a, 0xe3, 0x01, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
+0x83, 0xcd, 0x2d, 0x61, 0x0c, 0x0f, 0xb4, 0x4d, 
+0xc0, 0xde, 0x85, 0x23, 0x41, 0xff, 0x6c, 0x94, 
+0x2c, 0x13, 0x53, 0x02, 0xd8, 0x26, 0x83, 0x07, 
+0x14, 0x76, 0x73, 0x2e, 0xf3, 0x8f, 0xf3, 0xb7, 
+0xd7, 0x59, 0x31, 0xf6, 0x26, 0xa3, 0x12, 0x71, 
+0x4b, 0x30, 0xd7, 0x0a, 0xd3, 0x0f, 0x60, 0x74, 
+0x31, 0x0d, 0x0b, 0xb3, 0xaf, 0x2d, 0x0e, 0x44, 
+0x52, 0x6f, 0x24, 0x5e, 0x59, 0x53, 0x3a, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xeb, 0x4c, 0x41, 0x4d, 0x45, 0x33, 
+0x2e, 0x39, 0x37, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0x30, 0x47, 0x40, 0xf6, 0x30, 
+0x5e, 0x01, 0x03, 0x30, 0x8b, 0xc1, 0x5c, 0x30, 
+0xef, 0x02, 0x7d, 0x32, 0x1a, 0xc7, 0xae, 0x3d, 
+0xb5, 0x3c, 0x4a, 0x3d, 0x5d, 0x47, 0x52, 0x32, 
+0x07, 0x81, 0x83, 0x30, 0xc1, 0xc0, 0xff, 0x30, 
+0x2c, 0x41, 0xcd, 0x30, 0x22, 0xc2, 0x18, 0x30, 
+0x42, 0x03, 0xc3, 0x35, 0xe4, 0xf4, 0xc5, 0x22, 
+0xc0, 0x40, 0x15, 0x5b, 0xa0, 0x1a, 0xd6, 0x2d, 
+0x19, 0xed, 0x08, 0xf5, 0x18, 0xf4, 0xf5, 0xb5, 
+0x17, 0xdb, 0x6b, 0xfd, 0xdf, 0xff, 0xed, 0xf5, 
+0x6e, 0x3b, 0x4f, 0xd0, 0xef, 0xa3, 0x75, 0x14, 
+0xad, 0xff, 0xa1, 0x06, 0x00, 0xd8, 0x0b, 0x46, 
+0x00, 0x48, 0x15, 0x66, 0x02, 0xb0, 0x26, 0x06, 
+0x06, 0x38, 0x4c, 0x66, 0x0f, 0x40, 0xea, 0x46, 
+0x65, 0x4f, 0x0b, 0x87, 0x8c, 0xff, 0xfb, 0x92, 
+0xc4, 0xff, 0x83, 0xcd, 0x35, 0x5f, 0x0c, 0x0f, 
+0xb4, 0x4d, 0xc1, 0x0d, 0x85, 0x23, 0x41, 0xff, 
+0x6c, 0x90, 0x4e, 0x88, 0x64, 0x32, 0x4c, 0xe6, 
+0x26, 0x02, 0x9c, 0x61, 0xb0, 0x16, 0x86, 0x1e, 
+0xa0, 0xfa, 0x62, 0x14, 0x19, 0x47, 0x58, 0x64, 
+0x1c, 0x8e, 0xa4, 0x1e, 0x78, 0xa4, 0xbe, 0xbe, 
+0x15, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xd4, 0x98, 0x82, 0x9a, 
+0x8a, 0x66, 0x5c, 0x72, 0x6f, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x01, 0xc9, 
+0xd9, 0x00, 0x00, 0x03, 0x01, 0x48, 0x04, 0x73, 
+0x01, 0xc4, 0x04, 0xc3, 0x02, 0xc0, 0x07, 0x13, 
+0x04, 0xec, 0x0e, 0x03, 0x0b, 0x70, 0x2d, 0x93, 
+0x4c, 0x55, 0x6d, 0x13, 0x4a, 0x68, 0x2b, 0x93, 
+0x0b, 0x04, 0x08, 0xa3, 0x7c, 0x0e, 0x8c, 0x48, 
+0x8a, 0x31, 0x32, 0xa4, 0xca, 0x73, 0xc3, 0x1a, 
+0x96, 0x8b, 0x4a, 0xe1, 0x43, 0x35, 0xb7, 0xdb, 
+0x3d, 0xff, 0xd2, 0xfe, 0xb4, 0xc7, 0x71, 0xa7, 
+0x33, 0x59, 0x01, 0x8e, 0xac, 0xc0, 0x1c, 0x01, 
+0xa4, 0xc0, 0x16, 0x03, 0x08, 0xc0, 0x71, 0x05, 
+0x6c, 0xc0, 0xf8, 0x0a, 0xc8, 0xc2, 0x59, 0x21, 
+0x04, 0xcf, 0x70, 0xfd, 0xa4, 0xfc, 0x6e, 0x0c, 
+0xcc, 0xa2, 0x8a, 0xe8, 0xc5, 0xb4, 0x60, 0xcc, 
+0x3f, 0x43, 0x64, 0xc4, 0x60, 0x27, 0x0c, 0xff, 
+0xfb, 0x92, 0xc4, 0xff, 0x83, 0xcb, 0x0c, 0x29, 
+0x0e, 0x0f, 0xff, 0x84, 0x81, 0x12, 0x05, 0x23, 
+0x41, 0xff, 0x6c, 0x90, 0x4b, 0xc3, 0xfc, 0xf1, 
+0x50, 0xc2, 0x15, 0x12, 0xed, 0xd4, 0x8b, 0xc5, 
+0x2a, 0x67, 0x5f, 0xff, 0xfd, 0x7f, 0xff, 0xff, 
+0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xfd, 0x69, 
+0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xea, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 
+0x3e, 0xc0, 0xe0, 0x30, 0x51, 0x00, 0xf9, 0x30, 
+0x77, 0x41, 0x5a, 0x30, 0xcc, 0x02, 0x83, 0x31, 
+0xcc, 0x47, 0xbe, 0x3b, 0xbc, 0xbc, 0x98, 0x3b, 
+0x71, 0x47, 0x70, 0x31, 0xb9, 0x81, 0xb7, 0x30, 
+0xa0, 0x40, 0xa1, 0x30, 0x1c, 0x41, 0x7b, 0x30, 
+0x28, 0xc1, 0xc4, 0x30, 0x43, 0x03, 0x35, 0x35, 
+0xf4, 0x2c, 0xc5, 0x22, 0x22, 0xce, 0xae, 0x68, 
+0x67, 0x2b, 0x16, 0x9c, 0xfd, 0xae, 0xf3, 0x1e, 
+0xbe, 0xbf, 0xff, 0xff, 0xbf, 0xfd, 0xdf, 0xdf, 
+0xaf, 0xf7, 0x7d, 0x1b, 0xba, 0x2f, 0xd7, 0xd2, 
+0x83, 0x00, 0x54, 0x06, 0x23, 0x00, 0x84, 0x0b, 
+0xf3, 0x01, 0xf0, 0x15, 0x43, 0x04, 0x2c, 0x2a, 
+0x93, 0x09, 0xf8, 0x82, 0x43, 0x41, 0xaf, 0xe8, 
+0xc3, 0x40, 0x30, 0x81, 0x63, 0x0a, 0xbc, 0x2b, 
+0x53, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x82, 0x48, 
+0xf8, 0x55, 0x1f, 0x4f, 0xf0, 0x47, 0x21, 0x16, 
+0x85, 0x23, 0x01, 0xff, 0x6c, 0x90, 0x05, 0xd8, 
+0x18, 0x43, 0x03, 0xf0, 0x0d, 0xe3, 0x04, 0x5c, 
+0x0a, 0x73, 0x04, 0xa8, 0x10, 0xe3, 0xc2, 0x48, 
+0x07, 0x29, 0xa5, 0xc3, 0xaf, 0x0e, 0x45, 0xeb, 
+0x9c, 0xb2, 0xaf, 0xff, 0xec, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xcd, 0x29, 
+0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xf5, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x30, 0x36, 0x00, 0xc7, 0x30, 0x45, 0xc0, 
+0xe0, 0x30, 0x66, 0x81, 0x3f, 0x30, 0xaf, 0xc2, 
+0x56, 0x31, 0x8d, 0x07, 0x35, 0x3a, 0x27, 0xf8, 
+0x61, 0x39, 0xe6, 0x06, 0xf1, 0x31, 0x7c, 0x41, 
+0xa6, 0x30, 0x87, 0x00, 0x6c, 0x30, 0x13, 0x01, 
+0x3c, 0x30, 0x27, 0x01, 0x83, 0x30, 0x3e, 0xc2, 
+0xc0, 0x3a, 0xfe, 0x23, 0x22, 0x19, 0x2e, 0xf3, 
+0x29, 0x8d, 0x63, 0xdb, 0x2f, 0xec, 0x7f, 0x8e, 
+0xef, 0xe8, 0x57, 0xff, 0x4f, 0xff, 0xfd, 0x7f, 
+0xf7, 0xfa, 0xbf, 0xa3, 0xdf, 0xf5, 0xff, 0x49, 
+0x80, 0x1c, 0x02, 0xf9, 0x80, 0x50, 0x05, 0xd1, 
+0x81, 0x0e, 0x0a, 0x79, 0x82, 0x34, 0x14, 0xf1, 
+0x85, 0x4a, 0x40, 0x29, 0xa2, 0xb1, 0xec, 0xe9, 
+0xa1, 0xea, 0x3f, 0xc9, 0x85, 0xa0, 0x15, 0x71, 
+0x83, 0x06, 0x0c, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
+0x83, 0xca, 0x30, 0x29, 0x10, 0x0f, 0xff, 0x84, 
+0x81, 0x27, 0x84, 0xe3, 0x01, 0xff, 0xec, 0x90, 
+0x39, 0x81, 0xfe, 0x07, 0x29, 0x82, 0x24, 0x05, 
+0x71, 0x82, 0x4e, 0x09, 0x09, 0xdf, 0xa7, 0x83, 
+0x94, 0x12, 0xed, 0xd4, 0x8b, 0xc5, 0x2a, 0x67, 
+0x5e, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xdd, 0xff, 0xff, 0xff, 0xfd, 0x69, 0x88, 0x29, 
+0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xea, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0x30, 0x36, 0xc0, 0xcc, 0x30, 0x45, 
+0x00, 0xeb, 0x30, 0x65, 0x41, 0x50, 0x30, 0xac, 
+0x82, 0x79, 0x31, 0x86, 0xc7, 0x9c, 0x39, 0xfe, 
+0xbb, 0x6e, 0x39, 0xbe, 0x47, 0x58, 0x31, 0x75, 
+0x01, 0xcf, 0x30, 0x82, 0xc0, 0x4f, 0x30, 0x0e, 
+0x41, 0x31, 0x30, 0x2b, 0xc1, 0x7a, 0x30, 0x42, 
+0x82, 0xb7, 0x3b, 0x8d, 0xf3, 0x27, 0x18, 0x2e, 
+0xeb, 0x0e, 0x8c, 0xe5, 0xcb, 0x5c, 0xeb, 0x47, 
+0xa3, 0xa2, 0xdf, 0xbf, 0xff, 0xff, 0xff, 0xfe, 
+0x9f, 0xfe, 0x8f, 0xdb, 0x47, 0xd2, 0x60, 0x03, 
+0x80, 0xb0, 0x60, 0x19, 0x81, 0x6a, 0x60, 0x48, 
+0x02, 0x90, 0x60, 0x95, 0x85, 0x2a, 0x61, 0x64, 
+0x0f, 0xc8, 0x69, 0x1f, 0xf9, 0x30, 0x68, 0xeb, 
+0x0f, 0xb0, 0x61, 0x79, 0x85, 0x4e, 0x60, 0xc6, 
+0x03, 0x10, 0x60, 0x80, 0x01, 0xff, 0xfb, 0x90, 
+0xc4, 0xff, 0x83, 0xc9, 0xd4, 0x29, 0x12, 0x0f, 
+0xff, 0x64, 0x81, 0x23, 0x05, 0x23, 0x01, 0xff, 
+0xec, 0x90, 0xd8, 0x60, 0x88, 0x81, 0x72, 0x60, 
+0x91, 0x02, 0x60, 0x77, 0x4a, 0x80, 0xa4, 0xf4, 
+0xf8, 0x71, 0xe1, 0xc8, 0xbd, 0x70, 0x4e, 0xca, 
+0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xb3, 0x4a, 0x62, 0x0a, 0x6a, 
+0x29, 0x99, 0x71, 0xc9, 0xbd, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x30, 0x36, 0x80, 0xd1, 
+0x30, 0x44, 0xc0, 0xf2, 0x30, 0x63, 0x81, 0x63, 
+0x30, 0xa9, 0xc2, 0x9a, 0x31, 0x7f, 0x88, 0x01, 
+0x39, 0xd2, 0xfe, 0x61, 0x39, 0x92, 0x87, 0xbd, 
+0x31, 0x6d, 0xc1, 0xf4, 0x30, 0x7d, 0x80, 0x2c, 
+0x30, 0x08, 0x81, 0x26, 0x30, 0x2f, 0x81, 0x73, 
+0x30, 0x46, 0xc2, 0xa8, 0x3c, 0x5d, 0xa3, 0x2a, 
+0x19, 0x2e, 0x53, 0x0d, 0x8d, 0x63, 0x95, 0x9c, 
+0xba, 0x53, 0xe9, 0x67, 0xfe, 0xef, 0x5f, 0xff, 
+0xff, 0xe9, 0xfa, 0x3f, 0xf9, 0x3f, 0x7b, 0xf4, 
+0xff, 0xfe, 0xfa, 0x40, 0x80, 0x2a, 0x98, 0x07, 
+0x40, 0x58, 0x18, 0x13, 0x60, 0xa1, 0x98, 0x27, 
+0x41, 0x44, 0x18, 0x5d, 0x63, 0xe0, 0x9a, 0x63, 
+0x9d, 0xc1, 0x9a, 0x55, 0xa3, 0xdb, 0x98, 0x62, 
+0x01, 0x4f, 0x18, 0x32, 0xe0, 0xc4, 0xff, 0xfb, 
+0x92, 0xc4, 0xff, 0x83, 0xc9, 0x7c, 0x2b, 0x12, 
+0x0f, 0xff, 0x64, 0x81, 0x27, 0x04, 0xe3, 0x01, 
+0xff, 0xec, 0x90, 0x98, 0x20, 0x20, 0x79, 0x98, 
+0x21, 0x80, 0x60, 0x18, 0x23, 0xa0, 0xa0, 0x9d, 
+0xba, 0xd8, 0x19, 0x31, 0x35, 0xdc, 0x48, 0x7e, 
+0x1c, 0xa4, 0xce, 0xbd, 0xbf, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xad, 
+0x31, 0x05, 0x35, 0x14, 0xcc, 0xb8, 0xe4, 0xdd, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x32, 0xfc, 
+0xb6, 0x33, 0xa8, 0xdb, 0x35, 0x55, 0x42, 0x39, 
+0x12, 0x63, 0x31, 0x49, 0xc7, 0x58, 0x38, 0x75, 
+0xb9, 0x3e, 0x38, 0x3e, 0xc7, 0x1c, 0x31, 0x39, 
+0x01, 0xd5, 0x30, 0x69, 0x40, 0x01, 0x30, 0x01, 
+0xc0, 0xf3, 0x32, 0xc5, 0x3a, 0x34, 0x02, 0x47, 
+0x32, 0xc0, 0xb9, 0x30, 0x94, 0x10, 0x41, 0xd6, 
+0x75, 0x19, 0x10, 0x87, 0x3d, 0x1e, 0x8f, 0xfe, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 
+0x21, 0x01, 0x38, 0xc0, 0x41, 0x02, 0xac, 0xc0, 
+0xa4, 0x04, 0xe8, 0xc1, 0x4b, 0x09, 0xec, 0xc3, 
+0x0a, 0x1e, 0x60, 0xd3, 0xf3, 0xe9, 0x68, 0xd3, 
+0x7c, 0x1e, 0x48, 0xc3, 0x2f, 0x0a, 0x5c, 0xc1, 
+0x9e, 0x06, 0x20, 0xc1, 0x00, 0x03, 0xd8, 0xc1, 
+0x09, 0x03, 0x24, 0xc1, 0x16, 0x05, 0x38, 0xec, 
+0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc9, 0xe8, 
+0x2b, 0x12, 0x0f, 0xff, 0x64, 0x81, 0x1e, 0x05, 
+0x23, 0x01, 0xff, 0xec, 0x90, 0x98, 0x00, 0xc9, 
+0x69, 0xa8, 0xe3, 0xc3, 0x91, 0xba, 0xf8, 0x55, 
+0xb3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 
+0xff, 0xff, 0xff, 0xff, 0x52, 0x62, 0x0a, 0x6a, 
+0x29, 0x99, 0x71, 0xc9, 0xba, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0x32, 0xf8, 0xbb, 0x33, 0xa4, 0xe2, 0x35, 0x31, 
+0x51, 0x38, 0xe6, 0x7c, 0x31, 0x42, 0x87, 0xa9, 
+0x38, 0x49, 0xfb, 0xa1, 0x38, 0x13, 0x87, 0x6f, 
+0x31, 0x31, 0xc1, 0xf4, 0x01, 0x06, 0x4a, 0x40, 
+0x07, 0x41, 0x97, 0xc9, 0x89, 0xa1, 0xf1, 0xd1, 
+0x97, 0x65, 0xa1, 0x84, 0xc0, 0x7a, 0x0f, 0x33, 
+0x98, 0xd6, 0xc1, 0x97, 0xfb, 0xff, 0xff, 0x77, 
+0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfb, 
+0xff, 0xfe, 0x92, 0x40, 0x12, 0x4c, 0x04, 0x80, 
+0x29, 0x0c, 0x0a, 0xd0, 0x4c, 0xcc, 0x15, 0x80, 
+0x9b, 0x0c, 0x32, 0xb1, 0xdc, 0x4d, 0x4b, 0xee, 
+0x47, 0xcd, 0x44, 0x51, 0xda, 0xcc, 0x34, 0xc0, 
+0xa3, 0x0c, 0x1a, 0x90, 0x62, 0x4c, 0x10, 0x10, 
+0x3f, 0x4c, 0x10, 0x40, 0x34, 0x0c, 0x11, 0x10, 
+0x57, 0x4e, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 
+0xc8, 0x3c, 0x23, 0x14, 0x0e, 0xff, 0xa2, 0x81, 
+0x1f, 0x05, 0x23, 0x01, 0xff, 0xec, 0x90, 0xbd, 
+0x94, 0x04, 0x88, 0x9a, 0xee, 0x24, 0x3f, 0x0e, 
+0x52, 0x66, 0xe5, 0xed, 0xfb, 0xff, 0xd7, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 
+0x69, 0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 
+0xf5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x32, 0xfc, 0xbe, 0x33, 0x90, 0xe9, 
+0x35, 0x1d, 0x5c, 0x38, 0xaa, 0x97, 0x31, 0x3b, 
+0x47, 0xf6, 0x38, 0x1b, 0x3d, 0xea, 0x37, 0xe5, 
+0xc7, 0xbc, 0x31, 0x29, 0x82, 0x13, 0x30, 0x60, 
+0x40, 0x22, 0x30, 0x00, 0x00, 0xdd, 0x33, 0x35, 
+0x28, 0x34, 0x6a, 0x2d, 0x33, 0x08, 0xb1, 0x30, 
+0xa4, 0x0e, 0x40, 0x0b, 0x3a, 0x8c, 0xac, 0x39, 
+0x4e, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 
+0xff, 0x6f, 0xff, 0xe8, 0xff, 0xff, 0xa4, 0x44, 
+0x02, 0x81, 0x80, 0xbe, 0x05, 0xc9, 0x81, 0xa4, 
+0x0a, 0xc1, 0x83, 0x3a, 0x15, 0xb9, 0x87, 0x80, 
+0x42, 0x61, 0xb1, 0x07, 0xfc, 0xa1, 0xaf, 0xe0, 
+0x42, 0x31, 0x87, 0xca, 0x16, 0xf9, 0x83, 0xe0, 
+0x0e, 0x11, 0x82, 0x50, 0x09, 0x41, 0x82, 0x52, 
+0x07, 0xc9, 0x82, 0x64, 0xff, 0xfb, 0x92, 0xc4, 
+0xff, 0x83, 0xc8, 0x50, 0x25, 0x14, 0x0e, 0xff, 
+0xa2, 0x81, 0x23, 0x85, 0x23, 0x01, 0xff, 0xec, 
+0x90, 0x0d, 0x01, 0xe2, 0x3e, 0x19, 0x58, 0x1a, 
+0x38, 0x35, 0xf8, 0x72, 0x1f, 0xa7, 0xc0, 0xfa, 
+0xb6, 0x7d, 0xdf, 0xea, 0xff, 0xff, 0xff, 0xff, 
+0xfe, 0xff, 0xff, 0xff, 0xff, 0xea, 0x4c, 0x41, 
+0x4d, 0x45, 0x33, 0x2e, 0x39, 0x37, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x32, 0x88, 0xa7, 0x33, 
+0x0c, 0xce, 0x34, 0x51, 0x3b, 0x37, 0x66, 0x58, 
+0x31, 0x0c, 0x87, 0x3d, 0x36, 0xf1, 0xf8, 0x47, 
+0x36, 0xc4, 0x07, 0x09, 0x30, 0xfd, 0x41, 0xe6, 
+0x30, 0x4f, 0x00, 0x35, 0x30, 0x04, 0x40, 0xb2, 
+0x35, 0xd3, 0xe4, 0xdf, 0xfd, 0x83, 0x56, 0xa4, 
+0x8c, 0x44, 0x09, 0x47, 0xe7, 0x26, 0x5d, 0x0d, 
+0xfa, 0x7f, 0xff, 0x67, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xf4, 0xff, 0xa4, 0x0a, 0x02, 0x59, 0x80, 
+0xcc, 0x05, 0x91, 0x81, 0xba, 0x0a, 0x79, 0x83, 
+0x54, 0x15, 0x21, 0x87, 0xc6, 0x40, 0xb9, 0xb2, 
+0xb1, 0xf0, 0x19, 0xb1, 0x82, 0x40, 0xa9, 0x88, 
+0x04, 0x16, 0x81, 0x83, 0xf2, 0x0e, 0x09, 0x82, 
+0x4e, 0x09, 0x79, 0x82, 0x44, 0x08, 0x01, 0x82, 
+0x5a, 0x0d, 0x89, 0xe0, 0xc1, 0x99, 0xff, 0xfb, 
+0x92, 0xc4, 0xff, 0x83, 0xc8, 0x98, 0x23, 0x14, 
+0x0e, 0xff, 0xa2, 0x81, 0x29, 0x05, 0x22, 0xc1, 
+0xff, 0xec, 0x90, 0x40, 0x22, 0x1b, 0xb5, 0xc7, 
+0xfe, 0x1c, 0xa4, 0xb7, 0x85, 0xb5, 0xfd, 0x3f, 
+0xf6, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xe8, 0xff, 
+0xff, 0xff, 0xff, 0x6e, 0x84, 0xc4, 0x14, 0xd4, 
+0x53, 0x32, 0xe3, 0x93, 0x75, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x32, 0x8c, 
+0xa8, 0x32, 0xf8, 0xd5, 0x34, 0x3d, 0x44, 0x37, 
+0x2a, 0x6f, 0x31, 0x05, 0xc7, 0x7a, 0x36, 0xc4, 
+0x3a, 0x1e, 0x36, 0x97, 0x47, 0x48, 0x30, 0xf5, 
+0x01, 0xff, 0x30, 0x4a, 0xc0, 0x4c, 0x30, 0x08, 
+0x00, 0xa7, 0x36, 0x2b, 0xc0, 0xe1, 0x1c, 0xd3, 
+0x5a, 0x23, 0xcc, 0x4a, 0x06, 0x47, 0xd7, 0x1a, 
+0x5b, 0x0e, 0x75, 0x23, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xfa, 0x0c, 0x00, 0x60, 
+0x10, 0x8c, 0x06, 0xf0, 0x2a, 0xcc, 0x0e, 0x60, 
+0x51, 0x0c, 0x1b, 0x90, 0xa4, 0xcc, 0x40, 0x01, 
+0xf8, 0x0d, 0xa2, 0x5f, 0x17, 0x0d, 0x98, 0x61, 
+0xf8, 0x0c, 0x42, 0x10, 0xb0, 0xcc, 0x20, 0x00, 
+0x6f, 0x8c, 0x12, 0x60, 0x4c, 0x8c, 0x11, 0xd0, 
+0x42, 0x4c, 0x12, 0x20, 0x6f, 0x8e, 0xea, 0x18, 
+0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc7, 0xf8, 
+0x23, 0x16, 0x0e, 0xff, 0x82, 0x81, 0x2f, 0x05, 
+0x62, 0xc1, 0xff, 0xec, 0x90, 0xc9, 0xc1, 0x51, 
+0xf1, 0xaf, 0xbf, 0x90, 0xfd, 0x3d, 0x87, 0xab, 
+0x67, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 
+0xff, 0xff, 0xff, 0xff, 0xea, 0x4c, 0x41, 0x4d, 
+0x45, 0x33, 0x2e, 0x39, 0x37, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x32, 0x88, 0xab, 0x32, 0xf4, 0xda, 0x34, 0x19, 
+0x4f, 0x36, 0xfe, 0x82, 0x30, 0xfe, 0x07, 0xb7, 
+0x36, 0x93, 0xfb, 0xe1, 0x36, 0x68, 0x07, 0x85, 
+0x30, 0xed, 0x42, 0x16, 0x30, 0x45, 0x80, 0x63, 
+0x30, 0x0c, 0x40, 0x9c, 0x36, 0x73, 0xa4, 0xe2, 
+0x7b, 0xe3, 0x5d, 0xa2, 0x0c, 0x4c, 0x07, 0x43, 
+0x67, 0x16, 0x5c, 0xa0, 0xdf, 0x5a, 0x7d, 0x1f, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 
+0x4c, 0x01, 0x10, 0x0e, 0xcc, 0x07, 0x60, 0x28, 
+0x8c, 0x0e, 0xf0, 0x4e, 0xcc, 0x1c, 0x60, 0xa0, 
+0x0c, 0x41, 0xf1, 0xe9, 0xcd, 0xae, 0x6e, 0xa8, 
+0x4d, 0xa4, 0x51, 0xea, 0x4c, 0x43, 0xa0, 0xad, 
+0x0c, 0x20, 0x90, 0x6f, 0x4c, 0x12, 0x50, 0x4d, 
+0xcc, 0x11, 0x60, 0x44, 0x0c, 0x11, 0xb0, 0x73, 
+0x4e, 0xce, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 
+0xc7, 0xe8, 0x23, 0x16, 0x0e, 0xff, 0x82, 0x81, 
+0x2b, 0x05, 0x22, 0xc1, 0xff, 0xec, 0x90, 0x2c, 
+0xc9, 0x01, 0x91, 0xfd, 0xae, 0x3f, 0xf0, 0xe5, 
+0x26, 0x6e, 0x5f, 0xff, 0xfd, 0x7f, 0xff, 0xff, 
+0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xfd, 0x69, 
+0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xea, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0x32, 0x84, 0xac, 0x32, 0xe0, 0xdf, 
+0x33, 0xfd, 0x58, 0x36, 0xba, 0x95, 0x30, 0xf6, 
+0x47, 0xee, 0x36, 0x61, 0x3d, 0x8c, 0x36, 0x36, 
+0xc7, 0xbe, 0x30, 0xe4, 0x82, 0x2d, 0x30, 0x41, 
+0x40, 0x76, 0x30, 0x0f, 0x80, 0x8f, 0x36, 0xcb, 
+0x78, 0xe3, 0x5b, 0x13, 0x60, 0x21, 0x4c, 0x52, 
+0x04, 0x43, 0x57, 0x1a, 0x5a, 0xb0, 0xe7, 0x52, 
+0x3d, 0x3f, 0xfd, 0xdf, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0x47, 0xfa, 0x0c, 0x01, 0x80, 0x0c, 0x8c, 
+0x07, 0xd0, 0x26, 0xcc, 0x0f, 0x60, 0x4b, 0x8c, 
+0x1d, 0x50, 0x9b, 0x4c, 0x43, 0xc1, 0xda, 0x8d, 
+0xba, 0x1e, 0x33, 0x8d, 0xaf, 0x81, 0xdb, 0x0c, 
+0x45, 0x50, 0xa9, 0x4c, 0x20, 0xe0, 0x6e, 0x8c, 
+0x12, 0x20, 0x4e, 0x8c, 0x11, 0x10, 0x45, 0xcc, 
+0x11, 0x20, 0x76, 0x0e, 0xff, 0xfb, 0x92, 0xc4, 
+0xff, 0x83, 0xc8, 0x08, 0x23, 0x16, 0x0e, 0xff, 
+0x82, 0x81, 0x28, 0x85, 0x22, 0xc1, 0xff, 0xec, 
+0x90, 0xb2, 0x40, 0xc8, 0xc1, 0xd1, 0xf1, 0xaf, 
+0xbf, 0x90, 0xfd, 0x3e, 0x07, 0xd5, 0xfe, 0xaf, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xff, 0xf5, 0x26, 0x20, 0xa6, 0xa2, 0x99, 0x97, 
+0x1c, 0x9b, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x32, 0x80, 0xaf, 0x32, 
+0xd4, 0xe4, 0x33, 0xd9, 0x63, 0x36, 0x86, 0xa6, 
+0x30, 0xed, 0x88, 0x25, 0x36, 0x2c, 0xff, 0x25, 
+0x36, 0x03, 0x07, 0xf5, 0x30, 0xdc, 0x42, 0x42, 
+0x30, 0x3c, 0x00, 0x8b, 0x30, 0x13, 0x40, 0x82, 
+0x37, 0x13, 0x54, 0xe4, 0xba, 0x03, 0x63, 0x9f, 
+0x8c, 0x54, 0x05, 0x47, 0x27, 0x16, 0x2d, 0xe2, 
+0x17, 0xf6, 0xbf, 0xdd, 0xff, 0xa7, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xee, 
+0xf5, 0x18, 0x05, 0x20, 0x1a, 0x98, 0x13, 0x00, 
+0x55, 0x18, 0x24, 0xe0, 0xa8, 0x98, 0x44, 0xc1, 
+0x57, 0x18, 0x9e, 0xa4, 0x17, 0x9c, 0x08, 0x1f, 
+0x45, 0x9b, 0xef, 0xe4, 0x1a, 0x98, 0xa1, 0xc1, 
+0x79, 0x18, 0x4c, 0x60, 0xfb, 0x98, 0x29, 0xa0, 
+0xb7, 0x98, 0x26, 0x40, 0xa4, 0x18, 0xff, 0xfb, 
+0x92, 0xc4, 0xff, 0x83, 0xc8, 0x28, 0x23, 0x16, 
+0x0e, 0xff, 0x82, 0x81, 0x27, 0x85, 0x22, 0xc1, 
+0xff, 0xec, 0x90, 0x26, 0x21, 0x16, 0x9e, 0x0d, 
+0x69, 0x94, 0x06, 0x20, 0x0d, 0x9c, 0x3f, 0xef, 
+0xe5, 0x25, 0xb7, 0x2f, 0xff, 0xfe, 0xbf, 0xff, 
+0xff, 0xff, 0xff, 0xee, 0xab, 0xff, 0xfb, 0xbf, 
+0xdd, 0xeb, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 
+0x39, 0x37, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x32, 0x24, 
+0x96, 0x32, 0x58, 0xc9, 0x33, 0x3d, 0x3a, 0x35, 
+0x72, 0x61, 0x30, 0xc8, 0x47, 0x50, 0x35, 0x3a, 
+0xb8, 0xc2, 0x35, 0x17, 0x47, 0x26, 0x30, 0xb8, 
+0x02, 0x0b, 0x30, 0x2f, 0x40, 0x86, 0x30, 0x12, 
+0x80, 0x65, 0x36, 0x5a, 0xb8, 0xe0, 0x95, 0xd3, 
+0x57, 0x1a, 0x40, 0x44, 0x64, 0xd5, 0x75, 0xa5, 
+0xab, 0x3d, 0xd4, 0x8f, 0x4f, 0xff, 0xff, 0xff, 
+0xff, 0xff, 0xff, 0xfd, 0x1f, 0xe8, 0x30, 0x0c, 
+0x80, 0x2c, 0x30, 0x28, 0x40, 0xa1, 0x30, 0x4b, 
+0x81, 0x42, 0x30, 0x8d, 0x42, 0x95, 0x31, 0x44, 
+0x87, 0xe2, 0x38, 0x3f, 0xfc, 0x48, 0x38, 0x0d, 
+0x87, 0xea, 0x31, 0x4a, 0x42, 0xdf, 0x30, 0x9a, 
+0x81, 0xf2, 0x30, 0x52, 0x81, 0x72, 0x30, 0x4a, 
+0xc1, 0x51, 0x30, 0x49, 0x82, 0x3a, 0x3b, 0x8b, 
+0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc8, 0xa4, 
+0x25, 0x16, 0x0e, 0xff, 0x82, 0x81, 0x2f, 0x85, 
+0x22, 0x81, 0xff, 0xec, 0x90, 0x23, 0x27, 0x0f, 
+0x41, 0xc6, 0x76, 0xec, 0x3f, 0xf4, 0xf6, 0x1e, 
+0xaf, 0xff, 0xfa, 0xbf, 0xb3, 0xff, 0xff, 0xf7, 
+0xff, 0xbf, 0xff, 0xfe, 0xff, 0xa3, 0xfa, 0x93, 
+0x10, 0x53, 0x51, 0x4c, 0xcb, 0x8e, 0x4d, 0xd5, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x32, 0x18, 0x99, 0x32, 0x4c, 0xcc, 0x33, 0x19, 
+0x43, 0x35, 0x3e, 0x6e, 0x30, 0xc0, 0x07, 0x7b, 
+0x35, 0x07, 0xfa, 0x03, 0x34, 0xe5, 0x87, 0x51, 
+0x30, 0xb0, 0x42, 0x1c, 0x30, 0x2a, 0x00, 0x97, 
+0x30, 0x15, 0xc0, 0x56, 0x36, 0x92, 0x9c, 0xe1, 
+0x74, 0xe3, 0x59, 0x98, 0x80, 0x44, 0x94, 0xd6, 
+0x75, 0x67, 0x94, 0x77, 0xad, 0x3e, 0x8f, 0xff, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x26, 
+0x01, 0xd8, 0x04, 0x26, 0x05, 0x40, 0x12, 0xc6, 
+0x09, 0xb8, 0x26, 0xa6, 0x12, 0x00, 0x4f, 0x46, 
+0x29, 0x68, 0xf2, 0xa7, 0x0d, 0x97, 0x3d, 0xa7, 
+0x07, 0x28, 0xf3, 0xe6, 0x2a, 0x00, 0x59, 0x46, 
+0x13, 0x78, 0x3d, 0xe6, 0x0a, 0x38, 0x2e, 0xe6, 
+0x09, 0x00, 0x2a, 0xc6, 0x08, 0xd8, 0x48, 0xe7, 
+0x63, 0x6e, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 
+0xc8, 0x00, 0x23, 0x18, 0x0e, 0xff, 0x82, 0x81, 
+0x31, 0x05, 0x22, 0x81, 0xff, 0xec, 0x90, 0x64, 
+0x81, 0xc8, 0x3e, 0xce, 0x1d, 0xb7, 0xf2, 0x92, 
+0xdb, 0x97, 0xff, 0xff, 0x5d, 0x3f, 0xff, 0xff, 
+0xeb, 0xff, 0xf7, 0x7f, 0xff, 0xdd, 0xfe, 0xef, 
+0x5a, 0x62, 0x0a, 0x6a, 0x29, 0x99, 0x71, 0xc9, 
+0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0x32, 0x14, 0x98, 0x32, 0x38, 0xd1, 
+0x32, 0xfd, 0x48, 0x35, 0x02, 0x7d, 0x30, 0xb8, 
+0x47, 0xa2, 0x34, 0xd3, 0x3b, 0x30, 0x34, 0xb2, 
+0x47, 0x7a, 0x30, 0xa7, 0x02, 0x2d, 0x30, 0x25, 
+0x40, 0xa4, 0x30, 0x18, 0x00, 0x4b, 0x36, 0xca, 
+0x70, 0xe2, 0x14, 0x13, 0x5b, 0x17, 0x40, 0xc4, 
+0xe4, 0xd5, 0x75, 0xa7, 0x47, 0x90, 0xea, 0x47, 
+0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
+0xf4, 0x18, 0x0a, 0x00, 0x0f, 0x18, 0x19, 0x60, 
+0x52, 0x98, 0x2d, 0xc0, 0xa8, 0x18, 0x54, 0x61, 
+0x5b, 0x98, 0xc0, 0xc4, 0x24, 0x1c, 0xe4, 0x7f, 
+0x97, 0x1c, 0xc6, 0x84, 0x2b, 0x18, 0xc3, 0x21, 
+0x8c, 0x98, 0x59, 0xc1, 0x18, 0x18, 0x2e, 0x80, 
+0xd8, 0x18, 0x28, 0x60, 0xc8, 0x98, 0x26, 0xc1, 
+0x54, 0x1e, 0x16, 0xc1, 0xff, 0xfb, 0x92, 0xc4, 
+0xff, 0x83, 0xc7, 0xec, 0x23, 0x18, 0x0e, 0xff, 
+0x82, 0x81, 0x31, 0x05, 0x22, 0x81, 0xff, 0xec, 
+0x90, 0x94, 0x8b, 0x97, 0x21, 0x77, 0xbb, 0x0f, 
+0xfc, 0xbe, 0xc1, 0xf5, 0x67, 0xfe, 0xff, 0x5f, 
+0x55, 0x1f, 0x67, 0x4f, 0xff, 0xff, 0xfd, 0x77, 
+0xff, 0xff, 0xdf, 0xfe, 0xff, 0x52, 0x62, 0x0a, 
+0x6a, 0x29, 0x99, 0x71, 0xc9, 0xbd, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x32, 0x10, 0x9b, 0x32, 
+0x2c, 0xd2, 0x32, 0xd9, 0x4f, 0x34, 0xc6, 0x88, 
+0x30, 0xaf, 0x07, 0xc9, 0x34, 0x9c, 0x7c, 0x4d, 
+0x34, 0x7c, 0x87, 0xa1, 0x30, 0x9e, 0x42, 0x3c, 
+0x30, 0x20, 0x00, 0xb5, 0x30, 0x1a, 0xc0, 0x3e, 
+0x37, 0x02, 0x4c, 0xe2, 0xf3, 0x03, 0x5d, 0x96, 
+0x00, 0xc4, 0xd4, 0xd6, 0x75, 0x67, 0x86, 0x37, 
+0xac, 0x60, 0x30, 0x0f, 0xc0, 0x05, 0x30, 0x26, 
+0x80, 0x6e, 0x30, 0x46, 0xc0, 0xef, 0x30, 0x82, 
+0x81, 0xf8, 0x31, 0x2d, 0x46, 0x13, 0x37, 0xac, 
+0x2e, 0x75, 0x37, 0x7d, 0x46, 0x1f, 0x31, 0x30, 
+0x02, 0x48, 0x30, 0x8a, 0x41, 0xa5, 0x30, 0x45, 
+0x41, 0x49, 0x30, 0x3a, 0x81, 0x32, 0x30, 0x37, 
+0xc2, 0x11, 0x38, 0x7a, 0x33, 0x16, 0x0a, 0x4c, 
+0x77, 0x21, 0xff, 0x8c, 0x52, 0x5b, 0xff, 0xfb, 
+0x92, 0xc4, 0xff, 0x83, 0xc7, 0xe4, 0x23, 0x18, 
+0x0e, 0xff, 0x82, 0x81, 0x3e, 0x05, 0x22, 0x41, 
+0xff, 0xec, 0x90, 0x04, 0xc5, 0x69, 0x38, 0xcf, 
+0x1b, 0x48, 0x0c, 0x68, 0xa2, 0x1d, 0x5d, 0x3f, 
+0xff, 0xff, 0xff, 0xff, 0x77, 0xff, 0xfd, 0xdf, 
+0xff, 0x5a, 0x62, 0x0a, 0x6a, 0x29, 0x99, 0x71, 
+0xc9, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
+0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x40, 0x00, 
+0x64, 0xdb, 0x6d, 0xb5, 0xb2, 0x4a, 0xc1, 0xdb, 
+0xa3, 0xf9, 0x04, 0xa6, 0x38, 0xaf, 0x01, 0x21, 
+0xc3, 0xcc, 0xe2, 0x0f, 0x5c, 0x8f, 0x60, 0x85, 
+0x53, 0x5c, 0x72, 0xa0, 0x86, 0x38, 0x52, 0x42, 
+0x98, 0x90, 0xe2, 0xdd, 0x4d, 0x8c, 0x93, 0x72, 
+0x2c, 0xc7, 0x36, 0x37, 0x48, 0x08, 0x50, 0x9b, 
+0x75, 0xa6, 0x14, 0x51, 0xac, 0x54, 0x3d, 0x08, 
+0xcd, 0x2c, 0x34, 0x40, 0x0c, 0x1a, 0x13, 0xa6, 
+0xcc, 0x91, 0x91, 0xce, 0x84, 0x64, 0x0a, 0x9c, 
+0x38, 0x64, 0x5b, 0x4d, 0x6c, 0x53, 0x76, 0x3c, 
+0xc6, 0x36, 0x37, 0xc9, 0x88, 0x11, 0x9b, 0xb6, 
+0xa6, 0x34, 0x41, 0xb2, 0x64, 0x51, 0x6c, 0xcf, 
+0x36, 0x35, 0xc2, 0x8c, 0x1a, 0x93, 0x66, 0x7c, 
+0x64, 0xc1, 0xae, 0x54, 0x62, 0x00, 0x9a, 0x75, 
+0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0x46, 0x98, 
+0x23, 0x18, 0x0e, 0xff, 0x82, 0xa1, 0x4f, 0x85, 
+0x22, 0xc9, 0xff, 0xec, 0x90, 0x23, 0xd2, 0x0c, 
+0xaa, 0xb3, 0x4e, 0x24, 0x08, 0x78, 0xd4, 0x18, 
+0x14, 0x22, 0x69, 0xd1, 0x82, 0x87, 0x19, 0xe4, 
+0x03, 0x4f, 0xcc, 0x72, 0x23, 0x40, 0x18, 0x2a, 
+0x64, 0xe3, 0x54, 0x46, 0x41, 0xbc, 0xe0, 0x41, 
+0xa6, 0xbb, 0x62, 0x5a, 0x19, 0x2e, 0x9b, 0x62, 
+0x88, 0x12, 0x37, 0x12, 0x10, 0x0a, 0x6c, 0xb2, 
+0x1c, 0x51, 0xa0, 0xb0, 0x95, 0xe6, 0x12, 0xc6, 
+0xb0, 0x82, 0xa6, 0x9b, 0x28, 0x97, 0x38, 0xd4, 
+0x58, 0x58, 0x93, 0x35, 0x30, 0xea, 0x00, 0x29, 
+0x9a, 0xa2, 0x8e, 0x10, 0x6a, 0x1c, 0x5e, 0xd3, 
+0x45, 0x31, 0xe1, 0x8c, 0x83, 0x83, 0x23, 0x04, 
+0x1c, 0x68, 0x04, 0x4a, 0x29, 0xa2, 0x6a, 0x12, 
+0x8c, 0xc4, 0x09, 0x85, 0x31, 0x4d, 0x0c, 0x70, 
+0x1a, 0x59, 0x9e, 0x19, 0x54, 0x23, 0x38, 0xa4, 
+0x89, 0x32, 0xcf, 0x2b, 0x0c, 0xc2, 0x20, 0x21, 
+0xf0, 0xb1, 0x06, 0x60, 0x48, 0x7a, 0x66, 0x92, 
+0x8f, 0xc6, 0x31, 0x84, 0xc2, 0x00, 0x47, 0x08, 
+0x60, 0x42, 0x39, 0x96, 0x1a, 0x3b, 0x19, 0x44, 
+0x25, 0x69, 0x8a, 0x59, 0x10, 0xe0, 0x41, 0x02, 
+0x17, 0x11, 0x08, 0x64, 0x04, 0x96, 0xa6, 0x48, 
+0xe9, 0xf4, 0x61, 0x10, 0x3c, 0x00, 0x24, 0x30, 
+0x72, 0x83, 0x20, 0x99, 0x21, 0xa6, 0x91, 0x8c, 
+0x32, 0x66, 0x98, 0x23, 0x8d, 0x06, 0x0c, 0x00, 
+0x1c, 0x9a, 0x1c, 0x0c, 0x60, 0x14, 0xa4, 0xc5, 
+0x1d, 0x38, 0x80, 0x03, 0x0b, 0x00, 0x5b, 0xb0, 
+0x72, 0x09, 0x2e, 0x62, 0x82, 0xa6, 0x46, 0x10, 
+0x8a, 0x12, 0x05, 0x14, 0x48, 0x32, 0xe6, 0x02, 
+0x8f, 0x49, 0xc3, 0x10, 0x05, 0x4a, 0x60, 0x8a, 
+0xa2, 0x20, 0x81, 0x04, 0x80, 0x40, 0x58, 0x28, 
+0xc4, 0xdb, 0x30, 0xc1, 0x58, 0xc6, 0x00, 0x49, 
+0xe0, 0x0d, 0x0c, 0x38, 0x34, 0x6c, 0x05, 0x16, 
+0xaa, 0x46, 0x10, 0x0a, 0xe4, 0x02, 0x1a, 0x4d, 
+0x85, 0x02, 0x0e, 0x01, 0x23, 0xc1, 0x44, 0x2c, 
+0x93, 0x04, 0x15, 0xac, 0x04, 0x09, 0x20, 0x02, 
+0xa0, 0x86, 0x06, 0x9e, 0x80, 0xa1, 0xd7, 0x91, 
+0x82, 0x10, 0x99, 0x10, 0xb9, 0x0a, 0x11, 0xb7, 
+0x94, 0x1b, 0x65, 0xb9, 0xac, 0x3c, 0x1e, 0x9b, 
+0xd1, 0xa4, 0x51, 0x91, 0x70, 0x19, 0x51, 0x59, 
+0x95, 0x12, 0x8c, 0x13, 0x19, 0xa8, 0xd0, 0xa0, 
+0xd9, 0x93, 0x0c, 0x85, 0x04, 0x77, 0xb0, 0xd2, 
+0xcc, 0x6e, 0x0e, 0x90, 0x21, 0xa0, 0x6e, 0x8a, 
+0x98, 0xda, 0x44, 0xd3, 0x32, 0x15, 0x48, 0x02, 
+0x06, 0x81, 0xa1, 0x71, 0x04, 0x19, 0x1d, 0x40, 
+0xc5, 0x60, 0x05, 0x92, 0x62, 0xe5, 0xee, 0x4f, 
+0xa4, 0x26, 0x97, 0xc5, 0x45, 0x8b, 0x8c, 0xd2, 
+0xcb, 0xba, 0xd4, 0x11, 0xe5, 0x58, 0x53, 0x49, 
+0x0d, 0x98, 0x4a, 0x00, 0x5d, 0x84, 0x56, 0x6c, 
+0xea, 0xdc, 0xb5, 0x96, 0x8a, 0x74, 0xb4, 0x64, 
+0x8a, 0x7f, 0xd4, 0x05, 0xcd, 0x60, 0x2c, 0x95, 
+0x91, 0x29, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x80, 
+0x31, 0x95, 0xa3, 0x65, 0xac, 0xeb, 0x2d, 0xf4, 
+0xf1, 0x3a, 0xe6, 0xc1, 0xbc, 0x3d, 0xb8, 0xb1, 
+0xb2, 0x21, 0xa8, 0x60, 0xb7, 0x18, 0xc3, 0xe8, 
+0x93, 0x17, 0x51, 0xc2, 0x7c, 0x09, 0xb2, 0x8c, 
+0x5b, 0x4f, 0x12, 0x7a, 0x58, 0x4b, 0xb0, 0xe2, 
+0x49, 0x8b, 0x8a, 0xa0, 0x83, 0x1e, 0x45, 0xf8, 
+0xb1, 0x1d, 0xa4, 0x25, 0x20, 0x3d, 0x4a, 0xb2, 
+0x52, 0x70, 0x9b, 0xa5, 0x84, 0xf6, 0x21, 0x4a, 
+0x71, 0xe9, 0x58, 0x2d, 0xc7, 0x11, 0xbc, 0x65, 
+0x24, 0x49, 0x6a, 0x90, 0x9d, 0x2d, 0x96, 0xd3, 
+0x84, 0xfd, 0x32, 0x53, 0x05, 0xc9, 0x8c, 0x9c, 
+0xb4, 0x17, 0xe3, 0x89, 0x14, 0x65, 0x2f, 0x97, 
+0x16, 0x02, 0xdc, 0xd2, 0x5f, 0x4e, 0x14, 0x49, 
+0x92, 0xb8, 0x2e, 0x4a, 0xf2, 0xda, 0xb2, 0x73, 
+0x19, 0x4a, 0x63, 0x29, 0x76, 0x68, 0xb2, 0x1a, 
+0x4b, 0x47, 0xe9, 0xd2, 0xb9, 0x34, 0x5b, 0x0d, 
+0x26, 0x73, 0x45, 0x64, 0xfe, 0x3a, 0x97, 0x46, 
+0x93, 0x19, 0xa2, 0xc8, 0x73, 0x2a, 0x8f, 0xd3, 
+0xa5, 0x72, 0x68, 0xb0, 0x1a, 0x4e, 0x67, 0x2a, 
+0xa4, 0xfe, 0x3a, 0x97, 0x8d, 0x26, 0x33, 0x45, 
+0xc0, 0xe6, 0x55, 0x22, 0x4e, 0x96, 0xb3, 0x45, 
+0xe1, 0xcc, 0xe6, 0x72, 0xaa, 0x54, 0xc7, 0x53, 
+0x51, 0xa4, 0xfc, 0xe5, 0x74, 0x7f, 0x2a, 0x94, 
+0xa7, 0x4b, 0x59, 0xa2, 0xf0, 0xe6, 0x76, 0x7e, 
+0xaa, 0x54, 0xc7, 0x53, 0x61, 0xa4, 0xce, 0x72, 
+0xb8, 0xa7, 0x94, 0x4b, 0x93, 0xa5, 0xbc, 0xd1, 
+0x70, 0x43, 0x96, 0x93, 0xaa, 0x15, 0xd1, 0xd4, 
+0xd9, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x39, 
+0x37, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 
+0x39, 0x37, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x92, 0xc4, 
+0x61, 0x83, 0xc0, 0x00, 0x01, 0xa4, 0x00, 0x00, 
+0x00, 0x20, 0x00, 0x00, 0x34, 0x80, 0x00, 0x00, 
+0x04, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
+};
+
diff --git a/subprojects/gst-plugins-ugly/tests/check/generic/index.c b/subprojects/gst-plugins-ugly/tests/check/generic/index.c
new file mode 100644 (file)
index 0000000..5225f16
--- /dev/null
@@ -0,0 +1,140 @@
+/* GStreamer
+ * unit test for index setting on all elements
+ * Copyright (C) 2005 Thomas Vander Stichele <thomas at apestaart dot org>
+ * Copyright (C) 2011 Tim-Philipp Müller <tim centricular net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <gst/check/gstcheck.h>
+
+static GList *elements = NULL;
+
+static void
+setup (void)
+{
+  GList *features, *f;
+  GList *plugins, *p;
+  gchar **ignorelist = NULL;
+  const gchar *INDEX_IGNORE_ELEMENTS = NULL;
+
+  GST_DEBUG ("getting elements for package %s", PACKAGE);
+  INDEX_IGNORE_ELEMENTS = g_getenv ("GST_INDEX_IGNORE_ELEMENTS");
+  if (!g_getenv ("GST_NO_INDEX_IGNORE_ELEMENTS") && INDEX_IGNORE_ELEMENTS) {
+    GST_DEBUG ("Will ignore element factories: '%s'", INDEX_IGNORE_ELEMENTS);
+    ignorelist = g_strsplit (INDEX_IGNORE_ELEMENTS, " ", 0);
+  }
+
+  plugins = gst_registry_get_plugin_list (gst_registry_get_default ());
+
+  for (p = plugins; p; p = p->next) {
+    GstPlugin *plugin = p->data;
+
+    if (strcmp (gst_plugin_get_source (plugin), PACKAGE) != 0)
+      continue;
+
+    features =
+        gst_registry_get_feature_list_by_plugin (gst_registry_get_default (),
+        gst_plugin_get_name (plugin));
+
+    for (f = features; f; f = f->next) {
+      GstPluginFeature *feature = f->data;
+      const gchar *name = gst_plugin_feature_get_name (feature);
+      gboolean ignore = FALSE;
+
+      if (!GST_IS_ELEMENT_FACTORY (feature))
+        continue;
+
+      if (ignorelist) {
+        gchar **s;
+
+        for (s = ignorelist; s && *s; ++s) {
+          if (g_str_has_prefix (name, *s)) {
+            GST_DEBUG ("ignoring element %s", name);
+            ignore = TRUE;
+          }
+        }
+        if (ignore)
+          continue;
+      }
+
+      GST_DEBUG ("adding element %s", name);
+      elements = g_list_prepend (elements, (gpointer) g_strdup (name));
+    }
+    gst_plugin_feature_list_free (features);
+  }
+  gst_plugin_list_free (plugins);
+  g_strfreev (ignorelist);
+}
+
+static void
+teardown (void)
+{
+  GList *e;
+
+  for (e = elements; e; e = e->next) {
+    g_free (e->data);
+  }
+  g_list_free (elements);
+  elements = NULL;
+}
+
+GST_START_TEST (test_set_index)
+{
+  GstElement *element;
+  GstIndex *idx;
+  GList *e;
+
+  idx = gst_index_factory_make ("memindex");
+  if (idx == NULL)
+    return;
+
+  gst_object_ref_sink (idx);
+
+  for (e = elements; e; e = e->next) {
+    const gchar *name = e->data;
+
+    GST_INFO ("testing element %s", name);
+    element = gst_element_factory_make (name, name);
+    fail_if (element == NULL, "Could not make element from factory %s", name);
+
+    gst_element_set_index (element, idx);
+    gst_object_unref (element);
+  }
+
+  gst_object_unref (idx);
+}
+
+GST_END_TEST;
+
+static Suite *
+index_suite (void)
+{
+  Suite *s = suite_create ("index");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_checked_fixture (tc_chain, setup, teardown);
+  tcase_add_test (tc_chain, test_set_index);
+
+  return s;
+}
+
+GST_CHECK_MAIN (index);
diff --git a/subprojects/gst-plugins-ugly/tests/check/generic/states.c b/subprojects/gst-plugins-ugly/tests/check/generic/states.c
new file mode 100644 (file)
index 0000000..3d7c89b
--- /dev/null
@@ -0,0 +1,219 @@
+/* GStreamer
+ *
+ * unit test for state changes on all elements
+ *
+ * Copyright (C) <2005> Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <gst/check/gstcheck.h>
+
+static GList *elements = NULL;
+
+static void
+setup ()
+{
+  GList *features, *f;
+  GList *plugins, *p;
+  gchar **ignorelist = NULL;
+  const gchar *STATE_IGNORE_ELEMENTS = NULL;
+
+  GST_DEBUG ("getting elements for package %s", PACKAGE);
+  STATE_IGNORE_ELEMENTS = g_getenv ("GST_STATE_IGNORE_ELEMENTS");
+  if (!g_getenv ("GST_NO_STATE_IGNORE_ELEMENTS") && STATE_IGNORE_ELEMENTS) {
+    GST_DEBUG ("Will ignore element factories: '%s'", STATE_IGNORE_ELEMENTS);
+    ignorelist = g_strsplit (STATE_IGNORE_ELEMENTS, " ", 0);
+  }
+
+  plugins = gst_registry_get_plugin_list (gst_registry_get ());
+
+  for (p = plugins; p; p = p->next) {
+    GstPlugin *plugin = p->data;
+
+    if (strcmp (gst_plugin_get_source (plugin), PACKAGE) != 0)
+      continue;
+
+    features =
+        gst_registry_get_feature_list_by_plugin (gst_registry_get (),
+        gst_plugin_get_name (plugin));
+
+    for (f = features; f; f = f->next) {
+      GstPluginFeature *feature = f->data;
+      const gchar *name = gst_plugin_feature_get_name (feature);
+      gboolean ignore = FALSE;
+
+      if (!GST_IS_ELEMENT_FACTORY (feature))
+        continue;
+
+      if (ignorelist) {
+        gchar **s;
+
+        for (s = ignorelist; s && *s; ++s) {
+          if (g_str_has_prefix (name, *s)) {
+            GST_DEBUG ("ignoring element %s", name);
+            ignore = TRUE;
+          }
+        }
+        if (ignore)
+          continue;
+      }
+
+      GST_DEBUG ("adding element %s", name);
+      elements = g_list_prepend (elements, (gpointer) g_strdup (name));
+    }
+    gst_plugin_feature_list_free (features);
+  }
+  gst_plugin_list_free (plugins);
+  g_strfreev (ignorelist);
+}
+
+static void
+teardown ()
+{
+  GList *e;
+
+  for (e = elements; e; e = e->next) {
+    g_free (e->data);
+  }
+  g_list_free (elements);
+  elements = NULL;
+}
+
+
+GST_START_TEST (test_state_changes_up_and_down_seq)
+{
+  GstElement *element;
+  GList *e;
+
+  for (e = elements; e; e = e->next) {
+    const gchar *name = e->data;
+
+    GST_INFO ("testing element %s", name);
+    element = gst_element_factory_make (name, name);
+    fail_if (element == NULL, "Could not make element from factory %s", name);
+
+    if (GST_IS_PIPELINE (element)) {
+      GST_DEBUG ("element %s is a pipeline", name);
+    }
+
+    gst_element_set_state (element, GST_STATE_READY);
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_PLAYING);
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_READY);
+    gst_element_set_state (element, GST_STATE_NULL);
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_READY);
+    gst_element_set_state (element, GST_STATE_PLAYING);
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_NULL);
+    gst_object_unref (GST_OBJECT (element));
+  }
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_state_changes_up_seq)
+{
+  GstElement *element;
+  GList *e;
+
+  for (e = elements; e; e = e->next) {
+    const gchar *name = e->data;
+
+    GST_INFO ("testing element %s", name);
+    element = gst_element_factory_make (name, name);
+    fail_if (element == NULL, "Could not make element from factory %s", name);
+
+    if (GST_IS_PIPELINE (element)) {
+      GST_DEBUG ("element %s is a pipeline", name);
+    }
+
+    gst_element_set_state (element, GST_STATE_READY);
+
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_READY);
+
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_PLAYING);
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_READY);
+
+    gst_element_set_state (element, GST_STATE_NULL);
+    gst_object_unref (GST_OBJECT (element));
+  }
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_state_changes_down_seq)
+{
+  GstElement *element;
+  GList *e;
+
+  for (e = elements; e; e = e->next) {
+    const gchar *name = e->data;
+
+    GST_INFO ("testing element %s", name);
+    element = gst_element_factory_make (name, name);
+    fail_if (element == NULL, "Could not make element from factory %s", name);
+
+    if (GST_IS_PIPELINE (element)) {
+      GST_DEBUG ("element %s is a pipeline", name);
+    }
+
+    gst_element_set_state (element, GST_STATE_READY);
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_PLAYING);
+
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_PLAYING);
+
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_READY);
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_PLAYING);
+
+    gst_element_set_state (element, GST_STATE_PAUSED);
+    gst_element_set_state (element, GST_STATE_READY);
+    gst_element_set_state (element, GST_STATE_NULL);
+    gst_object_unref (GST_OBJECT (element));
+  }
+}
+
+GST_END_TEST;
+
+Suite *
+states_suite (void)
+{
+  Suite *s = suite_create ("states_ugly");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_checked_fixture (tc_chain, setup, teardown);
+  tcase_add_test (tc_chain, test_state_changes_up_and_down_seq);
+  tcase_add_test (tc_chain, test_state_changes_up_seq);
+  tcase_add_test (tc_chain, test_state_changes_down_seq);
+
+  return s;
+}
+
+GST_CHECK_MAIN (states);
diff --git a/subprojects/gst-plugins-ugly/tests/check/gst-plugins-ugly.supp b/subprojects/gst-plugins-ugly/tests/check/gst-plugins-ugly.supp
new file mode 100644 (file)
index 0000000..d73d186
--- /dev/null
@@ -0,0 +1,190 @@
+### amrnb suppressions
+### these should/could be submitted to amrnb
+
+{
+   <amrnb>
+   Memcheck:Cond
+   fun:Encoder_Interface_Encode
+   fun:gst_amrnbenc_chain
+   fun:gst_pad_chain
+   fun:gst_pad_push
+}
+
+{
+   <amrnb>
+   Memcheck:Cond
+   fun:Speech_Encode_Frame
+   fun:Encoder_Interface_Encode
+   fun:gst_amrnbenc_chain
+   fun:gst_pad_chain
+   fun:gst_pad_push
+}
+
+{
+   <amrnb>
+   Memcheck:Cond
+   obj:/usr/lib/libamrnb.so*
+   fun:Speech_Encode_Frame
+   fun:Encoder_Interface_Encode
+   fun:gst_amrnbenc_chain
+   fun:gst_pad_chain
+   fun:gst_pad_push
+}
+
+{
+   <amrnb>
+   Memcheck:Cond
+   obj:/usr/lib/libamrnb.so*
+   obj:/usr/lib/libamrnb.so*
+   fun:Speech_Encode_Frame
+   fun:Encoder_Interface_Encode
+   fun:gst_amrnbenc_chain
+   fun:gst_pad_chain
+   fun:gst_pad_push
+}
+
+{
+   <amrnb>
+   Memcheck:Cond
+   obj:/usr/lib/libamrnb.so*
+   obj:/usr/lib/libamrnb.so*
+   obj:/usr/lib/libamrnb.so*
+   fun:Speech_Encode_Frame
+   fun:Encoder_Interface_Encode
+   fun:gst_amrnbenc_chain
+   fun:gst_pad_chain
+   fun:gst_pad_push
+}
+
+{
+   <amrnb acos>
+   Memcheck:Cond
+   fun:acos
+   obj:/usr/lib/libamrnb.so*
+   obj:/usr/lib/libamrnb.so*
+   fun:Speech_Encode_Frame
+   fun:Encoder_Interface_Encode
+   fun:gst_amrnbenc_chain
+   fun:gst_pad_chain
+   fun:gst_pad_push
+}
+
+{
+   <AMR encoder>
+   Memcheck:Cond
+   fun:Levinson
+   fun:Speech_Encode_Frame
+   fun:Encoder_Interface_Encode
+}
+
+{
+   <AMR encoder>
+   Memcheck:Cond
+   fun:Az_lsp
+   fun:Speech_Encode_Frame
+   fun:Encoder_Interface_Encode
+}
+
+{
+   <AMR encoder>
+   Memcheck:Cond
+   fun:acos
+   fun:Lsp_lsf
+   fun:Speech_Encode_Frame
+   fun:Encoder_Interface_Encode
+}
+
+{
+   <AMR encoder>
+   Memcheck:Cond
+   fun:Lsf_wt
+   fun:Speech_Encode_Frame
+   fun:Encoder_Interface_Encode
+}
+{
+   <AMR encoder>
+   Memcheck:Cond
+   fun:Vq_subvec
+   fun:Speech_Encode_Frame
+   fun:Encoder_Interface_Encode
+}
+
+{
+   <AMR encoder>
+   Memcheck:Cond
+   fun:Lag_max
+   fun:Pitch_ol
+   fun:ol_ltp
+   fun:Speech_Encode_Frame
+   fun:Encoder_Interface_Encode
+}
+
+{
+   <AMR encoder>
+   Memcheck:Cond
+   fun:Pitch_ol
+   fun:ol_ltp
+   fun:Speech_Encode_Frame
+   fun:Encoder_Interface_Encode
+}
+
+{
+   <AMR encoder>
+   Memcheck:Cond
+   fun:cl_ltp
+   fun:Speech_Encode_Frame
+   fun:Encoder_Interface_Encode
+}
+
+{
+   <AMR encoder>
+   Memcheck:Cond
+   fun:searchFrac
+   fun:cl_ltp
+   fun:Speech_Encode_Frame
+   fun:Encoder_Interface_Encode
+}
+
+{
+   <AMR encoder>
+   Memcheck:Cond
+   fun:q_gain_pitch
+   fun:cl_ltp
+   fun:Speech_Encode_Frame
+   fun:Encoder_Interface_Encode
+}
+
+{
+   <AMR encoder>
+   Memcheck:Cond
+   fun:set_sign12k2
+   fun:code_10i40_35bits
+   fun:cbsearch
+   fun:Speech_Encode_Frame
+   fun:Encoder_Interface_Encode
+}
+
+{
+   <AMR encoder>
+   Memcheck:Cond
+   fun:code_10i40_35bits
+   fun:cbsearch
+   fun:Speech_Encode_Frame
+   fun:Encoder_Interface_Encode
+}
+
+{
+   <AMR encoder>
+   Memcheck:Cond
+   fun:gainQuant
+   fun:Speech_Encode_Frame
+   fun:Encoder_Interface_Encode
+}
+
+{
+   <AMR encoder on FC4>
+   Memcheck:Value2
+   obj:/usr/lib/libamrnb.so.0.0.0
+   fun:Speech_Encode_Frame
+   fun:Encoder_Interface_Encode
+}
diff --git a/subprojects/gst-plugins-ugly/tests/check/meson.build b/subprojects/gst-plugins-ugly/tests/check/meson.build
new file mode 100644 (file)
index 0000000..2c3ecb1
--- /dev/null
@@ -0,0 +1,81 @@
+# name, condition when to skip the test and extra dependencies
+ugly_tests = [
+  [ 'elements/x264enc', not x264_dep.found(), [ x264_dep, gmodule_dep ] ],
+  [ 'elements/xingmux' ],
+  [ 'generic/states' ],
+]
+
+# FIXME: unistd dependency or not tested yet on windows
+if host_machine.system() != 'windows'
+  ugly_tests += [
+    [ 'elements/amrnbenc', not amrnb_dep.found() ],
+    [ 'elements/mpeg2dec', not mpeg2_dep.found() or not cdata.has('HAVE_UNISTD_H'), [ gstvideo_dep ] ],
+  ]
+endif
+
+test_defines = [
+  '-UG_DISABLE_ASSERT',
+  '-UG_DISABLE_CAST_CHECKS',
+  '-DGST_CHECK_TEST_ENVIRONMENT_BEACON="GST_PLUGIN_LOADING_WHITELIST"',
+  '-DGST_TEST_FILES_PATH="' + meson.current_source_dir() + '/../files"',
+  '-DGST_USE_UNSTABLE_API',
+]
+
+pluginsdirs = []
+if gst_dep.type_name() == 'pkgconfig'
+  pbase = dependency('gstreamer-plugins-base-' + api_version, required: true)
+  pluginsdirs = [gst_dep.get_pkgconfig_variable('pluginsdir'),
+                 pbase.get_pkgconfig_variable('pluginsdir')]
+  gst_plugin_scanner_dir = gst_dep.get_pkgconfig_variable('pluginscannerdir')
+else
+  gst_plugin_scanner_dir = subproject('gstreamer').get_variable('gst_scanner_dir')
+endif
+gst_plugin_scanner_path = join_paths(gst_plugin_scanner_dir, 'gst-plugin-scanner')
+
+test_deps = [gst_dep, gstbase_dep, gstcheck_dep, gstaudio_dep, gstapp_dep,
+             gstfft_dep, gstvideo_dep, gstpbutils_dep]
+
+libm = cc.find_library('m', required : false)
+
+# FIXME: valgrind_args: add suppressions $(top_srcdir)/common/gst.supp $(srcdir)/gst-plugins-ugly.supp
+
+no_warn_args = []
+foreach arg : [
+  '-Wno-missing-prototypes',
+  '-Wno-missing-declarations',
+  '-Wno-old-style-definition']
+  if cc.has_argument(arg)
+    no_warn_args += [arg]
+  endif
+endforeach
+
+foreach t : ugly_tests
+  fname = '@0@.c'.format(t.get(0))
+  test_name = t.get(0).underscorify()
+  extra_deps = [ ]
+  if t.length() == 3
+    extra_deps = t.get(2)
+    skip_test = t.get(1)
+  elif t.length() == 2
+    skip_test = t.get(1)
+  else
+    skip_test = false
+  endif
+  if not skip_test
+    exe = executable(test_name, fname,
+      include_directories : [configinc],
+      c_args : ['-DHAVE_CONFIG_H=1' ] + test_defines + no_warn_args,
+      dependencies : [libm] + test_deps + extra_deps,
+    )
+
+    env = environment()
+    env.set('GST_PLUGIN_SYSTEM_PATH_1_0', '')
+    env.set('CK_DEFAULT_TIMEOUT', '20')
+    env.set('GST_PLUGIN_LOADING_WHITELIST', 'gstreamer', 'gst-plugins-base',
+      'gst-plugins-good', 'gst-plugins-ugly@' + meson.build_root())
+    env.set('GST_PLUGIN_PATH_1_0', [meson.build_root()] + pluginsdirs)
+    env.set('GST_REGISTRY', join_paths(meson.current_build_dir(), '@0@.registry'.format(test_name)))
+    env.set('GST_PLUGIN_SCANNER_1_0', gst_plugin_scanner_path)
+    test(test_name, exe, env: env, timeout: 3 * 60)
+  endif
+endforeach
diff --git a/subprojects/gst-plugins-ugly/tests/meson.build b/subprojects/gst-plugins-ugly/tests/meson.build
new file mode 100644 (file)
index 0000000..3714641
--- /dev/null
@@ -0,0 +1,3 @@
+if not get_option('tests').disabled() and gstcheck_dep.found()
+  subdir('check')
+endif
diff --git a/tests/check/elements/amrnbenc.c b/tests/check/elements/amrnbenc.c
deleted file mode 100644 (file)
index 3875e80..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * GStreamer
- *
- * unit test for amrnbenc
- *
- * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <gst/check/gstcheck.h>
-#include <gst/audio/audio.h>
-
-#define SRC_CAPS "audio/x-raw, format = (string)" GST_AUDIO_NE (S16) ", " \
-    "layout = (string) interleaved, channels = (int) 1, rate = (int) 8000"
-#define SINK_CAPS "audio/AMR"
-
-static GstPad *srcpad, *sinkpad;
-
-static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (SINK_CAPS)
-    );
-
-static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (SRC_CAPS)
-    );
-
-static void
-buffer_unref (void *buffer, void *user_data)
-{
-  gst_buffer_unref (GST_BUFFER (buffer));
-}
-
-static GstElement *
-setup_amrnbenc (void)
-{
-  GstElement *amrnbenc;
-  GstCaps *caps;
-  GstBus *bus;
-
-  GST_DEBUG ("setup_amrnbenc");
-
-  amrnbenc = gst_check_setup_element ("amrnbenc");
-  srcpad = gst_check_setup_src_pad (amrnbenc, &srctemplate);
-  sinkpad = gst_check_setup_sink_pad (amrnbenc, &sinktemplate);
-  gst_pad_set_active (srcpad, TRUE);
-  gst_pad_set_active (sinkpad, TRUE);
-
-  bus = gst_bus_new ();
-  gst_element_set_bus (amrnbenc, bus);
-
-  fail_unless (gst_element_set_state (amrnbenc,
-          GST_STATE_PLAYING) != GST_STATE_CHANGE_FAILURE,
-      "could not set to playing");
-
-  caps = gst_caps_from_string (SRC_CAPS);
-  gst_check_setup_events (srcpad, amrnbenc, caps, GST_FORMAT_TIME);
-  gst_caps_unref (caps);
-
-  buffers = NULL;
-  return amrnbenc;
-}
-
-static void
-cleanup_amrnbenc (GstElement * amrnbenc)
-{
-  GstBus *bus;
-
-  /* free encoded buffers */
-  g_list_foreach (buffers, buffer_unref, NULL);
-  g_list_free (buffers);
-  buffers = NULL;
-
-  bus = GST_ELEMENT_BUS (amrnbenc);
-  gst_bus_set_flushing (bus, TRUE);
-  gst_object_unref (bus);
-
-  GST_DEBUG ("cleanup_amrnbenc");
-  gst_pad_set_active (srcpad, FALSE);
-  gst_pad_set_active (sinkpad, FALSE);
-  gst_check_teardown_src_pad (amrnbenc);
-  gst_check_teardown_sink_pad (amrnbenc);
-  gst_check_teardown_element (amrnbenc);
-}
-
-/* push a random block of audio of the given size */
-static void
-push_data (gint size, GstFlowReturn expected_return)
-{
-  GstBuffer *buffer;
-  GstFlowReturn res;
-
-  buffer = gst_buffer_new_and_alloc (size);
-  /* make valgrind happier */
-  gst_buffer_memset (buffer, 0, 0, size);
-
-  res = gst_pad_push (srcpad, buffer);
-  fail_unless (res == expected_return,
-      "pushing audio returned %d (%s) not %d (%s)", res,
-      gst_flow_get_name (res), expected_return,
-      gst_flow_get_name (expected_return));
-}
-
-GST_START_TEST (test_enc)
-{
-  GstElement *amrnbenc;
-
-  amrnbenc = setup_amrnbenc ();
-  push_data (1000, GST_FLOW_OK);
-
-  cleanup_amrnbenc (amrnbenc);
-}
-
-GST_END_TEST;
-
-static Suite *
-amrnbenc_suite ()
-{
-  Suite *s = suite_create ("amrnbenc");
-  TCase *tc_chain = tcase_create ("general");
-
-  suite_add_tcase (s, tc_chain);
-  tcase_add_test (tc_chain, test_enc);
-  return s;
-}
-
-GST_CHECK_MAIN (amrnbenc);
diff --git a/tests/check/elements/mpeg2dec.c b/tests/check/elements/mpeg2dec.c
deleted file mode 100644 (file)
index 1c8030f..0000000
+++ /dev/null
@@ -1,1971 +0,0 @@
-/* GStreamer
- *
- * unit test for mpeg2dec
- *
- * Copyright (c) 2006 Sebastian Dröge <slomo@circular-chaos.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <unistd.h>
-
-#include <gst/check/gstcheck.h>
-#include <gst/video/video-info.h>
-
-/* For ease of programming we use globals to keep refs for our floating
- * src and sink pads we create; otherwise we always have to do get_pad,
- * get_peer, and then remove references in every test function */
-static GstPad *mysrcpad, *mysinkpad;
-
-/* mpeg2 video created with gst-launch-0.10 videotestsrc num-buffers=32 pattern=blue ! "video/x-raw,format=(string)I420,width=176,height=144,framerate=(fraction)25/1" ! ffenc_mpeg2video ! filesink location=test.mpg
-*/
-
-static const guint8 test_stream1[] = {
-  0x00, 0x00, 0x01, 0xb3, 0x0b, 0x00, 0x90, 0x13,
-  0xff, 0xff, 0xe0, 0x28, 0x00, 0x00, 0x01, 0xb5,
-  0x14, 0x8a, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
-  0x01, 0xb8, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x0f, 0xff, 0xf8, 0x00, 0x00,
-  0x01, 0xb5, 0x8f, 0xff, 0xf3, 0x41, 0x80, 0x00,
-  0x00, 0x01, 0x01, 0x13, 0xf8, 0xe5, 0x29, 0x4b,
-  0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
-  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
-  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x88, 0x00, 0x00, 0x01, 0x02, 0x13, 0xf8, 0xe5,
-  0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
-  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x03, 0x13,
-  0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
-  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01,
-  0x04, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb,
-  0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
-  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00,
-  0x00, 0x01, 0x05, 0x13, 0xf8, 0xe5, 0x29, 0x4b,
-  0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
-  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
-  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x88, 0x00, 0x00, 0x01, 0x06, 0x13, 0xf8, 0xe5,
-  0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
-  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x07, 0x13,
-  0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
-  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01,
-  0x08, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb,
-  0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
-  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00,
-  0x00, 0x01, 0x09, 0x13, 0xf8, 0xe5, 0x29, 0x4b,
-  0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
-  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
-  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x88, 0x00, 0x00, 0x01, 0x00, 0x00, 0x57, 0xff,
-  0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f,
-  0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00,
-  0x97, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
-  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
-  0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x00, 0x00, 0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00,
-  0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00,
-  0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x00, 0x01, 0x17, 0xff, 0xfb, 0x80,
-  0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
-  0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x00, 0x01, 0x57, 0xff,
-  0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f,
-  0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x01,
-  0x97, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
-  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
-  0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x00, 0x01, 0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00,
-  0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00,
-  0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x00, 0x02, 0x17, 0xff, 0xfb, 0x80,
-  0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
-  0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x00, 0x02, 0x57, 0xff,
-  0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f,
-  0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x02,
-  0x97, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
-  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
-  0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x00, 0x02, 0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00,
-  0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00,
-  0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00,
-  0x00, 0x01, 0x00, 0x03, 0x17, 0xff, 0xfb, 0x80,
-  0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
-  0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3,
-  0x80, 0x00, 0x00, 0x01, 0x00, 0x03, 0x57, 0xff,
-  0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f,
-  0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12,
-  0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x03,
-  0x97, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
-  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
-  0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0xb3, 0x0b, 0x00, 0x90, 0x13, 0xff, 0xff, 0xe0,
-  0x28, 0x00, 0x00, 0x01, 0xb5, 0x14, 0x8a, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb8, 0x00,
-  0x08, 0x07, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00,
-  0x0f, 0xff, 0xf8, 0x00, 0x00, 0x01, 0xb5, 0x8f,
-  0xff, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
-  0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
-  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00,
-  0x01, 0x02, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7,
-  0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
-  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88,
-  0x00, 0x00, 0x01, 0x03, 0x13, 0xf8, 0xe5, 0x29,
-  0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
-  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
-  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x88, 0x00, 0x00, 0x01, 0x04, 0x13, 0xf8,
-  0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
-  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x05,
-  0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
-  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00,
-  0x01, 0x06, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7,
-  0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
-  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88,
-  0x00, 0x00, 0x01, 0x07, 0x13, 0xf8, 0xe5, 0x29,
-  0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
-  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
-  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x88, 0x00, 0x00, 0x01, 0x08, 0x13, 0xf8,
-  0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
-  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x09,
-  0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
-  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x57, 0xff, 0xfb, 0x80, 0x00,
-  0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
-  0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x00, 0x00, 0x97, 0xff, 0xfb,
-  0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3,
-  0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0xd7,
-  0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
-  0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00,
-  0x01, 0x17, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01,
-  0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00,
-  0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x00, 0x01, 0x57, 0xff, 0xfb, 0x80, 0x00,
-  0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
-  0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x00, 0x01, 0x97, 0xff, 0xfb,
-  0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3,
-  0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x01, 0xd7,
-  0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
-  0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00,
-  0x02, 0x17, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01,
-  0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00,
-  0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x00, 0x02, 0x57, 0xff, 0xfb, 0x80, 0x00,
-  0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
-  0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x00, 0x02, 0x97, 0xff, 0xfb,
-  0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3,
-  0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x00, 0x02, 0xd7,
-  0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
-  0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x02,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x03,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x04,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x05,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x06,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x07,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x08,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x09,
-  0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01, 0x00,
-  0x03, 0x17, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01,
-  0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00,
-  0x01, 0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x09, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00,
-  0x01, 0x00, 0x03, 0x57, 0xff, 0xfb, 0x80, 0x00,
-  0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
-  0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x07, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xb3, 0x80,
-  0x00, 0x00, 0x01, 0x00, 0x03, 0x97, 0xff, 0xfb,
-  0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3,
-  0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x06, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70,
-  0xb3, 0x80, 0x00, 0x00, 0x01, 0xb3, 0x0b, 0x00,
-  0x90, 0x13, 0xff, 0xff, 0xe0, 0x28, 0x00, 0x00,
-  0x01, 0xb5, 0x14, 0x8a, 0x00, 0x01, 0x00, 0x00,
-  0x00, 0x00, 0x01, 0xb8, 0x00, 0x08, 0x22, 0x80,
-  0x00, 0x00, 0x01, 0x00, 0x00, 0x0f, 0xff, 0xf8,
-  0x00, 0x00, 0x01, 0xb5, 0x8f, 0xff, 0xf3, 0x41,
-  0x80, 0x00, 0x00, 0x01, 0x01, 0x13, 0xf8, 0xe5,
-  0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
-  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x02, 0x13,
-  0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
-  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01,
-  0x03, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb,
-  0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
-  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00,
-  0x00, 0x01, 0x04, 0x13, 0xf8, 0xe5, 0x29, 0x4b,
-  0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
-  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
-  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x88, 0x00, 0x00, 0x01, 0x05, 0x13, 0xf8, 0xe5,
-  0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
-  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x06, 0x13,
-  0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
-  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x88, 0x00, 0x00, 0x01,
-  0x07, 0x13, 0xf8, 0xe5, 0x29, 0x4b, 0xf7, 0xfb,
-  0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
-  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x88, 0x00,
-  0x00, 0x01, 0x08, 0x13, 0xf8, 0xe5, 0x29, 0x4b,
-  0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
-  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
-  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x88, 0x00, 0x00, 0x01, 0x09, 0x13, 0xf8, 0xe5,
-  0x29, 0x4b, 0xf7, 0xfb, 0xca, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
-  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x88, 0x00, 0x00, 0x01, 0x00, 0x00,
-  0x57, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
-  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
-  0x01, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x02, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x03, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x04, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x05, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x06, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x07, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x08, 0x12, 0x70, 0xb3, 0x80, 0x00, 0x00, 0x01,
-  0x09, 0x12, 0x70, 0xb3, 0x80,
-};
-
-static const guint test_stream_sizes[] = {
-  497, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
-  497, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
-  497, 90
-};
-
-/* mpeg2 video created with gst-launch-0.10 videotestsrc num-buffers=32 pattern=blue ! "video/x-raw,format=(string)I420,width=183,height=217,framerate=(fraction)25/1" ! ffenc_mpeg2video ! filesink location=test.mpg
-*/
-
-static const guint8 test_stream2[] = {
-  0x00, 0x00, 0x01, 0xb3, 0x0b, 0x70, 0xd9, 0x13,
-  0xff, 0xff, 0xe0, 0x28, 0x00, 0x00, 0x01, 0xb5,
-  0x14, 0x8a, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
-  0x01, 0xb8, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x0f, 0xff, 0xf8, 0x00, 0x00,
-  0x01, 0xb5, 0x8f, 0xff, 0xf3, 0x41, 0x80, 0x00,
-  0x00, 0x01, 0x01, 0x23, 0xf9, 0x45, 0x29, 0x4b,
-  0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
-  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
-  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
-  0x02, 0x23, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
-  0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
-  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x03, 0x23,
-  0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
-  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x20, 0x00, 0x00, 0x01, 0x04, 0x23, 0xf9, 0x45,
-  0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
-  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
-  0x00, 0x01, 0x05, 0x23, 0xf9, 0x45, 0x29, 0x4b,
-  0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
-  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
-  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
-  0x06, 0x23, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
-  0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
-  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x07, 0x23,
-  0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
-  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x20, 0x00, 0x00, 0x01, 0x08, 0x23, 0xf9, 0x45,
-  0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
-  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
-  0x00, 0x01, 0x09, 0x23, 0xf9, 0x45, 0x29, 0x4b,
-  0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
-  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
-  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
-  0x0a, 0x23, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
-  0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
-  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x0b, 0x23,
-  0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
-  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x20, 0x00, 0x00, 0x01, 0x0c, 0x23, 0xf9, 0x45,
-  0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
-  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
-  0x00, 0x01, 0x0d, 0x23, 0xf9, 0x45, 0x29, 0x4b,
-  0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
-  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
-  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
-  0x0e, 0x23, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
-  0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
-  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x00, 0x00,
-  0x57, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
-  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
-  0x01, 0x1a, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
-  0x1a, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x1a,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x1a, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x05, 0x1a, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x06, 0x1a, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x07, 0x1a, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x08, 0x1a, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x09, 0x1a, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
-  0x1a, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x1a,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x1a, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x0d, 0x1a, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x0e, 0x1a, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x00, 0x00, 0x97, 0xff, 0xfb, 0x80,
-  0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
-  0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x00,
-  0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
-  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
-  0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x00, 0x01, 0x17, 0xff, 0xfb, 0x80,
-  0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
-  0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x01,
-  0x57, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
-  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
-  0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x00, 0x01, 0x97, 0xff, 0xfb, 0x80,
-  0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
-  0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x01,
-  0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
-  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
-  0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x00, 0x02, 0x17, 0xff, 0xfb, 0x80,
-  0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
-  0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x02,
-  0x57, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
-  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
-  0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x00, 0x02, 0x97, 0xff, 0xfb, 0x80,
-  0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
-  0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x02,
-  0xd7, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
-  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
-  0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x00, 0x03, 0x17, 0xff, 0xfb, 0x80,
-  0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
-  0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x03,
-  0x57, 0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5,
-  0x81, 0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
-  0x01, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x09, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x00, 0x03, 0x97, 0xff, 0xfb, 0x80,
-  0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41,
-  0x80, 0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0xb3, 0x0b,
-  0x70, 0xd9, 0x13, 0xff, 0xff, 0xe0, 0x28, 0x00,
-  0x00, 0x01, 0xb5, 0x14, 0x8a, 0x00, 0x01, 0x00,
-  0x00, 0x00, 0x00, 0x01, 0xb8, 0x00, 0x08, 0x07,
-  0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0f, 0xff,
-  0xf8, 0x00, 0x00, 0x01, 0xb5, 0x8f, 0xff, 0xf3,
-  0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x13, 0xf9,
-  0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
-  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20,
-  0x00, 0x00, 0x01, 0x02, 0x13, 0xf9, 0x45, 0x29,
-  0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
-  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
-  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00,
-  0x01, 0x03, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7,
-  0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
-  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
-  0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x04,
-  0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
-  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
-  0x22, 0x20, 0x00, 0x00, 0x01, 0x05, 0x13, 0xf9,
-  0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
-  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20,
-  0x00, 0x00, 0x01, 0x06, 0x13, 0xf9, 0x45, 0x29,
-  0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
-  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
-  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00,
-  0x01, 0x07, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7,
-  0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
-  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
-  0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x08,
-  0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
-  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
-  0x22, 0x20, 0x00, 0x00, 0x01, 0x09, 0x13, 0xf9,
-  0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
-  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20,
-  0x00, 0x00, 0x01, 0x0a, 0x13, 0xf9, 0x45, 0x29,
-  0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
-  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
-  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00,
-  0x01, 0x0b, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7,
-  0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
-  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
-  0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x0c,
-  0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
-  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
-  0x22, 0x20, 0x00, 0x00, 0x01, 0x0d, 0x13, 0xf9,
-  0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
-  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20,
-  0x00, 0x00, 0x01, 0x0e, 0x13, 0xf9, 0x45, 0x29,
-  0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
-  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
-  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x57, 0xff, 0xfb, 0x80, 0x00,
-  0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
-  0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x00, 0x97,
-  0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
-  0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0xd7, 0xff, 0xfb, 0x80, 0x00,
-  0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
-  0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x01, 0x17,
-  0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
-  0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x00, 0x01, 0x57, 0xff, 0xfb, 0x80, 0x00,
-  0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
-  0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x01, 0x97,
-  0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
-  0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x00, 0x01, 0xd7, 0xff, 0xfb, 0x80, 0x00,
-  0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
-  0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x02, 0x17,
-  0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
-  0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x00, 0x02, 0x57, 0xff, 0xfb, 0x80, 0x00,
-  0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
-  0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x02, 0x97,
-  0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
-  0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x00, 0x02, 0xd7, 0xff, 0xfb, 0x80, 0x00,
-  0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
-  0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x03, 0x17,
-  0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
-  0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x00, 0x03, 0x57, 0xff, 0xfb, 0x80, 0x00,
-  0x00, 0x01, 0xb5, 0x81, 0x1f, 0xf3, 0x41, 0x80,
-  0x00, 0x00, 0x01, 0x01, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x02, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x03, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x04, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x05,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x06, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x07, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x08, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x09, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x0a, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x0b, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x0c, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0d,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0e, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x03, 0x97,
-  0xff, 0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81,
-  0x1f, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x08, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0xb3, 0x0b, 0x70, 0xd9, 0x13, 0xff, 0xff,
-  0xe0, 0x28, 0x00, 0x00, 0x01, 0xb5, 0x14, 0x8a,
-  0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb8,
-  0x00, 0x08, 0x22, 0x80, 0x00, 0x00, 0x01, 0x00,
-  0x00, 0x0f, 0xff, 0xf8, 0x00, 0x00, 0x01, 0xb5,
-  0x8f, 0xff, 0xf3, 0x41, 0x80, 0x00, 0x00, 0x01,
-  0x01, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
-  0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
-  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x02, 0x13,
-  0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
-  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x20, 0x00, 0x00, 0x01, 0x03, 0x13, 0xf9, 0x45,
-  0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
-  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
-  0x00, 0x01, 0x04, 0x13, 0xf9, 0x45, 0x29, 0x4b,
-  0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
-  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
-  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
-  0x05, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
-  0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
-  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x06, 0x13,
-  0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
-  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x20, 0x00, 0x00, 0x01, 0x07, 0x13, 0xf9, 0x45,
-  0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
-  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
-  0x00, 0x01, 0x08, 0x13, 0xf9, 0x45, 0x29, 0x4b,
-  0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
-  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
-  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
-  0x09, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
-  0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
-  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x0a, 0x13,
-  0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
-  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x20, 0x00, 0x00, 0x01, 0x0b, 0x13, 0xf9, 0x45,
-  0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22,
-  0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e,
-  0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00,
-  0x00, 0x01, 0x0c, 0x13, 0xf9, 0x45, 0x29, 0x4b,
-  0xf7, 0x0b, 0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5,
-  0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52,
-  0x94, 0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29,
-  0x48, 0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94,
-  0x88, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x20, 0x00, 0x00, 0x01,
-  0x0d, 0x13, 0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b,
-  0xcd, 0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48,
-  0x8b, 0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88,
-  0xb9, 0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b,
-  0x94, 0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x20, 0x00, 0x00, 0x01, 0x0e, 0x13,
-  0xf9, 0x45, 0x29, 0x4b, 0xf7, 0x0b, 0xcd, 0xb9,
-  0x4a, 0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94,
-  0xa5, 0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a,
-  0x52, 0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5,
-  0x22, 0x2e, 0x52, 0x94, 0x88, 0xb9, 0x4a, 0x52,
-  0x22, 0xe5, 0x29, 0x48, 0x8b, 0x94, 0xa5, 0x22,
-  0x20, 0x00, 0x00, 0x01, 0x00, 0x00, 0x57, 0xff,
-  0xfb, 0x80, 0x00, 0x00, 0x01, 0xb5, 0x81, 0x1f,
-  0xf3, 0x41, 0x80, 0x00, 0x00, 0x01, 0x01, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x02, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x03, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x04, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x05, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x06, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01,
-  0x07, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5,
-  0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x08,
-  0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb,
-  0x85, 0xe6, 0xc0, 0x00, 0x00, 0x01, 0x09, 0x12,
-  0x70, 0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85,
-  0xe6, 0xc0, 0x00, 0x00, 0x01, 0x0a, 0x12, 0x70,
-  0xa1, 0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6,
-  0xc0, 0x00, 0x00, 0x01, 0x0b, 0x12, 0x70, 0xa1,
-  0xfc, 0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0,
-  0x00, 0x00, 0x01, 0x0c, 0x12, 0x70, 0xa1, 0xfc,
-  0xa2, 0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00,
-  0x00, 0x01, 0x0d, 0x12, 0x70, 0xa1, 0xfc, 0xa2,
-  0x94, 0xa5, 0xfb, 0x85, 0xe6, 0xc0, 0x00, 0x00,
-  0x01, 0x0e, 0x12, 0x70, 0xa1, 0xfc, 0xa2, 0x94,
-  0xa5, 0xfb, 0x85, 0xe6, 0xc0
-};
-
-static const guint test_stream2_sizes[] = {
-  803, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
-  803, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
-  803, 228
-};
-
-
-static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS_ANY);
-static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/mpeg, "
-        "systemstream=(boolean)false, " "mpegversion=(int)2")
-    );
-
-GstElement *
-setup_mpeg2dec ()
-{
-  GstElement *mpeg2dec;
-  GstCaps *caps;
-
-  GST_DEBUG ("setup_mpeg2dec");
-  mpeg2dec = gst_check_setup_element ("mpeg2dec");
-  mysrcpad = gst_check_setup_src_pad (mpeg2dec, &srctemplate);
-  mysinkpad = gst_check_setup_sink_pad (mpeg2dec, &sinktemplate);
-  gst_pad_set_active (mysrcpad, TRUE);
-  gst_pad_set_active (mysinkpad, TRUE);
-
-  caps = gst_caps_new_simple ("video/mpeg",
-      "systemstream", G_TYPE_BOOLEAN, FALSE,
-      "mpegversion", G_TYPE_INT, 2, NULL);
-  gst_check_setup_events (mysrcpad, mpeg2dec, caps, GST_FORMAT_TIME);
-  gst_caps_unref (caps);
-
-  return mpeg2dec;
-}
-
-void
-cleanup_mpeg2dec (GstElement * mpeg2dec)
-{
-  GST_DEBUG ("cleanup_mpeg2dec");
-  gst_element_set_state (mpeg2dec, GST_STATE_NULL);
-
-  gst_pad_set_active (mysrcpad, FALSE);
-  gst_pad_set_active (mysinkpad, FALSE);
-  gst_check_teardown_src_pad (mpeg2dec);
-  gst_check_teardown_sink_pad (mpeg2dec);
-  gst_check_teardown_element (mpeg2dec);
-}
-
-GST_START_TEST (test_decode_stream1)
-{
-  GstElement *mpeg2dec;
-  GstBuffer *inbuffer, *outbuffer;
-  GstBus *bus;
-  int i, num_buffers;
-  GstCaps *out_caps, *caps;
-  guint offset = 0;
-  GstVideoInfo info;
-
-  mpeg2dec = setup_mpeg2dec ();
-
-  fail_unless (gst_element_set_state (mpeg2dec,
-          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
-      "could not set to playing");
-  bus = gst_bus_new ();
-
-  gst_element_set_bus (mpeg2dec, bus);
-
-  for (i = 0; i < G_N_ELEMENTS (test_stream_sizes); i++) {
-    inbuffer =
-        gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY,
-        (guint8 *) test_stream1 + offset, test_stream_sizes[i], 0,
-        test_stream_sizes[i], NULL, NULL);
-    offset += test_stream_sizes[i];
-    ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
-    gst_buffer_ref (inbuffer);
-    /* should decode the buffer without problems */
-    fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
-
-    gst_buffer_unref (inbuffer);
-  }
-
-  num_buffers = g_list_length (buffers);
-
-  /* should be 30 buffers, one per decoded frame */
-  fail_unless_equals_int (num_buffers, 30);
-
-  /* each buffer should have these caps */
-  gst_video_info_init (&info);
-  gst_video_info_set_format (&info, GST_VIDEO_FORMAT_I420, 176, 144);
-  GST_VIDEO_INFO_PAR_N (&info) = GST_VIDEO_INFO_PAR_D (&info) = 1;
-  GST_VIDEO_INFO_FPS_N (&info) = 25;
-  GST_VIDEO_INFO_FPS_D (&info) = 1;
-  GST_VIDEO_INFO_FPS_D (&info) = 1;
-  GST_VIDEO_INFO_CHROMA_SITE (&info) = GST_VIDEO_CHROMA_SITE_MPEG2;
-  gst_video_colorimetry_from_string (&GST_VIDEO_INFO_COLORIMETRY (&info),
-      "2:0:0:0");
-  GST_VIDEO_INFO_MULTIVIEW_MODE (&info) = GST_VIDEO_MULTIVIEW_MODE_MONO;
-
-  out_caps = gst_video_info_to_caps (&info);
-
-  caps = gst_pad_get_current_caps (mysinkpad);
-  GST_LOG ("output caps %" GST_PTR_FORMAT, caps);
-  fail_unless (gst_caps_is_equal_fixed (caps, out_caps), "Incorrect out caps");
-  gst_caps_unref (caps);
-
-  for (i = 0; i < num_buffers; ++i) {
-    outbuffer = GST_BUFFER (buffers->data);
-    fail_if (outbuffer == NULL);
-
-    /* I420 with 176x144 should have this size if nothing else was negotiated */
-    fail_unless_equals_int (gst_buffer_get_size (outbuffer), 38016);
-
-    buffers = g_list_remove (buffers, outbuffer);
-    gst_buffer_unref (outbuffer);
-    outbuffer = NULL;
-  }
-
-  gst_caps_unref (out_caps);
-  g_list_free (buffers);
-  buffers = NULL;
-
-  gst_bus_set_flushing (bus, TRUE);
-  gst_element_set_bus (mpeg2dec, NULL);
-  gst_object_unref (GST_OBJECT (bus));
-  cleanup_mpeg2dec (mpeg2dec);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_decode_stream2)
-{
-  GstElement *mpeg2dec;
-  GstBuffer *inbuffer, *outbuffer;
-  GstBus *bus;
-  int i, num_buffers;
-  GstCaps *out_caps;
-  GstCaps *caps;
-  guint offset = 0;
-  GstVideoInfo info;
-
-  mpeg2dec = setup_mpeg2dec ();
-
-  fail_unless (gst_element_set_state (mpeg2dec,
-          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
-      "could not set to playing");
-  bus = gst_bus_new ();
-
-  gst_element_set_bus (mpeg2dec, bus);
-
-  for (i = 0; i < G_N_ELEMENTS (test_stream2_sizes); i++) {
-    inbuffer =
-        gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY,
-        (guint8 *) test_stream2 + offset, test_stream2_sizes[i], 0,
-        test_stream2_sizes[i], NULL, NULL);
-    offset += test_stream2_sizes[i];
-    ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
-    gst_buffer_ref (inbuffer);
-    /* should decode the buffer without problems */
-    fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
-
-    gst_buffer_unref (inbuffer);
-  }
-
-
-  num_buffers = g_list_length (buffers);
-
-  /* should be 30 buffers, one per decoded frame */
-  fail_unless_equals_int (num_buffers, 30);
-
-  /* each buffer should have these caps */
-  gst_video_info_init (&info);
-  gst_video_info_set_format (&info, GST_VIDEO_FORMAT_I420, 183, 217);
-  GST_VIDEO_INFO_PAR_N (&info) = GST_VIDEO_INFO_PAR_D (&info) = 1;
-  GST_VIDEO_INFO_FPS_N (&info) = 25;
-  GST_VIDEO_INFO_FPS_D (&info) = 1;
-  GST_VIDEO_INFO_FPS_D (&info) = 1;
-  GST_VIDEO_INFO_CHROMA_SITE (&info) = GST_VIDEO_CHROMA_SITE_MPEG2;
-  gst_video_colorimetry_from_string (&GST_VIDEO_INFO_COLORIMETRY (&info),
-      "2:0:0:0");
-  GST_VIDEO_INFO_MULTIVIEW_MODE (&info) = GST_VIDEO_MULTIVIEW_MODE_MONO;
-
-  out_caps = gst_video_info_to_caps (&info);
-
-  caps = gst_pad_get_current_caps (mysinkpad);
-  GST_LOG ("output caps %" GST_PTR_FORMAT, caps);
-  GST_LOG ("expected caps %" GST_PTR_FORMAT, out_caps);
-  fail_unless (gst_caps_is_equal_fixed (caps, out_caps), "Incorrect out caps");
-  gst_caps_unref (caps);
-
-  for (i = 0; i < num_buffers; ++i) {
-    outbuffer = GST_BUFFER (buffers->data);
-    fail_if (outbuffer == NULL);
-
-    /* I420 with 183x217 must have this size */
-    fail_unless_equals_int (gst_buffer_get_size (outbuffer), 60168);
-
-    buffers = g_list_remove (buffers, outbuffer);
-    gst_buffer_unref (outbuffer);
-    outbuffer = NULL;
-  }
-
-  gst_caps_unref (out_caps);
-  g_list_free (buffers);
-  buffers = NULL;
-
-  gst_bus_set_flushing (bus, TRUE);
-  gst_element_set_bus (mpeg2dec, NULL);
-  gst_object_unref (GST_OBJECT (bus));
-  cleanup_mpeg2dec (mpeg2dec);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_decode_garbage)
-{
-  GstElement *mpeg2dec;
-  GstBuffer *inbuffer;
-  GstBus *bus;
-  int i, num_buffers;
-  guint32 *tmpbuf;
-
-  mpeg2dec = setup_mpeg2dec ();
-
-  fail_unless (gst_element_set_state (mpeg2dec,
-          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
-      "could not set to playing");
-  bus = gst_bus_new ();
-
-  /* initialize the buffer with something that is no mpeg2 */
-  tmpbuf = g_new (guint32, 4096);
-  for (i = 0; i < 4096; i++) {
-    tmpbuf[i] = i;
-  }
-  inbuffer = gst_buffer_new_wrapped (tmpbuf, 4096 * sizeof (guint32));
-
-  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
-  gst_buffer_ref (inbuffer);
-
-  gst_element_set_bus (mpeg2dec, bus);
-
-  /* should be possible to push without problems but nothing gets decoded */
-  fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
-
-  gst_buffer_unref (inbuffer);
-
-  num_buffers = g_list_length (buffers);
-
-  /* should be 0 buffers as decoding should've been impossible */
-  fail_unless_equals_int (num_buffers, 0);
-
-  g_list_free (buffers);
-  buffers = NULL;
-
-  gst_bus_set_flushing (bus, TRUE);
-  gst_element_set_bus (mpeg2dec, NULL);
-  gst_object_unref (GST_OBJECT (bus));
-  cleanup_mpeg2dec (mpeg2dec);
-}
-
-GST_END_TEST;
-Suite *
-mpeg2dec_suite (void)
-{
-  Suite *s = suite_create ("mpeg2dec");
-  TCase *tc_chain = tcase_create ("general");
-
-  suite_add_tcase (s, tc_chain);
-  tcase_add_test (tc_chain, test_decode_stream1);
-  tcase_add_test (tc_chain, test_decode_stream2);
-  tcase_add_test (tc_chain, test_decode_garbage);
-
-  return s;
-}
-
-GST_CHECK_MAIN (mpeg2dec);
diff --git a/tests/check/elements/x264enc.c b/tests/check/elements/x264enc.c
deleted file mode 100644 (file)
index 27f8fdf..0000000
+++ /dev/null
@@ -1,416 +0,0 @@
-/* GStreamer
- *
- * unit test for x264enc
- *
- * Copyright (C) <2008> Mark Nauwelaerts <mnauw@users.sf.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <gst/check/gstcheck.h>
-#include <gst/video/video.h>
-
-/* For ease of programming we use globals to keep refs for our floating
- * src and sink pads we create; otherwise we always have to do get_pad,
- * get_peer, and then remove references in every test function */
-static GstPad *mysrcpad, *mysinkpad;
-
-#define VIDEO_CAPS_STRING "video/x-raw, " \
-                           "width = (int) 384, " \
-                           "height = (int) 288, " \
-                           "framerate = (fraction) 25/1"
-
-#define H264_CAPS_STRING "video/x-h264, " \
-                           "width = (int) 384, " \
-                           "height = (int) 288, " \
-                           "framerate = (fraction) 25/1"
-
-static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (VIDEO_CAPS_STRING));
-
-static void cleanup_x264enc (GstElement * x264enc);
-
-static GstElement *
-setup_x264enc (const gchar * profile, const gchar * stream_format,
-    GstVideoFormat input_format)
-{
-  GstPadTemplate *sink_tmpl, *tmpl;
-  GstElement *x264enc;
-  GstCaps *caps, *tmpl_caps;
-
-  GST_DEBUG ("setup_x264enc");
-
-  caps = gst_caps_from_string (H264_CAPS_STRING);
-  gst_caps_set_simple (caps, "profile", G_TYPE_STRING, profile,
-      "stream-format", G_TYPE_STRING, stream_format, NULL);
-  sink_tmpl = gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, caps);
-  gst_caps_unref (caps);
-
-  x264enc = gst_check_setup_element ("x264enc");
-  mysrcpad = gst_check_setup_src_pad (x264enc, &srctemplate);
-  mysinkpad = gst_check_setup_sink_pad_from_template (x264enc, sink_tmpl);
-  gst_pad_set_active (mysrcpad, TRUE);
-  gst_pad_set_active (mysinkpad, TRUE);
-
-  caps = gst_caps_from_string (VIDEO_CAPS_STRING);
-  gst_caps_set_simple (caps, "format", G_TYPE_STRING,
-      gst_video_format_to_string (input_format), NULL);
-
-  tmpl = gst_element_get_pad_template (x264enc, "sink");
-  tmpl_caps = gst_pad_template_get_caps (tmpl);
-
-  if (gst_caps_can_intersect (caps, tmpl_caps)) {
-    gst_check_setup_events (mysrcpad, x264enc, caps, GST_FORMAT_TIME);
-  } else {
-    cleanup_x264enc (x264enc);
-    x264enc = NULL;
-  }
-
-  gst_caps_unref (tmpl_caps);
-  gst_caps_unref (caps);
-  gst_object_unref (sink_tmpl);
-
-  return x264enc;
-}
-
-static void
-cleanup_x264enc (GstElement * x264enc)
-{
-  GST_DEBUG ("cleanup_x264enc");
-  gst_element_set_state (x264enc, GST_STATE_NULL);
-
-  gst_pad_set_active (mysrcpad, FALSE);
-  gst_pad_set_active (mysinkpad, FALSE);
-  gst_check_teardown_src_pad (x264enc);
-  gst_check_teardown_sink_pad (x264enc);
-  gst_check_teardown_element (x264enc);
-}
-
-static void
-check_caps (GstCaps * caps, const gchar * profile, gint profile_id)
-{
-  GstStructure *s;
-  const GValue *sf, *avcc, *pf;
-  const gchar *stream_format;
-  const gchar *caps_profile;
-
-  fail_unless (caps != NULL);
-
-  GST_INFO ("caps %" GST_PTR_FORMAT, caps);
-  s = gst_caps_get_structure (caps, 0);
-  fail_unless (s != NULL);
-  fail_if (!gst_structure_has_name (s, "video/x-h264"));
-  sf = gst_structure_get_value (s, "stream-format");
-  fail_unless (sf != NULL);
-  fail_unless (G_VALUE_HOLDS_STRING (sf));
-  stream_format = g_value_get_string (sf);
-  fail_unless (stream_format != NULL);
-  if (strcmp (stream_format, "avc") == 0) {
-    GstMapInfo map;
-    GstBuffer *buf;
-
-    avcc = gst_structure_get_value (s, "codec_data");
-    fail_unless (avcc != NULL);
-    fail_unless (GST_VALUE_HOLDS_BUFFER (avcc));
-    buf = gst_value_get_buffer (avcc);
-    fail_unless (buf != NULL);
-    gst_buffer_map (buf, &map, GST_MAP_READ);
-    fail_unless_equals_int (map.data[0], 1);
-    fail_unless (map.data[1] == profile_id,
-        "Expected profile ID %#04x, got %#04x", profile_id, map.data[1]);
-    gst_buffer_unmap (buf, &map);
-  } else if (strcmp (stream_format, "byte-stream") == 0) {
-    fail_if (gst_structure_get_value (s, "codec_data") != NULL);
-  } else {
-    fail_if (TRUE, "unexpected stream-format in caps: %s", stream_format);
-  }
-
-  pf = gst_structure_get_value (s, "profile");
-  fail_unless (pf != NULL);
-  fail_unless (G_VALUE_HOLDS_STRING (pf));
-  caps_profile = g_value_get_string (pf);
-  fail_unless (caps_profile != NULL);
-  fail_unless (!strcmp (caps_profile, profile));
-}
-
-static const GstVideoFormat formats_420_8[] =
-    { GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_NV12,
-  GST_VIDEO_FORMAT_UNKNOWN
-};
-
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
-static const GstVideoFormat formats_420_10[] =
-    { GST_VIDEO_FORMAT_I420_10LE, GST_VIDEO_FORMAT_UNKNOWN };
-static const GstVideoFormat formats_422[] =
-    { GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_I422_10LE,
-  GST_VIDEO_FORMAT_UNKNOWN
-};
-
-static const GstVideoFormat formats_444[] =
-    { GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_Y444_10LE,
-  GST_VIDEO_FORMAT_UNKNOWN
-};
-#else
-static const GstVideoFormat formats_420_10[] =
-    { GST_VIDEO_FORMAT_I420_10BE, GST_VIDEO_FORMAT_UNKNOWN };
-static const GstVideoFormat formats_422[] =
-    { GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_I422_10BE,
-  GST_VIDEO_FORMAT_UNKNOWN
-};
-
-static const GstVideoFormat formats_444[] =
-    { GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_Y444_10BE,
-  GST_VIDEO_FORMAT_UNKNOWN
-};
-#endif
-
-static void
-test_video_profile (const gchar * profile, gint profile_id,
-    const GstVideoFormat input_formats[], gint input_format_index)
-{
-  GstVideoFormat input_format = input_formats[input_format_index];
-  GstElement *x264enc;
-  GstBuffer *inbuffer, *outbuffer;
-  int i, num_buffers;
-  GstVideoInfo vinfo;
-  GstCaps *caps;
-
-  fail_unless (gst_video_info_set_format (&vinfo, input_format, 384, 288));
-
-  x264enc = setup_x264enc (profile, "avc", input_format);
-  if (x264enc == NULL) {
-    g_printerr ("WARNING: input format '%s' not supported\n",
-        gst_video_format_to_string (input_format));
-    return;
-  }
-
-  fail_unless (gst_element_set_state (x264enc,
-          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
-      "could not set to playing");
-
-  /* check that we only accept input formats compatible with the output caps */
-  caps = gst_pad_peer_query_caps (mysrcpad, NULL);
-  for (i = 0; i < gst_caps_get_size (caps); i++) {
-    GstStructure *s = gst_caps_get_structure (caps, i);
-    const GValue *v, *vi;
-    guint vlen, j = 0;
-
-    v = gst_structure_get_value (s, "format");
-
-    if (G_VALUE_TYPE (v) == G_TYPE_STRING) {
-      vlen = 1;
-      vi = v;
-    } else if (G_VALUE_TYPE (v) == GST_TYPE_LIST) {
-      vlen = gst_value_list_get_size (v);
-      fail_unless (vlen > 0, "Got empty format list");
-      vi = gst_value_list_get_value (v, 0);
-    } else {
-      fail ("Bad format in structure: %" GST_PTR_FORMAT, s);
-      g_assert_not_reached ();
-    }
-
-    while (TRUE) {
-      const gchar *str = g_value_get_string (vi);
-      GstVideoFormat format = gst_video_format_from_string (str);
-      int k;
-
-      for (k = 0;; k++) {
-        fail_unless (input_formats[k] != GST_VIDEO_FORMAT_UNKNOWN,
-            "Bad format: %s", str);
-        if (input_formats[k] == format)
-          break;
-      }
-
-      if (++j < vlen)
-        vi = gst_value_list_get_value (v, j);
-      else
-        break;
-    }
-  }
-  gst_caps_unref (caps);
-
-  /* corresponds to buffer for the size mentioned in the caps */
-  inbuffer = gst_buffer_new_and_alloc (GST_VIDEO_INFO_SIZE (&vinfo));
-
-  /* makes valgrind's memcheck happier */
-  gst_buffer_memset (inbuffer, 0, 0, -1);
-  GST_BUFFER_TIMESTAMP (inbuffer) = 0;
-  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
-  fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
-
-  /* send eos to have all flushed if needed */
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()) == TRUE);
-
-  num_buffers = g_list_length (buffers);
-  fail_unless (num_buffers == 1);
-
-  /* check output caps */
-  {
-    GstCaps *outcaps;
-
-    outcaps = gst_pad_get_current_caps (mysinkpad);
-    check_caps (outcaps, profile, profile_id);
-    gst_caps_unref (outcaps);
-  }
-
-  /* validate buffers */
-  for (i = 0; i < num_buffers; ++i) {
-    outbuffer = GST_BUFFER (buffers->data);
-    fail_if (outbuffer == NULL);
-
-    switch (i) {
-      case 0:
-      {
-        gint nsize, npos, j, type, next_type;
-        GstMapInfo map;
-        const guint8 *data;
-        gsize size;
-
-        gst_buffer_map (outbuffer, &map, GST_MAP_READ);
-        data = map.data;
-        size = map.size;
-
-        npos = 0;
-        j = 0;
-        /* need SPS first */
-        next_type = 7;
-        /* loop through NALs */
-        while (npos < size) {
-          fail_unless (size - npos >= 4);
-          nsize = GST_READ_UINT32_BE (data + npos);
-          fail_unless (nsize > 0);
-          fail_unless (npos + 4 + nsize <= size);
-          type = data[npos + 4] & 0x1F;
-          /* check the first NALs, disregard AU (9), SEI (6) */
-          if (type != 9 && type != 6) {
-            fail_unless (type == next_type);
-            switch (type) {
-              case 7:
-                /* SPS */
-                next_type = 8;
-                break;
-              case 8:
-                /* PPS */
-                next_type = 5;
-                break;
-              default:
-                break;
-            }
-            j++;
-          }
-          npos += nsize + 4;
-        }
-        gst_buffer_unmap (outbuffer, &map);
-        /* should have reached the exact end */
-        fail_unless (npos == size);
-        break;
-      }
-      default:
-        break;
-    }
-
-    buffers = g_list_remove (buffers, outbuffer);
-
-    ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1);
-    gst_buffer_unref (outbuffer);
-    outbuffer = NULL;
-  }
-
-  cleanup_x264enc (x264enc);
-  g_list_free (buffers);
-  buffers = NULL;
-}
-
-GST_START_TEST (test_video_baseline)
-{
-  gint i;
-
-  for (i = 0; formats_420_8[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
-    test_video_profile ("constrained-baseline", 0x42, formats_420_8, i);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_video_main)
-{
-  gint i;
-
-  for (i = 0; formats_420_8[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
-    test_video_profile ("main", 0x4d, formats_420_8, i);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_video_high)
-{
-  gint i;
-
-  for (i = 0; formats_420_8[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
-    test_video_profile ("high", 0x64, formats_420_8, i);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_video_high10)
-{
-  gint i;
-
-  for (i = 0; formats_420_10[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
-    test_video_profile ("high-10", 0x6e, formats_420_10, i);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_video_high422)
-{
-  gint i;
-
-  for (i = 0; formats_422[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
-    test_video_profile ("high-4:2:2", 0x7A, formats_422, i);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_video_high444)
-{
-  gint i;
-
-  for (i = 0; formats_444[i] != GST_VIDEO_FORMAT_UNKNOWN; i++)
-    test_video_profile ("high-4:4:4", 0xF4, formats_444, i);
-}
-
-GST_END_TEST;
-
-Suite *
-x264enc_suite (void)
-{
-  Suite *s = suite_create ("x264enc");
-  TCase *tc_chain = tcase_create ("general");
-
-  suite_add_tcase (s, tc_chain);
-  tcase_add_test (tc_chain, test_video_baseline);
-  tcase_add_test (tc_chain, test_video_main);
-  tcase_add_test (tc_chain, test_video_high);
-  tcase_add_test (tc_chain, test_video_high10);
-  tcase_add_test (tc_chain, test_video_high422);
-  tcase_add_test (tc_chain, test_video_high444);
-
-  return s;
-}
-
-GST_CHECK_MAIN (x264enc);
diff --git a/tests/check/elements/xingmux.c b/tests/check/elements/xingmux.c
deleted file mode 100644 (file)
index b1fa510..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/* GStreamer
- *
- * Copyright (C) 2008 Sebastian Dröge <slomo@circular-chaos.org>
- *
- * xingmux.c: Unit test for the xingmux element
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- * 
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA
- */
-
-#include <gst/gst.h>
-#include <gst/base/gstbasetransform.h>
-#include <gst/check/gstcheck.h>
-
-#include <math.h>
-
-#include "xingmux_testdata.h"
-
-/* For ease of programming we use globals to keep refs for our floating
- * src and sink pads we create; otherwise we always have to do get_pad,
- * get_peer, and then remove references in every test function */
-GstPad *mysrcpad, *mysinkpad;
-
-static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/mpeg, " "mpegversion = (int) 1," "layer = (int) 3")
-    );
-static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
-    GST_PAD_SRC,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/mpeg, " "mpegversion = (int) 1," "layer = (int) 3")
-    );
-
-GstElement *
-setup_xingmux ()
-{
-  GstElement *xingmux;
-  GstCaps *caps;
-
-  GST_DEBUG ("setup_xingmux");
-  xingmux = gst_check_setup_element ("xingmux");
-  mysrcpad = gst_check_setup_src_pad (xingmux, &srctemplate);
-  mysinkpad = gst_check_setup_sink_pad (xingmux, &sinktemplate);
-  gst_pad_set_active (mysrcpad, TRUE);
-  gst_pad_set_active (mysinkpad, TRUE);
-
-  caps = gst_caps_new_simple ("audio/mpeg",
-      "mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 3, NULL);
-  gst_check_setup_events (mysrcpad, xingmux, caps, GST_FORMAT_TIME);
-  gst_caps_unref (caps);
-
-  return xingmux;
-}
-
-void
-cleanup_xingmux (GstElement * xingmux)
-{
-  GST_DEBUG ("cleanup_xingmux");
-
-  g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
-  g_list_free (buffers);
-  buffers = NULL;
-
-  gst_pad_set_active (mysrcpad, FALSE);
-  gst_pad_set_active (mysinkpad, FALSE);
-  gst_check_teardown_src_pad (xingmux);
-  gst_check_teardown_sink_pad (xingmux);
-  gst_check_teardown_element (xingmux);
-}
-
-GST_START_TEST (test_xing_remux)
-{
-  GstElement *xingmux;
-  GstBuffer *inbuffer;
-  GList *it;
-  const guint8 *verify_data;
-
-  xingmux = setup_xingmux ();
-
-  fail_unless (gst_element_set_state (xingmux,
-          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
-      "could not set to playing");
-
-  inbuffer = gst_buffer_new_and_alloc (sizeof (test_xing));
-  gst_buffer_fill (inbuffer, 0, test_xing, sizeof (test_xing));
-
-  ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
-
-  /* pushing gives away my reference ... */
-  fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
-  /* ... and puts a new buffer on the global list */
-  fail_unless_equals_int (g_list_length (buffers), 93);
-
-  verify_data = test_xing;
-  for (it = buffers; it != NULL; it = it->next) {
-    GstBuffer *outbuffer = (GstBuffer *) it->data;
-    GstMapInfo map;
-
-    gst_buffer_map (outbuffer, &map, GST_MAP_READ);
-
-    if (it == buffers) {
-      gint j;
-
-      /* Empty Xing header, should be the same as input data until the "Xing" marker
-       * and zeroes afterwards. */
-      fail_unless (memcmp (map.data, test_xing, 25) == 0);
-      for (j = 26; j < map.size; j++)
-        fail_unless (map.data[j] == 0);
-      verify_data += map.size;
-    } else if (it->next != NULL) {
-      /* Should contain the raw MP3 data without changes */
-      fail_unless (memcmp (map.data, verify_data, map.size) == 0);
-      verify_data += map.size;
-    } else {
-      /* Last buffer is the rewrite of the first buffer and should be exactly the same
-       * as the old Xing header we had */
-      fail_unless (memcmp (test_xing, map.data, map.size) == 0);
-    }
-    gst_buffer_unmap (outbuffer, &map);
-  }
-
-  /* cleanup */
-  cleanup_xingmux (xingmux);
-}
-
-GST_END_TEST;
-
-Suite *
-xingmux_suite (void)
-{
-  Suite *s = suite_create ("xingmux");
-  TCase *tc_chain = tcase_create ("general");
-
-  suite_add_tcase (s, tc_chain);
-  tcase_add_test (tc_chain, test_xing_remux);
-
-  return s;
-}
-
-GST_CHECK_MAIN (xingmux);
diff --git a/tests/check/elements/xingmux_testdata.h b/tests/check/elements/xingmux_testdata.h
deleted file mode 100644 (file)
index 2319ee2..0000000
+++ /dev/null
@@ -1,4777 +0,0 @@
-static const guint8 test_xing[] = {
-0xff, 0xfb, 0x30, 0xc4, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x69, 0x6e, 
-0x67, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 
-0x5c, 0x00, 0x00, 0x95, 0x2e, 0x00, 0x03, 0x06, 
-0x09, 0x0c, 0x0f, 0x11, 0x14, 0x17, 0x1a, 0x1d, 
-0x1f, 0x1f, 0x22, 0x25, 0x28, 0x2b, 0x2d, 0x30, 
-0x33, 0x36, 0x39, 0x3b, 0x3b, 0x3e, 0x41, 0x44, 
-0x47, 0x49, 0x4c, 0x4f, 0x52, 0x55, 0x57, 0x57, 
-0x5a, 0x5d, 0x60, 0x63, 0x65, 0x68, 0x6b, 0x6e, 
-0x71, 0x73, 0x73, 0x76, 0x79, 0x7c, 0x7f, 0x81, 
-0x84, 0x87, 0x8a, 0x8d, 0x8f, 0x8f, 0x92, 0x95, 
-0x98, 0x9b, 0x9d, 0xa0, 0xa3, 0xa6, 0xa9, 0xab, 
-0xab, 0xae, 0xb1, 0xb4, 0xb7, 0xb9, 0xbc, 0xbf, 
-0xc2, 0xc5, 0xc7, 0xc7, 0xca, 0xcd, 0xd0, 0xd3, 
-0xd5, 0xd8, 0xdb, 0xde, 0xe1, 0xe3, 0xe3, 0xe6, 
-0xe9, 0xec, 0xef, 0xf1, 0xf4, 0xf7, 0xfa, 0xfd, 
-0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0xff, 0xfb, 0x90, 0xc4, 
-0x00, 0x03, 0x8f, 0xd4, 0x59, 0x42, 0x6d, 0xe1, 
-0x27, 0x02, 0xde, 0x92, 0x67, 0x09, 0xed, 0x25, 
-0x29, 0x00, 0x00, 0x0a, 0x70, 0xcc, 0x4b, 0x4c, 
-0xac, 0xbc, 0xcc, 0x4a, 0xcc, 0xbd, 0x24, 0xd7, 
-0xce, 0xcc, 0xca, 0xa8, 0xf5, 0x2b, 0x8d, 0x80, 
-0xa8, 0xfd, 0x43, 0x9a, 0xc1, 0xcb, 0x43, 0x30, 
-0x10, 0xd0, 0x06, 0x91, 0x6a, 0x0e, 0xbb, 0xd9, 
-0x7b, 0x5c, 0x72, 0x1c, 0x87, 0x20, 0x0c, 0x02, 
-0x00, 0x80, 0x60, 0x50, 0x2b, 0x15, 0x8a, 0xc5, 
-0x62, 0xb2, 0x74, 0x68, 0xd1, 0xa0, 0x40, 0x81, 
-0x02, 0x04, 0x08, 0x18, 0x04, 0xc1, 0xf0, 0x7c, 
-0x1f, 0x07, 0xc1, 0x00, 0x40, 0x10, 0x04, 0x01, 
-0x30, 0x7c, 0x1f, 0x07, 0xc1, 0xf0, 0x40, 0x10, 
-0x04, 0x01, 0x03, 0x22, 0x70, 0xff, 0xe6, 0x4b, 
-0x87, 0xff, 0x97, 0x07, 0xc1, 0xfb, 0xbf, 0xc1, 
-0x00, 0x40, 0x10, 0x0c, 0x27, 0xfc, 0xb8, 0x3e, 
-0x0f, 0x83, 0xe1, 0xf0, 0x40, 0x10, 0x04, 0x01, 
-0x04, 0x89, 0xc1, 0xf0, 0x7e, 0xe2, 0x80, 0x80, 
-0x34, 0x60, 0x02, 0x05, 0x06, 0x08, 0xa0, 0xa0, 
-0x60, 0xba, 0x0f, 0x06, 0x11, 0xa0, 0xf8, 0x61, 
-0x0e, 0x25, 0x06, 0x51, 0xab, 0x64, 0x67, 0xb4, 
-0x1b, 0x66, 0x12, 0x01, 0x3a, 0x60, 0xf0, 0x0a, 
-0x26, 0x06, 0x20, 0x90, 0x70, 0x53, 0x1a, 0x38, 
-0x80, 0x12, 0x86, 0x3c, 0x51, 0x87, 0x0c, 0x61, 
-0x41, 0x18, 0x10, 0x00, 0x10, 0x05, 0xc1, 0x2f, 
-0x0a, 0x0e, 0xa4, 0x4a, 0x82, 0xaa, 0x55, 0x8a, 
-0xbb, 0x56, 0x15, 0x87, 0x33, 0xa6, 0x74, 0xe5, 
-0x00, 0x20, 0x04, 0x00, 0x80, 0x10, 0x06, 0x04, 
-0x41, 0x10, 0x44, 0x11, 0x14, 0x8a, 0x45, 0x22, 
-0x91, 0x48, 0xa8, 0x54, 0x2a, 0x15, 0x13, 0x22, 
-0x44, 0x88, 0x89, 0x0a, 0x14, 0x28, 0x50, 0xa1, 
-0x42, 0x85, 0x0a, 0x24, 0x48, 0x91, 0x22, 0x44, 
-0x89, 0x12, 0x25, 0x41, 0x41, 0x41, 0x41, 0x42, 
-0x82, 0x82, 0x82, 0x82, 0x41, 0x41, 0x41, 0x41, 
-0x42, 0x82, 0x82, 0x82, 0x82, 0x41, 0x41, 0x41, 
-0x41, 0x42, 0x82, 0x82, 0x82, 0x82, 0x41, 0x41, 
-0x41, 0x41, 0x42, 0x82, 0x82, 0x82, 0x82, 0x41, 
-0x41, 0x41, 0x41, 0x42, 0x82, 0x82, 0x82, 0x82, 
-0x41, 0x41, 0x41, 0x41, 0x42, 0x82, 0x82, 0x82, 
-0x82, 0x41, 0x41, 0x41, 0x41, 0x42, 0x82, 0x82, 
-0x82, 0x82, 0x41, 0x41, 0x41, 0x41, 0x42, 0x95, 
-0x32, 0x88, 0xad, 0x32, 0xe4, 0xdc, 0x34, 0x09, 
-0x55, 0x36, 0xd6, 0x8e, 0x30, 0xf8, 0x87, 0xdd, 
-0x36, 0x72, 0xfd, 0x01, 0x36, 0x47, 0x87, 0xab, 
-0x30, 0xe7, 0xc2, 0x26, 0x30, 0x42, 0x80, 0x71, 
-0x30, 0x0e, 0xc0, 0x94, 0x36, 0xa3, 0x8c, 0xe3, 
-0x3b, 0x43, 0x5f, 0xa1, 0x8c, 0x50, 0x07, 0x43, 
-0x67, 0x16, 0x5d, 0xe2, 0x17, 0xf6, 0xbf, 0xdd, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xbf, 0xff, 0xe9, 0x30, 0x05, 0xc0, 0x37, 0x30, 
-0x1e, 0x80, 0x9e, 0x30, 0x3d, 0x41, 0x33, 0x30, 
-0x73, 0x82, 0x72, 0x31, 0x0c, 0xff, 0xfb, 0x92, 
-0xc4, 0x2a, 0x83, 0xc8, 0x60, 0x25, 0x16, 0x0e, 
-0xff, 0x82, 0x81, 0x27, 0x85, 0x22, 0xc1, 0xff, 
-0xec, 0x90, 0xc7, 0x7f, 0x36, 0xd8, 0xb9, 0x6d, 
-0x36, 0xaf, 0xc7, 0x81, 0x31, 0x13, 0x02, 0xaa, 
-0x30, 0x83, 0x41, 0xbb, 0x30, 0x49, 0x41, 0x3b, 
-0x30, 0x44, 0x81, 0x14, 0x30, 0x45, 0x41, 0xd5, 
-0x3a, 0xf8, 0xf3, 0x22, 0x06, 0x47, 0xf6, 0xb8, 
-0xff, 0xc3, 0x94, 0x99, 0x9c, 0xed, 0xfa, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xd6, 0x32, 0x84, 0xae, 0x32, 0xd8, 0xe3, 
-0x33, 0xed, 0x5e, 0x36, 0x9a, 0xa1, 0x30, 0xf0, 
-0xc8, 0x12, 0x36, 0x3e, 0x3e, 0x9e, 0x36, 0x14, 
-0xc7, 0xe2, 0x30, 0xdf, 0x02, 0x3d, 0x30, 0x3d, 
-0xc0, 0x84, 0x30, 0x12, 0x00, 0x87, 0x36, 0xfb, 
-0x60, 0xe4, 0x1a, 0x73, 0x62, 0x20, 0x4c, 0x56, 
-0x04, 0x43, 0x57, 0x1a, 0x5a, 0xb0, 0xe7, 0x52, 
-0x3d, 0x3f, 0xfd, 0xdf, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xa0, 0xc0, 0x26, 0x00, 0xe0, 0xc0, 
-0x97, 0x02, 0xbc, 0xc1, 0x22, 0x05, 0x50, 0xc2, 
-0x23, 0x0a, 0xdc, 0xc4, 0xea, 0x21, 0x18, 0xe0, 
-0x01, 0xfd, 0x18, 0xdf, 0x3e, 0x21, 0x28, 0xc5, 
-0x05, 0x0b, 0xec, 0xc2, 0x60, 0x07, 0xe0, 0xc1, 
-0x4e, 0x05, 0xb8, 0xc1, 0x35, 0x05, 0x1c, 0xc1, 
-0x34, 0x08, 0xa0, 0xf1, 0x2a, 0x8c, 0xac, 0x35, 
-0x00, 0x0c, 0xed, 0xd8, 0x87, 0xe9, 0xec, 0x3d, 
-0x5f, 0xea, 0xff, 0x57, 0xff, 0xff, 0xff, 0xff, 
-0xf7, 0xd7, 0xff, 0xff, 0xff, 0xf5, 0x26, 0x20, 
-0xa6, 0xa2, 0x99, 0x97, 0x1c, 0x9b, 0xd5, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x32, 0x20, 0x97, 
-0x32, 0x64, 0xc6, 0x33, 0x41, 0x39, 0x35, 0x86, 
-0x5a, 0x30, 0xca, 0x87, 0x43, 0x35, 0x4a, 0xf8, 
-0x53, 0x35, 0x27, 0x07, 0x17, 0x30, 0xbb, 0x42, 
-0x04, 0x30, 0x30, 0x80, 0x81, 0x30, 0x11, 0xc0, 
-0x68, 0x36, 0x42, 0xcc, 0xe0, 0x36, 0x03, 0x56, 
-0x9a, 0x00, 0x44, 0x54, 0xd6, 0x75, 0x67, 0x94, 
-0x12, 0xeb, 0xfa, 0x0c, 0x02, 0xf0, 0x0b, 0xcc, 
-0x09, 0xe0, 0x29, 0x0c, 0x12, 0xd0, 0x51, 0xcc, 
-0x23, 0x00, 0xa7, 0x0c, 0x50, 0x91, 0xff, 0x4e, 
-0x0c, 0x0f, 0x42, 0xcd, 0xff, 0xb2, 0x00, 0xcc, 
-0x52, 0x00, 0xb9, 0x8c, 0x26, 0x90, 0x7d, 0x4c, 
-0x14, 0xd0, 0x5c, 0xcc, 0x12, 0xc0, 0x53, 0x0c, 
-0x12, 0x90, 0x8d, 0xce, 0xf6, 0xc4, 0xc9, 0x83, 
-0x90, 0x7d, 0x9c, 0x3f, 0xf0, 0xe5, 0x25, 0xff, 
-0xfb, 0x92, 0xc4, 0xaa, 0x83, 0xc8, 0x18, 0x23, 
-0x16, 0x0e, 0xff, 0x82, 0x81, 0x2d, 0x85, 0x22, 
-0x81, 0xff, 0xec, 0x90, 0xbe, 0x5b, 0xbf, 0xff, 
-0xf6, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x8f, 0xff, 
-0xfa, 0x3f, 0xd1, 0xf6, 0xe8, 0x4c, 0x41, 0x4d, 
-0x45, 0x33, 0x2e, 0x39, 0x37, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x32, 
-0x1c, 0x98, 0x32, 0x50, 0xcb, 0x33, 0x25, 0x3e, 
-0x35, 0x4a, 0x6b, 0x30, 0xc3, 0x47, 0x6c, 0x35, 
-0x19, 0x39, 0x9a, 0x34, 0xf6, 0xc7, 0x42, 0x30, 
-0xb2, 0x82, 0x17, 0x30, 0x2c, 0x40, 0x90, 0x30, 
-0x14, 0x80, 0x5d, 0x36, 0x7a, 0xa0, 0xe1, 0x15, 
-0x33, 0x59, 0x19, 0x40, 0x44, 0xa4, 0xd5, 0x75, 
-0xa7, 0x56, 0x1c, 0xea, 0xfa, 0x7f, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x18, 0x07, 
-0x00, 0x12, 0x18, 0x14, 0xa0, 0x4d, 0x98, 0x26, 
-0x80, 0x9c, 0x18, 0x47, 0xa1, 0x41, 0x98, 0xa4, 
-0x83, 0xd7, 0x1c, 0x2e, 0xfd, 0x5c, 0x1c, 0x15, 
-0x83, 0xdc, 0x18, 0xa7, 0x21, 0x68, 0x98, 0x4d, 
-0x80, 0xf7, 0x18, 0x29, 0x00, 0xba, 0x18, 0x24, 
-0xa0, 0xaa, 0x98, 0x23, 0xc1, 0x21, 0x1d, 0x95, 
-0xa1, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6, 
-0xc8, 0x23, 0x18, 0x0e, 0xff, 0x82, 0x81, 0x33, 
-0x05, 0x62, 0x81, 0xff, 0xec, 0x90, 0x92, 0x87, 
-0xa0, 0xe3, 0x3b, 0x76, 0x21, 0xfa, 0x7b, 0x0f, 
-0x56, 0x8f, 0xab, 0xfd, 0x54, 0x7f, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xd4, 0x98, 
-0x82, 0x9a, 0x8a, 0x66, 0x5c, 0x72, 0x6e, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0x32, 0x18, 0x99, 0x32, 0x44, 0xce, 0x33, 
-0x01, 0x47, 0x35, 0x16, 0x78, 0x30, 0xba, 0x87, 
-0x97, 0x34, 0xe5, 0x7a, 0xcf, 0x34, 0xc3, 0x87, 
-0x6d, 0x30, 0xaa, 0x42, 0x26, 0x30, 0x27, 0x00, 
-0xa1, 0x30, 0x17, 0x40, 0x4e, 0x36, 0xb2, 0x7c, 
-0xe1, 0xf4, 0x43, 0x5b, 0x97, 0x80, 0xc4, 0x94, 
-0xd6, 0x75, 0x67, 0x86, 0x13, 0xeb, 0xfa, 0x3f, 
-0xe8, 0x30, 0x10, 0x40, 0x1b, 0x30, 0x2b, 0x00, 
-0x90, 0x30, 0x4f, 0x41, 0x2b, 0x30, 0x92, 0x02, 
-0x68, 0x31, 0x4f, 0xc7, 0x5f, 0x38, 0x88, 0xb8, 
-0x4d, 0x38, 0x54, 0xc7, 0x6b, 0x31, 0x54, 0x02, 
-0xba, 0x30, 0x9c, 0xc1, 0xeb, 0x30, 0x51, 0x41, 
-0x79, 0x30, 0x46, 0x81, 0x5a, 0x30, 0x44, 0xc2, 
-0x4f, 0x3a, 0xbb, 0x93, 0x22, 0x10, 0x41, 0xf6, 
-0x70, 0xed, 0xc6, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
-0x83, 0xc7, 0xe4, 0x23, 0x18, 0x0e, 0xff, 0x82, 
-0x81, 0x2f, 0x05, 0x22, 0x81, 0xff, 0xec, 0x90, 
-0x29, 0x2d, 0xf2, 0xdd, 0xfe, 0x8f, 0xfb, 0x6f, 
-0xff, 0xff, 0xff, 0xff, 0xf4, 0x7f, 0xff, 0xd1, 
-0xfe, 0x8f, 0xb7, 0x42, 0x62, 0x0a, 0x6a, 0x29, 
-0x99, 0x71, 0xc9, 0xbd, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x32, 0x14, 0x98, 0x32, 0x30, 
-0xd3, 0x32, 0xe5, 0x4c, 0x34, 0xda, 0x85, 0x30, 
-0xb2, 0x47, 0xbc, 0x34, 0xae, 0xbb, 0xf0, 0x34, 
-0x8e, 0xc7, 0x94, 0x30, 0xa1, 0x02, 0x37, 0x30, 
-0x21, 0xc0, 0xae, 0x30, 0x19, 0x80, 0x43, 0x36, 
-0xea, 0x58, 0xe2, 0x93, 0x53, 0x5d, 0x16, 0xc0, 
-0xc4, 0xe4, 0xd5, 0x75, 0xa4, 0x2b, 0x67, 0x52, 
-0x0c, 0x05, 0x60, 0x05, 0x0c, 0x0d, 0x10, 0x27, 
-0x4c, 0x17, 0x40, 0x51, 0x0c, 0x2a, 0xb0, 0xa8, 
-0x4c, 0x61, 0x82, 0x02, 0x0e, 0x79, 0xbf, 0x50, 
-0x8e, 0x6a, 0x82, 0x06, 0x0c, 0x62, 0x90, 0xc1, 
-0xcc, 0x2d, 0x20, 0x8a, 0x8c, 0x17, 0x20, 0x6c, 
-0x8c, 0x13, 0xb0, 0x65, 0x4c, 0x12, 0xc0, 0xac, 
-0x8e, 0xf3, 0x68, 0xc9, 0xc5, 0xcb, 0xb8, 0xc3, 
-0xdd, 0x87, 0xfe, 0x5f, 0x60, 0xff, 0xfb, 0x92, 
-0xc4, 0xff, 0x83, 0xc7, 0x00, 0x23, 0x18, 0x0e, 
-0xff, 0x82, 0x81, 0x36, 0x85, 0x62, 0x81, 0xff, 
-0xec, 0x90, 0xfa, 0xb2, 0x5f, 0x7f, 0xaf, 0xaa, 
-0x8f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfd, 0xff, 
-0xef, 0xff, 0x7f, 0xa9, 0x31, 0x05, 0x35, 0x14, 
-0xcc, 0xb8, 0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x32, 0x08, 0x9b, 
-0x32, 0x1c, 0xd4, 0x32, 0xc1, 0x53, 0x34, 0x9e, 
-0x90, 0x30, 0xa9, 0x87, 0xe1, 0x34, 0x76, 0x7c, 
-0xff, 0x34, 0x57, 0x87, 0xb9, 0x30, 0x98, 0x42, 
-0x46, 0x30, 0x1c, 0x00, 0xbd, 0x30, 0x1c, 0x40, 
-0x34, 0x37, 0x22, 0x34, 0xe3, 0x72, 0x43, 0x5f, 
-0x95, 0x01, 0x45, 0x14, 0xba, 0x75, 0x67, 0xb0, 
-0x15, 0x67, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x51, 
-0x80, 0xbe, 0x00, 0x39, 0x81, 0xac, 0x04, 0x71, 
-0x82, 0xfa, 0x09, 0x99, 0x85, 0x6c, 0x14, 0x01, 
-0x8c, 0x66, 0x3d, 0x29, 0xd0, 0x8d, 0xd2, 0x39, 
-0xce, 0x9e, 0x3d, 0xc9, 0x8c, 0x80, 0x17, 0x51, 
-0x85, 0xae, 0x11, 0x19, 0x82, 0xda, 0x0d, 0xa9, 
-0x82, 0x60, 0x0c, 0xd1, 0x82, 0x3e, 0x15, 0xff, 
-0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6, 0xa8, 0x23, 
-0x18, 0x0e, 0xff, 0x82, 0xa1, 0x3a, 0x05, 0x22, 
-0x41, 0xff, 0xec, 0x90, 0xf9, 0xd8, 0xf0, 0x99, 
-0x20, 0xc1, 0x77, 0xd8, 0x63, 0xb7, 0x0c, 0x4b, 
-0x2d, 0xb9, 0x6f, 0x91, 0xfb, 0xbd, 0x5d, 0x74, 
-0xff, 0xff, 0xff, 0xff, 0xef, 0x5b, 0x5d, 0xff, 
-0xff, 0x77, 0xfb, 0xbd, 0x69, 0x88, 0x29, 0xa8, 
-0xa6, 0x65, 0xc7, 0x26, 0xea, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x32, 
-0x04, 0x9a, 0x32, 0x08, 0xd7, 0x32, 0xa5, 0x58, 
-0x34, 0x52, 0x9d, 0x30, 0xa0, 0x48, 0x02, 0x34, 
-0x3b, 0xbd, 0xfa, 0x34, 0x1e, 0xc7, 0xda, 0x30, 
-0x8e, 0x02, 0x55, 0x30, 0x16, 0xc0, 0xca, 0x30, 
-0x1e, 0x80, 0x25, 0x37, 0x5a, 0x00, 0xe4, 0x11, 
-0x53, 0x60, 0x13, 0xc1, 0x45, 0x24, 0xb9, 0x75, 
-0xa4, 0x21, 0x76, 0x7a, 0x01, 0xc0, 0x78, 0x18, 
-0x20, 0x20, 0x4b, 0x98, 0x37, 0xc0, 0xa6, 0x18, 
-0x65, 0x21, 0x5b, 0x98, 0xe5, 0xc4, 0x21, 0x1d, 
-0xd2, 0xbf, 0x6c, 0x1d, 0xae, 0xc4, 0x2e, 0x18, 
-0xe7, 0x61, 0x9b, 0x98, 0x68, 0x41, 0x35, 0x18, 
-0x33, 0x80, 0xfc, 0x18, 0x2a, 0x20, 0xef, 0x98, 
-0x27, 0x01, 0x98, 0x1b, 0x02, 0x0c, 0x62, 0x91, 
-0x09, 0x67, 0x16, 0x1d, 0xac, 0x3f, 0xf1, 0xbb, 
-0x0f, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc8, 
-0x54, 0x25, 0x18, 0x0e, 0xff, 0x82, 0xa1, 0x3f, 
-0x05, 0x22, 0x41, 0xff, 0xec, 0x90, 0x53, 0xa1, 
-0xef, 0xbf, 0xd7, 0xfe, 0xef, 0xff, 0x5f, 0xd9, 
-0xfb, 0xff, 0xdf, 0x5a, 0x3e, 0xff, 0x57, 0x7f, 
-0xfb, 0xdd, 0xd4, 0x98, 0x82, 0x9a, 0x8a, 0x66, 
-0x5c, 0x72, 0x6f, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x31, 0xf8, 0x9b, 0x31, 0xf4, 0xd8, 0x32, 
-0x79, 0x5f, 0x34, 0x16, 0xa6, 0x30, 0x96, 0x88, 
-0x23, 0x33, 0xff, 0x7e, 0xe3, 0x33, 0xe3, 0x07, 
-0xfb, 0x30, 0x84, 0x42, 0x62, 0x30, 0x10, 0x00, 
-0xd9, 0x30, 0x20, 0xc0, 0x14, 0x37, 0x81, 0xdc, 
-0xe4, 0xb0, 0x23, 0x62, 0x92, 0x01, 0xc5, 0x54, 
-0xba, 0x79, 0x64, 0x41, 0x06, 0xdb, 0x5a, 0x46, 
-0x81, 0x06, 0x30, 0x41, 0x80, 0x86, 0x30, 0x71, 
-0xc1, 0x37, 0x30, 0xcd, 0x02, 0x8c, 0x31, 0xd2, 
-0x47, 0xc9, 0x3b, 0xce, 0xbb, 0x2b, 0x3b, 0x86, 
-0x47, 0xe5, 0x31, 0xd3, 0x83, 0x14, 0x30, 0xd1, 
-0x42, 0x61, 0x30, 0x65, 0xc1, 0xf9, 0x30, 0x50, 
-0x81, 0xe4, 0x30, 0x49, 0xc3, 0x3b, 0x35, 0xac, 
-0x2c, 0xc4, 0x82, 0x22, 0xd5, 0xae, 0x46, 0xb6, 
-0xfa, 0x4b, 0x2d, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
-0x83, 0xc6, 0xa8, 0x23, 0x18, 0x0e, 0xff, 0x82, 
-0xa1, 0x46, 0x85, 0x22, 0x01, 0xff, 0xf0, 0x90, 
-0xb8, 0xae, 0x47, 0xe3, 0x7d, 0x5d, 0x76, 0xfd, 
-0x8f, 0xf7, 0x7f, 0x7f, 0xfb, 0xbf, 0xb1, 0xd5, 
-0x7f, 0xf5, 0xf7, 0x7f, 0xbb, 0xd6, 0x98, 0x82, 
-0x9a, 0x8a, 0x66, 0x5c, 0x72, 0x6e, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0x31, 0xf4, 0x9a, 0x31, 0xe0, 
-0xdd, 0x32, 0x55, 0x62, 0x33, 0xca, 0xb1, 0x30, 
-0x8c, 0xc8, 0x3e, 0x33, 0xbf, 0xbf, 0xb8, 0x33, 
-0xa5, 0x48, 0x18, 0x30, 0x79, 0x82, 0x6f, 0x30, 
-0x09, 0x40, 0xe4, 0x30, 0x23, 0x00, 0x03, 0x37, 
-0xa9, 0xa8, 0xe5, 0x4f, 0x13, 0x63, 0x10, 0xc2, 
-0x0a, 0xc9, 0x72, 0xf3, 0x48, 0x42, 0xec, 0xf4, 
-0x18, 0x14, 0x40, 0x03, 0x98, 0x27, 0x20, 0x45, 
-0x98, 0x42, 0x00, 0xa5, 0x18, 0x76, 0xe1, 0x5d, 
-0x99, 0x0d, 0x44, 0x28, 0x1e, 0xcf, 0x7f, 0x86, 
-0x1e, 0xa5, 0x44, 0x3a, 0x19, 0x0d, 0xa1, 0xaf, 
-0x98, 0x77, 0xc1, 0x56, 0x18, 0x39, 0x41, 0x22, 
-0x18, 0x2c, 0x61, 0x18, 0x98, 0x27, 0x81, 0xdf, 
-0x18, 0x18, 0x40, 0x9c, 0x18, 0x05, 0x20, 0x15, 
-0x82, 0x00, 0x04, 0x02, 0x6e, 0xff, 0xfb, 0x92, 
-0xc4, 0xff, 0x83, 0xc6, 0xc8, 0x23, 0x18, 0x0e, 
-0xff, 0x82, 0xa1, 0x46, 0x85, 0x22, 0x01, 0xff, 
-0xf0, 0x90, 0x15, 0x01, 0x2f, 0x1e, 0xe5, 0x03, 
-0x76, 0xab, 0xce, 0xb3, 0x7c, 0x77, 0xf4, 0xaa, 
-0x95, 0xaf, 0xb7, 0xa6, 0xff, 0xec, 0xfb, 0xaa, 
-0xfa, 0xb7, 0x3e, 0x84, 0x7a, 0x9f, 0xd0, 0x9e, 
-0xff, 0xa7, 0x7f, 0xa9, 0x31, 0x05, 0x35, 0x14, 
-0xcc, 0xb8, 0xe4, 0xde, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x31, 0x98, 0x85, 
-0x31, 0x84, 0xbe, 0x31, 0xd9, 0x37, 0x33, 0x06, 
-0x60, 0x30, 0x71, 0x87, 0x51, 0x33, 0x10, 0x78, 
-0x9d, 0x32, 0xfa, 0x07, 0x31, 0x30, 0x60, 0xc2, 
-0x2a, 0x30, 0x00, 0x00, 0xcf, 0x1e, 0x03, 0xf8, 
-0xdb, 0x05, 0x13, 0x83, 0xb0, 0x0d, 0x5e, 0x30, 
-0x0c, 0x22, 0xa9, 0x27, 0x96, 0x7b, 0x02, 0x26, 
-0x05, 0x58, 0x03, 0x46, 0x09, 0xf0, 0x0e, 0xc6, 
-0x10, 0xc8, 0x25, 0xe6, 0x1e, 0x00, 0x51, 0x06, 
-0x44, 0x18, 0xf7, 0x67, 0xb8, 0xc7, 0x51, 0x27, 
-0xae, 0x28, 0xfc, 0x66, 0x44, 0x00, 0x66, 0x86, 
-0x1e, 0x08, 0x53, 0xe6, 0x0e, 0x18, 0x48, 0xa6, 
-0x0a, 0x80, 0x46, 0xc6, 0x09, 0x38, 0x79, 0x26, 
-0xb1, 0x9e, 0x98, 0x90, 0x58, 0x0d, 0x02, 0xa9, 
-0x43, 0x2b, 0x7d, 0x23, 0x13, 0xf6, 0x3a, 0xff, 
-0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6, 0xa4, 0x23, 
-0x18, 0x0e, 0xff, 0x82, 0xa1, 0x7a, 0x87, 0xa1, 
-0xc1, 0xff, 0xb4, 0x98, 0x05, 0xd8, 0xcf, 0x1b, 
-0xfe, 0xb6, 0xa3, 0xec, 0x7f, 0xff, 0xeb, 0xfd, 
-0x8d, 0xeb, 0xda, 0xea, 0xfe, 0x87, 0x7d, 0x75, 
-0x9c, 0xe9, 0x59, 0xf1, 0xd7, 0x74, 0x2d, 0x31, 
-0x05, 0x35, 0x14, 0xcc, 0xb8, 0xe4, 0xde, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x31, 
-0x94, 0x82, 0x31, 0x70, 0xc1, 0x31, 0xb5, 0x3a, 
-0x32, 0xc2, 0x69, 0x30, 0x68, 0x47, 0x64, 0x32, 
-0xd3, 0xb9, 0x38, 0x32, 0xbf, 0x47, 0x44, 0x30, 
-0x56, 0x82, 0x35, 0x10, 0x01, 0xb4, 0x10, 0x08, 
-0x61, 0xb7, 0x48, 0x87, 0x08, 0x57, 0x9a, 0xc0, 
-0x56, 0x1c, 0x46, 0x54, 0x2f, 0x34, 0xee, 0x75, 
-0x18, 0x1a, 0x00, 0x1b, 0x98, 0x2f, 0x20, 0x39, 
-0x98, 0x4e, 0x00, 0x9e, 0x18, 0x8a, 0xe1, 0x55, 
-0x99, 0x39, 0x84, 0x0f, 0x1f, 0xec, 0x7e, 0xa7, 
-0x1f, 0xbb, 0x44, 0x29, 0x19, 0x38, 0xe1, 0xbc, 
-0x98, 0x89, 0x01, 0x77, 0x18, 0x3f, 0x41, 0x4c, 
-0x18, 0x2d, 0xe1, 0x46, 0x98, 0x27, 0x02, 0x2f, 
-0x18, 0x17, 0x40, 0xb8, 0x18, 0x04, 0xe0, 0x1b, 
-0x83, 0x00, 0x08, 0x03, 0x2c, 0x26, 0x82, 0x4e, 
-0x39, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6, 
-0x4c, 0x25, 0x1a, 0x0e, 0xff, 0x82, 0xa9, 0x69, 
-0x85, 0xa1, 0xc1, 0xff, 0xf0, 0x90, 0xc9, 0x43, 
-0xed, 0x49, 0x4d, 0x9d, 0xff, 0xd4, 0xea, 0xfd, 
-0xd5, 0xfd, 0xd8, 0xe7, 0x7d, 0x48, 0xff, 0x5f, 
-0xf4, 0xff, 0xe5, 0x5e, 0x96, 0xfc, 0xff, 0xf5, 
-0x7f, 0xfd, 0xdb, 0x4d, 0xfd, 0x17, 0xd3, 0xe8, 
-0xbf, 0xef, 0xfd, 0x07, 0xfd, 0x3a, 0x4f, 0xb2, 
-0xbf, 0xfe, 0x09, 0xa9, 0x4c, 0x41, 0x4d, 0x45, 
-0x33, 0x2e, 0x39, 0x37, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0x31, 0x88, 0x83, 0x31, 0x5c, 0xc0, 0x31, 
-0x91, 0x3f, 0x32, 0x7e, 0x6e, 0x30, 0x5e, 0x07, 
-0x79, 0x32, 0x95, 0x79, 0xc1, 0x32, 0x82, 0x07, 
-0x59, 0x30, 0x4c, 0x42, 0x3c, 0x30, 0x04, 0xc0, 
-0xe3, 0x30, 0x23, 0x40, 0x07, 0x37, 0x00, 0xec, 
-0xe1, 0xa9, 0xc3, 0x59, 0x89, 0x04, 0x89, 0x2a, 
-0x89, 0xed, 0x93, 0xe0, 0x44, 0xc0, 0xdb, 0x01, 
-0x20, 0xc1, 0x7e, 0x01, 0x60, 0xc2, 0x77, 0x04, 
-0x6c, 0xc4, 0x60, 0x09, 0xb0, 0xc9, 0xe3, 0x1d, 
-0x94, 0xff, 0xf0, 0xde, 0xe4, 0xfe, 0x65, 0x1e, 
-0x74, 0xc9, 0xd6, 0x0d, 0x18, 0xc4, 0x47, 0x0b, 
-0x7c, 0xc1, 0xef, 0x0a, 0x5c, 0xc1, 0x5a, 0x0a, 
-0x48, 0xc1, 0x1d, 0x11, 0xa4, 0xc0, 0xa7, 0x05, 
-0xd4, 0xc0, 0x20, 0x00, 0xe0, 0x2a, 0x00, 0x48, 
-0x0e, 0xc0, 0x9b, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
-0x83, 0xc6, 0x24, 0x25, 0x1a, 0x0e, 0xff, 0x82, 
-0xa9, 0xbb, 0xb3, 0x61, 0x81, 0xf6, 0x89, 0xb8, 
-0x89, 0x20, 0xe4, 0x29, 0x9e, 0x4a, 0x8f, 0x9c, 
-0xd7, 0xfd, 0x68, 0x27, 0xfb, 0x69, 0xff, 0x5d, 
-0xad, 0xff, 0xd9, 0xed, 0xfb, 0xbf, 0xff, 0xff, 
-0xa7, 0xcb, 0xdb, 0xd7, 0xfe, 0xfd, 0x2c, 0xdd, 
-0x7e, 0xba, 0xd6, 0xdf, 0xa7, 0xcf, 0xd4, 0x46, 
-0x8a, 0x06, 0x9f, 0xc6, 0x5f, 0x4a, 0xd3, 0x10, 
-0x53, 0x51, 0x4c, 0xcb, 0x8e, 0x4d, 0xea, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0x31, 0x84, 0x82, 0x31, 0x40, 
-0xc3, 0x31, 0x6d, 0x40, 0x32, 0x32, 0x75, 0x30, 
-0x54, 0x47, 0x88, 0x32, 0x53, 0xba, 0x3a, 0x32, 
-0x42, 0x47, 0x6a, 0x30, 0x41, 0x02, 0x45, 0x30, 
-0x0b, 0x00, 0xec, 0x30, 0x24, 0x80, 0x16, 0x37, 
-0x28, 0xb8, 0xe1, 0xc8, 0xb3, 0x59, 0x07, 0xc4, 
-0x89, 0x4a, 0x85, 0xee, 0x93, 0x66, 0x58, 0xa9, 
-0xc8, 0x0c, 0x07, 0xc0, 0x0a, 0xcc, 0x0d, 0xd0, 
-0x06, 0x4c, 0x16, 0xe0, 0x21, 0x8c, 0x29, 0x30, 
-0x4f, 0xcc, 0x5d, 0xe0, 0xf9, 0x0e, 0x64, 0x37, 
-0x66, 0x8e, 0x55, 0x41, 0x02, 0x8c, 0x5d, 0x50, 
-0x71, 0xce, 0x7e, 0x67, 0x0d, 0x12, 0x5f, 0x0c, 
-0xb5, 0x5f, 0x4c, 0x8c, 0xa6, 0x0c, 0x4a, 0x34, 
-0x8c, 0x03, 0x05, 0xd2, 0xd1, 0xb9, 0xbe, 0x92, 
-0xb9, 0x7d, 0x8b, 0xff, 0x4f, 0xff, 0xfb, 0x92, 
-0xc4, 0xff, 0x83, 0xc6, 0x78, 0x25, 0x1a, 0x0e, 
-0xff, 0x82, 0xa9, 0xb2, 0x2c, 0x21, 0x81, 0xf6, 
-0x89, 0xb8, 0x5e, 0xfa, 0x3a, 0x51, 0x51, 0xe4, 
-0xaa, 0x8e, 0xa5, 0x29, 0x20, 0x30, 0x71, 0x3f, 
-0xff, 0xff, 0xff, 0x7f, 0xff, 0xd5, 0xff, 0xef, 
-0xff, 0xfa, 0x93, 0x10, 0x53, 0x51, 0x4c, 0xcb, 
-0x8e, 0x4d, 0xea, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x31, 0x70, 0x81, 
-0x31, 0x34, 0xc2, 0x31, 0x39, 0x43, 0x31, 0xee, 
-0x78, 0x30, 0x49, 0x07, 0x97, 0x32, 0x0f, 0x7a, 
-0xa3, 0x31, 0xff, 0x07, 0x79, 0x30, 0x35, 0xc2, 
-0x4c, 0x30, 0x10, 0xc0, 0xf7, 0x30, 0x26, 0x40, 
-0x25, 0x37, 0x40, 0x84, 0xe2, 0x27, 0x63, 0x5a, 
-0x86, 0x05, 0x89, 0x2a, 0xb9, 0xed, 0x93, 0xd8, 
-0x22, 0x60, 0x67, 0x80, 0xb4, 0x60, 0xac, 0x00, 
-0x2c, 0x61, 0x18, 0x81, 0x66, 0x61, 0xf1, 0x03, 
-0x50, 0x64, 0x64, 0x8a, 0x36, 0x7c, 0x75, 0x4c, 
-0xc2, 0x7b, 0xc4, 0x8a, 0xb2, 0x64, 0x5a, 0x04, 
-0xf8, 0x61, 0xdc, 0x84, 0xc2, 0x60, 0xcc, 0x84, 
-0x7e, 0x60, 0x82, 0x04, 0x84, 0x60, 0x61, 0x87, 
-0xd6, 0x66, 0x9a, 0x49, 0x83, 0x05, 0xc2, 0x30, 
-0x2a, 0xc0, 0x34, 0xb8, 0x02, 0x31, 0x3f, 0xff, 
-0xfb, 0x92, 0xc4, 0xff, 0x82, 0x46, 0x78, 0x25, 
-0x1a, 0x0e, 0xff, 0x82, 0xa9, 0x5a, 0x0c, 0xa2, 
-0x9d, 0xfe, 0x88, 0xe0, 0x7b, 0xa0, 0x1a, 0x99, 
-0xeb, 0x2f, 0xdc, 0x37, 0xad, 0x28, 0xbf, 0xfe, 
-0xff, 0xef, 0xff, 0x3b, 0xfe, 0xea, 0xbe, 0xb7, 
-0x7d, 0x3b, 0xbe, 0xfd, 0xdd, 0x0b, 0x4c, 0x41, 
-0x4d, 0x45, 0x33, 0x2e, 0x39, 0x37, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 
-0x16, 0xc0, 0x80, 0x30, 0x11, 0x80, 0xc3, 0x30, 
-0x11, 0x41, 0x44, 0x30, 0x19, 0x02, 0x7d, 0x30, 
-0x3d, 0xc7, 0xa2, 0x31, 0xc6, 0xba, 0xfa, 0x36, 
-0xe1, 0x78, 0x63, 0x0a, 0x22, 0x55, 0x30, 0x58, 
-0x0f, 0xe3, 0x09, 0xe0, 0x30, 0x30, 0xeb, 0x01, 
-0x23, 0x11, 0x20, 0x63, 0x3b, 0x61, 0x11, 0xa4, 
-0xa5, 0x5a, 0xf7, 0x49, 0xad, 0xe6, 0xcf, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xd2, 0x60, 0x6a, 0x00, 0xd2, 0x18, 
-0x15, 0xf9, 0x84, 0x6c, 0x04, 0x71, 0x87, 0xce, 
-0x0b, 0x49, 0x91, 0xa4, 0x22, 0xf1, 0xf2, 0x6f, 
-0x05, 0x61, 0xef, 0xa0, 0x25, 0x11, 0x91, 0x7a, 
-0x12, 0x59, 0x87, 0x64, 0x12, 0x71, 0x83, 0x1c, 
-0x11, 0xd1, 0x81, 0xde, 0x12, 0x29, 0x81, 0x48, 
-0x1f, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6, 
-0x7c, 0x25, 0x1a, 0x0e, 0xff, 0x82, 0xa9, 0x60, 
-0x85, 0xa1, 0xc1, 0xff, 0xf0, 0x90, 0x71, 0x95, 
-0x29, 0x46, 0x07, 0x17, 0x8a, 0x01, 0x16, 0x0d, 
-0xb8, 0x40, 0x72, 0xf9, 0xce, 0xb9, 0x92, 0xbf, 
-0x21, 0xec, 0x66, 0x60, 0x87, 0xea, 0xf7, 0xfd, 
-0x3f, 0xbb, 0xff, 0x7e, 0x5a, 0xbf, 0xcb, 0xff, 
-0xa7, 0xef, 0x74, 0x4d, 0xf6, 0x50, 0x98, 0x82, 
-0x9a, 0x8a, 0x66, 0x5c, 0x72, 0x6f, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x30, 0x15, 0x80, 0x7f, 0x30, 0x10, 0x40, 
-0xc2, 0x30, 0x0e, 0x01, 0x47, 0x30, 0x14, 0x42, 
-0x80, 0x30, 0x31, 0x87, 0xad, 0x31, 0x7a, 0x7b, 
-0x41, 0x35, 0xb4, 0x79, 0x13, 0x06, 0xd2, 0x5a, 
-0x30, 0x6b, 0x10, 0x73, 0x0a, 0x50, 0x3d, 0x30, 
-0xee, 0x00, 0x53, 0x11, 0x50, 0x4c, 0x3b, 0x70, 
-0xa1, 0xe4, 0xd5, 0x5c, 0xf6, 0xc9, 0xec, 0x60, 
-0xde, 0xa3, 0x03, 0x74, 0x07, 0x43, 0x05, 0x88, 
-0x00, 0x33, 0x08, 0xec, 0x06, 0x93, 0x0f, 0xa8, 
-0x12, 0x43, 0x23, 0x6c, 0x39, 0x53, 0xe5, 0xc1, 
-0xa9, 0x33, 0xe0, 0x2c, 0x3e, 0x13, 0x23, 0x00, 
-0x21, 0x63, 0x0e, 0xbc, 0x23, 0xb3, 0x06, 0x0c, 
-0x23, 0x73, 0x03, 0x60, 0x24, 0x63, 0x02, 0x1c, 
-0x3f, 0x33, 0x1f, 0xd3, 0x40, 0x02, 0xe1, 0x90, 
-0x2a, 0xc8, 0x6e, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
-0x83, 0xc8, 0x7c, 0x27, 0x1a, 0x0f, 0xfb, 0x64, 
-0xa1, 0x58, 0x05, 0x61, 0xc1, 0xff, 0xf0, 0x90, 
-0x70, 0x44, 0xb2, 0x7e, 0xf6, 0x65, 0x5f, 0x60, 
-0xaf, 0x5b, 0xfd, 0x7d, 0x68, 0xfd, 0xbf, 0x6f, 
-0xff, 0xa3, 0x6b, 0xbf, 0xa9, 0xd4, 0xfd, 0x0e, 
-0xfa, 0xb7, 0x7d, 0xef, 0x8d, 0xbb, 0x5a, 0x62, 
-0x0a, 0x6a, 0x29, 0x99, 0x71, 0xc9, 0xba, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0x00, 0x24, 0x40, 0x00, 0x62, 
-0xf2, 0x51, 0x87, 0x0f, 0x66, 0x15, 0x6a, 0x18, 
-0x73, 0x56, 0x60, 0x2c, 0x8a, 0x5c, 0x61, 0x8b, 
-0x50, 0x70, 0x61, 0x7c, 0x8a, 0x34, 0x60, 0x0a, 
-0x03, 0x26, 0x60, 0x26, 0x01, 0x58, 0x60, 0x35, 
-0x00, 0x4c, 0x36, 0x64, 0x76, 0x43, 0x60, 0xee, 
-0x52, 0x62, 0x26, 0xa3, 0x27, 0xbd, 0x98, 0x5b, 
-0xdb, 0xf7, 0x7f, 0xa8, 0xc0, 0xe4, 0x02, 0x0c, 
-0xc1, 0x67, 0x00, 0x80, 0xc2, 0x3c, 0x00, 0xf8, 
-0xc3, 0xef, 0x03, 0x74, 0xc8, 0xe0, 0x0a, 0xe8, 
-0xf9, 0x9d, 0x4f, 0xb0, 0xf8, 0x32, 0x0c, 0x40, 
-0xc8, 0xc3, 0x07, 0x7c, 0xc3, 0xa6, 0x08, 0xa0, 
-0xc1, 0x74, 0x08, 0xc8, 0xcc, 0x39, 0x1c, 0xc6, 
-0x6f, 0xd8, 0xc2, 0x65, 0x30, 0x1a, 0x18, 0x90, 
-0x00, 0x8b, 0x6d, 0xb8, 0x41, 0xff, 0xfb, 0x92, 
-0xc4, 0xff, 0x83, 0xc7, 0x10, 0x27, 0x1a, 0x0f, 
-0xfb, 0x64, 0xa1, 0x60, 0x85, 0xa1, 0xc1, 0xff, 
-0xf0, 0x90, 0x72, 0xf9, 0xcb, 0xfc, 0xfd, 0x7f, 
-0x3f, 0xf1, 0xfd, 0xff, 0xdb, 0xff, 0x7f, 0x5b, 
-0x02, 0xdd, 0x66, 0xaf, 0xff, 0xf5, 0xb2, 0xcc, 
-0x9f, 0xf6, 0x16, 0xa9, 0x9f, 0x4f, 0xb1, 0xfa, 
-0x7f, 0x3b, 0x27, 0xf6, 0x50, 0x98, 0x82, 0x9a, 
-0x8a, 0x66, 0x5c, 0x72, 0x6f, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x20, 0x00, 0x03, 
-0x14, 0x07, 0xd3, 0x0c, 0xcc, 0x23, 0x08, 0x14, 
-0x73, 0x07, 0xe8, 0x43, 0x01, 0x58, 0x7b, 0x93, 
-0x0c, 0xb7, 0xb9, 0xb3, 0x0c, 0x20, 0x79, 0xf3, 
-0x00, 0x08, 0x26, 0x43, 0x02, 0x44, 0x11, 0x53, 
-0x02, 0xc4, 0x05, 0x31, 0x2f, 0x21, 0xc6, 0x43, 
-0x40, 0xeb, 0x91, 0x11, 0x35, 0x5a, 0x9f, 0x29, 
-0x3d, 0x80, 0x8f, 0xb3, 0xe2, 0x73, 0x03, 0xac, 
-0x08, 0xe3, 0x05, 0xa8, 0x03, 0xd3, 0x08, 0xfc, 
-0x00, 0xb3, 0x0f, 0xc0, 0x08, 0xa3, 0x23, 0x94, 
-0x1c, 0x53, 0xe6, 0xd8, 0xc6, 0x53, 0xe1, 0x34, 
-0x22, 0xd3, 0x23, 0x08, 0x1a, 0x43, 0x0e, 0x7c, 
-0x21, 0x53, 0x05, 0x9c, 0x22, 0xd3, 0x02, 0xa8, 
-0x24, 0x63, 0x01, 0x14, 0x3f, 0x93, 0x05, 0xd3, 
-0xc5, 0x06, 0x04, 0xa0, 0x55, 0xb0, 0xdc, 0xff, 
-0xfb, 0x92, 0xc4, 0xff, 0x82, 0x47, 0x18, 0x25, 
-0x20, 0xce, 0x7f, 0x62, 0xa1, 0x70, 0x8f, 0x61, 
-0xc1, 0xfe, 0x89, 0x28, 0xe4, 0x93, 0x93, 0xf7, 
-0x8d, 0x86, 0xff, 0xa7, 0xa2, 0xee, 0xd7, 0xbf, 
-0xd6, 0x8f, 0xff, 0xff, 0x52, 0xb6, 0x69, 0xa1, 
-0x1b, 0x7e, 0x8f, 0xd9, 0x46, 0xfd, 0x28, 0x6a, 
-0x19, 0xe4, 0xd3, 0x10, 0x53, 0x51, 0x4c, 0xcb, 
-0x8e, 0x4d, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 
-0x13, 0x40, 0x7a, 0x30, 0x0b, 0x00, 0xc3, 0x30, 
-0x04, 0xc1, 0x46, 0x30, 0x00, 0x02, 0x85, 0x30, 
-0x03, 0x47, 0xbc, 0x30, 0x5e, 0xbb, 0xac, 0x31, 
-0x5b, 0x7a, 0x23, 0x04, 0xf2, 0x69, 0x30, 0xa0, 
-0x11, 0xc3, 0x0b, 0x40, 0x5c, 0x30, 0xf5, 0x00, 
-0x30, 0x51, 0x18, 0x8b, 0xb8, 0x93, 0x27, 0x28, 
-0xc3, 0xe7, 0x20, 0xb7, 0x9b, 0x3a, 0xc8, 0x24, 
-0x80, 0xc0, 0x5e, 0x00, 0xdc, 0xc0, 0x99, 0x00, 
-0x58, 0x30, 0x1f, 0x13, 0x06, 0xfc, 0x00, 0x33, 
-0x10, 0x10, 0x03, 0x63, 0x69, 0xac, 0x11, 0x43, 
-0x67, 0x10, 0x07, 0x43, 0x0f, 0xcc, 0x09, 0x53, 
-0xca, 0x36, 0x8d, 0x1c, 0xec, 0x31, 0x9b, 0xec, 
-0x09, 0xc2, 0x2a, 0xa2, 0x0b, 0x00, 0x76, 0xa9, 
-0x06, 0xcc, 0x5d, 0xb7, 0x7b, 0xbf, 0xff, 0xff, 
-0x8c, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0x47, 
-0x10, 0x25, 0x1a, 0x4e, 0xff, 0x82, 0xa1, 0x5f, 
-0x05, 0x61, 0xc1, 0xff, 0xf0, 0x90, 0x43, 0x22, 
-0x97, 0xe8, 0x11, 0x5c, 0xaf, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xa5, 0x31, 0x05, 0x35, 0x14, 
-0xcc, 0xb8, 0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x30, 0x12, 0x00, 0x79, 0x30, 0x09, 0x40, 
-0xc0, 0x30, 0x01, 0x01, 0x47, 0x0b, 0x05, 0x0c, 
-0x60, 0x12, 0x8f, 0x7a, 0x60, 0x83, 0x77, 0x5e, 
-0x62, 0x2e, 0xf4, 0xa6, 0x11, 0x04, 0xd8, 0x61, 
-0x62, 0x24, 0x66, 0x17, 0x20, 0xce, 0x61, 0xec, 
-0x02, 0x40, 0x62, 0x33, 0x27, 0x73, 0x2b, 0x26, 
-0x51, 0x97, 0xb2, 0x47, 0x63, 0x06, 0xf5, 0x30, 
-0xc0, 0xd5, 0x02, 0x30, 0xc1, 0x40, 0x01, 0x64, 
-0xc1, 0xf9, 0x00, 0xc8, 0xc3, 0x72, 0x00, 0xac, 
-0xc7, 0xcb, 0x03, 0x38, 0xf2, 0xac, 0x23, 0x08, 
-0xf1, 0x6f, 0x01, 0x08, 0xc7, 0xa4, 0x04, 0x00, 
-0xf1, 0x96, 0xa4, 0xd1, 0xf7, 0x6c, 0xc6, 0x47, 
-0xe0, 0x93, 0x79, 0x30, 0x19, 0x23, 0x15, 0x09, 
-0x89, 0x00, 0x15, 0x3a, 0x7a, 0xe4, 0x94, 0x97, 
-0xef, 0x76, 0x5f, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
-0x82, 0x46, 0xe8, 0x27, 0x1a, 0x0f, 0xfb, 0x64, 
-0xa1, 0x22, 0x0a, 0x63, 0x5d, 0xfe, 0x08, 0xe0, 
-0x7f, 0xfe, 0x3b, 0x77, 0x3b, 0xae, 0x9f, 0xdd, 
-0xee, 0xff, 0xff, 0xfd, 0xfb, 0xaa, 0xfd, 0xdf, 
-0x46, 0xef, 0xbf, 0xfa, 0xd3, 0x10, 0x53, 0x51, 
-0x4c, 0xcb, 0x8e, 0x4d, 0xd5, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x30, 0x11, 0x40, 0x76, 0x30, 
-0x07, 0x00, 0xc1, 0x11, 0x82, 0x8c, 0x60, 0x0b, 
-0x85, 0x0a, 0x60, 0x34, 0x0f, 0x78, 0x61, 0x6a, 
-0xf7, 0x40, 0x65, 0xa8, 0xf4, 0x86, 0x17, 0xa4, 
-0xde, 0x61, 0x80, 0x25, 0x06, 0x17, 0x80, 0xdc, 
-0x61, 0xee, 0x04, 0x26, 0x23, 0x00, 0x34, 0x1e, 
-0xe0, 0x4c, 0x9e, 0xad, 0x0f, 0x7c, 0x82, 0xde, 
-0x67, 0x3a, 0xcc, 0x0f, 0xc0, 0x2c, 0x4c, 0x17, 
-0x50, 0x1f, 0x8c, 0x24, 0x20, 0x1a, 0x4c, 0x3e, 
-0xf0, 0x25, 0x0c, 0x8e, 0x00, 0x81, 0xcf, 0x9a, 
-0x34, 0x7a, 0x4f, 0x83, 0x60, 0x64, 0x4c, 0x8b, 
-0x10, 0x38, 0xcc, 0x38, 0x00, 0x74, 0x0c, 0x13, 
-0xa0, 0x86, 0x8c, 0x05, 0x90, 0x90, 0x4c, 0x01, 
-0xf0, 0xfd, 0x8c, 0x53, 0x4e, 0x06, 0x0c, 0x47, 
-0x40, 0xca, 0x3a, 0xf4, 0x49, 0xff, 0xfb, 0x92, 
-0xc4, 0xff, 0x83, 0x46, 0xc4, 0x27, 0x1a, 0x0f, 
-0xfb, 0x64, 0xa1, 0x40, 0x8a, 0xa2, 0x05, 0xfe, 
-0x88, 0xe0, 0x65, 0xf4, 0x57, 0xdc, 0xf9, 0x47, 
-0xfa, 0x19, 0xa6, 0xdd, 0xe8, 0xba, 0x9d, 0x7e, 
-0xff, 0xf2, 0x9a, 0x7f, 0xfa, 0x34, 0xed, 0x6d, 
-0x9f, 0xdf, 0xd3, 0xf9, 0xeb, 0x7e, 0x7a, 0x94, 
-0xc4, 0x14, 0xd4, 0x53, 0x32, 0xe3, 0x93, 0x75, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 0x10, 0x00, 
-0x73, 0x30, 0x05, 0x40, 0xbe, 0x11, 0x82, 0x8e, 
-0x60, 0x18, 0x05, 0x08, 0x60, 0x50, 0x8f, 0x72, 
-0x62, 0x27, 0x77, 0x02, 0x68, 0x86, 0xf4, 0x26, 
-0x1d, 0xc4, 0xe0, 0x61, 0xa2, 0x25, 0xe6, 0x18, 
-0x20, 0xf2, 0x61, 0xf0, 0x05, 0x86, 0x23, 0x20, 
-0x6a, 0x07, 0x73, 0x22, 0x4c, 0x56, 0xb7, 0xb2, 
-0x47, 0x39, 0x81, 0xfe, 0xaf, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 
-0x06, 0x08, 0x18, 0x17, 0x46, 0x0b, 0xb0, 0x12, 
-0x66, 0x12, 0x18, 0x11, 0xc6, 0x1f, 0x60, 0x1c, 
-0xa6, 0x46, 0xc8, 0x5e, 0x87, 0xcb, 0xe3, 0x18, 
-0x47, 0xc0, 0x88, 0x51, 0x06, 0x45, 0x30, 0x12, 
-0x86, 0x1b, 0xa8, 0x37, 0x26, 0x09, 0x58, 0x42, 
-0x66, 0x01, 0xc0, 0x47, 0xc6, 0x02, 0x30, 0xff, 
-0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc6, 0xe8, 0x27, 
-0x1a, 0x0f, 0xfb, 0x64, 0xa1, 0x61, 0x05, 0x61, 
-0xc1, 0xff, 0xf0, 0x90, 0x7e, 0x66, 0x3e, 0xa6, 
-0x98, 0x04, 0x60, 0x30, 0x05, 0x5b, 0x4f, 0x5c, 
-0x7a, 0x92, 0x8e, 0xf3, 0xdd, 0x2e, 0xaf, 0x49, 
-0xde, 0x96, 0x73, 0xab, 0xfa, 0x91, 0xff, 0xff, 
-0xf2, 0xaa, 0xfd, 0xa8, 0xff, 0x31, 0xfb, 0xa8, 
-0xf4, 0xa7, 0x5b, 0x7c, 0x36, 0x98, 0x82, 0x9a, 
-0x8a, 0x66, 0x5c, 0x72, 0x6e, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 
-0xf4, 0x70, 0x30, 0x30, 0xbd, 0x30, 0x09, 0x44, 
-0x31, 0x26, 0x83, 0x30, 0x35, 0x07, 0xb2, 0x31, 
-0x68, 0x7b, 0x50, 0x31, 0x62, 0x87, 0x9c, 0x30, 
-0x46, 0xc2, 0x71, 0x30, 0x37, 0x81, 0x34, 0x30, 
-0x31, 0x00, 0x80, 0x37, 0xc8, 0xec, 0xe3, 0x04, 
-0xc3, 0x5b, 0x01, 0x08, 0x89, 0xea, 0xb1, 0xef, 
-0x90, 0x4f, 0x83, 0x9e, 0xdf, 0xff, 0xd4, 0x60, 
-0x83, 0x01, 0x8a, 0x60, 0xbb, 0x81, 0x48, 0x61, 
-0x20, 0x01, 0x66, 0x61, 0xf4, 0x82, 0x58, 0x64, 
-0x68, 0x07, 0x92, 0x7c, 0xa2, 0xbd, 0xfe, 0x7b, 
-0xec, 0x06, 0xc6, 0x64, 0x4c, 0x80, 0x72, 0x61, 
-0xb3, 0x03, 0x40, 0x60, 0x8d, 0x04, 0x10, 0x60, 
-0x0a, 0x84, 0x76, 0x60, 0x34, 0x87, 0xdc, 0x65, 
-0x5a, 0x51, 0x81, 0x85, 0xe2, 0xa0, 0x45, 0x92, 
-0xf4, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc8, 
-0x6c, 0x27, 0x1a, 0x0f, 0xfb, 0x64, 0xa1, 0x5e, 
-0x05, 0x61, 0xc1, 0xff, 0xf0, 0x90, 0x47, 0x67, 
-0xe8, 0xaf, 0xf1, 0x38, 0x65, 0xbd, 0x63, 0x3d, 
-0x7c, 0xb7, 0xf6, 0xfd, 0xdf, 0xff, 0xef, 0xfd, 
-0x4d, 0xff, 0x59, 0xbe, 0x8f, 0x7f, 0xef, 0x77, 
-0xcb, 0x26, 0x20, 0xa6, 0xa2, 0x99, 0x97, 0x1c, 
-0x9b, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x00, 0x82, 0x60, 0x00, 0x61, 0xc2, 0x08, 
-0x34, 0xe8, 0x60, 0x36, 0x89, 0x8d, 0xb5, 0x06, 
-0x05, 0x38, 0xa4, 0xe6, 0x24, 0xd4, 0xfe, 0xa6, 
-0x24, 0x28, 0xa3, 0x26, 0x06, 0x90, 0x33, 0xc6, 
-0x04, 0xb8, 0x19, 0x66, 0x03, 0xf8, 0x0a, 0xa7, 
-0x3c, 0x48, 0x76, 0x67, 0x20, 0x2e, 0x72, 0x22, 
-0x06, 0xa7, 0x20, 0x9f, 0xb0, 0x09, 0xff, 0xee, 
-0xff, 0x5a, 0x10, 0x60, 0x85, 0x81, 0x9c, 0x60, 
-0xbc, 0x01, 0x6e, 0x61, 0x1f, 0x81, 0xa8, 0x61, 
-0xf2, 0x02, 0xe2, 0x64, 0x62, 0x89, 0x20, 0x7c, 
-0x7e, 0x49, 0x98, 0x7b, 0xc9, 0x88, 0x58, 0x64, 
-0x44, 0x00, 0x3e, 0x61, 0xac, 0x83, 0x0e, 0x60, 
-0x85, 0x84, 0x02, 0x42, 0x11, 0xb1, 0x81, 0x10, 
-0x1f, 0x59, 0x9a, 0xa9, 0x66, 0x0d, 0x17, 0x08, 
-0x80, 0xab, 0x29, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
-0x83, 0xc6, 0xfc, 0x25, 0x1a, 0x0e, 0xff, 0x82, 
-0x81, 0x55, 0x05, 0xa1, 0xc1, 0xff, 0xf0, 0x90, 
-0xf1, 0x8f, 0x58, 0xa3, 0xbc, 0xf7, 0x4b, 0xa3, 
-0xe7, 0x7d, 0x9c, 0x9d, 0xc9, 0xea, 0xff, 0xfa, 
-0x7e, 0x77, 0x47, 0xf6, 0x23, 0x6f, 0xd1, 0xf7, 
-0x68, 0xfd, 0x1a, 0x3c, 0xcd, 0x29, 0x88, 0x29, 
-0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xea, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0x30, 0xcc, 0x6a, 0x04, 0x17, 0x26, 
-0x10, 0x28, 0x06, 0x39, 0xcf, 0xa6, 0x09, 0x80, 
-0xf4, 0x06, 0x3f, 0xff, 0x57, 0x86, 0x3e, 0xc0, 
-0xf1, 0x86, 0x0b, 0x78, 0x4e, 0x66, 0x07, 0xc0, 
-0x27, 0xc6, 0x06, 0x60, 0x12, 0x46, 0xf9, 0x28, 
-0x9c, 0x50, 0xec, 0x6b, 0x40, 0xa0, 0xd1, 0x2d, 
-0x56, 0x3c, 0xf2, 0x09, 0x78, 0x61, 0x82, 0x1c, 
-0x06, 0xb9, 0x82, 0xf2, 0x06, 0x41, 0x84, 0x78, 
-0x07, 0x99, 0x87, 0xbe, 0x0d, 0x71, 0x91, 0x6c, 
-0x2a, 0x59, 0xf1, 0x4b, 0x52, 0x49, 0xee, 0x74, 
-0x27, 0x59, 0x90, 0xee, 0x04, 0x01, 0x86, 0x90, 
-0x0b, 0x51, 0x81, 0xf0, 0x0f, 0xb1, 0x80, 0x30, 
-0x11, 0x89, 0x81, 0x4e, 0x1f, 0x11, 0x80, 0xfa, 
-0x0a, 0x41, 0x80, 0x24, 0x01, 0x78, 0x84, 0x00, 
-0x40, 0x6e, 0x8b, 0x22, 0x69, 0xff, 0xfb, 0x90, 
-0xc4, 0xff, 0x82, 0x47, 0x3c, 0x25, 0x20, 0xce, 
-0x7f, 0x62, 0xa1, 0x56, 0x05, 0x61, 0xc1, 0xff, 
-0xf0, 0x90, 0xf2, 0xc3, 0xed, 0x7f, 0x39, 0x3f, 
-0xff, 0x5b, 0xf5, 0x53, 0xf7, 0x75, 0xff, 0xdd, 
-0x67, 0xef, 0xfe, 0xc6, 0x7f, 0x9b, 0xf4, 0xf7, 
-0xfa, 0x97, 0xaf, 0xcb, 0x26, 0x20, 0xa6, 0xa2, 
-0x99, 0x97, 0x1c, 0x9b, 0xd5, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x30, 0x0b, 0x80, 0x69, 
-0x15, 0x02, 0xd8, 0xc0, 0x2d, 0x04, 0xfc, 0xc0, 
-0x86, 0x09, 0xe0, 0xc1, 0x5d, 0x1e, 0x4c, 0xc9, 
-0x14, 0xe9, 0x64, 0xe3, 0x9d, 0xe0, 0x4c, 0x65, 
-0x09, 0xc0, 0xc4, 0x1c, 0x50, 0xcc, 0x33, 0xc2, 
-0x6c, 0xc3, 0xe0, 0x16, 0x8c, 0x44, 0xc2, 0x2c, 
-0xec, 0xc6, 0xc5, 0x92, 0x15, 0x1b, 0xc9, 0x17, 
-0x96, 0x60, 0x7e, 0xdf, 0xe8, 0x30, 0x44, 0xc0, 
-0xe0, 0x30, 0x5e, 0x00, 0xd9, 0x30, 0x8e, 0xc1, 
-0x10, 0x30, 0xf5, 0x81, 0xeb, 0x32, 0x29, 0x45, 
-0xfa, 0x3e, 0x0e, 0xaf, 0x7c, 0x3d, 0xb5, 0x45, 
-0x9c, 0x32, 0x18, 0x80, 0xd1, 0x30, 0xce, 0x41, 
-0x4f, 0x30, 0x39, 0xc1, 0xed, 0x30, 0x0f, 0x42, 
-0x2a, 0x30, 0x30, 0x83, 0xdd, 0x30, 0x24, 0x01, 
-0x45, 0x30, 0x06, 0x40, 0x2e, 0x0b, 0xff, 0xfb, 
-0x92, 0xc4, 0xff, 0x83, 0xc6, 0x74, 0x25, 0x1a, 
-0x0e, 0xff, 0x82, 0xa9, 0x66, 0x07, 0xa1, 0xc1, 
-0xff, 0xb4, 0x98, 0x00, 0x0a, 0x0d, 0xe1, 0xa4, 
-0x9c, 0x78, 0xb4, 0xf3, 0xdb, 0xce, 0xdd, 0xe8, 
-0xee, 0x57, 0x5d, 0x1f, 0xfd, 0xff, 0xd3, 0x63, 
-0xff, 0xfb, 0xf7, 0x7a, 0xed, 0xff, 0xcc, 0x7e, 
-0xfd, 0xfd, 0x09, 0x88, 0x29, 0xa8, 0xa6, 0x65, 
-0xc7, 0x26, 0xea, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x0a, 
-0x40, 0x64, 0x1d, 0x02, 0xcc, 0xc0, 0x38, 0x04, 
-0xe8, 0xc0, 0x99, 0x09, 0xcc, 0xc1, 0x84, 0x1e, 
-0x10, 0xca, 0x1d, 0xe7, 0x90, 0xe7, 0x99, 0xdc, 
-0x8c, 0x6e, 0xc9, 0xbc, 0xc4, 0x48, 0x51, 0x8c, 
-0x34, 0x82, 0x80, 0xc3, 0xe4, 0x19, 0x4c, 0x44, 
-0x02, 0x70, 0xec, 0x88, 0x84, 0x92, 0xd5, 0x03, 
-0xcf, 0x14, 0x97, 0xd7, 0x39, 0x66, 0x83, 0x05, 
-0x08, 0x10, 0xd3, 0x06, 0xcc, 0x10, 0xc3, 0x0a, 
-0x20, 0x15, 0xd3, 0x11, 0x64, 0x27, 0x23, 0x27, 
-0x10, 0x79, 0x53, 0xfe, 0x0f, 0xbc, 0x13, 0xf7, 
-0xb0, 0x72, 0xb3, 0x25, 0xd4, 0x14, 0x23, 0x0e, 
-0x68, 0x16, 0x03, 0x03, 0xc8, 0x22, 0x63, 0x01, 
-0xb0, 0x27, 0x53, 0x04, 0x04, 0x45, 0xe3, 0x02, 
-0xf4, 0x17, 0x23, 0x00, 0x98, 0x03, 0x90, 0x68, 
-0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc7, 0x20, 
-0x27, 0x1a, 0x0f, 0xfb, 0x64, 0x81, 0x61, 0x87, 
-0xa1, 0xc1, 0xff, 0xb4, 0x98, 0x01, 0x00, 0x64, 
-0x89, 0xb1, 0x34, 0xa6, 0x51, 0x3e, 0xce, 0xed, 
-0xce, 0x27, 0xd3, 0xd3, 0x4f, 0x65, 0xf4, 0xea, 
-0x21, 0xde, 0xdf, 0x5e, 0x53, 0x7f, 0xaf, 0xee, 
-0x44, 0x5c, 0xb6, 0xd7, 0x58, 0xaa, 0x5f, 0xf7, 
-0xd3, 0xf6, 0x58, 0xa4, 0x7b, 0xe8, 0x4c, 0x41, 
-0x4d, 0x45, 0x33, 0x2e, 0x39, 0x37, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0x30, 0x07, 0x00, 0x53, 0x0b, 0x01, 0x2c, 0x60, 
-0x1c, 0x82, 0x1e, 0x60, 0x49, 0x04, 0x3c, 0x60, 
-0xba, 0x8d, 0x0e, 0x64, 0xdd, 0x64, 0xbe, 0x73, 
-0x0e, 0xcf, 0x26, 0x34, 0x04, 0x38, 0x61, 0xf2, 
-0x23, 0xa6, 0x16, 0xe1, 0x22, 0x61, 0xa8, 0x0b, 
-0x86, 0x1d, 0x61, 0x2e, 0x72, 0xe3, 0xe2, 0xc6, 
-0x8b, 0x3e, 0x04, 0x97, 0xce, 0x60, 0x7f, 0xfe, 
-0x83, 0x04, 0x6c, 0x0f, 0x03, 0x05, 0xe0, 0x0f, 
-0x93, 0x08, 0xcc, 0x14, 0xa3, 0x0f, 0x10, 0x25, 
-0xb3, 0x21, 0xec, 0x74, 0x63, 0xdc, 0xe3, 0x93, 
-0x83, 0xd7, 0x5c, 0x6e, 0xa3, 0x20, 0xc0, 0x15, 
-0x93, 0x0c, 0x4c, 0x11, 0x53, 0x02, 0xfc, 0x1d, 
-0x53, 0x01, 0xe4, 0x21, 0xc3, 0x03, 0xd8, 0x3c, 
-0x93, 0x02, 0xc8, 0x13, 0xf3, 0x00, 0x94, 0x02, 
-0xc0, 0x60, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 
-0xc7, 0x10, 0x27, 0x1a, 0x0f, 0xfb, 0x64, 0xa1, 
-0x8a, 0x07, 0x61, 0x81, 0xff, 0xb4, 0x98, 0x00, 
-0xa0, 0xea, 0x18, 0xa4, 0xe3, 0xc6, 0xc7, 0x9d, 
-0xd9, 0xf9, 0xd2, 0x9e, 0x87, 0x7f, 0xd4, 0xea, 
-0x75, 0xfb, 0x99, 0xfc, 0xb6, 0x8d, 0xdf, 0xec, 
-0xb7, 0xdd, 0xff, 0xf4, 0x3b, 0xed, 0xff, 0xa1, 
-0x31, 0x05, 0x35, 0x14, 0xcc, 0xb8, 0xe4, 0xde, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0x30, 0x07, 0xc0, 0x5e, 0x30, 0x00, 
-0xc0, 0xad, 0x30, 0x13, 0x81, 0x34, 0x30, 0x2f, 
-0x42, 0x67, 0x30, 0x74, 0x07, 0x60, 0x33, 0x03, 
-0x78, 0xca, 0x3b, 0xca, 0x75, 0x23, 0x20, 0x12, 
-0x69, 0x31, 0x2a, 0x14, 0xc3, 0x0d, 0x60, 0xae, 
-0x30, 0xf5, 0x07, 0x73, 0x10, 0xc0, 0xc0, 0x3a, 
-0xe2, 0xe0, 0xe4, 0x75, 0x20, 0xf3, 0xc5, 0x25, 
-0xf5, 0xf0, 0xa8, 0x27, 0x12, 0xd6, 0x60, 0x43, 
-0x00, 0xea, 0x60, 0x5b, 0x80, 0xf4, 0x60, 0x8a, 
-0x01, 0x5a, 0x60, 0xf2, 0x82, 0x8c, 0x62, 0x29, 
-0x08, 0x1e, 0x6e, 0x3b, 0xc0, 0x6e, 0x6d, 0xe0, 
-0x07, 0xc2, 0x62, 0x15, 0x81, 0x8c, 0x78, 0x23, 
-0x81, 0x92, 0x9c, 0x06, 0x3e, 0x84, 0x9a, 0x07, 
-0xcc, 0x65, 0x74, 0xb1, 0x82, 0x01, 0x2a, 0xdc, 
-0xfa, 0xcd, 0x6e, 0xdd, 0xff, 0xfb, 0x92, 0xc4, 
-0xff, 0x83, 0xc7, 0x10, 0x27, 0x1c, 0x0f, 0xfb, 
-0x64, 0xb1, 0x69, 0x07, 0x61, 0xc1, 0xff, 0xb4, 
-0x98, 0x9e, 0xfe, 0xdc, 0x14, 0xff, 0xbe, 0x39, 
-0x08, 0xe2, 0x29, 0x32, 0x50, 0x9a, 0x03, 0x83, 
-0xc0, 0xc4, 0xb4, 0xa9, 0x9f, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xe9, 0x4c, 0x41, 0x4d, 0x45, 0x33, 
-0x2e, 0x39, 0x37, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x08, 0x00, 0x6b, 
-0x30, 0x04, 0x00, 0xc6, 0x30, 0x1a, 0xc1, 0x5f, 
-0x30, 0x3b, 0x02, 0xb8, 0x30, 0x8f, 0xc8, 0x53, 
-0x33, 0xb1, 0x3f, 0xf3, 0x3e, 0x73, 0x84, 0x33, 
-0x27, 0x22, 0xbe, 0x31, 0x65, 0x18, 0x13, 0x0f, 
-0xb0, 0xd3, 0x31, 0x1a, 0x09, 0x63, 0x13, 0x30, 
-0xf3, 0x3c, 0x73, 0xf0, 0x85, 0x44, 0xcf, 0x75, 
-0x22, 0xf1, 0x4a, 0x43, 0xf6, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xdb, 0xa0, 0xc0, 0xf9, 0x03, 0x70, 0xc1, 0x44, 
-0x03, 0xc4, 0xc1, 0xe1, 0x05, 0x30, 0xc3, 0x36, 
-0x09, 0x9c, 0xc7, 0x41, 0x1d, 0xa8, 0xef, 0x5e, 
-0xe8, 0x68, 0xee, 0x2d, 0x1c, 0x68, 0xc6, 0xfa, 
-0x06, 0x54, 0xc2, 0x8d, 0x02, 0xd4, 0xc0, 0x7f, 
-0x06, 0x0c, 0xc0, 0x95, 0x07, 0x28, 0xff, 0xfb, 
-0x92, 0xc4, 0xff, 0x82, 0x47, 0x18, 0x29, 0x1a, 
-0x0f, 0xfb, 0x64, 0xa1, 0x4d, 0x0a, 0x63, 0x29, 
-0xfe, 0x08, 0xe0, 0xc1, 0x00, 0x0c, 0xec, 0xd6, 
-0x90, 0xf3, 0x12, 0x88, 0x8b, 0x52, 0xb9, 0xa1, 
-0x9a, 0xd7, 0xad, 0x71, 0xe9, 0xad, 0x1e, 0x8f, 
-0xf8, 0x6f, 0xf5, 0xff, 0xff, 0xf4, 0xe8, 0xff, 
-0x5e, 0xd7, 0x79, 0x0f, 0x77, 0x47, 0xe8, 0x4c, 
-0x41, 0x4d, 0x45, 0x33, 0x2e, 0x39, 0x37, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x06, 
-0xc0, 0x66, 0x30, 0x06, 0xc0, 0xc3, 0x30, 0x1d, 
-0x01, 0x58, 0x30, 0x3f, 0xc2, 0xb1, 0x30, 0x99, 
-0x88, 0x36, 0x33, 0xf1, 0x7f, 0x22, 0x3f, 0x6c, 
-0x82, 0x83, 0x29, 0x72, 0xb9, 0x31, 0x70, 0x18, 
-0x43, 0x0f, 0xc0, 0xda, 0x31, 0x19, 0x09, 0xf3, 
-0x12, 0xe1, 0x04, 0x3c, 0x44, 0x40, 0x85, 0x74, 
-0xb8, 0x75, 0xe2, 0x91, 0x7a, 0xf8, 0x3d, 0x5b, 
-0x3f, 0xff, 0x51, 0x81, 0xf4, 0x07, 0x19, 0x82, 
-0x86, 0x07, 0xe1, 0x83, 0xb4, 0x0b, 0x19, 0x86, 
-0x5a, 0x14, 0x81, 0x8e, 0x4c, 0x3f, 0x49, 0xdd, 
-0x77, 0xee, 0x99, 0xdb, 0x18, 0x3c, 0xd9, 0x8d, 
-0xba, 0x0e, 0x31, 0x84, 0xf0, 0x04, 0xb1, 0x80, 
-0xd4, 0x0b, 0xa1, 0x81, 0x50, 0x0e, 0x19, 0x82, 
-0x2a, 0x19, 0x81, 0xb0, 0xe1, 0x46, 0x28, 0x11, 
-0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc8, 0xb8, 
-0x27, 0x18, 0x0f, 0xfb, 0x64, 0x81, 0x41, 0x05, 
-0x62, 0x01, 0xff, 0xf0, 0x90, 0x96, 0x79, 0x72, 
-0xc3, 0x55, 0x6f, 0xd9, 0x34, 0x9d, 0x87, 0xfc, 
-0x77, 0x7a, 0x9f, 0x96, 0xff, 0xff, 0xfb, 0xbf, 
-0xdf, 0xff, 0xab, 0xf7, 0xff, 0xbf, 0xfd, 0x69, 
-0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xf5, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x30, 0x04, 0x80, 0x63, 0x30, 0x08, 0x80, 0xbc, 
-0x30, 0x20, 0x41, 0x53, 0x30, 0x44, 0x02, 0xa6, 
-0x30, 0xa3, 0x48, 0x1b, 0x34, 0x2e, 0xbe, 0x3f, 
-0x34, 0x16, 0xc8, 0x0d, 0x30, 0xae, 0x82, 0xb2, 
-0x30, 0x5e, 0xc1, 0x87, 0x30, 0x3f, 0xc0, 0xe1, 
-0x30, 0x45, 0x00, 0xa8, 0x30, 0x4a, 0xc1, 0x15, 
-0x3c, 0x14, 0xb0, 0x72, 0x82, 0x5d, 0xba, 0x91, 
-0x78, 0xa5, 0x26, 0x6c, 0x5e, 0xdf, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xd6, 0x60, 0x6d, 0x81, 0x90, 0x60, 0x8b, 0x01, 
-0xc6, 0x60, 0xcc, 0x82, 0x88, 0x61, 0x5d, 0x04, 
-0xc2, 0x63, 0x16, 0x8e, 0xb0, 0x74, 0x34, 0x72, 
-0xd0, 0x73, 0xb2, 0x8e, 0x28, 0x62, 0xf4, 0x03, 
-0x6a, 0x61, 0x0b, 0x80, 0xca, 0x60, 0x23, 0x82, 
-0x72, 0x60, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 
-0xc7, 0x94, 0x29, 0x18, 0x0f, 0xfb, 0x64, 0x81, 
-0x3f, 0x05, 0x22, 0x01, 0xff, 0xf0, 0x90, 0x51, 
-0x83, 0x00, 0x60, 0x7f, 0x05, 0x7a, 0x76, 0x5c, 
-0x66, 0x4a, 0x30, 0x5d, 0xd6, 0x1d, 0x0c, 0xe5, 
-0xcb, 0x4e, 0xed, 0x77, 0x8d, 0xf5, 0xf5, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0x77, 0xfb, 0xbd, 0x1d, 
-0xdf, 0xff, 0xff, 0xad, 0x31, 0x05, 0x35, 0x14, 
-0xcc, 0xb8, 0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x30, 0x02, 0xc0, 0x5c, 0x30, 0x0b, 
-0x40, 0xb9, 0x30, 0x22, 0x81, 0x4c, 0x30, 0x48, 
-0x42, 0x9b, 0x30, 0xac, 0x07, 0xfa, 0x34, 0x69, 
-0xfd, 0x48, 0x34, 0x50, 0x07, 0xee, 0x30, 0xb7, 
-0x42, 0xad, 0x30, 0x61, 0x81, 0x86, 0x30, 0x3f, 
-0x80, 0xe8, 0x30, 0x44, 0xc0, 0xb3, 0x30, 0x49, 
-0x01, 0x24, 0x3b, 0xc5, 0x00, 0x52, 0x9a, 0x5c, 
-0x3a, 0xf0, 0xe4, 0x5e, 0xb8, 0x46, 0xca, 0xbf, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x49, 0x81, 
-0xb4, 0x06, 0x79, 0x82, 0x2a, 0x07, 0x61, 0x83, 
-0x24, 0x0a, 0xb9, 0x85, 0x5e, 0x14, 0x21, 0x8c, 
-0x20, 0x3d, 0xf9, 0xcf, 0x83, 0xe3, 0x69, 0xcd, 
-0x80, 0x3b, 0xd9, 0x8b, 0x96, 0x0e, 0xd1, 0x84, 
-0x08, 0x02, 0x21, 0x80, 0x64, 0x09, 0x71, 0x81, 
-0x64, 0x0b, 0xc9, 0x82, 0xff, 0xfb, 0x92, 0xc4, 
-0xff, 0x83, 0xc9, 0x1c, 0x29, 0x18, 0x0f, 0xff, 
-0x64, 0x81, 0x37, 0x85, 0x22, 0x41, 0xff, 0xec, 
-0x90, 0x1e, 0x15, 0x81, 0xde, 0xef, 0x19, 0x30, 
-0xc9, 0x72, 0x98, 0x6c, 0x6b, 0x79, 0x59, 0xef, 
-0x52, 0x7d, 0x3f, 0x67, 0xdd, 0xff, 0xff, 0xff, 
-0xff, 0x47, 0xff, 0xff, 0xa5, 0x31, 0x05, 0x35, 
-0x14, 0xcc, 0xb8, 0xe4, 0xdd, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x30, 0x00, 0x80, 0x59, 
-0x30, 0x0d, 0x00, 0xb4, 0x30, 0x25, 0x41, 0x47, 
-0x30, 0x4c, 0x02, 0x90, 0x30, 0xb4, 0xc7, 0xd9, 
-0x34, 0xa2, 0xbc, 0x3f, 0x34, 0x87, 0xc7, 0xcf, 
-0x30, 0xbf, 0x02, 0xa4, 0x30, 0x64, 0x41, 0x89, 
-0x30, 0x40, 0x40, 0xef, 0x30, 0x43, 0x80, 0xba, 
-0x30, 0x48, 0x41, 0x35, 0x3b, 0xb5, 0x70, 0x52, 
-0x62, 0x6b, 0xb8, 0x90, 0xfc, 0x52, 0x93, 0x37, 
-0x2f, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xeb, 0x30, 0x37, 0x40, 
-0xd2, 0x30, 0x44, 0x00, 0xf7, 0x30, 0x62, 0xc1, 
-0x68, 0x30, 0xa8, 0x82, 0xa5, 0x31, 0x7d, 0x48, 
-0x20, 0x39, 0xc3, 0x3f, 0x54, 0x39, 0x83, 0xc7, 
-0xde, 0x31, 0x6b, 0x02, 0x01, 0x30, 0x7c, 0x40, 
-0x21, 0x30, 0x06, 0xc1, 0x21, 0x30, 0xff, 0xfb, 
-0x92, 0xc4, 0xff, 0x83, 0xc8, 0x94, 0x27, 0x18, 
-0x0f, 0xff, 0x64, 0x81, 0x24, 0x85, 0x62, 0x41, 
-0xff, 0xec, 0x90, 0x31, 0x41, 0x6e, 0x30, 0x47, 
-0x82, 0xa5, 0x3c, 0x6d, 0x93, 0x2b, 0x16, 0x2e, 
-0x4b, 0x0e, 0x8c, 0xeb, 0x1b, 0x47, 0x7b, 0x9d, 
-0xe3, 0x7f, 0xf4, 0xfd, 0x9d, 0x1f, 0xff, 0xff, 
-0xf5, 0xfe, 0xbe, 0xef, 0xf7, 0x7f, 0xff, 0xfe, 
-0xb4, 0xc4, 0x14, 0xd4, 0x53, 0x32, 0xe3, 0x93, 
-0x75, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x04, 0x80, 
-0xa4, 0x60, 0x1e, 0x81, 0x5e, 0x60, 0x4f, 0x02, 
-0x80, 0x60, 0xa0, 0x85, 0x06, 0x61, 0x7a, 0x0f, 
-0x64, 0x69, 0xb2, 0xf6, 0x44, 0x69, 0x79, 0x0f, 
-0x54, 0x61, 0x8d, 0x85, 0x3a, 0x60, 0xcc, 0x03, 
-0x10, 0x60, 0x80, 0x01, 0xe4, 0x60, 0x86, 0x81, 
-0x86, 0x60, 0x8d, 0x02, 0x88, 0x76, 0xcb, 0x80, 
-0x64, 0xb4, 0xd4, 0x71, 0xe1, 0xc8, 0xbd, 0x38, 
-0x66, 0xca, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0x4f, 0xff, 0xff, 0xff, 0xff, 0x49, 0x97, 
-0xc5, 0xc9, 0x9d, 0x66, 0xe1, 0xaa, 0x4a, 0x39, 
-0xc8, 0x33, 0x51, 0x8a, 0x38, 0x3b, 0x99, 0xc3, 
-0x3f, 0xd0, 0x69, 0xc1, 0x84, 0x39, 0xc9, 0x89, 
-0xb6, 0x0e, 0xf0, 0x90, 0x67, 0x80, 0x00, 0x3b, 
-0x8c, 0xb6, 0x4d, 0xcd, 0x07, 0x90, 0x8c, 0xb5, 
-0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc9, 0x20, 
-0x29, 0x18, 0x0f, 0xff, 0x64, 0x81, 0x3a, 0x05, 
-0x22, 0x41, 0xff, 0xec, 0x90, 0x2d, 0x8c, 0x24, 
-0x04, 0x50, 0x79, 0x9c, 0xc6, 0x84, 0xc1, 0xbf, 
-0x4f, 0xff, 0xfb, 0xbf, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0x4a, 0x62, 0x0a, 0x6a, 0x29, 0x99, 
-0x71, 0xc9, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0x11, 0x00, 0x9a, 0x60, 0x22, 0x01, 0x50, 0x60, 
-0x53, 0x82, 0x72, 0x60, 0xa7, 0x04, 0xec, 0x61, 
-0x8a, 0x8f, 0x1a, 0x6a, 0x1b, 0x73, 0xe6, 0x69, 
-0xe0, 0x8f, 0x0a, 0x61, 0x9c, 0x05, 0x24, 0x60, 
-0xd1, 0x83, 0x12, 0x60, 0x80, 0x81, 0xf2, 0x60, 
-0x84, 0x01, 0x94, 0x60, 0x8a, 0x82, 0xaa, 0x76, 
-0x2c, 0x20, 0x64, 0x84, 0xd7, 0x71, 0x21, 0xf8, 
-0xa5, 0x26, 0x75, 0xed, 0xfb, 0xff, 0xd7, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 
-0x66, 0x5f, 0x97, 0x86, 0x73, 0x1c, 0xa6, 0xa5, 
-0xaa, 0x87, 0x1a, 0x50, 0xe6, 0x28, 0x08, 0xf8, 
-0x47, 0x07, 0x57, 0x8c, 0xc7, 0x00, 0x98, 0xf1, 
-0x06, 0x25, 0xd0, 0x3f, 0xe6, 0x0c, 0x68, 0x01, 
-0x43, 0x00, 0x72, 0x99, 0x86, 0x97, 0x1a, 0x25, 
-0x1b, 0x99, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 
-0xc9, 0x14, 0x27, 0x18, 0x0f, 0xff, 0x64, 0x80, 
-0xfc, 0x04, 0x62, 0x81, 0xdf, 0xf4, 0x50, 0x78, 
-0x59, 0x98, 0x4e, 0x07, 0x20, 0x05, 0x9d, 0x46, 
-0x7c, 0x16, 0x77, 0xbb, 0xff, 0xff, 0xec, 0xff, 
-0xff, 0xfd, 0xdf, 0xff, 0xff, 0xfb, 0xbe, 0x9f, 
-0xff, 0xf5, 0xa6, 0x20, 0xa6, 0xa2, 0x99, 0x97, 
-0x1c, 0x9b, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x24, 0x01, 0x18, 0xc0, 0x4b, 0x02, 
-0x8c, 0xc0, 0xb0, 0x04, 0xc0, 0xc1, 0x5d, 0x09, 
-0xa4, 0xc3, 0x34, 0x1d, 0x88, 0xd5, 0x01, 0xe2, 
-0xc8, 0xd4, 0x84, 0x1d, 0x70, 0xc3, 0x57, 0x0a, 
-0x24, 0xc1, 0xaa, 0x06, 0x20, 0xc1, 0x00, 0x03, 
-0xf8, 0xc1, 0x05, 0x03, 0x4c, 0xc1, 0x0e, 0x05, 
-0x88, 0xeb, 0x19, 0x80, 0x48, 0xe9, 0xa8, 0xe3, 
-0xc3, 0x92, 0xfa, 0x73, 0x96, 0x55, 0xf4, 0x7f, 
-0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xa4, 0xcb, 0xe2, 0xfc, 0xce, 0x53, 
-0xa8, 0xd4, 0x45, 0x84, 0xe2, 0x7a, 0x80, 0xc4, 
-0xe2, 0x20, 0x3c, 0xe0, 0x2b, 0xfa, 0x9c, 0xdf, 
-0x58, 0x1f, 0x54, 0xc4, 0x9b, 0x08, 0x68, 0xc1, 
-0x78, 0x00, 0xb4, 0xc0, 0x09, 0x03, 0x60, 0xcd, 
-0x04, 0x9c, 0xd1, 0xf8, 0xff, 0xfb, 0x92, 0xc4, 
-0xff, 0x83, 0xc9, 0x0c, 0x29, 0x18, 0x0f, 0xff, 
-0x64, 0x81, 0x13, 0x04, 0xa2, 0x81, 0xdf, 0xf4, 
-0x50, 0xa0, 0xcc, 0x52, 0xb8, 0xc2, 0xa0, 0x3d, 
-0x00, 0x4d, 0x76, 0x34, 0xa0, 0xdf, 0xa7, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xd5, 0xff, 0xd9, 0xf4, 
-0xff, 0xa5, 0x31, 0x05, 0x35, 0x14, 0xcc, 0xb8, 
-0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x0b, 0x80, 0x9e, 0x60, 
-0x31, 0x01, 0x6c, 0x60, 0x6b, 0x82, 0xaa, 0x60, 
-0xd0, 0x05, 0x60, 0x61, 0xe6, 0x90, 0x76, 0x6c, 
-0x65, 0x7e, 0x22, 0x6c, 0x1b, 0x90, 0x6e, 0x61, 
-0xf7, 0x05, 0xb4, 0x60, 0xf9, 0x83, 0x86, 0x60, 
-0x94, 0x82, 0x56, 0x60, 0x93, 0x01, 0xf8, 0x60, 
-0x98, 0x83, 0x4e, 0x78, 0x6f, 0xe6, 0x54, 0x04, 
-0x8e, 0x6d, 0x71, 0xff, 0x87, 0x29, 0x33, 0x38, 
-0xbd, 0xbf, 0x7f, 0xfa, 0xe8, 0xff, 0xff, 0xff, 
-0xff, 0xfb, 0xbf, 0xff, 0xff, 0xff, 0xac, 0xca, 
-0x32, 0x98, 0xcc, 0x23, 0x44, 0xd1, 0x34, 0xf8, 
-0xdd, 0x49, 0x84, 0xc4, 0x2b, 0x1d, 0x40, 0xdb, 
-0x8a, 0xe3, 0x98, 0xda, 0xd5, 0x1c, 0x78, 0xc3, 
-0xea, 0x07, 0xbc, 0xc1, 0x37, 0x00, 0xf0, 0xc0, 
-0x16, 0x02, 0xbc, 0xd7, 0xef, 0x63, 0xff, 0xfb, 
-0x92, 0xc4, 0xff, 0x83, 0xc9, 0x18, 0x27, 0x18, 
-0x0f, 0xff, 0x64, 0x81, 0x08, 0x04, 0x62, 0x81, 
-0xdf, 0xf4, 0x50, 0x81, 0x75, 0x4d, 0x60, 0x91, 
-0x31, 0x18, 0x21, 0x1f, 0x5a, 0xf4, 0xb4, 0xa8, 
-0x33, 0xe8, 0xff, 0xfd, 0xbf, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xe8, 0x4c, 0x41, 0x4d, 0x45, 
-0x33, 0x2e, 0x39, 0x37, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 0x00, 
-0x00, 0x48, 0x30, 0x1a, 0x40, 0xb1, 0x30, 0x38, 
-0x01, 0x4c, 0x30, 0x6b, 0xc2, 0x9f, 0x30, 0xfb, 
-0x08, 0x06, 0x36, 0x67, 0x7d, 0x78, 0x36, 0x41, 
-0x08, 0x02, 0x31, 0x03, 0x42, 0xcd, 0x30, 0x7f, 
-0x01, 0xc0, 0x30, 0x49, 0x81, 0x30, 0x30, 0x48, 
-0x41, 0x05, 0x30, 0x4a, 0x01, 0xb4, 0x3b, 0xe8, 
-0x23, 0x29, 0x05, 0x43, 0x46, 0xbe, 0xfe, 0x43, 
-0xf4, 0xe1, 0x9b, 0x2a, 0xfa, 0x3f, 0xec, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xff, 
-0xec, 0xd2, 0x65, 0x11, 0x52, 0x65, 0xf9, 0xac, 
-0x68, 0x62, 0x92, 0x6e, 0x3c, 0xe8, 0x62, 0x06, 
-0x0f, 0x1e, 0x6d, 0x68, 0xf5, 0x6e, 0x6d, 0x0f, 
-0x0e, 0xba, 0x61, 0xe5, 0x84, 0x0c, 0x60, 0x92, 
-0x00, 0xaa, 0x60, 0x13, 0x81, 0x48, 0x6c, 0x87, 
-0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc9, 0x58, 
-0x29, 0x16, 0x0f, 0xff, 0x64, 0x81, 0x01, 0x04, 
-0x62, 0xc1, 0xdf, 0xf0, 0x50, 0x79, 0xc3, 0x79, 
-0x06, 0xb7, 0x46, 0x18, 0x90, 0x0e, 0x8f, 0xce, 
-0x2c, 0xba, 0x1b, 0xeb, 0x4f, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xa6, 0x20, 
-0xa6, 0xa2, 0x99, 0x97, 0x1c, 0x9b, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0x30, 0x02, 0xc0, 0x41, 0x30, 0x1c, 0x00, 0xa8, 
-0x30, 0x3a, 0x41, 0x41, 0x30, 0x6f, 0x82, 0x8c, 
-0x31, 0x02, 0xc7, 0xcf, 0x36, 0x99, 0xbb, 0xcb, 
-0x36, 0x72, 0x47, 0xcd, 0x31, 0x0a, 0x02, 0xbe, 
-0x30, 0x81, 0x41, 0xbf, 0x30, 0x49, 0xc1, 0x35, 
-0x30, 0x46, 0x81, 0x0a, 0x30, 0x48, 0x41, 0xc3, 
-0x3b, 0x98, 0x93, 0x26, 0x06, 0x47, 0xf6, 0xb8, 
-0xff, 0xc3, 0x94, 0x96, 0xf9, 0x6d, 0x7f, 0x4f, 
-0xff, 0xff, 0xff, 0xff, 0xf4, 0x7f, 0xa3, 0xff, 
-0xfe, 0x8f, 0xff, 0xdb, 0xa0, 0xca, 0x32, 0xa8, 
-0xcb, 0xa3, 0x74, 0xd0, 0x55, 0x48, 0xdb, 0x8a, 
-0x24, 0xc3, 0xef, 0x1f, 0x20, 0xda, 0x0c, 0xf1, 
-0xc8, 0xd9, 0x61, 0x1e, 0x60, 0xc3, 0xaa, 0x08, 
-0x7c, 0xc1, 0x11, 0x01, 0xa8, 0xc0, 0x34, 0x02, 
-0x64, 0xda, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 
-0xc9, 0x7c, 0x27, 0x16, 0x0f, 0xff, 0x64, 0x80, 
-0xfd, 0x04, 0x62, 0xc1, 0xdf, 0xf0, 0x50, 0x6e, 
-0x43, 0x8a, 0x6e, 0xcd, 0x78, 0x89, 0x31, 0x38, 
-0x19, 0x0d, 0x5c, 0x69, 0x6a, 0xc3, 0x9d, 0x48, 
-0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xd1, 0xfe, 0x84, 0xc4, 0x14, 0xd4, 0x53, 0x32, 
-0xe3, 0x93, 0x7a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0x30, 0x04, 0x80, 0x38, 0x30, 0x1e, 
-0x40, 0xa1, 0x30, 0x3c, 0x01, 0x36, 0x30, 0x72, 
-0xc2, 0x79, 0x31, 0x0a, 0x07, 0x92, 0x36, 0xc9, 
-0x7a, 0x06, 0x36, 0xa0, 0x87, 0x94, 0x31, 0x11, 
-0x42, 0xaf, 0x30, 0x82, 0x81, 0xbc, 0x30, 0x49, 
-0x01, 0x38, 0x30, 0x45, 0x41, 0x13, 0x30, 0x46, 
-0x01, 0xd0, 0x3b, 0x08, 0xc3, 0x25, 0x07, 0x47, 
-0xc6, 0xbe, 0xfe, 0x43, 0xf4, 0xf8, 0x3d, 0x5b, 
-0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 
-0xff, 0xfd, 0xff, 0xff, 0x51, 0x94, 0x05, 0x69, 
-0x96, 0xe7, 0x01, 0x9f, 0x8a, 0xe9, 0xb5, 0x74, 
-0xd1, 0x87, 0x98, 0x40, 0x09, 0xb2, 0x83, 0xf0, 
-0xb9, 0xb1, 0x30, 0x3e, 0x89, 0x87, 0x12, 0x11, 
-0xa1, 0x81, 0xf8, 0x03, 0xf9, 0x80, 0x8a, 0x04, 
-0x51, 0xb6, 0x9b, 0xa7, 0xff, 0xfb, 0x92, 0xc4, 
-0xff, 0x83, 0xc9, 0x98, 0x2b, 0x16, 0x0f, 0xff, 
-0x64, 0x81, 0x03, 0x04, 0x62, 0xc1, 0xdf, 0xf0, 
-0x50, 0x1f, 0xd5, 0x1b, 0x0d, 0x04, 0x62, 0x80, 
-0x2a, 0x1b, 0x38, 0xb1, 0x65, 0x06, 0xfa, 0xd3, 
-0xe8, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xfd, 0x29, 0x88, 0x29, 0xa8, 0xa6, 0x65, 
-0xc7, 0x26, 0xf5, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x30, 0x06, 0xc0, 0x31, 
-0x30, 0x1f, 0x80, 0x98, 0x30, 0x3e, 0x41, 0x2b, 
-0x30, 0x76, 0x02, 0x64, 0x31, 0x11, 0x47, 0x57, 
-0x36, 0xf6, 0xb8, 0x2f, 0x36, 0xcc, 0xc7, 0x59, 
-0x31, 0x17, 0x02, 0x9e, 0x30, 0x84, 0x41, 0xb9, 
-0x30, 0x48, 0xc1, 0x3d, 0x30, 0x43, 0x81, 0x18, 
-0x30, 0x43, 0xc1, 0xdd, 0x3a, 0xb9, 0x33, 0x22, 
-0x08, 0x47, 0xf6, 0xb8, 0xff, 0xc6, 0x29, 0x01, 
-0xcf, 0xfd, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xf4, 0x19, 0x42, 0x57, 0x19, 0x64, 
-0x72, 0x99, 0xea, 0xb2, 0x1b, 0x39, 0x56, 0x98, 
-0x75, 0xa4, 0x1b, 0x1b, 0x0d, 0x1f, 0xd4, 0x1a, 
-0xf8, 0xe4, 0x03, 0x18, 0x6c, 0x81, 0x25, 0x98, 
-0x1d, 0x20, 0x48, 0x18, 0x0a, 0x00, 0x3f, 0x9b, 
-0x95, 0xa4, 0x72, 0x6c, 0xe9, 0xb1, 0xff, 0xfb, 
-0x92, 0xc4, 0xff, 0x83, 0xc9, 0x54, 0x29, 0x16, 
-0x0f, 0xff, 0x64, 0x81, 0x03, 0x04, 0x62, 0xc1, 
-0xdf, 0xf0, 0x50, 0x8f, 0xe6, 0x2b, 0x02, 0x23, 
-0x8b, 0x8d, 0x15, 0x58, 0x33, 0xd4, 0x8f, 0x4f, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x1f, 
-0xe8, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x39, 
-0x37, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 0x0b, 
-0x00, 0x32, 0x30, 0x27, 0x40, 0xa9, 0x30, 0x4a, 
-0x01, 0x4a, 0x30, 0x8a, 0xc2, 0xa5, 0x31, 0x3f, 
-0x88, 0x14, 0x38, 0x20, 0xfd, 0xcc, 0x37, 0xef, 
-0x08, 0x1c, 0x31, 0x45, 0xc2, 0xed, 0x30, 0x99, 
-0x81, 0xf6, 0x30, 0x53, 0x01, 0x70, 0x30, 0x4b, 
-0xc1, 0x4b, 0x30, 0x4b, 0x02, 0x32, 0x3b, 0xea, 
-0xe3, 0x29, 0x0f, 0x40, 0x03, 0x3b, 0x76, 0x1f, 
-0xfa, 0x7b, 0x07, 0xd5, 0xff, 0xff, 0x57, 0xff, 
-0xff, 0xfe, 0xaf, 0xff, 0x7f, 0xff, 0xfd, 0xff, 
-0xef, 0xf5, 0x19, 0x10, 0x4b, 0x99, 0x2e, 0x65, 
-0x19, 0x98, 0x9e, 0x9a, 0xb3, 0x32, 0x18, 0x62, 
-0xc3, 0xaf, 0x9a, 0x94, 0xfc, 0x97, 0x9a, 0x83, 
-0x83, 0x9a, 0x98, 0x5a, 0xe1, 0x08, 0x18, 0x16, 
-0xc0, 0x46, 0x98, 0x09, 0xe0, 0x30, 0x1b, 0x31, 
-0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc8, 0xe4, 
-0x27, 0x16, 0x0f, 0xff, 0x64, 0x81, 0x03, 0x84, 
-0x62, 0xc1, 0xdf, 0xf0, 0x50, 0x5a, 0x70, 0x7a, 
-0xc1, 0xac, 0x4c, 0xc0, 0x22, 0x2a, 0x6b, 0x3a, 
-0xb3, 0xca, 0x0d, 0xf5, 0xa7, 0xd1, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x31, 
-0x05, 0x35, 0x14, 0xcc, 0xb8, 0xe4, 0xdd, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x30, 0x0d, 0x40, 0x29, 0x30, 0x28, 0x80, 0x9e, 
-0x30, 0x4c, 0xc1, 0x3d, 0x30, 0x8e, 0x02, 0x8c, 
-0x31, 0x46, 0xc7, 0xc9, 0x38, 0x4f, 0x3b, 0x83, 
-0x38, 0x1c, 0xc7, 0xd3, 0x31, 0x4c, 0x02, 0xd8, 
-0x30, 0x9a, 0xc1, 0xf1, 0x30, 0x52, 0x41, 0x75, 
-0x30, 0x49, 0x81, 0x52, 0x30, 0x48, 0xc2, 0x3f, 
-0x3b, 0x7b, 0x33, 0x24, 0x0e, 0x41, 0xf6, 0x70, 
-0xff, 0xbf, 0x94, 0x96, 0xf9, 0x6d, 0x1f, 0xff, 
-0xdb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xe8, 0xff, 0xfd, 0xba, 0x0c, 0x87, 0x26, 0x0c, 
-0x92, 0x33, 0x4c, 0xc5, 0x51, 0x0d, 0x4a, 0x9c, 
-0xcc, 0x2f, 0x71, 0xe2, 0x0d, 0x3d, 0xae, 0x9a, 
-0x8d, 0x35, 0x51, 0xd7, 0x8c, 0x2b, 0x40, 0x88, 
-0x4c, 0x0a, 0x30, 0x26, 0x8c, 0x05, 0xa0, 0x14, 
-0xcd, 0xaa, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 
-0xc9, 0x84, 0x29, 0x14, 0x0f, 0xff, 0x64, 0x80, 
-0xfe, 0x84, 0x63, 0x01, 0xdf, 0xf0, 0x50, 0xa2, 
-0x38, 0x65, 0x2c, 0xd6, 0x86, 0x10, 0x11, 0x29, 
-0x35, 0x5d, 0x69, 0xd0, 0xbb, 0x3a, 0xbf, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 
-0x98, 0x82, 0x9a, 0x8a, 0x66, 0x5c, 0x72, 0x6e, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0x30, 0x0f, 0x00, 0x1e, 0x30, 0x2a, 
-0xc0, 0x93, 0x30, 0x4e, 0x81, 0x2e, 0x30, 0x91, 
-0x42, 0x71, 0x31, 0x4d, 0x87, 0x78, 0x38, 0x7a, 
-0xf9, 0x1e, 0x38, 0x47, 0x07, 0x84, 0x31, 0x52, 
-0x42, 0xc3, 0x30, 0x9c, 0x01, 0xec, 0x30, 0x51, 
-0x81, 0x76, 0x30, 0x47, 0xc1, 0x59, 0x30, 0x45, 
-0x82, 0x4a, 0x3a, 0xeb, 0x83, 0x23, 0x11, 0x41, 
-0xc6, 0x76, 0xec, 0x43, 0x74, 0xf6, 0x1e, 0xaf, 
-0xf7, 0xff, 0xaa, 0x8f, 0xff, 0xff, 0xff, 0xff, 
-0xbf, 0xff, 0xfe, 0xff, 0xf7, 0xfa, 0x8c, 0x84, 
-0x26, 0x4c, 0x8d, 0x34, 0x0c, 0xbc, 0x52, 0xcd, 
-0x3b, 0xa0, 0x0c, 0x2d, 0x41, 0xec, 0x4d, 0x30, 
-0x5e, 0xe4, 0x4d, 0x28, 0x21, 0xe1, 0xcc, 0x29, 
-0x10, 0x8c, 0x8c, 0x08, 0xe0, 0x2a, 0xcc, 0x06, 
-0x50, 0x11, 0x8d, 0xb4, 0xff, 0xfb, 0x92, 0xc4, 
-0xff, 0x83, 0xc9, 0x88, 0x2b, 0x14, 0x0f, 0xff, 
-0x64, 0x80, 0xfa, 0x84, 0x63, 0x01, 0xdf, 0xf0, 
-0x50, 0x99, 0x38, 0x9c, 0xe8, 0xd7, 0x25, 0xc0, 
-0x31, 0x35, 0x35, 0x9d, 0x59, 0xe0, 0x83, 0x7a, 
-0xd3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xfd, 0x3f, 0xff, 0xf4, 0x26, 0x20, 0xa6, 
-0xa2, 0x99, 0x97, 0x1c, 0x9b, 0xd5, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x30, 0x14, 0xc0, 0x19, 
-0x30, 0x33, 0x00, 0xa0, 0x30, 0x5c, 0xc1, 0x4b, 
-0x30, 0xa9, 0x82, 0xac, 0x31, 0x84, 0x48, 0x29, 
-0x39, 0xd7, 0xbe, 0x3b, 0x39, 0x9b, 0xc8, 0x39, 
-0x31, 0x88, 0x03, 0x0e, 0x30, 0xb4, 0x42, 0x2d, 
-0x30, 0x5c, 0xc1, 0xb3, 0x30, 0x4f, 0x81, 0x92, 
-0x30, 0x4c, 0xc2, 0xad, 0x3c, 0x1d, 0xb3, 0x28, 
-0x16, 0x2e, 0x5b, 0x0c, 0x72, 0xdf, 0xca, 0x4b, 
-0x67, 0x17, 0xbb, 0xee, 0xff, 0x5d, 0x3f, 0x6f, 
-0xff, 0xff, 0xee, 0xfb, 0xf7, 0x7f, 0x5f, 0xa3, 
-0xdd, 0xfe, 0xef, 0x2a, 0x64, 0x19, 0x34, 0x64, 
-0x41, 0xaa, 0x65, 0x9a, 0xa0, 0x69, 0x55, 0x1a, 
-0x61, 0x59, 0x8f, 0xa8, 0x69, 0x13, 0x79, 0x4c, 
-0x68, 0xd4, 0x8f, 0x58, 0x61, 0x36, 0x04, 0x82, 
-0x60, 0x3c, 0x81, 0x70, 0x60, 0x37, 0xff, 0xfb, 
-0x92, 0xc4, 0xff, 0x83, 0xc9, 0x88, 0x29, 0x14, 
-0x0f, 0xff, 0x64, 0x81, 0x07, 0x84, 0x63, 0x01, 
-0xdf, 0xf0, 0x50, 0x00, 0x72, 0x6e, 0x34, 0x71, 
-0xc6, 0x25, 0x66, 0xbc, 0x2b, 0x82, 0x89, 0xc9, 
-0x22, 0xeb, 0x48, 0x42, 0xec, 0xb2, 0xa4, 0x7f, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0x42, 0x62, 0x0a, 0x6a, 0x29, 0x99, 0x71, 0xc9, 
-0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x02, 
-0xc0, 0x49, 0x00, 0x00, 0x06, 0xf0, 0xbb, 0x66, 
-0x71, 0x07, 0x9d, 0xa6, 0x12, 0x41, 0x80, 0x68, 
-0x96, 0xcd, 0x06, 0x86, 0x01, 0x84, 0x61, 0x2a, 
-0x07, 0x26, 0x06, 0x80, 0x44, 0x60, 0x1c, 0x02, 
-0xc6, 0x4a, 0x66, 0x36, 0x45, 0x9c, 0x87, 0xf0, 
-0xa7, 0xa9, 0x98, 0x38, 0xff, 0xf5, 0x9b, 0xda, 
-0xf1, 0xbd, 0x54, 0x20, 0xc8, 0x02, 0x6c, 0xc8, 
-0x53, 0x58, 0xca, 0xa5, 0x5c, 0xd1, 0xba, 0x60, 
-0xc2, 0x8c, 0x1f, 0xe4, 0xd1, 0x3f, 0xf6, 0xa4, 
-0xd0, 0xc6, 0x1f, 0x44, 0xc2, 0x47, 0x09, 0x40, 
-0xc0, 0x62, 0x03, 0x1c, 0xc0, 0x77, 0x00, 0xa8, 
-0xdd, 0x08, 0x53, 0x8f, 0xc6, 0x8d, 0x82, 0x50, 
-0x05, 0x14, 0x52, 0xe9, 0xd5, 0x91, 0x04, 0x1b, 
-0xd6, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc9, 0xfc, 
-0x29, 0x12, 0x0f, 0xff, 0x64, 0x80, 0xff, 0x04, 
-0x63, 0x01, 0xdf, 0xf0, 0x50, 0xff, 0xd3, 0xfe, 
-0x9f, 0xff, 0xfa, 0x13, 0x10, 0x53, 0x51, 0x4c, 
-0xcb, 0x8e, 0x4d, 0xea, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0x03, 0x01, 0x96, 0x60, 0x6d, 0x01, 0x0c, 0x60, 
-0xc1, 0x82, 0x4e, 0x61, 0x5f, 0x04, 0xd0, 0x63, 
-0x22, 0x8e, 0xc2, 0x74, 0x58, 0x70, 0x72, 0x73, 
-0xdb, 0x8e, 0xee, 0x63, 0x27, 0x05, 0xb0, 0x61, 
-0x6c, 0x84, 0x3e, 0x60, 0xb4, 0x83, 0x6e, 0x60, 
-0x94, 0x03, 0x3c, 0x60, 0x8a, 0x85, 0x8a, 0x75, 
-0x7c, 0x66, 0x40, 0x30, 0x5f, 0xf6, 0x18, 0xed, 
-0xc3, 0x14, 0x96, 0xdc, 0xbd, 0x9f, 0x77, 0x77, 
-0x4f, 0xff, 0xa3, 0xff, 0xfe, 0xbf, 0xfb, 0xbf, 
-0xfd, 0x3e, 0xef, 0xaf, 0x77, 0xa0, 0xc7, 0xf2, 
-0x68, 0xc7, 0xe3, 0x64, 0xca, 0x15, 0x70, 0xd0, 
-0xaa, 0x8c, 0xc2, 0x67, 0x20, 0x60, 0xd0, 0x4e, 
-0xfa, 0x60, 0xcf, 0xdd, 0x1f, 0xc0, 0xc2, 0x1e, 
-0x09, 0x7c, 0xc0, 0x49, 0x03, 0x48, 0xc0, 0x80, 
-0x00, 0x6c, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x82, 
-0xc6, 0xb8, 0x25, 0x35, 0x4c, 0xfb, 0x22, 0xb1, 
-0x0a, 0x04, 0x63, 0x01, 0xdf, 0xf0, 0x50, 0xdd, 
-0xe7, 0xa3, 0x92, 0x42, 0x4d, 0x84, 0x4b, 0x07, 
-0x15, 0x92, 0xe5, 0xd6, 0x90, 0x83, 0xec, 0xb2, 
-0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xf4, 0x26, 0x20, 0xa6, 0xa2, 0x99, 0x97, 
-0x1c, 0x9b, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x26, 0x03, 0xf0, 0xc1, 0x05, 0x02, 0x34, 
-0xc1, 0xc2, 0x04, 0xf0, 0xc3, 0x31, 0x0a, 0x6c, 
-0xc7, 0x40, 0x1f, 0xc8, 0xef, 0x05, 0xf1, 0xa0, 
-0xed, 0xe4, 0x20, 0x30, 0xc7, 0x49, 0x0c, 0x84, 
-0xc3, 0x44, 0x09, 0x88, 0xc1, 0x98, 0x07, 0xe0, 
-0xc1, 0x47, 0x07, 0x8c, 0xc1, 0x2c, 0x0c, 0xe0, 
-0xd7, 0x10, 0xa3, 0x13, 0x88, 0x4b, 0x50, 0xb9, 
-0xda, 0xc3, 0xef, 0x2f, 0xb0, 0xf1, 0x9b, 0x5b, 
-0xe6, 0xfd, 0x7d, 0x5f, 0xff, 0xff, 0xff, 0xbf, 
-0xfb, 0x9f, 0x5f, 0xd1, 0xfa, 0x73, 0xfd, 0x37, 
-0x63, 0xfa, 0x14, 0x63, 0xe1, 0x36, 0x63, 0xd9, 
-0xb4, 0x64, 0xc2, 0xc2, 0x67, 0xcd, 0x58, 0x61, 
-0x20, 0x10, 0x6a, 0x67, 0xaa, 0xfe, 0xea, 0x67, 
-0x74, 0x10, 0x1e, 0x60, 0xfa, 0x84, 0xd4, 0x60, 
-0x17, 0x01, 0xc2, 0x60, 0xff, 0xfb, 0x90, 0xc4, 
-0xff, 0x83, 0xc9, 0xb8, 0x29, 0x12, 0x0f, 0xff, 
-0x64, 0x80, 0xfd, 0x84, 0x63, 0x01, 0xdf, 0xf0, 
-0x50, 0x44, 0x80, 0x14, 0x6f, 0x43, 0x79, 0xca, 
-0x5e, 0xc6, 0xc7, 0x22, 0x03, 0x8a, 0xa9, 0x74, 
-0xf2, 0xc8, 0x81, 0x06, 0xdb, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa5, 0x31, 
-0x05, 0x35, 0x14, 0xcc, 0xb8, 0xe4, 0xdd, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x00, 0x01, 0xd4, 0x48, 0xc0, 
-0x00, 0x01, 0x60, 0x17, 0x8c, 0x06, 0xa0, 0x0a, 
-0x0c, 0x0c, 0x30, 0x1d, 0xcc, 0x16, 0xa0, 0x43, 
-0x8c, 0x34, 0xf0, 0xd6, 0xcd, 0x5c, 0x66, 0x7a, 
-0x4d, 0x54, 0x10, 0xda, 0x4c, 0x35, 0x00, 0x53, 
-0x8e, 0xe3, 0x03, 0x35, 0x4b, 0x64, 0xcf, 0xcc, 
-0xe3, 0x38, 0xdb, 0xcc, 0x7e, 0x6d, 0x00, 0x00, 
-0x19, 0x5b, 0xb1, 0x0d, 0xca, 0x25, 0x96, 0xec, 
-0x76, 0xbe, 0x9f, 0xfc, 0x62, 0x62, 0xda, 0x1f, 
-0x51, 0xb2, 0x66, 0x34, 0x90, 0x86, 0x31, 0x17, 
-0xe6, 0x3c, 0xa6, 0xc6, 0x63, 0x4b, 0xe6, 0x0e, 
-0x98, 0xe9, 0x06, 0x64, 0x77, 0x0c, 0xc6, 0x61, 
-0xa8, 0xe5, 0x06, 0x0c, 0x70, 0x44, 0xe6, 0x00, 
-0x58, 0x19, 0x81, 0xc0, 0x7c, 0x9b, 0x5c, 0xa4, 
-0x70, 0x46, 0x29, 0xab, 0x06, 0xff, 0xfb, 0x92, 
-0xc4, 0xff, 0x83, 0xca, 0x3c, 0x29, 0x10, 0x0f, 
-0xff, 0x84, 0x80, 0xfb, 0x84, 0x63, 0x01, 0xdf, 
-0xf0, 0x50, 0x61, 0x84, 0x65, 0x22, 0xf3, 0x4e, 
-0xe6, 0x59, 0x31, 0x05, 0x35, 0x14, 0xcc, 0xb8, 
-0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x81, 0xc8, 
-0x00, 0x00, 0x01, 0x80, 0x95, 0x30, 0x25, 0xc0, 
-0x33, 0x30, 0x42, 0x00, 0x94, 0x30, 0x79, 0xc1, 
-0x4d, 0x31, 0x17, 0x84, 0x14, 0x37, 0x27, 0x5f, 
-0x4e, 0x36, 0xfa, 0x84, 0x2a, 0x31, 0x17, 0xc1, 
-0xa7, 0x30, 0x79, 0x81, 0x52, 0x30, 0x37, 0x81, 
-0x20, 0x03, 0x52, 0xc6, 0x40, 0xd2, 0x1e, 0xa0, 
-0x32, 0x82, 0x58, 0x0c, 0x0a, 0x09, 0x0f, 0x40, 
-0x72, 0xc8, 0x01, 0x36, 0x5f, 0x34, 0x7f, 0xeb, 
-0xff, 0xd1, 0xcd, 0xeb, 0xce, 0xdb, 0xf8, 0x25, 
-0x73, 0xcd, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xfd, 0x26, 0x33, 0x10, 0x66, 0x2f, 0x98, 0x06, 
-0x38, 0x27, 0x66, 0x5b, 0xcc, 0xc6, 0x0d, 0x60, 
-0xeb, 0xe6, 0x5d, 0x0f, 0x20, 0xe6, 0x5a, 0x60, 
-0xe7, 0xe6, 0x0b, 0x48, 0x46, 0x05, 0x40, 0xff, 
-0xfb, 0x92, 0xc4, 0xff, 0x82, 0xc8, 0xec, 0x53, 
-0x1d, 0x4f, 0xf0, 0x47, 0x20, 0xc9, 0x84, 0xa3, 
-0x41, 0xdf, 0xf0, 0x55, 0x35, 0xc5, 0x81, 0x07, 
-0x36, 0xd1, 0x24, 0xe1, 0x2b, 0x43, 0x57, 0x8b, 
-0x03, 0x88, 0xaa, 0x49, 0xe5, 0x9e, 0xc0, 0x23, 
-0x5a, 0x62, 0x0a, 0x6a, 0x29, 0x99, 0x71, 0xc9, 
-0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 
-0x33, 0xc0, 0x30, 0x30, 0x5d, 0x00, 0x7a, 0x30, 
-0x9b, 0x41, 0x47, 0x31, 0x14, 0x82, 0xbe, 0x32, 
-0x71, 0x48, 0x5b, 0x3f, 0xcb, 0xbf, 0x1f, 0x3f, 
-0x6a, 0x48, 0x8d, 0x32, 0x6f, 0x83, 0x8a, 0x31, 
-0x12, 0x42, 0xf5, 0x30, 0x7f, 0xc2, 0x99, 0x31, 
-0x76, 0x28, 0xc3, 0x14, 0x14, 0x5b, 0x30, 0xc3, 
-0x17, 0x13, 0x02, 0x80, 0x36, 0x04, 0x80, 0x4a, 
-0x54, 0x30, 0x37, 0x02, 0x1c, 0x9f, 0xbd, 0xdd, 
-0xef, 0xbd, 0xff, 0xb9, 0xff, 0x7d, 0x7a, 0xb2, 
-0xd3, 0xfb, 0xfa, 0x5c, 0x1e, 0xe6, 0x0d, 0xd5, 
-0xd8, 0x79, 0xbe, 0x86, 0xd3, 0xdd, 0xd2, 0x8f, 
-0xf4, 0x6d, 0x65, 0xb9, 0x45, 0x76, 0xbb, 0x47, 
-0xec, 0x6a, 0x3e, 0x1b, 0xa4, 0xc6, 0x32, 0x08, 
-0xc5, 0x83, 0x04, 0xc6, 0x74, 0xf0, 0xca, 0x49, 
-0xb4, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x82, 0xca, 
-0x8c, 0x7b, 0x18, 0xef, 0xd4, 0x49, 0x40, 0xc9, 
-0x04, 0xa3, 0x41, 0xdf, 0xf0, 0x54, 0xc1, 0x87, 
-0x1d, 0xc8, 0xca, 0xaa, 0xe6, 0x50, 0xca, 0x5b, 
-0x1d, 0x48, 0xc1, 0x3e, 0x08, 0xec, 0xc0, 0x08, 
-0x03, 0x80, 0xc0, 0x8a, 0x00, 0x08, 0xdb, 0xe3, 
-0xc3, 0x85, 0x28, 0xcd, 0x60, 0x27, 0x12, 0x25, 
-0x2a, 0x17, 0x9a, 0x8b, 0x32, 0xc9, 0x88, 0x29, 
-0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xf5, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x30, 0x36, 0x00, 0x43, 0x30, 0x5f, 0x40, 
-0x63, 0x30, 0x9d, 0x01, 0x24, 0x31, 0x17, 0x42, 
-0x81, 0x32, 0x76, 0x87, 0xa2, 0x3f, 0xf0, 0xf9, 
-0x9c, 0x3f, 0x8e, 0x07, 0xda, 0x32, 0x74, 0x43, 
-0x57, 0x31, 0x12, 0x02, 0xe4, 0x30, 0x7c, 0x82, 
-0x98, 0x30, 0x58, 0x42, 0x91, 0x30, 0x49, 0x84, 
-0x66, 0x30, 0x2b, 0x01, 0x72, 0x30, 0x08, 0xc0, 
-0x39, 0x06, 0x00, 0x10, 0x03, 0xbc, 0x26, 0x82, 
-0x4e, 0x3d, 0xca, 0x07, 0xda, 0xa6, 0xe7, 0x6a, 
-0xea, 0x07, 0xbb, 0xc6, 0x75, 0x31, 0x3d, 0x16, 
-0xbb, 0xdb, 0xff, 0xfd, 0x3f, 0x99, 0xdf, 0x2d, 
-0xf6, 0x3f, 0xd2, 0xad, 0xfd, 0x33, 0xaf, 0x8e, 
-0xbb, 0x51, 0x8c, 0x04, 0x19, 0x8a, 0x66, 0x11, 
-0x8b, 0x89, 0xf9, 0x92, 0x73, 0x91, 0x82, 0xb8, 
-0x3c, 0x19, 0x93, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
-0x83, 0xcc, 0xb8, 0x7b, 0x0c, 0x0f, 0xf8, 0x49, 
-0x40, 0xce, 0x84, 0xa3, 0x41, 0xdf, 0xf0, 0x55, 
-0x53, 0xd0, 0xa9, 0x92, 0xbc, 0x3b, 0x29, 0x82, 
-0x26, 0x12, 0x11, 0x80, 0x4a, 0x07, 0x59, 0x81, 
-0x22, 0x00, 0x89, 0xb8, 0x86, 0x67, 0x0f, 0x48, 
-0x1a, 0xcc, 0x40, 0x24, 0x49, 0x54, 0x4f, 0x6c, 
-0x9f, 0x00, 0x8d, 0x7f, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xa6, 
-0x20, 0xa6, 0xa2, 0x99, 0x97, 0x1c, 0x9b, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0x00, 0x00, 0xd4, 0x49, 0x00, 
-0x00, 0x03, 0x01, 0x24, 0x01, 0x03, 0x02, 0x28, 
-0x00, 0xa3, 0x03, 0xbc, 0x05, 0x73, 0x06, 0xd0, 
-0x0d, 0x63, 0x0f, 0xbc, 0x2b, 0x53, 0x67, 0x39, 
-0x4c, 0xf3, 0x64, 0xbc, 0x2c, 0xd3, 0x0f, 0xa0, 
-0x13, 0x23, 0xd3, 0xc4, 0x4d, 0x66, 0xf9, 0x33, 
-0xa3, 0xe0, 0xcb, 0x3b, 0x73, 0x16, 0xa1, 0x41, 
-0x00, 0x46, 0x47, 0x00, 0x4a, 0xea, 0x46, 0x27, 
-0xef, 0x76, 0xbe, 0x9f, 0xe8, 0xea, 0x80, 0xd9, 
-0xfc, 0xd1, 0x76, 0xff, 0xa6, 0xef, 0x83, 0x46, 
-0x2f, 0x90, 0x06, 0x27, 0x18, 0x66, 0x29, 0xa8, 
-0x46, 0x40, 0x4e, 0xe6, 0x09, 0x98, 0xf2, 0x46, 
-0x44, 0xd7, 0x50, 0x46, 0x42, 0xb8, 0xee, 0x86, 
-0x07, 0x20, 0x49, 0x66, 0x01, 0xd0, 0x1e, 0x46, 
-0x04, 0xb0, 0x03, 0xc6, 0xe7, 0xff, 0xfb, 0x92, 
-0xc4, 0xff, 0x83, 0xcc, 0x14, 0x3d, 0x0c, 0x0f, 
-0xfd, 0xa4, 0xc1, 0x02, 0x04, 0xa3, 0x41, 0xdf, 
-0xf0, 0x50, 0x12, 0x1c, 0x40, 0xfe, 0x6b, 0x40, 
-0xd8, 0xb1, 0x29, 0x50, 0xbd, 0xd2, 0x60, 0x7d, 
-0x9f, 0xf4, 0x26, 0x20, 0xa6, 0xa2, 0x99, 0x97, 
-0x1c, 0x9b, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 0x32, 0x80, 
-0x57, 0x30, 0x55, 0xc0, 0x21, 0x30, 0x8c, 0x00, 
-0xbe, 0x30, 0xf8, 0x41, 0xbd, 0x32, 0x30, 0x85, 
-0x58, 0x3e, 0x33, 0x68, 0x36, 0x3d, 0xdb, 0x05, 
-0x94, 0x32, 0x2c, 0xc2, 0x8d, 0x30, 0xee, 0x02, 
-0x66, 0x30, 0x67, 0x02, 0x3e, 0x30, 0x42, 0xc2, 
-0x43, 0x30, 0x32, 0x83, 0xe8, 0x33, 0x75, 0x20, 
-0xc1, 0xe2, 0xf1, 0x00, 0x11, 0x60, 0xda, 0x44, 
-0x07, 0x1b, 0x9c, 0xbf, 0xc5, 0x3a, 0x4d, 0xbe, 
-0x2d, 0xde, 0xae, 0xa6, 0xa7, 0xf7, 0x7b, 0xbf, 
-0xbb, 0xd5, 0xb4, 0xf3, 0x7f, 0xbe, 0xbf, 0xdf, 
-0xfe, 0xfe, 0x87, 0x1d, 0x75, 0xfe, 0xa3, 0x16, 
-0x88, 0x13, 0x12, 0x4c, 0x23, 0x12, 0x14, 0x53, 
-0x1b, 0x67, 0xa3, 0x04, 0x18, 0x79, 0xf3, 0x1d, 
-0xff, 0xad, 0xf3, 0x1d, 0x00, 0x78, 0x33, 0xff, 
-0xfb, 0x92, 0xc4, 0xff, 0x82, 0x49, 0x8c, 0x55, 
-0x1b, 0x4f, 0xf0, 0x47, 0x28, 0xd7, 0x04, 0x63, 
-0x41, 0xdf, 0xf0, 0x50, 0x02, 0xd4, 0x25, 0x23, 
-0x01, 0x44, 0x0f, 0xb3, 0x02, 0x74, 0x02, 0xd3, 
-0x75, 0x06, 0x4e, 0x26, 0x68, 0x35, 0xb8, 0x50, 
-0x68, 0x92, 0xab, 0x9e, 0xd9, 0x3d, 0x80, 0x8f, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0x5a, 0x62, 0x0a, 0x6a, 0x29, 
-0x99, 0x71, 0xc9, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 
-0x34, 0xc0, 0x64, 0x30, 0x57, 0x00, 0x00, 0x30, 
-0x8d, 0x40, 0x9b, 0x30, 0xf9, 0x01, 0x7e, 0x32, 
-0x33, 0xc4, 0x9f, 0x3e, 0x47, 0xa2, 0x9d, 0x3d, 
-0xee, 0xc4, 0xe1, 0x32, 0x2e, 0x82, 0x5c, 0x30, 
-0xed, 0x42, 0x55, 0x30, 0x64, 0xc2, 0x3d, 0x30, 
-0x3d, 0x82, 0x44, 0x30, 0x2b, 0xc3, 0xed, 0x32, 
-0xdd, 0x2c, 0xc1, 0x02, 0xe1, 0x50, 0x2a, 0xc0, 
-0x34, 0xb8, 0x02, 0x59, 0x3f, 0x79, 0xed, 0x96, 
-0x19, 0xe9, 0xfb, 0x79, 0x3f, 0xd7, 0xed, 0xff, 
-0x4f, 0xff, 0xfb, 0x4a, 0xec, 0xfb, 0x7d, 0xcf, 
-0xc9, 0x7e, 0x76, 0x8f, 0x93, 0xa0, 0xc5, 0x91, 
-0xf8, 0xc4, 0x23, 0x0c, 0xc3, 0xd5, 0x10, 0xc5, 
-0x69, 0xfc, 0xc0, 0xd7, 0x1e, 0xa0, 0xc6, 0x50, 
-0xec, 0xa8, 0xc6, 0x1b, 0x1e, 0x30, 0xc0, 0x7e, 
-0x09, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xcb, 
-0x30, 0x2d, 0x0e, 0x0f, 0xff, 0x84, 0x81, 0x00, 
-0x84, 0xa3, 0x41, 0xdf, 0xf0, 0x50, 0x64, 0xc0, 
-0x64, 0x04, 0x10, 0xc0, 0xa2, 0x00, 0xe0, 0xdd, 
-0xa0, 0x83, 0x8a, 0x15, 0x4d, 0x6c, 0x0d, 0x1a, 
-0x27, 0x2a, 0xd7, 0xba, 0x4d, 0x6c, 0xb2, 0x62, 
-0x0a, 0x6a, 0x29, 0x99, 0x71, 0xc9, 0xbd, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x30, 0x36, 0x80, 0x71, 0x08, 0x0b, 0x08, 
-0xc2, 0x38, 0x01, 0xd8, 0xc3, 0xeb, 0x04, 0xf4, 
-0xc8, 0xd8, 0x0f, 0x60, 0xf9, 0x5f, 0x72, 0x98, 
-0xf7, 0xf8, 0x10, 0x88, 0xc8, 0xbf, 0x08, 0xa4, 
-0xc3, 0xb0, 0x09, 0x08, 0xc1, 0x86, 0x08, 0xe0, 
-0xc0, 0xe1, 0x09, 0x1c, 0xc0, 0x92, 0x0f, 0xc8, 
-0xc8, 0xd4, 0xc3, 0x01, 0x8b, 0xc6, 0x00, 0x8b, 
-0x2d, 0xb8, 0x40, 0x72, 0xf9, 0xcb, 0xfc, 0x53, 
-0xa4, 0xfe, 0x12, 0xf5, 0x75, 0x31, 0xbf, 0x14, 
-0xfb, 0xbf, 0xff, 0xde, 0xdf, 0xef, 0xfe, 0x97, 
-0xfa, 0x91, 0xbf, 0xa7, 0x5d, 0xee, 0xea, 0x31, 
-0x50, 0x7f, 0x30, 0xf4, 0xc2, 0x30, 0xc1, 0x47, 
-0x31, 0x06, 0x82, 0x30, 0x28, 0x87, 0xb3, 0x31, 
-0x43, 0xfb, 0x65, 0x31, 0x37, 0x87, 0x97, 0x30, 
-0x10, 0xc2, 0x5e, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
-0x83, 0xca, 0xd8, 0x2b, 0x0e, 0x0f, 0xff, 0x84, 
-0x80, 0xcf, 0x84, 0xa3, 0x41, 0xdf, 0xf0, 0x55, 
-0x30, 0x1e, 0x41, 0x0d, 0x30, 0x2a, 0x40, 0x45, 
-0x07, 0x77, 0x4e, 0x2e, 0x3c, 0x35, 0xb8, 0x10, 
-0x78, 0x9a, 0xab, 0x9f, 0x29, 0x3d, 0x80, 0x8f, 
-0xb1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0x5a, 0x62, 0x0a, 0x6a, 
-0x29, 0x99, 0x71, 0xc9, 0xba, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0x30, 0x38, 0x40, 0x7e, 0x30, 
-0x59, 0x00, 0x19, 0x30, 0x8f, 0x40, 0x4d, 0x30, 
-0xfb, 0x00, 0xf4, 0x32, 0x38, 0x43, 0x05, 0x3e, 
-0x63, 0x96, 0x37, 0x3e, 0x09, 0xc3, 0x59, 0x32, 
-0x30, 0x81, 0xf0, 0x30, 0xea, 0x42, 0x2f, 0x30, 
-0x5e, 0x42, 0x35, 0x33, 0x2a, 0x46, 0x31, 0xcf, 
-0xf5, 0x30, 0xbd, 0x4d, 0x04, 0x06, 0x03, 0xa0, 
-0x2a, 0xc8, 0x6e, 0x71, 0xc9, 0x64, 0xfd, 0xee, 
-0xfe, 0xff, 0xff, 0xf2, 0xe7, 0xff, 0xdf, 0xff, 
-0x57, 0xfc, 0x1e, 0xfa, 0x75, 0xfb, 0x3f, 0xff, 
-0x76, 0x8f, 0xf4, 0x7d, 0xbf, 0xde, 0xdd, 0x0e, 
-0xf6, 0xe8, 0x4f, 0x93, 0xa0, 0x12, 0x28, 0x0c, 
-0x3c, 0x80, 0xc1, 0x0f, 0x40, 0xae, 0x40, 0x0f, 
-0x33, 0x00, 0x64, 0x30, 0xa3, 0x05, 0xa1, 0x7e, 
-0x83, 0x05, 0x64, 0x2f, 0xe2, 0xff, 0xfb, 0x92, 
-0xc4, 0xff, 0x83, 0xca, 0xc0, 0x2d, 0x0e, 0x0f, 
-0xff, 0x84, 0x81, 0x02, 0x84, 0xa3, 0x41, 0xdf, 
-0xf0, 0x50, 0x00, 0x39, 0x4c, 0x02, 0x60, 0x17, 
-0x0c, 0x03, 0x40, 0x03, 0x8a, 0x51, 0x81, 0xde, 
-0x8d, 0x71, 0x46, 0x28, 0x3a, 0xf9, 0x91, 0x6f, 
-0x6b, 0xbd, 0xde, 0xa4, 0xc4, 0x14, 0xd4, 0x53, 
-0x32, 0xe3, 0x93, 0x7a, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x3a, 0x00, 
-0x8b, 0x30, 0x5a, 0x40, 0x32, 0x30, 0x8f, 0x80, 
-0x1e, 0x30, 0xfc, 0x40, 0xa7, 0x32, 0x39, 0x02, 
-0x1a, 0x3e, 0x6b, 0xcf, 0x0a, 0x3e, 0x11, 0x82, 
-0x7c, 0x32, 0x30, 0xc1, 0xb9, 0x30, 0xe8, 0x82, 
-0x1a, 0x30, 0x5b, 0x02, 0x2e, 0x30, 0x2c, 0xc2, 
-0x47, 0x30, 0x14, 0x03, 0xf6, 0x30, 0xa5, 0x38, 
-0x42, 0x31, 0x20, 0x02, 0x2d, 0xb7, 0x42, 0x0b, 
-0x97, 0xce, 0x5f, 0x30, 0xc9, 0x57, 0xf9, 0x5f, 
-0xa3, 0x90, 0xba, 0x9d, 0x5f, 0x6f, 0xf4, 0x68, 
-0xd9, 0xfe, 0x8b, 0x4b, 0x6c, 0xd9, 0xa7, 0xec, 
-0x75, 0x3e, 0xee, 0x96, 0x7b, 0x28, 0x31, 0x30, 
-0x7b, 0x30, 0xbc, 0xc2, 0x30, 0x61, 0x47, 0x30, 
-0x36, 0x84, 0x30, 0x0a, 0x07, 0xbb, 0x30, 0x85, 
-0xfb, 0xa9, 0x30, 0x7d, 0x87, 0xa3, 0x30, 0xff, 
-0xfb, 0x92, 0xc4, 0xff, 0x82, 0x4b, 0x38, 0x7b, 
-0x0e, 0x0f, 0xf4, 0x49, 0x40, 0xc7, 0x04, 0x25, 
-0x25, 0xbf, 0xe8, 0x56, 0x0d, 0x82, 0x66, 0x30, 
-0x26, 0xc1, 0x1b, 0x30, 0x2c, 0xc0, 0x59, 0x01, 
-0x79, 0x0e, 0x32, 0x06, 0x0e, 0xb9, 0x13, 0x13, 
-0x55, 0xa9, 0xf2, 0x93, 0xd8, 0x08, 0xfb, 0x3f, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0x5a, 0x62, 0x0a, 0x6a, 0x29, 0x99, 
-0x71, 0xc9, 0xbd, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 
-0x3b, 0xc0, 0x96, 0x30, 0x5b, 0x00, 0x4d, 0x0e, 
-0x12, 0x08, 0xc3, 0xf0, 0x01, 0x30, 0xc8, 0xe7, 
-0x04, 0x24, 0xf9, 0xbe, 0x19, 0x74, 0xf8, 0x55, 
-0x06, 0x0c, 0xc8, 0xc0, 0x05, 0xf0, 0xc3, 0x99, 
-0x08, 0x1c, 0xc1, 0x5f, 0x08, 0xa4, 0xc0, 0x98, 
-0x09, 0x10, 0xc0, 0x2b, 0x0f, 0xe4, 0x43, 0x4f, 
-0x20, 0x18, 0x16, 0x00, 0xaa, 0x38, 0xdd, 0xe3, 
-0x92, 0xca, 0x3b, 0xcf, 0x6d, 0x27, 0x7d, 0x2d, 
-0xd1, 0x4f, 0x6d, 0xff, 0xf7, 0x23, 0xfa, 0xaa, 
-0xe9, 0xff, 0x4d, 0x88, 0xaf, 0xb7, 0x47, 0xdd, 
-0xa3, 0xed, 0x4d, 0x1f, 0x26, 0x60, 0x25, 0x80, 
-0xf0, 0x60, 0x13, 0x01, 0x82, 0x60, 0x04, 0x82, 
-0x8c, 0x58, 0x0a, 0x1c, 0xc0, 0x08, 0x1e, 0xf0, 
-0xc0, 0x27, 0xee, 0xc0, 0xc1, 0x21, 0xe9, 0x0c, 
-0x1d, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xcb, 
-0x20, 0x2b, 0x0e, 0x0f, 0xff, 0x84, 0x80, 0xfe, 
-0x84, 0xa3, 0x41, 0xdf, 0xf0, 0x50, 0xc9, 0xac, 
-0xc2, 0xb0, 0x48, 0x0c, 0x2e, 0x01, 0x88, 0xc3, 
-0xd4, 0x03, 0xc5, 0x88, 0xc0, 0xa5, 0xc4, 0xa1, 
-0x39, 0x46, 0x1e, 0xf9, 0x05, 0xba, 0xec, 0xb2, 
-0xb4, 0xc4, 0x14, 0xd4, 0x53, 0x32, 0xe3, 0x93, 
-0x75, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x30, 0x3d, 0x00, 0xa1, 0x30, 0x5c, 0x40, 
-0x62, 0x30, 0x90, 0x00, 0x2f, 0x30, 0xfc, 0x40, 
-0x0c, 0x32, 0x39, 0x00, 0x7b, 0x3e, 0x6f, 0xc6, 
-0xe1, 0x3e, 0x14, 0x80, 0x38, 0x32, 0x2e, 0xc1, 
-0x3d, 0x30, 0xe3, 0x81, 0xf0, 0x30, 0x53, 0x82, 
-0x22, 0x30, 0x1f, 0xc2, 0x45, 0x04, 0x07, 0xf0, 
-0x60, 0x1a, 0x70, 0xc0, 0xc4, 0x94, 0x08, 0xa3, 
-0x6f, 0x04, 0x96, 0x5f, 0x45, 0x7d, 0xcc, 0xa0, 
-0x7f, 0xa3, 0xa6, 0x8e, 0xcb, 0xbf, 0xef, 0x4f, 
-0xf5, 0x54, 0x9d, 0x1f, 0xe8, 0x8a, 0x16, 0xdb, 
-0xf2, 0x3f, 0x7e, 0x9f, 0xd1, 0x4f, 0xc8, 0x18, 
-0x8c, 0x3b, 0x98, 0x42, 0x60, 0x03, 0x14, 0x73, 
-0x03, 0x28, 0x63, 0x01, 0x4c, 0x7b, 0xd3, 0x09, 
-0x23, 0xba, 0x93, 0x09, 0x34, 0x7a, 0x53, 0x02, 
-0xb0, 0x26, 0xe3, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
-0x83, 0xca, 0xbc, 0x2b, 0x0e, 0x0f, 0xff, 0x84, 
-0x80, 0xda, 0x84, 0xe3, 0x41, 0xff, 0x6c, 0x94, 
-0x02, 0xec, 0x12, 0x73, 0x02, 0xf4, 0x06, 0xd3, 
-0x7b, 0x07, 0x0e, 0x32, 0x13, 0x12, 0xb9, 0x94, 
-0x13, 0x15, 0xad, 0xec, 0x91, 0xd8, 0x04, 0xfd, 
-0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xad, 0x31, 0x05, 0x35, 0x14, 
-0xcc, 0xb8, 0xe4, 0xdd, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x30, 0x3e, 0xc0, 0xac, 0x30, 
-0x5c, 0x80, 0x77, 0x30, 0x90, 0xc0, 0x5a, 0x30, 
-0xfc, 0x00, 0x77, 0x32, 0x38, 0xc1, 0xb0, 0x3e, 
-0x6b, 0x0f, 0x6e, 0x3e, 0x10, 0x41, 0x32, 0x32, 
-0x2d, 0x00, 0xfa, 0x30, 0xe1, 0x41, 0xd9, 0x30, 
-0x50, 0x42, 0x1d, 0x30, 0x18, 0x82, 0x42, 0x30, 
-0x03, 0x83, 0xf7, 0x30, 0xf5, 0x3c, 0x2e, 0x30, 
-0x20, 0x02, 0xa8, 0xf3, 0xd7, 0x24, 0x96, 0x51, 
-0xde, 0x37, 0x97, 0x09, 0x79, 0x76, 0xfa, 0x78, 
-0x9e, 0xfa, 0x35, 0x7f, 0xfd, 0x3a, 0x7e, 0xbf, 
-0xa6, 0x2e, 0x8d, 0x9f, 0x47, 0xef, 0xa3, 0xde, 
-0xde, 0xcf, 0x27, 0x49, 0x10, 0x61, 0xb1, 0xc1, 
-0x80, 0x8c, 0xa4, 0x8b, 0x63, 0x06, 0xdc, 0xcc, 
-0x04, 0x81, 0x23, 0x0c, 0x23, 0xd8, 0xd7, 0x0c, 
-0x23, 0x61, 0x1f, 0x8c, 0x07, 0xff, 0xfb, 0x92, 
-0xc4, 0xff, 0x83, 0xca, 0xc4, 0x2b, 0x0e, 0x0f, 
-0xff, 0x84, 0x80, 0xfe, 0x84, 0xa3, 0x41, 0xdf, 
-0xf0, 0x50, 0x90, 0x59, 0xcc, 0x06, 0xc0, 0x29, 
-0x8c, 0x06, 0x60, 0x0e, 0x8e, 0x1c, 0x34, 0xe6, 
-0x83, 0x84, 0xb0, 0x0a, 0x05, 0xdc, 0xc9, 0x1d, 
-0x80, 0x7c, 0xe7, 0xfd, 0x29, 0x88, 0x29, 0xa8, 
-0xa6, 0x65, 0xc7, 0x26, 0xea, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x40, 0x00, 
-0xb7, 0x30, 0x5d, 0x40, 0x8a, 0x30, 0x90, 0x80, 
-0x83, 0x30, 0xfb, 0xc0, 0xca, 0x32, 0x37, 0x02, 
-0xa9, 0x3e, 0x62, 0xd6, 0x8f, 0x3e, 0x07, 0x82, 
-0x39, 0x32, 0x2a, 0xc0, 0xaf, 0x30, 0xde, 0x01, 
-0xc0, 0x30, 0x4c, 0x02, 0x14, 0x30, 0x11, 0x42, 
-0x3f, 0x30, 0x0e, 0xc3, 0xf4, 0x31, 0xcd, 0x30, 
-0x00, 0x31, 0x1d, 0x02, 0x2d, 0x97, 0xa2, 0x4b, 
-0x2f, 0xa2, 0xbe, 0xec, 0xa3, 0xfd, 0x0c, 0xf6, 
-0xfa, 0xb4, 0x5a, 0xbf, 0x67, 0xff, 0xef, 0xd3, 
-0xfe, 0x9f, 0xf6, 0x7b, 0xba, 0x5f, 0xfe, 0x8f, 
-0x21, 0x49, 0x87, 0xc3, 0x89, 0x82, 0x25, 0xe0, 
-0x15, 0x45, 0x31, 0x02, 0x82, 0x30, 0x31, 0x47, 
-0xb5, 0x31, 0x4d, 0x3b, 0x63, 0x31, 0x48, 0x47, 
-0x9f, 0x30, 0x43, 0x02, 0x70, 0x30, 0x36, 0xff, 
-0xfb, 0x92, 0xc4, 0xff, 0x82, 0x4b, 0x14, 0x2b, 
-0x0e, 0x0f, 0xff, 0x84, 0x80, 0xcf, 0x04, 0x64, 
-0x55, 0xcf, 0xec, 0x56, 0x41, 0x33, 0x30, 0x31, 
-0x40, 0x7f, 0x37, 0xc0, 0xd8, 0xe3, 0x24, 0x53, 
-0x5b, 0x80, 0xc8, 0x89, 0x8a, 0xbd, 0xec, 0x91, 
-0xce, 0x02, 0x7e, 0xcf, 0xff, 0xd7, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x69, 
-0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xf5, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 
-0x41, 0x40, 0xc0, 0x30, 0x5d, 0x80, 0x9f, 0x30, 
-0x90, 0x40, 0xa6, 0x30, 0xfa, 0x81, 0x17, 0x32, 
-0x34, 0xc3, 0x84, 0x3e, 0x56, 0x1c, 0xf8, 0x3d, 
-0xfb, 0x43, 0x1c, 0x32, 0x27, 0x00, 0x5a, 0x30, 
-0xda, 0xc1, 0xa9, 0x30, 0x48, 0x42, 0x0d, 0x30, 
-0x08, 0x82, 0x3a, 0x30, 0x17, 0x83, 0xf1, 0x32, 
-0x75, 0x34, 0xc0, 0xa2, 0xe1, 0x40, 0x2a, 0xda, 
-0x7c, 0x66, 0xa7, 0x28, 0xef, 0x65, 0x7c, 0x4a, 
-0x73, 0xcf, 0xfa, 0xba, 0xed, 0xfb, 0x3e, 0xff, 
-0xfa, 0x35, 0xf7, 0x37, 0xfb, 0xbf, 0xa1, 0xdf, 
-0x4e, 0xee, 0x85, 0xbd, 0x7b, 0xfa, 0xcc, 0x39, 
-0x1b, 0x8c, 0x06, 0x2e, 0xcc, 0x0c, 0x50, 0x8c, 
-0x57, 0xa0, 0x4c, 0x0f, 0x41, 0xeb, 0x0c, 0x67, 
-0x5e, 0xc9, 0x8c, 0x65, 0x81, 0xe6, 0x0c, 0x13, 
-0x90, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xca, 
-0x94, 0x2b, 0x0e, 0x0f, 0xff, 0x84, 0x81, 0x03, 
-0x04, 0xa3, 0x41, 0xdf, 0xf0, 0x50, 0x9c, 0xcc, 
-0x0e, 0x60, 0x4e, 0x0c, 0x0c, 0x80, 0x21, 0x8d, 
-0xf2, 0x41, 0x38, 0xb1, 0x70, 0xd6, 0xc0, 0xa1, 
-0xe2, 0x5a, 0xac, 0x7b, 0xe4, 0x13, 0xe1, 0x89, 
-0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xea, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0x30, 0x42, 0x80, 0xcb, 0x30, 0x5e, 0x40, 
-0xb0, 0x30, 0x90, 0x00, 0xc9, 0x30, 0xf9, 0x41, 
-0x5a, 0x32, 0x32, 0x04, 0x4f, 0x3e, 0x45, 0xe2, 
-0xe9, 0x3d, 0xeb, 0x03, 0xed, 0x12, 0x44, 0x78, 
-0xc3, 0x5c, 0x06, 0x38, 0xc1, 0x10, 0x08, 0x08, 
-0x2a, 0x11, 0xb9, 0x80, 0xfe, 0x1f, 0x51, 0x98, 
-0xe9, 0x46, 0x0a, 0x17, 0x88, 0xc0, 0x8b, 0x25, 
-0xf0, 0x99, 0x9f, 0xa2, 0xbe, 0xe4, 0x4a, 0x1e, 
-0xf2, 0x4c, 0xd3, 0x6f, 0x0e, 0x6d, 0xeb, 0xf6, 
-0xff, 0xa3, 0xb3, 0xff, 0xda, 0x9a, 0xd9, 0xb3, 
-0xfb, 0xfa, 0x7f, 0x3f, 0x6f, 0xc8, 0x18, 0x68, 
-0x36, 0x81, 0x4b, 0x83, 0x06, 0xd4, 0x13, 0x1b, 
-0x27, 0xc3, 0x04, 0x8c, 0x7a, 0x33, 0x1e, 0x7b, 
-0xad, 0xb3, 0x1d, 0xec, 0x79, 0x13, 0x05, 0x80, 
-0x27, 0x23, 0x03, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
-0x83, 0xca, 0xe8, 0x2d, 0x0e, 0x0f, 0xff, 0x84, 
-0x80, 0xd0, 0x84, 0xa3, 0x41, 0xdf, 0xf0, 0x55, 
-0xd4, 0x13, 0xd3, 0x03, 0x2c, 0x08, 0xf3, 0x7c, 
-0x13, 0x0e, 0x2e, 0x71, 0x35, 0xa8, 0x4c, 0x68, 
-0x90, 0xab, 0xde, 0x49, 0x1c, 0xe0, 0x27, 0x5f, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xfd, 0x69, 0x88, 0x29, 0xa8, 0xa6, 
-0x65, 0xc7, 0x26, 0xf5, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x30, 0x43, 0xc0, 0xd4, 0x30, 
-0x5e, 0x00, 0xc3, 0x30, 0x8f, 0xc0, 0xe8, 0x30, 
-0xf8, 0x01, 0x9b, 0x32, 0x2e, 0xc5, 0x0c, 0x3e, 
-0x30, 0xa8, 0x7c, 0x3d, 0xd6, 0xc4, 0xac, 0x32, 
-0x1f, 0x00, 0x63, 0x30, 0xd3, 0xc1, 0x75, 0x30, 
-0x3f, 0xc1, 0xfb, 0x30, 0x03, 0x42, 0x32, 0x30, 
-0x27, 0x03, 0xe5, 0x33, 0xb5, 0x24, 0xc2, 0x22, 
-0xe1, 0x00, 0x15, 0x60, 0x9e, 0x99, 0xab, 0xd4, 
-0x77, 0x9e, 0x9a, 0xc3, 0x5e, 0xbe, 0x8b, 0x38, 
-0x4e, 0xe4, 0xfa, 0x7d, 0x3f, 0xd3, 0xfd, 0x65, 
-0x17, 0xfc, 0xae, 0xdd, 0xba, 0x3f, 0xd1, 0xe6, 
-0xc4, 0xe9, 0xac, 0x86, 0x01, 0x38, 0x0b, 0x02, 
-0x20, 0x27, 0x4c, 0x02, 0x00, 0x45, 0x0c, 0x06, 
-0xd0, 0x8a, 0x4c, 0x12, 0x01, 0xa9, 0x8c, 0x7a, 
-0x5c, 0xd6, 0x0d, 0xdf, 0x9a, 0xff, 0xfb, 0x92, 
-0xc4, 0xff, 0x83, 0xca, 0xa4, 0x2b, 0x0e, 0x0f, 
-0xff, 0x84, 0x81, 0x01, 0x04, 0xa3, 0x41, 0xdf, 
-0xf0, 0x50, 0x58, 0xc5, 0x54, 0x88, 0x4c, 0x37, 
-0x84, 0x58, 0xc2, 0xc0, 0x20, 0x0c, 0x35, 0xc1, 
-0x24, 0xc3, 0xb8, 0x1c, 0x0e, 0x68, 0x48, 0x68, 
-0xed, 0x6e, 0x40, 0xf3, 0x93, 0xf5, 0xce, 0x7f, 
-0xd2, 0x98, 0x82, 0x9a, 0x8a, 0x66, 0x5c, 0x72, 
-0x6e, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 0x44, 0x80, 
-0xdd, 0x30, 0x5e, 0x40, 0xd2, 0x30, 0x8e, 0x81, 
-0x09, 0x30, 0xf6, 0x41, 0xd6, 0x32, 0x2a, 0x85, 
-0xc1, 0x3e, 0x18, 0x6d, 0xc7, 0x3d, 0xbe, 0x05, 
-0x63, 0x32, 0x1a, 0x40, 0xb6, 0x30, 0xcf, 0x81, 
-0x58, 0x30, 0x3b, 0x01, 0xee, 0x30, 0x0c, 0x82, 
-0x2d, 0x30, 0x2e, 0xc3, 0xde, 0x30, 0x22, 0xc1, 
-0x46, 0x30, 0x05, 0x80, 0x2f, 0x0b, 0x80, 0x08, 
-0x0d, 0xd1, 0x64, 0x4d, 0x29, 0x94, 0x4f, 0xb6, 
-0x8f, 0x38, 0x1d, 0xf6, 0xf4, 0xdb, 0xbd, 0x97, 
-0xd9, 0xa3, 0xde, 0x8f, 0x56, 0xaa, 0xbf, 0xfc, 
-0xd5, 0x9e, 0xcb, 0x32, 0x7e, 0x73, 0xa7, 0xb3, 
-0xa1, 0xbf, 0x0e, 0x56, 0x60, 0x15, 0x00, 0xce, 
-0x54, 0x02, 0xd0, 0xc0, 0x35, 0x04, 0xf4, 0xc0, 
-0x92, 0x09, 0xd0, 0xc1, 0x77, 0x1e, 0x2c, 0xff, 
-0xfb, 0x92, 0xc4, 0xff, 0x82, 0xca, 0xf8, 0x2b, 
-0x0e, 0x0f, 0xff, 0x84, 0x80, 0xe4, 0x84, 0xe3, 
-0x95, 0xff, 0x6c, 0x94, 0xc9, 0xc4, 0xe8, 0x3c, 
-0xe6, 0x4d, 0xde, 0x4c, 0x6b, 0x89, 0xc0, 0xc4, 
-0x3c, 0x51, 0x4c, 0x34, 0x42, 0x7c, 0xc3, 0xe0, 
-0x18, 0x0c, 0x44, 0xc2, 0x5c, 0xec, 0xc8, 0x45, 
-0x92, 0x15, 0x1b, 0xc9, 0x17, 0x96, 0x54, 0xce, 
-0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xfa, 0xd3, 0x10, 0x53, 0x51, 
-0x4c, 0xcb, 0x8e, 0x4d, 0xea, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 
-0x50, 0x41, 0x0a, 0x30, 0x6c, 0x81, 0x07, 0x30, 
-0xa2, 0xc1, 0x50, 0x31, 0x17, 0x02, 0x5f, 0x32, 
-0x73, 0x47, 0x54, 0x3f, 0xec, 0xb9, 0xe4, 0x3f, 
-0x87, 0x46, 0xea, 0x32, 0x5f, 0x81, 0x29, 0x30, 
-0xe8, 0x41, 0x6d, 0x30, 0x3e, 0xc2, 0x2d, 0x30, 
-0x18, 0x42, 0x76, 0x30, 0x3d, 0x84, 0x63, 0x30, 
-0x2d, 0x01, 0x75, 0x30, 0x09, 0x40, 0x38, 0x06, 
-0x00, 0x12, 0x07, 0x61, 0x35, 0x27, 0x1e, 0x29, 
-0x1e, 0x7d, 0xf9, 0xd5, 0xa0, 0xdf, 0xd4, 0x8b, 
-0x3f, 0xda, 0xea, 0xfe, 0xb4, 0x9a, 0xdf, 0xdf, 
-0x5b, 0xff, 0xd7, 0xff, 0xff, 0xff, 0x55, 0xe8, 
-0xdf, 0xfe, 0xff, 0x2f, 0x93, 0xff, 0x4b, 0x7f, 
-0xed, 0x4f, 0x1b, 0xd0, 0xb3, 0xee, 0xaa, 0xfd, 
-0x06, 0x01, 0x38, 0x0c, 0x42, 0x10, 0x2c, 0xcc, 
-0x04, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xcb, 
-0xdc, 0x3b, 0x0e, 0x0f, 0xfd, 0xa4, 0xc1, 0x0d, 
-0x85, 0x23, 0x41, 0xff, 0x6c, 0x90, 0x00, 0x4e, 
-0x0c, 0x0a, 0x50, 0x9b, 0xcc, 0x19, 0xe1, 0xde, 
-0x0c, 0xac, 0x7e, 0x63, 0x8e, 0xa3, 0x1d, 0xa0, 
-0xc7, 0x4c, 0x9b, 0x4c, 0x46, 0x85, 0x20, 0xc3, 
-0x48, 0x29, 0x8c, 0x3d, 0xc1, 0xac, 0xc4, 0x40, 
-0x2a, 0x0e, 0xc0, 0x98, 0x49, 0x2d, 0x50, 0x3c, 
-0xf1, 0x49, 0x7d, 0x7c, 0x2a, 0x4c, 0x41, 0x4d, 
-0x45, 0x33, 0x2e, 0x39, 0x37, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0x30, 0x51, 0x01, 0x13, 0x30, 0x6c, 0x41, 
-0x18, 0x30, 0xa1, 0x01, 0x71, 0x31, 0x14, 0xc2, 
-0x9c, 0x32, 0x6d, 0x08, 0x11, 0x3f, 0xc7, 0x7f, 
-0x65, 0x3f, 0x62, 0x07, 0xa7, 0x32, 0x58, 0xc1, 
-0x74, 0x30, 0xe3, 0x01, 0x4a, 0x30, 0x39, 0x02, 
-0x1e, 0x30, 0x20, 0x82, 0x6f, 0x30, 0x45, 0x44, 
-0x58, 0x30, 0x32, 0x41, 0x70, 0x30, 0x0a, 0x80, 
-0x37, 0x04, 0x80, 0x10, 0x06, 0x48, 0x93, 0x13, 
-0x4b, 0x4b, 0x0f, 0xb6, 0xcd, 0x9c, 0x52, 0x76, 
-0xed, 0xad, 0xf5, 0x7f, 0x6f, 0x55, 0xbd, 0xfd, 
-0x7e, 0x9f, 0xed, 0x5f, 0xfc, 0xfd, 0xed, 0xf9, 
-0xff, 0xd9, 0x5f, 0xf4, 0xff, 0xd3, 0xaa, 0xd3, 
-0xff, 0x7a, 0x7e, 0xb7, 0xfc, 0x7f, 0xb1, 0x96, 
-0xfc, 0x39, 0x41, 0x80, 0x40, 0x02, 0xf8, 0x00, 
-0x0a, 0xe3, 0x01, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
-0x83, 0xcd, 0x2d, 0x61, 0x0c, 0x0f, 0xb4, 0x4d, 
-0xc0, 0xde, 0x85, 0x23, 0x41, 0xff, 0x6c, 0x94, 
-0x2c, 0x13, 0x53, 0x02, 0xd8, 0x26, 0x83, 0x07, 
-0x14, 0x76, 0x73, 0x2e, 0xf3, 0x8f, 0xf3, 0xb7, 
-0xd7, 0x59, 0x31, 0xf6, 0x26, 0xa3, 0x12, 0x71, 
-0x4b, 0x30, 0xd7, 0x0a, 0xd3, 0x0f, 0x60, 0x74, 
-0x31, 0x0d, 0x0b, 0xb3, 0xaf, 0x2d, 0x0e, 0x44, 
-0x52, 0x6f, 0x24, 0x5e, 0x59, 0x53, 0x3a, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xeb, 0x4c, 0x41, 0x4d, 0x45, 0x33, 
-0x2e, 0x39, 0x37, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0x30, 0x47, 0x40, 0xf6, 0x30, 
-0x5e, 0x01, 0x03, 0x30, 0x8b, 0xc1, 0x5c, 0x30, 
-0xef, 0x02, 0x7d, 0x32, 0x1a, 0xc7, 0xae, 0x3d, 
-0xb5, 0x3c, 0x4a, 0x3d, 0x5d, 0x47, 0x52, 0x32, 
-0x07, 0x81, 0x83, 0x30, 0xc1, 0xc0, 0xff, 0x30, 
-0x2c, 0x41, 0xcd, 0x30, 0x22, 0xc2, 0x18, 0x30, 
-0x42, 0x03, 0xc3, 0x35, 0xe4, 0xf4, 0xc5, 0x22, 
-0xc0, 0x40, 0x15, 0x5b, 0xa0, 0x1a, 0xd6, 0x2d, 
-0x19, 0xed, 0x08, 0xf5, 0x18, 0xf4, 0xf5, 0xb5, 
-0x17, 0xdb, 0x6b, 0xfd, 0xdf, 0xff, 0xed, 0xf5, 
-0x6e, 0x3b, 0x4f, 0xd0, 0xef, 0xa3, 0x75, 0x14, 
-0xad, 0xff, 0xa1, 0x06, 0x00, 0xd8, 0x0b, 0x46, 
-0x00, 0x48, 0x15, 0x66, 0x02, 0xb0, 0x26, 0x06, 
-0x06, 0x38, 0x4c, 0x66, 0x0f, 0x40, 0xea, 0x46, 
-0x65, 0x4f, 0x0b, 0x87, 0x8c, 0xff, 0xfb, 0x92, 
-0xc4, 0xff, 0x83, 0xcd, 0x35, 0x5f, 0x0c, 0x0f, 
-0xb4, 0x4d, 0xc1, 0x0d, 0x85, 0x23, 0x41, 0xff, 
-0x6c, 0x90, 0x4e, 0x88, 0x64, 0x32, 0x4c, 0xe6, 
-0x26, 0x02, 0x9c, 0x61, 0xb0, 0x16, 0x86, 0x1e, 
-0xa0, 0xfa, 0x62, 0x14, 0x19, 0x47, 0x58, 0x64, 
-0x1c, 0x8e, 0xa4, 0x1e, 0x78, 0xa4, 0xbe, 0xbe, 
-0x15, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xd4, 0x98, 0x82, 0x9a, 
-0x8a, 0x66, 0x5c, 0x72, 0x6f, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x01, 0xc9, 
-0xd9, 0x00, 0x00, 0x03, 0x01, 0x48, 0x04, 0x73, 
-0x01, 0xc4, 0x04, 0xc3, 0x02, 0xc0, 0x07, 0x13, 
-0x04, 0xec, 0x0e, 0x03, 0x0b, 0x70, 0x2d, 0x93, 
-0x4c, 0x55, 0x6d, 0x13, 0x4a, 0x68, 0x2b, 0x93, 
-0x0b, 0x04, 0x08, 0xa3, 0x7c, 0x0e, 0x8c, 0x48, 
-0x8a, 0x31, 0x32, 0xa4, 0xca, 0x73, 0xc3, 0x1a, 
-0x96, 0x8b, 0x4a, 0xe1, 0x43, 0x35, 0xb7, 0xdb, 
-0x3d, 0xff, 0xd2, 0xfe, 0xb4, 0xc7, 0x71, 0xa7, 
-0x33, 0x59, 0x01, 0x8e, 0xac, 0xc0, 0x1c, 0x01, 
-0xa4, 0xc0, 0x16, 0x03, 0x08, 0xc0, 0x71, 0x05, 
-0x6c, 0xc0, 0xf8, 0x0a, 0xc8, 0xc2, 0x59, 0x21, 
-0x04, 0xcf, 0x70, 0xfd, 0xa4, 0xfc, 0x6e, 0x0c, 
-0xcc, 0xa2, 0x8a, 0xe8, 0xc5, 0xb4, 0x60, 0xcc, 
-0x3f, 0x43, 0x64, 0xc4, 0x60, 0x27, 0x0c, 0xff, 
-0xfb, 0x92, 0xc4, 0xff, 0x83, 0xcb, 0x0c, 0x29, 
-0x0e, 0x0f, 0xff, 0x84, 0x81, 0x12, 0x05, 0x23, 
-0x41, 0xff, 0x6c, 0x90, 0x4b, 0xc3, 0xfc, 0xf1, 
-0x50, 0xc2, 0x15, 0x12, 0xed, 0xd4, 0x8b, 0xc5, 
-0x2a, 0x67, 0x5f, 0xff, 0xfd, 0x7f, 0xff, 0xff, 
-0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xfd, 0x69, 
-0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xea, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x30, 
-0x3e, 0xc0, 0xe0, 0x30, 0x51, 0x00, 0xf9, 0x30, 
-0x77, 0x41, 0x5a, 0x30, 0xcc, 0x02, 0x83, 0x31, 
-0xcc, 0x47, 0xbe, 0x3b, 0xbc, 0xbc, 0x98, 0x3b, 
-0x71, 0x47, 0x70, 0x31, 0xb9, 0x81, 0xb7, 0x30, 
-0xa0, 0x40, 0xa1, 0x30, 0x1c, 0x41, 0x7b, 0x30, 
-0x28, 0xc1, 0xc4, 0x30, 0x43, 0x03, 0x35, 0x35, 
-0xf4, 0x2c, 0xc5, 0x22, 0x22, 0xce, 0xae, 0x68, 
-0x67, 0x2b, 0x16, 0x9c, 0xfd, 0xae, 0xf3, 0x1e, 
-0xbe, 0xbf, 0xff, 0xff, 0xbf, 0xfd, 0xdf, 0xdf, 
-0xaf, 0xf7, 0x7d, 0x1b, 0xba, 0x2f, 0xd7, 0xd2, 
-0x83, 0x00, 0x54, 0x06, 0x23, 0x00, 0x84, 0x0b, 
-0xf3, 0x01, 0xf0, 0x15, 0x43, 0x04, 0x2c, 0x2a, 
-0x93, 0x09, 0xf8, 0x82, 0x43, 0x41, 0xaf, 0xe8, 
-0xc3, 0x40, 0x30, 0x81, 0x63, 0x0a, 0xbc, 0x2b, 
-0x53, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x82, 0x48, 
-0xf8, 0x55, 0x1f, 0x4f, 0xf0, 0x47, 0x21, 0x16, 
-0x85, 0x23, 0x01, 0xff, 0x6c, 0x90, 0x05, 0xd8, 
-0x18, 0x43, 0x03, 0xf0, 0x0d, 0xe3, 0x04, 0x5c, 
-0x0a, 0x73, 0x04, 0xa8, 0x10, 0xe3, 0xc2, 0x48, 
-0x07, 0x29, 0xa5, 0xc3, 0xaf, 0x0e, 0x45, 0xeb, 
-0x9c, 0xb2, 0xaf, 0xff, 0xec, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xcd, 0x29, 
-0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xf5, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x30, 0x36, 0x00, 0xc7, 0x30, 0x45, 0xc0, 
-0xe0, 0x30, 0x66, 0x81, 0x3f, 0x30, 0xaf, 0xc2, 
-0x56, 0x31, 0x8d, 0x07, 0x35, 0x3a, 0x27, 0xf8, 
-0x61, 0x39, 0xe6, 0x06, 0xf1, 0x31, 0x7c, 0x41, 
-0xa6, 0x30, 0x87, 0x00, 0x6c, 0x30, 0x13, 0x01, 
-0x3c, 0x30, 0x27, 0x01, 0x83, 0x30, 0x3e, 0xc2, 
-0xc0, 0x3a, 0xfe, 0x23, 0x22, 0x19, 0x2e, 0xf3, 
-0x29, 0x8d, 0x63, 0xdb, 0x2f, 0xec, 0x7f, 0x8e, 
-0xef, 0xe8, 0x57, 0xff, 0x4f, 0xff, 0xfd, 0x7f, 
-0xf7, 0xfa, 0xbf, 0xa3, 0xdf, 0xf5, 0xff, 0x49, 
-0x80, 0x1c, 0x02, 0xf9, 0x80, 0x50, 0x05, 0xd1, 
-0x81, 0x0e, 0x0a, 0x79, 0x82, 0x34, 0x14, 0xf1, 
-0x85, 0x4a, 0x40, 0x29, 0xa2, 0xb1, 0xec, 0xe9, 
-0xa1, 0xea, 0x3f, 0xc9, 0x85, 0xa0, 0x15, 0x71, 
-0x83, 0x06, 0x0c, 0xff, 0xfb, 0x92, 0xc4, 0xff, 
-0x83, 0xca, 0x30, 0x29, 0x10, 0x0f, 0xff, 0x84, 
-0x81, 0x27, 0x84, 0xe3, 0x01, 0xff, 0xec, 0x90, 
-0x39, 0x81, 0xfe, 0x07, 0x29, 0x82, 0x24, 0x05, 
-0x71, 0x82, 0x4e, 0x09, 0x09, 0xdf, 0xa7, 0x83, 
-0x94, 0x12, 0xed, 0xd4, 0x8b, 0xc5, 0x2a, 0x67, 
-0x5e, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xdd, 0xff, 0xff, 0xff, 0xfd, 0x69, 0x88, 0x29, 
-0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xea, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0x30, 0x36, 0xc0, 0xcc, 0x30, 0x45, 
-0x00, 0xeb, 0x30, 0x65, 0x41, 0x50, 0x30, 0xac, 
-0x82, 0x79, 0x31, 0x86, 0xc7, 0x9c, 0x39, 0xfe, 
-0xbb, 0x6e, 0x39, 0xbe, 0x47, 0x58, 0x31, 0x75, 
-0x01, 0xcf, 0x30, 0x82, 0xc0, 0x4f, 0x30, 0x0e, 
-0x41, 0x31, 0x30, 0x2b, 0xc1, 0x7a, 0x30, 0x42, 
-0x82, 0xb7, 0x3b, 0x8d, 0xf3, 0x27, 0x18, 0x2e, 
-0xeb, 0x0e, 0x8c, 0xe5, 0xcb, 0x5c, 0xeb, 0x47, 
-0xa3, 0xa2, 0xdf, 0xbf, 0xff, 0xff, 0xff, 0xfe, 
-0x9f, 0xfe, 0x8f, 0xdb, 0x47, 0xd2, 0x60, 0x03, 
-0x80, 0xb0, 0x60, 0x19, 0x81, 0x6a, 0x60, 0x48, 
-0x02, 0x90, 0x60, 0x95, 0x85, 0x2a, 0x61, 0x64, 
-0x0f, 0xc8, 0x69, 0x1f, 0xf9, 0x30, 0x68, 0xeb, 
-0x0f, 0xb0, 0x61, 0x79, 0x85, 0x4e, 0x60, 0xc6, 
-0x03, 0x10, 0x60, 0x80, 0x01, 0xff, 0xfb, 0x90, 
-0xc4, 0xff, 0x83, 0xc9, 0xd4, 0x29, 0x12, 0x0f, 
-0xff, 0x64, 0x81, 0x23, 0x05, 0x23, 0x01, 0xff, 
-0xec, 0x90, 0xd8, 0x60, 0x88, 0x81, 0x72, 0x60, 
-0x91, 0x02, 0x60, 0x77, 0x4a, 0x80, 0xa4, 0xf4, 
-0xf8, 0x71, 0xe1, 0xc8, 0xbd, 0x70, 0x4e, 0xca, 
-0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xb3, 0x4a, 0x62, 0x0a, 0x6a, 
-0x29, 0x99, 0x71, 0xc9, 0xbd, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x30, 0x36, 0x80, 0xd1, 
-0x30, 0x44, 0xc0, 0xf2, 0x30, 0x63, 0x81, 0x63, 
-0x30, 0xa9, 0xc2, 0x9a, 0x31, 0x7f, 0x88, 0x01, 
-0x39, 0xd2, 0xfe, 0x61, 0x39, 0x92, 0x87, 0xbd, 
-0x31, 0x6d, 0xc1, 0xf4, 0x30, 0x7d, 0x80, 0x2c, 
-0x30, 0x08, 0x81, 0x26, 0x30, 0x2f, 0x81, 0x73, 
-0x30, 0x46, 0xc2, 0xa8, 0x3c, 0x5d, 0xa3, 0x2a, 
-0x19, 0x2e, 0x53, 0x0d, 0x8d, 0x63, 0x95, 0x9c, 
-0xba, 0x53, 0xe9, 0x67, 0xfe, 0xef, 0x5f, 0xff, 
-0xff, 0xe9, 0xfa, 0x3f, 0xf9, 0x3f, 0x7b, 0xf4, 
-0xff, 0xfe, 0xfa, 0x40, 0x80, 0x2a, 0x98, 0x07, 
-0x40, 0x58, 0x18, 0x13, 0x60, 0xa1, 0x98, 0x27, 
-0x41, 0x44, 0x18, 0x5d, 0x63, 0xe0, 0x9a, 0x63, 
-0x9d, 0xc1, 0x9a, 0x55, 0xa3, 0xdb, 0x98, 0x62, 
-0x01, 0x4f, 0x18, 0x32, 0xe0, 0xc4, 0xff, 0xfb, 
-0x92, 0xc4, 0xff, 0x83, 0xc9, 0x7c, 0x2b, 0x12, 
-0x0f, 0xff, 0x64, 0x81, 0x27, 0x04, 0xe3, 0x01, 
-0xff, 0xec, 0x90, 0x98, 0x20, 0x20, 0x79, 0x98, 
-0x21, 0x80, 0x60, 0x18, 0x23, 0xa0, 0xa0, 0x9d, 
-0xba, 0xd8, 0x19, 0x31, 0x35, 0xdc, 0x48, 0x7e, 
-0x1c, 0xa4, 0xce, 0xbd, 0xbf, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xad, 
-0x31, 0x05, 0x35, 0x14, 0xcc, 0xb8, 0xe4, 0xdd, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x32, 0xfc, 
-0xb6, 0x33, 0xa8, 0xdb, 0x35, 0x55, 0x42, 0x39, 
-0x12, 0x63, 0x31, 0x49, 0xc7, 0x58, 0x38, 0x75, 
-0xb9, 0x3e, 0x38, 0x3e, 0xc7, 0x1c, 0x31, 0x39, 
-0x01, 0xd5, 0x30, 0x69, 0x40, 0x01, 0x30, 0x01, 
-0xc0, 0xf3, 0x32, 0xc5, 0x3a, 0x34, 0x02, 0x47, 
-0x32, 0xc0, 0xb9, 0x30, 0x94, 0x10, 0x41, 0xd6, 
-0x75, 0x19, 0x10, 0x87, 0x3d, 0x1e, 0x8f, 0xfe, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 
-0x21, 0x01, 0x38, 0xc0, 0x41, 0x02, 0xac, 0xc0, 
-0xa4, 0x04, 0xe8, 0xc1, 0x4b, 0x09, 0xec, 0xc3, 
-0x0a, 0x1e, 0x60, 0xd3, 0xf3, 0xe9, 0x68, 0xd3, 
-0x7c, 0x1e, 0x48, 0xc3, 0x2f, 0x0a, 0x5c, 0xc1, 
-0x9e, 0x06, 0x20, 0xc1, 0x00, 0x03, 0xd8, 0xc1, 
-0x09, 0x03, 0x24, 0xc1, 0x16, 0x05, 0x38, 0xec, 
-0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc9, 0xe8, 
-0x2b, 0x12, 0x0f, 0xff, 0x64, 0x81, 0x1e, 0x05, 
-0x23, 0x01, 0xff, 0xec, 0x90, 0x98, 0x00, 0xc9, 
-0x69, 0xa8, 0xe3, 0xc3, 0x91, 0xba, 0xf8, 0x55, 
-0xb3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 
-0xff, 0xff, 0xff, 0xff, 0x52, 0x62, 0x0a, 0x6a, 
-0x29, 0x99, 0x71, 0xc9, 0xba, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0x32, 0xf8, 0xbb, 0x33, 0xa4, 0xe2, 0x35, 0x31, 
-0x51, 0x38, 0xe6, 0x7c, 0x31, 0x42, 0x87, 0xa9, 
-0x38, 0x49, 0xfb, 0xa1, 0x38, 0x13, 0x87, 0x6f, 
-0x31, 0x31, 0xc1, 0xf4, 0x01, 0x06, 0x4a, 0x40, 
-0x07, 0x41, 0x97, 0xc9, 0x89, 0xa1, 0xf1, 0xd1, 
-0x97, 0x65, 0xa1, 0x84, 0xc0, 0x7a, 0x0f, 0x33, 
-0x98, 0xd6, 0xc1, 0x97, 0xfb, 0xff, 0xff, 0x77, 
-0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfb, 
-0xff, 0xfe, 0x92, 0x40, 0x12, 0x4c, 0x04, 0x80, 
-0x29, 0x0c, 0x0a, 0xd0, 0x4c, 0xcc, 0x15, 0x80, 
-0x9b, 0x0c, 0x32, 0xb1, 0xdc, 0x4d, 0x4b, 0xee, 
-0x47, 0xcd, 0x44, 0x51, 0xda, 0xcc, 0x34, 0xc0, 
-0xa3, 0x0c, 0x1a, 0x90, 0x62, 0x4c, 0x10, 0x10, 
-0x3f, 0x4c, 0x10, 0x40, 0x34, 0x0c, 0x11, 0x10, 
-0x57, 0x4e, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 
-0xc8, 0x3c, 0x23, 0x14, 0x0e, 0xff, 0xa2, 0x81, 
-0x1f, 0x05, 0x23, 0x01, 0xff, 0xec, 0x90, 0xbd, 
-0x94, 0x04, 0x88, 0x9a, 0xee, 0x24, 0x3f, 0x0e, 
-0x52, 0x66, 0xe5, 0xed, 0xfb, 0xff, 0xd7, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 
-0x69, 0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 
-0xf5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x32, 0xfc, 0xbe, 0x33, 0x90, 0xe9, 
-0x35, 0x1d, 0x5c, 0x38, 0xaa, 0x97, 0x31, 0x3b, 
-0x47, 0xf6, 0x38, 0x1b, 0x3d, 0xea, 0x37, 0xe5, 
-0xc7, 0xbc, 0x31, 0x29, 0x82, 0x13, 0x30, 0x60, 
-0x40, 0x22, 0x30, 0x00, 0x00, 0xdd, 0x33, 0x35, 
-0x28, 0x34, 0x6a, 0x2d, 0x33, 0x08, 0xb1, 0x30, 
-0xa4, 0x0e, 0x40, 0x0b, 0x3a, 0x8c, 0xac, 0x39, 
-0x4e, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 
-0xff, 0x6f, 0xff, 0xe8, 0xff, 0xff, 0xa4, 0x44, 
-0x02, 0x81, 0x80, 0xbe, 0x05, 0xc9, 0x81, 0xa4, 
-0x0a, 0xc1, 0x83, 0x3a, 0x15, 0xb9, 0x87, 0x80, 
-0x42, 0x61, 0xb1, 0x07, 0xfc, 0xa1, 0xaf, 0xe0, 
-0x42, 0x31, 0x87, 0xca, 0x16, 0xf9, 0x83, 0xe0, 
-0x0e, 0x11, 0x82, 0x50, 0x09, 0x41, 0x82, 0x52, 
-0x07, 0xc9, 0x82, 0x64, 0xff, 0xfb, 0x92, 0xc4, 
-0xff, 0x83, 0xc8, 0x50, 0x25, 0x14, 0x0e, 0xff, 
-0xa2, 0x81, 0x23, 0x85, 0x23, 0x01, 0xff, 0xec, 
-0x90, 0x0d, 0x01, 0xe2, 0x3e, 0x19, 0x58, 0x1a, 
-0x38, 0x35, 0xf8, 0x72, 0x1f, 0xa7, 0xc0, 0xfa, 
-0xb6, 0x7d, 0xdf, 0xea, 0xff, 0xff, 0xff, 0xff, 
-0xfe, 0xff, 0xff, 0xff, 0xff, 0xea, 0x4c, 0x41, 
-0x4d, 0x45, 0x33, 0x2e, 0x39, 0x37, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x32, 0x88, 0xa7, 0x33, 
-0x0c, 0xce, 0x34, 0x51, 0x3b, 0x37, 0x66, 0x58, 
-0x31, 0x0c, 0x87, 0x3d, 0x36, 0xf1, 0xf8, 0x47, 
-0x36, 0xc4, 0x07, 0x09, 0x30, 0xfd, 0x41, 0xe6, 
-0x30, 0x4f, 0x00, 0x35, 0x30, 0x04, 0x40, 0xb2, 
-0x35, 0xd3, 0xe4, 0xdf, 0xfd, 0x83, 0x56, 0xa4, 
-0x8c, 0x44, 0x09, 0x47, 0xe7, 0x26, 0x5d, 0x0d, 
-0xfa, 0x7f, 0xff, 0x67, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xf4, 0xff, 0xa4, 0x0a, 0x02, 0x59, 0x80, 
-0xcc, 0x05, 0x91, 0x81, 0xba, 0x0a, 0x79, 0x83, 
-0x54, 0x15, 0x21, 0x87, 0xc6, 0x40, 0xb9, 0xb2, 
-0xb1, 0xf0, 0x19, 0xb1, 0x82, 0x40, 0xa9, 0x88, 
-0x04, 0x16, 0x81, 0x83, 0xf2, 0x0e, 0x09, 0x82, 
-0x4e, 0x09, 0x79, 0x82, 0x44, 0x08, 0x01, 0x82, 
-0x5a, 0x0d, 0x89, 0xe0, 0xc1, 0x99, 0xff, 0xfb, 
-0x92, 0xc4, 0xff, 0x83, 0xc8, 0x98, 0x23, 0x14, 
-0x0e, 0xff, 0xa2, 0x81, 0x29, 0x05, 0x22, 0xc1, 
-0xff, 0xec, 0x90, 0x40, 0x22, 0x1b, 0xb5, 0xc7, 
-0xfe, 0x1c, 0xa4, 0xb7, 0x85, 0xb5, 0xfd, 0x3f, 
-0xf6, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xe8, 0xff, 
-0xff, 0xff, 0xff, 0x6e, 0x84, 0xc4, 0x14, 0xd4, 
-0x53, 0x32, 0xe3, 0x93, 0x75, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x32, 0x8c, 
-0xa8, 0x32, 0xf8, 0xd5, 0x34, 0x3d, 0x44, 0x37, 
-0x2a, 0x6f, 0x31, 0x05, 0xc7, 0x7a, 0x36, 0xc4, 
-0x3a, 0x1e, 0x36, 0x97, 0x47, 0x48, 0x30, 0xf5, 
-0x01, 0xff, 0x30, 0x4a, 0xc0, 0x4c, 0x30, 0x08, 
-0x00, 0xa7, 0x36, 0x2b, 0xc0, 0xe1, 0x1c, 0xd3, 
-0x5a, 0x23, 0xcc, 0x4a, 0x06, 0x47, 0xd7, 0x1a, 
-0x5b, 0x0e, 0x75, 0x23, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xfa, 0x0c, 0x00, 0x60, 
-0x10, 0x8c, 0x06, 0xf0, 0x2a, 0xcc, 0x0e, 0x60, 
-0x51, 0x0c, 0x1b, 0x90, 0xa4, 0xcc, 0x40, 0x01, 
-0xf8, 0x0d, 0xa2, 0x5f, 0x17, 0x0d, 0x98, 0x61, 
-0xf8, 0x0c, 0x42, 0x10, 0xb0, 0xcc, 0x20, 0x00, 
-0x6f, 0x8c, 0x12, 0x60, 0x4c, 0x8c, 0x11, 0xd0, 
-0x42, 0x4c, 0x12, 0x20, 0x6f, 0x8e, 0xea, 0x18, 
-0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc7, 0xf8, 
-0x23, 0x16, 0x0e, 0xff, 0x82, 0x81, 0x2f, 0x05, 
-0x62, 0xc1, 0xff, 0xec, 0x90, 0xc9, 0xc1, 0x51, 
-0xf1, 0xaf, 0xbf, 0x90, 0xfd, 0x3d, 0x87, 0xab, 
-0x67, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 
-0xff, 0xff, 0xff, 0xff, 0xea, 0x4c, 0x41, 0x4d, 
-0x45, 0x33, 0x2e, 0x39, 0x37, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x32, 0x88, 0xab, 0x32, 0xf4, 0xda, 0x34, 0x19, 
-0x4f, 0x36, 0xfe, 0x82, 0x30, 0xfe, 0x07, 0xb7, 
-0x36, 0x93, 0xfb, 0xe1, 0x36, 0x68, 0x07, 0x85, 
-0x30, 0xed, 0x42, 0x16, 0x30, 0x45, 0x80, 0x63, 
-0x30, 0x0c, 0x40, 0x9c, 0x36, 0x73, 0xa4, 0xe2, 
-0x7b, 0xe3, 0x5d, 0xa2, 0x0c, 0x4c, 0x07, 0x43, 
-0x67, 0x16, 0x5c, 0xa0, 0xdf, 0x5a, 0x7d, 0x1f, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 
-0x4c, 0x01, 0x10, 0x0e, 0xcc, 0x07, 0x60, 0x28, 
-0x8c, 0x0e, 0xf0, 0x4e, 0xcc, 0x1c, 0x60, 0xa0, 
-0x0c, 0x41, 0xf1, 0xe9, 0xcd, 0xae, 0x6e, 0xa8, 
-0x4d, 0xa4, 0x51, 0xea, 0x4c, 0x43, 0xa0, 0xad, 
-0x0c, 0x20, 0x90, 0x6f, 0x4c, 0x12, 0x50, 0x4d, 
-0xcc, 0x11, 0x60, 0x44, 0x0c, 0x11, 0xb0, 0x73, 
-0x4e, 0xce, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 
-0xc7, 0xe8, 0x23, 0x16, 0x0e, 0xff, 0x82, 0x81, 
-0x2b, 0x05, 0x22, 0xc1, 0xff, 0xec, 0x90, 0x2c, 
-0xc9, 0x01, 0x91, 0xfd, 0xae, 0x3f, 0xf0, 0xe5, 
-0x26, 0x6e, 0x5f, 0xff, 0xfd, 0x7f, 0xff, 0xff, 
-0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xfd, 0x69, 
-0x88, 0x29, 0xa8, 0xa6, 0x65, 0xc7, 0x26, 0xea, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0x32, 0x84, 0xac, 0x32, 0xe0, 0xdf, 
-0x33, 0xfd, 0x58, 0x36, 0xba, 0x95, 0x30, 0xf6, 
-0x47, 0xee, 0x36, 0x61, 0x3d, 0x8c, 0x36, 0x36, 
-0xc7, 0xbe, 0x30, 0xe4, 0x82, 0x2d, 0x30, 0x41, 
-0x40, 0x76, 0x30, 0x0f, 0x80, 0x8f, 0x36, 0xcb, 
-0x78, 0xe3, 0x5b, 0x13, 0x60, 0x21, 0x4c, 0x52, 
-0x04, 0x43, 0x57, 0x1a, 0x5a, 0xb0, 0xe7, 0x52, 
-0x3d, 0x3f, 0xfd, 0xdf, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0x47, 0xfa, 0x0c, 0x01, 0x80, 0x0c, 0x8c, 
-0x07, 0xd0, 0x26, 0xcc, 0x0f, 0x60, 0x4b, 0x8c, 
-0x1d, 0x50, 0x9b, 0x4c, 0x43, 0xc1, 0xda, 0x8d, 
-0xba, 0x1e, 0x33, 0x8d, 0xaf, 0x81, 0xdb, 0x0c, 
-0x45, 0x50, 0xa9, 0x4c, 0x20, 0xe0, 0x6e, 0x8c, 
-0x12, 0x20, 0x4e, 0x8c, 0x11, 0x10, 0x45, 0xcc, 
-0x11, 0x20, 0x76, 0x0e, 0xff, 0xfb, 0x92, 0xc4, 
-0xff, 0x83, 0xc8, 0x08, 0x23, 0x16, 0x0e, 0xff, 
-0x82, 0x81, 0x28, 0x85, 0x22, 0xc1, 0xff, 0xec, 
-0x90, 0xb2, 0x40, 0xc8, 0xc1, 0xd1, 0xf1, 0xaf, 
-0xbf, 0x90, 0xfd, 0x3e, 0x07, 0xd5, 0xfe, 0xaf, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xff, 0xf5, 0x26, 0x20, 0xa6, 0xa2, 0x99, 0x97, 
-0x1c, 0x9b, 0xd5, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x32, 0x80, 0xaf, 0x32, 
-0xd4, 0xe4, 0x33, 0xd9, 0x63, 0x36, 0x86, 0xa6, 
-0x30, 0xed, 0x88, 0x25, 0x36, 0x2c, 0xff, 0x25, 
-0x36, 0x03, 0x07, 0xf5, 0x30, 0xdc, 0x42, 0x42, 
-0x30, 0x3c, 0x00, 0x8b, 0x30, 0x13, 0x40, 0x82, 
-0x37, 0x13, 0x54, 0xe4, 0xba, 0x03, 0x63, 0x9f, 
-0x8c, 0x54, 0x05, 0x47, 0x27, 0x16, 0x2d, 0xe2, 
-0x17, 0xf6, 0xbf, 0xdd, 0xff, 0xa7, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xee, 
-0xf5, 0x18, 0x05, 0x20, 0x1a, 0x98, 0x13, 0x00, 
-0x55, 0x18, 0x24, 0xe0, 0xa8, 0x98, 0x44, 0xc1, 
-0x57, 0x18, 0x9e, 0xa4, 0x17, 0x9c, 0x08, 0x1f, 
-0x45, 0x9b, 0xef, 0xe4, 0x1a, 0x98, 0xa1, 0xc1, 
-0x79, 0x18, 0x4c, 0x60, 0xfb, 0x98, 0x29, 0xa0, 
-0xb7, 0x98, 0x26, 0x40, 0xa4, 0x18, 0xff, 0xfb, 
-0x92, 0xc4, 0xff, 0x83, 0xc8, 0x28, 0x23, 0x16, 
-0x0e, 0xff, 0x82, 0x81, 0x27, 0x85, 0x22, 0xc1, 
-0xff, 0xec, 0x90, 0x26, 0x21, 0x16, 0x9e, 0x0d, 
-0x69, 0x94, 0x06, 0x20, 0x0d, 0x9c, 0x3f, 0xef, 
-0xe5, 0x25, 0xb7, 0x2f, 0xff, 0xfe, 0xbf, 0xff, 
-0xff, 0xff, 0xff, 0xee, 0xab, 0xff, 0xfb, 0xbf, 
-0xdd, 0xeb, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 
-0x39, 0x37, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x32, 0x24, 
-0x96, 0x32, 0x58, 0xc9, 0x33, 0x3d, 0x3a, 0x35, 
-0x72, 0x61, 0x30, 0xc8, 0x47, 0x50, 0x35, 0x3a, 
-0xb8, 0xc2, 0x35, 0x17, 0x47, 0x26, 0x30, 0xb8, 
-0x02, 0x0b, 0x30, 0x2f, 0x40, 0x86, 0x30, 0x12, 
-0x80, 0x65, 0x36, 0x5a, 0xb8, 0xe0, 0x95, 0xd3, 
-0x57, 0x1a, 0x40, 0x44, 0x64, 0xd5, 0x75, 0xa5, 
-0xab, 0x3d, 0xd4, 0x8f, 0x4f, 0xff, 0xff, 0xff, 
-0xff, 0xff, 0xff, 0xfd, 0x1f, 0xe8, 0x30, 0x0c, 
-0x80, 0x2c, 0x30, 0x28, 0x40, 0xa1, 0x30, 0x4b, 
-0x81, 0x42, 0x30, 0x8d, 0x42, 0x95, 0x31, 0x44, 
-0x87, 0xe2, 0x38, 0x3f, 0xfc, 0x48, 0x38, 0x0d, 
-0x87, 0xea, 0x31, 0x4a, 0x42, 0xdf, 0x30, 0x9a, 
-0x81, 0xf2, 0x30, 0x52, 0x81, 0x72, 0x30, 0x4a, 
-0xc1, 0x51, 0x30, 0x49, 0x82, 0x3a, 0x3b, 0x8b, 
-0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0xc8, 0xa4, 
-0x25, 0x16, 0x0e, 0xff, 0x82, 0x81, 0x2f, 0x85, 
-0x22, 0x81, 0xff, 0xec, 0x90, 0x23, 0x27, 0x0f, 
-0x41, 0xc6, 0x76, 0xec, 0x3f, 0xf4, 0xf6, 0x1e, 
-0xaf, 0xff, 0xfa, 0xbf, 0xb3, 0xff, 0xff, 0xf7, 
-0xff, 0xbf, 0xff, 0xfe, 0xff, 0xa3, 0xfa, 0x93, 
-0x10, 0x53, 0x51, 0x4c, 0xcb, 0x8e, 0x4d, 0xd5, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x32, 0x18, 0x99, 0x32, 0x4c, 0xcc, 0x33, 0x19, 
-0x43, 0x35, 0x3e, 0x6e, 0x30, 0xc0, 0x07, 0x7b, 
-0x35, 0x07, 0xfa, 0x03, 0x34, 0xe5, 0x87, 0x51, 
-0x30, 0xb0, 0x42, 0x1c, 0x30, 0x2a, 0x00, 0x97, 
-0x30, 0x15, 0xc0, 0x56, 0x36, 0x92, 0x9c, 0xe1, 
-0x74, 0xe3, 0x59, 0x98, 0x80, 0x44, 0x94, 0xd6, 
-0x75, 0x67, 0x94, 0x77, 0xad, 0x3e, 0x8f, 0xff, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x26, 
-0x01, 0xd8, 0x04, 0x26, 0x05, 0x40, 0x12, 0xc6, 
-0x09, 0xb8, 0x26, 0xa6, 0x12, 0x00, 0x4f, 0x46, 
-0x29, 0x68, 0xf2, 0xa7, 0x0d, 0x97, 0x3d, 0xa7, 
-0x07, 0x28, 0xf3, 0xe6, 0x2a, 0x00, 0x59, 0x46, 
-0x13, 0x78, 0x3d, 0xe6, 0x0a, 0x38, 0x2e, 0xe6, 
-0x09, 0x00, 0x2a, 0xc6, 0x08, 0xd8, 0x48, 0xe7, 
-0x63, 0x6e, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 
-0xc8, 0x00, 0x23, 0x18, 0x0e, 0xff, 0x82, 0x81, 
-0x31, 0x05, 0x22, 0x81, 0xff, 0xec, 0x90, 0x64, 
-0x81, 0xc8, 0x3e, 0xce, 0x1d, 0xb7, 0xf2, 0x92, 
-0xdb, 0x97, 0xff, 0xff, 0x5d, 0x3f, 0xff, 0xff, 
-0xeb, 0xff, 0xf7, 0x7f, 0xff, 0xdd, 0xfe, 0xef, 
-0x5a, 0x62, 0x0a, 0x6a, 0x29, 0x99, 0x71, 0xc9, 
-0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0x32, 0x14, 0x98, 0x32, 0x38, 0xd1, 
-0x32, 0xfd, 0x48, 0x35, 0x02, 0x7d, 0x30, 0xb8, 
-0x47, 0xa2, 0x34, 0xd3, 0x3b, 0x30, 0x34, 0xb2, 
-0x47, 0x7a, 0x30, 0xa7, 0x02, 0x2d, 0x30, 0x25, 
-0x40, 0xa4, 0x30, 0x18, 0x00, 0x4b, 0x36, 0xca, 
-0x70, 0xe2, 0x14, 0x13, 0x5b, 0x17, 0x40, 0xc4, 
-0xe4, 0xd5, 0x75, 0xa7, 0x47, 0x90, 0xea, 0x47, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
-0xf4, 0x18, 0x0a, 0x00, 0x0f, 0x18, 0x19, 0x60, 
-0x52, 0x98, 0x2d, 0xc0, 0xa8, 0x18, 0x54, 0x61, 
-0x5b, 0x98, 0xc0, 0xc4, 0x24, 0x1c, 0xe4, 0x7f, 
-0x97, 0x1c, 0xc6, 0x84, 0x2b, 0x18, 0xc3, 0x21, 
-0x8c, 0x98, 0x59, 0xc1, 0x18, 0x18, 0x2e, 0x80, 
-0xd8, 0x18, 0x28, 0x60, 0xc8, 0x98, 0x26, 0xc1, 
-0x54, 0x1e, 0x16, 0xc1, 0xff, 0xfb, 0x92, 0xc4, 
-0xff, 0x83, 0xc7, 0xec, 0x23, 0x18, 0x0e, 0xff, 
-0x82, 0x81, 0x31, 0x05, 0x22, 0x81, 0xff, 0xec, 
-0x90, 0x94, 0x8b, 0x97, 0x21, 0x77, 0xbb, 0x0f, 
-0xfc, 0xbe, 0xc1, 0xf5, 0x67, 0xfe, 0xff, 0x5f, 
-0x55, 0x1f, 0x67, 0x4f, 0xff, 0xff, 0xfd, 0x77, 
-0xff, 0xff, 0xdf, 0xfe, 0xff, 0x52, 0x62, 0x0a, 
-0x6a, 0x29, 0x99, 0x71, 0xc9, 0xbd, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x32, 0x10, 0x9b, 0x32, 
-0x2c, 0xd2, 0x32, 0xd9, 0x4f, 0x34, 0xc6, 0x88, 
-0x30, 0xaf, 0x07, 0xc9, 0x34, 0x9c, 0x7c, 0x4d, 
-0x34, 0x7c, 0x87, 0xa1, 0x30, 0x9e, 0x42, 0x3c, 
-0x30, 0x20, 0x00, 0xb5, 0x30, 0x1a, 0xc0, 0x3e, 
-0x37, 0x02, 0x4c, 0xe2, 0xf3, 0x03, 0x5d, 0x96, 
-0x00, 0xc4, 0xd4, 0xd6, 0x75, 0x67, 0x86, 0x37, 
-0xac, 0x60, 0x30, 0x0f, 0xc0, 0x05, 0x30, 0x26, 
-0x80, 0x6e, 0x30, 0x46, 0xc0, 0xef, 0x30, 0x82, 
-0x81, 0xf8, 0x31, 0x2d, 0x46, 0x13, 0x37, 0xac, 
-0x2e, 0x75, 0x37, 0x7d, 0x46, 0x1f, 0x31, 0x30, 
-0x02, 0x48, 0x30, 0x8a, 0x41, 0xa5, 0x30, 0x45, 
-0x41, 0x49, 0x30, 0x3a, 0x81, 0x32, 0x30, 0x37, 
-0xc2, 0x11, 0x38, 0x7a, 0x33, 0x16, 0x0a, 0x4c, 
-0x77, 0x21, 0xff, 0x8c, 0x52, 0x5b, 0xff, 0xfb, 
-0x92, 0xc4, 0xff, 0x83, 0xc7, 0xe4, 0x23, 0x18, 
-0x0e, 0xff, 0x82, 0x81, 0x3e, 0x05, 0x22, 0x41, 
-0xff, 0xec, 0x90, 0x04, 0xc5, 0x69, 0x38, 0xcf, 
-0x1b, 0x48, 0x0c, 0x68, 0xa2, 0x1d, 0x5d, 0x3f, 
-0xff, 0xff, 0xff, 0xff, 0x77, 0xff, 0xfd, 0xdf, 
-0xff, 0x5a, 0x62, 0x0a, 0x6a, 0x29, 0x99, 0x71, 
-0xc9, 0xba, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 
-0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x40, 0x00, 
-0x64, 0xdb, 0x6d, 0xb5, 0xb2, 0x4a, 0xc1, 0xdb, 
-0xa3, 0xf9, 0x04, 0xa6, 0x38, 0xaf, 0x01, 0x21, 
-0xc3, 0xcc, 0xe2, 0x0f, 0x5c, 0x8f, 0x60, 0x85, 
-0x53, 0x5c, 0x72, 0xa0, 0x86, 0x38, 0x52, 0x42, 
-0x98, 0x90, 0xe2, 0xdd, 0x4d, 0x8c, 0x93, 0x72, 
-0x2c, 0xc7, 0x36, 0x37, 0x48, 0x08, 0x50, 0x9b, 
-0x75, 0xa6, 0x14, 0x51, 0xac, 0x54, 0x3d, 0x08, 
-0xcd, 0x2c, 0x34, 0x40, 0x0c, 0x1a, 0x13, 0xa6, 
-0xcc, 0x91, 0x91, 0xce, 0x84, 0x64, 0x0a, 0x9c, 
-0x38, 0x64, 0x5b, 0x4d, 0x6c, 0x53, 0x76, 0x3c, 
-0xc6, 0x36, 0x37, 0xc9, 0x88, 0x11, 0x9b, 0xb6, 
-0xa6, 0x34, 0x41, 0xb2, 0x64, 0x51, 0x6c, 0xcf, 
-0x36, 0x35, 0xc2, 0x8c, 0x1a, 0x93, 0x66, 0x7c, 
-0x64, 0xc1, 0xae, 0x54, 0x62, 0x00, 0x9a, 0x75, 
-0xff, 0xfb, 0x92, 0xc4, 0xff, 0x83, 0x46, 0x98, 
-0x23, 0x18, 0x0e, 0xff, 0x82, 0xa1, 0x4f, 0x85, 
-0x22, 0xc9, 0xff, 0xec, 0x90, 0x23, 0xd2, 0x0c, 
-0xaa, 0xb3, 0x4e, 0x24, 0x08, 0x78, 0xd4, 0x18, 
-0x14, 0x22, 0x69, 0xd1, 0x82, 0x87, 0x19, 0xe4, 
-0x03, 0x4f, 0xcc, 0x72, 0x23, 0x40, 0x18, 0x2a, 
-0x64, 0xe3, 0x54, 0x46, 0x41, 0xbc, 0xe0, 0x41, 
-0xa6, 0xbb, 0x62, 0x5a, 0x19, 0x2e, 0x9b, 0x62, 
-0x88, 0x12, 0x37, 0x12, 0x10, 0x0a, 0x6c, 0xb2, 
-0x1c, 0x51, 0xa0, 0xb0, 0x95, 0xe6, 0x12, 0xc6, 
-0xb0, 0x82, 0xa6, 0x9b, 0x28, 0x97, 0x38, 0xd4, 
-0x58, 0x58, 0x93, 0x35, 0x30, 0xea, 0x00, 0x29, 
-0x9a, 0xa2, 0x8e, 0x10, 0x6a, 0x1c, 0x5e, 0xd3, 
-0x45, 0x31, 0xe1, 0x8c, 0x83, 0x83, 0x23, 0x04, 
-0x1c, 0x68, 0x04, 0x4a, 0x29, 0xa2, 0x6a, 0x12, 
-0x8c, 0xc4, 0x09, 0x85, 0x31, 0x4d, 0x0c, 0x70, 
-0x1a, 0x59, 0x9e, 0x19, 0x54, 0x23, 0x38, 0xa4, 
-0x89, 0x32, 0xcf, 0x2b, 0x0c, 0xc2, 0x20, 0x21, 
-0xf0, 0xb1, 0x06, 0x60, 0x48, 0x7a, 0x66, 0x92, 
-0x8f, 0xc6, 0x31, 0x84, 0xc2, 0x00, 0x47, 0x08, 
-0x60, 0x42, 0x39, 0x96, 0x1a, 0x3b, 0x19, 0x44, 
-0x25, 0x69, 0x8a, 0x59, 0x10, 0xe0, 0x41, 0x02, 
-0x17, 0x11, 0x08, 0x64, 0x04, 0x96, 0xa6, 0x48, 
-0xe9, 0xf4, 0x61, 0x10, 0x3c, 0x00, 0x24, 0x30, 
-0x72, 0x83, 0x20, 0x99, 0x21, 0xa6, 0x91, 0x8c, 
-0x32, 0x66, 0x98, 0x23, 0x8d, 0x06, 0x0c, 0x00, 
-0x1c, 0x9a, 0x1c, 0x0c, 0x60, 0x14, 0xa4, 0xc5, 
-0x1d, 0x38, 0x80, 0x03, 0x0b, 0x00, 0x5b, 0xb0, 
-0x72, 0x09, 0x2e, 0x62, 0x82, 0xa6, 0x46, 0x10, 
-0x8a, 0x12, 0x05, 0x14, 0x48, 0x32, 0xe6, 0x02, 
-0x8f, 0x49, 0xc3, 0x10, 0x05, 0x4a, 0x60, 0x8a, 
-0xa2, 0x20, 0x81, 0x04, 0x80, 0x40, 0x58, 0x28, 
-0xc4, 0xdb, 0x30, 0xc1, 0x58, 0xc6, 0x00, 0x49, 
-0xe0, 0x0d, 0x0c, 0x38, 0x34, 0x6c, 0x05, 0x16, 
-0xaa, 0x46, 0x10, 0x0a, 0xe4, 0x02, 0x1a, 0x4d, 
-0x85, 0x02, 0x0e, 0x01, 0x23, 0xc1, 0x44, 0x2c, 
-0x93, 0x04, 0x15, 0xac, 0x04, 0x09, 0x20, 0x02, 
-0xa0, 0x86, 0x06, 0x9e, 0x80, 0xa1, 0xd7, 0x91, 
-0x82, 0x10, 0x99, 0x10, 0xb9, 0x0a, 0x11, 0xb7, 
-0x94, 0x1b, 0x65, 0xb9, 0xac, 0x3c, 0x1e, 0x9b, 
-0xd1, 0xa4, 0x51, 0x91, 0x70, 0x19, 0x51, 0x59, 
-0x95, 0x12, 0x8c, 0x13, 0x19, 0xa8, 0xd0, 0xa0, 
-0xd9, 0x93, 0x0c, 0x85, 0x04, 0x77, 0xb0, 0xd2, 
-0xcc, 0x6e, 0x0e, 0x90, 0x21, 0xa0, 0x6e, 0x8a, 
-0x98, 0xda, 0x44, 0xd3, 0x32, 0x15, 0x48, 0x02, 
-0x06, 0x81, 0xa1, 0x71, 0x04, 0x19, 0x1d, 0x40, 
-0xc5, 0x60, 0x05, 0x92, 0x62, 0xe5, 0xee, 0x4f, 
-0xa4, 0x26, 0x97, 0xc5, 0x45, 0x8b, 0x8c, 0xd2, 
-0xcb, 0xba, 0xd4, 0x11, 0xe5, 0x58, 0x53, 0x49, 
-0x0d, 0x98, 0x4a, 0x00, 0x5d, 0x84, 0x56, 0x6c, 
-0xea, 0xdc, 0xb5, 0x96, 0x8a, 0x74, 0xb4, 0x64, 
-0x8a, 0x7f, 0xd4, 0x05, 0xcd, 0x60, 0x2c, 0x95, 
-0x91, 0x29, 0xff, 0xfb, 0x92, 0xc4, 0xff, 0x80, 
-0x31, 0x95, 0xa3, 0x65, 0xac, 0xeb, 0x2d, 0xf4, 
-0xf1, 0x3a, 0xe6, 0xc1, 0xbc, 0x3d, 0xb8, 0xb1, 
-0xb2, 0x21, 0xa8, 0x60, 0xb7, 0x18, 0xc3, 0xe8, 
-0x93, 0x17, 0x51, 0xc2, 0x7c, 0x09, 0xb2, 0x8c, 
-0x5b, 0x4f, 0x12, 0x7a, 0x58, 0x4b, 0xb0, 0xe2, 
-0x49, 0x8b, 0x8a, 0xa0, 0x83, 0x1e, 0x45, 0xf8, 
-0xb1, 0x1d, 0xa4, 0x25, 0x20, 0x3d, 0x4a, 0xb2, 
-0x52, 0x70, 0x9b, 0xa5, 0x84, 0xf6, 0x21, 0x4a, 
-0x71, 0xe9, 0x58, 0x2d, 0xc7, 0x11, 0xbc, 0x65, 
-0x24, 0x49, 0x6a, 0x90, 0x9d, 0x2d, 0x96, 0xd3, 
-0x84, 0xfd, 0x32, 0x53, 0x05, 0xc9, 0x8c, 0x9c, 
-0xb4, 0x17, 0xe3, 0x89, 0x14, 0x65, 0x2f, 0x97, 
-0x16, 0x02, 0xdc, 0xd2, 0x5f, 0x4e, 0x14, 0x49, 
-0x92, 0xb8, 0x2e, 0x4a, 0xf2, 0xda, 0xb2, 0x73, 
-0x19, 0x4a, 0x63, 0x29, 0x76, 0x68, 0xb2, 0x1a, 
-0x4b, 0x47, 0xe9, 0xd2, 0xb9, 0x34, 0x5b, 0x0d, 
-0x26, 0x73, 0x45, 0x64, 0xfe, 0x3a, 0x97, 0x46, 
-0x93, 0x19, 0xa2, 0xc8, 0x73, 0x2a, 0x8f, 0xd3, 
-0xa5, 0x72, 0x68, 0xb0, 0x1a, 0x4e, 0x67, 0x2a, 
-0xa4, 0xfe, 0x3a, 0x97, 0x8d, 0x26, 0x33, 0x45, 
-0xc0, 0xe6, 0x55, 0x22, 0x4e, 0x96, 0xb3, 0x45, 
-0xe1, 0xcc, 0xe6, 0x72, 0xaa, 0x54, 0xc7, 0x53, 
-0x51, 0xa4, 0xfc, 0xe5, 0x74, 0x7f, 0x2a, 0x94, 
-0xa7, 0x4b, 0x59, 0xa2, 0xf0, 0xe6, 0x76, 0x7e, 
-0xaa, 0x54, 0xc7, 0x53, 0x61, 0xa4, 0xce, 0x72, 
-0xb8, 0xa7, 0x94, 0x4b, 0x93, 0xa5, 0xbc, 0xd1, 
-0x70, 0x43, 0x96, 0x93, 0xaa, 0x15, 0xd1, 0xd4, 
-0xd9, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x39, 
-0x37, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 
-0x39, 0x37, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x92, 0xc4, 
-0x61, 0x83, 0xc0, 0x00, 0x01, 0xa4, 0x00, 0x00, 
-0x00, 0x20, 0x00, 0x00, 0x34, 0x80, 0x00, 0x00, 
-0x04, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 
-};
-
diff --git a/tests/check/generic/index.c b/tests/check/generic/index.c
deleted file mode 100644 (file)
index 5225f16..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-/* GStreamer
- * unit test for index setting on all elements
- * Copyright (C) 2005 Thomas Vander Stichele <thomas at apestaart dot org>
- * Copyright (C) 2011 Tim-Philipp Müller <tim centricular net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#endif
-
-#include <gst/check/gstcheck.h>
-
-static GList *elements = NULL;
-
-static void
-setup (void)
-{
-  GList *features, *f;
-  GList *plugins, *p;
-  gchar **ignorelist = NULL;
-  const gchar *INDEX_IGNORE_ELEMENTS = NULL;
-
-  GST_DEBUG ("getting elements for package %s", PACKAGE);
-  INDEX_IGNORE_ELEMENTS = g_getenv ("GST_INDEX_IGNORE_ELEMENTS");
-  if (!g_getenv ("GST_NO_INDEX_IGNORE_ELEMENTS") && INDEX_IGNORE_ELEMENTS) {
-    GST_DEBUG ("Will ignore element factories: '%s'", INDEX_IGNORE_ELEMENTS);
-    ignorelist = g_strsplit (INDEX_IGNORE_ELEMENTS, " ", 0);
-  }
-
-  plugins = gst_registry_get_plugin_list (gst_registry_get_default ());
-
-  for (p = plugins; p; p = p->next) {
-    GstPlugin *plugin = p->data;
-
-    if (strcmp (gst_plugin_get_source (plugin), PACKAGE) != 0)
-      continue;
-
-    features =
-        gst_registry_get_feature_list_by_plugin (gst_registry_get_default (),
-        gst_plugin_get_name (plugin));
-
-    for (f = features; f; f = f->next) {
-      GstPluginFeature *feature = f->data;
-      const gchar *name = gst_plugin_feature_get_name (feature);
-      gboolean ignore = FALSE;
-
-      if (!GST_IS_ELEMENT_FACTORY (feature))
-        continue;
-
-      if (ignorelist) {
-        gchar **s;
-
-        for (s = ignorelist; s && *s; ++s) {
-          if (g_str_has_prefix (name, *s)) {
-            GST_DEBUG ("ignoring element %s", name);
-            ignore = TRUE;
-          }
-        }
-        if (ignore)
-          continue;
-      }
-
-      GST_DEBUG ("adding element %s", name);
-      elements = g_list_prepend (elements, (gpointer) g_strdup (name));
-    }
-    gst_plugin_feature_list_free (features);
-  }
-  gst_plugin_list_free (plugins);
-  g_strfreev (ignorelist);
-}
-
-static void
-teardown (void)
-{
-  GList *e;
-
-  for (e = elements; e; e = e->next) {
-    g_free (e->data);
-  }
-  g_list_free (elements);
-  elements = NULL;
-}
-
-GST_START_TEST (test_set_index)
-{
-  GstElement *element;
-  GstIndex *idx;
-  GList *e;
-
-  idx = gst_index_factory_make ("memindex");
-  if (idx == NULL)
-    return;
-
-  gst_object_ref_sink (idx);
-
-  for (e = elements; e; e = e->next) {
-    const gchar *name = e->data;
-
-    GST_INFO ("testing element %s", name);
-    element = gst_element_factory_make (name, name);
-    fail_if (element == NULL, "Could not make element from factory %s", name);
-
-    gst_element_set_index (element, idx);
-    gst_object_unref (element);
-  }
-
-  gst_object_unref (idx);
-}
-
-GST_END_TEST;
-
-static Suite *
-index_suite (void)
-{
-  Suite *s = suite_create ("index");
-  TCase *tc_chain = tcase_create ("general");
-
-  suite_add_tcase (s, tc_chain);
-  tcase_add_checked_fixture (tc_chain, setup, teardown);
-  tcase_add_test (tc_chain, test_set_index);
-
-  return s;
-}
-
-GST_CHECK_MAIN (index);
diff --git a/tests/check/generic/states.c b/tests/check/generic/states.c
deleted file mode 100644 (file)
index 3d7c89b..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-/* GStreamer
- *
- * unit test for state changes on all elements
- *
- * Copyright (C) <2005> Thomas Vander Stichele <thomas at apestaart dot org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#endif
-
-#include <gst/check/gstcheck.h>
-
-static GList *elements = NULL;
-
-static void
-setup ()
-{
-  GList *features, *f;
-  GList *plugins, *p;
-  gchar **ignorelist = NULL;
-  const gchar *STATE_IGNORE_ELEMENTS = NULL;
-
-  GST_DEBUG ("getting elements for package %s", PACKAGE);
-  STATE_IGNORE_ELEMENTS = g_getenv ("GST_STATE_IGNORE_ELEMENTS");
-  if (!g_getenv ("GST_NO_STATE_IGNORE_ELEMENTS") && STATE_IGNORE_ELEMENTS) {
-    GST_DEBUG ("Will ignore element factories: '%s'", STATE_IGNORE_ELEMENTS);
-    ignorelist = g_strsplit (STATE_IGNORE_ELEMENTS, " ", 0);
-  }
-
-  plugins = gst_registry_get_plugin_list (gst_registry_get ());
-
-  for (p = plugins; p; p = p->next) {
-    GstPlugin *plugin = p->data;
-
-    if (strcmp (gst_plugin_get_source (plugin), PACKAGE) != 0)
-      continue;
-
-    features =
-        gst_registry_get_feature_list_by_plugin (gst_registry_get (),
-        gst_plugin_get_name (plugin));
-
-    for (f = features; f; f = f->next) {
-      GstPluginFeature *feature = f->data;
-      const gchar *name = gst_plugin_feature_get_name (feature);
-      gboolean ignore = FALSE;
-
-      if (!GST_IS_ELEMENT_FACTORY (feature))
-        continue;
-
-      if (ignorelist) {
-        gchar **s;
-
-        for (s = ignorelist; s && *s; ++s) {
-          if (g_str_has_prefix (name, *s)) {
-            GST_DEBUG ("ignoring element %s", name);
-            ignore = TRUE;
-          }
-        }
-        if (ignore)
-          continue;
-      }
-
-      GST_DEBUG ("adding element %s", name);
-      elements = g_list_prepend (elements, (gpointer) g_strdup (name));
-    }
-    gst_plugin_feature_list_free (features);
-  }
-  gst_plugin_list_free (plugins);
-  g_strfreev (ignorelist);
-}
-
-static void
-teardown ()
-{
-  GList *e;
-
-  for (e = elements; e; e = e->next) {
-    g_free (e->data);
-  }
-  g_list_free (elements);
-  elements = NULL;
-}
-
-
-GST_START_TEST (test_state_changes_up_and_down_seq)
-{
-  GstElement *element;
-  GList *e;
-
-  for (e = elements; e; e = e->next) {
-    const gchar *name = e->data;
-
-    GST_INFO ("testing element %s", name);
-    element = gst_element_factory_make (name, name);
-    fail_if (element == NULL, "Could not make element from factory %s", name);
-
-    if (GST_IS_PIPELINE (element)) {
-      GST_DEBUG ("element %s is a pipeline", name);
-    }
-
-    gst_element_set_state (element, GST_STATE_READY);
-    gst_element_set_state (element, GST_STATE_PAUSED);
-    gst_element_set_state (element, GST_STATE_PLAYING);
-    gst_element_set_state (element, GST_STATE_PAUSED);
-    gst_element_set_state (element, GST_STATE_READY);
-    gst_element_set_state (element, GST_STATE_NULL);
-    gst_element_set_state (element, GST_STATE_PAUSED);
-    gst_element_set_state (element, GST_STATE_READY);
-    gst_element_set_state (element, GST_STATE_PLAYING);
-    gst_element_set_state (element, GST_STATE_PAUSED);
-    gst_element_set_state (element, GST_STATE_NULL);
-    gst_object_unref (GST_OBJECT (element));
-  }
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_state_changes_up_seq)
-{
-  GstElement *element;
-  GList *e;
-
-  for (e = elements; e; e = e->next) {
-    const gchar *name = e->data;
-
-    GST_INFO ("testing element %s", name);
-    element = gst_element_factory_make (name, name);
-    fail_if (element == NULL, "Could not make element from factory %s", name);
-
-    if (GST_IS_PIPELINE (element)) {
-      GST_DEBUG ("element %s is a pipeline", name);
-    }
-
-    gst_element_set_state (element, GST_STATE_READY);
-
-    gst_element_set_state (element, GST_STATE_PAUSED);
-    gst_element_set_state (element, GST_STATE_READY);
-
-    gst_element_set_state (element, GST_STATE_PAUSED);
-    gst_element_set_state (element, GST_STATE_PLAYING);
-    gst_element_set_state (element, GST_STATE_PAUSED);
-    gst_element_set_state (element, GST_STATE_READY);
-
-    gst_element_set_state (element, GST_STATE_NULL);
-    gst_object_unref (GST_OBJECT (element));
-  }
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_state_changes_down_seq)
-{
-  GstElement *element;
-  GList *e;
-
-  for (e = elements; e; e = e->next) {
-    const gchar *name = e->data;
-
-    GST_INFO ("testing element %s", name);
-    element = gst_element_factory_make (name, name);
-    fail_if (element == NULL, "Could not make element from factory %s", name);
-
-    if (GST_IS_PIPELINE (element)) {
-      GST_DEBUG ("element %s is a pipeline", name);
-    }
-
-    gst_element_set_state (element, GST_STATE_READY);
-    gst_element_set_state (element, GST_STATE_PAUSED);
-    gst_element_set_state (element, GST_STATE_PLAYING);
-
-    gst_element_set_state (element, GST_STATE_PAUSED);
-    gst_element_set_state (element, GST_STATE_PLAYING);
-
-    gst_element_set_state (element, GST_STATE_PAUSED);
-    gst_element_set_state (element, GST_STATE_READY);
-    gst_element_set_state (element, GST_STATE_PAUSED);
-    gst_element_set_state (element, GST_STATE_PLAYING);
-
-    gst_element_set_state (element, GST_STATE_PAUSED);
-    gst_element_set_state (element, GST_STATE_READY);
-    gst_element_set_state (element, GST_STATE_NULL);
-    gst_object_unref (GST_OBJECT (element));
-  }
-}
-
-GST_END_TEST;
-
-Suite *
-states_suite (void)
-{
-  Suite *s = suite_create ("states_ugly");
-  TCase *tc_chain = tcase_create ("general");
-
-  suite_add_tcase (s, tc_chain);
-  tcase_add_checked_fixture (tc_chain, setup, teardown);
-  tcase_add_test (tc_chain, test_state_changes_up_and_down_seq);
-  tcase_add_test (tc_chain, test_state_changes_up_seq);
-  tcase_add_test (tc_chain, test_state_changes_down_seq);
-
-  return s;
-}
-
-GST_CHECK_MAIN (states);
diff --git a/tests/check/gst-plugins-ugly.supp b/tests/check/gst-plugins-ugly.supp
deleted file mode 100644 (file)
index d73d186..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-### amrnb suppressions
-### these should/could be submitted to amrnb
-
-{
-   <amrnb>
-   Memcheck:Cond
-   fun:Encoder_Interface_Encode
-   fun:gst_amrnbenc_chain
-   fun:gst_pad_chain
-   fun:gst_pad_push
-}
-
-{
-   <amrnb>
-   Memcheck:Cond
-   fun:Speech_Encode_Frame
-   fun:Encoder_Interface_Encode
-   fun:gst_amrnbenc_chain
-   fun:gst_pad_chain
-   fun:gst_pad_push
-}
-
-{
-   <amrnb>
-   Memcheck:Cond
-   obj:/usr/lib/libamrnb.so*
-   fun:Speech_Encode_Frame
-   fun:Encoder_Interface_Encode
-   fun:gst_amrnbenc_chain
-   fun:gst_pad_chain
-   fun:gst_pad_push
-}
-
-{
-   <amrnb>
-   Memcheck:Cond
-   obj:/usr/lib/libamrnb.so*
-   obj:/usr/lib/libamrnb.so*
-   fun:Speech_Encode_Frame
-   fun:Encoder_Interface_Encode
-   fun:gst_amrnbenc_chain
-   fun:gst_pad_chain
-   fun:gst_pad_push
-}
-
-{
-   <amrnb>
-   Memcheck:Cond
-   obj:/usr/lib/libamrnb.so*
-   obj:/usr/lib/libamrnb.so*
-   obj:/usr/lib/libamrnb.so*
-   fun:Speech_Encode_Frame
-   fun:Encoder_Interface_Encode
-   fun:gst_amrnbenc_chain
-   fun:gst_pad_chain
-   fun:gst_pad_push
-}
-
-{
-   <amrnb acos>
-   Memcheck:Cond
-   fun:acos
-   obj:/usr/lib/libamrnb.so*
-   obj:/usr/lib/libamrnb.so*
-   fun:Speech_Encode_Frame
-   fun:Encoder_Interface_Encode
-   fun:gst_amrnbenc_chain
-   fun:gst_pad_chain
-   fun:gst_pad_push
-}
-
-{
-   <AMR encoder>
-   Memcheck:Cond
-   fun:Levinson
-   fun:Speech_Encode_Frame
-   fun:Encoder_Interface_Encode
-}
-
-{
-   <AMR encoder>
-   Memcheck:Cond
-   fun:Az_lsp
-   fun:Speech_Encode_Frame
-   fun:Encoder_Interface_Encode
-}
-
-{
-   <AMR encoder>
-   Memcheck:Cond
-   fun:acos
-   fun:Lsp_lsf
-   fun:Speech_Encode_Frame
-   fun:Encoder_Interface_Encode
-}
-
-{
-   <AMR encoder>
-   Memcheck:Cond
-   fun:Lsf_wt
-   fun:Speech_Encode_Frame
-   fun:Encoder_Interface_Encode
-}
-{
-   <AMR encoder>
-   Memcheck:Cond
-   fun:Vq_subvec
-   fun:Speech_Encode_Frame
-   fun:Encoder_Interface_Encode
-}
-
-{
-   <AMR encoder>
-   Memcheck:Cond
-   fun:Lag_max
-   fun:Pitch_ol
-   fun:ol_ltp
-   fun:Speech_Encode_Frame
-   fun:Encoder_Interface_Encode
-}
-
-{
-   <AMR encoder>
-   Memcheck:Cond
-   fun:Pitch_ol
-   fun:ol_ltp
-   fun:Speech_Encode_Frame
-   fun:Encoder_Interface_Encode
-}
-
-{
-   <AMR encoder>
-   Memcheck:Cond
-   fun:cl_ltp
-   fun:Speech_Encode_Frame
-   fun:Encoder_Interface_Encode
-}
-
-{
-   <AMR encoder>
-   Memcheck:Cond
-   fun:searchFrac
-   fun:cl_ltp
-   fun:Speech_Encode_Frame
-   fun:Encoder_Interface_Encode
-}
-
-{
-   <AMR encoder>
-   Memcheck:Cond
-   fun:q_gain_pitch
-   fun:cl_ltp
-   fun:Speech_Encode_Frame
-   fun:Encoder_Interface_Encode
-}
-
-{
-   <AMR encoder>
-   Memcheck:Cond
-   fun:set_sign12k2
-   fun:code_10i40_35bits
-   fun:cbsearch
-   fun:Speech_Encode_Frame
-   fun:Encoder_Interface_Encode
-}
-
-{
-   <AMR encoder>
-   Memcheck:Cond
-   fun:code_10i40_35bits
-   fun:cbsearch
-   fun:Speech_Encode_Frame
-   fun:Encoder_Interface_Encode
-}
-
-{
-   <AMR encoder>
-   Memcheck:Cond
-   fun:gainQuant
-   fun:Speech_Encode_Frame
-   fun:Encoder_Interface_Encode
-}
-
-{
-   <AMR encoder on FC4>
-   Memcheck:Value2
-   obj:/usr/lib/libamrnb.so.0.0.0
-   fun:Speech_Encode_Frame
-   fun:Encoder_Interface_Encode
-}
diff --git a/tests/check/meson.build b/tests/check/meson.build
deleted file mode 100644 (file)
index 2c3ecb1..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-# name, condition when to skip the test and extra dependencies
-ugly_tests = [
-  [ 'elements/x264enc', not x264_dep.found(), [ x264_dep, gmodule_dep ] ],
-  [ 'elements/xingmux' ],
-  [ 'generic/states' ],
-]
-
-# FIXME: unistd dependency or not tested yet on windows
-if host_machine.system() != 'windows'
-  ugly_tests += [
-    [ 'elements/amrnbenc', not amrnb_dep.found() ],
-    [ 'elements/mpeg2dec', not mpeg2_dep.found() or not cdata.has('HAVE_UNISTD_H'), [ gstvideo_dep ] ],
-  ]
-endif
-
-test_defines = [
-  '-UG_DISABLE_ASSERT',
-  '-UG_DISABLE_CAST_CHECKS',
-  '-DGST_CHECK_TEST_ENVIRONMENT_BEACON="GST_PLUGIN_LOADING_WHITELIST"',
-  '-DGST_TEST_FILES_PATH="' + meson.current_source_dir() + '/../files"',
-  '-DGST_USE_UNSTABLE_API',
-]
-
-pluginsdirs = []
-if gst_dep.type_name() == 'pkgconfig'
-  pbase = dependency('gstreamer-plugins-base-' + api_version, required: true)
-  pluginsdirs = [gst_dep.get_pkgconfig_variable('pluginsdir'),
-                 pbase.get_pkgconfig_variable('pluginsdir')]
-  gst_plugin_scanner_dir = gst_dep.get_pkgconfig_variable('pluginscannerdir')
-else
-  gst_plugin_scanner_dir = subproject('gstreamer').get_variable('gst_scanner_dir')
-endif
-gst_plugin_scanner_path = join_paths(gst_plugin_scanner_dir, 'gst-plugin-scanner')
-
-test_deps = [gst_dep, gstbase_dep, gstcheck_dep, gstaudio_dep, gstapp_dep,
-             gstfft_dep, gstvideo_dep, gstpbutils_dep]
-
-libm = cc.find_library('m', required : false)
-
-# FIXME: valgrind_args: add suppressions $(top_srcdir)/common/gst.supp $(srcdir)/gst-plugins-ugly.supp
-
-no_warn_args = []
-foreach arg : [
-  '-Wno-missing-prototypes',
-  '-Wno-missing-declarations',
-  '-Wno-old-style-definition']
-  if cc.has_argument(arg)
-    no_warn_args += [arg]
-  endif
-endforeach
-
-foreach t : ugly_tests
-  fname = '@0@.c'.format(t.get(0))
-  test_name = t.get(0).underscorify()
-  extra_deps = [ ]
-  if t.length() == 3
-    extra_deps = t.get(2)
-    skip_test = t.get(1)
-  elif t.length() == 2
-    skip_test = t.get(1)
-  else
-    skip_test = false
-  endif
-  if not skip_test
-    exe = executable(test_name, fname,
-      include_directories : [configinc],
-      c_args : ['-DHAVE_CONFIG_H=1' ] + test_defines + no_warn_args,
-      dependencies : [libm] + test_deps + extra_deps,
-    )
-
-    env = environment()
-    env.set('GST_PLUGIN_SYSTEM_PATH_1_0', '')
-    env.set('CK_DEFAULT_TIMEOUT', '20')
-    env.set('GST_PLUGIN_LOADING_WHITELIST', 'gstreamer', 'gst-plugins-base',
-      'gst-plugins-good', 'gst-plugins-ugly@' + meson.build_root())
-    env.set('GST_PLUGIN_PATH_1_0', [meson.build_root()] + pluginsdirs)
-    env.set('GST_REGISTRY', join_paths(meson.current_build_dir(), '@0@.registry'.format(test_name)))
-    env.set('GST_PLUGIN_SCANNER_1_0', gst_plugin_scanner_path)
-    test(test_name, exe, env: env, timeout: 3 * 60)
-  endif
-endforeach
diff --git a/tests/meson.build b/tests/meson.build
deleted file mode 100644 (file)
index 3714641..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-if not get_option('tests').disabled() and gstcheck_dep.found()
-  subdir('check')
-endif