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;
63 void JackPort::Release()
66 fFlags = JackPortIsInput;
72 fPlaybackLatency.
min = fPlaybackLatency.
max = 0;
73 fCaptureLatency.
min = fCaptureLatency.
max = 0;
79 int JackPort::GetRefNum()
const
84 jack_nframes_t JackPort::GetLatency()
const
89 jack_nframes_t JackPort::GetTotalLatency()
const
94 void JackPort::SetLatency(jack_nframes_t nframes)
101 if (fFlags & JackPortIsOutput) {
102 fCaptureLatency.
min = nframes;
103 fCaptureLatency.
max = nframes;
105 if (fFlags & JackPortIsInput) {
106 fPlaybackLatency.
min = nframes;
107 fPlaybackLatency.
max = nframes;
113 if (mode == JackCaptureLatency) {
114 fCaptureLatency = *range;
119 if ((fFlags & JackPortIsOutput) && (fFlags & JackPortIsPhysical))
120 fLatency = (range->
min + range->
max) / 2;
122 fPlaybackLatency = *range;
127 if ((fFlags & JackPortIsInput) && (fFlags & JackPortIsPhysical))
128 fLatency = (range->
min + range->
max) / 2;
132 void JackPort::GetLatencyRange(jack_latency_callback_mode_t mode,
jack_latency_range_t* range)
const
134 if (mode == JackCaptureLatency) {
135 *range = fCaptureLatency;
137 *range = fPlaybackLatency;
141 int JackPort::Tie(jack_port_id_t port_index)
147 int JackPort::UnTie()
166 }
else if (fMonitorRequests) {
185 if (fMonitorRequests == 0) {
189 if (fMonitorRequests > 0) {
190 fMonitorRequests = 0;
197 const char* JackPort::GetName()
const
202 const char* JackPort::GetShortName()
const
207 return strchr(fName,
':') + 1;
210 int JackPort::GetFlags()
const
215 const char* JackPort::GetType()
const
217 const JackPortType* type = GetPortType(fTypeId);
221 void JackPort::SetName(
const char* new_name)
223 char* colon = strchr(fName,
':');
224 int len =
sizeof(fName) - ((
int) (colon - fName)) - 2;
225 snprintf(colon + 1, len,
"%s", new_name);
228 bool JackPort::NameEquals(
const char* target)
230 char buf[REAL_JACK_PORT_NAME_SIZE];
239 if (strncmp(target,
"ALSA:capture", 12) == 0 || strncmp(target,
"ALSA:playback", 13) == 0) {
240 snprintf(buf,
sizeof(buf),
"alsa_pcm%s", target + 4);
244 return (strcmp(fName, target) == 0
245 || strcmp(fAlias1, target) == 0
246 || strcmp(fAlias2, target) == 0);
249 int JackPort::GetAliases(
char*
const aliases[2])
253 if (fAlias1[0] !=
'\0') {
254 snprintf(aliases[0], REAL_JACK_PORT_NAME_SIZE,
"%s", fAlias1);
258 if (fAlias2[0] !=
'\0') {
259 snprintf(aliases[1], REAL_JACK_PORT_NAME_SIZE,
"%s", fAlias2);
266 int JackPort::SetAlias(
const char* alias)
268 if (fAlias1[0] ==
'\0') {
269 snprintf(fAlias1,
sizeof(fAlias1),
"%s", alias);
270 }
else if (fAlias2[0] ==
'\0') {
271 snprintf(fAlias2,
sizeof(fAlias2),
"%s", alias);
279 int JackPort::UnsetAlias(
const char* alias)
281 if (strcmp(fAlias1, alias) == 0) {
283 }
else if (strcmp(fAlias2, alias) == 0) {
292 void JackPort::ClearBuffer(jack_nframes_t frames)
294 const JackPortType* type = GetPortType(fTypeId);
295 (type->init)(GetBuffer(), frames *
sizeof(jack_default_audio_sample_t), frames);
298 void JackPort::MixBuffers(
void** src_buffers,
int src_count, jack_nframes_t buffer_size)
300 const JackPortType* type = GetPortType(fTypeId);
301 (type->mixdown)(GetBuffer(), src_buffers, src_count, buffer_size);
int RequestMonitor(bool onoff)
int EnsureMonitor(bool onoff)