/** \mainpage Phonon Backend Interface


\section phonon_backend_development Backend Development
If you want to write a new backend for %Phonon this is for you:
\li \ref phonon_backend_development_page "Phonon Backend Development"
\li \ref Backend

\authors
Matthias Kretz \<kretz@kde.org\>

\maintainers
Matthias Kretz \<kretz@kde.org\>

\licenses
\lgpl








\page phonon_tut1 Phonon Tutorial Part 1: a simple audio player

<p><b>
\ref index "Overview" |
Application Example |
\ref phonon_backend_development_page "Backend Development"
</b></p>

\includelineno tutorial2.cpp








\page phonon_backend_development_page Phonon Backend Development

<p><b>
\ref index "Overview" |
\ref phonon_tut1 "Application Example" |
Backend Development
</b></p>

The backend is the most important part in %Phonon to provide functionality. This
document will get you started how backends work, how to start development of a
new backend and how to understand existing backend code.

\section phonon_backend_introduction Introduction

The first step is to understand how the %Phonon frontend calls the backend: In
the frontend objects all backend objects are "only" QObjects. But QObject has
powerful introspection capabilities that %Phonon uses to call methods in the
backend. If you're interested look at \ref QMetaObject::invokeMethod. In order
to make sure that a backend is fully operational (there are no abstract classes
that tell the backend developer what method signatures are wrong or what
methods are missing) there are two test programs compiled with kdelibs (if
KDE4_BUILD_TESTS is set in cmake) that inspects the backend.

In short that requires the backend classes to inherit from QObject and to make
all methods that are to be called from the frontend slots or prefixed with
Q_INVOKABLE (the latter doesn't work reliable with Qt 4.1.3 at least, so you
should simply make those methods slots).

\section phonon_backend_classes The Backend Classes

The central class that needs to be implemented is the backend factory class,
throughout this documentation simply called Backend:

\li \ref phonon_Backend "Backend"

\subsection phonon_mediaproducingclasses The classes producing media data (sources)

\li \ref Phonon::MediaObjectInterface "common methods/signals for media producing classes"
\li \ref phonon_MediaObject "MediaObject"

\subsection phonon_pathclass The path class

\li \ref phonon_Path "Path"

\subsection phonon_outputclasses The output classes
\li \ref phonon_AudioDataOutput "AudioDataOutput"
\li \ref phonon_AudioOutput "AudioOutput"
\li \ref phonon_VideoDataOutput "VideoDataOutput"
\li \ref phonon_VideoWidget "VideoWidget"

\subsection phonon_EffectClasses The effect classes

\li \ref phonon_Effect "Effect"
\li \ref phonon_Visualization "Visualization"
\li \ref phonon_VolumeFaderEffect "VolumeFaderEffect"

*/
// DOXYGEN_REFERENCES = phonon
// DOXYGEN_SET_EXPAND_AS_DEFINED = PHONON_OBJECT PHONON_HEIR PHONON_INTERFACE_GETTER
// DOXYGEN_SET_HIDE_SCOPE_NAMES = YES
// DOXYGEN_SET_HIDE_FRIEND_COMPOUNDS = YES
// DOXYGEN_SET_PROJECT_NAME = Backend
// DOXYGEN_SET_EXTRACT_ALL = NO
// DOXYGEN_SET_HIDE_UNDOC_MEMBERS = YES
// DOXYGEN_SET_SOURCE_BROWSER = NO
// DOXYGEN_SET_INPUT = @topdir@/phonon/phonon
// DOXYGEN_SET_FILE_PATTERNS = *interface.h */phonon/backend/Mainpage.dox */backend.dox
// vim: tw=100 ts=4 sw=4 expandtab filetype=doxygen
