So this will be the first in a series of blogs talking about some major initiatives we are doing for Fedora Workstation. Today I want to present and talk about a thing we call Pinos.
So what is Pinos? One of the original goals of Pinos was to provide the same level of advanced hardware handling for Video that PulseAudio provides for Audio. For those of you who has been around for a while you might remember how you once upon a time could only have one application using the sound card at the same time until PulseAudio properly fixed that. Well Pinos will allow you to share your video camera between multiple applications and also provide an easy to use API to do so.
Video providers and consumers are implemented as separate processes communicating with DBUS and exchanging video frames using fd passing.
Some features of Pinos
- Easier switching of cameras in your applications
- Multiple types of video inputs
- GStreamer integration
- Pinos got some audio support
It will also allow you to more easily allow applications to switch between multiple cameras or mix the content from multiple sources.
Supports more than cameras. Pinos also supports other type of video sources, for instance it can support your desktop as a video source.
Pinos is built using GStreamer and also have GStreamer elements supporting it to make integrating it into GStreamer applications simple and straightforward.
Well it tries to solve some of the same issues for video that PulseAudio solves for audio. Namely letting you have multiple applications sharing the same camera hardware. Pinos does also include audio support in order to let you handle both.
What do we want to do with this in Fedora Workstation?
- One thing we know is of great use and importance for many of our users, including many developers who wants to make videos demonstrating their software, is to have better screen capture support. One of the test cases we are using for Pinos is to improve the built in screen casting capabilities of GNOME 3, the goal being to reducing overhead and to allow for easy setup of picture in picture capturing. So you can easily set it up so there will be a camera capturing your face and voice and mixing that into your screen recording.
- Video support for Desktop Sandboxes. We have been working for a while on providing technology for sandboxing your desktop applications and while we with a little work can use PulseAudio for giving the sandboxed applications audio access we needed something similar for video. Pinos provides us with such a solution.
Who is working on this?
Pinos is being designed and written by Wim Taymans who is the co-creator of the GStreamer multimedia framework and also a regular contributor to the PulseAudio project. Wim is also the working for Red Hat as a Principal Engineer, being in charge of a lot of our multimedia support in both Red Hat Enterprise Linux and Fedora. It is also worth nothing that it draws many of its ideas from an early prototype by William Manley called PulseVideo and builds upon some of the code that was merged into GStreamer due to that effort.
Where can I get the code?
The code is currently hosteed in Wim’s private repository on freedesktop. You can get it at cgit.freedesktop.org/~wtay/pinos.
How can I get involved or talk to the author
You can find Wim on Freenode IRC, he uses the name wtay and hangs out in both the #gstreamer and #pulseaudio IRC channels.
Once the project is a bit further along we will get some basic web presence set up and a mailing list created.
FAQ
If Pinos contains Audio support will it eventually replace PulseAudio too?
Probably not, the usecases and goals for the two systems are somewhat different and it is not clear that trying to make Pinos accommodate all the PulseAudio usescases would be worth the effort or possible withour feature loss. So while there is always a temptation to think ‘hey, wouldn’t it be nice to have one system that can handle everything’ we are at this point unconvinced that the gain outweighs the pain.
Will Pinos offer re-directing kernel APIs for video devices like PulseAudio does for Audio? In order to handle legacy applications?
No, that was possible due to the way ALSA worked, but V4L2 doesn’t have such capabilities and thus we can not take advantage of them.
Why the name Pinos?
The code name for the project was PulseVideo, but to avoid confusion with the PulseAudio project and avoid people making to many assumptions based on the name we decided to follow in the tradition of Wayland and Weston and take inspiration from local place names related to the creator. So since Wim lives in Pinos de Alhaurin close to Malaga in Spain we decided to call the project Pinos. Pinos is the word for pines in Spanish :)
What about libv4l(1/2) emulation?
Will Pinos allow me to use an animated gif, video on loop, or even a static image as a video source in Google Hangouts and similar programs? Does that fall under the category of ‘redirecting kernel apis’?
Code exists:
https://github.com/umlaeute/v4l2loopback
It would be excellent if Fedora could make a push to get this cleaned up and pushed upstream.
Will Pinos handle TV tuners (DVB)? Being able to watch, record and grab EPG (TV guides) on multiple applications would be good.
Yes, any kind of video input should be handled.
And extending pulse audio to lets say PulseMedia? I dont know much about these things, but it sounds awkward, that 2 things will be responsible for audio devices…
+1
Well as I tried to say in the FAQ section, there goals and designs of PulseAudio and Pinos are different enough that trying to shoehorn one into doing the job of both is more likely to lead to a system where neither usecase side is very happy with what they got. PA does a great job on the audio side and we will make sure Pinos does not operate in a way that breaks that.
For those of you who has been around for a while you might remember how you once upon a time could only have one application using the sound card at the same time until PulseAudio properly fixed that.
So is Pinos using PulseAudio for the audio? Or is there a conflict when both Pinos and PulseAudio try to access the audio hardware at the same time?
Would having the desktop be a source mean that something like XSplit or RecordMyDesktop would use less overhead?
Reducing overhead is one of our main goals here.
What is this projects relation to pulsevideo. Looking at the linked repo it seems that less than a day before this announcement was made that Pinos was renamed from PulseVideo? This would make it appear that it is a fork of PulseVideo which seems to have had it’s last update 4 months ago.
Well as I mention in the blog post:
It is also worth nothing that it draws many of its ideas from an early prototype by William Manley called PulseVideo and builds upon some of the code that was merged into GStreamer due to that effort.
So we did use the name PulseVideo ourselves during development, not due to Williams project, but due to that being the context we started thinking about it in, we only discovered Williams project a little later and was able to learn from it and build upon the fixes he had submitted to GStreamer. In the end I don’t think we ended up using any code from the PulseVideo beyond what merged into GStreamer (Wim would know for sure), although both projects are using the same license so it wouldn’t be a problem if we did. The reason we decided not to use the name PulseVideo in the end, and changed it shortly before announcing it, was mostly due to not wanting to cause unnecessary confusion for people about its relationship with PulseAudio (as there is no direct relationship) and also we didn’t want any PulseAudio developer to feel we where squatting on the name of their project. So in the end calling it PulseVideo would probably been fine, but we just felt it caused more confusion than clarity in the end and since we hadn’t asked the core PA devs if they where fine with the name we decided it was easier to just rename.
Thank you that help clear up things when I went digging around