GStreamer plugins collection for building Dolby Home Audio media pipeline.
⚠️ Plugins require proprietary libraries to initialize properly.
- Python 3.5 or later
- Ninja 1.7 or later
- Meson 0.58 or later
- GStreamer 1.16.2 or later
- more, see building section...
On Debian-based systems, install the following dependencies:
$ apt-get install ninja-build
$ pip3 install mesonMore on installing Meson build can be found at the Meson quickstart guide.
Get other dependencies.
$ apt-get install \
libglib2.0-dev \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
libgstreamer1.0-0 \
gstreamer1.0-tools \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
libjson-glib-devThen configure with Meson, and build with Ninja.
$ meson build
$ ninja -C buildSupport for Windows is enabled via MSYS2. Follow instructions on MSYS2 install page. You should have the gcc toolchain on MSYS environment.
Note: Run MSYS2 MinGW 64-bit.
Install Meson and Ninja
$ pacman -S mingw-w64-x86_64-meson mingw-w64-x86_64-ninjaInstall the GStreamer dependencies (required to build plugins):
$ pacman -S mingw-w64-x86_64-gstreamer mingw-w64-x86_64-gst-plugins-base \
mingw-w64-x86_64-gst-plugins-good mingw-w64-x86_64-json-glib \
mingw-w64-x86_64-gst-pythonInstall some useful plugins (optional)
$ pacman -S mingw-w64-x86_64-gst-plugins-bad mingw-w64-x86_64-gst-plugins-ugly \
mingw-w64-x86_64-gst-libavBuild and install
$ meson build
$ ninja -C build
$ ninja -C build installYou can install GStreamer dependencies via Homebrew or you can use installer from GStreamer project.
$ brew install gstreamer gst-plugins-base gst-plugins-good gst-python json-glibInstall additional Python dependencies
pip3 install pycairo
pip3 install PyGObjectBuild
$ meson build
$ ninja -C buildGStreamer and the plugins can be built from source by using gst-build, or starting from GStreamer 1.20, GStreamer mono repo.
Install meson and ninja as instructed in the Linux,
Windows, and macOS sections above.
On Linux systems additional dependencies may be required:
$ apt-get install flex bison libmount-devClone the gst-build repository, specifying a stable version
$ git clone --depth 1 --branch 1.18.4 https://gitlab.freedesktop.org/gstreamer/gst-build.git gst-buildCopy the contents of this repository into gst-build/subprojects
$ cp -R /path/to/your/clone/gst-home-audio gst-build/subprojectsThen build the project
$ cd gst-build
$ meson builddir -Dcustom_subprojects=gst-home-audio -Dauto_features=disabled -Dgstreamer:tools=enabled
$ ninja -C builddirNote: On macOS, an additional -Dcpp_std=c++17 flag is needed to build the project
$ cd gst-build
$ meson builddir -Dcustom_subprojects=gst-home-audio -Dauto_features=disabled -Dgstreamer:tools=enabled -Dcpp_std=c++17
$ ninja -C builddirThese commands will build the gst-home-audio plugins, along with GStreamer
core, basic plugins, and tools such as gst-launch-1.0, gst-inspect-1.0 etc.
The built plugins can be found in
gst-build/builddir/subprojects/gst-home-audio/plugins
To enter development environment run
$ ninja -C builddir devenvFirst we have to tell GStreamer where to look for the newly build plugins:
Note: On Windows, install plugins with ninja -C builddir install rather than point them via environment variable.
$ export GST_PLUGIN_PATH=/path/to/your/clone/gst-home-audio/build/pluginsTest if GStreamer can properly retrieve information about the plugins
$ gst-inspect-1.0 dlbac3decSee Plugins Overview for pipeline examples.
The package provides sample integration Python code which can be used for
file-based testing of the included plugins. The integration code is available in
the integration directory and includes two frontends:
gst-ha-flexr and gst-ha-dap.
Note: To run the integration code, make sure that the plugins are installed
in the system, or that GST_PLUGIN_PATH is set correctly, as instructed in the
Running section
This integration binary wraps the following plugins:
$ filesrc ! ac3parse ! ac3dec ! dlbflexr ! wavenc ! filesinkIt takes encoded Dolby Digital/Dolby Digital Plus bitstreams, or WAV PCM files and outputs decoded and rendered WAV files.
Navigate to the integration directory.
$ cd integration/To print the full usage, type
$ ./gst-ha-flexr -hThe dlbflexr plugin wrapped with this integration code requires two
configuration files: a stream configuration file, and a device configuration
file.
Note: The configuration files are generated by a propietary tool.
To decode a bitstream, type:
$ ./gst-ha-flexr -i input.ec3 -s stream.conf -d device.dconf -o output.wavPlayback is supported on Windows, Linux and macOS. Note that 48kHz output is required, and macOS supports playback up to eight channels only.
Note: This feature is mutually exclusive with decoding to file.
To decode and play a bitstream, type:
$ ./gst-ha-flexr -i input.ec3 -s stream.conf -d device.dconf -pFirst the command invokes the device selection menu to allow a user to choose a target device. Note: Device selection menu is not available on macOS, audio will be played to default device.
To decode and play a bitstream directly on a device, type:
$ ./gst-ha-flexr -i input.ec3 -s stream.conf -d device.dconf -p <device id>It will skip device selection menu and start playback immediately. Running gst-device-monitor-1.0 will show all connected devices with their ids.
On macOS, the feature is not supported.
Note: On Linux, ensure that your device id is correct so that a pipeline does not get stuck
The integration binary wraps the following plugins:
filesrc ! dlbaudiodecbin ! dlbdap ! wavenc ! filesinkIt takes encoded Dolby Digital/Dolby Digital Plus bitstreams and outputs decoded and rendered WAV files.
Navigate to the integration directory.
$ cd integration/To print the full usage, type
$ ./gst-ha-dap -hTo perform a basic decode to stereo, type
$ ./gst-ha-dap -i input.ec3 -o output.wavThe integration binary can be provided with two types of configuration files:
.json configuration for dlbdap plugin, or .xml configuration file
generated by Dolby Tuning Tool. Example of a .json configuration file can be
found in tests directory.
To use the JSON configuration, type
$ ./gst-ha-dap -i input.ec3 -c config.json -o output.wavTo use the XML configuration, provide the file name, endpoint name, and profile name.
$ ./gst-ha-dap -i input.ec3 -x file=config.xml:endpoint=internal-speaker:profile=off -o output.wavThe integration binary can be used to convert XML files generated by the Dolby
tuning tool to JSON format supported by dlbdap plugin.
$ ./gst-ha-dap -i input.xml -o output.jsonDolby Digital Plus Parser. This plug-in performs parsing of incoming Dolby Digital, Dolby Digital Plus signal.
Launch Line
$ gst-launch-1.0 filesrc location=<file.ec3> ! dlbac3parse ! dlbac3dec ! \
wavenc ! filesink location=out.wavDolby Digital Plus Decoder plug-in enables decoding Dolby Digital, Dolby Digital Plus bitstreams with and without Dolby Atmos content.
Launch Line
$ gst-launch-1.0 filesrc location=<file.ec3> ! dlbac3parse ! dlbac3dec ! \
wavenc ! filesink location=out.wavDolby Flexible Renderer plug-in enables flexible rendering. Accepts object-
and channel-based audio at input. device-config and stream-config properties
have to be set and their value must point to serialized config files.
Launch Line
Single stream:
$ gst-launch-1.0 \
audiotestsrc ! \
dlbflexr device-config=device.conf sink_0::stream-config=stream.conf sink_0::upmix=true ! \
autoaudiosinkMultiple streams:
$ gst-launch-1.0 -v \
audiotestsrc freq=100 ! \
dlbflexr name=flexr device-config=device.conf sink_0::stream-config=stream.conf sink_1::stream-config=stream.conf ! autoaudiosink \
audiotestsrc freq=500 ! flexr.AC3/EAC3 stream:
$ gst-launch-1.0 -v \
filesrc location=atmos.ec3 ! \
dlbac3parse ! \
dlbac3dec ! \
dlbflexr name=flexr device-config=device.conf sink_0::stream-config=stream.conf ! \
autoaudiosinkObject Audio Renderer plug-in performs rendering of Dolby Atmos content, which
is described by its associated object audio metadata. It should be used after
the decoder for rendering Dolby Atmos content. Most of the time
dlbaudiodecbin should be used instead as this will add dlboar only if
needed. caps after an element determine rendering configuration.
Launch Line
$ gst-launch-1.0 filesrc location=<file.ec3> ! dlbac3parse ! dlbac3dec ! dlboar ! \
capsfilter caps="audio/x-raw,channels=8,channel-mask=(bitmask)0xc003f" ! \
wavenc ! filesink location=out.wavDolby Audio Processing plug-in processes audio signals using cognitive and psychoacoustic models of audio perception to consistently enhance the listening experience for all audio content.
Launch Line
$ gst-launch-1.0 filesrc audiotestsrc ! dlbdap json-config=conf.json ! \
capsfilter caps="audio/x-raw,channels=8,channel-mask=(bitmask)0xc003f" ! \
wavenc ! filesink location=out.wavThe Dolby Audio Processing channel mask uses gstreamer channel layout, in the example above it is 5.1.2
Some other useful masks:
- 2.0 - 0x3
- 5.1 - 0x3f
- 7.1 - 0xc3f
- 2.1.1 - 0x8000b
- 5.1.2 - 0xc003f
- 5.1.4 - 0x3303f
- 7.1.2 - 0xc0c3f
- 7.1.4 - 0x33c3f
you can find full list of masks in the DAP unit tests
in dap_test_negotiation_tuple.
The plugin wraps the parser, decoder and object audio renderer into a single element.
Launch Line
$ gst-launch-1.0 filesrc location=<file.ec3> ! dlbaudiodecbin ! dlbdap ! \
capsfilter caps="audio/x-raw,channels=8,channel-mask=(bitmask)0xc003f" ! \
wavenc ! filesink location=out.wav