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