Archive:Google Summer of Code/2008: Difference between revisions

From Official Kodi Wiki
Jump to navigation Jump to search
m (Bot: Automated text replacement (- XBMC + {{name}} ))
m (Robot: Substituting template: Name)
Line 4: Line 4:
'''XBMC has been accepted into the Google Summer of Code 2008!'''
'''XBMC has been accepted into the Google Summer of Code 2008!'''


Google is sponsoring their fourth annual [http://code.google.com/soc/ Summer of Code (GSoC)] in the summer of 2008, this entail sponsoring students to work on assorted open source projects as well as sponsoring mentors in those same projects, everyone wins! {{name}} has been selected as one of the approved mentoring organizations for this year's GSoC. This page will be used for possible project ideas for the [http://code.google.com/soc/2008 Google Summer of Code 2008 season], and also track the status of each project and how well each student is doing.
Google is sponsoring their fourth annual [http://code.google.com/soc/ Summer of Code (GSoC)] in the summer of 2008, this entail sponsoring students to work on assorted open source projects as well as sponsoring mentors in those same projects, everyone wins! XBMC has been selected as one of the approved mentoring organizations for this year's GSoC. This page will be used for possible project ideas for the [http://code.google.com/soc/2008 Google Summer of Code 2008 season], and also track the status of each project and how well each student is doing.


The primary administrator for this year's {{name}} GSoC is [[User:Pike|Staffan Lindberg (a.k.a. Pike)]]<br />
The primary administrator for this year's XBMC GSoC is [[User:Pike|Staffan Lindberg (a.k.a. Pike)]]<br />
The backup administrator for this year's {{name}} GSoC is [[User:malloc|Sean Soria (a.k.a. malloc)]]<br />
The backup administrator for this year's XBMC GSoC is [[User:malloc|Sean Soria (a.k.a. malloc)]]<br />
...sorry, [[User:Gamester17|Andreas Setterlind (a.k.a. Gamester17)]] has got a new job in real-life so he can not continue as GSoC administrator this summer.
...sorry, [[User:Gamester17|Andreas Setterlind (a.k.a. Gamester17)]] has got a new job in real-life so he can not continue as GSoC administrator this summer.


:NOTE! '''If you are a student''' who wishes to be '''involved with an {{name}} GSoC project''', one of the first and best steps you can take is to register an account on [http://forum.xbmc.org {{name}} community forum], (sooner rather than later), and indicate your interest. Also, make sure that you '''complete''' a qualification task as soon as possible to be eligible for a {{name}} SoC project, (no qualification task = no project, that is Team-XBMC policy, not Google).
:NOTE! '''If you are a student''' who wishes to be '''involved with an XBMC GSoC project''', one of the first and best steps you can take is to register an account on [http://forum.xbmc.org XBMC community forum], (sooner rather than later), and indicate your interest. Also, make sure that you '''complete''' a qualification task as soon as possible to be eligible for a XBMC SoC project, (no qualification task = no project, that is Team-XBMC policy, not Google).


== Introduction to {{name}} ==
== Introduction to XBMC ==
XBMC (formerly "XBox Media Center") is a free and open source cross-platform media center, designed to be the hub of your entertainment system. {{name}} was originally established in 2002, at that time being developed as media player software for the first-generation Xbox game-console. {{name}} has since been ported to run natively under Linux, Mac OS X, and Microsoft Windows operating-systems. {{name}} has so far been translated to over 30 languages, won three SourceForge Community Choice Awards (Best Multimedia Project and Best Game Project in 2006, and best project for Gamers in 2008) and been a nominated finalist for a number of other awards. Today {{name}} have a very broad international community of active developers, graphic artists, and devoted users.
XBMC (formerly "XBox Media Center") is a free and open source cross-platform media center, designed to be the hub of your entertainment system. XBMC was originally established in 2002, at that time being developed as media player software for the first-generation Xbox game-console. XBMC has since been ported to run natively under Linux, Mac OS X, and Microsoft Windows operating-systems. XBMC has so far been translated to over 30 languages, won three SourceForge Community Choice Awards (Best Multimedia Project and Best Game Project in 2006, and best project for Gamers in 2008) and been a nominated finalist for a number of other awards. Today XBMC have a very broad international community of active developers, graphic artists, and devoted users.


* '''[[HOW-TO compile {{name}} for Linux from source code|XBMC for Linux]]''' (see the [[XBMC for Linux port project]] for more information)
* '''[[HOW-TO compile XBMC for Linux from source code|XBMC for Linux]]''' (see the [[XBMC for Linux port project]] for more information)
* '''[[HOW-TO compile {{name}} for Mac OS X from source code|XBMC for Mac OS X]]''' (see the [[XBMC for Mac OS X port project]] for more information)
* '''[[HOW-TO compile XBMC for Mac OS X from source code|XBMC for Mac OS X]]''' (see the [[XBMC for Mac OS X port project]] for more information)
* '''[[HOW-TO compile {{name}} for Windows from source code|XBMC for Windows]]''' (see the [[XBMC for Windows port project]] for more information)
* '''[[HOW-TO compile XBMC for Windows from source code|XBMC for Windows]]''' (see the [[XBMC for Windows port project]] for more information)
* '''[[HOW-TO compile {{name}} for Xbox from source code|XBMC for Xbox]]'''
* '''[[HOW-TO compile XBMC for Xbox from source code|XBMC for Xbox]]'''


=== Developing {{name}} ===
=== Developing XBMC ===
The {{name}} code structure uses a fairly modular design (with libraries and DLLs) who's structure is large, though relatively easy to grasp. XBMC's source code is predominantly C++, though there is a small splattering of C libraries and assembler for good measure. {{name}} for uses the Microsoft DirectX multimedia framework (Direct3D) on the Xbox, and the [http://en.wikipedia.org/wiki/Simple_DirectMedia_Layer SDL (Simple DirectMedia Layer) framework with OpenGL rendering] for other operating-system platforms versions of XBMC, (ie. [[XBMC for Linux port project|Linux]], [[XBMC for Mac OS X port project|Mac OS X]], and [[XBMC for Windows port project|Microsoft Windows]]).
The XBMC code structure uses a fairly modular design (with libraries and DLLs) who's structure is large, though relatively easy to grasp. XBMC's source code is predominantly C++, though there is a small splattering of C libraries and assembler for good measure. XBMC for uses the Microsoft DirectX multimedia framework (Direct3D) on the Xbox, and the [http://en.wikipedia.org/wiki/Simple_DirectMedia_Layer SDL (Simple DirectMedia Layer) framework with OpenGL rendering] for other operating-system platforms versions of XBMC, (ie. [[XBMC for Linux port project|Linux]], [[XBMC for Mac OS X port project|Mac OS X]], and [[XBMC for Windows port project|Microsoft Windows]]).


The main {{name}} program is developed using [http://en.wikipedia.org/wiki/Microsoft_Visual_Studio Microsoft Visual Studio] for the Xbox and win32 builds, and there are [http://en.wikipedia.org/wiki/KDevelop KDevelop] project files for Linux, and [http://en.wikipedia.org/wiki/Xcode Xcode] (and [http://en.wikipedia.org/wiki/Eclipse_%28software%29 Eclipse]) project files for Mac OS X. For the Xbox version a copy of the latest Microsoft [[XDK|Xbox SDK (a.k.a. XDK)]] and [http://www.microsoft.com/downloads/details.aspx?FamilyID=fd044a42-9912-42a3-9a9e-d857199f888e DirectX 9.0 SDK Update (Summer 2004)] is also required, though obviously this is not required for any other of the platforms that {{name}} can be compiled for.
The main XBMC program is developed using [http://en.wikipedia.org/wiki/Microsoft_Visual_Studio Microsoft Visual Studio] for the Xbox and win32 builds, and there are [http://en.wikipedia.org/wiki/KDevelop KDevelop] project files for Linux, and [http://en.wikipedia.org/wiki/Xcode Xcode] (and [http://en.wikipedia.org/wiki/Eclipse_%28software%29 Eclipse]) project files for Mac OS X. For the Xbox version a copy of the latest Microsoft [[XDK|Xbox SDK (a.k.a. XDK)]] and [http://www.microsoft.com/downloads/details.aspx?FamilyID=fd044a42-9912-42a3-9a9e-d857199f888e DirectX 9.0 SDK Update (Summer 2004)] is also required, though obviously this is not required for any other of the platforms that XBMC can be compiled for.


XBMC's code also contains three player cores: One core based on [[MPlayer]] that is only available to the Xbox version of XBMC, another [[DVDPlayer|in-house developed (FFmpeg-based) dedicated video-player core]] (which also supports DVD-Video movies with menus), and an [[PAPlayer|in-house developed dedicated music-player core]].
XBMC's code also contains three player cores: One core based on [[MPlayer]] that is only available to the Xbox version of XBMC, another [[DVDPlayer|in-house developed (FFmpeg-based) dedicated video-player core]] (which also supports DVD-Video movies with menus), and an [[PAPlayer|in-house developed dedicated music-player core]].


:'''NOTE!''' For more detailed information on where to get started with {{name}} development please see [[Appendix D: Development Notes|Appendix D (Development_Notes)]] in this wiki.
:'''NOTE!''' For more detailed information on where to get started with XBMC development please see [[Appendix D: Development Notes|Appendix D (Development_Notes)]] in this wiki.


:'''TIP!''' [http://www.microsoft.com/Presspass/press/2008/feb08/02-18GSDPR.mspx Microsoft DreamSpark student program is currently (and over this summer) giving free access to their development software].
:'''TIP!''' [http://www.microsoft.com/Presspass/press/2008/feb08/02-18GSDPR.mspx Microsoft DreamSpark student program is currently (and over this summer) giving free access to their development software].
Line 48: Line 48:
* Sell your idea - Describe your idea in detail. What is the ultimate goal? What components will it have? What are the benefits for the user? How do you plan to ensure that the project gets completed on time? If a more detailed explanation of the idea already exists, what will you do that will go above and beyond all expectations?  
* Sell your idea - Describe your idea in detail. What is the ultimate goal? What components will it have? What are the benefits for the user? How do you plan to ensure that the project gets completed on time? If a more detailed explanation of the idea already exists, what will you do that will go above and beyond all expectations?  


* Sell yourself - Make sure you get across how enthusiastic you are about the project. The more enthusiastic you are, the more assured we will be that you will finish your project. It also indicates that there is a good chance you will stick around even after the Summer of Code has finished. Why are you interested in Open Source and {{name}} in particular? What interests do you have, and how do these relate to the project for which you are applying?  
* Sell yourself - Make sure you get across how enthusiastic you are about the project. The more enthusiastic you are, the more assured we will be that you will finish your project. It also indicates that there is a good chance you will stick around even after the Summer of Code has finished. Why are you interested in Open Source and XBMC in particular? What interests do you have, and how do these relate to the project for which you are applying?  


* Be enthusiastic - Summer of Code is a very exciting opportunity, and {{name}} is a very exciting project to work on. We aren't just looking for someone who wants a summer job to pass their time and earn some money. We want people who have a passion towards open source and are likely to become constant contributors to {{name}} and open source also once the summer has passed. The goal of the whole initiative is to have students find their way to open source together with mentoring and a good motivation.  
* Be enthusiastic - Summer of Code is a very exciting opportunity, and XBMC is a very exciting project to work on. We aren't just looking for someone who wants a summer job to pass their time and earn some money. We want people who have a passion towards open source and are likely to become constant contributors to XBMC and open source also once the summer has passed. The goal of the whole initiative is to have students find their way to open source together with mentoring and a good motivation.  


:'''TIP!''' The [http://www.drupal.org/ Drupal] project has also prepared a couple of good guidelines that might be useful, see:  
:'''TIP!''' The [http://www.drupal.org/ Drupal] project has also prepared a couple of good guidelines that might be useful, see:  
Line 61: Line 61:
  Project Title:
  Project Title:
  Project Goals:
  Project Goals:
  Project Benefits:  How does your project benefit {{name}} and its community?
  Project Benefits:  How does your project benefit XBMC and its community?
  Project Tasks and Deliverables: Break your project into tasks or pieces.
  Project Tasks and Deliverables: Break your project into tasks or pieces.
     Describe in detail what you plan to accomplish and what the results will be.
     Describe in detail what you plan to accomplish and what the results will be.
Line 69: Line 69:


  Personal Statement:  Tell us about yourself.  Describe why you are better than any
  Personal Statement:  Tell us about yourself.  Describe why you are better than any
     other applicant for this project. Your previous experiences with {{name}} (if any).
     other applicant for this project. Your previous experiences with XBMC (if any).


=== Google SoC Development Process ===
=== Google SoC Development Process ===
Each accepted project will be developed in its own sandbox (SVN branch), separate from the main {{name}} codebase. Naturally, the end goal of each of the accepted {{name}} projects ought to be to have that code in shape for acceptance into the production codebase. This page will track the status of each project and how well each student are doing.
Each accepted project will be developed in its own sandbox (SVN branch), separate from the main XBMC codebase. Naturally, the end goal of each of the accepted XBMC projects ought to be to have that code in shape for acceptance into the production codebase. This page will track the status of each project and how well each student are doing.


== Current Status ==
== Current Status ==
Line 79: Line 79:
* March 24, 2008: Students may begin to submit applications through Google
* March 24, 2008: Students may begin to submit applications through Google
* March 17, 2008: Google is scheduled to announce selected projects; ''XBMC is selected''
* March 17, 2008: Google is scheduled to announce selected projects; ''XBMC is selected''
* March 11, 2008: Submitted {{name}} project application
* March 11, 2008: Submitted XBMC project application
* February 29, 2008: Created this wiki article
* February 29, 2008: Created this wiki article


=== Schedule ===
=== Schedule ===
Official timeline: http://code.google.com/soc/2008/faqs.html#0.1_timeline
Official timeline: http://code.google.com/soc/2008/faqs.html#0.1_timeline
* April 17, 2008: All students must have completed their [[Google Summer of Code 2008#Qualification tasks|Qualification Task]] for XBMC. Students should aim to have the code from your qualification task committed to {{name}} SVN or FFmpeg SVN well before then of course, so try to submit your initial patch in advance so that it can go though the proper review process.
* April 17, 2008: All students must have completed their [[Google Summer of Code 2008#Qualification tasks|Qualification Task]] for XBMC. Students should aim to have the code from your qualification task committed to XBMC SVN or FFmpeg SVN well before then of course, so try to submit your initial patch in advance so that it can go though the proper review process.
* April 7, 2008: Student application deadline, students must have submitted their proposals through Google.
* April 7, 2008: Student application deadline, students must have submitted their proposals through Google.
* March 24-31, 2008: Students may submit applications for various Google Summer of Code projects.
* March 24-31, 2008: Students may submit applications for various Google Summer of Code projects.
Line 118: Line 118:
** Proposed backup mentor: [[User:Elupus|Elupus]]
** Proposed backup mentor: [[User:Elupus|Elupus]]


* [[GSoC - Unified Subtitle Parser for {{name}} DVDPlayer|Unified Subtitle Parser and Subtitle Display Filter Library for XBMC's in-house DVDPlayer video-player core (2/2)]]
* [[GSoC - Unified Subtitle Parser for XBMC DVDPlayer|Unified Subtitle Parser and Subtitle Display Filter Library for XBMC's in-house DVDPlayer video-player core (2/2)]]
** Proposed by student: '''[[User:betti|betti]]'''
** Proposed by student: '''[[User:betti|betti]]'''
** Proposed primary mentor: [[User:spiff|spiff]]
** Proposed primary mentor: [[User:spiff|spiff]]
Line 143: Line 143:
** Proposed backup mentor:  
** Proposed backup mentor:  


* [[GSoC - Native DVB television in {{name}} for Linux|Native DVB television in {{name}} for Linux]]
* [[GSoC - Native DVB television in XBMC for Linux|Native DVB television in XBMC for Linux]]
** Proposed by student: '''Jing GAO'''
** Proposed by student: '''Jing GAO'''
** Proposed primary mentor:  
** Proposed primary mentor:  
Line 162: Line 162:


=== Team-XBMC proposal ideas up for discussion ===
=== Team-XBMC proposal ideas up for discussion ===
Most of the proposals in this list are just some project ideas that we have been kicking around, (which, by no means, limits any prospective proposals). So you are more than welcome to come up with a new idea that you think falls into the scope of {{name}} and the Google Summer of Code spirit. Since {{name}} is cross-platform software most of these ideas are platform-independent, meaning that if you implement the feature/function on one operating-system platform then someone else will be able to port that feature/function to the other operating-system platforms that {{name}} runs on.
Most of the proposals in this list are just some project ideas that we have been kicking around, (which, by no means, limits any prospective proposals). So you are more than welcome to come up with a new idea that you think falls into the scope of XBMC and the Google Summer of Code spirit. Since XBMC is cross-platform software most of these ideas are platform-independent, meaning that if you implement the feature/function on one operating-system platform then someone else will be able to port that feature/function to the other operating-system platforms that XBMC runs on.


'''NOTE!''' THIS LIST IS NOT THE FINAL PROPOSALS THAT WILL BE SUBMITTED. THESE ARE ONLY CONCEPTS THAT IDEAS COULD BE BASED UPON, IN THE END YOU AS THE STUDENT WILL BE PRESENTING THE IDEA AS YOUR '''OWN''', SO IT IS NOT ONLY THE IDEA BUT HOW '''YOU''' PRESENT IT, SO BE CREATIVE!
'''NOTE!''' THIS LIST IS NOT THE FINAL PROPOSALS THAT WILL BE SUBMITTED. THESE ARE ONLY CONCEPTS THAT IDEAS COULD BE BASED UPON, IN THE END YOU AS THE STUDENT WILL BE PRESENTING THE IDEA AS YOUR '''OWN''', SO IT IS NOT ONLY THE IDEA BUT HOW '''YOU''' PRESENT IT, SO BE CREATIVE!


==== Porting {{name}} to new platforms ====
==== Porting XBMC to new platforms ====
* Your Idea Here!
* Your Idea Here!
** You're smart! Which hardware platform or operating-system you like to port {{name}} to and why?  
** You're smart! Which hardware platform or operating-system you like to port XBMC to and why?  


* Port {{name}} for Linux to [http://en.wikipedia.org/wiki/ARM_architecture ARM (RISC) computer processor architecture] with [http://en.wikipedia.org/wiki/DirectFB DirectFB/DirectFBGL] rendering.
* Port XBMC for Linux to [http://en.wikipedia.org/wiki/ARM_architecture ARM (RISC) computer processor architecture] with [http://en.wikipedia.org/wiki/DirectFB DirectFB/DirectFBGL] rendering.
** Port {{name}} for Linux to [http://forum.xbmc.org/showthread.php?t=34562 Neuros Technology's OSD 2.0 HD (Open Source Device 2.0 High Definition)]
** Port XBMC for Linux to [http://forum.xbmc.org/showthread.php?t=34562 Neuros Technology's OSD 2.0 HD (Open Source Device 2.0 High Definition)]
** Port {{name}} for Linux to [http://beagleboard.org/ BeagleBoard (Beagle Board)] with [http://forum.xbmc.org/showthread.php?t=35139 OpenGL ES complient DirectFBGL]
** Port XBMC for Linux to [http://beagleboard.org/ BeagleBoard (Beagle Board)] with [http://forum.xbmc.org/showthread.php?t=35139 OpenGL ES complient DirectFBGL]
** Port {{name}} for Linux to the [http://www.openpandora.org Pandora handheld game-console (OpenGL ES complient DirectFBGL)]
** Port XBMC for Linux to the [http://www.openpandora.org Pandora handheld game-console (OpenGL ES complient DirectFBGL)]


* Port {{name}} for Windows (SDL / OpenGL) to [http://www.reactos.org ReactOS], as it is missing a media center software.
* Port XBMC for Windows (SDL / OpenGL) to [http://www.reactos.org ReactOS], as it is missing a media center software.


* Fully port [[XBMC for Linux port project|XBMC for Linux]] to compile and run on PowerPC (PPC) architecture
* Fully port [[XBMC for Linux port project|XBMC for Linux]] to compile and run on PowerPC (PPC) architecture
Line 188: Line 188:


* [http://forum.xbmc.org/showthread.php?t=28918 PVR front-end GUI that is skinnable and a API can can support multiple HTPC/DVR/PVR-backend clients]
* [http://forum.xbmc.org/showthread.php?t=28918 PVR front-end GUI that is skinnable and a API can can support multiple HTPC/DVR/PVR-backend clients]
** Skinnable [http://forum.xbmc.org/showthread.php?t=12948 XMLTV GUI (TV-Guide)] frontend in {{name}} and a method of downloading new [http://xmltv.org listings.xml].
** Skinnable [http://forum.xbmc.org/showthread.php?t=12948 XMLTV GUI (TV-Guide)] frontend in XBMC and a method of downloading new [http://xmltv.org listings.xml].
** PVR software support (API to control channel-swapping and stream Live-TV of a third-party backend)
** PVR software support (API to control channel-swapping and stream Live-TV of a third-party backend)
*** [http://forum.xbmc.org/showthread.php?t=951 Linux VDR (Video Disk Recorder) client that can control a LinVDR server]
*** [http://forum.xbmc.org/showthread.php?t=951 Linux VDR (Video Disk Recorder) client that can control a LinVDR server]
Line 194: Line 194:
*** [http://forum.xbmc.org/showthread.php?t=6636&highlight=mce+extender Windows Media Center Extender client that can control Microsoft Windows MCE]
*** [http://forum.xbmc.org/showthread.php?t=6636&highlight=mce+extender Windows Media Center Extender client that can control Microsoft Windows MCE]


* Native DVB television in {{name}} for Linux via [http://www.linuxtv.org/ v4l/v4l2 library] and FFmpeg (added to [[DVDPlayer|XBMC's in-house video-player]])
* Native DVB television in XBMC for Linux via [http://www.linuxtv.org/ v4l/v4l2 library] and FFmpeg (added to [[DVDPlayer|XBMC's in-house video-player]])
** This would enable {{name}} for Linux to display Live-TV and record TV without third-party backend.
** This would enable XBMC for Linux to display Live-TV and record TV without third-party backend.
** [http://www.ffmpeg.org Latest FFmpeg SVN] already have [http://www.linuxtv.org/ v4l/v4l2] support, but no tuning or channel-swapping features
** [http://www.ffmpeg.org Latest FFmpeg SVN] already have [http://www.linuxtv.org/ v4l/v4l2] support, but no tuning or channel-swapping features


Line 212: Line 212:
** Create a Unified Subtitle Parser Library for external and embedded subtitles, plus a [http://wiki.multimedia.cx/index.php?title=Libavfilter FFmpeg libavfilter filter] for it.
** Create a Unified Subtitle Parser Library for external and embedded subtitles, plus a [http://wiki.multimedia.cx/index.php?title=Libavfilter FFmpeg libavfilter filter] for it.


* [http://forum.xbmc.org/showthread.php?t=6169 Audio Equalizer in {{name}} for music playback] with [[PAPlayer]], (and as a [http://wiki.multimedia.cx/index.php?title=Libavfilter FFmpeg libavfilter filter] for video).
* [http://forum.xbmc.org/showthread.php?t=6169 Audio Equalizer in XBMC for music playback] with [[PAPlayer]], (and as a [http://wiki.multimedia.cx/index.php?title=Libavfilter FFmpeg libavfilter filter] for video).


* Add full [http://forum.xbmc.org/showthread.php?t=32029 VCD/SVCD menu and navigation support to XBMC] (possibly via xine-vcdnav/vcdx from [http://www.xinehq.hu Xine]).
* Add full [http://forum.xbmc.org/showthread.php?t=32029 VCD/SVCD menu and navigation support to XBMC] (possibly via xine-vcdnav/vcdx from [http://www.xinehq.hu Xine]).
** [http://forum.xbmc.org/showthread.php?t=32029 Rocky Bernstein (the author of xine's vcdx plug-in)] has offered to mentor this if student is willing to make adding VCD/SVCD menu and navigation support to {{name}} into their own GSoC project.
** [http://forum.xbmc.org/showthread.php?t=32029 Rocky Bernstein (the author of xine's vcdx plug-in)] has offered to mentor this if student is willing to make adding VCD/SVCD menu and navigation support to XBMC into their own GSoC project.


* Add [http://forum.xbmc.org/showthread.php?t=181&highlight=karaoke native support for text-display from Karaoke CD+G Audio-CD]s (possibly via [http://www.gnu.org/software/libcdio/ libcdio])
* Add [http://forum.xbmc.org/showthread.php?t=181&highlight=karaoke native support for text-display from Karaoke CD+G Audio-CD]s (possibly via [http://www.gnu.org/software/libcdio/ libcdio])
** As this would otherwise be a small task (since {{name}} already supports displaying CDG graphics and already uses libcdio for other features such as ISO/IMG images reader and ISO 9660 reader, meaning you would really only have to [http://savannah.gnu.org/support/?104390 add CD+G subchannel support to libcdio]), so one would also expect this proposal to also include further additional karaoke functions and features under {{name}} for Linux, such as microphone support (with recording and enabling the use of those microphones under both audio and video playback), and maybe voice-mask filters, and possibly [http://forum.xbmc.org/showthread.php?t=19157 Lyrics3v2 display] on top of visualizations and screensavers, etc.
** As this would otherwise be a small task (since XBMC already supports displaying CDG graphics and already uses libcdio for other features such as ISO/IMG images reader and ISO 9660 reader, meaning you would really only have to [http://savannah.gnu.org/support/?104390 add CD+G subchannel support to libcdio]), so one would also expect this proposal to also include further additional karaoke functions and features under XBMC for Linux, such as microphone support (with recording and enabling the use of those microphones under both audio and video playback), and maybe voice-mask filters, and possibly [http://forum.xbmc.org/showthread.php?t=19157 Lyrics3v2 display] on top of visualizations and screensavers, etc.


* Rewrite the thumbnail caching system so that it can store multiple resolution thumbs.  
* Rewrite the thumbnail caching system so that it can store multiple resolution thumbs.  
Line 227: Line 227:


* [http://forum.xbmc.org/showthread.php?t=1399&highlight=bittorrent BitTorrent GUI-frontend and a BiTorrent client-backend, a with download manager running in the background].
* [http://forum.xbmc.org/showthread.php?t=1399&highlight=bittorrent BitTorrent GUI-frontend and a BiTorrent client-backend, a with download manager running in the background].
** This could allow {{name}} user to search track RSS feeds and download items by filter. Separating the GUI front-end from the BitTorrent client (back-end) makes it more portable and easier to replace BitTorrent client (back-end).
** This could allow XBMC user to search track RSS feeds and download items by filter. Separating the GUI front-end from the BitTorrent client (back-end) makes it more portable and easier to replace BitTorrent client (back-end).


* [http://forum.xbmc.org/showthread.php?t=25 Integrate a web-browser into {{name}} GUI] using either [http://en.wikipedia.org/wiki/WebKit WebKit] (or [http://en.wikipedia.org/wiki/KHTML KHTML]) as the back-end [http://en.wikipedia.org/wiki/Layout_engine HTML layout engine rendering backend] (as those are memory efficient and have few dependencies). Ideally it should be a GUI component that could be used throughout the {{name}} GUI to properly display HTML code and pages. Noted should be that [http://forum.xbmc.org/showthread.php?t=11640 a web-browser called LinksBoks which is based on Links2Browser HTML layout engine rendering backend but with a custom frontend GUI was integreted into {{name}} for Xbox once] however it was not kept maintained by its initial developer so it was never merged into the main SVN trunk (it is [https://xbmc.svn.sourceforge.net/svnroot/xbmc/branches/linksbrowser still branched in the SVN though]), so in theory it could be possible to update the [https://xbmc.svn.sourceforge.net/svnroot/xbmc/branches/linksbrowser linksbrowser SVN branch] but instead of Links2Browser integrate a new more memory efficient cross-portable [http://en.wikipedia.org/wiki/Layout_engine HTML layout engine rendering backend] with few dependencies and smaller footprint, such as [http://en.wikipedia.org/wiki/KHTML KHTML] or [http://en.wikipedia.org/wiki/WebKit WebKit].
* [http://forum.xbmc.org/showthread.php?t=25 Integrate a web-browser into XBMC GUI] using either [http://en.wikipedia.org/wiki/WebKit WebKit] (or [http://en.wikipedia.org/wiki/KHTML KHTML]) as the back-end [http://en.wikipedia.org/wiki/Layout_engine HTML layout engine rendering backend] (as those are memory efficient and have few dependencies). Ideally it should be a GUI component that could be used throughout the XBMC GUI to properly display HTML code and pages. Noted should be that [http://forum.xbmc.org/showthread.php?t=11640 a web-browser called LinksBoks which is based on Links2Browser HTML layout engine rendering backend but with a custom frontend GUI was integreted into XBMC for Xbox once] however it was not kept maintained by its initial developer so it was never merged into the main SVN trunk (it is [https://xbmc.svn.sourceforge.net/svnroot/xbmc/branches/linksbrowser still branched in the SVN though]), so in theory it could be possible to update the [https://xbmc.svn.sourceforge.net/svnroot/xbmc/branches/linksbrowser linksbrowser SVN branch] but instead of Links2Browser integrate a new more memory efficient cross-portable [http://en.wikipedia.org/wiki/Layout_engine HTML layout engine rendering backend] with few dependencies and smaller footprint, such as [http://en.wikipedia.org/wiki/KHTML KHTML] or [http://en.wikipedia.org/wiki/WebKit WebKit].


* Simple RSS reader that supports parsing text, video and pictures, (supporting multiple RSS feeds), and displaying this in the GUI. This should be simple enough, like the RSS readers on mobile devices, but suited for a TV display.
* Simple RSS reader that supports parsing text, video and pictures, (supporting multiple RSS feeds), and displaying this in the GUI. This should be simple enough, like the RSS readers on mobile devices, but suited for a TV display.


* Generic App Support - a very non-trivial much more generalized implementation would be an application / component that is able to capture the output and control an external application through a process pipe, shared memory, events, etc and have {{name}} render it inside its own window. Such an implementation would mean we could more easily swap out browsers and also integrate other applications into XBMC. Of course this is highly non-trivial and many parts of it would be platform dependent. In terms of performance, such a technique will probably(?) not function too well for applications that require high fps. [http://people.freedesktop.org/~davidr/GLX_EXT_texture_from_pixmap.txt This OpenGL extension to convert a pixmap to a texture (used by compiz)] might prove useful.
* Generic App Support - a very non-trivial much more generalized implementation would be an application / component that is able to capture the output and control an external application through a process pipe, shared memory, events, etc and have XBMC render it inside its own window. Such an implementation would mean we could more easily swap out browsers and also integrate other applications into XBMC. Of course this is highly non-trivial and many parts of it would be platform dependent. In terms of performance, such a technique will probably(?) not function too well for applications that require high fps. [http://people.freedesktop.org/~davidr/GLX_EXT_texture_from_pixmap.txt This OpenGL extension to convert a pixmap to a texture (used by compiz)] might prove useful.


* [http://forum.xbmc.org/showthread.php?t=6207 Synchronize music/video-stream playback on multiple-machines using PulseAudio (formerly PolypAudio)]
* [http://forum.xbmc.org/showthread.php?t=6207 Synchronize music/video-stream playback on multiple-machines using PulseAudio (formerly PolypAudio)]
** Enable syncronized music or video playback over LAN (Local Area Network) or the Internet.
** Enable syncronized music or video playback over LAN (Local Area Network) or the Internet.


* Port <u>all</u> of the existing [http://forum.xbmc.org/showthread.php?t=137 visualizations] and [http://forum.xbmc.org/showthread.php?t=7552 screensavers] available in {{name}} for Xbox from Direct3D/DirectX to OpenGL, (perhaps even doing so in a unified way that they are combined with the existing Direct3D/DirectX version so that they each supports both DirectX and OpenGL).
* Port <u>all</u> of the existing [http://forum.xbmc.org/showthread.php?t=137 visualizations] and [http://forum.xbmc.org/showthread.php?t=7552 screensavers] available in XBMC for Xbox from Direct3D/DirectX to OpenGL, (perhaps even doing so in a unified way that they are combined with the existing Direct3D/DirectX version so that they each supports both DirectX and OpenGL).


* [http://wiki.linuxmce.org/index.php/Home_Automation Home Automation Control: Control lighting, climate/heating, security, camera surveillance, and more].
* [http://wiki.linuxmce.org/index.php/Home_Automation Home Automation Control: Control lighting, climate/heating, security, camera surveillance, and more].
** Implemented into {{name}} via the same [http://plutohome.com/index.php?section=get_pluto Pluto Orbiter framework] core libraries/code that [http://wiki.linuxmce.org/index.php/History LinuxMCE] uses.
** Implemented into XBMC via the same [http://plutohome.com/index.php?section=get_pluto Pluto Orbiter framework] core libraries/code that [http://wiki.linuxmce.org/index.php/History LinuxMCE] uses.


* [http://en.wikipedia.org/wiki/BD-J BD-J (Blu-ray Disc Java)] library for Linux in order to have Blu-ray menu system support under [[DVDPlayer|XBMC video-player]], (to be able to fully playback unencrypted Blue-ray discs).
* [http://en.wikipedia.org/wiki/BD-J BD-J (Blu-ray Disc Java)] library for Linux in order to have Blu-ray menu system support under [[DVDPlayer|XBMC video-player]], (to be able to fully playback unencrypted Blue-ray discs).
Line 247: Line 247:
* [http://en.wikipedia.org/wiki/Universal_Disk_Format UDF (Universal Disk Format) 2.50 and 2.60] support in [http://www.gnu.org/software/libcdio/ libcdio] (in order to read UDF formatted [http://en.wikipedia.org/wiki/Blu-ray_Disc Blu-ray discs])
* [http://en.wikipedia.org/wiki/Universal_Disk_Format UDF (Universal Disk Format) 2.50 and 2.60] support in [http://www.gnu.org/software/libcdio/ libcdio] (in order to read UDF formatted [http://en.wikipedia.org/wiki/Blu-ray_Disc Blu-ray discs])


* Implement [http://www.fireflymediaserver.org/ Firefly Media Server (previously known as "mt-daapd")] built-in DAAP-server into {{name}} for the purpose of make it possible for {{name}} to use iTunes library (XBMC already have a DAAP-client).
* Implement [http://www.fireflymediaserver.org/ Firefly Media Server (previously known as "mt-daapd")] built-in DAAP-server into XBMC for the purpose of make it possible for XBMC to use iTunes library (XBMC already have a DAAP-client).


== Qualification tasks ==
== Qualification tasks ==
Please add a note here if you choose to work on a qualification task to avoid duplicate work.
Please add a note here if you choose to work on a qualification task to avoid duplicate work.


Many students will probably apply for the Google Summer of Code and wish to work on a sexy multimedia project such as XBMC. All students will probably also claim to be hard workers, but we need a real method of determining which students have a higher probability for success. Thus, we will use this qualification system (adopted from FFmpeg SoC 2007 season). A student must successfully first complete a qualification task in order to be considered for an {{name}} SoC project. In doing so, a student demonstrates that they:  
Many students will probably apply for the Google Summer of Code and wish to work on a sexy multimedia project such as XBMC. All students will probably also claim to be hard workers, but we need a real method of determining which students have a higher probability for success. Thus, we will use this qualification system (adopted from FFmpeg SoC 2007 season). A student must successfully first complete a qualification task in order to be considered for an XBMC SoC project. In doing so, a student demonstrates that they:  
* Are willing to commit some time during the Summer of Code application review period in order to prove that they can code C++ satisfactorily in a clean, well-documented style.
* Are willing to commit some time during the Summer of Code application review period in order to prove that they can code C++ satisfactorily in a clean, well-documented style.
* Can effectively navigate the {{name}} codebase.
* Can effectively navigate the XBMC codebase.
* Can communicate well with the {{name}} development-team and community via the forum and IRC.
* Can communicate well with the XBMC development-team and community via the forum and IRC.
* Can accept feedback and revise code after review until it is suitable for inclusion in the main {{name}} codebase.
* Can accept feedback and revise code after review until it is suitable for inclusion in the main XBMC codebase.


:'''TIP!''' Do not be shy, speak your mind, and get involved with the public community!
:'''TIP!''' Do not be shy, speak your mind, and get involved with the public community!


'''Frequent Objection #1:''' "''But I don't have time to do a qualification task!''" Then how do we know you will have time to work on your task during the summer? The qualification tasks are selected to be fairly trivial by {{name}} standards and should not be too difficult for a prospective {{name}} contributor. If they are too difficult, maybe {{name}} is not the project for you.
'''Frequent Objection #1:''' "''But I don't have time to do a qualification task!''" Then how do we know you will have time to work on your task during the summer? The qualification tasks are selected to be fairly trivial by XBMC standards and should not be too difficult for a prospective XBMC contributor. If they are too difficult, maybe XBMC is not the project for you.


: '''NOTE!''' Be encouraged by the fact that the application review period comes after the application submission deadline; i.e., you can work on a qualification task after you submit an application to {{name}} [http://groups.google.com/group/google-summer-of-code-announce/web/guide-to-the-gsoc-web-app-for-student-applicants through Google]. But you will not be considered for an GSoC project slot unless you have satisfactorily completed a qualification task.  
: '''NOTE!''' Be encouraged by the fact that the application review period comes after the application submission deadline; i.e., you can work on a qualification task after you submit an application to XBMC [http://groups.google.com/group/google-summer-of-code-announce/web/guide-to-the-gsoc-web-app-for-student-applicants through Google]. But you will not be considered for an GSoC project slot unless you have satisfactorily completed a qualification task.  


'''Process:''' If you are truly interested in applying for XBMC's Summer of Code and, by extension, interested in working on a qualification task, the first step is to register a {{name}} Community Forum Account, a SourceForge.NET Account and a {{name}} Wiki Account, and then publicly indicate that your interest and which project you plan to work on.
'''Process:''' If you are truly interested in applying for XBMC's Summer of Code and, by extension, interested in working on a qualification task, the first step is to register a XBMC Community Forum Account, a SourceForge.NET Account and a XBMC Wiki Account, and then publicly indicate that your interest and which project you plan to work on.


==== Platform independent ====
==== Platform independent ====
* We at {{name}} will accept [http://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_Of_Code_2008#Qualification_Tasks performing a qualification task for the FFmpeg project] as a {{name}} qualification task, see [http://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_Of_Code_2008#Qualification_Tasks here].
* We at XBMC will accept [http://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_Of_Code_2008#Qualification_Tasks performing a qualification task for the FFmpeg project] as a XBMC qualification task, see [http://wiki.multimedia.cx/index.php?title=FFmpeg_Summer_Of_Code_2008#Qualification_Tasks here].


* FFmpeg wrapper for [http://forum.xbmc.org/showthread.php?t=21926 Libnemesi (the RTSP/RTP client library)] to use inside [[DVDPlayer|XBMC's in-house video-player (DVDPlayer)]]
* FFmpeg wrapper for [http://forum.xbmc.org/showthread.php?t=21926 Libnemesi (the RTSP/RTP client library)] to use inside [[DVDPlayer|XBMC's in-house video-player (DVDPlayer)]]
Line 279: Line 279:
* Implement a slow-cache system for the infomanager for those items that do not need to be retrieved more than about once a second, such as the proposed "Library.HasContent()" stuff which hits the db.
* Implement a slow-cache system for the infomanager for those items that do not need to be retrieved more than about once a second, such as the proposed "Library.HasContent()" stuff which hits the db.


:'''Legacy Tasks''' - There is a growing back-log of 'interesting patches' and 'bug-reports' for {{name}} on our patch-tracker and our bug-tracker which are both hosted on the {{name}} SourceForge.net project site. Many of the patches have been abandoned by the original submitter, thus now requires volunteers to take the initiative to clean up each patch to the satisfaction of the project leaders and resubmit it for new review, so that it can be approved for SVN inclusion. As for the bugs, please try to fix enough bugs to show of your skill. See:
:'''Legacy Tasks''' - There is a growing back-log of 'interesting patches' and 'bug-reports' for XBMC on our patch-tracker and our bug-tracker which are both hosted on the XBMC SourceForge.net project site. Many of the patches have been abandoned by the original submitter, thus now requires volunteers to take the initiative to clean up each patch to the satisfaction of the project leaders and resubmit it for new review, so that it can be approved for SVN inclusion. As for the bugs, please try to fix enough bugs to show of your skill. See:
:* {{name}} patch-tracker: [http://sourceforge.net/tracker/?group_id=87054&atid=581840 http://sourceforge.net/tracker/?group_id=87054&atid=581840]
:* XBMC patch-tracker: [http://sourceforge.net/tracker/?group_id=87054&atid=581840 http://sourceforge.net/tracker/?group_id=87054&atid=581840]
:* {{name}} bug-tracker: https://sourceforge.net/tracker/?group_id=87054&atid=581838
:* XBMC bug-tracker: https://sourceforge.net/tracker/?group_id=87054&atid=581838


:'''Note!''' If you have an idea for a other simple task, come and discuss it on the development forums and the devs might approve it.
:'''Note!''' If you have an idea for a other simple task, come and discuss it on the development forums and the devs might approve it.


==== {{name}} for Linux ====
==== XBMC for Linux ====
* Port an existing {{name}} (for Xbox) DirectX/Direct3D/HLSL screensaver or visualization to OpenGL/GLSL
* Port an existing XBMC (for Xbox) DirectX/Direct3D/HLSL screensaver or visualization to OpenGL/GLSL


* [http://en.wikipedia.org/wiki/GLSL GLSL (GLSL (OpenGL Shading Language)] shader for bicubic/triliniar/lanczos upscaling [http://en.wikipedia.org/wiki/Video_post-processing video post-processing]
* [http://en.wikipedia.org/wiki/GLSL GLSL (GLSL (OpenGL Shading Language)] shader for bicubic/triliniar/lanczos upscaling [http://en.wikipedia.org/wiki/Video_post-processing video post-processing]
Line 293: Line 293:
* Complete the missing 64-bit audio codecs for [[PAPlayer|XBMC's in-house audio-player (PAPlayer)]]
* Complete the missing 64-bit audio codecs for [[PAPlayer|XBMC's in-house audio-player (PAPlayer)]]


==== {{name}} for Mac OS X ====
==== XBMC for Mac OS X ====
* Port an existing {{name}} (for Xbox) DirectX/Direct3D/HLSL screensaver or visualization to OpenGL/GLSL
* Port an existing XBMC (for Xbox) DirectX/Direct3D/HLSL screensaver or visualization to OpenGL/GLSL


* [http://en.wikipedia.org/wiki/GLSL GLSL (GLSL (OpenGL Shading Language)] shader for bicubic/triliniar/lanczos upscaling [http://en.wikipedia.org/wiki/Video_post-processing video post-processing]
* [http://en.wikipedia.org/wiki/GLSL GLSL (GLSL (OpenGL Shading Language)] shader for bicubic/triliniar/lanczos upscaling [http://en.wikipedia.org/wiki/Video_post-processing video post-processing]
** See XBMC's [[OpenGL DirectX Interface|OpenGL-interface]] and [[Rendering|rendering-pipeline]] for more information.
** See XBMC's [[OpenGL DirectX Interface|OpenGL-interface]] and [[Rendering|rendering-pipeline]] for more information.


* Mac OS X 64-bit x86 running: Patches to make {{name}} for Mac OS X closer to running on 64-bit x86 architecture. Should be easier now that it's working on AMD64 Linux. E-mail malloc AT xbmc DOT org with questions.
* Mac OS X 64-bit x86 running: Patches to make XBMC for Mac OS X closer to running on 64-bit x86 architecture. Should be easier now that it's working on AMD64 Linux. E-mail malloc AT xbmc DOT org with questions.


==== {{name}} for Windows ====
==== XBMC for Windows ====
* Port an existing {{name}} (for Xbox) DirectX/Direct3D/HLSL screensaver or visualization to OpenGL/GLSL
* Port an existing XBMC (for Xbox) DirectX/Direct3D/HLSL screensaver or visualization to OpenGL/GLSL


* [http://en.wikipedia.org/wiki/GLSL GLSL (GLSL (OpenGL Shading Language)] shader for bicubic/triliniar/lanczos upscaling [http://en.wikipedia.org/wiki/Video_post-processing video post-processing]
* [http://en.wikipedia.org/wiki/GLSL GLSL (GLSL (OpenGL Shading Language)] shader for bicubic/triliniar/lanczos upscaling [http://en.wikipedia.org/wiki/Video_post-processing video post-processing]
** See XBMC's [[OpenGL DirectX Interface|OpenGL-interface]] and [[Rendering|rendering-pipeline]] for more information.
** See XBMC's [[OpenGL DirectX Interface|OpenGL-interface]] and [[Rendering|rendering-pipeline]] for more information.


* {{name}} for Windows 64-bit x86 running: Patches to make {{name}} for Windows closer to running on 64-bit x86 architecture. Should be easier now that {{name}} is working on AMD64 Linux. E-mail malloc AT xbmc DOT org with questions.
* XBMC for Windows 64-bit x86 running: Patches to make XBMC for Windows closer to running on 64-bit x86 architecture. Should be easier now that XBMC is working on AMD64 Linux. E-mail malloc AT xbmc DOT org with questions.


==== {{name}} for Xbox ====
==== XBMC for Xbox ====
* Update a few third-party library/module that {{name}} for Xbox depends on and submit a patch for the update
* Update a few third-party library/module that XBMC for Xbox depends on and submit a patch for the update
** For example: libCDIO, CxImage, libcurl, libshout, libsamba, libPython, libSQLite, FileZilla (server), libDAAP, libfreetype (FreeType2)
** For example: libCDIO, CxImage, libcurl, libshout, libsamba, libPython, libSQLite, FileZilla (server), libDAAP, libfreetype (FreeType2)


Line 316: Line 316:


= Mentors and Contact methods =
= Mentors and Contact methods =
Mentors are developers from [[Team {{name}} and Others|Team-XBMC]] and members of [http://sourceforge.net/projects/xbmc The {{name}} Project] that have volunteered to assist and mentor non-official {{name}} developers in any non-trivial way they can, helping you by checking, commenting and committing your code patches to our SVN source code tree. These mentors have chosen an area they prefer to specialize in, usually this is an area in which they feel they have most interest, knowledge, and expertise in.
Mentors are developers from [[Team XBMC and Others|Team-XBMC]] and members of [http://sourceforge.net/projects/xbmc The XBMC Project] that have volunteered to assist and mentor non-official XBMC developers in any non-trivial way they can, helping you by checking, commenting and committing your code patches to our SVN source code tree. These mentors have chosen an area they prefer to specialize in, usually this is an area in which they feel they have most interest, knowledge, and expertise in.


* [[User:Jmarshall|JMarshall]]: Anything GUI related, Music Library, Video Library, PAPlayer, etc.
* [[User:Jmarshall|JMarshall]]: Anything GUI related, Music Library, Video Library, PAPlayer, etc.
Line 330: Line 330:


== Contact methods ==
== Contact methods ==
These are developers forums for {{name}} development, (programmers/coders only!).<br />
These are developers forums for XBMC development, (programmers/coders only!).<br />
Respect, these are not for posting feature-requests or end-user support requests!
Respect, these are not for posting feature-requests or end-user support requests!
* IRC: [irc://irc.freenode.net/xbmc-gsoc #xbmc-gsoc on freenode] temporary [http://freenode.net IRC network channel] used for the GSoC qualification/proposal stage.
* IRC: [irc://irc.freenode.net/xbmc-gsoc #xbmc-gsoc on freenode] temporary [http://freenode.net IRC network channel] used for the GSoC qualification/proposal stage.
** This [irc://irc.freenode.net/xbmc-gsoc #xbmc-gsoc] IRC-channel will be used for students and mentors until the [http://code.google.com/opensource/gsoc/2008/faqs.html#0.1_timeline 14th of April]
** This [irc://irc.freenode.net/xbmc-gsoc #xbmc-gsoc] IRC-channel will be used for students and mentors until the [http://code.google.com/opensource/gsoc/2008/faqs.html#0.1_timeline 14th of April]
* IRC: [irc://irc.freenode.net/xbmc-linux #xbmc-linux on freenode] official [http://freenode.net IRC network channel] for the {{name}} Linux port project
* IRC: [irc://irc.freenode.net/xbmc-linux #xbmc-linux on freenode] official [http://freenode.net IRC network channel] for the XBMC Linux port project
** (You may also sometimes find developers hanging out at [irc://irc.freenode.net/xbmc #xbmc on freenode])
** (You may also sometimes find developers hanging out at [irc://irc.freenode.net/xbmc #xbmc on freenode])
* IRC: [irc://irc.freenode.net/xbmc-osx #xbmc-osx on freenode] official [http://freenode.net IRC network channel] for the {{name}} Mac OS X port
* IRC: [irc://irc.freenode.net/xbmc-osx #xbmc-osx on freenode] official [http://freenode.net IRC network channel] for the XBMC Mac OS X port
* [http://forum.xbmc.org/forumdisplay.php?f=41 {{name}} for Linux port Community-Forum for developers only]
* [http://forum.xbmc.org/forumdisplay.php?f=41 XBMC for Linux port Community-Forum for developers only]
** [http://forum.xbmc.org/forumdisplay.php?f=52 {{name}} for Linux port Community-Forum for end-users (unmoderated so far)]
** [http://forum.xbmc.org/forumdisplay.php?f=52 XBMC for Linux port Community-Forum for end-users (unmoderated so far)]
* [http://forum.xbmc.org/forumdisplay.php?f=57 {{name}} for Mac OS X port Community-Forum for developers only]
* [http://forum.xbmc.org/forumdisplay.php?f=57 XBMC for Mac OS X port Community-Forum for developers only]
** [http://forum.xbmc.org/forumdisplay.php?f=56 {{name}} for Mac OS X port Community-Forum for end-users (unmoderated so far)]
** [http://forum.xbmc.org/forumdisplay.php?f=56 XBMC for Mac OS X port Community-Forum for end-users (unmoderated so far)]
* [[HOW-TO submit a patch]] (where and how to submit source code)
* [[HOW-TO submit a patch]] (where and how to submit source code)


[[Category:Google Summer of Code]]
[[Category:Google Summer of Code]]

Revision as of 20:14, 5 June 2014

Home icon grey.png   ▶ Development ▶ Category:Google Summer of Code ▶ 2008
Notice This page describes a previous year's event. For the most recent GSoC page please check Category:Google Summer of Code.

XBMC has been accepted into the Google Summer of Code 2008!

Google is sponsoring their fourth annual Summer of Code (GSoC) in the summer of 2008, this entail sponsoring students to work on assorted open source projects as well as sponsoring mentors in those same projects, everyone wins! XBMC has been selected as one of the approved mentoring organizations for this year's GSoC. This page will be used for possible project ideas for the Google Summer of Code 2008 season, and also track the status of each project and how well each student is doing.

The primary administrator for this year's XBMC GSoC is Staffan Lindberg (a.k.a. Pike)
The backup administrator for this year's XBMC GSoC is Sean Soria (a.k.a. malloc)
...sorry, Andreas Setterlind (a.k.a. Gamester17) has got a new job in real-life so he can not continue as GSoC administrator this summer.

NOTE! If you are a student who wishes to be involved with an XBMC GSoC project, one of the first and best steps you can take is to register an account on XBMC community forum, (sooner rather than later), and indicate your interest. Also, make sure that you complete a qualification task as soon as possible to be eligible for a XBMC SoC project, (no qualification task = no project, that is Team-XBMC policy, not Google).

Introduction to XBMC

XBMC (formerly "XBox Media Center") is a free and open source cross-platform media center, designed to be the hub of your entertainment system. XBMC was originally established in 2002, at that time being developed as media player software for the first-generation Xbox game-console. XBMC has since been ported to run natively under Linux, Mac OS X, and Microsoft Windows operating-systems. XBMC has so far been translated to over 30 languages, won three SourceForge Community Choice Awards (Best Multimedia Project and Best Game Project in 2006, and best project for Gamers in 2008) and been a nominated finalist for a number of other awards. Today XBMC have a very broad international community of active developers, graphic artists, and devoted users.

Developing XBMC

The XBMC code structure uses a fairly modular design (with libraries and DLLs) who's structure is large, though relatively easy to grasp. XBMC's source code is predominantly C++, though there is a small splattering of C libraries and assembler for good measure. XBMC for uses the Microsoft DirectX multimedia framework (Direct3D) on the Xbox, and the SDL (Simple DirectMedia Layer) framework with OpenGL rendering for other operating-system platforms versions of XBMC, (ie. Linux, Mac OS X, and Microsoft Windows).

The main XBMC program is developed using Microsoft Visual Studio for the Xbox and win32 builds, and there are KDevelop project files for Linux, and Xcode (and Eclipse) project files for Mac OS X. For the Xbox version a copy of the latest Microsoft Xbox SDK (a.k.a. XDK) and DirectX 9.0 SDK Update (Summer 2004) is also required, though obviously this is not required for any other of the platforms that XBMC can be compiled for.

XBMC's code also contains three player cores: One core based on MPlayer that is only available to the Xbox version of XBMC, another in-house developed (FFmpeg-based) dedicated video-player core (which also supports DVD-Video movies with menus), and an in-house developed dedicated music-player core.

NOTE! For more detailed information on where to get started with XBMC development please see Appendix D (Development_Notes) in this wiki.
TIP! Microsoft DreamSpark student program is currently (and over this summer) giving free access to their development software.

How To Apply as a Student

Before you can apply

Before you can apply make sure you are qualified to apply:

  • You have to know how to program in C++ (and know C) fairly well.
  • We would like you to first submit a small patch that fixes a bug or adds a feature to XBMC. By doing that we will know if you are qualified for the task or not. At the bottom of this page there will be a list of possible Qualification Tasks, specific ideas that could be performed to show your skill, however you are free to submit anything you feel might be of value to XBMC. The qualification task can be done after you have filed you application.
  • Submit a good application through the formal Google Summer of Code process during the application time frame.
  • You have to have >35 hours per week to put into the project.
  • You can not have another job at the same time as the GSoC project.

Applying

If you are interested in participating in the Google Summer of Code you will need to register at the official GSoC site linked below and file an official application. Traditionally, the top applications are fairly detailed - you really need to sell yourself as well as your idea proposal. Look for example at this application here for inspiration. The official guide from Google can be found here:

  • Sell your idea - Describe your idea in detail. What is the ultimate goal? What components will it have? What are the benefits for the user? How do you plan to ensure that the project gets completed on time? If a more detailed explanation of the idea already exists, what will you do that will go above and beyond all expectations?
  • Sell yourself - Make sure you get across how enthusiastic you are about the project. The more enthusiastic you are, the more assured we will be that you will finish your project. It also indicates that there is a good chance you will stick around even after the Summer of Code has finished. Why are you interested in Open Source and XBMC in particular? What interests do you have, and how do these relate to the project for which you are applying?
  • Be enthusiastic - Summer of Code is a very exciting opportunity, and XBMC is a very exciting project to work on. We aren't just looking for someone who wants a summer job to pass their time and earn some money. We want people who have a passion towards open source and are likely to become constant contributors to XBMC and open source also once the summer has passed. The goal of the whole initiative is to have students find their way to open source together with mentoring and a good motivation.
TIP! The Drupal project has also prepared a couple of good guidelines that might be useful, see:

The application could have similar sections as in the following:

Name:
E-mail Address:
Project Title:
Project Goals:
Project Benefits:  How does your project benefit XBMC and its community?
Project Tasks and Deliverables: Break your project into tasks or pieces.
    Describe in detail what you plan to accomplish and what the results will be.
Project Schedule:  Estimate how long your project will take and how much time you
    have to dedicate on it. Try to establish a timed roadmap of the tasks to do.
Personal Statement:  Tell us about yourself.  Describe why you are better than any
    other applicant for this project. Your previous experiences with XBMC (if any).

Google SoC Development Process

Each accepted project will be developed in its own sandbox (SVN branch), separate from the main XBMC codebase. Naturally, the end goal of each of the accepted XBMC projects ought to be to have that code in shape for acceptance into the production codebase. This page will track the status of each project and how well each student are doing.

Current Status

  • Next Big Date: UPDATE! The student application deadline has been extended to Monday, April 7, 2008. Students must have submitted their proposals through Google by this time.
  • March 31, 2008: Original student application deadline, now extended a week.
  • March 24, 2008: Students may begin to submit applications through Google
  • March 17, 2008: Google is scheduled to announce selected projects; XBMC is selected
  • March 11, 2008: Submitted XBMC project application
  • February 29, 2008: Created this wiki article

Schedule

Official timeline: http://code.google.com/soc/2008/faqs.html#0.1_timeline

  • April 17, 2008: All students must have completed their Qualification Task for XBMC. Students should aim to have the code from your qualification task committed to XBMC SVN or FFmpeg SVN well before then of course, so try to submit your initial patch in advance so that it can go though the proper review process.
  • April 7, 2008: Student application deadline, students must have submitted their proposals through Google.
  • March 24-31, 2008: Students may submit applications for various Google Summer of Code projects.
  • March 17, 2008: Google announces accepted organizations at: http://code.google.com/soc/
  • March 3-12, 2008: Open source organizations may apply to the Google Summer of Code program.

Project Proposals

Overview

Qualifications for a good Summer of Code proposal:

  • Discrete, well-defined, modular
  • Comprised of a series of measurable sub-goals
  • Based on open specs that are available free of charge
  • Based on complete specs

An example of a good proposal is the implementation of a new feature or function that is not yet available in XBMC.

An example of a less desirable proposal is one that's not as measurable, such as refactoring an existing API. Bad proposals tend to be ones that would require touching a lot of core code.

To re-iterate:

  • Localized/isolated code projects = good
  • Global code refactoring = bad

Students Project Proposals

Feel free to enter a link to your proposal here if you are a college student and you will apply to Google Summer of Code this year:

Projects with Mentors (official approved projects)

Google accept Students Project Proposals 2008:

Team-XBMC proposal ideas up for discussion

Most of the proposals in this list are just some project ideas that we have been kicking around, (which, by no means, limits any prospective proposals). So you are more than welcome to come up with a new idea that you think falls into the scope of XBMC and the Google Summer of Code spirit. Since XBMC is cross-platform software most of these ideas are platform-independent, meaning that if you implement the feature/function on one operating-system platform then someone else will be able to port that feature/function to the other operating-system platforms that XBMC runs on.

NOTE! THIS LIST IS NOT THE FINAL PROPOSALS THAT WILL BE SUBMITTED. THESE ARE ONLY CONCEPTS THAT IDEAS COULD BE BASED UPON, IN THE END YOU AS THE STUDENT WILL BE PRESENTING THE IDEA AS YOUR OWN, SO IT IS NOT ONLY THE IDEA BUT HOW YOU PRESENT IT, SO BE CREATIVE!

Porting XBMC to new platforms

  • Your Idea Here!
    • You're smart! Which hardware platform or operating-system you like to port XBMC to and why?
  • Port XBMC for Windows (SDL / OpenGL) to ReactOS, as it is missing a media center software.

General platform independent ideas

  • Your Idea Here!
    • You're smart! What would you like to do?
  • Add native support for text-display from Karaoke CD+G Audio-CDs (possibly via libcdio)
    • As this would otherwise be a small task (since XBMC already supports displaying CDG graphics and already uses libcdio for other features such as ISO/IMG images reader and ISO 9660 reader, meaning you would really only have to add CD+G subchannel support to libcdio), so one would also expect this proposal to also include further additional karaoke functions and features under XBMC for Linux, such as microphone support (with recording and enabling the use of those microphones under both audio and video playback), and maybe voice-mask filters, and possibly Lyrics3v2 display on top of visualizations and screensavers, etc.
  • Rewrite the thumbnail caching system so that it can store multiple resolution thumbs.
    • Essentially the "CacheThumb" routine should cache the thumb, cache information about the thumb (info on date, source, aspectratio, packed as small as feasible) and store both full size and scaled versions of the thumbs. The meta info would be stored in a separate file for fast assigning of thumbs (this could be kept in memory based on the thumb hash in a lookup table, and the ListItem.Thumb infoimage could be extended to specify what size of thumb it needs (to limit memory usage for xbox/lowmem devices).
  • Rewrite XBMC's existing picture slideshow engine to be more like a normal player (see DVDPlayer, PAPlayer, and MODPlayer as examples).
    • Utilize GUILargeImage to handle the loading, and the animation engine for the effects (pan/zoom/rotate, etc.)
  • Simple RSS reader that supports parsing text, video and pictures, (supporting multiple RSS feeds), and displaying this in the GUI. This should be simple enough, like the RSS readers on mobile devices, but suited for a TV display.
  • Generic App Support - a very non-trivial much more generalized implementation would be an application / component that is able to capture the output and control an external application through a process pipe, shared memory, events, etc and have XBMC render it inside its own window. Such an implementation would mean we could more easily swap out browsers and also integrate other applications into XBMC. Of course this is highly non-trivial and many parts of it would be platform dependent. In terms of performance, such a technique will probably(?) not function too well for applications that require high fps. This OpenGL extension to convert a pixmap to a texture (used by compiz) might prove useful.
  • Port all of the existing visualizations and screensavers available in XBMC for Xbox from Direct3D/DirectX to OpenGL, (perhaps even doing so in a unified way that they are combined with the existing Direct3D/DirectX version so that they each supports both DirectX and OpenGL).

Qualification tasks

Please add a note here if you choose to work on a qualification task to avoid duplicate work.

Many students will probably apply for the Google Summer of Code and wish to work on a sexy multimedia project such as XBMC. All students will probably also claim to be hard workers, but we need a real method of determining which students have a higher probability for success. Thus, we will use this qualification system (adopted from FFmpeg SoC 2007 season). A student must successfully first complete a qualification task in order to be considered for an XBMC SoC project. In doing so, a student demonstrates that they:

  • Are willing to commit some time during the Summer of Code application review period in order to prove that they can code C++ satisfactorily in a clean, well-documented style.
  • Can effectively navigate the XBMC codebase.
  • Can communicate well with the XBMC development-team and community via the forum and IRC.
  • Can accept feedback and revise code after review until it is suitable for inclusion in the main XBMC codebase.
TIP! Do not be shy, speak your mind, and get involved with the public community!

Frequent Objection #1: "But I don't have time to do a qualification task!" Then how do we know you will have time to work on your task during the summer? The qualification tasks are selected to be fairly trivial by XBMC standards and should not be too difficult for a prospective XBMC contributor. If they are too difficult, maybe XBMC is not the project for you.

NOTE! Be encouraged by the fact that the application review period comes after the application submission deadline; i.e., you can work on a qualification task after you submit an application to XBMC through Google. But you will not be considered for an GSoC project slot unless you have satisfactorily completed a qualification task.

Process: If you are truly interested in applying for XBMC's Summer of Code and, by extension, interested in working on a qualification task, the first step is to register a XBMC Community Forum Account, a SourceForge.NET Account and a XBMC Wiki Account, and then publicly indicate that your interest and which project you plan to work on.

Platform independent

  • Implement a slow-cache system for the infomanager for those items that do not need to be retrieved more than about once a second, such as the proposed "Library.HasContent()" stuff which hits the db.
Legacy Tasks - There is a growing back-log of 'interesting patches' and 'bug-reports' for XBMC on our patch-tracker and our bug-tracker which are both hosted on the XBMC SourceForge.net project site. Many of the patches have been abandoned by the original submitter, thus now requires volunteers to take the initiative to clean up each patch to the satisfaction of the project leaders and resubmit it for new review, so that it can be approved for SVN inclusion. As for the bugs, please try to fix enough bugs to show of your skill. See:
Note! If you have an idea for a other simple task, come and discuss it on the development forums and the devs might approve it.

XBMC for Linux

  • Port an existing XBMC (for Xbox) DirectX/Direct3D/HLSL screensaver or visualization to OpenGL/GLSL

XBMC for Mac OS X

  • Port an existing XBMC (for Xbox) DirectX/Direct3D/HLSL screensaver or visualization to OpenGL/GLSL
  • Mac OS X 64-bit x86 running: Patches to make XBMC for Mac OS X closer to running on 64-bit x86 architecture. Should be easier now that it's working on AMD64 Linux. E-mail malloc AT xbmc DOT org with questions.

XBMC for Windows

  • Port an existing XBMC (for Xbox) DirectX/Direct3D/HLSL screensaver or visualization to OpenGL/GLSL
  • XBMC for Windows 64-bit x86 running: Patches to make XBMC for Windows closer to running on 64-bit x86 architecture. Should be easier now that XBMC is working on AMD64 Linux. E-mail malloc AT xbmc DOT org with questions.

XBMC for Xbox

  • Update a few third-party library/module that XBMC for Xbox depends on and submit a patch for the update
    • For example: libCDIO, CxImage, libcurl, libshout, libsamba, libPython, libSQLite, FileZilla (server), libDAAP, libfreetype (FreeType2)

Mentors and Contact methods

Mentors are developers from Team-XBMC and members of The XBMC Project that have volunteered to assist and mentor non-official XBMC developers in any non-trivial way they can, helping you by checking, commenting and committing your code patches to our SVN source code tree. These mentors have chosen an area they prefer to specialize in, usually this is an area in which they feel they have most interest, knowledge, and expertise in.

  • JMarshall: Anything GUI related, Music Library, Video Library, PAPlayer, etc.
  • Spiff: Anything other than DllLoader/MPlayer/DVDPlayer internals.
  • Yuvalt: Everything Linux
  • D4rk: OpenGL, other Linux stuff
  • Vulkanr: Everything Linux (including DllLoader and DVDPlayer internals)
  • elupus: DllLoader and DVDPlayer internals (video-player/codec specialist)
  • malloc: Everything Linux
  • Agathorn: Anything GUI and Skin related (Xbox or platform-independent)
NOTE! All GSoC students should feel comfortable to not only approach your assigned mentors but also to approach ANY mentor and ANY Team-XBMC member with your questions and problems, Team-XBMC is not only a team by name but we do our best to work as a team as well.

Contact methods

These are developers forums for XBMC development, (programmers/coders only!).
Respect, these are not for posting feature-requests or end-user support requests!