Summer of Code 2009: Difference between revisions
(initial summer of code 2009 page) |
(added a libsydneyaudio project) |
||
(33 intermediate revisions by 7 users not shown) | |||
Line 5: | Line 5: | ||
'''Mentors''' please visit [[Summer of Code Mentoring]] and help us prepare our application as a mentoring organization. | '''Mentors''' please visit [[Summer of Code Mentoring]] and help us prepare our application as a mentoring organization. | ||
== | == General Ideas == | ||
=== Codecs === | |||
==Detailed Project | * OpenMAX IL components for Ogg codecs | ||
* Get skeleton patches upstream so players stop choking on it. | |||
* Portable listening application for codec MOS/MUSHRA comparisons (Win32, MacOS, Linux; FF3.1 web application?). | |||
=== Web Video === | |||
* Proof of concept liboggplay-based media patch for Google's Chrome browser. | |||
* Metavid improvements | |||
* Kate to HTML & CSS overlay library in javascript. | |||
* Firefox extension to record locally and stream to icecast. | |||
* Firefox extension to support RTP for conferencing. | |||
** also consider applying [https://wiki.mozilla.org/Community:SummerOfCode09#Firefox under Mozilla SOC org]. | |||
* mod_duration apache module to generate X-Content-Duration headers for Ogg files. ''(We should get people to use '''oggz_chop''' instead ... oggz_chop provides this functionality and more, is already relatively lightweight.)'' Perhaps this project could be more focused on packaging oggz_chop for other web servers like lightpd and maybe a fastCGI version and or maybe push for an mod_ogg to be adopted upstream in apache to improve distribution. | |||
== Detailed Project Descriptions == | |||
These ideas were suggested by various members of the developer community as projects that would be beneficial and which we feel we can mentor. Students should feel free to select one of these, develop a variation, or propose their own ideas. Here, ideally. | |||
=== Proof of Concept liboggplay (html5 video) support in Chromium Browser === | |||
This project would focus on integrating support for liboggplay into chrome. This project would only need to be a proof of concept with the end result being some frames decoded in the browser. We have some direct contacts with people on the Chromium project in Google, but would expect the student mostly to work through the Xiph on Chromium online communities. | |||
[http://code.google.com/chromium/ Chromium Home Page] | |||
=== Metavid related projects === | |||
see [http://metavid.org/wiki/Summer_of_Code_2009 full page on metavid.org] | |||
* Improve transcript import / export system: | |||
** Wiki to SRT | |||
** SRT to Wiki | |||
** CMML to Wiki | |||
** Extend oggz_chop or other tool for exporting transcript encapsulated in the ogg file. | |||
=== Javascript Library for Subtitles, Captions and other time-aligned text === | |||
The main focus of the project is on enabling video accessibility for Ogg in Firefox. | |||
==== Problem / Intro ==== | |||
Captions, subtitles and other categories of time-aligned text are starting to become relevant to HTML5. In Ogg, we currently encapsulate such data in OggKate and can use SRT or Kate as input formats. Display of OggKate is currently supported in VLC and there are patches for various other media players. We now want to enable Web browsers to also deal with these time-aligned text tracks in those Web Browsers that support the HTML5 video tag. | |||
==== Solution / Task ==== | |||
There is a proof of concept patch for Firefox 3.1 (now called 3.5) and liboggplay through which Firefox is capable of decoding Ogg Kate tracks and either overlay them onto the video, or handing the raw text to the browser (eg, for text to speech). However, there is no display of OggKate in Firefox 3.5 using HTML5. This can be fixed through the creation of a javascript library that can deal with Kate output and convert it to HTML and CSS. Example libraries exists for displaying SRT for HTML5 video, but they will need to be extended to Kate in this project. | |||
This project includes the creation of example files for different types of time-aligned text. These are then encapsulated into Ogg through Kate encoding. Firefox 3.5 with the applied OggKate patch can decode these files and hand the textual data to the Web browser. It will be necessary to extend liboggplay to pass non textual Kate data (eg, styling, etc) to the browser, as currently the only two ways of dealing with a Kate track is to render it, or pass raw text, ignoring extra styling information. This could be part of the project, or done before the GSoC projects begins. The browser receives the text and styling information, and a javascript library implemented by the student will take care of the display. This will include an implementation of default display mechanisms for the different types of time-aligned text that we decide to deal with. | |||
==== Requirements ==== | |||
The project requires a student with experience in javascript development, HTML and CSS, but also with some understanding of C for liboggplay and libkate, and of C++ for Firefox. The student will learn how to deal with Ogg and Ogg tracks, including Ogg Kate. He/she will also get some insight into Firefox development. He/she will work with the developer of Ogg Kate and the video accessibility expert of Xiph, as well as having access to the whole Xiph community including the core developer of Ogg support in Firefox. | |||
The project is adaptable to the qualifications of the student - it may consist in simply implementing a tool-chain for handling srt through OggKate, or it may go much further and include richer forms or time-aligned text such as audio annotations, Karaoke, ticker text, clickable text etc. | |||
==== Mentors ==== | |||
* Silvia Pfeiffer (nessy / ginger) | |||
* ogg.k.ogg.k | |||
=== libsydneyaudio === | |||
libsydneyaudio is a powerful, but easy to use cross-platform API for PCM audio capture and playback. It abstracts away all hardware-related complexity. It thus sits right on top of other audio device interfaces on the platforms, such as ALSA, pulseaudio, OSS on Linux, etc. libsydneyaudio is in use in conjunction with liboggplay in Firefox to provide cross-platform audio support. | |||
===== Problem/Intro ===== | |||
libsydneyaudio has several bugs registered toward itself, see https://trac.annodex.net/report/12 . Much of the challenge comes from an incomplete implementation of win32 support of audio, but other platforms have issues too. | |||
==== Solution / Task ==== | |||
The student will attack the bugs and make sure that libsydneyaudio works across all major platforms. There are programs available for testing. Once all bugs are fixed, there may be further new features to implement. | |||
==== Requirements ==== | |||
The student should bring along a keen interest in audio decoding. A basic understanding of win32 audio/video interfaces, experience in programming C or C++, and cross-platform development would be very helpful, but not necessary. | |||
=== OpenMAX IL components for Ogg codecs === | |||
OpenMAX is a set of low-level C APIs for media codecs. It is specified by the Khronos Group (who also co-ordinate standards like OpenGL and OpenAL) and is used by many mobile devices, in platforms like [http://www.maemo.org/ Maemo] and [http://source.android.com/ Android]. As we'd like to encourage the use of free codecs on mobile and embedded devices, we want to develop a set of components using our codec libraries. | |||
==== Project goals ==== | |||
This project would implement free codec support for the lowest of the three OpenMAX layers, OpenMAX IL (Integration Layer). This is an interface to multimedia codecs implemented in hardware or software. It does not provide any interfaces for synchronized capture or playback of video and audio -- typically this is handled by higher OpenMAX layers, or by a framework like GStreamer. | |||
Developing software OpenMAX IL components will allow application developers to implement Ogg support ahead of hardware support. It would also give hardware manufacturers a set of specific, well-defined goals for implementing Ogg support, with the understanding that the hardware components, when shipped with these software control APIs, will work in a variety of open source applications with minimal modifications. | |||
==== Implementation ==== | |||
Your project proposal should cover a reasonable portion of these steps: | |||
* Implement generic Ogg mux/demux components (instead of single Ogg Vorbis component) | |||
* Implement IL components for each codec (Theora, Dirac, Speex, CELT, FLAC) | |||
* Implement GStreamer OpenMAX plugins for each codec | |||
For details, including the motivation for this project and links to related projects, see | |||
[http://blog.kfish.org/2009/02/is-openmax-important-for-free-software.html Is OpenMAX important for Free Software?] | |||
==== Mentors ==== | |||
* Conrad Parker (kfish) | |||
=== XSPF-related projects === | |||
==== XSPF import and export for Songbird ==== | |||
===== Problem/Intro ===== | |||
* Songbird cannot read XSPF playlists | |||
* Songbird cannot write XSPF playlists | |||
===== Solution/Task ===== | |||
* Extend the development line of Songbird by XSPF read and write support. | |||
* Read support should be able to tolerate most above-XML-level errors so users don't get frustrated with XSPF. That's the short version :-) | |||
* Communication with upstream will be needed | |||
* Solution should use whatever solution upstream is likely to accept as a patch. If you get them to accept a libxspf-based solution it's C++, otherwise probably JavaScript. | |||
===== Mentors ===== | |||
* Sebastian Pipping (sping) | |||
==== Python library / Online validator refactoring ==== | |||
===== Problem/Intro ===== | |||
* The [http://validator.xspf.org/ Online XSPF Validator]'s [https://trac.xiph.org/browser/websites/validator.xspf.org code] (Python >=2.4) is a procedural spaghetti mix of logic and presentation. | |||
* There is no Python XSPF library around. | |||
===== Solution/Task ===== | |||
* Refactor the current validator code and separate it into a OOP XSPF reading library/API | |||
* Adapt the validator to use former library | |||
* Separate presentation and logic in validator code possibly involving a popular light-wight LGPLv3-compatible Python framework of your choice | |||
===== Mentors ===== | |||
* Sebastian Pipping (sping) | |||
=== CELT-related projects === | |||
==== Conference bridge using CELT ==== | |||
When a conference takes place, the voice from all participants is often decoded, mixed together, and re-encoded. The goal of this project is to do better. We would like to have only partial decoding and re-encoding of CELT and reuse as much as possible from the already-encoded streams. This not only decreases the CPU load but also improves quality. The project is specific to the [http://www.celt-codec.org CELT] codec, and during the course of the project, the student will learn the internals of the CELT codec. | |||
==== Reference SIP client for CELT ==== | |||
The RTP profile for CELT is currently being written and to ensure that SIP clients with CELT support are really compliant, we would need a reference client that is 100% compliant with the RTP profile. This would provide: | |||
* A reference to test for compatibility | |||
* Some reference C code to copy directly | |||
Latest revision as of 23:58, 25 March 2009
This is our ideas page for Google Summer of Code 2009 projects with Xiph.org and Annodex. The two projects participate jointly this year under Xiph's name.
Students please use the template at Summer of Code Applications when applying for a GSoC position.
Mentors please visit Summer of Code Mentoring and help us prepare our application as a mentoring organization.
General Ideas
Codecs
- OpenMAX IL components for Ogg codecs
- Get skeleton patches upstream so players stop choking on it.
- Portable listening application for codec MOS/MUSHRA comparisons (Win32, MacOS, Linux; FF3.1 web application?).
Web Video
- Proof of concept liboggplay-based media patch for Google's Chrome browser.
- Metavid improvements
- Kate to HTML & CSS overlay library in javascript.
- Firefox extension to record locally and stream to icecast.
- Firefox extension to support RTP for conferencing.
- also consider applying under Mozilla SOC org.
- mod_duration apache module to generate X-Content-Duration headers for Ogg files. (We should get people to use oggz_chop instead ... oggz_chop provides this functionality and more, is already relatively lightweight.) Perhaps this project could be more focused on packaging oggz_chop for other web servers like lightpd and maybe a fastCGI version and or maybe push for an mod_ogg to be adopted upstream in apache to improve distribution.
Detailed Project Descriptions
These ideas were suggested by various members of the developer community as projects that would be beneficial and which we feel we can mentor. Students should feel free to select one of these, develop a variation, or propose their own ideas. Here, ideally.
Proof of Concept liboggplay (html5 video) support in Chromium Browser
This project would focus on integrating support for liboggplay into chrome. This project would only need to be a proof of concept with the end result being some frames decoded in the browser. We have some direct contacts with people on the Chromium project in Google, but would expect the student mostly to work through the Xiph on Chromium online communities.
- Improve transcript import / export system:
- Wiki to SRT
- SRT to Wiki
- CMML to Wiki
- Extend oggz_chop or other tool for exporting transcript encapsulated in the ogg file.
Javascript Library for Subtitles, Captions and other time-aligned text
The main focus of the project is on enabling video accessibility for Ogg in Firefox.
Problem / Intro
Captions, subtitles and other categories of time-aligned text are starting to become relevant to HTML5. In Ogg, we currently encapsulate such data in OggKate and can use SRT or Kate as input formats. Display of OggKate is currently supported in VLC and there are patches for various other media players. We now want to enable Web browsers to also deal with these time-aligned text tracks in those Web Browsers that support the HTML5 video tag.
Solution / Task
There is a proof of concept patch for Firefox 3.1 (now called 3.5) and liboggplay through which Firefox is capable of decoding Ogg Kate tracks and either overlay them onto the video, or handing the raw text to the browser (eg, for text to speech). However, there is no display of OggKate in Firefox 3.5 using HTML5. This can be fixed through the creation of a javascript library that can deal with Kate output and convert it to HTML and CSS. Example libraries exists for displaying SRT for HTML5 video, but they will need to be extended to Kate in this project.
This project includes the creation of example files for different types of time-aligned text. These are then encapsulated into Ogg through Kate encoding. Firefox 3.5 with the applied OggKate patch can decode these files and hand the textual data to the Web browser. It will be necessary to extend liboggplay to pass non textual Kate data (eg, styling, etc) to the browser, as currently the only two ways of dealing with a Kate track is to render it, or pass raw text, ignoring extra styling information. This could be part of the project, or done before the GSoC projects begins. The browser receives the text and styling information, and a javascript library implemented by the student will take care of the display. This will include an implementation of default display mechanisms for the different types of time-aligned text that we decide to deal with.
Requirements
The project requires a student with experience in javascript development, HTML and CSS, but also with some understanding of C for liboggplay and libkate, and of C++ for Firefox. The student will learn how to deal with Ogg and Ogg tracks, including Ogg Kate. He/she will also get some insight into Firefox development. He/she will work with the developer of Ogg Kate and the video accessibility expert of Xiph, as well as having access to the whole Xiph community including the core developer of Ogg support in Firefox.
The project is adaptable to the qualifications of the student - it may consist in simply implementing a tool-chain for handling srt through OggKate, or it may go much further and include richer forms or time-aligned text such as audio annotations, Karaoke, ticker text, clickable text etc.
Mentors
- Silvia Pfeiffer (nessy / ginger)
- ogg.k.ogg.k
libsydneyaudio
libsydneyaudio is a powerful, but easy to use cross-platform API for PCM audio capture and playback. It abstracts away all hardware-related complexity. It thus sits right on top of other audio device interfaces on the platforms, such as ALSA, pulseaudio, OSS on Linux, etc. libsydneyaudio is in use in conjunction with liboggplay in Firefox to provide cross-platform audio support.
Problem/Intro
libsydneyaudio has several bugs registered toward itself, see https://trac.annodex.net/report/12 . Much of the challenge comes from an incomplete implementation of win32 support of audio, but other platforms have issues too.
Solution / Task
The student will attack the bugs and make sure that libsydneyaudio works across all major platforms. There are programs available for testing. Once all bugs are fixed, there may be further new features to implement.
Requirements
The student should bring along a keen interest in audio decoding. A basic understanding of win32 audio/video interfaces, experience in programming C or C++, and cross-platform development would be very helpful, but not necessary.
OpenMAX IL components for Ogg codecs
OpenMAX is a set of low-level C APIs for media codecs. It is specified by the Khronos Group (who also co-ordinate standards like OpenGL and OpenAL) and is used by many mobile devices, in platforms like Maemo and Android. As we'd like to encourage the use of free codecs on mobile and embedded devices, we want to develop a set of components using our codec libraries.
Project goals
This project would implement free codec support for the lowest of the three OpenMAX layers, OpenMAX IL (Integration Layer). This is an interface to multimedia codecs implemented in hardware or software. It does not provide any interfaces for synchronized capture or playback of video and audio -- typically this is handled by higher OpenMAX layers, or by a framework like GStreamer.
Developing software OpenMAX IL components will allow application developers to implement Ogg support ahead of hardware support. It would also give hardware manufacturers a set of specific, well-defined goals for implementing Ogg support, with the understanding that the hardware components, when shipped with these software control APIs, will work in a variety of open source applications with minimal modifications.
Implementation
Your project proposal should cover a reasonable portion of these steps:
- Implement generic Ogg mux/demux components (instead of single Ogg Vorbis component)
- Implement IL components for each codec (Theora, Dirac, Speex, CELT, FLAC)
- Implement GStreamer OpenMAX plugins for each codec
For details, including the motivation for this project and links to related projects, see Is OpenMAX important for Free Software?
Mentors
- Conrad Parker (kfish)
XSPF import and export for Songbird
Problem/Intro
- Songbird cannot read XSPF playlists
- Songbird cannot write XSPF playlists
Solution/Task
- Extend the development line of Songbird by XSPF read and write support.
- Read support should be able to tolerate most above-XML-level errors so users don't get frustrated with XSPF. That's the short version :-)
- Communication with upstream will be needed
- Solution should use whatever solution upstream is likely to accept as a patch. If you get them to accept a libxspf-based solution it's C++, otherwise probably JavaScript.
Mentors
- Sebastian Pipping (sping)
Python library / Online validator refactoring
Problem/Intro
- The Online XSPF Validator's code (Python >=2.4) is a procedural spaghetti mix of logic and presentation.
- There is no Python XSPF library around.
Solution/Task
- Refactor the current validator code and separate it into a OOP XSPF reading library/API
- Adapt the validator to use former library
- Separate presentation and logic in validator code possibly involving a popular light-wight LGPLv3-compatible Python framework of your choice
Mentors
- Sebastian Pipping (sping)
Conference bridge using CELT
When a conference takes place, the voice from all participants is often decoded, mixed together, and re-encoded. The goal of this project is to do better. We would like to have only partial decoding and re-encoding of CELT and reuse as much as possible from the already-encoded streams. This not only decreases the CPU load but also improves quality. The project is specific to the CELT codec, and during the course of the project, the student will learn the internals of the CELT codec.
Reference SIP client for CELT
The RTP profile for CELT is currently being written and to ensure that SIP clients with CELT support are really compliant, we would need a reference client that is 100% compliant with the RTP profile. This would provide:
- A reference to test for compatibility
- Some reference C code to copy directly