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