34 #ifndef OPAL_OPAL_OPALMIXER_H
35 #define OPAL_OPAL_OPALMIXER_H
47 #include <ptclib/threadpool.h>
58 #define OPAL_OPT_LISTEN_ONLY "Listen-Only"
195 bool pushThread =
true,
237 unsigned minJitterDelay,
238 unsigned maxJitterDelay
314 bool pushThread =
true
390 ,
m_width(PVideoFrameInfo::CIFWidth)
391 ,
m_height(PVideoFrameInfo::CIFHeight)
469 virtual PSafePtr<OpalMixerNode>
AddNode(
481 PSafetyMode mode = PSafeReference
482 )
const {
return PSafePtr<OpalMixerNode>(
m_nodesByUID, mode); }
487 virtual PSafePtr<OpalMixerNode>
FindNode(
488 const PString & name,
489 PSafetyMode mode = PSafeReference
523 const PSafePtr<OpalMixerNode> & node,
525 const PString & value
535 const PSafePtr<OpalMixerNode> & node,
537 const PString & value
628 const PString & party,
629 void * userData = NULL,
630 unsigned options = 0,
650 const PString & token,
651 PSafetyMode mode = PSafeReadWrite
652 ) {
return GetConnectionWithLockAs<OpalMixerConnection>(token, mode); }
658 PSafePtr<OpalMixerNode> node,
673 PSafePtr<OpalMixerNode>
AddNode(
691 PSafetyMode mode = PSafeReference
698 const PString & name,
699 PSafetyMode mode = PSafeReference
770 PSafePtr<OpalMixerNode> node,
774 unsigned options = 0,
848 const PString & value
869 unsigned duration = 0
913 PSafePtr<OpalMixerNode> node,
926 virtual PBoolean
Open();
1065 unsigned minJitterDelay,
1066 unsigned maxJitterDelay
1083 #endif // OPAL_VIDEO
1089 const PString & value
1106 const PString & name
1112 const PString & name
1124 template <
class Sub
class>
1126 PSafetyMode mode = PSafeReference
1132 PSafetyMode mode = PSafeReference
1133 )
const {
return GetFirstConnectionAs<OpalConnection>(mode); }
1180 PSafePtr<OpalMixerMediaStream> & stream,
1182 const short * audioToSubtract
1184 #ifdef OPAL_MIXER_AUDIO_DEBUG
1185 class PAudioMixerDebug * m_audioDebug;
1201 #endif // OPAL_VIDEO
1205 #endif // OPAL_OPAL_OPAL_MIXER
OpalAudioMixer(bool stereo=false, unsigned sampleRate=OpalMediaFormat::AudioClockRate, bool pushThread=true, unsigned period=10)
bool m_mediaPassThru
Definition: opalmixer.h:411
PSafePtr< OpalMixerNode > GetFirstNode(PSafetyMode mode=PSafeReference) const
Definition: opalmixer.h:480
Styles
Definition: opalmixer.h:288
std::map< Key_T, Stream * > StreamMap_T
Definition: opalmixer.h:158
AudioStream * m_right
Definition: opalmixer.h:270
virtual PBoolean GarbageCollection()
void PushOne(PSafePtr< OpalMixerMediaStream > &stream, CachedAudio &cache, const short *audioToSubtract)
bool m_audioOnly
No video is to be allowed.
Definition: opalmixer.h:405
PTime m_creationTime
Definition: opalmixer.h:1151
Definition: opalmixer.h:153
Definition: opalmixer.h:1162
PDictionary< PString, OpalMixerNode > m_nodesByName
Definition: opalmixer.h:531
const OpalMixerNodeManager & GetNodeManager() const
Definition: opalmixer.h:747
Definition: localep.h:360
void QueueUserInput(const PSafePtr< OpalMixerNode > &node, const OpalMixerConnection *connection, const PString &value)
PSafePtr< OpalMixerNode > GetFirstNode(PSafetyMode mode=PSafeReference) const
Definition: opalmixer.h:690
virtual Stream * CreateStream()=0
bool m_pushThread
Definition: opalmixer.h:167
OpalAudioMixer & m_mixer
Definition: opalmixer.h:250
bool SetFrameRate(unsigned rate)
PBYTEArray m_frameStore
Definition: opalmixer.h:367
bool SetJitterBufferSize(const OpalBaseMixer::Key_T &key, unsigned minJitterDelay, unsigned maxJitterDelay)
Definition: opalmixer.h:1063
bool WriteAudio(const OpalBaseMixer::Key_T &key, const RTP_DataFrame &input)
Definition: opalmixer.h:1071
virtual Stream * CreateStream()
bool m_listenOnly
Mixer only transmits data to "listeners".
Definition: opalmixer.h:402
PQueuedThreadPool< UserInput > m_userInputPool
Definition: opalmixer.h:549
virtual OpalMixerNode * CreateNode(OpalMixerNodeInfo *info)
virtual PBoolean GarbageCollection()
PSafePtr< OpalMixerNode > GetNode() const
Definition: opalmixer.h:887
PSafePtr< OpalConnection > GetFirstConnection(PSafetyMode mode=PSafeReference) const
Definition: opalmixer.h:1131
BYTE m_bgFillGreen
Definition: opalmixer.h:365
unsigned m_width
Width of mixed video.
Definition: opalmixer.h:407
OpalJitterBuffer * m_jitter
Definition: opalmixer.h:251
PSafeDictionary< PGloballyUniqueID, OpalMixerNode > m_nodesByUID
Definition: opalmixer.h:530
void StopPushThread(bool lock=true)
Definition: opalmixer.h:347
AudioStream * m_left
Definition: opalmixer.h:269
unsigned m_height
Height of mixed video.
Definition: opalmixer.h:408
bool m_stereo
Definition: opalmixer.h:266
PMutex m_mutex
Definition: opalmixer.h:176
Styles m_style
Definition: opalmixer.h:363
virtual Stream * CreateStream()
PThread * m_workerThread
Definition: opalmixer.h:174
~OpalAudioMixer()
Definition: opalmixer.h:199
PSafePtr< OpalMixerNode > AddNode(OpalMixerNodeInfo *info)
Definition: opalmixer.h:1172
OpalMixerNodeInfo * m_adHocNodeInfo
Definition: opalmixer.h:752
OpalVideoMixer & m_mixer
Definition: opalmixer.h:353
OpalMixerNodeManager & GetNodeManager()
Definition: opalmixer.h:748
AudioStream(OpalAudioMixer &mixer)
virtual PBoolean SendUserInputTone(char tone, unsigned duration=0)
OpalVideoMixer(Styles style, unsigned width, unsigned height, unsigned rate=15, bool pushThread=true)
virtual OpalMixerConnection * CreateConnection(PSafePtr< OpalMixerNode > node, OpalCall &call, void *userData, unsigned options, OpalConnection::StringOptions *stringOptions)
OpalMixerEndPoint(OpalManager &manager, const char *prefix)
Definition: opalmixer.h:425
virtual bool OnMixed(RTP_DataFrame *&output)
Definition: opalmixer.h:1169
OpalMixerConnection(PSafePtr< OpalMixerNode > node, OpalCall &call, OpalMixerEndPoint &endpoint, void *userData, unsigned options=0, OpalConnection::StringOptions *stringOptions=NULL)
void RemoveNode(OpalMixerNode &node)
Definition: opalmixer.h:706
BYTE m_bgFillBlue
Definition: opalmixer.h:365
virtual void RemoveStream(const Key_T &key)
virtual void OnApplyStringOptions()
Call back for connection to act on changed string options.
Definition: opalmixer.h:381
size_t m_samplesUsed
Definition: opalmixer.h:254
bool IsStereo() const
Definition: opalmixer.h:213
unsigned GetFrameWidth() const
Definition: opalmixer.h:321
void SetListenOnly(bool listenOnly)
OpalBaseMixer(bool pushThread, unsigned periodMS, unsigned periodTS)
PSafePtr< Subclass > GetFirstConnectionAs(PSafetyMode mode=PSafeReference) const
Definition: opalmixer.h:1125
PSafePtr< OpalMixerConnection > GetMixerConnectionWithLock(const PString &token, PSafetyMode mode=PSafeReadWrite)
Definition: opalmixer.h:649
virtual void QueuePacket(const RTP_DataFrame &rtp)
void AddName(const PString &name)
const PStringList & GetNames() const
Definition: opalmixer.h:1101
void SetAdHocNodeInfo(const OpalMixerNodeInfo &info)
OpalLocalEndPoint & endpoint
Definition: localep.h:522
virtual void RemoveAllStreams()
Definition: connection.h:462
virtual OpalMixerNode * CreateNode(OpalMixerNodeInfo *info)
VideoStream(OpalVideoMixer &mixer)
virtual PBoolean SendUserInputString(const PString &value)
virtual OpalMixerNodeInfo * Clone() const
Definition: opalmixer.h:399
virtual PSafePtr< OpalMixerNode > AddNode(OpalMixerNodeInfo *info)
enum OpalMixerNode::AudioMixer::CachedAudio::@33 m_state
Definition: opalmixer.h:285
bool SetFrameSize(unsigned width, unsigned height)
size_t m_lastStreamCount
Definition: opalmixer.h:368
virtual void RemoveStream(const Key_T &key)
Definition: opalmixer.h:297
void AttachConnection(OpalConnection *connection)
bool GetListenOnly() const
Definition: opalmixer.h:883
PShortArray m_cacheSamples
Definition: opalmixer.h:253
unsigned m_sampleRate
Definition: opalmixer.h:267
virtual OpalMediaFormatList GetMediaFormats() const
virtual PSafePtr< OpalConnection > MakeConnection(OpalCall &call, const PString &party, void *userData=NULL, unsigned options=0, OpalConnection::StringOptions *stringOptions=NULL)
Definition: opalmixer.h:1191
std::map< PString, CachedAudio > m_cache
Definition: opalmixer.h:1177
const PGloballyUniqueID & GetGUID() const
Definition: opalmixer.h:1097
unsigned m_periodMS
Definition: opalmixer.h:168
virtual void OnReleased()
bool SetSampleRate(unsigned rate)
RTP_DataFrame m_raw
Definition: opalmixer.h:1173
Definition: opalmixer.h:559
Definition: opalmixer.h:189
virtual ~OpalMixerNodeManager()
unsigned GetFrameRate() const
Definition: opalmixer.h:329
unsigned GetSampleRate() const
Definition: opalmixer.h:217
std::vector< int > m_mixedAudio
Definition: opalmixer.h:271
virtual PSafePtr< OpalMixerNode > FindNode(const PString &name, PSafetyMode mode=PSafeReference)
Definition: transcoders.h:137
void DetachConnection(OpalConnection *connection)
virtual void QueuePacket(const RTP_DataFrame &rtp)=0
void RemoveName(const PString &name)
RTP_DataFrame * m_pushFrame
Definition: opalmixer.h:173
void MixAdditive(RTP_DataFrame &frame, const short *audioToSubtract)
OpalMixerNodeInfo * m_info
Definition: opalmixer.h:1150
unsigned GetFrameHeight() const
Definition: opalmixer.h:325
virtual void OnStartMediaPatch(OpalMediaPatch &patch)
virtual void RemoveNode(OpalMixerNode &node)
Definition: opalmixer.h:761
virtual void RemoveAllStreams()
virtual void QueuePacket(const RTP_DataFrame &rtp)
void InsertVideoFrame(unsigned x, unsigned y, unsigned w, unsigned h)
PString m_name
Name for mixer node.
Definition: opalmixer.h:401
OpalTranscoder * m_transcoder
Definition: opalmixer.h:1175
virtual size_t GetOutputSize() const
void RemoveNodeNames(PStringList names)
Definition: opalmixer.h:289
const OpalMixerNodeInfo & GetNodeInfo()
Definition: opalmixer.h:1137
Definition: opalmixer.h:985
PSafePtr< OpalMixerNode > FindNode(const PString &name, PSafetyMode mode=PSafeReference)
Definition: opalmixer.h:697
virtual bool MixStreams(RTP_DataFrame &frame)
OpalManager & manager
Definition: endpoint.h:807
unsigned m_nextTimestamp
Definition: opalmixer.h:252
bool m_listenOnly
Definition: opalmixer.h:893
virtual bool OnMixed(RTP_DataFrame *&mixed)
void DetachStream(OpalMixerMediaStream *stream)
PGloballyUniqueID m_guid
Definition: opalmixer.h:1148
VideoMixer(const OpalMixerNodeInfo &info)
unsigned m_height
Definition: opalmixer.h:364
unsigned m_width
Definition: opalmixer.h:364
virtual void BroadcastUserInput(const OpalConnection *connection, const PString &value)
AudioMixer(const OpalMixerNodeInfo &info)
virtual ~OpalMixerNodeInfo()
Definition: opalmixer.h:397
BYTE m_bgFillRed
Definition: opalmixer.h:365
Definition: opalmixer.h:293
PDictionary< PString, OpalTranscoder > m_transcoders
Definition: opalmixer.h:1198
~OpalVideoMixer()
Definition: opalmixer.h:317
virtual OpalMediaStream * CreateMediaStream(const OpalMediaFormat &mediaFormat, unsigned sessionID, PBoolean isSource)
OpalMixerNodeInfo * GetAdHocNodeInfo()
Definition: opalmixer.h:743
virtual size_t GetOutputSize() const
unsigned m_rate
Frame rate of mixed video.
Definition: opalmixer.h:409
Definition: opalmixer.h:242
void RemoveNodeName(PString name)
Definition: opalmixer.h:72
bool m_threadRunning
Definition: opalmixer.h:175
Definition: opalmixer.h:301
void PrintOn(ostream &strm) const
OpalMixerNode(OpalMixerNodeManager &manager, OpalMixerNodeInfo *info)
Definition: connection.h:353
RTP_DataFrame m_encoded
Definition: opalmixer.h:1174
void MixStereo(RTP_DataFrame &frame)
bool AttachStream(OpalMixerMediaStream *stream)
PSafeList< OpalConnection > m_connections
Definition: opalmixer.h:1153
OpalMixerNodeManager m_nodeManager
Definition: opalmixer.h:753
PSafePtr< OpalMixerNode > m_node
Definition: opalmixer.h:892
Definition: opalmixer.h:1172
Definition: opalmixer.h:305
virtual bool MixStreams(RTP_DataFrame &frame)
OpalMixerNodeManager & m_manager
Definition: opalmixer.h:1147
virtual ~Stream()
Definition: opalmixer.h:154
OpalVideoMixer::Styles m_style
Method for mixing video.
Definition: opalmixer.h:406
bool WriteVideo(const OpalBaseMixer::Key_T &key, const RTP_DataFrame &input)
Definition: opalmixer.h:1079
virtual bool WriteStream(const Key_T &key, const RTP_DataFrame &input)
void AddNodeName(PString name, OpalMixerNode *node)
const PTime & GetCreationTime() const
Definition: opalmixer.h:1141
AudioMixer m_audioMixer
Definition: opalmixer.h:1188
bool SetJitterBufferSize(const Key_T &key, unsigned minJitterDelay, unsigned maxJitterDelay)
const short * GetAudioDataPtr()
unsigned m_sampleRate
Audio sample rate, usually 8000.
Definition: opalmixer.h:403
virtual bool MixStreams(RTP_DataFrame &frame)=0
PINDEX GetConnectionCount() const
Definition: opalmixer.h:1120
OpalMixerNodeInfo(const char *name=NULL)
Definition: opalmixer.h:383
unsigned m_outputTimestamp
Definition: opalmixer.h:172
unsigned GetPeriodTS() const
Definition: opalmixer.h:150
void UseMediaPassThrough(unsigned sessionID, OpalConnection *connection=NULL)
virtual RTP_DataFrame * ReadMixed()
std::queue< RTP_DataFrame > m_queue
Definition: opalmixer.h:156
VideoMixer m_videoMixer
Definition: opalmixer.h:1200
virtual size_t GetOutputSize() const =0
Definition: opalmixer.h:1172
StreamMap_T m_inputStreams
Definition: opalmixer.h:171
OpalMixerEndPoint & m_endpoint
Definition: opalmixer.h:891
virtual OpalMediaFormatList GetMediaFormats() const
PString Key_T
Definition: opalmixer.h:83
unsigned m_periodTS
Definition: opalmixer.h:169
virtual bool AddStream(const Key_T &key)
PStringList m_names
Definition: opalmixer.h:1149