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; 24*0cc5ecb8SDario Casalinuovo fConnection.id = -1; 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 43991d9dbfSDario Casalinuovo BMediaClient* 44991d9dbfSDario Casalinuovo BMediaConnection::Client() const 45991d9dbfSDario Casalinuovo { 46991d9dbfSDario Casalinuovo return fOwner; 47991d9dbfSDario Casalinuovo } 48991d9dbfSDario Casalinuovo 49991d9dbfSDario 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 100991d9dbfSDario Casalinuovo status_t ret = fOwner->_DisconnectConnection(this); 101991d9dbfSDario Casalinuovo if (ret != B_OK) 102991d9dbfSDario Casalinuovo return ret; 103991d9dbfSDario Casalinuovo 1047561d9acSDario Casalinuovo delete fBufferGroup; 1057561d9acSDario Casalinuovo fBufferGroup = NULL; 1067561d9acSDario Casalinuovo 107991d9dbfSDario Casalinuovo return ret; 1087561d9acSDario Casalinuovo } 1097561d9acSDario Casalinuovo 1107561d9acSDario Casalinuovo 1117561d9acSDario Casalinuovo status_t 1127561d9acSDario Casalinuovo BMediaConnection::Release() 1137561d9acSDario Casalinuovo { 1147561d9acSDario Casalinuovo CALLED(); 1157561d9acSDario Casalinuovo 116991d9dbfSDario Casalinuovo status_t ret = fOwner->_ReleaseConnection(this); 117991d9dbfSDario Casalinuovo if (ret != B_OK) 118991d9dbfSDario Casalinuovo return ret; 119991d9dbfSDario Casalinuovo 120991d9dbfSDario Casalinuovo delete this; 121991d9dbfSDario Casalinuovo return ret; 1227561d9acSDario Casalinuovo } 1237561d9acSDario Casalinuovo 1247561d9acSDario Casalinuovo 1257561d9acSDario Casalinuovo size_t 1267561d9acSDario Casalinuovo BMediaConnection::BufferSize() const 1277561d9acSDario Casalinuovo { 1287561d9acSDario Casalinuovo CALLED(); 1297561d9acSDario Casalinuovo 1305854fc4aSDario Casalinuovo switch (fConnection.format.type) { 1315854fc4aSDario Casalinuovo case B_MEDIA_RAW_AUDIO: 1325854fc4aSDario Casalinuovo return fConnection.format.u.raw_audio.buffer_size; 1335854fc4aSDario Casalinuovo 1345854fc4aSDario Casalinuovo case B_MEDIA_RAW_VIDEO: 1355854fc4aSDario Casalinuovo return fConnection.format.u.raw_video.display.bytes_per_row * 1365854fc4aSDario Casalinuovo fConnection.format.u.raw_video.display.line_count; 1375854fc4aSDario Casalinuovo 1385854fc4aSDario Casalinuovo default: 1395854fc4aSDario Casalinuovo return 0; 1407561d9acSDario Casalinuovo } 1417561d9acSDario Casalinuovo } 1427561d9acSDario Casalinuovo 1437561d9acSDario Casalinuovo 1447561d9acSDario Casalinuovo void 1457561d9acSDario Casalinuovo BMediaConnection::Connected(const media_format& format) 1467561d9acSDario Casalinuovo { 1477561d9acSDario Casalinuovo fConnected = true; 1487561d9acSDario Casalinuovo } 1497561d9acSDario Casalinuovo 1507561d9acSDario Casalinuovo 1517561d9acSDario Casalinuovo void 1527561d9acSDario Casalinuovo BMediaConnection::Disconnected() 1537561d9acSDario Casalinuovo { 1547561d9acSDario Casalinuovo fConnected = false; 1557561d9acSDario Casalinuovo } 1567561d9acSDario Casalinuovo 1577561d9acSDario Casalinuovo 1587561d9acSDario Casalinuovo void 1597561d9acSDario Casalinuovo BMediaConnection::GetLatencyRange(bigtime_t* min, bigtime_t* max) const 1607561d9acSDario Casalinuovo { 1617561d9acSDario Casalinuovo CALLED(); 1627561d9acSDario Casalinuovo 1637561d9acSDario Casalinuovo *min = fMinLatency; 1647561d9acSDario Casalinuovo *max = fMaxLatency; 1657561d9acSDario Casalinuovo } 1667561d9acSDario Casalinuovo 1677561d9acSDario Casalinuovo 1687561d9acSDario Casalinuovo void 1697561d9acSDario Casalinuovo BMediaConnection::SetLatencyRange(bigtime_t min, bigtime_t max) 1707561d9acSDario Casalinuovo { 1717561d9acSDario Casalinuovo CALLED(); 1727561d9acSDario Casalinuovo 1737561d9acSDario Casalinuovo fMinLatency = min; 1747561d9acSDario Casalinuovo fMaxLatency = max; 1757561d9acSDario Casalinuovo } 1767561d9acSDario Casalinuovo 1777561d9acSDario Casalinuovo 1787561d9acSDario Casalinuovo void 179d64dd7beSDario Casalinuovo BMediaConnection::_ConnectionRegistered(BMediaClient* owner, 1807561d9acSDario Casalinuovo media_connection_id id) 1817561d9acSDario Casalinuovo { 1827561d9acSDario Casalinuovo fOwner = owner; 1837561d9acSDario Casalinuovo fConnection.id = id; 1847561d9acSDario Casalinuovo fConnection.client = fOwner->Client(); 1857561d9acSDario Casalinuovo 1867561d9acSDario Casalinuovo if (fConnection.IsOutput()) { 1877561d9acSDario Casalinuovo fConnection.source.port = fOwner->fNode->ControlPort(); 1887561d9acSDario Casalinuovo fConnection.source.id = fConnection.id; 1897561d9acSDario Casalinuovo 1907561d9acSDario Casalinuovo fConnection.destination = media_destination::null; 1917561d9acSDario Casalinuovo } else { 1927561d9acSDario Casalinuovo fConnection.destination.port = fOwner->fNode->ControlPort(); 1937561d9acSDario Casalinuovo fConnection.destination.id = fConnection.id; 1947561d9acSDario Casalinuovo 1957561d9acSDario Casalinuovo fConnection.source = media_source::null; 1967561d9acSDario Casalinuovo } 1977561d9acSDario Casalinuovo } 1987561d9acSDario Casalinuovo 1997561d9acSDario Casalinuovo 2007561d9acSDario Casalinuovo const media_source& 201d64dd7beSDario Casalinuovo BMediaConnection::_Source() const 2027561d9acSDario Casalinuovo { 203d64dd7beSDario Casalinuovo return fConnection._Source(); 2047561d9acSDario Casalinuovo } 2057561d9acSDario Casalinuovo 2067561d9acSDario Casalinuovo 2077561d9acSDario Casalinuovo const media_destination& 208d64dd7beSDario Casalinuovo BMediaConnection::_Destination() const 2097561d9acSDario Casalinuovo { 210d64dd7beSDario Casalinuovo return fConnection._Destination(); 2117561d9acSDario Casalinuovo } 2127561d9acSDario Casalinuovo 2137561d9acSDario Casalinuovo 2147561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection0() {} 2157561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection1() {} 2167561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection2() {} 2177561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection3() {} 2187561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection4() {} 2197561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection5() {} 2207561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection6() {} 2217561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection7() {} 2227561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection8() {} 2237561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection9() {} 2247561d9acSDario Casalinuovo void BMediaConnection::_ReservedMediaConnection10() {} 2257561d9acSDario Casalinuovo 2267561d9acSDario Casalinuovo 2277561d9acSDario Casalinuovo BMediaInput::BMediaInput() 2287561d9acSDario Casalinuovo : 2297561d9acSDario Casalinuovo BMediaConnection(B_MEDIA_INPUT) 2307561d9acSDario Casalinuovo { 2317561d9acSDario Casalinuovo } 2327561d9acSDario Casalinuovo 2337561d9acSDario Casalinuovo 2340844ddf4SDario Casalinuovo BMediaInput::~BMediaInput() 2350844ddf4SDario Casalinuovo { 2360844ddf4SDario Casalinuovo CALLED(); 2370844ddf4SDario Casalinuovo } 2380844ddf4SDario Casalinuovo 2390844ddf4SDario Casalinuovo 2407561d9acSDario Casalinuovo status_t 2417561d9acSDario Casalinuovo BMediaInput::FormatChanged(const media_format& format) 2427561d9acSDario Casalinuovo { 2437561d9acSDario Casalinuovo if (!format_is_compatible(format, AcceptedFormat())) 2447561d9acSDario Casalinuovo return B_MEDIA_BAD_FORMAT; 2457561d9acSDario Casalinuovo 2467561d9acSDario Casalinuovo SetAcceptedFormat(format); 2477561d9acSDario Casalinuovo 2487561d9acSDario Casalinuovo return B_OK; 2497561d9acSDario Casalinuovo } 2507561d9acSDario Casalinuovo 2517561d9acSDario Casalinuovo 2527561d9acSDario Casalinuovo void 2535854fc4aSDario Casalinuovo BMediaInput::HandleBuffer(BBuffer* buffer) 2547561d9acSDario Casalinuovo { 2557561d9acSDario Casalinuovo CALLED(); 2567561d9acSDario Casalinuovo 2577561d9acSDario Casalinuovo } 2587561d9acSDario Casalinuovo 2597561d9acSDario Casalinuovo 260d64dd7beSDario Casalinuovo media_input 261d64dd7beSDario Casalinuovo BMediaInput::_MediaInput() const 262d64dd7beSDario Casalinuovo { 263d64dd7beSDario Casalinuovo return Connection()._MediaInput(); 264d64dd7beSDario Casalinuovo } 265d64dd7beSDario Casalinuovo 266d64dd7beSDario Casalinuovo 2677561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput0() {} 2687561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput1() {} 2697561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput2() {} 2707561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput3() {} 2717561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput4() {} 2727561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput5() {} 2737561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput6() {} 2747561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput7() {} 2757561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput8() {} 2767561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput9() {} 2777561d9acSDario Casalinuovo void BMediaInput::_ReservedMediaInput10() {} 2787561d9acSDario Casalinuovo 2797561d9acSDario Casalinuovo 2807561d9acSDario Casalinuovo BMediaOutput::BMediaOutput() 2817561d9acSDario Casalinuovo : 2827561d9acSDario Casalinuovo BMediaConnection(B_MEDIA_OUTPUT) 2837561d9acSDario Casalinuovo { 2847561d9acSDario Casalinuovo } 2857561d9acSDario Casalinuovo 2867561d9acSDario Casalinuovo 2870844ddf4SDario Casalinuovo BMediaOutput::~BMediaOutput() 2880844ddf4SDario Casalinuovo { 2890844ddf4SDario Casalinuovo CALLED(); 2900844ddf4SDario Casalinuovo } 2910844ddf4SDario Casalinuovo 2920844ddf4SDario Casalinuovo 2937561d9acSDario Casalinuovo bool 2947561d9acSDario Casalinuovo BMediaOutput::IsEnabled() const 2957561d9acSDario Casalinuovo { 2967561d9acSDario Casalinuovo CALLED(); 2977561d9acSDario Casalinuovo 2987561d9acSDario Casalinuovo return fEnabled; 2997561d9acSDario Casalinuovo } 3007561d9acSDario Casalinuovo 3017561d9acSDario Casalinuovo 3027561d9acSDario Casalinuovo void 3037561d9acSDario Casalinuovo BMediaOutput::SetEnabled(bool enabled) 3047561d9acSDario Casalinuovo { 3057561d9acSDario Casalinuovo fEnabled = enabled; 3067561d9acSDario Casalinuovo } 3077561d9acSDario Casalinuovo 3087561d9acSDario Casalinuovo 3097561d9acSDario Casalinuovo status_t 3107561d9acSDario Casalinuovo BMediaOutput::PrepareToConnect(media_format* format) 3117561d9acSDario Casalinuovo { 3125854fc4aSDario Casalinuovo if (!format_is_compatible(AcceptedFormat(), *format)) 3135854fc4aSDario Casalinuovo return B_ERROR; 3145854fc4aSDario Casalinuovo 3157561d9acSDario Casalinuovo SetAcceptedFormat(*format); 3167561d9acSDario Casalinuovo 3177561d9acSDario Casalinuovo return B_OK; 3187561d9acSDario Casalinuovo } 3197561d9acSDario Casalinuovo 3207561d9acSDario Casalinuovo 3217561d9acSDario Casalinuovo status_t 3227561d9acSDario Casalinuovo BMediaOutput::FormatProposal(media_format* format) 3237561d9acSDario Casalinuovo { 3247561d9acSDario Casalinuovo *format = AcceptedFormat(); 3257561d9acSDario Casalinuovo return B_OK; 3267561d9acSDario Casalinuovo } 3277561d9acSDario Casalinuovo 3287561d9acSDario Casalinuovo 3297561d9acSDario Casalinuovo status_t 3307561d9acSDario Casalinuovo BMediaOutput::FormatChangeRequested(media_format* format) 3317561d9acSDario Casalinuovo { 3327561d9acSDario Casalinuovo return B_ERROR; 3337561d9acSDario Casalinuovo } 3347561d9acSDario Casalinuovo 3357561d9acSDario Casalinuovo 3367561d9acSDario Casalinuovo status_t 3377561d9acSDario Casalinuovo BMediaOutput::SendBuffer(BBuffer* buffer) 3387561d9acSDario Casalinuovo { 3397561d9acSDario Casalinuovo CALLED(); 3407561d9acSDario Casalinuovo 3415854fc4aSDario Casalinuovo if (!IsConnected()) 3425854fc4aSDario Casalinuovo return B_ERROR; 3435854fc4aSDario Casalinuovo 3447561d9acSDario Casalinuovo return fOwner->fNode->SendBuffer(buffer, this); 3457561d9acSDario Casalinuovo } 3467561d9acSDario Casalinuovo 3477561d9acSDario Casalinuovo 3487561d9acSDario Casalinuovo media_output 349d64dd7beSDario Casalinuovo BMediaOutput::_MediaOutput() const 3507561d9acSDario Casalinuovo { 351d64dd7beSDario Casalinuovo return Connection()._MediaOutput(); 3527561d9acSDario Casalinuovo } 3537561d9acSDario Casalinuovo 3547561d9acSDario Casalinuovo 3557561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput0() {} 3567561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput1() {} 3577561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput2() {} 3587561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput3() {} 3597561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput4() {} 3607561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput5() {} 3617561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput6() {} 3627561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput7() {} 3637561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput8() {} 3647561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput9() {} 3657561d9acSDario Casalinuovo void BMediaOutput::_ReservedMediaOutput10() {} 366