Development: Difference between revisions

From Official Kodi Wiki
Jump to navigation Jump to search
>Gamester17
>Gamester17
Line 50: Line 50:
If you are a programmer/developer but not have access to [http://en.wikipedia.org/wiki/Microsoft_Visual_Studio VS.NET] and the [[XDK]] then you can work on [[XBMC for Linux port project|XBMC for Linux]], [[XBMC for Mac OS X port project|XBMC for Mac OS X]], or [[XBMC for Windows port project|XBMC for Windows (Win32)]], (or you can contribute indirectly by helping [http://ffmpeg.sourceforge.net the FFmpeg project] as all XBMC versions uses [http://ffmpeg.sourceforge.net FFmpeg open source codec-libraries]). See bellow for more information.
If you are a programmer/developer but not have access to [http://en.wikipedia.org/wiki/Microsoft_Visual_Studio VS.NET] and the [[XDK]] then you can work on [[XBMC for Linux port project|XBMC for Linux]], [[XBMC for Mac OS X port project|XBMC for Mac OS X]], or [[XBMC for Windows port project|XBMC for Windows (Win32)]], (or you can contribute indirectly by helping [http://ffmpeg.sourceforge.net the FFmpeg project] as all XBMC versions uses [http://ffmpeg.sourceforge.net FFmpeg open source codec-libraries]). See bellow for more information.


==XBMC platform-independent HOW-TO guides==
==XBMC inner working and platform-independent HOW-TO guides==
*[[HOW-TO Submit a Proper Bug Report|HOW-TO submit a proper bug report]]
*[[HOW-TO Submit a Proper Bug Report|HOW-TO submit a proper bug report]]
*[[HOW-TO submit an official feature request]]
*[[HOW-TO submit an official feature request]]
*[[HOW-TO help with Quality Assurance]]
*[[HOW-TO help with Quality Assurance]]
*[[HOW-TO submit a patch|HOW-TO submit a patch (contribute source code)]]
*[[HOW-TO submit a patch|HOW-TO submit a patch (contribute source code)]]
*[[Basic overview of the XBMC source code]]
*[[HOW-TO write plugins for XBMC|HOW-TO create Plugins (with Python) for XBMC (content addons)]]
*[[HOW-TO write Python Scripts|HOW-TO create Scripts (with Python) for XBMC (widget addons)]]
*[[Skinning XBMC|HOW-TO skin/theme XBMC (making or modifying GUI skins)]]
*[[HOW-TO debug Dynamic Link Libraries|HOW-TO debug Dynamic Link Libraries (DLL)]]
*[[Information on Language Support]]
*[[Information on Language Support]]
**[[Keyboard Internationalisation|Overview of input methods + code changes for multi keyboard language support]]
**[[Keyboard Internationalisation|Overview of input methods + code changes for multi keyboard language support]]
*[[HOW-TO debug Dynamic Link Libraries|HOW-TO debug Dynamic Link Libraries (DLL)]]
*[[Basic overview of the XBMC source code]]
*[[HOW-TO write plugins for XBMC|HOW-TO write Plugins for XBMC (content addons)]]
*[[WebServerHTTP-API|The HTTP API (Web Server HTTPAPI)]]
*[[Building Scripts|HOW-TO write Python Scripts for XBMC (widget addons)]]
*[[EventServer|The EventServer API (and EventClients for it)]]
*[[The XBMC Database|XBMC's SQL databases (database libraries)]]
*[[Audio Players|Audio Players (and audio codecs/demuxers)]]
*[[Video Players|Video Players (and video codecs/demuxers)]]
*[[Apply to join the Official XBMC Development-Team]]
*[[Apply to join the Official XBMC Development-Team]]



Revision as of 06:36, 28 January 2009

XBMC Media Center (formerly named "XBox Media Center") is a free and open source software (GPL) Cross-platform media player and entertainment hub. Originally developed as XBox Media Player (XBMP) for the first-generation Xbox game console in 2002, XBMC Media Center have since been ported many other platforms so that it today runs natively under Linux, Mac OS X (including Leopard, Tiger, and Apple TV), and Microsoft Windows operating-systems. There is also a bootable Live CD version with embedded Linux that we call "XBMC Live".

Contributing to the XBMC project

Third-party developers/programmers can make and submit source code patches/modules with new features, functions, or bug-fixes to us via our Tracker (Trac) on this site.

The XBMC source code structure uses a fairly modular design (with libraries and DLL files), the structure is large, though relatively easy to grasp by most programmers. XBMC's source code is predominantly written in the C++ programming-language, 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 all other operating-system platforms versions of XBMC, (ie. Linux, Mac OS X, and Windows).

The main XBMC program is developed using Microsoft Visual Studio (or the free Visual Studio Express) for the Windows and Xbox builds of XBMC, 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 that is used for video playback on all other platforms, and an in-house developed dedicated music-player core which works on all platforms.

Some of the XBMC libraries are in the C programming-languages but those then uses a C++ wrapper and are loaded via XBMC's own DLL loader. The Xbox Operating-System/BIOS is kind of Win32-based however it does have all of the resources or capabilities of a full Microsoft Windows Operating-System, (for example: DirectShow, registry, nor DLL are nativly supported on the Xbox). Because of the constraints on the hardware (like only 64MB shared memory and a 733Mhz PIII CPU) and the XDK environment of the Xbox, all software development for XBMC is highly focused on reserving the limited resourses that exist, the main hindrance of which is the amount of available random access memory at any one time, (which is why XBMC code structure is built so modular, enabling libraries to be unloaded when they are not in active use). For more detailed information about XBMC inner working please follow these links and the categories at the end of this article:

XBMC programming and code formatting convention guidelines

Note! More specifics to come based on ongoing discussions, see Proposed code formatting conventions for XBMC

General guidelines

  • Code documentation (DocBook, rst, or doxygen for the code documentation steps, preferably the latter, doxygen).
    • Like for example every field of public API structures should have a doxygen comment.
  • Self-containment - XBMC should be as little dependent as possible on operating-system and third-party services/deamons/libraries
    • XBMC should for example contain all file-system and network-client (like samba) support built-into the XBMC package
  • Modular design - independent modules made up by localized/isolated code libraries without dependencies
    • XBMC should still compile and run if a non-essencial module/library is disabled or removed
  • Aim for the GUI/interface to run smoothly on a low spec computer (less than 1Ghz)
    • 3D graphic controller (GPU) will always be required hardware for XBMC so try to utilize the GPU as much as possible
  • Avoid harddisk trashing (excess read/write/erase cycles), so no harddrive paging, (utilize RAM memory intead).
    • End-users will be running XBMC and the operating-system on Solid-State memory as a Live CD (LiveDistro) of a USB-key
  • Fast load and boot times for end-user perception (other thing can still run/start in the background without the user knowledge)

User-friendliness is next to godlyness

One of Team-XBMC major ongoing goal have always been to make XBMC and its user interface even more intuitive and user-friendly for its end-users, based on the KISS (Keep It Simple Stupid) philosophy. We think that usability is very important for media players like XBMC. Many user interface deciscions are being made by developers who often have little experience in user interface design, in order to improve this, we try to listen to XBMC's end-users for how XBMC is actually being used and how we can improve the user experience. We also aim to do regular overhauls, improving existing features/functions, and scrapping outdated code and features/functions (as "to much stuff" can also be a bad thing).

XBMC as a whole must...

  • Be easy to install, set-up, configure, and maintain, (so that the end-users do not get fed up with it and quit).
  • Have an user interface simple and intuitive enough so that less geek-savvy people are not intimidated by it.
  • Be able to play audio and video files that have been compressed using divx, xvid, etc. directly out-of-the-box
  • Be able to and organize audio and video files in an easy and user-friendly way.
  • Use standards and be consistant, (the music section can for example not use completely different controls from the video section)
  • Perform actions in the GUI with as few 'clicks' as possible
  • Require little to none non-GUI configuration (and all such non-GUI config should be via advancedsettings.xml)
    • There is still a little work to be done here, for example RSS-feeds settings need to moved to the GUI
  • Look nice.

Development Catagory Sections

Development HOW-TO

If you are a programmer/developer but not have access to VS.NET and the XDK then you can work on XBMC for Linux, XBMC for Mac OS X, or XBMC for Windows (Win32), (or you can contribute indirectly by helping the FFmpeg project as all XBMC versions uses FFmpeg open source codec-libraries). See bellow for more information.

XBMC inner working and platform-independent HOW-TO guides

XBMC for Linux

FYI; XBMC for Linux is a port of XBMC for Xbox:

XBMC for Mac OS X

FYI; XBMC for Mac OS X is a sub-project of the *XBMC for Linux port project:

XBMC for Windows (Win32)

FYI; XBMC for Windows (Win32) is a sub-project of the *XBMC for Linux port project:

XBMC for Xbox

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!