about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/libraries/gstreamer
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/gstreamer')
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/bad/default.nix290
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/bad/fix_pkgconfig_includedir.patch15
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/base/default.nix158
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/base/fix_pkgconfig_includedir.patch15
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/core/default.nix109
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/core/fix_pkgconfig_includedir.patch15
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/core/setup-hook.sh9
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/default.nix29
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/ges/default.nix66
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/ges/fix_pkgconfig_includedir.patch15
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/good/default.nix151
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/good/fix_pkgconfig_includedir.patch15
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/gstreamermm/default.nix34
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/legacy/gnonlin/default.nix23
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-bad/default.nix36
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-base/default.nix60
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-base/gcc-4.9.patch38
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-good/default.nix52
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-good/linux-headers-3.9.patch27
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-good/v4l.patch11
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-ugly/default.nix30
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-python/default.nix37
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-python/disable-testFake.patch56
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/legacy/gstreamer/darwin.patch14
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/legacy/gstreamer/default.nix85
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/legacy/gstreamer/setup-hook.sh8
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/legacy/gstreamermm/default.nix31
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/libav/default.nix46
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/rtsp-server/default.nix50
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/ugly/default.nix76
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/vaapi/default.nix72
-rw-r--r--nixpkgs/pkgs/development/libraries/gstreamer/validate/default.nix43
32 files changed, 1716 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/bad/default.nix b/nixpkgs/pkgs/development/libraries/gstreamer/bad/default.nix
new file mode 100644
index 000000000000..9b2d3d0e2470
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/bad/default.nix
@@ -0,0 +1,290 @@
+{ stdenv
+, fetchurl
+, meson
+, ninja
+, gettext
+, config
+, pkgconfig
+, python3
+, gst-plugins-base
+, orc
+, gobject-introspection
+, enableZbar ? true
+, faacSupport ? false
+, faac ? null
+, faad2
+, libass
+, libkate
+, libmms
+, librdf
+, ladspaH
+, libnice
+, webrtc-audio-processing
+, lilv
+, lv2
+, serd
+, sord
+, sratom
+, libbs2b
+, libmodplug
+, mpeg2dec
+, openjpeg
+, libopus
+, librsvg
+, bluez
+, chromaprint
+, curl
+, darwin
+, directfb
+, fdk_aac
+, flite
+, gsm
+, libaom
+, libdc1394
+, libde265
+, libdrm
+, libdvdnav
+, libdvdread
+, libgudev
+, libofa
+, libsndfile
+, libusb1
+, neon
+, openal
+, opencv4
+, openexr
+, openh264
+, pango
+, rtmpdump
+, sbc
+, soundtouch
+, spandsp
+, srtp
+, zbar
+, wayland-protocols
+, wildmidi
+, fluidsynth
+, libvdpau
+, wayland
+, libwebp
+, xvidcore
+, gnutls
+, mjpegtools
+, libGLU
+, libGL
+, libintl
+, libgme
+, openssl
+, x265
+, libxml2
+, srt
+}:
+
+assert faacSupport -> faac != null;
+
+let
+  inherit (stdenv.lib) optional optionals;
+in stdenv.mkDerivation rec {
+  pname = "gst-plugins-bad";
+  version = "1.16.2";
+
+  outputs = [ "out" "dev" ];
+
+  src = fetchurl {
+    url = "${meta.homepage}/src/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "0x0y0hm0ga3zqi5q4090hw5sjh59y1ry9ak16qsaascm72i7mjzi";
+  };
+
+  patches = [
+    ./fix_pkgconfig_includedir.patch
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkgconfig
+    python3
+    gettext
+    gobject-introspection
+  ] ++ optionals stdenv.isLinux [
+    wayland-protocols
+  ];
+
+  buildInputs = [
+    gst-plugins-base
+    orc
+    faad2
+    libass
+    libkate
+    libmms
+    webrtc-audio-processing # webrtc
+    libbs2b
+    libmodplug
+    mpeg2dec
+    openjpeg
+    libopus
+    librsvg
+    curl.dev
+    fdk_aac
+    gsm
+    libaom
+    libdc1394
+    libde265
+    libdvdnav
+    libdvdread
+    libsndfile
+    libusb1
+    mjpegtools
+    neon
+    openal
+    opencv4
+    openexr
+    openh264
+    rtmpdump
+    pango
+    soundtouch
+    srtp
+    fluidsynth
+    libvdpau
+    libwebp
+    xvidcore
+    gnutls
+    libGL
+    libGLU
+    libgme
+    openssl
+    x265
+    libxml2
+    libintl
+    srt
+  ] ++ optionals enableZbar [
+    zbar
+  ] ++ optionals faacSupport [
+    faac
+  ] ++ optionals stdenv.isLinux [
+    bluez
+    wayland
+  ] ++ optionals (!stdenv.isDarwin) [
+    # wildmidi requires apple's OpenAL
+    # TODO: package apple's OpenAL, fix wildmidi, include on Darwin
+    wildmidi
+    # TODO: mjpegtools uint64_t is not compatible with guint64 on Darwin
+    mjpegtools
+
+    chromaprint
+    directfb
+    flite
+    libdrm
+    libgudev
+    libnice
+    libofa
+    librdf
+    sbc
+    spandsp
+
+    # ladspa plug-in
+    ladspaH
+    librdf # TODO: make build on Darwin
+
+    # lv2 plug-in
+    lilv
+    lv2
+    serd
+    sord
+    sratom
+  ] ++ optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
+    # For unknown reasons the order is important, e.g. if
+    # VideoToolbox is last, we get:
+    #     fatal error: 'VideoToolbox/VideoToolbox.h' file not found
+    VideoToolbox
+    AudioToolbox
+    AVFoundation
+    CoreMedia
+    CoreVideo
+    Foundation
+    MediaToolbox
+  ]);
+
+  mesonFlags = [
+    "-Dexamples=disabled" # requires many dependencies and probably not useful for our users
+
+    "-Ddts=disabled" # required `libdca` library not packaged in nixpkgs as of writing, and marked as "BIG FAT WARNING: libdca is still in early development"
+    "-Dzbar=${if enableZbar then "enabled" else "disabled"}"
+    "-Dfaac=${if faacSupport then "enabled" else "disabled"}"
+    "-Diqa=disabled" # required `dssim` library not packaging in nixpkgs as of writing
+    "-Dmsdk=disabled" # not packaged in nixpkgs as of writing / no Windows support
+    # As of writing, with `libmpcdec` in `buildInputs` we get
+    #   "Could not find libmpcdec header files, but Musepack was enabled via options"
+    # This is likely because nixpkgs has the header in libmpc/mpcdec.h
+    # instead of mpc/mpcdec.h, like Arch does. The situation is not trivial.
+    # There are apparently 2 things called `libmpcdec` from the same author:
+    #   * http://svn.musepack.net/libmpcdec/trunk/src/
+    #   * http://svn.musepack.net/libmpc/trunk/include/mpc/
+    # Fixing it likely requires to first figure out with upstream which one
+    # is needed, and then patching upstream to find it (though it probably
+    # already works on Arch?).
+    "-Dmusepack=disabled"
+    "-Dopenmpt=disabled" # `libopenmpt` not packaged in nixpkgs as of writing
+    "-Dopenni2=disabled" # not packaged in nixpkgs as of writing
+    "-Dopensles=disabled" # not packaged in nixpkgs as of writing
+    "-Dsctp=disabled" # required `usrsctp` library not packaged in nixpkgs as of writing
+    "-Dteletext=disabled" # required `zvbi` library not packaged in nixpkgs as of writing
+    "-Dtinyalsa=disabled" # not packaged in nixpkgs as of writing
+    "-Dvoaacenc=disabled" # required `vo-aacenc` library not packaged in nixpkgs as of writing
+    "-Dvoamrwbenc=disabled" # required `vo-amrwbenc` library not packaged in nixpkgs as of writing
+    "-Dvulkan=disabled" # Linux-only, and we haven't figured out yet which of the vulkan nixpkgs it needs
+    "-Dwasapi=disabled" # not packaged in nixpkgs as of writing / no Windows support
+    "-Dwpe=disabled" # required `wpe-webkit` library not packaged in nixpkgs as of writing
+
+    # Requires CUDA and we haven't figured out how to make Meson find CUDA yet;
+    # it probably searches via pkgconfig, for which we have no .pc files,
+    # see https://github.com/NixOS/nixpkgs/issues/54395
+    "-Dnvdec=disabled"
+    "-Dnvenc=disabled"
+  ]
+  ++ optionals stdenv.isDarwin [
+    "-Dbluez=disabled"
+    "-Dchromaprint=disabled"
+    "-Ddirectfb=disabled"
+    "-Dflite=disabled"
+    "-Dkms=disabled" # renders to libdrm output
+    "-Dofa=disabled"
+    "-Dlv2=disabled"
+    "-Dsbc=disabled"
+    "-Dspandsp=disabled"
+    "-Ddvb=disabled"
+    "-Dfbdev=disabled"
+    "-Duvch264=disabled" # requires gudev
+    "-Dladspa=disabled" # requires lrdf
+    "-Dwebrtc=disabled" # requires libnice, which as of writing doesn't work on Darwin in nixpkgs
+    "-Dwildmidi=disabled" # see dependencies above
+  ] ++ optionals (!gst-plugins-base.glEnabled) [
+    "-Dgl=disabled"]
+  ++ optionals (!gst-plugins-base.waylandEnabled) [
+    "-Dwayland=disabled"
+  ] ++ optionals (!gst-plugins-base.glEnabled) [
+    # `applemedia/videotexturecache.h` requires `gst/gl/gl.h`,
+    # but its meson build system does not declare the dependency.
+    "-Dapplemedia=disabled"
+  ];
+
+  # This package has some `_("string literal")` string formats
+  # that trip up clang with format security enabled.
+  hardeningDisable = [ "format" ];
+
+  doCheck = false; # fails 20 out of 58 tests, expensive
+
+  meta = with stdenv.lib; {
+    description = "GStreamer Bad Plugins";
+    homepage = "https://gstreamer.freedesktop.org";
+    longDescription = ''
+      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.
+    '';
+    license = licenses.lgpl2Plus;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ matthewbauer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/bad/fix_pkgconfig_includedir.patch b/nixpkgs/pkgs/development/libraries/gstreamer/bad/fix_pkgconfig_includedir.patch
new file mode 100644
index 000000000000..c687fffc9c08
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/bad/fix_pkgconfig_includedir.patch
@@ -0,0 +1,15 @@
+diff --git a/pkgconfig/meson.build b/pkgconfig/meson.build
+index 271f327f3..7e2afa754 100644
+--- a/pkgconfig/meson.build
++++ b/pkgconfig/meson.build
+@@ -2,8 +2,8 @@ pkgconf = configuration_data()
+ 
+ pkgconf.set('prefix', join_paths(get_option('prefix')))
+ pkgconf.set('exec_prefix', '${prefix}')
+-pkgconf.set('libdir', '${prefix}/@0@'.format(get_option('libdir')))
+-pkgconf.set('includedir', '${prefix}/@0@'.format(get_option('includedir')))
++pkgconf.set('libdir', join_paths(get_option('prefix'), get_option('libdir')))
++pkgconf.set('includedir', join_paths(get_option('prefix'), get_option('includedir')))
+ pkgconf.set('GST_API_VERSION', api_version)
+ pkgconf.set('VERSION', gst_version)
+ 
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/base/default.nix b/nixpkgs/pkgs/development/libraries/gstreamer/base/default.nix
new file mode 100644
index 000000000000..178f6a1fe893
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/base/default.nix
@@ -0,0 +1,158 @@
+{ stdenv
+, fetchurl
+, lib
+, pkgconfig
+, meson
+, ninja
+, gettext
+, gobject-introspection
+, python3
+, gstreamer
+, orc
+, pango
+, libtheora
+, libintl
+, libopus
+, isocodes
+, libjpeg
+, libpng
+, libvisual
+, tremor # provides 'virbisidec'
+, libGL
+, gtk-doc
+, docbook_xsl
+, docbook_xml_dtd_43
+, enableX11 ? stdenv.isLinux
+, libXv
+, enableWayland ? stdenv.isLinux
+, wayland
+, wayland-protocols
+, enableAlsa ? stdenv.isLinux
+, alsaLib
+# Enabling Cocoa seems to currently not work, giving compile
+# errors. Suspected is that a newer version than clang
+# is needed than 5.0 but it is not clear.
+, enableCocoa ? false
+, darwin
+, enableGl ? (enableX11 || enableWayland || enableCocoa)
+, enableCdparanoia ? (!stdenv.isDarwin)
+, cdparanoia
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gst-plugins-base";
+  version = "1.16.2";
+
+  outputs = [ "out" "dev" ];
+
+  src = fetchurl {
+    url = "${meta.homepage}/src/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "0sl1hxlyq46r02k7z70v09vx1gi4rcypqmzra9jid93lzvi76gmi";
+  };
+
+  patches = [
+    ./fix_pkgconfig_includedir.patch
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkgconfig
+    python3
+    gettext
+    gobject-introspection
+
+    # docs
+    gtk-doc
+    docbook_xsl
+    docbook_xml_dtd_43
+  ];
+
+  buildInputs = [
+    orc
+    libtheora
+    libintl
+    libopus
+    isocodes
+    libpng
+    libjpeg
+    tremor
+    libGL
+  ] ++ lib.optional (!stdenv.isDarwin) [
+    libvisual
+  ] ++ lib.optionals stdenv.isDarwin [
+    pango
+    darwin.apple_sdk.frameworks.OpenGL
+  ] ++ lib.optionals enableAlsa [
+    alsaLib
+  ] ++ lib.optionals enableX11 [
+    libXv
+    pango
+  ] ++ lib.optionals enableWayland [
+    wayland
+    wayland-protocols
+  ] ++ lib.optional enableCocoa darwin.apple_sdk.frameworks.Cocoa
+    ++ lib.optional enableCdparanoia cdparanoia;
+
+  propagatedBuildInputs = [
+    gstreamer
+  ];
+
+  mesonFlags = [
+    "-Dexamples=disabled" # requires many dependencies and probably not useful for our users
+    "-Dgl-graphene=disabled" # not packaged in nixpkgs as of writing
+    # See https://github.com/GStreamer/gst-plugins-base/blob/d64a4b7a69c3462851ff4dcfa97cc6f94cd64aef/meson_options.txt#L15 for a list of choices
+    "-Dgl_winsys=${lib.concatStringsSep "," (lib.optional enableX11 "x11" ++ lib.optional enableWayland "wayland" ++ lib.optional enableCocoa "cocoa")}"
+    # We must currently disable gtk_doc API docs generation,
+    # because it is not compatible with some features being disabled.
+    # See for example
+    #     https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/564
+    # for it failing because some Wayland symbols are missing.
+    # This problem appeared between 1.15.1 and 1.16.0.
+    # In 1.18 they should switch to hotdoc, which should make this issue irrelevant.
+    "-Dgtk_doc=disabled"
+  ]
+  ++ lib.optional (!enableX11) "-Dx11=disabled"
+  # TODO How to disable Wayland?
+  ++ lib.optional (!enableGl) "-Dgl=disabled"
+  ++ lib.optional (!enableAlsa) "-Dalsa=disabled"
+  ++ lib.optional (!enableCdparanoia) "-Dcdparanoia=disabled"
+  ++ lib.optionals stdenv.isDarwin [
+    "-Dlibvisual=disabled"
+  ];
+
+  postPatch = ''
+    patchShebangs common/scangobj-merge.py
+  '';
+
+  # This package has some `_("string literal")` string formats
+  # that trip up clang with format security enabled.
+  hardeningDisable = [ "format" ];
+
+  doCheck = false; # fails, wants DRI access for OpenGL
+
+  passthru = {
+    # Downstream `gst-*` packages depending on `gst-plugins-base`
+    # have meson build options like 'gl' etc. that depend
+    # on these features being built in `-base`.
+    # If they are not built here, then the downstream builds
+    # will fail, as they, too, use `-Dauto_features=enabled`
+    # which would enable these options unconditionally.
+    # That means we must communicate to these downstream packages
+    # if the `-base` enabled these options or not, so that
+    # the can enable/disable those features accordingly.
+    # The naming `*Enabled` vs `enable*` is intentional to
+    # distinguish inputs from outputs (what is to be built
+    # vs what was built) and to make them easier to search for.
+    glEnabled = enableGl;
+    waylandEnabled = enableWayland;
+  };
+
+  meta = with lib; {
+    description = "Base GStreamer plug-ins and helper libraries";
+    homepage = "https://gstreamer.freedesktop.org";
+    license = licenses.lgpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ matthewbauer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/base/fix_pkgconfig_includedir.patch b/nixpkgs/pkgs/development/libraries/gstreamer/base/fix_pkgconfig_includedir.patch
new file mode 100644
index 000000000000..04486a4647f9
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/base/fix_pkgconfig_includedir.patch
@@ -0,0 +1,15 @@
+diff --git a/pkgconfig/meson.build b/pkgconfig/meson.build
+index 04abfbee5..88c86b431 100644
+--- a/pkgconfig/meson.build
++++ b/pkgconfig/meson.build
+@@ -2,8 +2,8 @@ pkgconf = configuration_data()
+ 
+ pkgconf.set('prefix', get_option('prefix'))
+ pkgconf.set('exec_prefix', '${prefix}')
+-pkgconf.set('libdir', '${prefix}/@0@'.format(get_option('libdir')))
+-pkgconf.set('includedir', '${prefix}/@0@'.format(get_option('includedir')))
++pkgconf.set('libdir', join_paths(get_option('prefix'), get_option('libdir')))
++pkgconf.set('includedir', join_paths(get_option('prefix'), get_option('includedir')))
+ pkgconf.set('GST_API_VERSION', api_version)
+ pkgconf.set('VERSION', gst_version)
+ pkgconf.set('LIBM', libm.found() ? '-lm' : '')
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/core/default.nix b/nixpkgs/pkgs/development/libraries/gstreamer/core/default.nix
new file mode 100644
index 000000000000..3dd7a547de96
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/core/default.nix
@@ -0,0 +1,109 @@
+{ stdenv
+, fetchurl
+, fetchpatch
+, meson
+, ninja
+, pkgconfig
+, gettext
+, gobject-introspection
+, bison
+, flex
+, python3
+, glib
+, makeWrapper
+, libcap
+, libunwind
+, darwin
+, elfutils # for libdw
+, bash-completion
+, docbook_xsl
+, docbook_xml_dtd_43
+, gtk-doc
+, lib
+, CoreServices
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gstreamer";
+  version = "1.16.2";
+
+  outputs = [ "out" "dev" "devdoc" ];
+  outputBin = "dev";
+
+  src = fetchurl {
+    url = "${meta.homepage}/src/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "0kp93622y29pck8asvil1fmzf55s2gx76wv475a6izc3cwj49w73";
+  };
+
+  patches = [
+    ./fix_pkgconfig_includedir.patch
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkgconfig
+    gettext
+    bison
+    flex
+    python3
+    makeWrapper
+    gobject-introspection
+    bash-completion
+
+    # documentation
+    gtk-doc
+    docbook_xsl
+    docbook_xml_dtd_43
+  ];
+
+  buildInputs = lib.optionals stdenv.isLinux [
+    libcap
+    libunwind
+    elfutils
+  ] ++ lib.optionals stdenv.isDarwin [
+    CoreServices
+  ];
+
+  propagatedBuildInputs = [
+    glib
+  ];
+
+  mesonFlags = [
+    "-Ddbghelp=disabled" # not needed as we already provide libunwind and libdw, and dbghelp is a fallback to those
+    "-Dexamples=disabled" # requires many dependencies and probably not useful for our users
+  ] ++ lib.optionals stdenv.isDarwin [
+    # darwin.libunwind doesn't have pkgconfig definitions so meson doesn't detect it.
+    "-Dlibunwind=disabled"
+    "-Dlibdw=disabled"
+  ];
+
+  postPatch = ''
+    patchShebangs \
+      gst/parse/get_flex_version.py \
+      gst/parse/gen_grammar.py.in \
+      gst/parse/gen_lex.py.in \
+      libs/gst/helpers/ptp_helper_post_install.sh
+  '';
+
+  postInstall = ''
+    for prog in "$dev/bin/"*; do
+        # We can't use --suffix here due to quoting so we craft the export command by hand
+        wrapProgram "$prog" --run "export GST_PLUGIN_SYSTEM_PATH=\$GST_PLUGIN_SYSTEM_PATH"$\{GST_PLUGIN_SYSTEM_PATH:+:\}"\$(unset _tmp; for profile in \$NIX_PROFILES; do _tmp="\$profile/lib/gstreamer-1.0''$\{_tmp:+:\}\$_tmp"; done; printf "\$_tmp")"
+    done
+  '';
+
+  preFixup = ''
+    moveToOutput "share/bash-completion" "$dev"
+  '';
+
+  setupHook = ./setup-hook.sh;
+
+  meta = with lib ;{
+    description = "Open source multimedia framework";
+    homepage = "https://gstreamer.freedesktop.org";
+    license = licenses.lgpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ttuegel matthewbauer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/core/fix_pkgconfig_includedir.patch b/nixpkgs/pkgs/development/libraries/gstreamer/core/fix_pkgconfig_includedir.patch
new file mode 100644
index 000000000000..c388a82fa2a8
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/core/fix_pkgconfig_includedir.patch
@@ -0,0 +1,15 @@
+diff --git a/pkgconfig/meson.build b/pkgconfig/meson.build
+index edb0586c2..7ed46dfce 100644
+--- a/pkgconfig/meson.build
++++ b/pkgconfig/meson.build
+@@ -2,8 +2,8 @@ pkgconf = configuration_data()
+ 
+ pkgconf.set('prefix', join_paths(get_option('prefix')))
+ pkgconf.set('exec_prefix', '${prefix}')
+-pkgconf.set('libdir', '${prefix}/@0@'.format(get_option('libdir')))
+-pkgconf.set('includedir', '${prefix}/@0@'.format(get_option('includedir')))
++pkgconf.set('libdir', join_paths(get_option('prefix'), get_option('libdir')))
++pkgconf.set('includedir', join_paths(get_option('prefix'), get_option('includedir')))
+ pkgconf.set('GST_API_VERSION', apiversion)
+ pkgconf.set('VERSION', gst_version)
+ pkgconf.set('LIBM', mathlib.found() ? '-lm' : '')
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/core/setup-hook.sh b/nixpkgs/pkgs/development/libraries/gstreamer/core/setup-hook.sh
new file mode 100644
index 000000000000..026a4e5f55a0
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/core/setup-hook.sh
@@ -0,0 +1,9 @@
+addGstreamer1LibPath () {
+    if test -d "$1/lib/gstreamer-1.0"
+    then
+        export GST_PLUGIN_SYSTEM_PATH_1_0="${GST_PLUGIN_SYSTEM_PATH_1_0-}${GST_PLUGIN_SYSTEM_PATH_1_0:+:}$1/lib/gstreamer-1.0"
+    fi
+}
+
+addEnvHooks "$hostOffset" addGstreamer1LibPath
+
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/default.nix b/nixpkgs/pkgs/development/libraries/gstreamer/default.nix
new file mode 100644
index 000000000000..94d71760a7f8
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/default.nix
@@ -0,0 +1,29 @@
+{ callPackage, CoreServices }:
+
+rec {
+  gstreamer = callPackage ./core { inherit CoreServices; };
+
+  gstreamermm = callPackage ./gstreamermm { };
+
+  gst-plugins-base = callPackage ./base { inherit gstreamer; };
+
+  gst-plugins-good = callPackage ./good { inherit gst-plugins-base; };
+
+  gst-plugins-bad = callPackage ./bad { inherit gst-plugins-base; };
+
+  gst-plugins-ugly = callPackage ./ugly { inherit gst-plugins-base; };
+
+  gst-rtsp-server = callPackage ./rtsp-server { inherit gst-plugins-base gst-plugins-bad; };
+
+  gst-libav = callPackage ./libav { inherit gst-plugins-base; };
+
+  gst-editing-services = callPackage ./ges { inherit gst-plugins-base; };
+
+  gst-vaapi = callPackage ./vaapi {
+    inherit gst-plugins-base gstreamer gst-plugins-bad;
+  };
+
+  gst-validate = callPackage ./validate { inherit gst-plugins-base; };
+
+  # note: gst-python is in ./python/default.nix - called under pythonPackages
+}
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/ges/default.nix b/nixpkgs/pkgs/development/libraries/gstreamer/ges/default.nix
new file mode 100644
index 000000000000..6e9a604f7946
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/ges/default.nix
@@ -0,0 +1,66 @@
+{ stdenv
+, fetchurl
+, fetchpatch
+, meson
+, ninja
+, pkgconfig
+, python
+, gst-plugins-base
+, libxml2
+, flex
+, perl
+, gettext
+, gobject-introspection
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gstreamer-editing-services";
+  version = "1.16.2";
+
+  outputs = [ "out" "dev" ];
+
+  src = fetchurl {
+    url = "${meta.homepage}/src/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "05hcf3prna8ajjnqd53221gj9syarrrjbgvjcbhicv0c38csc1hf";
+  };
+
+  patches = [
+    ./fix_pkgconfig_includedir.patch
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkgconfig
+    gettext
+    gobject-introspection
+    python
+    flex
+    perl
+  ];
+
+  buildInputs = [
+    libxml2
+  ];
+
+  propagatedBuildInputs = [
+    gst-plugins-base
+  ];
+
+  mesonFlags = [
+    "-Dgtk_doc=disabled"
+  ];
+
+  postPatch = ''
+    # for some reason, gst-plugins-bad cannot be found
+    # fortunately, they are only used by tests, which we do not run
+    sed -i -r -e 's/p(bad|good) = .*/p\1 = pbase/' tests/check/meson.build
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Library for creation of audio/video non-linear editors";
+    homepage = "https://gstreamer.freedesktop.org";
+    license = licenses.lgpl2Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/ges/fix_pkgconfig_includedir.patch b/nixpkgs/pkgs/development/libraries/gstreamer/ges/fix_pkgconfig_includedir.patch
new file mode 100644
index 000000000000..1e12f3bbfbea
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/ges/fix_pkgconfig_includedir.patch
@@ -0,0 +1,15 @@
+diff --git a/pkgconfig/meson.build b/pkgconfig/meson.build
+index a612b21b..c017eaff 100644
+--- a/pkgconfig/meson.build
++++ b/pkgconfig/meson.build
+@@ -2,8 +2,8 @@ pkgconf = configuration_data()
+ 
+ pkgconf.set('prefix', get_option('prefix'))
+ pkgconf.set('exec_prefix', '${prefix}')
+-pkgconf.set('libdir', '${prefix}/@0@'.format(get_option('libdir')))
+-pkgconf.set('includedir', '${prefix}/@0@'.format(get_option('includedir')))
++pkgconf.set('libdir', join_paths(get_option('prefix'), get_option('libdir')))
++pkgconf.set('includedir', join_paths(get_option('prefix'), get_option('includedir')))
+ pkgconf.set('GST_API_VERSION', apiversion)
+ pkgconf.set('VERSION', gst_version)
+ 
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/good/default.nix b/nixpkgs/pkgs/development/libraries/gstreamer/good/default.nix
new file mode 100644
index 000000000000..a7c2bcf838e7
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/good/default.nix
@@ -0,0 +1,151 @@
+{ stdenv
+, fetchurl
+, meson
+, ninja
+, pkgconfig
+, python3
+, gst-plugins-base
+, orc
+, bzip2
+, gettext
+, libv4l
+, libdv
+, libavc1394
+, libiec61883
+, libvpx
+, speex
+, flac
+, taglib
+, libshout
+, cairo
+, gdk-pixbuf
+, aalib
+, libcaca
+, libsoup
+, libpulseaudio
+, libintl
+, darwin
+, lame
+, mpg123
+, twolame
+, gtkSupport ? false, gtk3 ? null
+  # As of writing, jack2 incurs a Qt dependency (big!) via `ffado`.
+  # In the future we should probably split `ffado`.
+, enableJack ? false, jack2
+, libXdamage
+, libXext
+, libXfixes
+, ncurses
+, xorg
+, libgudev
+, wavpack
+}:
+
+assert gtkSupport -> gtk3 != null;
+
+let
+  inherit (stdenv.lib) optionals;
+in
+stdenv.mkDerivation rec {
+  pname = "gst-plugins-good";
+  version = "1.16.2";
+
+  outputs = [ "out" "dev" ];
+
+  src = fetchurl {
+    url = "${meta.homepage}/src/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "068k3cbv1yf3gbllfdzqsg263kzwh21y8dpwr0wvgh15vapkpfs0";
+  };
+
+  patches = [ ./fix_pkgconfig_includedir.patch ];
+
+  nativeBuildInputs = [
+    pkgconfig
+    python3
+    meson
+    ninja
+    gettext
+  ];
+
+  buildInputs = [
+    gst-plugins-base
+    orc
+    bzip2
+    libdv
+    libvpx
+    speex
+    flac
+    taglib
+    cairo
+    gdk-pixbuf
+    aalib
+    libcaca
+    libsoup
+    libshout
+    lame
+    mpg123
+    twolame
+    libintl
+    libXdamage
+    libXext
+    libXfixes
+    ncurses
+    xorg.libXfixes
+    xorg.libXdamage
+    wavpack
+  ] ++ optionals gtkSupport [
+    # for gtksink
+    gtk3
+  ] ++ optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Cocoa
+  ] ++ optionals stdenv.isLinux [
+    libv4l
+    libpulseaudio
+    libavc1394
+    libiec61883
+    libgudev
+  ] ++ optionals (stdenv.isLinux && enableJack) [
+    jack2
+  ];
+
+  mesonFlags = [
+    "-Dexamples=disabled" # requires many dependencies and probably not useful for our users
+    "-Dqt5=disabled" # not clear as of writing how to correctly pass in the required qt5 deps
+  ] ++ optionals (!gtkSupport) [
+    "-Dgtk3=disabled"
+  ] ++ optionals (!stdenv.isLinux || !enableJack) [
+    "-Djack=disabled" # unclear whether Jack works on Darwin
+  ] ++ optionals (!stdenv.isLinux) [
+    "-Ddv1394=disabled" # Linux only
+    "-Doss4=disabled" # Linux only
+    "-Doss=disabled" # Linux only
+    "-Dpulse=disabled" # TODO check if we can keep this enabled
+    "-Dv4l2-gudev=disabled" # Linux-only
+    "-Dv4l2=disabled" # Linux-only
+    "-Dximagesrc=disabled" # Linux-only
+    "-Dpulse=disabled" # TODO check if we can keep this enabled
+  ];
+
+
+  NIX_LDFLAGS = [
+    # linking error on Darwin
+    # https://github.com/NixOS/nixpkgs/pull/70690#issuecomment-553694896
+    "-lncurses"
+  ];
+
+  # fails 1 tests with "Unexpected critical/warning: g_object_set_is_valid_property: object class 'GstRtpStorage' has no property named ''"
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    description = "GStreamer Good Plugins";
+    homepage = "https://gstreamer.freedesktop.org";
+    longDescription = ''
+      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).
+    '';
+    license = licenses.lgpl2Plus;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ matthewbauer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/good/fix_pkgconfig_includedir.patch b/nixpkgs/pkgs/development/libraries/gstreamer/good/fix_pkgconfig_includedir.patch
new file mode 100644
index 000000000000..f68ad603a37c
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/good/fix_pkgconfig_includedir.patch
@@ -0,0 +1,15 @@
+diff --git a/pkgconfig/meson.build b/pkgconfig/meson.build
+index b3bf0d4d4..3e6e576c0 100644
+--- a/pkgconfig/meson.build
++++ b/pkgconfig/meson.build
+@@ -2,8 +2,8 @@ pkgconf = configuration_data()
+ 
+ pkgconf.set('prefix', get_option('prefix'))
+ pkgconf.set('exec_prefix', '${prefix}')
+-pkgconf.set('libdir', '${prefix}/@0@'.format(get_option('libdir')))
+-pkgconf.set('includedir', '${prefix}/@0@'.format(get_option('includedir')))
++pkgconf.set('libdir', join_paths(get_option('prefix'), get_option('libdir')))
++pkgconf.set('includedir', join_paths(get_option('prefix'), get_option('includedir')))
+ pkgconf.set('GST_API_VERSION', api_version)
+ pkgconf.set('VERSION', gst_version)
+ 
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/gstreamermm/default.nix b/nixpkgs/pkgs/development/libraries/gstreamer/gstreamermm/default.nix
new file mode 100644
index 000000000000..35c278da03b1
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/gstreamermm/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchurl, pkgconfig, file, glibmm, gst_all_1, gnome3 }:
+stdenv.mkDerivation rec {
+  pname = "gstreamermm";
+  version = "1.10.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "0q4dx9sncqbwgpzma0zvj6zssc279yl80pn8irb95qypyyggwn5y";
+  };
+
+  outputs = [ "out" "dev" ];
+
+  nativeBuildInputs = [ pkgconfig file ];
+
+  propagatedBuildInputs = [ glibmm gst_all_1.gst-plugins-base ];
+
+  enableParallelBuilding = true;
+
+  passthru = {
+    updateScript = gnome3.updateScript {
+      packageName = pname;
+      versionPolicy = "none"; # Unpredictable version stability
+    };
+  };
+
+  meta = with stdenv.lib; {
+    description = "C++ interface for GStreamer";
+    homepage = "https://gstreamer.freedesktop.org/bindings/cplusplus.html";
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ romildo ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gnonlin/default.nix b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gnonlin/default.nix
new file mode 100644
index 000000000000..402074a4e5f4
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gnonlin/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchurl, pkgconfig, gst-plugins-base, gstreamer }:
+
+stdenv.mkDerivation rec {
+  name = "gnonlin-0.10.17";
+
+  src = fetchurl {
+    urls = [
+      "https://gstreamer.freedesktop.org/src/gnonlin/${name}.tar.bz2"
+      "mirror://gentoo/distfiles/${name}.tar.bz2"
+      ];
+    sha256 = "0dc9kvr6i7sh91cyhzlbx2bchwg84rfa4679ccppzjf0y65dv8p4";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ gst-plugins-base gstreamer ];
+
+  meta = {
+    homepage = https://gstreamer.freedesktop.org/modules/gnonlin.html;
+    description = "Gstreamer Non-Linear Multimedia Editing Plugins";
+    license = stdenv.lib.licenses.gpl2Plus;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-bad/default.nix b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-bad/default.nix
new file mode 100644
index 000000000000..77465645d237
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-bad/default.nix
@@ -0,0 +1,36 @@
+{ fetchurl, stdenv, pkgconfig, glib, gstreamer, gst-plugins-base
+, libdvdnav, libdvdread, orc }:
+
+stdenv.mkDerivation rec {
+  name = "gst-plugins-bad-0.10.23";
+
+  src = fetchurl {
+    urls = [
+      "${meta.homepage}/src/gst-plugins-bad/${name}.tar.bz2"
+      "mirror://gentoo/distfiles/${name}.tar.bz2"
+      ];
+    sha256 = "148lw51dm6pgw8vc6v0fpvm7p233wr11nspdzmvq7bjp2cd7vbhf";
+  };
+
+  postInstall = ''
+    # Fixes CVE-2016-9447
+    # Does not actually impact NSF playback
+    rm -v $out/lib/gstreamer-0.10/libgstnsf.so
+  '';
+
+  buildInputs =
+    [ pkgconfig glib gstreamer gst-plugins-base libdvdnav libdvdread orc ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = https://gstreamer.freedesktop.org;
+
+    description = "‘Bad’ (potentially low quality) plug-ins for GStreamer";
+
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.linux;
+
+    license = stdenv.lib.licenses.lgpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-base/default.nix b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-base/default.nix
new file mode 100644
index 000000000000..eed9d423fdb9
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-base/default.nix
@@ -0,0 +1,60 @@
+{ fetchurl, fetchpatch, stdenv, pkgconfig, gstreamer, xorg, alsaLib, cdparanoia
+, libogg, libtheora, libvorbis, freetype, pango, liboil, glib, cairo, orc
+, libintl
+, ApplicationServices
+, # Whether to build no plugins that have external dependencies
+  # (except the ALSA plugin).
+  minimalDeps ? false
+}:
+
+stdenv.mkDerivation rec {
+  name = "gst-plugins-base-0.10.36";
+
+  src = fetchurl {
+    urls = [
+      "${meta.homepage}/src/gst-plugins-base/${name}.tar.xz"
+      "mirror://gentoo/distfiles/${name}.tar.xz"
+      ];
+    sha256 = "0jp6hjlra98cnkal4n6bdmr577q8mcyp3c08s3a02c4hjhw5rr0z";
+  };
+
+  patches = [
+    ./gcc-4.9.patch
+    (fetchpatch {
+      url = "https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/commit/f672277509705c4034bc92a141eefee4524d15aa.patch";
+      name = "CVE-2019-9928.patch";
+      sha256 = "1dlamsmyr7chrb6vqqmwikqvvqcx5l7k72p98448qm6k59ndnimc";
+    })
+  ];
+
+  postPatch = ''
+    sed -i 's@/bin/echo@echo@g' configure
+    sed -i -e 's/^   /\t/' docs/{libs,plugins}/Makefile.in
+  '';
+
+  outputs = [ "out" "dev" ];
+
+  # TODO : v4l, libvisual
+  buildInputs =
+    [ pkgconfig glib cairo orc libintl ]
+    # can't build alsaLib on darwin
+    ++ stdenv.lib.optional (!stdenv.isDarwin) alsaLib
+    ++ stdenv.lib.optionals (!minimalDeps)
+      [ xorg.xlibsWrapper xorg.libXv libogg libtheora libvorbis freetype pango
+        liboil ]
+    # can't build cdparanoia on darwin
+    ++ stdenv.lib.optional (!minimalDeps && !stdenv.isDarwin) cdparanoia
+    ++ stdenv.lib.optional stdenv.isDarwin ApplicationServices;
+
+  propagatedBuildInputs = [ gstreamer ];
+
+  postInstall = "rm -rf $out/share/gtk-doc";
+
+  meta = with stdenv.lib; {
+    homepage    = https://gstreamer.freedesktop.org;
+    description = "Base plug-ins for GStreamer";
+    license     = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ lovek323 ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-base/gcc-4.9.patch b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-base/gcc-4.9.patch
new file mode 100644
index 000000000000..fd9f6ea240d2
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-base/gcc-4.9.patch
@@ -0,0 +1,38 @@
+https://bugzilla.gnome.org/show_bug.cgi?id=670690
+
+From 9bd5a7ae5435469c3557a3d70e762791cb3dc5c7 Mon Sep 17 00:00:00 2001
+From: Antoine Jacoutot <ajacoutot@gnome.org>
+Date: Mon, 20 Jan 2014 15:44:09 +0100
+Subject: [PATCH] audioresample: fix build on BSD
+
+On i386, EMMINTRIN is defined but not usable without sse so check for
+__SSE__ and __SSE2__ as well.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=670690
+---
+ gst/audioresample/resample.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/gst/audioresample/resample.c b/gst/audioresample/resample.c
+index 98d006c..481fa01 100644
+--- a/gst/audioresample/resample.c
++++ b/gst/audioresample/resample.c
+@@ -77,13 +77,13 @@
+ #define EXPORT G_GNUC_INTERNAL
+ 
+ #ifdef _USE_SSE
+-#ifndef HAVE_XMMINTRIN_H
++#if !defined(__SSE__) || !defined(HAVE_XMMINTRIN_H)
+ #undef _USE_SSE
+ #endif
+ #endif
+ 
+ #ifdef _USE_SSE2
+-#ifndef HAVE_EMMINTRIN_H
++#if !defined(__SSE2__) || !defined(HAVE_XMMINTRIN_H)
+ #undef _USE_SSE2
+ #endif
+ #endif
+-- 
+1.8.5.3
+
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-good/default.nix b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-good/default.nix
new file mode 100644
index 000000000000..2b78d4daaf30
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-good/default.nix
@@ -0,0 +1,52 @@
+{ fetchurl, stdenv, lib, pkgconfig, gst-plugins-base, aalib, cairo
+, flac, libjpeg, speex, libpng, libdv, libcaca, libvpx
+, taglib, libpulseaudio, gdk-pixbuf, orc
+, glib, gstreamer, bzip2, libsoup, libshout, ncurses, libintl
+, # Whether to build no plugins that have external dependencies
+  # (except the PulseAudio plugin).
+  minimalDeps ? false
+}:
+
+stdenv.mkDerivation rec {
+  name = "gst-plugins-good-0.10.31";
+
+  src = fetchurl {
+    urls = [
+      "${meta.homepage}/src/gst-plugins-good/${name}.tar.bz2"
+      "mirror://gentoo/distfiles/${name}.tar.bz2"
+      ];
+    sha256 = "1ijswgcrdp243mfsyza31fpzq6plz40p4b83vkr2x4x7807889vy";
+  };
+
+  patches = [ ./v4l.patch ./linux-headers-3.9.patch ];
+
+  configureFlags = [ "--enable-experimental" "--disable-oss" ];
+
+  buildInputs =
+    [ pkgconfig glib gstreamer gst-plugins-base libintl ]
+    ++ lib.optional stdenv.isLinux libpulseaudio
+    ++ lib.optionals (!minimalDeps)
+      [ aalib libcaca cairo libdv flac libjpeg libpng speex
+        taglib bzip2 libvpx gdk-pixbuf orc libsoup libshout ];
+
+  enableParallelBuilding = true;
+
+  postInstall = lib.optionalString (!minimalDeps) ''
+    substituteInPlace $out/lib/gstreamer-0.10/libgstaasink.la \
+      --replace "${ncurses.dev}/lib" "${ncurses.out}/lib"
+  '';
+
+  # fails 1 out of 65 tests with "Could not read TLS certificate from '../../tests/files/test-cert.pem': TLS support is not available"
+  doCheck = false;
+
+  meta = {
+    homepage = https://gstreamer.freedesktop.org;
+
+    description = "`Good' plug-ins for GStreamer";
+
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.unix;
+
+    license = stdenv.lib.licenses.lgpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-good/linux-headers-3.9.patch b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-good/linux-headers-3.9.patch
new file mode 100644
index 000000000000..f13d3a166714
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-good/linux-headers-3.9.patch
@@ -0,0 +1,27 @@
+http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/media-plugins/gst-plugins-v4l2/files/gst-plugins-v4l2-0.10.31-linux-headers-3.9.patch
+
+From 8e633d2059cb835448021cf79becb487aff10975 Mon Sep 17 00:00:00 2001
+From: Bastien Nocera <hadess@hadess.net>
+Date: Mon, 18 Mar 2013 14:59:35 +0000
+Subject: v4l2: fix compilation against newer kernel headers as on FC19
+
+---
+diff --git a/sys/v4l2/v4l2_calls.c b/sys/v4l2/v4l2_calls.c
+index 07d390a..4c10f4f 100644
+--- a/sys/v4l2/v4l2_calls.c
++++ b/sys/v4l2/v4l2_calls.c
+@@ -291,8 +291,12 @@ gst_v4l2_fill_lists (GstV4l2Object * v4l2object)
+         break;
+       case V4L2_CID_HFLIP:
+       case V4L2_CID_VFLIP:
++#ifndef V4L2_CID_PAN_RESET
+       case V4L2_CID_HCENTER:
++#endif
++#ifndef V4L2_CID_TILT_RESET
+       case V4L2_CID_VCENTER:
++#endif
+ #ifdef V4L2_CID_PAN_RESET
+       case V4L2_CID_PAN_RESET:
+ #endif
+--
+cgit v0.9.0.2-2-gbebe
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-good/v4l.patch b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-good/v4l.patch
new file mode 100644
index 000000000000..22cff574134f
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-good/v4l.patch
@@ -0,0 +1,11 @@
+diff -ru -x '*~' gst-plugins-good-0.10.31-orig/sys/v4l2/gstv4l2bufferpool.c gst-plugins-good-0.10.31/sys/v4l2/gstv4l2bufferpool.c
+--- gst-plugins-good-0.10.31-orig/sys/v4l2/gstv4l2bufferpool.c	2011-12-30 14:59:13.000000000 +0100
++++ gst-plugins-good-0.10.31/sys/v4l2/gstv4l2bufferpool.c	2013-01-28 17:41:25.549523708 +0100
+@@ -181,7 +181,6 @@
+     GST_LOG_OBJECT (pool->v4l2elem, "  MMAP offset:  %u",
+         ret->vbuffer.m.offset);
+   GST_LOG_OBJECT (pool->v4l2elem, "  length:    %u", ret->vbuffer.length);
+-  GST_LOG_OBJECT (pool->v4l2elem, "  input:     %u", ret->vbuffer.input);
+ 
+   data = (guint8 *) v4l2_mmap (0, ret->vbuffer.length,
+       PROT_READ | PROT_WRITE, MAP_SHARED, pool->video_fd,
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-ugly/default.nix b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-ugly/default.nix
new file mode 100644
index 000000000000..2f46016adac8
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-plugins-ugly/default.nix
@@ -0,0 +1,30 @@
+{ fetchurl, stdenv, pkgconfig, glib, gstreamer, gst-plugins-base
+, libmad, libdvdread, a52dec, x264, orc, lame, libintl }:
+
+stdenv.mkDerivation rec {
+  name = "gst-plugins-ugly-0.10.19";
+
+  src = fetchurl {
+    urls = [
+      "${meta.homepage}/src/gst-plugins-ugly/${name}.tar.bz2"
+      "mirror://gentoo/distfiles/${name}.tar.bz2"
+      ];
+    sha256 = "1w4d5iz9ffvh43l261zdp997i6s2iwd61lflf755s3sw4xch1a8w";
+  };
+
+  buildInputs =
+    [ pkgconfig glib gstreamer gst-plugins-base libmad libdvdread a52dec x264 orc lame libintl ];
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = https://gstreamer.freedesktop.org;
+
+    description = "‘Ugly’ (potentially patent-encumbered) plug-ins for GStreamer";
+
+    maintainers = [stdenv.lib.maintainers.raskin];
+    platforms = stdenv.lib.platforms.unix;
+
+    license = stdenv.lib.licenses.lgpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-python/default.nix b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-python/default.nix
new file mode 100644
index 000000000000..c8414a7b681b
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-python/default.nix
@@ -0,0 +1,37 @@
+{ fetchurl, stdenv, pkgconfig, python2Packages, gstreamer, gst-plugins-base
+}:
+
+let
+  inherit (python2Packages) python pygobject2;
+in stdenv.mkDerivation rec {
+  name = "gst-python-0.10.22";
+
+  src = fetchurl {
+    urls = [
+      "${meta.homepage}/src/gst-python/${name}.tar.bz2"
+      "mirror://gentoo/distfiles/${name}.tar.bz2"
+      ];
+    sha256 = "0y1i4n5m1diljqr9dsq12anwazrhbs70jziich47gkdwllcza9lg";
+  };
+
+  hardeningDisable = [ "bindnow" ];
+
+  # Need to disable the testFake test case due to bug in pygobject.
+  # See https://bugzilla.gnome.org/show_bug.cgi?id=692479
+  patches = [ ./disable-testFake.patch ];
+
+  buildInputs =
+    [ pkgconfig gst-plugins-base pygobject2 ]
+    ;
+
+  propagatedBuildInputs = [ gstreamer python ];
+
+  meta = {
+    homepage = https://gstreamer.freedesktop.org;
+
+    description = "Python bindings for GStreamer";
+
+    license = stdenv.lib.licenses.lgpl2Plus;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-python/disable-testFake.patch b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-python/disable-testFake.patch
new file mode 100644
index 000000000000..d0c9960e5d22
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gst-python/disable-testFake.patch
@@ -0,0 +1,56 @@
+diff -Nurp gst-python-0.10.22.orig/testsuite/test_bin.py gst-python-0.10.22/testsuite/test_bin.py
+--- gst-python-0.10.22.orig/testsuite/test_bin.py	2014-10-29 18:58:00.921827721 +0100
++++ gst-python-0.10.22/testsuite/test_bin.py	2014-10-29 19:00:32.019353092 +0100
+@@ -131,52 +131,6 @@ class BinAddRemove(TestCase):
+         self.assertRaises(gst.AddError, self.bin.add, src, sink)
+         self.bin.remove(src, sink)
+         self.assertRaises(gst.RemoveError, self.bin.remove, src, sink)
+-
+-class Preroll(TestCase):
+-    def setUp(self):
+-        TestCase.setUp(self)
+-        self.bin = gst.Bin('bin')
+-
+-    def tearDown(self):
+-        # FIXME: wait for state change thread to settle down
+-        while self.bin.__gstrefcount__ > 1:
+-            time.sleep(0.1)
+-        self.assertEquals(self.bin.__gstrefcount__, 1)
+-        del self.bin
+-        TestCase.tearDown(self)
+-
+-    def testFake(self):
+-        src = gst.element_factory_make('fakesrc')
+-        sink = gst.element_factory_make('fakesink')
+-        self.bin.add(src)
+-
+-        # bin will go to paused, src pad task will start and error out
+-        self.bin.set_state(gst.STATE_PAUSED)
+-        ret = self.bin.get_state()
+-        self.assertEquals(ret[0], gst.STATE_CHANGE_SUCCESS)
+-        self.assertEquals(ret[1], gst.STATE_PAUSED)
+-        self.assertEquals(ret[2], gst.STATE_VOID_PENDING)
+-
+-        # adding the sink will cause the bin to go in preroll mode
+-        gst.debug('adding sink and setting to PAUSED, should cause preroll')
+-        self.bin.add(sink)
+-        sink.set_state(gst.STATE_PAUSED)
+-        ret = self.bin.get_state(timeout=0)
+-        self.assertEquals(ret[0], gst.STATE_CHANGE_ASYNC)
+-        self.assertEquals(ret[1], gst.STATE_PAUSED)
+-        self.assertEquals(ret[2], gst.STATE_PAUSED)
+-
+-        # to actually complete preroll, we need to link and re-enable fakesrc
+-        src.set_state(gst.STATE_READY)
+-        src.link(sink)
+-        src.set_state(gst.STATE_PAUSED)
+-        ret = self.bin.get_state()
+-        self.assertEquals(ret[0], gst.STATE_CHANGE_SUCCESS)
+-        self.assertEquals(ret[1], gst.STATE_PAUSED)
+-        self.assertEquals(ret[2], gst.STATE_VOID_PENDING)
+-
+-        self.bin.set_state(gst.STATE_NULL)
+-        self.bin.get_state()
+  
+ class ConstructorTest(TestCase):
+     def testGood(self):
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gstreamer/darwin.patch b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gstreamer/darwin.patch
new file mode 100644
index 000000000000..67dfc34434db
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gstreamer/darwin.patch
@@ -0,0 +1,14 @@
+diff --git a/gst/gstdatetime.c b/gst/gstdatetime.c
+index 60f709f..cdc7e75 100644
+--- a/gst/gstdatetime.c
++++ b/gst/gstdatetime.c
+@@ -21,8 +21,8 @@
+ #include "config.h"
+ #endif
+ 
+-#include "glib-compat-private.h"
+ #include "gst_private.h"
++#include "glib-compat-private.h"
+ #include "gstdatetime.h"
+ #include <glib.h>
+ #include <math.h>
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gstreamer/default.nix b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gstreamer/default.nix
new file mode 100644
index 000000000000..c70e898a47d8
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gstreamer/default.nix
@@ -0,0 +1,85 @@
+{ fetchurl, fetchpatch, stdenv, autoreconfHook
+, perl, bison2, flex, pkgconfig, glib, libxml2, libintl, libunwind
+}:
+
+stdenv.mkDerivation rec {
+  name = "gstreamer-0.10.36";
+
+  src = fetchurl {
+    urls =
+      [ "${meta.homepage}/src/gstreamer/${name}.tar.xz"
+        "mirror://gentoo/distfiles/${name}.tar.xz"
+      ];
+    sha256 = "1nkid1n2l3rrlmq5qrf5yy06grrkwjh3yxl5g0w58w0pih8allci";
+  };
+
+  outputs = [ "out" "dev" ];
+
+  nativeBuildInputs = [ autoreconfHook flex perl pkgconfig libintl bison2 glib ];
+  buildInputs = stdenv.lib.optional stdenv.isDarwin libunwind;
+  propagatedBuildInputs = [ glib libxml2 ];
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/GStreamer/common/commit/03a0e5736761a72d4ed880e8c485bbf9e4a8ea47.patch";
+      sha256 = "0rin3x01yy78ky3smmhbwlph18hhym18q4x9w6ddiqajg5lk4xhm";
+      extraPrefix = "common/";
+      stripLen = 1;
+    })
+    (fetchpatch {
+      url = "https://github.com/GStreamer/common/commit/8aadeaaa8a948d7ce62008789ab03e9aa514c2b9.patch";
+      sha256 = "0n2mqvq2al7jr2hflhz4l781i3jya5a9i725jvy508ambpgycz3x";
+      extraPrefix = "common/";
+      stripLen = 1;
+    })
+    (fetchpatch {
+      url = "https://github.com/GStreamer/common/commit/7bb2bcecda471a0d514a964365a78150f3ee5747.patch";
+      sha256 = "0famdj70m7wjvr1dpy7iywhrkqxmrshxz0rizz1bixgp42dvkhbq";
+      extraPrefix = "common/";
+      stripLen = 1;
+    })
+  ] ++
+    # See https://trac.macports.org/ticket/40783 for explanation of patch
+    stdenv.lib.optional stdenv.isDarwin ./darwin.patch;
+
+  postPatch = ''
+    sed -i -e 's/^   /\t/' docs/gst/Makefile.in docs/libs/Makefile.in docs/plugins/Makefile.in
+  '';
+
+  configureFlags = [
+    "--disable-examples"
+    "--localstatedir=/var"
+    "--disable-gtk-doc"
+    "--disable-docbook"
+  ];
+
+  doCheck = false; # fails. 2 tests crash
+
+  postInstall = ''
+    # Hm, apparently --disable-gtk-doc is ignored...
+    rm -rf $out/share/gtk-doc
+  '';
+
+  setupHook = ./setup-hook.sh;
+
+  meta = {
+    homepage = https://gstreamer.freedesktop.org;
+
+    description = "Library for constructing graphs of media-handling components";
+
+    longDescription = ''
+      GStreamer is a library for constructing graphs of media-handling
+      components.  The applications it supports range from simple
+      Ogg/Vorbis playback, audio/video streaming to complex audio
+      (mixing) and video (non-linear editing) processing.
+
+      Applications can take advantage of advances in codec and filter
+      technology transparently.  Developers can add new codecs and
+      filters by writing a simple plugin with a clean, generic
+      interface.
+    '';
+
+    license = stdenv.lib.licenses.lgpl2Plus;
+    platforms = stdenv.lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gstreamer/setup-hook.sh b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gstreamer/setup-hook.sh
new file mode 100644
index 000000000000..636e20b732b4
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gstreamer/setup-hook.sh
@@ -0,0 +1,8 @@
+addGstreamerLibPath () {
+    if test -d "$1/lib/gstreamer-0.10"
+    then
+        export GST_PLUGIN_SYSTEM_PATH="${GST_PLUGIN_SYSTEM_PATH-}${GST_PLUGIN_SYSTEM_PATH:+:}$1/lib/gstreamer-0.10"
+    fi
+}
+
+addEnvHooks "$hostOffset" addGstreamerLibPath
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gstreamermm/default.nix b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gstreamermm/default.nix
new file mode 100644
index 000000000000..27036ad86edf
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/legacy/gstreamermm/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl, glibmm, gstreamer, gst-plugins-base, libsigcxx, libxmlxx, pkgconfig }:
+
+let
+  ver_maj = "0.10";
+  ver_min = "11";
+in
+stdenv.mkDerivation {
+  name = "gstreamermm-${ver_maj}.${ver_min}";
+
+  src = fetchurl {
+    url    = "mirror://gnome/sources/gstreamermm/${ver_maj}/gstreamermm-${ver_maj}.${ver_min}.tar.xz";
+    sha256 = "12b5f377363594a69cb79f2f5cd0a8b1813ca6553680c3216e6354cfd682ebc6";
+  };
+ 
+  doCheck = false; # Tests require pulseaudio in /homeless-shelter
+
+  propagatedBuildInputs = [
+    glibmm gstreamer gst-plugins-base libsigcxx libxmlxx
+  ];
+
+  nativeBuildInputs = [ pkgconfig ];
+
+  meta = with stdenv.lib; {
+    description = "C++ bindings for the GStreamer streaming multimedia library";
+    homepage = https://www.gtkmm.org/;
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ plcplc ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/libav/default.nix b/nixpkgs/pkgs/development/libraries/gstreamer/libav/default.nix
new file mode 100644
index 000000000000..e36eba370071
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/libav/default.nix
@@ -0,0 +1,46 @@
+{ stdenv
+, lib
+, fetchurl
+, meson
+, ninja
+, pkgconfig
+, python3
+, gst-plugins-base
+, gettext
+, libav
+}:
+
+# Note that since gst-libav-1.6, libav is actually ffmpeg. See
+# https://gstreamer.freedesktop.org/releases/1.6/ for more info.
+
+stdenv.mkDerivation rec {
+  pname = "gst-libav";
+  version = "1.16.2";
+
+  src = fetchurl {
+    url = "${meta.homepage}/src/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "1wpfilc98bad9nsv3y1qapxp35dvn2mvwvrmqwrsj58cf09gc967";
+  };
+
+  outputs = [ "out" "dev" ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    gettext
+    pkgconfig
+    python3
+  ];
+
+  buildInputs = [
+    gst-plugins-base
+    libav
+  ];
+
+  meta = with lib; {
+    description = "FFmpeg/libav plugin for GStreamer";
+    homepage = "https://gstreamer.freedesktop.org";
+    license = licenses.lgpl2Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/rtsp-server/default.nix b/nixpkgs/pkgs/development/libraries/gstreamer/rtsp-server/default.nix
new file mode 100644
index 000000000000..dfb18754c839
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/rtsp-server/default.nix
@@ -0,0 +1,50 @@
+{ stdenv
+, fetchurl
+, meson
+, ninja
+, pkgconfig
+, gettext
+, gobject-introspection
+, gst-plugins-base
+, gst-plugins-bad
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gst-rtsp-server";
+  version = "1.16.2";
+
+  src = fetchurl {
+    url = "${meta.homepage}/src/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "0vn23nxwvs96g7gcxw5zbnw23hkhky8a8r42wq68411vgf1s41yy";
+  };
+
+  outputs = [ "out" "dev" ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    gettext
+    gobject-introspection
+    pkgconfig
+  ];
+
+  buildInputs = [
+    gst-plugins-base
+    gst-plugins-bad
+  ];
+
+  mesonFlags = [
+    "-Dexamples=disabled" # requires many dependencies and probably not useful for our users
+  ];
+
+  meta = with stdenv.lib; {
+    description = "GStreamer RTSP server";
+    homepage = "https://gstreamer.freedesktop.org";
+    longDescription = ''
+      A library on top of GStreamer for building an RTSP server.
+    '';
+    license = licenses.lgpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ bkchr ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/ugly/default.nix b/nixpkgs/pkgs/development/libraries/gstreamer/ugly/default.nix
new file mode 100644
index 000000000000..870b4468860f
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/ugly/default.nix
@@ -0,0 +1,76 @@
+{ stdenv
+, fetchurl
+, meson
+, ninja
+, pkgconfig
+, python
+, gst-plugins-base
+, orc
+, gettext
+, a52dec
+, libcdio
+, libdvdread
+, libmad
+, libmpeg2
+, x264
+, libintl
+, lib
+, opencore-amr
+, darwin
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gst-plugins-ugly";
+  version = "1.16.2";
+
+  outputs = [ "out" "dev" ];
+
+  src = fetchurl {
+    url = "${meta.homepage}/src/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "1jpvc32x6q01zjkfgh6gmq6aaikiyfwwnhj7bmvn52syhrdl202m";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    gettext
+    pkgconfig
+    python
+  ];
+
+  buildInputs = [
+    gst-plugins-base
+    orc
+    a52dec
+    libcdio
+    libdvdread
+    libmad
+    libmpeg2
+    x264
+    libintl
+    opencore-amr
+  ] ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
+    IOKit
+    CoreFoundation
+    DiskArbitration
+  ]);
+
+  mesonFlags = [
+    "-Dexamples=disabled" # requires many dependencies and probably not useful for our users
+    "-Dsidplay=disabled" # sidplay / sidplay/player.h isn't packaged in nixpkgs as of writing
+  ];
+
+  meta = with lib; {
+    description = "Gstreamer Ugly Plugins";
+    homepage = "https://gstreamer.freedesktop.org";
+    longDescription = ''
+      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.
+    '';
+    license = licenses.lgpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ matthewbauer ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/vaapi/default.nix b/nixpkgs/pkgs/development/libraries/gstreamer/vaapi/default.nix
new file mode 100644
index 000000000000..cac56f64cc91
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/vaapi/default.nix
@@ -0,0 +1,72 @@
+{ stdenv
+, fetchurl
+, meson
+, ninja
+, pkgconfig
+, gst-plugins-base
+, bzip2
+, libva
+, wayland
+, libdrm
+, udev
+, xorg
+, libGLU
+, libGL
+, gstreamer
+, gst-plugins-bad
+, nasm
+, libvpx
+, python
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gstreamer-vaapi";
+  version = "1.16.2";
+
+  src = fetchurl {
+    url = "${meta.homepage}/src/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "00f6sx700qm1ximi1ag2c27m35dywwhhg6awhz85va34mfqff78r";
+  };
+
+  outputs = [ "out" "dev" ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkgconfig
+    bzip2
+  ];
+
+  buildInputs = [
+    gstreamer
+    gst-plugins-base
+    gst-plugins-bad
+    libva
+    wayland
+    libdrm
+    udev
+    xorg.libX11
+    xorg.libXext
+    xorg.libXv
+    xorg.libXrandr
+    xorg.libSM
+    xorg.libICE
+    libGL
+    libGLU
+    nasm
+    libvpx
+    python
+  ];
+
+  mesonFlags = [
+    "-Dexamples=disabled" # requires many dependencies and probably not useful for our users
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Set of VAAPI GStreamer Plug-ins";
+    homepage = "https://gstreamer.freedesktop.org";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ tstrobel ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/gstreamer/validate/default.nix b/nixpkgs/pkgs/development/libraries/gstreamer/validate/default.nix
new file mode 100644
index 000000000000..9439ddd94e8f
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/gstreamer/validate/default.nix
@@ -0,0 +1,43 @@
+{ stdenv
+, fetchurl
+, pkgconfig
+, gstreamer
+, gst-plugins-base
+, python
+, gobject-introspection
+, json-glib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gst-validate";
+  version = "1.16.2";
+
+  src = fetchurl {
+    url = "${meta.homepage}/src/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "1jpfrzg3yc6kp66bgq3jy14xsj3x71mk2zh0k16yf0326awwqqa8";
+  };
+
+  outputs = [ "out" "dev" ];
+
+  nativeBuildInputs = [
+    pkgconfig
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    python
+    json-glib
+  ];
+
+  propagatedBuildInputs = [
+    gstreamer
+    gst-plugins-base
+  ];
+
+  meta = with stdenv.lib; {
+    description = "Integration testing infrastructure for the GStreamer framework";
+    homepage = "https://gstreamer.freedesktop.org";
+    license = licenses.lgpl2Plus;
+    platforms = platforms.unix;
+  };
+}