void ClientNode::Disconnect(const media_source &src, const media_destination &dst) { printf("ClientNode::Disconnect\n"); JackPort* port; JackPortList* outputs = fOwner->GetOutputPorts(); for (int i = 0; i < outputs->CountItems(); i++) { port = outputs->ItemAt(i); if (port->MediaOutput()->source == src && port->MediaOutput()->destination == dst) { port->SetConnected(false); } } }
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; }