00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef KRADIO_SOUNDSTREAMCLIENT_INTERFACES_H
00027 #define KRADIO_SOUNDSTREAMCLIENT_INTERFACES_H
00028
00029 #ifdef HAVE_CONFIG_H
00030 #include <config.h>
00031 #endif
00032
00033 #include <kconfig.h>
00034 #include <qmap.h>
00035
00036 #include "interfaces.h"
00037 #include "soundformat.h"
00038 #include "soundstreamid.h"
00039 #include "sound_metadata.h"
00040
00041
00042 #define CALL_SNDSTR_SERVER(name, param, call) \
00043 inline int name param const { \
00044 return iConnections.count() ? iConnections.getFirst()->name call : 0; \
00045 }
00046
00047
00048 #define SIZE_T_DONT_CARE ((size_t)(-1))
00049
00050 class RadioStation;
00051
00052 INTERFACE(ISoundStreamServer, ISoundStreamClient)
00053 {
00054 friend class ISoundStreamClient;
00055 public:
00056 IF_CON_DESTRUCTOR(ISoundStreamServer, -1)
00057
00058 virtual void noticeConnectedI(cmplInterface *i, bool valid);
00059 virtual void noticeDisconnectedI(cmplInterface *i, bool valid);
00060
00061 virtual QMap<QString, ISoundStreamClient *> getPlaybackClients() const;
00062 virtual QMap<QString, QString> getPlaybackClientDescriptions() const;
00063 virtual QMap<QString, ISoundStreamClient *> getCaptureClients() const;
00064 virtual QMap<QString, QString> getCaptureClientDescriptions() const;
00065 virtual ISoundStreamClient *getSoundStreamClientWithID(const QString &id) const;
00066
00067 ANSWERS:
00068 virtual QPtrList<ISoundStreamClient> getPlaybackMixers() const;
00069 virtual QPtrList<ISoundStreamClient> getCaptureMixers() const;
00070
00071
00072 SENDERS:
00073 IF_SENDER_FINE ( notifyPlaybackChannelsChanged, (const QString &, const QStringList &) )
00074 IF_SENDER_FINE ( notifyCaptureChannelsChanged, (const QString &, const QStringList &) )
00075
00076 IF_SENDER_FINE ( sendPlaybackVolume, (SoundStreamID , float ) )
00077 IF_SENDER_FINE ( sendCaptureVolume, (SoundStreamID , float ) )
00078 IF_SENDER_FINE ( queryPlaybackVolume, (SoundStreamID , float &) )
00079 IF_SENDER_FINE ( queryCaptureVolume, (SoundStreamID , float &) )
00080 IF_SENDER_FINE ( notifyPlaybackVolumeChanged, (SoundStreamID , float ) )
00081 IF_SENDER_FINE ( notifyCaptureVolumeChanged, (SoundStreamID , float ) )
00082
00083 IF_SENDER_FINE ( notifyTrebleChanged, (SoundStreamID , float ) )
00084 IF_SENDER_FINE ( notifyBassChanged, (SoundStreamID , float ) )
00085 IF_SENDER_FINE ( notifyBalanceChanged, (SoundStreamID , float ) )
00086 IF_SENDER_FINE ( notifyMuted, (SoundStreamID , bool ) )
00087 IF_SENDER_FINE ( notifySignalQualityChanged, (SoundStreamID , float ) )
00088 IF_SENDER_FINE ( notifySignalQualityBoolChanged, (SoundStreamID , bool ) )
00089 IF_SENDER_FINE ( notifySignalMinQualityChanged, (SoundStreamID , float ) )
00090 IF_SENDER_FINE ( notifyStereoChanged, (SoundStreamID , bool ) )
00091
00092 IF_SENDER_FINE ( sendTreble, (SoundStreamID , float ) )
00093 IF_SENDER_FINE ( sendBass, (SoundStreamID , float ) )
00094 IF_SENDER_FINE ( sendBalance, (SoundStreamID , float ) )
00095 IF_SENDER_FINE ( sendMute, (SoundStreamID , bool mute = true) )
00096 IF_SENDER_FINE ( sendUnmute, (SoundStreamID , bool unmute = true) )
00097 IF_SENDER_FINE ( sendSignalMinQuality, (SoundStreamID , float ) )
00098 IF_SENDER_FINE ( sendStereo, (SoundStreamID , bool ) )
00099
00100 IF_SENDER_FINE ( queryTreble, (SoundStreamID , float &) )
00101 IF_SENDER_FINE ( queryBass, (SoundStreamID , float &) )
00102 IF_SENDER_FINE ( queryBalance, (SoundStreamID , float &) )
00103 IF_SENDER_FINE ( querySignalQuality, (SoundStreamID , float &) )
00104 IF_SENDER_FINE ( querySignalMinQuality, (SoundStreamID , float &) )
00105 IF_SENDER_FINE ( queryHasGoodQuality, (SoundStreamID , bool &) )
00106 IF_SENDER_FINE ( queryIsStereo, (SoundStreamID , bool &) )
00107 IF_SENDER_FINE ( queryIsMuted, (SoundStreamID , bool &) )
00108
00109
00110
00111 IF_SENDER_FINE ( sendReleasePlayback, (SoundStreamID id) )
00112 IF_SENDER_FINE ( sendReleaseCapture, (SoundStreamID id) )
00113
00114 IF_SENDER_FINE ( sendStartPlayback, (SoundStreamID id) )
00115 IF_SENDER_FINE ( sendPausePlayback, (SoundStreamID id) )
00116 IF_SENDER_FINE ( sendStopPlayback, (SoundStreamID id) )
00117 IF_SENDER_FINE ( queryIsPlaybackRunning, (SoundStreamID id, bool &) )
00118
00119
00120 IF_SENDER_FINE ( sendStartCaptureWithFormat, (SoundStreamID id,
00121 const SoundFormat &proposed_format,
00122 SoundFormat &real_format,
00123 bool force_format = false) )
00124 IF_SENDER_FINE ( sendStopCapture, (SoundStreamID id) )
00125 IF_SENDER_FINE ( queryIsCaptureRunning, (SoundStreamID id, bool &running, SoundFormat &sf))
00126
00127
00128
00129 IF_SENDER_FINE ( sendStartRecording, (SoundStreamID id) )
00130 IF_SENDER_FINE ( sendStartRecordingWithFormat, (SoundStreamID id,
00131 const SoundFormat &proposed_format,
00132 SoundFormat &real_format) )
00133 IF_SENDER_FINE ( sendStopRecording, (SoundStreamID id) )
00134 IF_SENDER_FINE ( queryIsRecordingRunning, (SoundStreamID id, bool &running, SoundFormat &sf))
00135
00136 IF_SENDER_FINE ( querySoundStreamDescription, (SoundStreamID id, QString &descr) )
00137 IF_SENDER_FINE ( querySoundStreamRadioStation, (SoundStreamID id, const RadioStation *&rs))
00138 IF_SENDER_FINE ( queryEnumerateSoundStreams, (QMap<QString, SoundStreamID> &) )
00139
00140 IF_SENDER_FINE ( notifySoundStreamCreated, (SoundStreamID id) )
00141 IF_SENDER_FINE ( notifySoundStreamClosed, (SoundStreamID id) )
00142 IF_SENDER_FINE ( notifySoundStreamRedirected, (SoundStreamID oldID, SoundStreamID newID) )
00143
00144
00145 IF_SENDER_FINE ( notifySoundStreamChanged, (SoundStreamID id) )
00146
00147 IF_SENDER_FINE ( notifySoundStreamData, (SoundStreamID , const SoundFormat &, const char *, size_t , size_t &, const SoundMetaData &) )
00148 IF_SENDER_FINE ( notifyReadyForPlaybackData, (SoundStreamID , size_t ) )
00149 };
00150
00151
00153
00154 INTERFACE(ISoundStreamClient, ISoundStreamServer)
00155 {
00156 public:
00157 ISoundStreamClient();
00158 virtual ~ISoundStreamClient();
00159
00160 cmplInterface *getSoundStreamServer() const { return m_Server; }
00161
00162
00163 virtual void noticeConnectedSoundClient(thisInterface *i, bool valid);
00164 virtual void noticeDisconnectedSoundClient(thisInterface *i, bool valid);
00165
00166 virtual void noticeConnectedI(cmplInterface *i, bool valid);
00167 virtual void noticeDisconnectedI(cmplInterface *i, bool valid);
00168
00169
00170
00171
00172
00173 RECEIVERS:
00174 IF_RECEIVER_EMPTY( preparePlayback(SoundStreamID , const QString &, bool , bool ) )
00175 IF_RECEIVER_EMPTY( prepareCapture(SoundStreamID , const QString &) )
00176 IF_RECEIVER_EMPTY( releasePlayback(SoundStreamID ) )
00177 IF_RECEIVER_EMPTY( releaseCapture(SoundStreamID ) )
00178
00179 ANSWERS:
00180 virtual bool supportsPlayback() const { return false; }
00181 virtual bool supportsCapture() const { return false; }
00182
00183 virtual const QString &getSoundStreamClientID() const;
00184 virtual QString getSoundStreamClientDescription() const { return QString::null; }
00185
00186 virtual QMap<QString, ISoundStreamClient *> getPlaybackClients() const;
00187 virtual QMap<QString, QString> getPlaybackClientDescriptions() const;
00188 virtual QMap<QString, ISoundStreamClient *> getCaptureClients() const;
00189 virtual QMap<QString, QString> getCaptureClientDescriptions() const;
00190 virtual ISoundStreamClient *getSoundStreamClientWithID(const QString &id) const;
00191
00192
00193
00194 QUERIES:
00195 IF_QUERY ( QPtrList<ISoundStreamClient> queryPlaybackMixers() );
00196 IF_QUERY ( QPtrList<ISoundStreamClient> queryCaptureMixers() );
00197
00198
00199 ANSWERS:
00200 virtual const QStringList &getPlaybackChannels() const;
00201 virtual const QStringList &getCaptureChannels() const;
00202
00203 RECEIVERS:
00204 IF_RECEIVER_EMPTY( noticePlaybackChannelsChanged(const QString & , const QStringList &) );
00205 IF_RECEIVER_EMPTY( noticeCaptureChannelsChanged (const QString & , const QStringList &) );
00206
00207
00208 RECEIVERS:
00209 IF_RECEIVER_EMPTY( setPlaybackVolume(SoundStreamID , float ) )
00210 IF_RECEIVER_EMPTY( setCaptureVolume(SoundStreamID , float ) )
00211 IF_RECEIVER_EMPTY( getPlaybackVolume(SoundStreamID , float &) const )
00212 IF_RECEIVER_EMPTY( getCaptureVolume(SoundStreamID , float &) const )
00213 IF_RECEIVER_EMPTY( noticePlaybackVolumeChanged(SoundStreamID , float ) )
00214 IF_RECEIVER_EMPTY( noticeCaptureVolumeChanged(SoundStreamID , float ) )
00215
00216 IF_RECEIVER_EMPTY( setTreble (SoundStreamID , float ) )
00217 IF_RECEIVER_EMPTY( setBass (SoundStreamID , float ) )
00218 IF_RECEIVER_EMPTY( setBalance (SoundStreamID , float ) )
00219 IF_RECEIVER_EMPTY( mute (SoundStreamID , bool ) )
00220 IF_RECEIVER_EMPTY( unmute (SoundStreamID , bool ) )
00221 IF_RECEIVER_EMPTY( setSignalMinQuality(SoundStreamID , float ) )
00222 IF_RECEIVER_EMPTY( setStereo(SoundStreamID , bool ) )
00223
00224 IF_RECEIVER_EMPTY( noticeTrebleChanged(SoundStreamID , float ) )
00225 IF_RECEIVER_EMPTY( noticeBassChanged(SoundStreamID , float ) )
00226 IF_RECEIVER_EMPTY( noticeBalanceChanged(SoundStreamID , float ) )
00227 IF_RECEIVER_EMPTY( noticeSignalQualityChanged(SoundStreamID , float ) )
00228 IF_RECEIVER_EMPTY( noticeSignalQualityChanged(SoundStreamID , bool ) )
00229 IF_RECEIVER_EMPTY( noticeSignalMinQualityChanged(SoundStreamID , float ) )
00230 IF_RECEIVER_EMPTY( noticeStereoChanged(SoundStreamID , bool ) )
00231 IF_RECEIVER_EMPTY( noticeMuted(SoundStreamID , bool ) )
00232
00233 IF_RECEIVER_EMPTY( getTreble (SoundStreamID , float &) const )
00234 IF_RECEIVER_EMPTY( getBass (SoundStreamID , float &) const )
00235 IF_RECEIVER_EMPTY( getBalance(SoundStreamID , float &) const )
00236 IF_RECEIVER_EMPTY( isMuted(SoundStreamID , bool &) const )
00237 IF_RECEIVER_EMPTY( getSignalQuality(SoundStreamID , float &) const )
00238 IF_RECEIVER_EMPTY( getSignalMinQuality(SoundStreamID , float &) const )
00239 IF_RECEIVER_EMPTY( hasGoodQuality(SoundStreamID , bool &) const )
00240 IF_RECEIVER_EMPTY( isStereo(SoundStreamID , bool &) const )
00241
00242
00243
00244 RECEIVERS:
00245 IF_RECEIVER_EMPTY( startPlayback(SoundStreamID ) )
00246 IF_RECEIVER_EMPTY( pausePlayback(SoundStreamID ) )
00247 IF_RECEIVER_EMPTY( stopPlayback(SoundStreamID ) )
00248 IF_RECEIVER_EMPTY( isPlaybackRunning(SoundStreamID , bool &) const )
00249
00250
00251 IF_RECEIVER_EMPTY( startCaptureWithFormat(SoundStreamID ,
00252 const SoundFormat &,
00253 SoundFormat &,
00254 bool = false) )
00255 IF_RECEIVER_EMPTY( stopCapture(SoundStreamID ) )
00256 IF_RECEIVER_EMPTY( isCaptureRunning(SoundStreamID , bool &, SoundFormat &) const )
00257
00258 IF_RECEIVER_EMPTY( startRecording(SoundStreamID ) )
00259 IF_RECEIVER_EMPTY( startRecordingWithFormat(SoundStreamID ,
00260 const SoundFormat &,
00261 SoundFormat &) )
00262 IF_RECEIVER_EMPTY( stopRecording(SoundStreamID ) )
00263 IF_RECEIVER_EMPTY( isRecordingRunning(SoundStreamID , bool &, SoundFormat &) const )
00264
00265 IF_RECEIVER_EMPTY( getSoundStreamDescription(SoundStreamID , QString &) const )
00266 IF_RECEIVER_EMPTY( getSoundStreamRadioStation(SoundStreamID , const RadioStation *&) const )
00267
00268 IF_RECEIVER_EMPTY( enumerateSoundStreams(QMap<QString, SoundStreamID> &) const )
00269
00270 IF_RECEIVER_EMPTY( noticeSoundStreamCreated(SoundStreamID ) )
00271 IF_RECEIVER_EMPTY( noticeSoundStreamClosed(SoundStreamID ) )
00272 IF_RECEIVER_EMPTY( noticeSoundStreamRedirected(SoundStreamID , SoundStreamID ) )
00273
00274
00275 IF_RECEIVER_EMPTY( noticeSoundStreamChanged(SoundStreamID ) )
00276
00277 IF_RECEIVER_EMPTY( noticeSoundStreamData(SoundStreamID , const SoundFormat &, const char *, size_t , size_t &, const SoundMetaData &))
00278 IF_RECEIVER_EMPTY( noticeReadyForPlaybackData(SoundStreamID , size_t ) )
00279
00280 SENDERS:
00281 CALL_SNDSTR_SERVER ( notifyPlaybackChannelsChanged, (const QString &client_id, const QStringList &map), (client_id, map) )
00282 CALL_SNDSTR_SERVER ( notifyCaptureChannelsChanged, (const QString &client_id, const QStringList &map), (client_id, map) )
00283
00284 CALL_SNDSTR_SERVER ( sendPlaybackVolume, (SoundStreamID id, float volume), (id, volume) )
00285 CALL_SNDSTR_SERVER ( sendCaptureVolume, (SoundStreamID id, float volume), (id, volume) )
00286 CALL_SNDSTR_SERVER ( queryPlaybackVolume, (SoundStreamID id, float &volume), (id, volume) )
00287 CALL_SNDSTR_SERVER ( queryCaptureVolume, (SoundStreamID id, float &volume), (id, volume) )
00288 CALL_SNDSTR_SERVER ( notifyPlaybackVolumeChanged, (SoundStreamID id, float volume), (id, volume) )
00289 CALL_SNDSTR_SERVER ( notifyCaptureVolumeChanged, (SoundStreamID id, float volume), (id, volume) )
00290
00291 CALL_SNDSTR_SERVER ( notifyTrebleChanged, (SoundStreamID id, float v), (id, v) )
00292 CALL_SNDSTR_SERVER ( notifyBassChanged, (SoundStreamID id, float v), (id, v) )
00293 CALL_SNDSTR_SERVER ( notifyBalanceChanged, (SoundStreamID id, float v), (id, v) )
00294 CALL_SNDSTR_SERVER ( notifyMuted, (SoundStreamID id, bool m), (id, m) )
00295 CALL_SNDSTR_SERVER ( notifySignalQualityChanged, (SoundStreamID id, float q), (id, q) )
00296 CALL_SNDSTR_SERVER ( notifySignalQualityBoolChanged, (SoundStreamID id, bool good), (id, good) )
00297 CALL_SNDSTR_SERVER ( notifySignalMinQualityChanged, (SoundStreamID id, float q), (id, q) )
00298 CALL_SNDSTR_SERVER ( notifyStereoChanged, (SoundStreamID id, bool s), (id, s) )
00299
00300 CALL_SNDSTR_SERVER ( sendTreble , (SoundStreamID id, float v), (id, v) )
00301 CALL_SNDSTR_SERVER ( sendBass , (SoundStreamID id, float v), (id, v) )
00302 CALL_SNDSTR_SERVER ( sendBalance , (SoundStreamID id, float v), (id, v) )
00303 CALL_SNDSTR_SERVER ( sendMute , (SoundStreamID id, bool mute = true), (id, mute) )
00304 CALL_SNDSTR_SERVER ( sendUnmute , (SoundStreamID id, bool unmute = true), (id, unmute) )
00305 CALL_SNDSTR_SERVER ( sendSignalMinQuality , (SoundStreamID id, float q), (id, q) )
00306 CALL_SNDSTR_SERVER ( sendStereo, (SoundStreamID id, bool s), (id, s) )
00307
00308 CALL_SNDSTR_SERVER ( queryTreble, (SoundStreamID id, float &v), (id, v) )
00309 CALL_SNDSTR_SERVER ( queryBass, (SoundStreamID id, float &v), (id, v) )
00310 CALL_SNDSTR_SERVER ( queryBalance, (SoundStreamID id, float &v), (id, v) )
00311 CALL_SNDSTR_SERVER ( querySignalQuality, (SoundStreamID id, float &v), (id, v) )
00312 CALL_SNDSTR_SERVER ( querySignalMinQuality, (SoundStreamID id, float &v), (id, v) )
00313 CALL_SNDSTR_SERVER ( queryHasGoodQuality, (SoundStreamID id, bool &v), (id, v) )
00314 CALL_SNDSTR_SERVER ( queryIsStereo, (SoundStreamID id, bool &v), (id, v) )
00315 CALL_SNDSTR_SERVER ( queryIsMuted, (SoundStreamID id, bool &v), (id, v) )
00316
00317
00318
00319 CALL_SNDSTR_SERVER ( sendReleasePlayback, (SoundStreamID id), (id) )
00320 CALL_SNDSTR_SERVER ( sendReleaseCapture, (SoundStreamID id), (id) )
00321
00322 CALL_SNDSTR_SERVER ( sendStartPlayback, (SoundStreamID id), (id) )
00323 CALL_SNDSTR_SERVER ( sendPausePlayback, (SoundStreamID id), (id) )
00324 CALL_SNDSTR_SERVER ( sendStopPlayback, (SoundStreamID id), (id) )
00325 CALL_SNDSTR_SERVER ( queryIsPlaybackRunning, (SoundStreamID id, bool &b), (id, b) )
00326
00327
00328 CALL_SNDSTR_SERVER ( sendStartCaptureWithFormat, (SoundStreamID id,
00329 const SoundFormat &proposed_format,
00330 SoundFormat &real_format,
00331 bool force_format = false), (id, proposed_format, real_format, force_format) )
00332 CALL_SNDSTR_SERVER ( sendStopCapture, (SoundStreamID id), (id) )
00333 CALL_SNDSTR_SERVER ( queryIsCaptureRunning, (SoundStreamID id, bool &b, SoundFormat &sf), (id, b, sf) )
00334
00335 CALL_SNDSTR_SERVER ( sendStartRecording, (SoundStreamID id), (id) )
00336 CALL_SNDSTR_SERVER ( sendStartRecordingWithFormat, (SoundStreamID id,
00337 const SoundFormat &proposed_format,
00338 SoundFormat &real_format), (id, proposed_format, real_format) )
00339 CALL_SNDSTR_SERVER ( sendStopRecording, (SoundStreamID id), (id) )
00340 CALL_SNDSTR_SERVER ( queryIsRecordingRunning, (SoundStreamID id, bool &b, SoundFormat &sf), (id, b, sf) )
00341
00342 CALL_SNDSTR_SERVER ( querySoundStreamDescription, (SoundStreamID id, QString &descr), (id, descr) )
00343 CALL_SNDSTR_SERVER ( querySoundStreamRadioStation,(SoundStreamID id, const RadioStation *&rs), (id, rs) )
00344
00345 CALL_SNDSTR_SERVER ( queryEnumerateSoundStreams, (QMap<QString, SoundStreamID> &list), (list) )
00346
00347 CALL_SNDSTR_SERVER ( notifySoundStreamCreated, (SoundStreamID id), (id) )
00348 CALL_SNDSTR_SERVER ( notifySoundStreamClosed, (SoundStreamID id), (id) )
00349 CALL_SNDSTR_SERVER ( notifySoundStreamRedirected, (SoundStreamID oldID, SoundStreamID newID), (oldID, newID) )
00350
00351
00352 CALL_SNDSTR_SERVER ( notifySoundStreamChanged, (SoundStreamID id), (id) )
00353
00354 CALL_SNDSTR_SERVER ( notifySoundStreamData, (SoundStreamID id, const SoundFormat &f, const char *data, size_t size, size_t consumed_size, const SoundMetaData &md), (id, f, data, size, consumed_size, md) )
00355 CALL_SNDSTR_SERVER ( notifyReadyForPlaybackData, (SoundStreamID id, size_t size), (id, size) )
00356
00357 protected:
00358
00359 SoundStreamID createNewSoundStream(bool notify = true) const;
00360 SoundStreamID createNewSoundStream(SoundStreamID old_id, bool notify = true) const;
00361 void closeSoundStream(SoundStreamID id, bool notify = true);
00362
00363 static QString createNewSoundStreamClientID();
00364 void setSoundStreamClientID(const QString &s);
00365
00366 QString m_SoundStreamClientID;
00367
00368 cmplInterface *m_Server;
00369 };
00370
00371
00372 #endif