Development: Difference between revisions

From Official Kodi Wiki
Jump to navigation Jump to search
>Gamester17
No edit summary
 
(75 intermediate revisions by 21 users not shown)
Line 1: Line 1:
{{XBMC faq toc Inline}}
{{Kodi_development_nav}}
 
{{mininav}}
'''[http://xbmc.org XBMC Media Center]''' (formerly named "''XBox Media Center''") is a [http://en.wikipedia.org/wiki/Free_and_open_source_software free and open source software (GPL)] [http://en.wikipedia.org/wiki/Cross-platform Cross-platform] media player and entertainment hub. Originally developed as [http://en.wikipedia.org/wiki/XBox_Media_Player XBox Media Player (XBMP)] for the first-generation [http://en.wikipedia.org/wiki/Xbox Xbox game console] in 2002, [http://xbmc.org XBMC Media Center] have since been ported many other operating-systems and hardware platforms so that it today runs natively under [[XBMC for Linux|Linux]], [[XBMC for Mac|Mac OS X]] (including Leopard, Tiger, and [[XBMC for Mac on Apple TV|Apple TV]]), and [[XBMC for Windows|Microsoft Windows]] operating-systems, on x86, x86-64, PPC (PowerPC) processor-architecture. There is also a bootable Live CD version of XBMC Media Center with embedded Linux that we call "[[XBMC Live]]".


__TOC__
__TOC__
__NOEDITSECTION__
{{-}}
 
== Topics ==
=Contributing to the XBMC project=
{{see also|Category:Development}}
Third-party developers/programmers can make and submit [[What_Is_Source_Code|source code]] patches/modules with new features, functions, or bug-fixes to us via our [http://trac.xbmc.org Tracker (Trac)] on this site.
{{development links}}
 
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 [http://en.wikipedia.org/wiki/C%2B%2B_(programming_language) 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 [http://en.wikipedia.org/wiki/Simple_DirectMedia_Layer SDL (Simple DirectMedia Layer) framework with OpenGL rendering] for all other operating-system platforms versions of XBMC, (ie. [[Developing XBMC for Linux|Linux]], [[Developing XBMC for Mac|Mac OS X]], and [[Developing XBMC for Windows|Windows]]).
 
The main XBMC program is developed using Microsoft [http://en.wikipedia.org/wiki/Microsoft_Visual_Studio Visual Studio] (or the free [http://www.microsoft.com/Express/ Visual Studio Express]) for the Windows and Xbox builds of XBMC, 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]] that is used for video playback on all other platforms, and an [[PAPlayer|in-house developed dedicated music-player core]] which works on all platforms.
 
Some of the XBMC libraries are in the C [http://en.wikipedia.org/wiki/Programming_language 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:
 
=Development Catagory Sections=
*[http://wiki.xbmc.org/index.php?title=Category:Inner_Workings XBMC Inner Workings]
*[http://wiki.xbmc.org/index.php?title=Category:Development Development]
*[http://wiki.xbmc.org/index.php?title=Category:Skin_Development Skin_Development]
 
=Development HOW-TO=
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 [[Developing XBMC for Linux|XBMC for Linux]], [[Developing XBMC for Mac|XBMC for Mac OS X]], or [[Developing XBMC for Windows|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 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 an official feature request]]
*[[HOW-TO help with Quality Assurance]]
*[[HOW-TO submit a patch|HOW-TO submit a patch (contribute 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]]
**[[Keyboard Internationalisation|Overview of input methods + code changes for multi keyboard language support]]
*[[Basic overview of the XBMC source code]]
*[[WebServerHTTP-API|The HTTP API (Web Server HTTPAPI)]]
*[[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]]
 
==XBMC for Linux==
FYI; '''XBMC for Linux''' is originally a port of '''[[XBMC for Xbox]]''', and today share code tree with XBMC for Mac ,and XBMC for Windows:
*[[Developing XBMC for Linux]]
*[[HOW-TO compile XBMC for Linux from source code]]


==XBMC for Mac==
== Source code ==
FYI; '''XBMC for Mac OS X''' is a sub-project of the *[[XBMC for Linux port project]], and today share code tree with XBMC for Linux ,and XBMC for Windows:
* See: https://github.com/xbmc/xbmc
*[[Developing XBMC for Mac]]
*[[HOW-TO compile XBMC for Mac OS X from source code]]


==XBMC for Windows==
== Development Tools ==
FYI; '''XBMC for Windows''' (Win32) is a sub-project of the *[[XBMC for Linux port project]], and today share code tree with XBMC for Linux ,and XBMC for Windows:
* [http://www.stack.nl/~dimitri/doxygen/ Doxygen] - Source code documentation generator tool.
*[[Developing XBMC for Windows]]
*[[HOW-TO compile XBMC for Windows from source code]]


==XBMC for Xbox==
== People who can help you with specific development areas of Kodi ==
*[[HOW-TO compile XBMC for Xbox from source code]]
Your first point of call is to post on the forum in the development section. This will attract the attention of the developer knowledgeable in the field you are working on.
*[[HOW-TO:_Compile_Mplayer.dll|HOW-TO compile mplayer.dll from source code]]


=XBMC programming and code formatting convention guidelines=
== Other tools and resources ==
:'''Note!''' More specifics to come based on ongoing discussions, see [http://forum.xbmc.org/showthread.php?t=5238 Proposed code formatting conventions for XBMC]
Though any other tools or resources are not required they can possibly help in development.
* Eclipse CDT Setup For XBMC Development
* [http://www.stack.nl/~dimitri/doxygen/ Doxygen] - Source code documentation generator tool.
* [http://valgrind.org Valgrind] (for Linux) - a free Linux programming tool for memory debugging, memory leak detection, and profiling.
* [http://www.daimi.au.dk/~sandmann/sysprof/ Sysprof] (for Linux) - a free System-wide Linux Profiler for tracking CPU usage. Sysprof is a sampling CPU profiler for Linux that uses a kernel module to profile the entire system, not just a single application. Sysprof handles shared libraries, and applications do not need to be recompiled. In fact they don't even have to be restarted. Just insert the kernel module and start sysprof.


==General coding guidelines==
== General guidelines ==
* Code documentation (DocBook, rst, or [http://www.doxygen.org doxygen] for the code documentation steps, preferably the latter, [http://www.doxygen.org doxygen]).
* Code documentation (DocBook, rst, or [http://www.doxygen.org doxygen] for the code documentation steps, preferably the latter, [http://www.doxygen.org doxygen])
**Like for example every field of public API structures should have a doxygen comment.
* Self-containment - Kodi should be as little dependent as possible on operating-system and third-party services/daemons/libraries
* Self-containment - XBMC should be as little dependent as possible on operating-system and third-party services/deamons/libraries
** Kodi should for example contain all file-system and network-client (like samba) support built-into the XBMC package
**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
* 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
** Kodi should still compile and run if a non-essential module/library is disabled or removed
* Aim for the GUI/interface to run smoothly on a low spec computer (less than 1Ghz)
* Aim for the GUI/interface to run smoothly on a low spec computer (single core with less than 1Ghz)
**3D graphic controller (GPU) will always be required hardware for XBMC so try to utilize the GPU as much as possible
** 3D graphic controller (GPU) will always be required hardware for Kodi 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).
* Avoid hard-disk trashing (excess read/write/erase cycles), so no hard-drive paging, (utilize RAM memory instead).
**End-users will be running XBMC and the operating-system on Solid-State memory as a [http://en.wikipedia.org/wiki/LiveDistro Live CD (LiveDistro)] of a USB-key
** End-users will be running Kodi and the operating-system on solid-State memory as a [http://en.wikipedia.org/wiki/LiveDistro 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)
* Fast load and boot times for end-user perception (other things can still run/start in the background without the user knowledge)
 
** 15-seconds or less from when the end user press the power-button on the computer till he/she can browse the GUI
==The code of conduct guidelines all XBMC developers is expected to abide by is==
* Promote open source - XBMC is based on the ideas and spirit of FOSS (free open source software) , licensed under the GPL and builds partly on other open source projects which we too do our best to support. The GPL should be respected at all times, and all code should be committed to the XBMC project’s SVN before any public binaries are released.
* Promote the sharing of knowledge and collaboration - Through the use of information sharing tools and practices XBMC is a collaborative environment.
* Understand that development is a team effort - Treating our users as co-developers has proven to be the most effective option for rapid development. Always strive to work as a team at all times. Actively promote discussion on new features and bug fixes, and respect others comments and criticisms with replies in a timely fashion.
* Apply the Law of Diminishing Return - The majority of the effort should be invested in implementing features which have the most benefit and widest general usage by the community.
* All code should strive to be platform agnostic - XBMC is a multi-platform software, thus any single platform specific features should be discussed with other team members before implemented, and software portability should always be kept in mind. All major code changes and new features and functions should be developed in a separate branch or committed in small increments so that other members have the opportunity to review the code on other platforms and be able to give feedback during development.===
 
==User-friendliness is next to godliness==
One of [[Team-XBMC]] major ongoing goal have always been to make XBMC and its [http://en.wikipedia.org/wiki/user_interface user interface] even more [http://en.wikipedia.org/wiki/intuitive intuitive] and [http://en.wikipedia.org/wiki/user-friendliness user-friendly] for its [http://en.wikipedia.org/wiki/End-user end-users], based on the '''KISS''' ('''K'''eep '''I'''t '''S'''imple '''S'''tupid) philosophy. We think that [http://en.wikipedia.org/wiki/Usability 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.
**Make common usage easy, simple '[http://en.wikipedia.org/wiki/Human-computer_interaction Human–Computer Interaction (HCI)]', from the viewpoint of an ordinary user.
*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.
 
=Contact methods=
These are developers forums for XBMC development, (programmers/coders only!).<br>
Respect, these are not for posting feature-requests or end-user support requests!
* IRC: [irc://irc.freenode.net/xbmc-linux #xbmc-linux on freenode] official [http://freenode.net IRC network channel] for the XBMC Linux port project
* 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
**(You may also sometimes find developers hanging out at [irc://irc.freenode.net/xbmc #xbmc on freenode])
* IRC: [irc://irc.freenode.net/xbmc-pvr #xbmc-pvr on freenode] for the [[GSoC - Unified PVR Frontend|Unified PVR front-end with EPG project]].
* [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 XBMC for Linux port Community-Forum for end-users (unmoderated so far)]
* [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 XBMC for Mac OS X port Community-Forum for end-users (unmoderated so far)]
* [http://forum.xbmc.org/forumdisplay.php?f=58 XBMC for Windows port Community-Forum for developers only]
** [http://forum.xbmc.org/forumdisplay.php?f=59 XBMC for Windows port Community-Forum for end-users (unmoderated so far)]
 
=Mentors=
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. Initial [[HOW-TO submit a patch|patches are welcome]], and can and will be merged by the team. If you wish to [[Apply to join the Official XBMC Development-Team|join the team in an official capacity]], please let us know.
 
==Linux, Mac OS X, and Windows port mentors and developers==
If you are a C/C++ programmer expert, porting specialist or guru and like to volunteer as a ''''third-party'''' mentor and/or developer then please let us know.
===Linux Mentors (also lead developers)===
* [[User:Yuvalt|Yuvalt]]: Everything Linux
* [[User:Vulkanr|Vulkanr]]: Everything Linux
* [[User:Jmarshall|JMarshall]]: Anything GUI related, Music Library, Video Library, PAPlayer, etc.
* [[User:D4rk|D4rk]]: OpenGL, other Linux stuff
* [[User:Elupus|Elupus]]: DllLoader, Mplayer and DVDPlayer
* [[User:Spiff|Spiff]]: Anything other than DllLoader/MPlayer/DVDPlayer internals.
* [[User:monkeyman 67156|monkeyman 67156]]: Everything Linux
* [[User:Topfs2|Topfs2]]: Everything Linux
* [[User:malloc|malloc]]: Everything Linux
====Mac OS X Mentors (also lead developers)====
* [[User:Davilla|Davilla]]: Everything Mac OS X
* [[User:D4rk|D4rk]]: OpenGL, other Mac OS X and Linux stuff
* [[User:malloc|malloc]]: Everything Mac OS X and Linux
* [[User:Vulkanr|Vulkanr]]: Everything Mac OS X and Linux
 
====Windows Mentors====
* [[User:WiSo|WiSo]]: Everything Win32 (SDL, not DirectX)
* [[User:Chadoe|Chadoe (a.k.a. Charly)]] - Everything Win32 (SDL, not DirectX)
* [[User:Jmarshall|JMarshall]]: Anything GUI related, Music Library, Video Library, PAPlayer, etc.


== Code guidelines and formatting conventions ==
[[Official:Code_guidelines_and_formatting_conventions|Official: Code guidelines and formatting conventions]]




== Contact methods ==
* IRC: [irc://irc.libera.chat:6697/kodi-dev #kodi-dev on LiberaChat] ([https://libera.chat/ LiberaChat]) focused on Kodi development | via [https://web.libera.chat/#kodi-dev Kodi-dev on Libera Webchat] | Generic Kodi support via IRC: [irc://irc.libera.chat:6697/kodi #kodi on LiberaChat].
* Forum: [https://forum.kodi.tv/forumdisplay.php?fid=93 Kodi Development Community Forum]
* [[HOW-TO:Submit_a_patch]] (where and how to submit source code)


[[category:Appendix]]
[[Category:Development]]
[[category:Inner Workings]]
[[Category:Skin development]]
[[category:Development]]
[[category:Skin Development]]
[[category:Linux]]
[[category:Mac OS X]]
[[category:Addons]]
[[category:Python]]
[[category:Plugins]]
[[category:To-Do]]
[[category:Google Summer of Code]]

Latest revision as of 10:55, 4 December 2021

Development:
Home icon grey.png   ▶ Development


Topics

Kodi development
Specific topics
Skinning
Add-ons

Source code

Development Tools

  • Doxygen - Source code documentation generator tool.

People who can help you with specific development areas of Kodi

Your first point of call is to post on the forum in the development section. This will attract the attention of the developer knowledgeable in the field you are working on.

Other tools and resources

Though any other tools or resources are not required they can possibly help in development.

  • Eclipse CDT Setup For XBMC Development
  • Doxygen - Source code documentation generator tool.
  • Valgrind (for Linux) - a free Linux programming tool for memory debugging, memory leak detection, and profiling.
  • Sysprof (for Linux) - a free System-wide Linux Profiler for tracking CPU usage. Sysprof is a sampling CPU profiler for Linux that uses a kernel module to profile the entire system, not just a single application. Sysprof handles shared libraries, and applications do not need to be recompiled. In fact they don't even have to be restarted. Just insert the kernel module and start sysprof.

General guidelines

  • Code documentation (DocBook, rst, or doxygen for the code documentation steps, preferably the latter, doxygen)
  • Self-containment - Kodi should be as little dependent as possible on operating-system and third-party services/daemons/libraries
    • Kodi 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
    • Kodi should still compile and run if a non-essential module/library is disabled or removed
  • Aim for the GUI/interface to run smoothly on a low spec computer (single core with less than 1Ghz)
    • 3D graphic controller (GPU) will always be required hardware for Kodi so try to utilize the GPU as much as possible
  • Avoid hard-disk trashing (excess read/write/erase cycles), so no hard-drive paging, (utilize RAM memory instead).
    • End-users will be running Kodi 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 things can still run/start in the background without the user knowledge)
    • 15-seconds or less from when the end user press the power-button on the computer till he/she can browse the GUI

Code guidelines and formatting conventions

Official: Code guidelines and formatting conventions


Contact methods