2222 *
2323 */
2424
25- #ifndef _AUDIO_PORT_H
26- #define _AUDIO_PORT_H
25+ #ifndef AUDIO_PORT_H
26+ #define AUDIO_PORT_H
2727
2828#include < QtCore/QString>
2929#include < QtCore/QMutex>
3030#include < QtCore/QMutexLocker>
3131
3232#include " Mixer.h"
33+ #include " MemoryManager.h"
34+ #include " PlayHandle.h"
3335
3436class EffectChain ;
37+ class FloatModel ;
3538
3639class AudioPort : public ThreadableJob
3740{
41+ MM_OPERATORS
3842public:
39- AudioPort ( const QString & _name, bool _has_effect_chain = true );
43+ AudioPort ( const QString & _name, bool _has_effect_chain = true ,
44+ FloatModel * volumeModel = NULL , FloatModel * panningModel = NULL );
4045 virtual ~AudioPort ();
4146
42- inline sampleFrame * firstBuffer ()
47+ inline sampleFrame * buffer ()
4348 {
44- return m_firstBuffer ;
49+ return m_portBuffer ;
4550 }
4651
47- inline sampleFrame * secondBuffer ()
52+ inline void lockBuffer ()
4853 {
49- return m_secondBuffer ;
54+ m_portBufferLock. lock () ;
5055 }
5156
52- inline void lockFirstBuffer ()
57+ inline void unlockBuffer ()
5358 {
54- m_firstBufferLock. lock ();
59+ m_portBufferLock. unlock ();
5560 }
5661
57- inline void lockSecondBuffer ()
58- {
59- m_secondBufferLock.lock ();
60- }
61-
62- inline void unlockFirstBuffer ()
63- {
64- m_firstBufferLock.unlock ();
65- }
66-
67- inline void unlockSecondBuffer ()
68- {
69- m_secondBufferLock.unlock ();
70- }
71-
72- void nextPeriod ();
73-
7462
7563 // indicate whether JACK & Co should provide output-buffer at ext. port
7664 inline bool extOutputEnabled () const
@@ -110,28 +98,20 @@ class AudioPort : public ThreadableJob
11098 bool processEffects ();
11199
112100 // ThreadableJob stuff
113- virtual void doProcessing ( sampleFrame * );
101+ virtual void doProcessing ();
114102 virtual bool requiresProcessing () const
115103 {
116104 return true ;
117105 }
118106
119-
120- enum bufferUsages
121- {
122- NoUsage,
123- FirstBuffer,
124- BothBuffers
125- } ;
126-
107+ void addPlayHandle ( PlayHandle * handle );
108+ void removePlayHandle ( PlayHandle * handle );
127109
128110private:
129- volatile bufferUsages m_bufferUsage;
111+ volatile bool m_bufferUsage;
130112
131- sampleFrame * m_firstBuffer;
132- sampleFrame * m_secondBuffer;
133- QMutex m_firstBufferLock;
134- QMutex m_secondBufferLock;
113+ sampleFrame * m_portBuffer;
114+ QMutex m_portBufferLock;
135115
136116 bool m_extOutputEnabled;
137117 fx_ch_t m_nextFxChannel;
@@ -140,6 +120,11 @@ class AudioPort : public ThreadableJob
140120
141121 EffectChain * m_effects;
142122
123+ PlayHandleList m_playHandles;
124+ QMutex m_playHandleLock;
125+
126+ FloatModel * m_volumeModel;
127+ FloatModel * m_panningModel;
143128
144129 friend class Mixer ;
145130 friend class MixerWorkerThread ;
0 commit comments