2
* Copyright (C) 2008-2009 Barracuda Networks, Inc.
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) any later version.
9
* This library is distributed in the hope that it will be useful,
10
* but WITHANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* Lesser General Public License for more details.
14
* You should have received a copy of the GNU Lesser General Public
15
* License along with this library; if not, write to the Free Software
16
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21
#ifndef PSIMEDIAPROVIDER_H
22
#define PSIMEDIAPROVIDER_H
38
// since we cannot put signals/slots in Qt "interfaces", we use the following
39
// defines to hint about signals/slots that derived classes should provide
40
#define HINT_SIGNALS protected
41
#define HINT_PUBLIC_SLOTS public
42
#define HINT_METHOD(x)
47
class FeaturesContext;
48
class RtpSessionContext;
54
virtual Provider *createProvider() = 0;
57
class QObjectInterface
60
virtual ~QObjectInterface() {}
62
virtual QObject *qobject() = 0;
88
inline PAudioParams() :
103
inline PVideoParams() :
112
QList<PDevice> audioOutputDevices;
113
QList<PDevice> audioInputDevices;
114
QList<PDevice> videoInputDevices;
115
QList<PAudioParams> supportedAudioModes;
116
QList<PVideoParams> supportedVideoModes;
135
QList<Parameter> parameters;
137
inline PPayloadInfo() :
153
inline PRtpPacket() :
159
class Provider : public QObjectInterface
162
virtual bool init(const QString &resourcePath) = 0;
163
virtual QString creditName() = 0;
164
virtual QString creditText() = 0;
166
virtual FeaturesContext *createFeatures() = 0;
167
virtual RtpSessionContext *createRtpSession() = 0;
170
class FeaturesContext : public QObjectInterface
182
virtual void lookup(int types) = 0;
183
virtual bool waitForFinished(int msecs) = 0; // -1 = no timeout
184
virtual PFeatures results() const = 0;
187
HINT_METHOD(finished())
190
class RtpChannelContext : public QObjectInterface
193
virtual void setEnabled(bool b) = 0;
195
virtual int packetsAvailable() const = 0;
196
virtual PRtpPacket read() = 0;
197
virtual void write(const PRtpPacket &rtp) = 0;
200
HINT_METHOD(readyRead())
201
HINT_METHOD(packetsWritten(int count))
205
class VideoWidgetContext : public QObjectInterface
208
virtual QWidget *qwidget() = 0;
210
// this function causes VideoWidget::videoSizeChanged() to be emitted
211
virtual void setVideoSize(const QSize &size) = 0;
214
HINT_METHOD(resized(const QSize &newSize))
216
// listener must use a direct connection and paint during the signal
217
HINT_METHOD(paintEvent(QPainter *p))
221
class RtpSessionContext : public QObjectInterface
231
virtual void setAudioOutputDevice(const QString &deviceId) = 0;
232
virtual void setAudioInputDevice(const QString &deviceId) = 0;
233
virtual void setVideoInputDevice(const QString &deviceId) = 0;
234
virtual void setFileInput(const QString &fileName) = 0;
235
virtual void setFileDataInput(const QByteArray &fileData) = 0;
236
virtual void setFileLoopEnabled(bool enabled) = 0;
239
virtual void setVideoOutputWidget(VideoWidgetContext *widget) = 0;
240
virtual void setVideoPreviewWidget(VideoWidgetContext *widget) = 0;
243
virtual void setRecorder(QIODevice *recordDevice) = 0;
244
virtual void stopRecording() = 0;
246
virtual void setLocalAudioPreferences(const QList<PAudioParams> ¶ms) = 0;
247
virtual void setLocalVideoPreferences(const QList<PVideoParams> ¶ms) = 0;
249
virtual void setMaximumSendingBitrate(int kbps) = 0;
251
virtual void setRemoteAudioPreferences(const QList<PPayloadInfo> &info) = 0;
252
virtual void setRemoteVideoPreferences(const QList<PPayloadInfo> &info) = 0;
254
virtual void start() = 0;
255
virtual void updatePreferences() = 0;
257
virtual void transmitAudio() = 0;
258
virtual void transmitVideo() = 0;
260
virtual void pauseAudio() = 0;
261
virtual void pauseVideo() = 0;
262
virtual void stop() = 0;
264
virtual QList<PPayloadInfo> localAudioPayloadInfo() const = 0;
265
virtual QList<PPayloadInfo> localVideoPayloadInfo() const = 0;
266
virtual QList<PPayloadInfo> remoteAudioPayloadInfo() const = 0;
267
virtual QList<PPayloadInfo> remoteVideoPayloadInfo() const = 0;
269
virtual QList<PAudioParams> audioParams() const = 0;
270
virtual QList<PVideoParams> videoParams() const = 0;
272
virtual bool canTransmitAudio() const = 0;
273
virtual bool canTransmitVideo() const = 0;
275
virtual int outputVolume() const = 0; // 0 (mute) to 100
276
virtual void setOutputVolume(int level) = 0;
278
virtual int inputVolume() const = 0; // 0 (mute) to 100
279
virtual void setInputVolume(int level) = 0;
281
virtual Error errorCode() const = 0;
283
virtual RtpChannelContext *audioRtpChannel() = 0;
284
virtual RtpChannelContext *videoRtpChannel() = 0;
287
HINT_METHOD(started())
288
HINT_METHOD(preferencesUpdated())
289
HINT_METHOD(audioOutputIntensityChanged(int intensity))
290
HINT_METHOD(audioInputIntensityChanged(int intensity))
291
HINT_METHOD(stoppedRecording())
292
HINT_METHOD(stopped())
293
HINT_METHOD(finished()) // for file playback only
299
Q_DECLARE_INTERFACE(PsiMedia::Plugin, "org.psi-im.psimedia.Plugin/1.0")
300
Q_DECLARE_INTERFACE(PsiMedia::Provider, "org.psi-im.psimedia.Provider/1.0")
301
Q_DECLARE_INTERFACE(PsiMedia::FeaturesContext, "org.psi-im.psimedia.FeaturesContext/1.0")
302
Q_DECLARE_INTERFACE(PsiMedia::RtpChannelContext, "org.psi-im.psimedia.RtpChannelContext/1.0")
303
Q_DECLARE_INTERFACE(PsiMedia::RtpSessionContext, "org.psi-im.psimedia.RtpSessionContext/1.0")