Archive:Google Summer of Code/2008: Difference between revisions
>Gamester17 No edit summary |
>Gamester17 No edit summary |
||
Line 1: | Line 1: | ||
XBMC has been accepted in to the Google Summer of Code 2008! | '''XBMC has been accepted in to the Google Summer of Code 2008!''' | ||
{{Current event}} | {{Current event}} | ||
Google is sponsoring their forth 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. | Google is sponsoring their forth 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. |
Revision as of 21:10, 17 March 2008
XBMC has been accepted in to the Google Summer of Code 2008! Template:Current event Google is sponsoring their forth 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 administrator for this year's XBMC Summer of Code is Andreas Setterlind (a.k.a. Gamester17)
- 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 (GPL) cross-platform media player and entertainment hub software. XBMC was originally established in 2002 and in the beginning developed as XBox Media Player (XBMP) for the first-generation Xbox game-console. XBMC has since been ported to also run natively under Linux, Mac OS X, and Microsoft Windows operating-system. XBMC has so far been translated to over 30 languages, won two SourceForge Community Choice Awards, (Best Multimedia Project and Best Game Project back in 2006), and today XBMC has a very broad international community of active developers, graphic artists, and devoted users.
- XBMC for Linux (see the XBMC for Linux port project for more information)
- XBMC for Mac OS X (see the XBMC for Mac OS X port project for more information)
- XBMC for Windows (see the XBMC for Windows port project for more information)
- XBMC for Xbox
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 Eclipse/Xcode project files for Mac OS X). For the Xbox version a copy of the latest Microsoft Xbox SDK (a.k.a. XDK) is also required, though obviously this is not required for all other platforms.
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.
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 SoC project.
Applying
If you are interested in participating in the Google Summer of Code you will need to register at the official SoC 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:
- Guide to the Google Summer of Code Web Application for Student Applicants
- Google Summer of Code - Student Signup
- TIP! The Drupal project has also prepared a couple of good guidelines that might be useful, see:
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.
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:
- One common GUI front-end that can control multiple PVR/DVR/HTPC back-ends
- Proposed by student: Alcoheca
- Proposed mentor: JMarshall
Projects with Mentors (official approved projects)
- To come if and when Google accept the Students Project Proposals
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!
- PVR front-end GUI that is skinnable and a API can can support multiple HTPC/DVR/PVR-backend clients
- Skinnable XMLTV GUI (TV-Guide) frontend in XBMC and a method of downloading new listings.xml
- Suggest that either extend XBMC's Scraper API or use Python Scripts for downloading
- PVR software support (API to control channel-swapping and stream Live-TV of a third-party backend)
- Native DVB television in XBMC for Linux via v4l/v4l2 library and FFmpeg (added to XBMC's in-house video-player)
- This would enable XBMC for Linux to display Live-TV and record TV without third-party backend.
- Latest FFmpeg SVN already have v4l/v4l2 support, but no tuning or channel-swapping features
- Hardware Accelerated Video Decoding of H.264 encoded video (in XBMC's FFmpeg-based in-house video player)
- Off-loading some decoding processing parts to a OpenGL 2.0 GPU for assisted decoding
- The possible methods are GLSL or Cg Pixel Shader (Shader Model 3.0), and/or GPGPU technology
- Pictures database; scan EXIF (and IPTC) tags into a SQL db and add a library-mode view
- Extend XBMC's Scraper API to also download games metadata, (and maybe also weather-forecasts)
- Unified Subtitle Parser / Display Filter Library for XBMC's in-house DVDPlayer video-player core
- Create a Unified Subtitle Parser Library for external and embedded subtitle, plus a FFmpeg libavfilter filter for it
- Audio Equalizer in XBMC for music playback with PAPlayer, (and as a FFmpeg libavfilter filter for video)
- Add full VCD/SVCD menu support to XBMC (possibly via xine-vcdnav/vcdx from Xine)
- Add native support for text-display from CDG Karaoke Audio-CDs (possibly via libcdio)
- As this would otherwise be a small task (since XBMC already uses libcdio for other features such as ISO/IMG images reader and ISO 9660 reader on the Xbox), one would also expect this proposal to also include 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 even voice-mask filters), and possibly Lyrics3v2 display on top of visualizations and screensavers.
- 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.)
- BitTorrent GUI-frontend and a BiTorrent client-backend, a with download manager running in the background.
- This could allow XBMC user to search track RSS feeds and download items by filter.
- Separating the GUI-frontend from the client-backend makes it more portable and easier to replace client-backend.
- Integrate a web-browser into XBMC GUI using either KHTML or WebKit as the backend 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 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 still branched in the SVN though), so in theory it could be possible to update the linksbrowser SVN branch but instead of Links2Browser integrate a new more memory efficient cross-portable HTML layout engine rendering backend with few dependencies and smaller footprint, such as KHTML or WebKit.
- Simple RSS reader that supports text, video and pictures, (supporting multiple RSS feeds)
- Should be simple enough, like the RSS readers on mobile devices, suited for TV.
- 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 visualisations and screensavers available in XBMC for Xbox from DirectX to OpenGL, (doing so in a unified way that they are combined with the existing DirectX version so that they each supports both DirectX and OpenGL).
- Home Automation Control: Control lighting, climate/heating, security, camera surveillance, and more.
- Implement Firefly Media Server (previously known as "mt-daapd") built-in DAAP-server into XBMC for Mac OS X
- Make it possible for XBMC for Mac OS X to use iTunes library (XBMC already have a DAAP-client)
- Note! No mentor has yet volunteered to help with Mac OS X specific coding!
- Fully port XBMC for Mac OS X to compile and run Mac OS X 10.4.x (Tiger)
- Note! No mentor has yet volunteered to help with Mac OS X specific coding!
- Fully port XBMC for Mac OS X to compile and run on PowerPC (PPC) architecture
- Maybe with the help of The Fink Project and/or The LLVM Compiler Infrastructure?
- Note! No mentor has yet volunteered to help with Mac OS X specific coding!
Qualification tasks
Please add a note here if you choose to work on a qualification task to avoid duplicate work. (To do so you need to register an account on this wiki and request 'ninja status' from a Team-XBMC member for that account).
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. Also, 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. But you will not be considered for an SoC 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 (plus apply to get 'ninja status' for the Wiki by contacting a Team-XBMC member), and then publicly indicate that your interest and which project you plan to work on.
Platform independent
- FFmpeg wrapper for Libnemesi (the RTSP/RTP client library) to use inside XBMC's in-house video-player (DVDPlayer)
- -- I'm willing to try this out - Alcoheca' - 27/2/2008
- FFmpeg wrapper for Libnemesi (the RTSP/RTP client library) to use inside XBMC's in-house audio-player (PAPlayer)
- Add libass library (Advanced SSA/ASS subtitle support) to XBMC's in-house video-player (DVDPlayer)
- 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:
- XBMC patch-tracker: http://sourceforge.net/tracker/?group_id=87054&atid=581840
- XBMC bug-tracker: https://sourceforge.net/tracker/?group_id=87054&atid=581838
XBMC for Linux
- Port an existing XBMC (for Xbox) DirectX/HLSL screensaver or visualisation to OpenGL/GLSL
- Complete the missing audio codecs (ADPlug and SHN) for XBMC's in-house audio-player (PAPlayer)
XBMC for Mac OS X
- Port an existing XBMC (for Xbox) DirectX/HLSL screensaver or visualisation 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 [email protected] with questions.
- Port an existing XBMC (for Xbox) DirectX/HLSL screensaver or visualisation to OpenGL/GLSL
XBMC for Windows
- Port an existing XBMC (for Xbox) DirectX/HLSL screensaver or visualisation to OpenGL/GLSL
- XBMC for Windows (Win32) compiling:
- Patches to make XBMC for Windows (SDL/OpenGL-based from the linuxport branch) closer to fully working on a Windows XP (32-bit x86) architecture.
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)
- Fix enough bugs to show skill https://sourceforge.net/tracker/?func=browse&group_id=87054&atid=581838
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
- malloc: Everything Linux
- 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!
- IRC: #xbmc-gsoc on freenode temporary IRC network channel used for the GSoC qualification/proposal stage.
- This #xbmc-gsoc IRC-channel will be used for students and mentors until the 14th of April
- IRC: #xbmc-linux on freenode official IRC network channel for the XBMC Linux port project
- (You may also sometimes find developers hanging out at #xbmc on freenode)
- IRC: #xbmc-osx on freenode official IRC network channel for the XBMC Mac OS X port
- XBMC for Linux port Community-Forum for developers only
- XBMC for Mac OS X port Community-Forum for developers only
- HOW-TO submit a patch (where and how to submit source code)