Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[$500 BOUNTY] Implement a cross-platform GStreamer plug-in for libprojectM #668

Open
kblaschke opened this issue Nov 30, 2022 · 6 comments
Labels
3rd-party-integration bounty-reward Features and other tasks the projectM will reward a bounty to developers who implement it. need-help

Comments

@kblaschke
Copy link
Member

kblaschke commented Nov 30, 2022

From @revmischa on the projectM Discord Server, 10.11.2022 20:18:

If someone can create a GStreamer plug-in that will enable any sort of custom media pipeline application for projectM.
E.g. turn an audio file into a video, create a video from a live stream, overlay or mix visualization on existing video, easy automation, etc.

I'll put a bounty of $500 for whoever lands a working GStreamer plug-in.
Paid out of our OpenCollective.

https://gstreamer.freedesktop.org/documentation/plugin-development/index.html?gi-language=c

A few additions/clarifications by me (@kblaschke):

  • The plug-in should compile/work on all platforms supported by both GStreamer and libprojectM.
  • The plug-in should use the new C API that will be released in the libprojectM 4.0 version and link against the shared projectM library (dll/so/dylib). Ideally, wait until after the initial 4.0 release to start the implementation, as the API will still change before the release.
  • The plug-in should consume an audio/x-raw audio stream and pass it on to projectM.
  • The plug-in should produce an video/x-raw video stream as output.

The */x-raw types would probably be the most appropriate input/output formats as they don't require any de-/encoding overhead in the projectM plug-in and has no compression artifacts. While having the highest bit rate, users can put an audio decoder before and a video compressor plug-in after projectM in the GStreamer filter chain if needed.

@kblaschke kblaschke added need-help 3rd-party-integration bounty-reward Features and other tasks the projectM will reward a bounty to developers who implement it. labels Nov 30, 2022
@revmischa
Copy link
Collaborator

revmischa commented Dec 21, 2022

I would encourage also instead of C to use rust

GStreamer supports rust (docs) and there are many examples of rust plugins

And there are rust bindings for projectM which provide an easier and safer interface to projectM

@hartwork
Copy link
Contributor

Sounds similar to what the gstreamer libvisual integration at https://github.com/GStreamer/gst-plugins-base/tree/master/ext/libvisual is doing. Not sure if that's the latest source.

@hashFactory
Copy link

For anyone who's interested I have a preliminary working version (on linux at least) here!
https://github.com/hashFactory/gst-projectm/

@luzpaz
Copy link
Contributor

luzpaz commented Feb 7, 2024

@hashFactory awesome! Any known issues to look-out for ?

@Blaquewithaq
Copy link
Contributor

This bounty has now been awarded!

You can find the source code here for the official gst-projectm plugin:
https://github.com/projectM-visualizer/gst-projectm

@actionless
Copy link

i remember gstreamer plugin was mentioned in the context that it will allow to "convert" mp3 to a video:

#205
#207 (comment)

how this could be done now, when the gstreamer support is already implemented?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
3rd-party-integration bounty-reward Features and other tasks the projectM will reward a bounty to developers who implement it. need-help
Projects
None yet
Development

No branches or pull requests

7 participants