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,
235 bool SetJitterBufferSize(
237 unsigned minJitterDelay,
238 unsigned maxJitterDelay
248 const short * GetAudioDataPtr();
261 void PreMixStreams();
263 void MixAdditive(
RTP_DataFrame & frame,
const short * audioToSubtract);
289 eSideBySideLetterbox,
314 bool pushThread =
true 351 void InsertVideoFrame(
unsigned x,
unsigned y,
unsigned w,
unsigned h);
385 , m_listenOnly(false)
390 , m_width(PVideoFrameInfo::CIFWidth)
391 , m_height(PVideoFrameInfo::CIFHeight)
394 , m_mediaPassThru(false)
442 virtual void ShutDown();
449 virtual PBoolean GarbageCollection();
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
496 virtual void RemoveNode(
516 void RemoveNodeNames(
523 const PSafePtr<OpalMixerNode> & node,
525 const PString & value
535 const PSafePtr<OpalMixerNode> & node,
537 const PString & value
539 , m_connection(connection)
580 virtual void ShutDown();
626 virtual PSafePtr<OpalConnection> MakeConnection(
628 const PString & party,
629 void * userData = NULL,
630 unsigned options = 0,
638 virtual PBoolean GarbageCollection();
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
692 )
const {
return m_nodeManager.GetFirstNode(mode); }
698 const PString & name,
699 PSafetyMode mode = PSafeReference
700 ) {
return m_nodeManager.FindNode(name, mode); }
708 ) { m_nodeManager.RemoveNode(node); }
725 void SetAdHocNodeInfo(
728 void SetAdHocNodeInfo(
770 PSafePtr<OpalMixerNode> node,
774 unsigned options = 0,
802 virtual void OnReleased();
834 virtual void OnStartMediaPatch(
839 virtual void OnApplyStringOptions();
847 virtual PBoolean SendUserInputString(
848 const PString & value
867 virtual PBoolean SendUserInputTone(
869 unsigned duration = 0
887 PSafePtr<OpalMixerNode>
GetNode()
const {
return m_node; }
913 PSafePtr<OpalMixerNode> node,
926 virtual PBoolean Open();
933 virtual PBoolean WritePacket(
940 virtual PBoolean IsSynchronous()
const;
952 virtual PBoolean RequiresPatchThread()
const;
961 virtual bool EnableJitterBuffer(
bool enab =
true)
const;
968 PSafePtr<OpalMixerNode>
GetNode() {
return m_node; }
972 virtual void InternalClose();
1028 void AttachConnection(
1034 void DetachConnection(
1052 void UseMediaPassThrough(
1065 unsigned minJitterDelay,
1066 unsigned maxJitterDelay
1067 ) {
return m_audioMixer.SetJitterBufferSize(key, minJitterDelay, maxJitterDelay); }
1074 ) {
return m_audioMixer.WriteStream(key, input); }
1082 ) {
return m_videoMixer.WriteStream(key, input); }
1083 #endif // OPAL_VIDEO 1087 virtual void BroadcastUserInput(
1089 const PString & value
1097 const PGloballyUniqueID &
GetGUID()
const {
return m_guid; }
1101 const PStringList &
GetNames()
const {
return m_names; }
1106 const PString & name
1112 const PString & name
1124 template <
class Sub
class>
1126 PSafetyMode mode = PSafeReference
1127 )
const {
return PSafePtr<Subclass>(m_connections, mode); }
1132 PSafetyMode mode = PSafeReference
1133 )
const {
return GetFirstConnectionAs<OpalConnection>(mode); }
1172 enum { Collecting, Collected, Completed } m_state;
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 virtual OpalMixerNodeInfo * Clone() const
Definition: opalmixer.h:399
bool m_mediaPassThru
Definition: opalmixer.h:411
PSafePtr< OpalConnection > GetFirstConnection(PSafetyMode mode=PSafeReference) const
Definition: opalmixer.h:1131
Styles
Definition: opalmixer.h:288
std::map< Key_T, Stream * > StreamMap_T
Definition: opalmixer.h:158
AudioStream * m_right
Definition: opalmixer.h:270
PSafePtr< OpalMixerNode > GetFirstNode(PSafetyMode mode=PSafeReference) const
Definition: opalmixer.h:690
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
Definition: localep.h:360
PSafePtr< OpalMixerNode > GetNode() const
Definition: opalmixer.h:887
virtual Stream * CreateStream()=0
bool m_pushThread
Definition: opalmixer.h:167
OpalAudioMixer & m_mixer
Definition: opalmixer.h:250
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
bool m_listenOnly
Mixer only transmits data to "listeners".
Definition: opalmixer.h:402
PQueuedThreadPool< UserInput > m_userInputPool
Definition: opalmixer.h:549
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
unsigned GetFrameRate() const
Definition: opalmixer.h:329
bool m_stereo
Definition: opalmixer.h:266
PMutex m_mutex
Definition: opalmixer.h:176
Styles m_style
Definition: opalmixer.h:363
PThread * m_workerThread
Definition: opalmixer.h:174
~OpalAudioMixer()
Definition: opalmixer.h:199
OpalMixerNodeInfo * m_adHocNodeInfo
Definition: opalmixer.h:752
OpalVideoMixer & m_mixer
Definition: opalmixer.h:353
OpalMixerNodeManager & GetNodeManager()
Definition: opalmixer.h:748
Definition: opalmixer.h:425
Definition: opalmixer.h:1169
void RemoveNode(OpalMixerNode &node)
Definition: opalmixer.h:706
const PGloballyUniqueID & GetGUID() const
Definition: opalmixer.h:1097
Definition: opalmixer.h:381
size_t m_samplesUsed
Definition: opalmixer.h:254
queue< RTP_DataFrame > m_queue
Definition: opalmixer.h:156
OpalBaseMixer(bool pushThread, unsigned periodMS, unsigned periodTS)
PSafePtr< OpalMixerConnection > GetMixerConnectionWithLock(const PString &token, PSafetyMode mode=PSafeReadWrite)
Definition: opalmixer.h:649
virtual void RemoveAllStreams()
Definition: connection.h:462
unsigned GetSampleRate() const
Definition: opalmixer.h:217
const PStringList & GetNames() const
Definition: opalmixer.h:1101
Definition: opalmixer.h:285
size_t m_lastStreamCount
Definition: opalmixer.h:368
virtual void RemoveStream(const Key_T &key)
PShortArray m_cacheSamples
Definition: opalmixer.h:253
unsigned m_sampleRate
Definition: opalmixer.h:267
Definition: opalmixer.h:1191
std::map< PString, CachedAudio > m_cache
Definition: opalmixer.h:1177
unsigned m_periodMS
Definition: opalmixer.h:168
RTP_DataFrame m_raw
Definition: opalmixer.h:1173
PSafePtr< OpalMixerNode > GetFirstNode(PSafetyMode mode=PSafeReference) const
Definition: opalmixer.h:480
Definition: opalmixer.h:559
Definition: opalmixer.h:189
PINDEX GetConnectionCount() const
Definition: opalmixer.h:1120
std::vector< int > m_mixedAudio
Definition: opalmixer.h:271
Definition: transcoders.h:137
virtual void QueuePacket(const RTP_DataFrame &rtp)=0
RTP_DataFrame * m_pushFrame
Definition: opalmixer.h:173
OpalMixerNodeInfo * m_info
Definition: opalmixer.h:1150
Definition: opalmixer.h:761
PString m_name
Name for mixer node.
Definition: opalmixer.h:401
OpalTranscoder * m_transcoder
Definition: opalmixer.h:1175
const OpalMixerNodeInfo & GetNodeInfo()
Definition: opalmixer.h:1137
Definition: opalmixer.h:985
PSafePtr< OpalMixerNode > FindNode(const PString &name, PSafetyMode mode=PSafeReference)
Definition: opalmixer.h:697
unsigned m_nextTimestamp
Definition: opalmixer.h:252
bool m_listenOnly
Definition: opalmixer.h:893
virtual bool OnMixed(RTP_DataFrame *&mixed)
PGloballyUniqueID m_guid
Definition: opalmixer.h:1148
const PTime & GetCreationTime() const
Definition: opalmixer.h:1141
unsigned m_width
Definition: opalmixer.h:364
virtual ~OpalMixerNodeInfo()
Definition: opalmixer.h:397
BYTE m_bgFillRed
Definition: opalmixer.h:365
PDictionary< PString, OpalTranscoder > m_transcoders
Definition: opalmixer.h:1198
~OpalVideoMixer()
Definition: opalmixer.h:317
OpalMixerNodeInfo * GetAdHocNodeInfo()
Definition: opalmixer.h:743
unsigned m_rate
Frame rate of mixed video.
Definition: opalmixer.h:409
const OpalMixerNodeManager & GetNodeManager() const
Definition: opalmixer.h:747
Definition: opalmixer.h:242
bool GetListenOnly() const
Definition: opalmixer.h:883
Definition: opalmixer.h:72
bool m_threadRunning
Definition: opalmixer.h:175
unsigned GetFrameWidth() const
Definition: opalmixer.h:321
Definition: connection.h:353
RTP_DataFrame m_encoded
Definition: opalmixer.h:1174
PSafeList< OpalConnection > m_connections
Definition: opalmixer.h:1153
bool IsStereo() const
Definition: opalmixer.h:213
OpalMixerNodeManager m_nodeManager
Definition: opalmixer.h:753
PSafePtr< OpalMixerNode > m_node
Definition: opalmixer.h:892
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)
AudioMixer m_audioMixer
Definition: opalmixer.h:1188
unsigned m_sampleRate
Audio sample rate, usually 8000.
Definition: opalmixer.h:403
virtual bool MixStreams(RTP_DataFrame &frame)=0
OpalMixerNodeInfo(const char *name=NULL)
Definition: opalmixer.h:383
unsigned m_outputTimestamp
Definition: opalmixer.h:172
unsigned GetPeriodTS() const
Definition: opalmixer.h:150
virtual RTP_DataFrame * ReadMixed()
VideoMixer m_videoMixer
Definition: opalmixer.h:1200
virtual size_t GetOutputSize() const =0
StreamMap_T m_inputStreams
Definition: opalmixer.h:171
OpalMixerEndPoint & m_endpoint
Definition: opalmixer.h:891
PSafePtr< Subclass > GetFirstConnectionAs(PSafetyMode mode=PSafeReference) const
Definition: opalmixer.h:1125
unsigned GetFrameHeight() const
Definition: opalmixer.h:325
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