Difference between revisions of "VLC Dev Projects"

From VideoLAN Wiki
Jump to navigation Jump to search
Line 1: Line 1:
This is a list of small independent improvements to {{VLC}} for which we are looking for interested developers, because we simply don't have enough time.
+
This is a list of small independent improvements to {{VLC}} for which we are looking for interested developers, because we simply don't have enough time.  
  
These do not require advanced knowledge of VLC internals but they can still vastly improve many parts of VLC
+
These do not require advanced knowledge of VLC internals but they can still vastly improve many parts of VLC  
  
For each project, we list a contact person, who knows the subject best and who will be able to assist you if you are interested in working on these. We generally are very often present on irc.videolan.org, chan #videolan, so please don't hesitate to drop by or to send a mail if you are interested in a given problem (our mail adresses are generally <nick>@videolan.org).
+
For each project, we list a contact person, who knows the subject best and who will be able to assist you if you are interested in working on these. We generally are very often present on irc.videolan.org, chan #videolan, so please don't hesitate to drop by or to send a mail if you are interested in a given problem (our mail adresses are generally &lt;nick&gt;@videolan.org).  
  
'''Be careful, some projects may be unrelated, or deprecated, because of fast evolving software! Ask before !'''
+
'''Be careful, some projects may be unrelated, or deprecated, because of fast evolving software! Ask before&nbsp;!'''  
  
= Easy projects =
+
= Easy projects =
  
These projects are junior projects, the most easy ones to do, that require minimum knowledge of VLC.
+
These projects are junior projects, the most easy ones to do, that require minimum knowledge of VLC.  
  
We also have a number of "easy" bugs. You can check them out [http://trac.videolan.org/vlc/query?status=new&status=assigned&status=reopened&difficulty=easy&order=priority` here]
+
We also have a number of "easy" bugs. You can check them out [http://trac.videolan.org/vlc/query?status=new&status=assigned&status=reopened&difficulty=easy&order=priority` here]  
  
== Code Janitorial ==
+
== Code Janitorial ==
It basically means to clean the code, it is helpful for all programmers. It helps to find bugs, and is a good way to learn about VLC's internals.
 
  
It is covered in the [[Code Janitorial]] section.
+
It basically means to clean the code, it is helpful for all programmers. It helps to find bugs, and is a good way to learn about VLC's internals.  
  
== Video Filters ==
+
It is covered in the [[Code Janitorial]] section.  
You can do video filters for {{VLC}}.
 
  
You can inspire yourself on this
+
== Video Filters  ==
[http://movavi.com/enhancemovie/filters.html list of filters] from a commercial product.
 
  
You can start the code [http://git.videolan.org/?p=vlc.git;a=tree;f=modules/video_filter here].
+
You can do video filters for {{VLC}}.  
  
== Lua Playlist parsers for websites ==
+
You can inspire yourself on this [http://movavi.com/enhancemovie/filters.html list of filters] from a commercial product.
  
VLC already supports youtube, dailymotion or other websites using the .lua scripts! Add new sites and new URLs support!
+
You can start the code [http://git.videolan.org/?p=vlc.git;a=tree;f=modules/video_filter here].  
  
== LastFM radios ==
+
== Audio Filters ==
  
http://gabistapler.de/blog/index.php?/archives/268-Play-last.fm-streams-without-the-player.html
+
You can do audio filters for . <br>
  
Talk to dionoea or funman
+
You can start the code here. <br>
  
 +
== Lua Playlist parsers for websites  ==
  
= Network =
+
VLC already supports youtube, dailymotion or other websites using the .lua scripts! Add new sites and new URLs support!
  
== Performant VLC streaming server ==
+
== LastFM radios  ==
  
There are many bottlenecks currently limiting the performance and scalability of VLC as a streaming server:
+
http://gabistapler.de/blog/index.php?/archives/268-Play-last.fm-streams-without-the-player.html
* The I/O blocks are linear, which implies lots of avoidable memory copying and dynamic memory allocations (particularly in the streaming output).
 
* mdate() (the timestamping function) is invoked in too many places to count them; but it is not a cheap operation on modern systems and should be avoided on the fast path. Ideally, a single thread would only need to call mdate() at most once per wake-up. In some case, mdate() is only used for debugging purpose which is really inefficient.
 
* The HTTP/RTSP core is single-threaded. This prevents scaling to SMP systems (which are the norm on server-side nowadays) properly. This also implies not very scalable I/O event polling. Finally, this gets problematic if one HTTP/RTSP client triggers a computationally intensive operation (such as establishing a TLS context if HTTP/SSL is used).
 
* There are many dynamic memory allocations that could be avoided. Video filters and codecs are very careful about this, but the stream output plugins are not. In many case, a stack-based buffer can be used (stack buffer, has constant time fast lock-less allocation, and needs not be freed explicitly) instead.
 
* The messaging subsystems might be adding more locking (needs checking); this should be avoided particularly if the message is anyway ignord (e.g. debug message in non-debug mode).
 
  
Other improvements that would be particularly benefitial on the server side:
+
Talk to dionoea or funman
  
* Memory allocation failure are not always duly handled. In some cases, that could potentially be leveraged by a client to crash a VLC server by causing a very large allocation attempt.
+
= Inputs  =
* Rewrite and revive the root wrapper to allow VLC to bind to the RTSP (554) port while not retaining root privileges.
 
  
Contact: [[User:Courmisch|Courmisch]]
+
== Windows Media Center (WMC) IR Remote Control  ==
  
= Inputs =
+
Basic Controls work (e.g. Volume, Mute etc), but I would like to get Play/Pause/Stop/DVD Menu etc to work!
  
== Windows Media Center (WMC) IR Remote Control ==
+
Contact: [[User:Some1|some1]]
  
Basic Controls work (e.g. Volume, Mute etc), but I would like to get Play/Pause/Stop/DVD Menu etc to work!
+
= Video  =
  
Contact: [[User:some1|some1]]
+
== DirectX 9 video output  ==
  
= Video =
+
DirectX 9 features some improvements that we could use in our video output
  
== DirectX 9 video output ==
+
Contact: [[User:Quovodis|Quovodis]]
  
DirectX 9 features some improvements that we could use in our video output
 
  
Contact: [[User:Quovodis|Quovodis]]
 
  
== Improvements to the X11 video output ==
+
== Pixel shaders in OpenGL video output ==
  
Fullscreen support to improve .
+
It would be nice to have a small proof of concept video output which takes care of chroma conversion using pixel shaders.  
  
== Pixel shaders in OpenGL video output ==
+
Contact: [[User:Dionoea|dionoea]]
  
It would be nice to have a small proof of concept video output which takes care of chroma conversion using pixel shaders.
+
= Interfaces  =
  
Contact: [[User:Dionoea|dionoea]]
+
== VLC.app rewrite using the Mac OS X Framework  ==
  
= Interfaces =
+
See [[Mac OS X Framework VLC app Rewrite]]
  
== VLC.app rewrite using the Mac OS X Framework ==
+
Contact: [[User:Pdherbemont|Pdherbemont]]
  
See [[Mac_OS_X_Framework_VLC_app_Rewrite]]
+
== mozila and activex javascript api  ==
  
Contact: [[User:Pdherbemont|Pdherbemont]]
+
Add a callback to signal playlist state changes such as item started, item ended, next item started, last item ended, and so on.
  
== mozila and activex javascript api ==
+
Contact: [[User:Jpsaman|jpsaman]]
  
Add a callback to signal playlist state changes such as item started, item ended, next item started, last item ended, and so on.
+
= Playlist  =
  
Contact: [[User:jpsaman|jpsaman]]
+
== Improved Podcast support  ==
  
 +
Our current podcast support is very weak. We can read them, but that's all. We need a real infrastructure to handle them correctly. This will require some changes to the playlist code, so you will need to work closely with existing developers.
  
= Playlist =
+
Contacts: [[User:Dionoea|Dionoea]] [[User:Zorglub|Zorglub]]
  
== Improved Podcast support ==
+
== Improved ASX support ==
  
Our current podcast support is very weak. We can read them, but that's all. We need a real infrastructure to handle them correctly. This will require some changes to the playlist code, so you will need to work closely with existing developers.
+
ASX is a playlist format used by Microsoft stuff. We can read it but we could do much better. More information is available at https://trac.videolan.org/vlc/ticket/20
  
Contacts: [[User:Dionoea|Dionoea]] [[User:Zorglub|Zorglub]]
+
Contact: [[User:Dnumgis|Dnumgis]]  
  
== Improved ASX support ==
 
  
ASX is a playlist format used by Microsoft stuff. We can read it but we could do much better. More information is available at
+
= Network  =
https://trac.videolan.org/vlc/ticket/20
 
  
Contact: [[User:Dnumgis|Dnumgis]]
+
== Performant VLC streaming server  ==
  
== Disc probing ==
+
There are many bottlenecks currently limiting the performance and scalability of VLC as a streaming server:
  
We currently have some miscellaneous code to detect discs (DVDs, Audio CDs, ...) but it's a bit scattered and it could be used much better in the playlist.
+
*The I/O blocks are linear, which implies lots of avoidable memory copying and dynamic memory allocations (particularly in the streaming output).
 +
*mdate() (the timestamping function) is invoked in too many places to count them; but it is not a cheap operation on modern systems and should be avoided on the fast path. Ideally, a single thread would only need to call mdate() at most once per wake-up. In some case, mdate() is only used for debugging purpose which is really inefficient.  
 +
*The HTTP/RTSP core is single-threaded. This prevents scaling to SMP systems (which are the norm on server-side nowadays) properly. This also implies not very scalable I/O event polling. Finally, this gets problematic if one HTTP/RTSP client triggers a computationally intensive operation (such as establishing a TLS context if HTTP/SSL is used).
 +
*There are many dynamic memory allocations that could be avoided. Video filters and codecs are very careful about this, but the stream output plugins are not. In many case, a stack-based buffer can be used (stack buffer, has constant time fast lock-less allocation, and needs not be freed explicitly) instead.
 +
*The messaging subsystems might be adding more locking (needs checking); this should be avoided particularly if the message is anyway ignord (e.g. debug message in non-debug mode).
  
Contact: [[User:Zorglub|Zorglub]]
+
Other improvements that would be particularly benefitial on the server side:  
  
== Live folders ==
+
*Memory allocation failure are not always duly handled. In some cases, that could potentially be leveraged by a client to crash a VLC server by causing a very large allocation attempt.
 +
*Rewrite and revive the root wrapper to allow VLC to bind to the RTSP (554) port while not retaining root privileges.
  
Some programs support so-called live folders. You add a folder to the playlist, and if the files in the folder are changed, the changes are copied to the playlist.
+
Contact: [[User:Courmisch|Courmisch]]
  
Having this would of course be great :)
+
== Hint MP4/MOV Files ==
  
It might require some work to be able to do this in Linux, Windows and OS X, but the current developers will of course be able to help on these.
+
Add video and audio hint tracks as the output file is muxed. Resulting files can be streamed from RTSP server with trickplay, like DSS/QTSS. Probably requires use of GPAC libraries.  
  
Contacts: [[User:Zorglub|Zorglub]] [[User:The DJ|The DJ]]
 
  
=== Hint MP4/MOV Files ===
+
= Finished projects  =
  
Add video and audio hint tracks as the output file is muxed. Resulting files can be streamed from RTSP server with trickplay, like DSS/QTSS. Probably requires use of GPAC libraries.
+
== Audioscrobbler ==
  
 +
An [http://www.audioscrobbler.net/ Audioscrobbler] VLC Plug-in for the social music network [http://www.last.fm Last.Fm]<br>
  
= Projects running =
+
Plugin is finished, now part of vlc 0.9.0 (development version). Done by [[User:Funman|funman]]
  
== Subtitles improvements ==
+
== DVB support for Windows / BDA Drivers  ==
{{VLC}} does not support all the styles for a lot of subtitles type.
 
Take a look at [http://trac.videolan.org/vlc/browser/trunk/modules/codec/subtitles/subsdec.c here] to start coding.
 
  
Contact bitmap
+
DVB is the norm for&nbsp;:
 +
 
 +
*Digital Terrestrial TV (aka DVB-T)
 +
*Digital Cable TV (aka DVB-C)
 +
*Digital Satellite TV (aka DVB-S)
 +
 
 +
Several DVB input cards exist. We support these on Linux, but not on Windows. For Windows, we need to support so-called BDA drivers.
 +
 
 +
The problem is that we don't have both the time and the required hardware on Windows comps.
 +
 
 +
This project is probably not terribly complex, but you need the hardware.
 +
 
 +
Plugin is done and availabe in the current Git version. Code by kenS
 +
 
 +
<br>
 +
 
 +
== DBus Integration  ==
  
= Finished projects =
+
[[DBus]] is a communication mechanism for Linux (mainly).
  
==Audioscrobbler==
+
We would like VLC to be able to use it so that other programs can interact with vlc (start/stop, know what is being played, ...)  
 
An [http://www.audioscrobbler.net/ Audioscrobbler] VLC Plug-in for the social music network [http://www.last.fm Last.Fm]<br />
 
 
Plugin is finished, now part of vlc 0.9.0 (development version). Done by [[User:funman|funman]]
 
  
== DVB support for Windows / BDA Drivers ==
+
Work is well advanced, see [[DBus]], by funman and Mr_Mirsal
 
DVB is the norm for :
 
* Digital Terrestrial TV (aka DVB-T)
 
* Digital Cable TV (aka DVB-C)
 
* Digital Satellite TV (aka DVB-S)
 
 
Several DVB input cards exist. We support these on Linux, but not on Windows. For Windows, we need to support so-called BDA drivers.
 
 
The problem is that we don't have both the time and the required hardware on Windows comps.
 
 
This project is probably not terribly complex, but you need the hardware.
 
  
Plugin is done and availabe in the current Git version. Code by kenS
+
Contact: [[User:Xtophe|Xtophe]], [[User:Funman|funman]]
  
 +
== V4L2 support  ==
  
== DBus Integration ==
+
VLC currently has a pvr module and a v4l (video for linux) module. However
  
[[DBus]] is a communication mechanism for Linux (mainly).
+
*some cards are only supported in the new v4l2 API
 +
*The linux kernel will soon drop v4l support
  
We would like VLC to be able to use it so that other programs can interact with vlc (start/stop, know what is being played, ...)
+
So if someone could update VLC's current modules to work with V4L2 and the new ivtv api, this would be a welcome addition. This is not a very difficult project, but you will need to have the hardware to test against. The code has been began, so it should not be too difficult.  
  
Work is well advanced, see [[DBus]], by funman and Mr_Mirsal
+
Plugin is done and available in the current Git version. Code by Richard Hosking, [[User:Dionoea|dionoea]] and Dennis Lou.
  
Contact: [[User:Xtophe|Xtophe]], [[User:funman|funman]]
+
<br>
  
== V4L2 support ==
+
== RTCP support ==
  
VLC currently has a pvr module and a v4l (video for linux) module.
+
Our RTSP implementation (for broadcasting and video on demand) does not support the RTCP protocol. This is a must to have a real support for RTSP. Some work has already been started, but there is still much to do.
However
 
* some cards are only supported in the new v4l2 API
 
* The linux kernel will soon drop v4l support
 
  
So if someone could update VLC's current modules to work with V4L2 and the new ivtv api, this would be a welcome addition.
+
Contact: [[User:JPSaman|JPSaman]]
This is not a very difficult project, but you will need to have the hardware to test against.
 
The code has been began, so it should not be too difficult.
 
  
Plugin is done and available in the current Git version. Code by Richard Hosking, [[User:dionoea|dionoea]] and Dennis Lou.
+
= Windows port  =
  
 +
Finish port libcddb and libcdio for Windows.
  
 +
Port libzvbi for Windows
  
== RTCP support ==
+
Contact [[User:J-b|jb]]
  
Our RTSP implementation (for broadcasting and video on demand) does not support the RTCP protocol. This is a must to have a real support for RTSP.
+
== Improvements to the X11 video output  ==
Some work has already been started, but there is still much to do.
 
  
Contact: [[User:JPSaman|JPSaman]]
+
Fullscreen support to improve .
  
 
[[Category:Coding]] [[Category:Activities]]
 
[[Category:Coding]] [[Category:Activities]]
  
= Windows port =
 
  
Finish port libcddb and libcdio for Windows.
+
== Subtitles improvements  ==
  
Port libzvbi for Windows
+
{{VLC}} does not support all the styles for a lot of subtitles type. Take a look at [http://trac.videolan.org/vlc/browser/trunk/modules/codec/subtitles/subsdec.c here] to start coding.
  
Contact [[User:J-b|jb]]
+
Contact bitmap

Revision as of 16:08, 6 November 2009

This is a list of small independent improvements to VLC media player for which we are looking for interested developers, because we simply don't have enough time.

These do not require advanced knowledge of VLC internals but they can still vastly improve many parts of VLC

For each project, we list a contact person, who knows the subject best and who will be able to assist you if you are interested in working on these. We generally are very often present on irc.videolan.org, chan #videolan, so please don't hesitate to drop by or to send a mail if you are interested in a given problem (our mail adresses are generally <nick>@videolan.org).

Be careful, some projects may be unrelated, or deprecated, because of fast evolving software! Ask before !

Easy projects

These projects are junior projects, the most easy ones to do, that require minimum knowledge of VLC.

We also have a number of "easy" bugs. You can check them out here

Code Janitorial

It basically means to clean the code, it is helpful for all programmers. It helps to find bugs, and is a good way to learn about VLC's internals.

It is covered in the Code Janitorial section.

Video Filters

You can do video filters for VLC media player.

You can inspire yourself on this list of filters from a commercial product.

You can start the code here.

Audio Filters

You can do audio filters for .

You can start the code here.

Lua Playlist parsers for websites

VLC already supports youtube, dailymotion or other websites using the .lua scripts! Add new sites and new URLs support!

LastFM radios

http://gabistapler.de/blog/index.php?/archives/268-Play-last.fm-streams-without-the-player.html

Talk to dionoea or funman

Inputs

Windows Media Center (WMC) IR Remote Control

Basic Controls work (e.g. Volume, Mute etc), but I would like to get Play/Pause/Stop/DVD Menu etc to work!

Contact: some1

Video

DirectX 9 video output

DirectX 9 features some improvements that we could use in our video output

Contact: Quovodis


Pixel shaders in OpenGL video output

It would be nice to have a small proof of concept video output which takes care of chroma conversion using pixel shaders.

Contact: dionoea

Interfaces

VLC.app rewrite using the Mac OS X Framework

See Mac OS X Framework VLC app Rewrite

Contact: Pdherbemont

mozila and activex javascript api

Add a callback to signal playlist state changes such as item started, item ended, next item started, last item ended, and so on.

Contact: jpsaman

Playlist

Improved Podcast support

Our current podcast support is very weak. We can read them, but that's all. We need a real infrastructure to handle them correctly. This will require some changes to the playlist code, so you will need to work closely with existing developers.

Contacts: Dionoea Zorglub

Improved ASX support

ASX is a playlist format used by Microsoft stuff. We can read it but we could do much better. More information is available at https://trac.videolan.org/vlc/ticket/20

Contact: Dnumgis


Network

Performant VLC streaming server

There are many bottlenecks currently limiting the performance and scalability of VLC as a streaming server:

  • The I/O blocks are linear, which implies lots of avoidable memory copying and dynamic memory allocations (particularly in the streaming output).
  • mdate() (the timestamping function) is invoked in too many places to count them; but it is not a cheap operation on modern systems and should be avoided on the fast path. Ideally, a single thread would only need to call mdate() at most once per wake-up. In some case, mdate() is only used for debugging purpose which is really inefficient.
  • The HTTP/RTSP core is single-threaded. This prevents scaling to SMP systems (which are the norm on server-side nowadays) properly. This also implies not very scalable I/O event polling. Finally, this gets problematic if one HTTP/RTSP client triggers a computationally intensive operation (such as establishing a TLS context if HTTP/SSL is used).
  • There are many dynamic memory allocations that could be avoided. Video filters and codecs are very careful about this, but the stream output plugins are not. In many case, a stack-based buffer can be used (stack buffer, has constant time fast lock-less allocation, and needs not be freed explicitly) instead.
  • The messaging subsystems might be adding more locking (needs checking); this should be avoided particularly if the message is anyway ignord (e.g. debug message in non-debug mode).

Other improvements that would be particularly benefitial on the server side:

  • Memory allocation failure are not always duly handled. In some cases, that could potentially be leveraged by a client to crash a VLC server by causing a very large allocation attempt.
  • Rewrite and revive the root wrapper to allow VLC to bind to the RTSP (554) port while not retaining root privileges.

Contact: Courmisch

Hint MP4/MOV Files

Add video and audio hint tracks as the output file is muxed. Resulting files can be streamed from RTSP server with trickplay, like DSS/QTSS. Probably requires use of GPAC libraries.


Finished projects

Audioscrobbler

An Audioscrobbler VLC Plug-in for the social music network Last.Fm

Plugin is finished, now part of vlc 0.9.0 (development version). Done by funman

DVB support for Windows / BDA Drivers

DVB is the norm for :

  • Digital Terrestrial TV (aka DVB-T)
  • Digital Cable TV (aka DVB-C)
  • Digital Satellite TV (aka DVB-S)

Several DVB input cards exist. We support these on Linux, but not on Windows. For Windows, we need to support so-called BDA drivers.

The problem is that we don't have both the time and the required hardware on Windows comps.

This project is probably not terribly complex, but you need the hardware.

Plugin is done and availabe in the current Git version. Code by kenS


DBus Integration

DBus is a communication mechanism for Linux (mainly).

We would like VLC to be able to use it so that other programs can interact with vlc (start/stop, know what is being played, ...)

Work is well advanced, see DBus, by funman and Mr_Mirsal

Contact: Xtophe, funman

V4L2 support

VLC currently has a pvr module and a v4l (video for linux) module. However

  • some cards are only supported in the new v4l2 API
  • The linux kernel will soon drop v4l support

So if someone could update VLC's current modules to work with V4L2 and the new ivtv api, this would be a welcome addition. This is not a very difficult project, but you will need to have the hardware to test against. The code has been began, so it should not be too difficult.

Plugin is done and available in the current Git version. Code by Richard Hosking, dionoea and Dennis Lou.


RTCP support

Our RTSP implementation (for broadcasting and video on demand) does not support the RTCP protocol. This is a must to have a real support for RTSP. Some work has already been started, but there is still much to do.

Contact: JPSaman

Windows port

Finish port libcddb and libcdio for Windows.

Port libzvbi for Windows

Contact jb

Improvements to the X11 video output

Fullscreen support to improve .


Subtitles improvements

VLC media player does not support all the styles for a lot of subtitles type. Take a look at here to start coding.

Contact bitmap