30 #ifndef OPAL_OPAL_OPALMIXER_H
31 #define OPAL_OPAL_OPALMIXER_H
55 #define OPAL_MIXER_PREFIX "mcu"
57 #define OPAL_OPT_LISTEN_ONLY "Listen-Only"
58 #define OPAL_OPT_CONF_OWNER "Conference-Owner"
208 bool pushThread =
true,
328 bool pushThread =
true
377 virtual bool StartMix(
unsigned & x,
unsigned & y,
unsigned & w,
unsigned & h,
unsigned & left);
378 virtual bool NextMix(
unsigned & x,
unsigned & y,
unsigned & w,
unsigned & h,
unsigned & left);
379 void InsertVideoFrame(
const StreamMap_T::iterator & it,
unsigned x,
unsigned y,
unsigned w,
unsigned h);
410 ,
m_width(PVideoFrameInfo::CIFWidth)
411 ,
m_height(PVideoFrameInfo::CIFHeight)
496 virtual PSafePtr<OpalMixerNode>
AddNode(
508 PSafetyMode mode = PSafeReference
509 )
const {
return PSafePtr<OpalMixerNode>(
m_nodesByUID, mode); }
514 virtual PSafePtr<OpalMixerNode>
FindNode(
515 const PString & name,
516 PSafetyMode mode = PSafeReference
544 const PStringSet & names
550 const PGloballyUniqueID & guid
659 const PString & party,
660 void * userData = NULL,
661 unsigned options = 0,
682 const PString & name = PString::Empty()
701 const PString & token,
702 PSafetyMode mode = PSafeReadWrite
703 ) {
return GetConnectionWithLockAs<OpalMixerConnection>(token, mode); }
709 PSafePtr<OpalMixerNode> node,
816 PSafePtr<OpalMixerNode> node,
820 unsigned options = 0,
894 const PString & value
915 unsigned duration = 0
975 PSafePtr<OpalMixerNode> node,
988 virtual PBoolean
Open();
1045 void Append(
const PSafePtr<OpalMixerMediaStream> & stream);
1047 void CloseOne(
const PSafePtr<OpalMixerMediaStream> & stream);
1050 typedef PSafeDictionary<PString, OpalMixerMediaStream>
StreamDict;
1082 PSafePtr<OpalMixerMediaStream> & stream,
1084 const short * audioToSubtract
1087 #ifdef OPAL_MIXER_AUDIO_DEBUG
1088 class PAudioMixerDebug * m_audioDebug;
1115 #endif // OPAL_VIDEO
1211 const PString & value
1244 const PString & name
1250 const PString & name
1262 template <
class Sub
class>
1264 PSafetyMode mode = PSafeReference
1270 PSafetyMode mode = PSafeReference
1271 )
const {
return GetFirstConnectionAs<OpalConnection>(mode); }
1288 const PString & connectionIdentifier
1305 typedef std::map<OpalVideoFormat::ContentRole, OpalVideoStreamMixer *>
VideoMixerMap;
1307 #endif // OPAL_VIDEO
1314 #endif // OPAL_HAS_MIXER
1316 #endif // OPAL_OPAL_OPAL_MIXER
virtual void AttachConnection(OpalConnection *connection)
OpalAudioMixer(bool stereo=false, unsigned sampleRate=OpalMediaFormat::AudioClockRate, bool pushThread=true, unsigned period=10)
bool m_mediaPassThru
Definition: opalmixer.h:432
Definition: manager.h:150
PSafePtr< OpalMixerNode > GetFirstNode(PSafetyMode mode=PSafeReference) const
Definition: opalmixer.h:507
OpalTranscoder * m_transcoder
Definition: opalmixer.h:1077
Styles
Definition: opalmixer.h:301
std::map< Key_T, Stream * > StreamMap_T
Definition: opalmixer.h:171
PStringSet m_names
Definition: opalmixer.h:1295
AudioStream * m_right
Definition: opalmixer.h:282
virtual PBoolean GarbageCollection()
virtual PString CreateInternalURI(const PGloballyUniqueID &guid)
bool m_audioOnly
No video is to be allowed.
Definition: opalmixer.h:426
unsigned GetPeriodMS() const
Definition: opalmixer.h:159
PTime m_creationTime
Definition: opalmixer.h:1297
Definition: opalmixer.h:166
Definition: opalmixer.h:1067
virtual bool OnMixed(RTP_DataFrame *&output)
Definition: localep.h:469
OpalManager & GetManager() const
Get manager.
Definition: opalmixer.h:789
virtual Stream * CreateStream()=0
bool m_pushThread
Definition: opalmixer.h:179
OpalAudioMixer & m_mixer
Definition: opalmixer.h:262
PBYTEArray m_frameStore
Definition: opalmixer.h:386
atomic< bool > m_shuttingDown
Definition: opalmixer.h:1298
std::map< OpalVideoFormat::ContentRole, OpalVideoStreamMixer * > VideoMixerMap
Definition: opalmixer.h:1305
virtual Stream * CreateStream()
bool m_listenOnly
Mixer only transmits data to "listeners".
Definition: opalmixer.h:423
PString m_notes
Free text about conference.
Definition: opalmixer.h:437
PString m_displayText
Human readable text for conference name.
Definition: opalmixer.h:435
virtual OpalMixerNode * CreateNode(OpalMixerNodeInfo *info)
virtual bool GetConferenceStates(OpalConferenceStates &states, const PString &name=PString::Empty()) const
virtual bool SetFrameRate(unsigned rate)
virtual PBoolean GarbageCollection()
PSafePtr< OpalMixerNode > GetNode() const
Definition: opalmixer.h:949
atomic< uint32_t > m_factoryIndex
Definition: opalmixer.h:799
PSafePtr< OpalConnection > GetFirstConnection(PSafetyMode mode=PSafeReference) const
Definition: opalmixer.h:1269
BYTE m_bgFillGreen
Definition: opalmixer.h:384
unsigned m_width
Width of mixed video.
Definition: opalmixer.h:428
OpalJitterBuffer * m_jitter
Definition: opalmixer.h:263
PString m_keywords
Space separated list of keywords for conference.
Definition: opalmixer.h:438
PSafeDictionary< PGloballyUniqueID, OpalMixerNode > m_nodesByUID
Definition: opalmixer.h:577
std::map< PString, CachedAudio > m_cache
Definition: opalmixer.h:1079
void StopPushThread(bool lock=true)
Definition: opalmixer.h:1057
Definition: opalmixer.h:361
AudioStream * m_left
Definition: opalmixer.h:281
virtual OpalAudioStreamMixer * CreateAudioMixer(const OpalMixerNodeInfo &info)
Create the instance of the audio mixer.
unsigned m_height
Height of mixed video.
Definition: opalmixer.h:429
OpalManager & GetManager() const
Get manager.
Definition: opalmixer.h:571
bool m_stereo
Definition: opalmixer.h:278
Styles m_style
Definition: opalmixer.h:382
virtual Stream * CreateStream()
Definition: opalmixer.h:1073
virtual void OnNodeStatusChanged(const OpalMixerNode &node, OpalConferenceState::ChangeType change)
PThread * m_workerThread
Definition: opalmixer.h:186
~OpalAudioMixer()
Definition: opalmixer.h:212
OpalMixerNodeInfo * m_adHocNodeInfo
Definition: opalmixer.h:796
OpalVideoMixer & m_mixer
Definition: opalmixer.h:367
virtual void OnNodeStatusChanged(const OpalMixerNode &node, OpalConferenceState::ChangeType change)
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)
MixerByIdMap m_mixerById
Definition: opalmixer.h:1310
Definition: opalmixer.h:453
OpalMixerConnection(PSafePtr< OpalMixerNode > node, OpalCall &call, OpalMixerEndPoint &endpoint, void *userData, unsigned options=0, OpalConnection::StringOptions *stringOptions=NULL)
enum OpalAudioStreamMixer::CachedAudio::@10 m_state
OpalAudioStreamMixer * m_audioMixer
Definition: opalmixer.h:1303
BYTE m_bgFillBlue
Definition: opalmixer.h:384
virtual void RemoveStream(const Key_T &key)
virtual void OnApplyStringOptions()
Call back for connection to act on changed string options.
Definition: opalmixer.h:400
VideoMixerMap m_videoMixers
Definition: opalmixer.h:1306
virtual bool AttachStream(OpalMixerMediaStream *stream)
size_t m_samplesUsed
Definition: opalmixer.h:266
virtual OpalVideoStreamMixer * CreateVideoMixer(const OpalMixerNodeInfo &info)
Create the instance of the video mixer.
bool IsStereo() const
Definition: opalmixer.h:226
Definition: opalmixer.h:1073
unsigned GetFrameWidth() const
Definition: opalmixer.h:335
void PushOne(PSafePtr< OpalMixerMediaStream > &stream, CachedAudio &cache, const short *audioToSubtract)
void SetListenOnly(bool listenOnly)
OpalBaseMixer(bool pushThread, unsigned periodMS, unsigned periodTS)
PSafePtr< Subclass > GetFirstConnectionAs(PSafetyMode mode=PSafeReference) const
Definition: opalmixer.h:1263
PSafePtr< OpalMixerConnection > GetMixerConnectionWithLock(const PString &token, PSafetyMode mode=PSafeReadWrite)
Definition: opalmixer.h:700
virtual void QueuePacket(const RTP_DataFrame &rtp)
OpalManager & m_manager
Definition: opalmixer.h:575
void SetOwnerConnection(const PString &connectionIdentifier)
Definition: opalmixer.h:1287
Initialisation information.
Definition: jitter.h:86
virtual void DetachStream(OpalMixerMediaStream *stream)
void SetAdHocNodeInfo(const OpalMixerNodeInfo &info)
Definition: opalmixer.h:1101
PDictionary< PString, OpalTranscoder > TranscoderMap
Definition: opalmixer.h:1112
TranscoderMap m_transcoders
Definition: opalmixer.h:1113
virtual void RemoveAllStreams()
virtual void UseMediaPassThrough(unsigned sessionID, OpalConnection *connection=NULL)
Definition: connection.h:530
PString m_subject
Subject for conference.
Definition: opalmixer.h:436
VideoStream(OpalVideoMixer &mixer)
virtual PBoolean SendUserInputString(const PString &value)
virtual OpalMixerNodeInfo * Clone() const
Definition: opalmixer.h:419
virtual PSafePtr< OpalMixerNode > AddNode(OpalMixerNodeInfo *info)
PDECLARE_MUTEX(m_infoMutex)
Definition: opalmixer.h:1073
Definition: opalmixer.h:297
bool SetFrameSize(unsigned width, unsigned height)
size_t m_lastStreamCount
Definition: opalmixer.h:387
PSafeArray< OpalConnection > m_connections
Definition: opalmixer.h:1300
virtual void RemoveStream(const Key_T &key)
Definition: opalmixer.h:310
virtual bool NextMix(unsigned &x, unsigned &y, unsigned &w, unsigned &h, unsigned &left)
bool GetListenOnly() const
Definition: opalmixer.h:945
PShortArray m_cacheSamples
Definition: opalmixer.h:265
unsigned m_sampleRate
Definition: opalmixer.h:279
const PStringSet & GetNames() const
Definition: opalmixer.h:1239
virtual OpalMediaFormatList GetMediaFormats() const
virtual PSafePtr< OpalConnection > MakeConnection(OpalCall &call, const PString &party, void *userData=NULL, unsigned options=0, OpalConnection::StringOptions *stringOptions=NULL)
virtual void StartPushThread()
OpalMixerNodeManager(OpalManager &manager)
RTP_DataFrame m_raw
Definition: opalmixer.h:1075
const PGloballyUniqueID & GetGUID() const
Definition: opalmixer.h:1235
unsigned m_periodMS
Definition: opalmixer.h:180
virtual void OnReleased()
bool SetSampleRate(unsigned rate)
bool SetJitterBufferSize(const OpalBaseMixer::Key_T &key, const OpalJitterBuffer::Init &init)
virtual void GetConferenceState(OpalConferenceState &state) const
bool SetJitterBufferSize(const Key_T &key, const OpalJitterBuffer::Init &init)
virtual bool StartMix(unsigned &x, unsigned &y, unsigned &w, unsigned &h, unsigned &left)
bool WritePacket(const OpalMixerMediaStream &stream, const RTP_DataFrame &input)
Definition: opalmixer.h:320
Definition: opalmixer.h:588
Definition: opalmixer.h:201
virtual ~OpalMixerNodeManager()
unsigned GetFrameRate() const
Definition: opalmixer.h:343
unsigned GetSampleRate() const
Definition: opalmixer.h:230
bool m_closeOnEmpty
Mixer node is removed when last participant exits.
Definition: opalmixer.h:422
std::vector< int > m_mixedAudio
Definition: opalmixer.h:283
virtual PSafePtr< OpalMixerNode > FindNode(const PString &name, PSafetyMode mode=PSafeReference)
Definition: transcoders.h:134
virtual void QueuePacket(const RTP_DataFrame &rtp)=0
void RemoveName(const PString &name)
void SetFactoryNodeInfo(const OpalMixerNodeInfo &info)
RTP_DataFrame * m_pushFrame
Definition: opalmixer.h:185
void MixAdditive(RTP_DataFrame &frame, const short *audioToSubtract)
OpalMixerNodeInfo * m_info
Definition: opalmixer.h:1296
unsigned GetFrameHeight() const
Definition: opalmixer.h:339
virtual void OnStartMediaPatch(OpalMediaPatch &patch)
virtual void RemoveNode(OpalMixerNode &node)
Definition: opalmixer.h:807
virtual void RemoveAllStreams()
virtual void QueuePacket(const RTP_DataFrame &rtp)
OpalManager & GetManager() const
Definition: endpoint.h:839
void InsertVideoFrame(unsigned x, unsigned y, unsigned w, unsigned h)
bool AddName(const PString &name)
PString m_name
Name for mixer node.
Definition: opalmixer.h:421
virtual size_t GetOutputSize() const
Definition: opalmixer.h:302
const OpalMixerNodeInfo & GetNodeInfo()
Definition: opalmixer.h:1275
ChangeType
Definition: manager.h:76
Definition: opalmixer.h:1121
virtual bool MixStreams(RTP_DataFrame &frame)
unsigned m_nextTimestamp
Definition: opalmixer.h:264
bool m_listenOnly
Definition: opalmixer.h:955
virtual PStringList GetAvailableStringOptions() const
virtual bool OnMixed(RTP_DataFrame *&mixed)
PGloballyUniqueID m_guid
Definition: opalmixer.h:1294
unsigned m_height
Definition: opalmixer.h:383
OpalAudioStreamMixer(const OpalMixerNodeInfo &info)
unsigned m_width
Definition: opalmixer.h:383
virtual void BroadcastUserInput(const OpalConnection *connection, const PString &value)
bool AddNodeName(PString name, OpalMixerNode *node)
virtual ~OpalMixerNodeInfo()
Definition: opalmixer.h:417
BYTE m_bgFillRed
Definition: opalmixer.h:384
OpalMixerNodeInfo * m_factoryNodeInfo
Definition: opalmixer.h:797
Definition: opalmixer.h:306
virtual OpalMixerNodeInfo * FindNodeInfo(const PString &name)
PSafeDictionary< PString, OpalMixerNode > m_nodesByName
Definition: opalmixer.h:578
~OpalVideoMixer()
Definition: opalmixer.h:331
#define OPAL_MIXER_PREFIX
Definition: opalmixer.h:55
virtual OpalMediaStream * CreateMediaStream(const OpalMediaFormat &mediaFormat, unsigned sessionID, PBoolean isSource)
virtual bool SetFrameRate(unsigned rate)
OpalMixerEndPoint(OpalManager &manager, const char *prefix=OPAL_MIXER_PREFIX)
OpalMixerNodeInfo * GetAdHocNodeInfo()
Definition: opalmixer.h:756
virtual size_t GetOutputSize() const
unsigned m_rate
Frame rate of mixed video.
Definition: opalmixer.h:430
RTP_DataFrame m_encoded
Definition: opalmixer.h:1076
Definition: opalmixer.h:254
void RemoveNodeName(PString name)
Definition: opalmixer.h:72
bool m_threadRunning
Definition: opalmixer.h:187
Definition: opalmixer.h:314
void PrintOn(ostream &strm) const
virtual bool GetConferenceState(OpalConferenceState *state) const
OpalMixerNode(OpalMixerNodeManager &manager, OpalMixerNodeInfo *info)
Definition: connection.h:415
std::list< OpalConferenceState > OpalConferenceStates
Definition: manager.h:131
void MixStereo(RTP_DataFrame &frame)
PSafePtr< OpalMixerNode > m_node
Definition: opalmixer.h:954
Definition: opalmixer.h:318
void InsertVideoFrame(const StreamMap_T::iterator &it, unsigned x, unsigned y, unsigned w, unsigned h)
virtual bool MixStreams(RTP_DataFrame &frame)
OpalMixerNodeManager & m_manager
Definition: opalmixer.h:1293
virtual ~Stream()
Definition: opalmixer.h:167
OpalVideoMixer::Styles m_style
Method for mixing video.
Definition: opalmixer.h:427
virtual bool WriteStream(const Key_T &key, const RTP_DataFrame &input)
virtual PString CreateInternalURI(const PGloballyUniqueID &guid)
const PTime & GetCreationTime() const
Definition: opalmixer.h:1279
void RemoveNodeNames(const PStringSet &names)
const short * GetAudioDataPtr()
unsigned m_sampleRate
Audio sample rate, usually 8000.
Definition: opalmixer.h:424
virtual bool MixStreams(RTP_DataFrame &frame)=0
PINDEX GetConnectionCount() const
Definition: opalmixer.h:1258
OpalMixerNodeInfo(const char *name=NULL)
Definition: opalmixer.h:402
unsigned m_outputTimestamp
Definition: opalmixer.h:184
PString m_ownerConnection
Definition: opalmixer.h:1301
unsigned GetPeriodTS() const
Definition: opalmixer.h:163
virtual RTP_DataFrame * ReadMixed()
virtual void DetachConnection(OpalConnection *connection)
std::queue< RTP_DataFrame > m_queue
Definition: opalmixer.h:169
std::map< PString, OpalBaseMixer * > MixerByIdMap
Definition: opalmixer.h:1309
virtual PString GetNewFactoryName()
virtual size_t GetOutputSize() const =0
StreamMap_T m_inputStreams
Definition: opalmixer.h:183
OpalMixerEndPoint & m_endpoint
Definition: opalmixer.h:953
OpalVideoStreamMixer(const OpalMixerNodeInfo &info)
virtual OpalMediaFormatList GetMediaFormats() const
PString Key_T
Definition: opalmixer.h:84
unsigned m_periodTS
Definition: opalmixer.h:181
virtual bool AddStream(const Key_T &key)