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 2: we will run
meson from source, so skip the
pip install of
While not frequently used on Windows,
pkg-config allows us to manage dependencies on other projects. After unzipping the binaries, put them 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 this file on your Windows
I also 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 each path except the last one):
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
ninja -C build
And install with:
ninja -C build install
File \ Import menu, choose
import C++\Existing code as Makefile Project and select the
%SOURCE_DIR%gst-build folder. 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
build folder from the project by:
Alt Enter to open the project
Resource \ Resource Filters, add a filter to exclude the
build folder (choose the
Project Relative Path setting)
Eclipse by default does not save files before building. Under
Windows \ Preferences \ General \ Workspace \ Build. select
Save automatically before build
Right click on the gst-build project, select
Properties \ C++ Build, un-check
Use default build command and enter
ninja -C build install as the build command.
Ctrl + B to build and install GStreamer
Open your project in Visual Studio. Your compile and link settings should use the
GSTREAMER_1_0_ROOT_X86_64 environment variable to ensure you are linking to the gst-build version of GStreamer
To set Visual Studio breakpoints in GStreamer, open a file from the appropriate sub-project inside
GST_SRC_BUILD_PATH and set the breakpoint
To modify GStreamer code, edit the code and build in Eclipse (or your favorite editor) - your Visual Studio project will automagically pick up the changes when it next runs. Don't forget to run the
ninja -C build install step.
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:
GNU indent 2.2.11
sudo apt install git autoconf autopoint libtool make texi2html
mkdir src && cd src
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:
Finally, we take the potentially dangerous step of removing the
gst-indent pre-commit hook from the GStreamer sub-project we are working on:
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.
Syzkaller is much needed tool for Linux kernel testing and debugging. With some work, it can also be enhanced to find bugs in specific drivers,…
Previously, we discussed about how Rust can be a great language for embedded programming. In this article, we'll explain an easy setup to…
Adaptive streaming is a technique to provide flexibility and scalability by offering variable bit-rate streams to the client. Here's a quick…
With only free software, a Mali G31 chip can now run Wayland compositors with zero-copy graphics, including GNOME 3. We can run every scene…
Device drivers can support more revisions and SoC platforms by abstracting away specific hardware interface layouts. Let's examine a specific…
gst-build is one of the main build systems used by the community to develop the GStreamer platform. In my last blog post, I presented gst-build…