gstreamer/subprojects/gstreamer-sharp
Jakub Adam 38a3af96d0 gstreamer-sharp: Fix App{Src,Sink} constructors
Apparently GtkSharp expects each object has only one ToggleRef at any
time. Assigning element.Handle into Raw has a consequence that second
ToggleRef attempts to get created but fails on g_object_unref () that
breaks a GObject assertion:

  toggle_refs_notify: assertion failed: (tstack.n_toggle_refs == 1)

This is because toggle references should be removed with
g_object_remove_toggle_ref(), not a simple unref().

In order to avoid duplicate toggle references, introduce
ElementFactory.MakeRaw(), which creates a GstElement without its
accompanying C# object. The returned raw pointer can be assigned into
another GLib.Object without trouble.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1885>
2022-03-08 12:01:13 +00:00
..
ges Move files from gstreamer-sharp into the "subprojects/gstreamer-sharp/" subdir 2021-09-24 16:16:29 -03:00
girs Move files from gstreamer-sharp into the "subprojects/gstreamer-sharp/" subdir 2021-09-24 16:16:29 -03:00
samples Move files from gstreamer-sharp into the "subprojects/gstreamer-sharp/" subdir 2021-09-24 16:16:29 -03:00
sources gstreamer-sharp: Fix App{Src,Sink} constructors 2022-03-08 12:01:13 +00:00
subprojects Move files from gstreamer-sharp into the "subprojects/gstreamer-sharp/" subdir 2021-09-24 16:16:29 -03:00
Tests meson: Add explicit check: kwarg to all run_command() calls 2022-01-09 18:12:47 +05:30
.gitignore Move files from gstreamer-sharp into the "subprojects/gstreamer-sharp/" subdir 2021-09-24 16:16:29 -03:00
AUTHORS Move files from gstreamer-sharp into the "subprojects/gstreamer-sharp/" subdir 2021-09-24 16:16:29 -03:00
ChangeLog Move files from gstreamer-sharp into the "subprojects/gstreamer-sharp/" subdir 2021-09-24 16:16:29 -03:00
COPYING Move files from gstreamer-sharp into the "subprojects/gstreamer-sharp/" subdir 2021-09-24 16:16:29 -03:00
gacutil_install.py Move files from gstreamer-sharp into the "subprojects/gstreamer-sharp/" subdir 2021-09-24 16:16:29 -03:00
generate_code.py Move files from gstreamer-sharp into the "subprojects/gstreamer-sharp/" subdir 2021-09-24 16:16:29 -03:00
gstreamer-sharp-1.0.pc.in Move files from gstreamer-sharp into the "subprojects/gstreamer-sharp/" subdir 2021-09-24 16:16:29 -03:00
gstreamer-sharp.csproj Move files from gstreamer-sharp into the "subprojects/gstreamer-sharp/" subdir 2021-09-24 16:16:29 -03:00
gstreamer-sharp.sln Move files from gstreamer-sharp into the "subprojects/gstreamer-sharp/" subdir 2021-09-24 16:16:29 -03:00
gstreamer-sharp.snk Move files from gstreamer-sharp into the "subprojects/gstreamer-sharp/" subdir 2021-09-24 16:16:29 -03:00
meson.build Back to development 2022-02-04 22:59:41 +00:00
meson_options.txt Move files from gstreamer-sharp into the "subprojects/gstreamer-sharp/" subdir 2021-09-24 16:16:29 -03:00
nuget.py Move files from gstreamer-sharp into the "subprojects/gstreamer-sharp/" subdir 2021-09-24 16:16:29 -03:00
README.md Move files from gstreamer-sharp into the "subprojects/gstreamer-sharp/" subdir 2021-09-24 16:16:29 -03:00
update_sources.py Move files from gstreamer-sharp into the "subprojects/gstreamer-sharp/" subdir 2021-09-24 16:16:29 -03:00

gstreamer-sharp

gstreamer-sharp is a .NET/mono binding for Gstreamer generated from gobject-introspection data using the bindinator. gstreamer-sharp currently wraps the API exposed by Gstreamer 1.12 and is compatible with newer gstreamer versions. It was developed under GSoC 2014 for the mono organization. gstreamer-sharp covers the core and base gstreamer libraries.

Prerequisites

These libraries are needed for gstreamer-sharp to compile:

  • gstreamer core, base and good 1.14 or higher
  • gtk-sharp 3.22.0 or higher - NOTE: This can be built as a meson subproject.

You will also need various .NET/mono bits (mcs and al). On debian-based distros you can install these with:

sudo apt-get install mono-mcs mono-devel

Building

meson build && ninja -C build/

Installing

This package is not installed as part of the system. It should either be built into a Nuget or used as a subproject like this. For example, with meson, one would use it like this:

subproject('gstreamer-sharp', default_options: ['install=false'])
gst_sharp = subproject('gstreamer-sharp')
gst_sharp_dep = gst_sharp.get_variable('gst_sharp_dep')

HACKING

While hacking on the code generator or the .metadata files, you will need to force code regeneration with ninja update-code, a full rebuild is triggered right after.

Updating to new GStreamer version

Make sure you are in an environement where latest .gir files are available (either installed or through the $GI_TYPELIB_PATH env var), those files are automatically copied to girs/.

ninja -C build update-all

or if using gst-build, start gst-env and then run

ninja -C build gstreamer-sharp@@update-all
  • Verify newly copied gir files in girs/ and git add them
  • Verify newly generated code and git add files in sources/generated/ and ges/generated
  • Commit

Supported Platforms

  • Linux
  • Mac OS X

Quick Start

gstreamer-sharp provides ports of all samples from gst-docs in the samples folder.

Documentation

Since this is a gobject-introspection binding the recommended documentation is the native gstreamer documentation. A monodoc generated documentation will be installed.

Roadmap

  • Add an easy way to compile on Windows
  • iOS and Android support
  • Provide binaries for these platforms

License

gstreamer-sharp is licensed under the LGPL 2.1