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) {
45 strcpy(fName, port_name);
50 fPlaybackLatency.
min = fPlaybackLatency.
max = 0;
51 fCaptureLatency.
min = fCaptureLatency.
max = 0;
64 void JackPort::Release()
67 fFlags = JackPortIsInput;
73 fPlaybackLatency.
min = fPlaybackLatency.
max = 0;
74 fCaptureLatency.
min = fCaptureLatency.
max = 0;
80 int JackPort::GetRefNum()
const
85 jack_nframes_t JackPort::GetLatency()
const
90 jack_nframes_t JackPort::GetTotalLatency()
const
95 void JackPort::SetLatency(jack_nframes_t nframes)
102 if (fFlags & JackPortIsOutput) {
103 fCaptureLatency.
min = nframes;
104 fCaptureLatency.
max = nframes;
106 if (fFlags & JackPortIsInput) {
107 fPlaybackLatency.
min = nframes;
108 fPlaybackLatency.
max = nframes;
114 if (mode == JackCaptureLatency) {
115 fCaptureLatency = *range;
120 if ((fFlags & JackPortIsOutput) && (fFlags & JackPortIsPhysical)) {
121 fLatency = (range->
min + range->
max) / 2;
124 fPlaybackLatency = *range;
129 if ((fFlags & JackPortIsInput) && (fFlags & JackPortIsPhysical)) {
130 fLatency = (range->
min + range->
max) / 2;
135 void JackPort::GetLatencyRange(jack_latency_callback_mode_t mode,
jack_latency_range_t* range)
const
137 if (mode == JackCaptureLatency) {
138 *range = fCaptureLatency;
140 *range = fPlaybackLatency;
144 int JackPort::Tie(jack_port_id_t port_index)
150 int JackPort::UnTie()
169 }
else if (fMonitorRequests) {
188 if (fMonitorRequests == 0) {
192 if (fMonitorRequests > 0) {
193 fMonitorRequests = 0;
200 const char* JackPort::GetName()
const
205 const char* JackPort::GetShortName()
const
210 return strchr(fName,
':') + 1;
213 int JackPort::GetFlags()
const
218 const char* JackPort::GetType()
const
220 const JackPortType* type = GetPortType(fTypeId);
224 void JackPort::SetName(
const char* new_name)
226 char* colon = strchr(fName,
':');
227 int len =
sizeof(fName) - ((
int) (colon - fName)) - 2;
228 snprintf(colon + 1, len,
"%s", new_name);
231 bool JackPort::NameEquals(
const char* target)
233 char buf[REAL_JACK_PORT_NAME_SIZE+1];
242 if (strncmp(target,
"ALSA:capture", 12) == 0 || strncmp(target,
"ALSA:playback", 13) == 0) {
243 snprintf(buf,
sizeof(buf),
"alsa_pcm%s", target + 4);
247 return (strcmp(fName, target) == 0
248 || strcmp(fAlias1, target) == 0
249 || strcmp(fAlias2, target) == 0);
252 int JackPort::GetAliases(
char*
const aliases[2])
256 if (fAlias1[0] !=
'\0') {
257 snprintf(aliases[0], REAL_JACK_PORT_NAME_SIZE,
"%s", fAlias1);
261 if (fAlias2[0] !=
'\0') {
262 snprintf(aliases[1], REAL_JACK_PORT_NAME_SIZE,
"%s", fAlias2);
269 int JackPort::SetAlias(
const char* alias)
271 if (fAlias1[0] ==
'\0') {
272 snprintf(fAlias1,
sizeof(fAlias1),
"%s", alias);
273 }
else if (fAlias2[0] ==
'\0') {
274 snprintf(fAlias2,
sizeof(fAlias2),
"%s", alias);
282 int JackPort::UnsetAlias(
const char* alias)
284 if (strcmp(fAlias1, alias) == 0) {
286 }
else if (strcmp(fAlias2, alias) == 0) {
295 void JackPort::ClearBuffer(jack_nframes_t frames)
297 const JackPortType* type = GetPortType(fTypeId);
298 (type->init)(GetBuffer(), frames *
sizeof(jack_default_audio_sample_t), frames);
301 void JackPort::MixBuffers(
void** src_buffers,
int src_count, jack_nframes_t buffer_size)
303 const JackPortType* type = GetPortType(fTypeId);
304 (type->mixdown)(GetBuffer(), src_buffers, src_count, buffer_size);
int RequestMonitor(bool onoff)
int EnsureMonitor(bool onoff)