Phonon/Ideas
Welcome to the Phonon ideas page. If you come up with a neat idea that you think Phonon needs, post it up here. This page is meant to be the page that interested hackers go to, so the people know what ways they can help out.
Backends
GStreamer
- Support for more capture sources, such as ximagesrc
- Implemenation of Phonon changes for spitfire
- Cleanup MO (maybe introduce statemachine? - MO below 2k lines \o/)
- Split it up into some smaller classes
- PluginInstaller::requirePlugins(QStringList) - Returns false if the listed plugins do not exist. If the plugin install api is enabled, the plugins are installed.
- A state machine
- Maybe some kind of PipelineBuilder (Plumber?) class that does all the heavy lifting of building the pipelines for various sources instead of making the mediaobject be a swiss army knife of pipeline construction, message handling, source loading, and more.
- Split it up into some smaller classes
General Ideas
- API to allow applications to implement their own effects (independent from the backend)
- encoding to files (or any QIODevice)
- Hardware Mixer API
- kded module to handle tasks like:
- react on plugged new (never seen before) media device
- manage software volume controls
- implement policy like muting/lowering volume of selected applications/categories depending on special events (e.g. incoming call)
- Let applications request specific audio capture formats (32 bit, 8 bit, little endian, etc)
SDK
A nicely packaged SDK should be made available for folks to download which would install itself alongside the Qt SDK. That will keep everyone happy, as consumers wouldn't need to compile Phonon separately before using it on those platforms.
Testing
Our unit tests are in a sorry state, they should be cleaned up, and we should try to increase coverage. Also clean up the fake backend, maybe.
Phonon Mixing in KMix
GSoC Ideas
Copied here from GSoC/2011/Ideas
Project: QML/QGraphicsScene Video Painting (in progress)
Brief explanation: QML is the new declarative user interface description language for Qt. Unlike the traditional widget based design approach it works on an underlying graphics scene requiring painting within that scene. Phonon however depends on the presence of a widget to do video painting. An alternative painting architecture needs to be introduced to permit tight integration with QML and QGraphicsScene based applications such as Plasma. Ideally using different approaches (e.g. paintaing using OpenGL shaders and surface painting using QImage/QPainter).
Expected results: Phonon gains a VideoGraphicsItem for use in QGraphicsScenes (plus for actual QML package)
Knowledge Prerequisite: Qt/C++, plus for QML, OpenGL, GStreamer and libvlc.
Mentor: Ian Monroe Student: Harald Sitter
Project: Encoding
Brief explanation: Phonon currently has the capability to easily read any audio or video format known to the backend. This results is a very large number of supported formats. Many of the decoders in the backends also have a corresponding encoder. Phonon also recently acquired the ability to record from audio/video devices. It then makes sense that someone would want to use Phonon not only as a playback framework, but as a recording framework. A use case for this would be writing a simple application to use Phonon for recording a video from a webcam and microphone and immediately writing a .ogg file for later upload to a website such as Youtube. Alternatively, the encoded .ogg data can be sent to libshout and on to an icecast server for internet radio.
Expected results: Phonon gains a new kind of MediaNode that accepts media data as input and generates an encoded stream available as a QIODevice. Essentially, the inverse operation of an AbstractMediaStream.
Knowledge Prerequisite: Qt/C++, plus for GStreamer and libvlc.
Mentor: TBA
Project: Multi-Channel Audio KCM Module
Brief explanation: With the increasing availability of multi-channel sound cards (more than 2 channels) and the popularity of surround-sound movies, having a tool to properly configure and calibrate surround-sound speakers is essential. However, Linux in general lacks a good surround-sound configuration GUI. This project would be to implement such a GUI in KDE, at the very least supporting pulseaudio but optionally supporting ALSA or other audio frameworks as well. It would be part of the multimedia KCM module.
The tool would include two components. First would be a multi-channel calibration tool, with test sounds and individual volume controls for each channel in the same interface. Once the channels have been calibrated, the ranges for the kmix volume sliders for the channels would be automatically re-scaled to hide these changes in the normal kmix interface. KDE already has a KCM module for testing surround-sound speakers, but this tool doesn't allow you to configure the channels. It also lacks features found in other such tools, like being able to play sounds from all speakers in sequence.
The second component would be a point-and-click interface for connecting software sound channels to physical sound card channels, as well as connecting sound card channels to other sound car channels or software channels to other software channels. This would be particularly useful for people with custom speaker set-ups or that are using multiple 2-channel sounds cards to implement surround sound. It would also be useful, for instance, for routing microphone devices directly to speakers, routing stereo sound to multiple speakers in a surround-sound setup, combining channels from multi-channel sound for stereo speakers, or routing sound from production software directly to recording software. There is currently no GUI for this in Linux at all that I am aware of, so this would be a big help.
Expected results: An interface for calibrating surround-sound speakers, and a tool for connecting audio channels to other audio channels.
References: See "Speaker Setup Now or Forever Hold Your Peace" for the work already done in this area
Knowledge Prerequisite: Qt/C++, plus for pulseaudio
Mentor: Colin Guthrie
Project: Cross-backend Equalizer support with PulseAudio
Brief explanation: The git master version of PulseAudio (to be released as 1.0) contains an "Equalizer" sink that acts as a filter on top of a hardware device. By extending how the existing PulseSupport class works in Phonon it should be possible to provide access to such equalization to any backend. At present, when PulseAudio is in use, Phonon will already bypass the backend when dealing with volume changes, utilising PulseAudio's per-stream volume controls. It is expected that presenting the equalizer sink would be done in a similar way.
Expected results: When present, equalization will be presented to the user via Phonon.
References: pulseaudio-equalizer qpaeq
Knowledge Prerequisite: Qt/C++, Knowledge of PulseAudio would be a plus. Knowledge of Asynchronous programming principles would also be desirable but not essential.
Mentor: Colin Guthrie
Project: Testing Framework
Brief explanation: Phonon has a very distributed project structure. Playback capability is actually provided by so-called backends which act as plugins to the Phonon library. Every supported multimedia framework has its own backend. This causes an interesting situation with regards to automated testing and quality assurance. While there is a set of unit tests in the Phonon library itself, they are incomplete and only test a fraction of the available capabilities. A new more scalable testing framework/setup is needed to ensure all backends act according to the expected behavior outlined by the Phonon library.
Expected results: A testing framework to quality assure backends.
Knowledge Prerequisite: C++, plus for Qt
Mentor: TBA