xref: /haiku/src/kits/media/experimental/MediaConnection.cpp (revision 0844ddf4d9a63ee543aa3732e93e18039395659b)
17561d9acSDario Casalinuovo /*
27561d9acSDario Casalinuovo  * Copyright 2015, Dario Casalinuovo. All rights reserved.
37561d9acSDario Casalinuovo  * Distributed under the terms of the MIT License.
47561d9acSDario Casalinuovo  */
57561d9acSDario Casalinuovo 
67561d9acSDario Casalinuovo #include <MediaConnection.h>
77561d9acSDario Casalinuovo 
87561d9acSDario Casalinuovo #include "MediaClientNode.h"
97561d9acSDario Casalinuovo 
107561d9acSDario Casalinuovo #include "debug.h"
117561d9acSDario Casalinuovo 
127561d9acSDario Casalinuovo 
137561d9acSDario Casalinuovo BMediaConnection::BMediaConnection(media_connection_kinds kinds)
147561d9acSDario Casalinuovo 	:
157561d9acSDario Casalinuovo 	fOwner(NULL),
167561d9acSDario Casalinuovo 	fBind(NULL),
177561d9acSDario Casalinuovo 	fBufferGroup(NULL),
187561d9acSDario Casalinuovo 	fMinLatency(0),
197561d9acSDario Casalinuovo 	fMaxLatency(0)
207561d9acSDario Casalinuovo {
217561d9acSDario Casalinuovo 	CALLED();
227561d9acSDario Casalinuovo 
237561d9acSDario Casalinuovo 	fConnection.kinds = kinds;
247561d9acSDario Casalinuovo 	fConnection.id = 0;
257561d9acSDario Casalinuovo 	//fConnection.client = media_client::null;
267561d9acSDario Casalinuovo }
277561d9acSDario Casalinuovo 
287561d9acSDario Casalinuovo 
297561d9acSDario Casalinuovo BMediaConnection::~BMediaConnection()
307561d9acSDario Casalinuovo {
317561d9acSDario Casalinuovo 	CALLED();
327561d9acSDario Casalinuovo 
337561d9acSDario Casalinuovo }
347561d9acSDario Casalinuovo 
357561d9acSDario Casalinuovo 
367561d9acSDario Casalinuovo const media_connection&
377561d9acSDario Casalinuovo BMediaConnection::Connection() const
387561d9acSDario Casalinuovo {
397561d9acSDario Casalinuovo 	return fConnection;
407561d9acSDario Casalinuovo }
417561d9acSDario Casalinuovo 
427561d9acSDario Casalinuovo 
437561d9acSDario Casalinuovo bool
447561d9acSDario Casalinuovo BMediaConnection::HasBinding() const
457561d9acSDario Casalinuovo {
467561d9acSDario Casalinuovo 	CALLED();
477561d9acSDario Casalinuovo 
487561d9acSDario Casalinuovo 	return fBind != NULL;
497561d9acSDario Casalinuovo }
507561d9acSDario Casalinuovo 
517561d9acSDario Casalinuovo 
527561d9acSDario Casalinuovo BMediaConnection*
537561d9acSDario Casalinuovo BMediaConnection::Binding() const
547561d9acSDario Casalinuovo {
557561d9acSDario Casalinuovo 	CALLED();
567561d9acSDario Casalinuovo 
577561d9acSDario Casalinuovo 	return fBind;
587561d9acSDario Casalinuovo }
597561d9acSDario Casalinuovo 
607561d9acSDario Casalinuovo 
617561d9acSDario Casalinuovo void
627561d9acSDario Casalinuovo BMediaConnection::SetAcceptedFormat(const media_format& format)
637561d9acSDario Casalinuovo {
647561d9acSDario Casalinuovo 	CALLED();
657561d9acSDario Casalinuovo 
667561d9acSDario Casalinuovo 	fConnection.format = format;
677561d9acSDario Casalinuovo }
687561d9acSDario Casalinuovo 
697561d9acSDario Casalinuovo 
707561d9acSDario Casalinuovo const media_format&
717561d9acSDario Casalinuovo BMediaConnection::AcceptedFormat() const
727561d9acSDario Casalinuovo {
737561d9acSDario Casalinuovo 	CALLED();
747561d9acSDario Casalinuovo 
757561d9acSDario Casalinuovo 	return fConnection.format;
767561d9acSDario Casalinuovo }
777561d9acSDario Casalinuovo 
787561d9acSDario Casalinuovo 
797561d9acSDario Casalinuovo bool
807561d9acSDario Casalinuovo BMediaConnection::IsConnected() const
817561d9acSDario Casalinuovo {
827561d9acSDario Casalinuovo 	CALLED();
837561d9acSDario Casalinuovo 
847561d9acSDario Casalinuovo 	return fConnected;
857561d9acSDario Casalinuovo }
867561d9acSDario Casalinuovo 
877561d9acSDario Casalinuovo 
887561d9acSDario Casalinuovo status_t
897561d9acSDario Casalinuovo BMediaConnection::Disconnect()
907561d9acSDario Casalinuovo {
917561d9acSDario Casalinuovo 	CALLED();
927561d9acSDario Casalinuovo 
937561d9acSDario Casalinuovo 	delete fBufferGroup;
947561d9acSDario Casalinuovo 	fBufferGroup = NULL;
957561d9acSDario Casalinuovo 
96d64dd7beSDario Casalinuovo 	return B_OK;
977561d9acSDario Casalinuovo }
987561d9acSDario Casalinuovo 
997561d9acSDario Casalinuovo 
1007561d9acSDario Casalinuovo status_t
1017561d9acSDario Casalinuovo BMediaConnection::Release()
1027561d9acSDario Casalinuovo {
1037561d9acSDario Casalinuovo 	CALLED();
1047561d9acSDario Casalinuovo 
105d64dd7beSDario Casalinuovo 	return B_OK;
1067561d9acSDario Casalinuovo }
1077561d9acSDario Casalinuovo 
1087561d9acSDario Casalinuovo 
1097561d9acSDario Casalinuovo // TODO: The data represented by the following two functions should be
1107561d9acSDario Casalinuovo // automatically calculated depending on the media_format.
1117561d9acSDario Casalinuovo size_t
1127561d9acSDario Casalinuovo BMediaConnection::BufferSize() const
1137561d9acSDario Casalinuovo {
1147561d9acSDario Casalinuovo 	CALLED();
1157561d9acSDario Casalinuovo 
1167561d9acSDario Casalinuovo 	return fBufferSize;
1177561d9acSDario Casalinuovo }
1187561d9acSDario Casalinuovo 
1197561d9acSDario Casalinuovo 
1207561d9acSDario Casalinuovo bigtime_t
1217561d9acSDario Casalinuovo BMediaConnection::BufferDuration() const
1227561d9acSDario Casalinuovo {
1237561d9acSDario Casalinuovo 	CALLED();
1247561d9acSDario Casalinuovo 
1257561d9acSDario Casalinuovo 	return fBufferDuration;
1267561d9acSDario Casalinuovo }
1277561d9acSDario Casalinuovo 
1287561d9acSDario Casalinuovo 
1297561d9acSDario Casalinuovo void
1307561d9acSDario Casalinuovo BMediaConnection::Connected(const media_format& format)
1317561d9acSDario Casalinuovo {
1327561d9acSDario Casalinuovo 	fConnected = true;
1337561d9acSDario Casalinuovo }
1347561d9acSDario Casalinuovo 
1357561d9acSDario Casalinuovo 
1367561d9acSDario Casalinuovo void
1377561d9acSDario Casalinuovo BMediaConnection::Disconnected()
1387561d9acSDario Casalinuovo {
1397561d9acSDario Casalinuovo 	fConnected = false;
1407561d9acSDario Casalinuovo }
1417561d9acSDario Casalinuovo 
1427561d9acSDario Casalinuovo 
1437561d9acSDario Casalinuovo void
1447561d9acSDario Casalinuovo BMediaConnection::GetLatencyRange(bigtime_t* min, bigtime_t* max) const
1457561d9acSDario Casalinuovo {
1467561d9acSDario Casalinuovo 	CALLED();
1477561d9acSDario Casalinuovo 
1487561d9acSDario Casalinuovo 	*min = fMinLatency;
1497561d9acSDario Casalinuovo 	*max = fMaxLatency;
1507561d9acSDario Casalinuovo }
1517561d9acSDario Casalinuovo 
1527561d9acSDario Casalinuovo 
1537561d9acSDario Casalinuovo void
1547561d9acSDario Casalinuovo BMediaConnection::SetLatencyRange(bigtime_t min, bigtime_t max)
1557561d9acSDario Casalinuovo {
1567561d9acSDario Casalinuovo 	CALLED();
1577561d9acSDario Casalinuovo 
1587561d9acSDario Casalinuovo 	fMinLatency = min;
1597561d9acSDario Casalinuovo 	fMaxLatency = max;
1607561d9acSDario Casalinuovo }
1617561d9acSDario Casalinuovo 
1627561d9acSDario Casalinuovo 
1637561d9acSDario Casalinuovo void
164d64dd7beSDario Casalinuovo BMediaConnection::_ConnectionRegistered(BMediaClient* owner,
1657561d9acSDario Casalinuovo 	media_connection_id id)
1667561d9acSDario Casalinuovo {
1677561d9acSDario Casalinuovo 	fOwner = owner;
1687561d9acSDario Casalinuovo 	fConnection.id = id;
1697561d9acSDario Casalinuovo 	fConnection.client = fOwner->Client();
1707561d9acSDario Casalinuovo 
1717561d9acSDario Casalinuovo 	if (fConnection.IsOutput()) {
1727561d9acSDario Casalinuovo 		fConnection.source.port = fOwner->fNode->ControlPort();
1737561d9acSDario Casalinuovo 		fConnection.source.id = fConnection.id;
1747561d9acSDario Casalinuovo 
1757561d9acSDario Casalinuovo 		fConnection.destination = media_destination::null;
1767561d9acSDario Casalinuovo 	} else {
1777561d9acSDario Casalinuovo 		fConnection.destination.port = fOwner->fNode->ControlPort();
1787561d9acSDario Casalinuovo 		fConnection.destination.id = fConnection.id;
1797561d9acSDario Casalinuovo 
1807561d9acSDario Casalinuovo 		fConnection.source = media_source::null;
1817561d9acSDario Casalinuovo 	}
1827561d9acSDario Casalinuovo }
1837561d9acSDario Casalinuovo 
1847561d9acSDario Casalinuovo 
1857561d9acSDario Casalinuovo const media_source&
186d64dd7beSDario Casalinuovo BMediaConnection::_Source() const
1877561d9acSDario Casalinuovo {
188d64dd7beSDario Casalinuovo 	return fConnection._Source();
1897561d9acSDario Casalinuovo }
1907561d9acSDario Casalinuovo 
1917561d9acSDario Casalinuovo 
1927561d9acSDario Casalinuovo const media_destination&
193d64dd7beSDario Casalinuovo BMediaConnection::_Destination() const
1947561d9acSDario Casalinuovo {
195d64dd7beSDario Casalinuovo 	return fConnection._Destination();
1967561d9acSDario Casalinuovo }
1977561d9acSDario Casalinuovo 
1987561d9acSDario Casalinuovo 
1997561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection0() {}
2007561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection1() {}
2017561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection2() {}
2027561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection3() {}
2037561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection4() {}
2047561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection5() {}
2057561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection6() {}
2067561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection7() {}
2077561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection8() {}
2087561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection9() {}
2097561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection10() {}
2107561d9acSDario Casalinuovo 
2117561d9acSDario Casalinuovo 
2127561d9acSDario Casalinuovo BMediaInput::BMediaInput()
2137561d9acSDario Casalinuovo 	:
2147561d9acSDario Casalinuovo 	BMediaConnection(B_MEDIA_INPUT)
2157561d9acSDario Casalinuovo {
2167561d9acSDario Casalinuovo }
2177561d9acSDario Casalinuovo 
2187561d9acSDario Casalinuovo 
219*0844ddf4SDario Casalinuovo BMediaInput::~BMediaInput()
220*0844ddf4SDario Casalinuovo {
221*0844ddf4SDario Casalinuovo 	CALLED();
222*0844ddf4SDario Casalinuovo }
223*0844ddf4SDario Casalinuovo 
224*0844ddf4SDario Casalinuovo 
2257561d9acSDario Casalinuovo status_t
2267561d9acSDario Casalinuovo BMediaInput::FormatChanged(const media_format& format)
2277561d9acSDario Casalinuovo {
2287561d9acSDario Casalinuovo 	if (!format_is_compatible(format, AcceptedFormat()))
2297561d9acSDario Casalinuovo 		return B_MEDIA_BAD_FORMAT;
2307561d9acSDario Casalinuovo 
2317561d9acSDario Casalinuovo 	SetAcceptedFormat(format);
2327561d9acSDario Casalinuovo 
2337561d9acSDario Casalinuovo 	return B_OK;
2347561d9acSDario Casalinuovo }
2357561d9acSDario Casalinuovo 
2367561d9acSDario Casalinuovo 
2377561d9acSDario Casalinuovo void
2387561d9acSDario Casalinuovo BMediaInput::BufferReceived(BBuffer* buffer)
2397561d9acSDario Casalinuovo {
2407561d9acSDario Casalinuovo 	CALLED();
2417561d9acSDario Casalinuovo 
2427561d9acSDario Casalinuovo }
2437561d9acSDario Casalinuovo 
2447561d9acSDario Casalinuovo 
245d64dd7beSDario Casalinuovo media_input
246d64dd7beSDario Casalinuovo BMediaInput::_MediaInput() const
247d64dd7beSDario Casalinuovo {
248d64dd7beSDario Casalinuovo 	return Connection()._MediaInput();
249d64dd7beSDario Casalinuovo }
250d64dd7beSDario Casalinuovo 
251d64dd7beSDario Casalinuovo 
2527561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput0() {}
2537561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput1() {}
2547561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput2() {}
2557561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput3() {}
2567561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput4() {}
2577561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput5() {}
2587561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput6() {}
2597561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput7() {}
2607561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput8() {}
2617561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput9() {}
2627561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput10() {}
2637561d9acSDario Casalinuovo 
2647561d9acSDario Casalinuovo 
2657561d9acSDario Casalinuovo BMediaOutput::BMediaOutput()
2667561d9acSDario Casalinuovo 	:
2677561d9acSDario Casalinuovo 	BMediaConnection(B_MEDIA_OUTPUT)
2687561d9acSDario Casalinuovo {
2697561d9acSDario Casalinuovo }
2707561d9acSDario Casalinuovo 
2717561d9acSDario Casalinuovo 
272*0844ddf4SDario Casalinuovo BMediaOutput::~BMediaOutput()
273*0844ddf4SDario Casalinuovo {
274*0844ddf4SDario Casalinuovo 	CALLED();
275*0844ddf4SDario Casalinuovo }
276*0844ddf4SDario Casalinuovo 
277*0844ddf4SDario Casalinuovo 
2787561d9acSDario Casalinuovo bool
2797561d9acSDario Casalinuovo BMediaOutput::IsEnabled() const
2807561d9acSDario Casalinuovo {
2817561d9acSDario Casalinuovo 	CALLED();
2827561d9acSDario Casalinuovo 
2837561d9acSDario Casalinuovo 	return fEnabled;
2847561d9acSDario Casalinuovo }
2857561d9acSDario Casalinuovo 
2867561d9acSDario Casalinuovo 
2877561d9acSDario Casalinuovo void
2887561d9acSDario Casalinuovo BMediaOutput::SetEnabled(bool enabled)
2897561d9acSDario Casalinuovo {
2907561d9acSDario Casalinuovo 	fEnabled = enabled;
2917561d9acSDario Casalinuovo }
2927561d9acSDario Casalinuovo 
2937561d9acSDario Casalinuovo 
2947561d9acSDario Casalinuovo status_t
2957561d9acSDario Casalinuovo BMediaOutput::PrepareToConnect(media_format* format)
2967561d9acSDario Casalinuovo {
2977561d9acSDario Casalinuovo 	SetAcceptedFormat(*format);
2987561d9acSDario Casalinuovo 
2997561d9acSDario Casalinuovo 	return B_OK;
3007561d9acSDario Casalinuovo }
3017561d9acSDario Casalinuovo 
3027561d9acSDario Casalinuovo 
3037561d9acSDario Casalinuovo status_t
3047561d9acSDario Casalinuovo BMediaOutput::FormatProposal(media_format* format)
3057561d9acSDario Casalinuovo {
3067561d9acSDario Casalinuovo 	*format = AcceptedFormat();
3077561d9acSDario Casalinuovo 	return B_OK;
3087561d9acSDario Casalinuovo }
3097561d9acSDario Casalinuovo 
3107561d9acSDario Casalinuovo 
3117561d9acSDario Casalinuovo status_t
3127561d9acSDario Casalinuovo BMediaOutput::FormatChangeRequested(media_format* format)
3137561d9acSDario Casalinuovo {
3147561d9acSDario Casalinuovo 	return B_ERROR;
3157561d9acSDario Casalinuovo }
3167561d9acSDario Casalinuovo 
3177561d9acSDario Casalinuovo 
3187561d9acSDario Casalinuovo status_t
3197561d9acSDario Casalinuovo BMediaOutput::SendBuffer(BBuffer* buffer)
3207561d9acSDario Casalinuovo {
3217561d9acSDario Casalinuovo 	CALLED();
3227561d9acSDario Casalinuovo 
3237561d9acSDario Casalinuovo 	return fOwner->fNode->SendBuffer(buffer, this);
3247561d9acSDario Casalinuovo }
3257561d9acSDario Casalinuovo 
3267561d9acSDario Casalinuovo 
3277561d9acSDario Casalinuovo media_output
328d64dd7beSDario Casalinuovo BMediaOutput::_MediaOutput() const
3297561d9acSDario Casalinuovo {
330d64dd7beSDario Casalinuovo 	return Connection()._MediaOutput();
3317561d9acSDario Casalinuovo }
3327561d9acSDario Casalinuovo 
3337561d9acSDario Casalinuovo 
3347561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput0() {}
3357561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput1() {}
3367561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput2() {}
3377561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput3() {}
3387561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput4() {}
3397561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput5() {}
3407561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput6() {}
3417561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput7() {}
3427561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput8() {}
3437561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput9() {}
3447561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput10() {}
345