xref: /haiku/src/kits/media/experimental/MediaConnection.cpp (revision 991d9dbf6dd562590f62b82d1015fa9cd515264e)
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 
43*991d9dbfSDario Casalinuovo BMediaClient*
44*991d9dbfSDario Casalinuovo BMediaConnection::Client() const
45*991d9dbfSDario Casalinuovo {
46*991d9dbfSDario Casalinuovo 	return fOwner;
47*991d9dbfSDario Casalinuovo }
48*991d9dbfSDario Casalinuovo 
49*991d9dbfSDario Casalinuovo 
507561d9acSDario Casalinuovo bool
517561d9acSDario Casalinuovo BMediaConnection::HasBinding() const
527561d9acSDario Casalinuovo {
537561d9acSDario Casalinuovo 	CALLED();
547561d9acSDario Casalinuovo 
557561d9acSDario Casalinuovo 	return fBind != NULL;
567561d9acSDario Casalinuovo }
577561d9acSDario Casalinuovo 
587561d9acSDario Casalinuovo 
597561d9acSDario Casalinuovo BMediaConnection*
607561d9acSDario Casalinuovo BMediaConnection::Binding() const
617561d9acSDario Casalinuovo {
627561d9acSDario Casalinuovo 	CALLED();
637561d9acSDario Casalinuovo 
647561d9acSDario Casalinuovo 	return fBind;
657561d9acSDario Casalinuovo }
667561d9acSDario Casalinuovo 
677561d9acSDario Casalinuovo 
687561d9acSDario Casalinuovo void
697561d9acSDario Casalinuovo BMediaConnection::SetAcceptedFormat(const media_format& format)
707561d9acSDario Casalinuovo {
717561d9acSDario Casalinuovo 	CALLED();
727561d9acSDario Casalinuovo 
737561d9acSDario Casalinuovo 	fConnection.format = format;
747561d9acSDario Casalinuovo }
757561d9acSDario Casalinuovo 
767561d9acSDario Casalinuovo 
777561d9acSDario Casalinuovo const media_format&
787561d9acSDario Casalinuovo BMediaConnection::AcceptedFormat() const
797561d9acSDario Casalinuovo {
807561d9acSDario Casalinuovo 	CALLED();
817561d9acSDario Casalinuovo 
827561d9acSDario Casalinuovo 	return fConnection.format;
837561d9acSDario Casalinuovo }
847561d9acSDario Casalinuovo 
857561d9acSDario Casalinuovo 
867561d9acSDario Casalinuovo bool
877561d9acSDario Casalinuovo BMediaConnection::IsConnected() const
887561d9acSDario Casalinuovo {
897561d9acSDario Casalinuovo 	CALLED();
907561d9acSDario Casalinuovo 
917561d9acSDario Casalinuovo 	return fConnected;
927561d9acSDario Casalinuovo }
937561d9acSDario Casalinuovo 
947561d9acSDario Casalinuovo 
957561d9acSDario Casalinuovo status_t
967561d9acSDario Casalinuovo BMediaConnection::Disconnect()
977561d9acSDario Casalinuovo {
987561d9acSDario Casalinuovo 	CALLED();
997561d9acSDario Casalinuovo 
100*991d9dbfSDario Casalinuovo 	status_t ret = fOwner->_DisconnectConnection(this);
101*991d9dbfSDario Casalinuovo 	if (ret != B_OK)
102*991d9dbfSDario Casalinuovo 		return ret;
103*991d9dbfSDario Casalinuovo 
1047561d9acSDario Casalinuovo 	delete fBufferGroup;
1057561d9acSDario Casalinuovo 	fBufferGroup = NULL;
1067561d9acSDario Casalinuovo 
107*991d9dbfSDario Casalinuovo 	return ret;
1087561d9acSDario Casalinuovo }
1097561d9acSDario Casalinuovo 
1107561d9acSDario Casalinuovo 
1117561d9acSDario Casalinuovo status_t
1127561d9acSDario Casalinuovo BMediaConnection::Release()
1137561d9acSDario Casalinuovo {
1147561d9acSDario Casalinuovo 	CALLED();
1157561d9acSDario Casalinuovo 
116*991d9dbfSDario Casalinuovo 	status_t ret = fOwner->_ReleaseConnection(this);
117*991d9dbfSDario Casalinuovo 	if (ret != B_OK)
118*991d9dbfSDario Casalinuovo 		return ret;
119*991d9dbfSDario Casalinuovo 
120*991d9dbfSDario Casalinuovo 	delete this;
121*991d9dbfSDario Casalinuovo 	return ret;
1227561d9acSDario Casalinuovo }
1237561d9acSDario Casalinuovo 
1247561d9acSDario Casalinuovo 
1257561d9acSDario Casalinuovo // TODO: The data represented by the following two functions should be
1267561d9acSDario Casalinuovo // automatically calculated depending on the media_format.
1277561d9acSDario Casalinuovo size_t
1287561d9acSDario Casalinuovo BMediaConnection::BufferSize() const
1297561d9acSDario Casalinuovo {
1307561d9acSDario Casalinuovo 	CALLED();
1317561d9acSDario Casalinuovo 
1327561d9acSDario Casalinuovo 	return fBufferSize;
1337561d9acSDario Casalinuovo }
1347561d9acSDario Casalinuovo 
1357561d9acSDario Casalinuovo 
1367561d9acSDario Casalinuovo bigtime_t
1377561d9acSDario Casalinuovo BMediaConnection::BufferDuration() const
1387561d9acSDario Casalinuovo {
1397561d9acSDario Casalinuovo 	CALLED();
1407561d9acSDario Casalinuovo 
1417561d9acSDario Casalinuovo 	return fBufferDuration;
1427561d9acSDario Casalinuovo }
1437561d9acSDario Casalinuovo 
1447561d9acSDario Casalinuovo 
1457561d9acSDario Casalinuovo void
1467561d9acSDario Casalinuovo BMediaConnection::Connected(const media_format& format)
1477561d9acSDario Casalinuovo {
1487561d9acSDario Casalinuovo 	fConnected = true;
1497561d9acSDario Casalinuovo }
1507561d9acSDario Casalinuovo 
1517561d9acSDario Casalinuovo 
1527561d9acSDario Casalinuovo void
1537561d9acSDario Casalinuovo BMediaConnection::Disconnected()
1547561d9acSDario Casalinuovo {
1557561d9acSDario Casalinuovo 	fConnected = false;
1567561d9acSDario Casalinuovo }
1577561d9acSDario Casalinuovo 
1587561d9acSDario Casalinuovo 
1597561d9acSDario Casalinuovo void
1607561d9acSDario Casalinuovo BMediaConnection::GetLatencyRange(bigtime_t* min, bigtime_t* max) const
1617561d9acSDario Casalinuovo {
1627561d9acSDario Casalinuovo 	CALLED();
1637561d9acSDario Casalinuovo 
1647561d9acSDario Casalinuovo 	*min = fMinLatency;
1657561d9acSDario Casalinuovo 	*max = fMaxLatency;
1667561d9acSDario Casalinuovo }
1677561d9acSDario Casalinuovo 
1687561d9acSDario Casalinuovo 
1697561d9acSDario Casalinuovo void
1707561d9acSDario Casalinuovo BMediaConnection::SetLatencyRange(bigtime_t min, bigtime_t max)
1717561d9acSDario Casalinuovo {
1727561d9acSDario Casalinuovo 	CALLED();
1737561d9acSDario Casalinuovo 
1747561d9acSDario Casalinuovo 	fMinLatency = min;
1757561d9acSDario Casalinuovo 	fMaxLatency = max;
1767561d9acSDario Casalinuovo }
1777561d9acSDario Casalinuovo 
1787561d9acSDario Casalinuovo 
1797561d9acSDario Casalinuovo void
180d64dd7beSDario Casalinuovo BMediaConnection::_ConnectionRegistered(BMediaClient* owner,
1817561d9acSDario Casalinuovo 	media_connection_id id)
1827561d9acSDario Casalinuovo {
1837561d9acSDario Casalinuovo 	fOwner = owner;
1847561d9acSDario Casalinuovo 	fConnection.id = id;
1857561d9acSDario Casalinuovo 	fConnection.client = fOwner->Client();
1867561d9acSDario Casalinuovo 
1877561d9acSDario Casalinuovo 	if (fConnection.IsOutput()) {
1887561d9acSDario Casalinuovo 		fConnection.source.port = fOwner->fNode->ControlPort();
1897561d9acSDario Casalinuovo 		fConnection.source.id = fConnection.id;
1907561d9acSDario Casalinuovo 
1917561d9acSDario Casalinuovo 		fConnection.destination = media_destination::null;
1927561d9acSDario Casalinuovo 	} else {
1937561d9acSDario Casalinuovo 		fConnection.destination.port = fOwner->fNode->ControlPort();
1947561d9acSDario Casalinuovo 		fConnection.destination.id = fConnection.id;
1957561d9acSDario Casalinuovo 
1967561d9acSDario Casalinuovo 		fConnection.source = media_source::null;
1977561d9acSDario Casalinuovo 	}
1987561d9acSDario Casalinuovo }
1997561d9acSDario Casalinuovo 
2007561d9acSDario Casalinuovo 
2017561d9acSDario Casalinuovo const media_source&
202d64dd7beSDario Casalinuovo BMediaConnection::_Source() const
2037561d9acSDario Casalinuovo {
204d64dd7beSDario Casalinuovo 	return fConnection._Source();
2057561d9acSDario Casalinuovo }
2067561d9acSDario Casalinuovo 
2077561d9acSDario Casalinuovo 
2087561d9acSDario Casalinuovo const media_destination&
209d64dd7beSDario Casalinuovo BMediaConnection::_Destination() const
2107561d9acSDario Casalinuovo {
211d64dd7beSDario Casalinuovo 	return fConnection._Destination();
2127561d9acSDario Casalinuovo }
2137561d9acSDario Casalinuovo 
2147561d9acSDario Casalinuovo 
2157561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection0() {}
2167561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection1() {}
2177561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection2() {}
2187561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection3() {}
2197561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection4() {}
2207561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection5() {}
2217561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection6() {}
2227561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection7() {}
2237561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection8() {}
2247561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection9() {}
2257561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection10() {}
2267561d9acSDario Casalinuovo 
2277561d9acSDario Casalinuovo 
2287561d9acSDario Casalinuovo BMediaInput::BMediaInput()
2297561d9acSDario Casalinuovo 	:
2307561d9acSDario Casalinuovo 	BMediaConnection(B_MEDIA_INPUT)
2317561d9acSDario Casalinuovo {
2327561d9acSDario Casalinuovo }
2337561d9acSDario Casalinuovo 
2347561d9acSDario Casalinuovo 
2350844ddf4SDario Casalinuovo BMediaInput::~BMediaInput()
2360844ddf4SDario Casalinuovo {
2370844ddf4SDario Casalinuovo 	CALLED();
2380844ddf4SDario Casalinuovo }
2390844ddf4SDario Casalinuovo 
2400844ddf4SDario Casalinuovo 
2417561d9acSDario Casalinuovo status_t
2427561d9acSDario Casalinuovo BMediaInput::FormatChanged(const media_format& format)
2437561d9acSDario Casalinuovo {
2447561d9acSDario Casalinuovo 	if (!format_is_compatible(format, AcceptedFormat()))
2457561d9acSDario Casalinuovo 		return B_MEDIA_BAD_FORMAT;
2467561d9acSDario Casalinuovo 
2477561d9acSDario Casalinuovo 	SetAcceptedFormat(format);
2487561d9acSDario Casalinuovo 
2497561d9acSDario Casalinuovo 	return B_OK;
2507561d9acSDario Casalinuovo }
2517561d9acSDario Casalinuovo 
2527561d9acSDario Casalinuovo 
2537561d9acSDario Casalinuovo void
2547561d9acSDario Casalinuovo BMediaInput::BufferReceived(BBuffer* buffer)
2557561d9acSDario Casalinuovo {
2567561d9acSDario Casalinuovo 	CALLED();
2577561d9acSDario Casalinuovo 
2587561d9acSDario Casalinuovo }
2597561d9acSDario Casalinuovo 
2607561d9acSDario Casalinuovo 
261d64dd7beSDario Casalinuovo media_input
262d64dd7beSDario Casalinuovo BMediaInput::_MediaInput() const
263d64dd7beSDario Casalinuovo {
264d64dd7beSDario Casalinuovo 	return Connection()._MediaInput();
265d64dd7beSDario Casalinuovo }
266d64dd7beSDario Casalinuovo 
267d64dd7beSDario Casalinuovo 
2687561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput0() {}
2697561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput1() {}
2707561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput2() {}
2717561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput3() {}
2727561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput4() {}
2737561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput5() {}
2747561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput6() {}
2757561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput7() {}
2767561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput8() {}
2777561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput9() {}
2787561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput10() {}
2797561d9acSDario Casalinuovo 
2807561d9acSDario Casalinuovo 
2817561d9acSDario Casalinuovo BMediaOutput::BMediaOutput()
2827561d9acSDario Casalinuovo 	:
2837561d9acSDario Casalinuovo 	BMediaConnection(B_MEDIA_OUTPUT)
2847561d9acSDario Casalinuovo {
2857561d9acSDario Casalinuovo }
2867561d9acSDario Casalinuovo 
2877561d9acSDario Casalinuovo 
2880844ddf4SDario Casalinuovo BMediaOutput::~BMediaOutput()
2890844ddf4SDario Casalinuovo {
2900844ddf4SDario Casalinuovo 	CALLED();
2910844ddf4SDario Casalinuovo }
2920844ddf4SDario Casalinuovo 
2930844ddf4SDario Casalinuovo 
2947561d9acSDario Casalinuovo bool
2957561d9acSDario Casalinuovo BMediaOutput::IsEnabled() const
2967561d9acSDario Casalinuovo {
2977561d9acSDario Casalinuovo 	CALLED();
2987561d9acSDario Casalinuovo 
2997561d9acSDario Casalinuovo 	return fEnabled;
3007561d9acSDario Casalinuovo }
3017561d9acSDario Casalinuovo 
3027561d9acSDario Casalinuovo 
3037561d9acSDario Casalinuovo void
3047561d9acSDario Casalinuovo BMediaOutput::SetEnabled(bool enabled)
3057561d9acSDario Casalinuovo {
3067561d9acSDario Casalinuovo 	fEnabled = enabled;
3077561d9acSDario Casalinuovo }
3087561d9acSDario Casalinuovo 
3097561d9acSDario Casalinuovo 
3107561d9acSDario Casalinuovo status_t
3117561d9acSDario Casalinuovo BMediaOutput::PrepareToConnect(media_format* format)
3127561d9acSDario Casalinuovo {
3137561d9acSDario Casalinuovo 	SetAcceptedFormat(*format);
3147561d9acSDario Casalinuovo 
3157561d9acSDario Casalinuovo 	return B_OK;
3167561d9acSDario Casalinuovo }
3177561d9acSDario Casalinuovo 
3187561d9acSDario Casalinuovo 
3197561d9acSDario Casalinuovo status_t
3207561d9acSDario Casalinuovo BMediaOutput::FormatProposal(media_format* format)
3217561d9acSDario Casalinuovo {
3227561d9acSDario Casalinuovo 	*format = AcceptedFormat();
3237561d9acSDario Casalinuovo 	return B_OK;
3247561d9acSDario Casalinuovo }
3257561d9acSDario Casalinuovo 
3267561d9acSDario Casalinuovo 
3277561d9acSDario Casalinuovo status_t
3287561d9acSDario Casalinuovo BMediaOutput::FormatChangeRequested(media_format* format)
3297561d9acSDario Casalinuovo {
3307561d9acSDario Casalinuovo 	return B_ERROR;
3317561d9acSDario Casalinuovo }
3327561d9acSDario Casalinuovo 
3337561d9acSDario Casalinuovo 
3347561d9acSDario Casalinuovo status_t
3357561d9acSDario Casalinuovo BMediaOutput::SendBuffer(BBuffer* buffer)
3367561d9acSDario Casalinuovo {
3377561d9acSDario Casalinuovo 	CALLED();
3387561d9acSDario Casalinuovo 
3397561d9acSDario Casalinuovo 	return fOwner->fNode->SendBuffer(buffer, this);
3407561d9acSDario Casalinuovo }
3417561d9acSDario Casalinuovo 
3427561d9acSDario Casalinuovo 
3437561d9acSDario Casalinuovo media_output
344d64dd7beSDario Casalinuovo BMediaOutput::_MediaOutput() const
3457561d9acSDario Casalinuovo {
346d64dd7beSDario Casalinuovo 	return Connection()._MediaOutput();
3477561d9acSDario Casalinuovo }
3487561d9acSDario Casalinuovo 
3497561d9acSDario Casalinuovo 
3507561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput0() {}
3517561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput1() {}
3527561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput2() {}
3537561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput3() {}
3547561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput4() {}
3557561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput5() {}
3567561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput6() {}
3577561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput7() {}
3587561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput8() {}
3597561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput9() {}
3607561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput10() {}
361