Jack2 1.9.6
|
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 class SERVER_EXPORT JackPort 00039 { 00040 00041 friend class JackGraphManager; 00042 00043 private: 00044 00045 int fTypeId; 00046 enum JackPortFlags fFlags; 00047 char fName[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; 00048 char fAlias1[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; 00049 char fAlias2[JACK_CLIENT_NAME_SIZE + JACK_PORT_NAME_SIZE]; 00050 int fRefNum; 00051 00052 jack_nframes_t fLatency; 00053 jack_nframes_t fTotalLatency; 00054 uint8_t fMonitorRequests; 00055 00056 bool fInUse; 00057 jack_port_id_t fTied; // Locally tied source port 00058 float fBuffer[BUFFER_SIZE_MAX + 4]; 00059 00060 bool IsUsed() const 00061 { 00062 return fInUse; 00063 } 00064 00065 // RT 00066 void ClearBuffer(jack_nframes_t frames); 00067 void MixBuffers(void** src_buffers, int src_count, jack_nframes_t frames); 00068 00069 public: 00070 00071 JackPort(); 00072 00073 bool Allocate(int refnum, const char* port_name, const char* port_type, JackPortFlags flags); 00074 void Release(); 00075 const char* GetName() const; 00076 const char* GetShortName() const; 00077 void SetName(const char* name); 00078 00079 int GetAliases(char* const aliases[2]); 00080 int SetAlias(const char* alias); 00081 int UnsetAlias(const char* alias); 00082 bool NameEquals(const char* target); 00083 00084 int GetFlags() const; 00085 const char* GetType() const; 00086 00087 int Tie(jack_port_id_t port_index); 00088 int UnTie(); 00089 00090 jack_nframes_t GetLatency() const; 00091 jack_nframes_t GetTotalLatency() const; 00092 void SetLatency(jack_nframes_t latency); 00093 00094 int RequestMonitor(bool onoff); 00095 int EnsureMonitor(bool onoff); 00096 bool MonitoringInput() 00097 { 00098 return (fMonitorRequests > 0); 00099 } 00100 00101 // Since we are in shared memory, the resulting pointer cannot be cached, so align it here... 00102 float* GetBuffer() 00103 { 00104 return (float*)((long)fBuffer & ~15L) + 4; 00105 } 00106 00107 int GetRefNum() const; 00108 00109 } POST_PACKED_STRUCTURE; 00110 00111 } // end of namespace 00112 00113 00114 #endif 00115