예제 #1
0
status_t AudioFilterNode::PrepareToConnect(
	const media_source&					source,
	const media_destination&		destination,
	media_format*								ioFormat,
	media_source*								outSource,
	char*												outName) {

	status_t err;
	char formatStr[256];
	string_for_format(*ioFormat, formatStr, 255);
	PRINT(("AudioFilterNode::PrepareToConnect()\n"
		"\tproposed format: %s\n", formatStr));
	
	if(source != m_output.source) {
		PRINT(("\tBad source.\n"));
		return B_MEDIA_BAD_SOURCE;
	}
	if(m_output.destination != media_destination::null) {
		PRINT(("\tAlready connected.\n"));
		return B_MEDIA_ALREADY_CONNECTED;
	}
	
	if(ioFormat->type != B_MEDIA_RAW_AUDIO) {
		PRINT(("\tBad format type.\n"));
		return B_MEDIA_BAD_FORMAT;
	}

	// do a final validity check:
	media_format required;
	required.type = B_MEDIA_RAW_AUDIO;
	err = getRequiredOutputFormat(required);
	ASSERT(err == B_OK);
	
	err = validateProposedOutputFormat(
		required,	*ioFormat);

	if(err < B_OK) {
		// no go
		return err;
	}
	
	// fill in wildcards
	specializeOutputFormat(*ioFormat);
	
	string_for_format(*ioFormat, formatStr, 255);
	PRINT(("FINAL FORMAT: %s\n", formatStr));

	// reserve the output
	m_output.destination = destination;
	m_output.format = *ioFormat;
	
	// pass back source & output name
	*outSource = m_output.source;
	strncpy(outName, m_output.name, B_MEDIA_NAME_LENGTH);
	
	return B_OK;
}
예제 #2
0
파일: FlangerNode.cpp 프로젝트: DonCN/haiku
status_t FlangerNode::PrepareToConnect(
	const media_source& source,
	const media_destination& destination,
	media_format* pioFormat,
	media_source* poSource,
	char* poName) {

	char formatStr[256];
	string_for_format(*pioFormat, formatStr, 255);
	PRINT(("FlangerNode::PrepareToConnect()\n"
		"\tproposed format: %s\n", formatStr));

	if(source != m_output.source) {
		PRINT(("\tBad source.\n"));
		return B_MEDIA_BAD_SOURCE;
	}
	if(m_output.destination != media_destination::null) {
		PRINT(("\tAlready connected.\n"));
		return B_MEDIA_ALREADY_CONNECTED;
	}

	if(pioFormat->type != B_MEDIA_RAW_AUDIO) {
		PRINT(("\tBad format type.\n"));
		return B_MEDIA_BAD_FORMAT;
	}

	// do a final validity check:
	status_t err = validateProposedFormat(
		(m_format.u.raw_audio.format != media_raw_audio_format::wildcard.format) ?
			m_format :
			m_preferredFormat,
		*pioFormat);

	if(err < B_OK) {
		// no go
		return err;
	}

	// fill in wildcards
	specializeOutputFormat(*pioFormat);

	// reserve the output
	m_output.destination = destination;
	m_output.format = *pioFormat;

	// pass back source & output name
	*poSource = m_output.source;
	strncpy(poName, m_output.name, B_MEDIA_NAME_LENGTH);

	return B_OK;
}