November 26, 2019
Given GStreamer's roots in the Linux/GTK world, Windows has seemed at times like a second-class citizen when it came to hacking GStreamer code. With the advent of meson and gst-build, however, this is no longer the case. It is now possible to set up a Windows development environment that rivals the finest Linux has to offer, with full support for Visual Studio debugging into the library.
We are going to use not one but two IDEs ! Vi vs EMACS people : Nothing to see here, move along.
(note on step 3: we will be running
meson from source, so please skip the
pip install of
While not frequently used on Windows,
pkg-config allows us to manage GStreamer dependencies on other projects. After unzipping the binaries, put their location on your Windows
meson, create a
meson.cmd file with the following contents:
@echo off c:\\PATH\TO\CLONED\MESON\SRC\meson.py %*
and put the file location on your Windows
I recommend the superb Git client Git Extensions.
Important: once Git is installed, ensure that line endings are configured to
core.autocrlf in your Git configuration. Otherwise, you may get Windows line endings breaking GStreamer shell scripts.
Next, we set up a few environment variables (note the backslash at the end of the first three variables):
Now, we will clone
gst-build into our
SOURCE_DIR directory, like so:
> cd %SOURCE_DIR% > git clone https://gitlab.freedesktop.org/gstreamer/gst-build.git
And finally we add the following entry to our
PATH environment variable
Visual Studio 2019 \ x64 Native Tools Command Prompt
> cd %SOURCE_DIR%gst-build > meson --prefix=%GSTREAMER_1_0_ROOT_X86_64% build
ninjato build and install
> ninja -C build install
File \ Importmenu, choose
import C++\Existing code as Makefile Projectand select the
%SOURCE_DIR%gst-buildfolder. You now have a fully-indexed, fully searchable project containing GStreamer code for base, plugins etc. Since gst-build is a big project, and Eclipse uses a lot of resources, we can filter out the
buildfolder from the project by:
Alt Enterto open the project
Resource \ Resource Filters, add a filter to exclude the
buildfolder (choose the
Project Relative Pathsetting)
Windows \ Preferences \ General \ Workspace \ Build. select
Save automatically before build.
Properties \ C++ Build \ Builder Settings, un-check
Use default build commandand enter
ninja -C build installas the build command.
Properties \ C++ Build \ Behaviourand delete
Build (incremental build)box.
Ctrl + Bto build and install GStreamer.
GSTREAMER_1_0_ROOT_X86_64environment variable to ensure you are linking to the gst-build version of GStreamer.
GST_SRC_BUILD_PATHand set the breakpoint.
ninja -C build installstep.
GST_SRC_BUILD_PATH, the Git repositories can be modified to point to different branches. The only issue here is when executing
ninja -C build update, which will stop on the modified repositories.
The only tool missing on Windows is
gst-indent. To indent new code, we need to:
$ sudo apt install git autoconf autopoint libtool make texi2html wget $ mkdir src && cd src $ wget https://ftp.gnu.org/gnu/indent/indent-2.2.11.tar.gz $ tar xvzf indent-2.2.11.tar.gz $ cd indent-2.2.11 && ./configure $ make && sudo make install
Now we can indent new code in the Ubuntu terminal like so:
$ /mnt/c/PATH/TO/SOURCE/gst-build/subprojects/gstreamer/tools/gst-indent /mnt/c/PATH/TO/FILE.c
Finally, we take the potentially dangerous step of removing the
gst-indent pre-commit hook from the GStreamer sub-project we are working on:
> cd %SOURCE_DIR%gst-build\subprojects\SOME_GST_SUBPROJECT\.git\hooks > del pre-commit
We must now be careful to remember to run
gst-indent from the Ubuntu terminal before committing.
Now sit back and give yourself a big high-five !
If you have any questions about GStreamer on Windows or any other platform, please contact us.
Earlier this year, I joined Collabora as an intern to work on improving testing in libcamera and automating it through KernelCI. Having…
With the LLVM toolchain seeing increasing development and adoption alongside the older, more established GNU toolchain, projects needing…
This summer, Christoph Haag and I had the pleasure of taking part in Google Summer of Code as mentors for xrdesktop, the Open Source project…
Earlier this year, from January to April 2021, I worked on adding support for stateless decoders for GStreamer as part of a multimedia internship…
In our previous post, we presented a project backed by INVEST-AI which introduces a multi-stage neural network-based solution. Now let's…
Initiated as a joint effort by the Google Chrome OS team and Collabora, the recent KernelCI hackfest brought the addition of new tests including…