Jack2 1.9.10
|
00001 /* 00002 Copyright (C) 2001 Paul Davis 00003 Copyright (C) 2004-2008 Grame 00004 00005 This program is free software; you can redistribute it and/or modify 00006 it under the terms of the GNU Lesser General Public License as published by 00007 the Free Software Foundation; either version 2.1 of the License, or 00008 (at your option) any later version. 00009 00010 This program is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 GNU Lesser General Public License for more details. 00014 00015 You should have received a copy of the GNU Lesser General Public License 00016 along with this program; if not, write to the Free Software 00017 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00018 00019 */ 00020 00021 #ifndef __JackPort__ 00022 #define __JackPort__ 00023 00024 #include "types.h" 00025 #include "JackConstants.h" 00026 #include "JackCompilerDeps.h" 00027 00028 namespace Jack 00029 { 00030 00031 #define ALL_PORTS 0xFFFF 00032 #define NO_PORT 0xFFFE 00033 00038 PRE_PACKED_STRUCTURE 00039 class SERVER_EXPORT JackPort 00040 { 00041 00042 friend class JackGraphManager; 00043 00044 private: 00045 00046 int fTypeId; 00047 enum JackPortFlags fFlags; 00048 char fName[REAL_JACK_PORT_NAME_SIZE]; 00049 char fAlias1[REAL_JACK_PORT_NAME_SIZE]; 00050 char fAlias2[REAL_JACK_PORT_NAME_SIZE]; 00051 int fRefNum; 00052 00053 jack_nframes_t fLatency; 00054 jack_nframes_t fTotalLatency; 00055 jack_latency_range_t fPlaybackLatency; 00056 jack_latency_range_t fCaptureLatency; 00057 uint8_t fMonitorRequests; 00058 00059 bool fInUse; 00060 jack_port_id_t fTied; // Locally tied source port 00061 jack_default_audio_sample_t fBuffer[BUFFER_SIZE_MAX + 8]; 00062 00063 bool IsUsed() const 00064 { 00065 return fInUse; 00066 } 00067 00068 // RT 00069 void ClearBuffer(jack_nframes_t frames); 00070 void MixBuffers(void** src_buffers, int src_count, jack_nframes_t frames); 00071 00072 public: 00073 00074 JackPort(); 00075 00076 bool Allocate(int refnum, const char* port_name, const char* port_type, JackPortFlags flags); 00077 void Release(); 00078 const char* GetName() const; 00079 const char* GetShortName() const; 00080 void SetName(const char* name); 00081 00082 int GetAliases(char* const aliases[2]); 00083 int SetAlias(const char* alias); 00084 int UnsetAlias(const char* alias); 00085 bool NameEquals(const char* target); 00086 00087 int GetFlags() const; 00088 const char* GetType() const; 00089 00090 int Tie(jack_port_id_t port_index); 00091 int UnTie(); 00092 00093 jack_nframes_t GetLatency() const; 00094 void SetLatency(jack_nframes_t latency); 00095 00096 void SetLatencyRange(jack_latency_callback_mode_t mode, jack_latency_range_t* range); 00097 void GetLatencyRange(jack_latency_callback_mode_t mode, jack_latency_range_t* range) const; 00098 00099 jack_nframes_t GetTotalLatency() const; 00100 00101 int RequestMonitor(bool onoff); 00102 int EnsureMonitor(bool onoff); 00103 bool MonitoringInput() 00104 { 00105 return (fMonitorRequests > 0); 00106 } 00107 00108 // Since we are in shared memory, the resulting pointer cannot be cached, so align it here... 00109 jack_default_audio_sample_t* GetBuffer() 00110 { 00111 return (jack_default_audio_sample_t*)((uintptr_t)fBuffer & ~31L) + 8; 00112 } 00113 00114 int GetRefNum() const; 00115 00116 } POST_PACKED_STRUCTURE; 00117 00118 } // end of namespace 00119 00120 00121 #endif 00122