1 package net.sf.jack4j;
2
3 /*
4 Copyright (C) 2008 Ondrej Par
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU Lesser General Public License as published by
8 the Free Software Foundation; either version 2.1 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU Lesser General Public License for more details.
15
16 You should have received a copy of the GNU Lesser General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19
20 */
21
22 import java.nio.Buffer;
23 import java.nio.ByteBuffer;
24
25 /**
26 * Port registered by {@link JackClient}.
27 *
28 * @author repa
29 *
30 */
31 public class JackLocalPort extends JackPort {
32
33 static {
34 JackBridge.initializeJackBridge();
35 }
36
37 private JackClient client;
38 @SuppressWarnings("unused")
39 private long clientHandle = 0;
40 @SuppressWarnings("unused")
41 private ByteBuffer cachedByteBuffer = null;
42
43 JackLocalPort(long portHandle, JackClient client) {
44 super(portHandle);
45 this.client = client;
46 this.clientHandle = client.getClientHandle();
47 }
48
49 /**
50 * Returns the client that owns this port.
51 */
52 public JackClient getClient() {
53 return client;
54 }
55
56 /**
57 * Sets short name of this port.
58 */
59 public void setPortName(String portName) throws JackException {
60 synchronized (client) {
61 setPortNameInternal(portName);
62 client.localPortNameChanged(this, portName);
63 }
64 }
65
66 private native void setPortNameInternal(String portName) throws JackException;
67
68 /**
69 * Sets port alias.
70 *
71 * <p>
72 * The port can have at most 2 aliases.
73 */
74 public native void setPortAlias(String alias) throws JackException;
75
76 /**
77 * Removes port alias.
78 */
79 public native void unsetPortAlias(String alias) throws JackException;
80
81 /**
82 * Returns all aliases set for this port.
83 */
84 public native String[] getPortAliases() throws JackException;
85
86 /**
87 * Returns number of connections to or from port.
88 */
89 public native int connected() throws JackException;
90
91 /**
92 * Returns true if the port is directly connected to port with specified
93 * name.
94 */
95 public native boolean connectedTo(String portName) throws JackException;
96
97 /**
98 * Returns full port names of to which this port is connected.
99 *
100 * <p>
101 * If the port is not connected, returns null.
102 */
103 public native String[] getConnections() throws JackException;
104
105 /**
106 * Returns pointer to the memory area associated with the specified port.
107 *
108 * <p>
109 * The pointer is not very useful in Java, but can be used for some JNI
110 * calls.
111 *
112 * <p>
113 * <b>This method can only be called during {@link JackClient#process(int)}
114 * callback, and only by the thread that invoked the callback. The returned
115 * value is valid only during that callback.</b>
116 *
117 * @param bufferSize
118 * the value passed in <code>bufferSize</code> parameter to
119 * {@link JackClient#process(int)}
120 * @return native pointer, converted to long @
121 */
122 public native long getBufferPointer(int bufferSize) throws JackException;
123
124 /**
125 * Returns ByteBuffer that contains the memory area associated with the
126 * specified port.
127 *
128 * <p>
129 * <b>This method can only be called during {@link JackClient#process(int)}
130 * callback, and only by the thread that invoked the callback. The returned
131 * value is valid only during that callback.</b>
132 *
133 * <p>
134 * The caller is responsible for calling {@link Buffer#clear()} on the
135 * returned value before the buffer is used. Otherwise, <b>the buffer
136 * position, limit, and mark may be set to random value</b>. The buffer
137 * capacity is always set to the buffer size multiplied by
138 * <code>Float.SIZE / 8</code>.
139 *
140 * @param bufferSize
141 * the value passed in <code>bufferSize</code> parameter to
142 * {@link JackClient#process(int)}
143 * @return port buffer, wrapped into ByteBuffer object
144 */
145 public native ByteBuffer getByteBuffer(int bufferSize) throws JackException;
146
147 /**
148 * Ties this (output) port to given input port.
149 *
150 * <p>
151 * The sourcePort must be owned by the same client as this port, and it must
152 * be an input port.
153 *
154 * <p>
155 * This port must be an output port.
156 */
157 public native void tie(JackLocalPort sourcePort) throws JackException;
158
159 /**
160 * Undoes the effect of {@link #tie(JackLocalPort)}.
161 */
162 public native void untie() throws JackException;
163 }