void ClientNode::Connect(status_t status, const media_source &src, const media_destination &dst, const media_format &format, char* name) { if (status != B_OK) return; media_node_id id; FindLatencyFor(dst, &fDownstreamLatency, &id); fOwner->SetFormat(format); JackPort* port; JackPortList* outputs = fOwner->GetOutputPorts(); for (int i = 0; i < outputs->CountItems(); i++) { port = outputs->ItemAt(i); BString str(jack_port_name((jack_port_t*) port)); if (str.Compare(name) == 0 && !port->IsConnected()) { printf("ClientNode::Connect %s\n", port->Name()); port->MediaOutput()->source = src; port->MediaOutput()->destination = dst; port->MediaOutput()->format = format; break; } } }
int JackClient::ConnectPorts(const char* source, const char* destination) { media_node sourceNode = FindNativeNode(source); media_node destNode = FindNativeNode(destination); JackPort* port = PortByName(source); if (port == NULL) printf("port is NULL\n"); printf("%s\n", port->Name()); media_source src(sourceNode.port, 0); media_format format; format.type = B_MEDIA_RAW_AUDIO; format.u.raw_audio.buffer_size = fFormat.u.raw_audio.buffer_size; format.u.raw_audio = media_raw_audio_format::wildcard; format.u.raw_audio.channel_count = 1; format.u.raw_audio.format = WRAPPER_PREFERRED_FORMAT; media_destination dest(destNode.port, 0); media_output* output = port->MediaOutput(); output->node = sourceNode; output->source = src; output->destination = dest; output->format = format; strcpy(output->name, source); media_input* input = port->MediaInput(); input->node = destNode; input->source = src; input->destination = dest; input->format = format; strcpy(input->name, destination); if (status_t ret = fRoster->Connect(src, dest, &format, output, input) != B_OK) { printf("error connecting %s\n", strerror(ret)); return -1; } port->SetConnected(true); return 0; }