22 #include "JackError.h"
23 #include "JackPortType.h"
35 bool JackPort::Allocate(
int refnum,
const char* port_name,
const char* port_type, JackPortFlags flags)
37 jack_port_type_id_t
id = GetPortTypeId(port_type);
38 assert(
id >= 0 &&
id <= PORT_TYPES_MAX);
39 if (
id == PORT_TYPES_MAX)
44 strcpy(fName, port_name);
49 fPlaybackLatency.
min = fPlaybackLatency.
max = 0;
50 fCaptureLatency.
min = fCaptureLatency.
max = 0;
61 void JackPort::Release()
64 fFlags = JackPortIsInput;
70 fPlaybackLatency.
min = fPlaybackLatency.
max = 0;
71 fCaptureLatency.
min = fCaptureLatency.
max = 0;
77 int JackPort::GetRefNum()
const
82 jack_nframes_t JackPort::GetLatency()
const
87 jack_nframes_t JackPort::GetTotalLatency()
const
92 void JackPort::SetLatency(jack_nframes_t nframes)
99 if (fFlags & JackPortIsOutput) {
100 fCaptureLatency.
min = nframes;
101 fCaptureLatency.
max = nframes;
103 if (fFlags & JackPortIsInput) {
104 fPlaybackLatency.
min = nframes;
105 fPlaybackLatency.
max = nframes;
111 if (mode == JackCaptureLatency) {
112 fCaptureLatency = *range;
117 if ((fFlags & JackPortIsOutput) && (fFlags & JackPortIsPhysical))
118 fLatency = (range->
min + range->
max) / 2;
120 fPlaybackLatency = *range;
125 if ((fFlags & JackPortIsInput) && (fFlags & JackPortIsPhysical))
126 fLatency = (range->
min + range->
max) / 2;
130 void JackPort::GetLatencyRange(jack_latency_callback_mode_t mode,
jack_latency_range_t* range)
const
132 if (mode == JackCaptureLatency) {
133 *range = fCaptureLatency;
135 *range = fPlaybackLatency;
139 int JackPort::Tie(jack_port_id_t port_index)
145 int JackPort::UnTie()
164 }
else if (fMonitorRequests) {
183 if (fMonitorRequests == 0) {
187 if (fMonitorRequests > 0) {
188 fMonitorRequests = 0;
195 const char* JackPort::GetName()
const
200 const char* JackPort::GetShortName()
const
205 return strchr(fName,
':') + 1;
208 int JackPort::GetFlags()
const
213 const char* JackPort::GetType()
const
215 const JackPortType* type = GetPortType(fTypeId);
219 void JackPort::SetName(
const char* new_name)
221 char* colon = strchr(fName,
':');
222 int len =
sizeof(fName) - ((
int) (colon - fName)) - 2;
223 snprintf(colon + 1, len,
"%s", new_name);
226 bool JackPort::NameEquals(
const char* target)
228 char buf[REAL_JACK_PORT_NAME_SIZE];
237 if (strncmp(target,
"ALSA:capture", 12) == 0 || strncmp(target,
"ALSA:playback", 13) == 0) {
238 snprintf(buf,
sizeof(buf),
"alsa_pcm%s", target + 4);
242 return (strcmp(fName, target) == 0
243 || strcmp(fAlias1, target) == 0
244 || strcmp(fAlias2, target) == 0);
247 int JackPort::GetAliases(
char*
const aliases[2])
251 if (fAlias1[0] !=
'\0') {
252 snprintf(aliases[0], REAL_JACK_PORT_NAME_SIZE,
"%s", fAlias1);
256 if (fAlias2[0] !=
'\0') {
257 snprintf(aliases[1], REAL_JACK_PORT_NAME_SIZE,
"%s", fAlias2);
264 int JackPort::SetAlias(
const char* alias)
266 if (fAlias1[0] ==
'\0') {
267 snprintf(fAlias1,
sizeof(fAlias1),
"%s", alias);
268 }
else if (fAlias2[0] ==
'\0') {
269 snprintf(fAlias2,
sizeof(fAlias2),
"%s", alias);
277 int JackPort::UnsetAlias(
const char* alias)
279 if (strcmp(fAlias1, alias) == 0) {
281 }
else if (strcmp(fAlias2, alias) == 0) {
290 void JackPort::ClearBuffer(jack_nframes_t frames)
292 const JackPortType* type = GetPortType(fTypeId);
293 (type->init)(GetBuffer(), frames *
sizeof(jack_default_audio_sample_t), frames);
296 void JackPort::MixBuffers(
void** src_buffers,
int src_count, jack_nframes_t buffer_size)
298 const JackPortType* type = GetPortType(fTypeId);
299 (type->mixdown)(GetBuffer(), src_buffers, src_count, buffer_size);