1/* This file is part of the KDE project
2 Copyright (C) 2004-2007 Matthias Kretz <kretz@kde.org>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) version 3, or any
8 later version accepted by the membership of KDE e.V. (or its
9 successor approved by the membership of KDE e.V.), Nokia Corporation
10 (or its successors, if any) and the KDE Free Qt Foundation, which shall
11 act as a proxy defined in Section 6 of version 3 of the license.
12
13 This library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public
19 License along with this library. If not, see <http://www.gnu.org/licenses/>.
20
21*/
22
23#ifndef PHONON_FACTORY_P_H
24#define PHONON_FACTORY_P_H
25
26#include "phonon_export.h"
27
28#include <QtCore/QObject>
29#include <QtCore/QStringList>
30
31QT_BEGIN_HEADER
32QT_BEGIN_NAMESPACE
33
34class QUrl;
35class QIcon;
36
37namespace Phonon
38{
39 class PlatformPlugin;
40 class MediaNodePrivate;
41 class AbstractMediaStream;
42
43/**
44 * \internal
45 * \brief Factory to access the preferred Backend.
46 *
47 * This class is used internally to get the backend's implementation.
48 * It keeps track of the objects that were created. When a
49 * request for a backend change comes, it asks all frontend objects to delete
50 * their backend objects and then checks whether they were all deleted. Only
51 * then the old backend is unloaded and the new backend is loaded.
52 *
53 * \author Matthias Kretz <kretz@kde.org>
54 */
55namespace Factory
56{
57 /**
58 * Emits signals for Phonon::Factory.
59 */
60 class Sender : public QObject
61 {
62 Q_OBJECT
63 Q_SIGNALS:
64 /**
65 * Emitted after the backend has successfully been changed.
66 */
67 void backendChanged();
68
69 /**
70 * \copydoc BackendCapabilities::Notifier::availableAudioOutputDevicesChanged
71 */
72 void availableAudioOutputDevicesChanged();
73
74 /**
75 * \copydoc BackendCapabilities::Notifier::availableAudioCaptureDevicesChanged
76 */
77 void availableAudioCaptureDevicesChanged();
78 };
79
80 /**
81 * Returns a pointer to the object emitting the signals.
82 *
83 * \see Sender::backendChanged()
84 */
85 PHONON_EXPORT Sender *sender();
86
87 /**
88 * Create a new backend object for a MediaObject.
89 *
90 * \return a pointer to the MediaObject the backend provides.
91 */
92 QObject *createMediaObject(QObject *parent = 0);
93 /**
94 * Create a new backend object for a Effect.
95 *
96 * \return a pointer to the Effect the backend provides.
97 */
98#ifndef QT_NO_PHONON_EFFECT
99 QObject *createEffect(int effectId, QObject *parent = 0);
100#endif //QT_NO_PHONON_EFFECT
101 /**
102 * Create a new backend object for a VolumeFaderEffect.
103 *
104 * \return a pointer to the VolumeFaderEffect the backend provides.
105 */
106#ifndef QT_NO_PHONON_VOLUMEFADEREFFECT
107 QObject *createVolumeFaderEffect(QObject *parent = 0);
108#endif //QT_NO_PHONON_VOLUMEFADEREFFECT
109 /**
110 * Create a new backend object for a AudioOutput.
111 *
112 * \return a pointer to the AudioOutput the backend provides.
113 */
114 QObject *createAudioOutput(QObject *parent = 0);
115 /**
116 * Create a new backend object for a VideoWidget.
117 *
118 * \return a pointer to the VideoWidget the backend provides.
119 */
120#ifndef QT_NO_PHONON_VIDEO
121 QObject *createVideoWidget(QObject *parent = 0);
122#endif //QT_NO_PHONON_VIDEO
123
124 /**
125 * Create a new backend object for a AudioDataOutput.
126 *
127 * \return a pointer to the AudioDataOutput the backend provides.
128 */
129 PHONON_EXPORT QObject *createAudioDataOutput(QObject *parent = 0);
130
131 /**
132 * \return a pointer to the backend interface.
133 */
134 PHONON_EXPORT QObject *backend(bool createWhenNull = true);
135
136 /**
137 * Unique identifier for the Backend. Can be used in configuration files
138 * for example.
139 */
140 QString identifier();
141
142 /**
143 * Get the name of the Backend. It's the name from the .desktop file.
144 */
145 PHONON_EXPORT QString backendName();
146
147 /**
148 * Get the comment of the Backend. It's the comment from the .desktop file.
149 */
150 QString backendComment();
151
152 /**
153 * Get the version of the Backend. It's the version from the .desktop file.
154 *
155 * The version is especially interesting if there are several versions
156 * available for binary incompatible versions of the backend's media
157 * framework.
158 */
159 QString backendVersion();
160
161 /**
162 * Get the icon (name) of the Backend. It's the icon from the .desktop file.
163 */
164 QString backendIcon();
165
166 /**
167 * Get the website of the Backend. It's the website from the .desktop file.
168 */
169 QString backendWebsite();
170
171 /**
172 * registers the backend object
173 */
174 PHONON_EXPORT QObject *registerQObject(QObject *o);
175
176 bool isMimeTypeAvailable(const QString &mimeType);
177
178 PHONON_EXPORT void registerFrontendObject(MediaNodePrivate *);
179 PHONON_EXPORT void deregisterFrontendObject(MediaNodePrivate *);
180
181 PHONON_EXPORT void setBackend(QObject *);
182 //PHONON_EXPORT void createBackend(const QString &library, const QString &version = QString());
183
184 PHONON_EXPORT PlatformPlugin *platformPlugin();
185
186//X It is probably better if we can get away with internal handling of
187//X freeing the soundcard device when it's not needed anymore and
188//X providing an IPC method to stop all MediaObjects -> free all
189//X devices
190//X /**
191//X * \internal
192//X * This is called when the application needs to free the soundcard
193//X * device(s).
194//X */
195//X void freeSoundcardDevices();
196} // namespace Factory
197} // namespace Phonon
198
199QT_END_NAMESPACE
200QT_END_HEADER
201
202#endif // PHONON_FACTORY_P_H
203// vim: sw=4 ts=4
204