[haiku-commits] haiku: hrev50712 - src/kits/media headers/private/media

  • From: b.vitruvio@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 26 Nov 2016 17:35:42 +0100 (CET)

hrev50712 adds 3 changesets to branch 'master'
old head: 9e9655ed55fef689addaf8f40729218007f8d93c
new head: 209b520fa0a36190b51a58072192eee474fe982e
overview: 
http://cgit.haiku-os.org/haiku/log/?qt=range&q=209b520fa0a3+%5E9e9655ed55fe

----------------------------------------------------------------------------

9ee6577e2d10: MediaClient: Distribute callbacks across derived classes

05e29ea1ad39: MediaConnection: Remove Reset()

209b520fa0a3: MediaClient: Add some padding and reserved functions

                                [ Dario Casalinuovo <b.vitruvio@xxxxxxxxx> ]

----------------------------------------------------------------------------

5 files changed, 191 insertions(+), 125 deletions(-)
headers/private/media/MediaClient.h     |  13 +--
headers/private/media/MediaConnection.h |  80 ++++++++++++----
src/kits/media/MediaClient.cpp          |  29 ------
src/kits/media/MediaClientNode.cpp      |  58 ++++++------
src/kits/media/MediaConnection.cpp      | 136 ++++++++++++++++++++--------

############################################################################

Commit:      9ee6577e2d1045e302f0ab939776ec6aa66a7ef1
URL:         http://cgit.haiku-os.org/haiku/commit/?id=9ee6577e2d10
Author:      Dario Casalinuovo <b.vitruvio@xxxxxxxxx>
Date:        Sat Nov 26 16:13:02 2016 UTC

MediaClient: Distribute callbacks across derived classes

----------------------------------------------------------------------------

diff --git a/headers/private/media/MediaClient.h 
b/headers/private/media/MediaClient.h
index 9e0f264..04c77e9 100755
--- a/headers/private/media/MediaClient.h
+++ b/headers/private/media/MediaClient.h
@@ -166,16 +166,6 @@ public:
                                                                                
void* cookie = NULL);
 
 protected:
-       virtual void                                    BufferReceived(BBuffer* 
buffer,
-                                                                               
BMediaInput* input);
-
-       // When a connection is not binded with another, it's your job to send
-       // the buffer to the connection you want. You might want
-       // to ovverride it so that you can track something, in this case
-       // be sure to call the base version.
-       virtual status_t                                SendBuffer(BBuffer* 
buffer,
-                                                                               
BMediaOutput* output);
-
        // This is used when the user want to override the BeginConnection
        // mechanism, for example to supply your BMediaConnection derived
        // class. Take ownership of the object.
@@ -237,6 +227,8 @@ private:
 
        friend class BMediaClientNode;
        friend class BMediaConnection;
+       friend class BMediaInput;
+       friend class BMediaOutput;
 };
 
 
diff --git a/headers/private/media/MediaConnection.h 
b/headers/private/media/MediaConnection.h
index e633171..35f5694 100644
--- a/headers/private/media/MediaConnection.h
+++ b/headers/private/media/MediaConnection.h
@@ -42,8 +42,7 @@ public:
                B_FORMAT_PROPOSAL,              // media_format* format
 
                B_ASK_FORMAT_CHANGE,
-               B_FORMAT_CHANGED,
-               B_ASK_TIMER
+               B_FORMAT_CHANGED
        };
 
 
@@ -89,9 +88,6 @@ public:
 
        bool                                                    IsConnected() 
const;
 
-       void                                                    
SetOutputEnabled(bool enabled);
-       bool                                                    
IsOutputEnabled() const;
-
        void                                                    SetCookie(void* 
cookie);
        void*                                                   Cookie() const;
 
@@ -119,13 +115,9 @@ protected:
                                                                                
media_connection_kind kind,
                                                                                
media_connection_id id);
 
-       // TODO: All notifications should be done into private callbacks like 
this.
-       void                                                    
ConnectedCallback(const media_source& source,
-                                                                               
        const media_format& format);
-       void                                                    
DisconnectedCallback(const media_source& source);
-
-       void                                                    
ConnectCallback(const media_destination& source);
-       void                                                    
DisconnectCallback(const media_destination& source);
+       // Those callbacks are shared between BMediaInput and BMediaOutput
+       virtual void                                    Connected(const 
media_format& format);
+       virtual void                                    Disconnected();
 
 private:
        const media_source&                             Source() const;
@@ -152,7 +144,6 @@ private:
        BBufferGroup*                                   fBufferGroup;
 
        bool                                                    fConnected;
-       bool                                                    fOutputEnabled;
 
        virtual void                                    
_ReservedMediaConnection0();
        virtual void                                    
_ReservedMediaConnection1();
@@ -169,6 +160,9 @@ private:
 
        friend class BMediaClient;
        friend class BMediaClientNode;
+
+       friend class BMediaInput;
+       friend class BMediaOutput;
 };
 
 
@@ -177,6 +171,12 @@ public:
                                                                        
BMediaInput(BMediaClient* owner,
                                                                                
media_connection_id id);
 
+protected:
+       // Callbacks
+       virtual status_t                                FormatChanged(const 
media_format& format);
+
+       virtual void                                    BufferReceived(BBuffer* 
buffer);
+
 private:
        media_input                                             MediaInput() 
const;
 
@@ -189,9 +189,27 @@ public:
                                                                        
BMediaOutput(BMediaClient* owner,
                                                                                
media_connection_id id);
 
+       void                                                    
SetOutputEnabled(bool enabled);
+       bool                                                    
IsOutputEnabled() const;
+
+protected:
+       // Callbacks
+       virtual status_t                                
PrepareToConnect(media_format* format);
+
+       virtual status_t                                
FormatProposal(media_format* format);
+       virtual status_t                                
FormatChangeRequested(media_format* format);
+
+       // When a connection is not binded with another, it's your job to send
+       // the buffer to the connection you want. You might want
+       // to ovverride it so that you can track something, in this case
+       // be sure to call the base version.
+       virtual status_t                                SendBuffer(BBuffer* 
buffer);
+
 private:
        media_output                                    MediaOutput() const;
 
+       bool                                                    fOutputEnabled;
+
        friend class BMediaClientNode;
 };
 
diff --git a/src/kits/media/MediaClient.cpp b/src/kits/media/MediaClient.cpp
index 002b836..ab94189 100755
--- a/src/kits/media/MediaClient.cpp
+++ b/src/kits/media/MediaClient.cpp
@@ -450,15 +450,6 @@ BMediaClient::CurrentTime() const
 }
 
 
-status_t
-BMediaClient::SendBuffer(BBuffer* buffer, BMediaOutput* output)
-{
-       CALLED();
-
-       return fNode->SendBuffer(buffer, output);
-}
-
-
 void
 BMediaClient::AddInput(BMediaInput* input)
 {
@@ -477,17 +468,6 @@ BMediaClient::AddOutput(BMediaOutput* output)
 }
 
 
-void
-BMediaClient::BufferReceived(BBuffer* buffer,
-       BMediaInput* connection)
-{
-       CALLED();
-
-       if (connection->fProcessHook != NULL)
-               connection->fProcessHook(connection, buffer);
-}
-
-
 BMediaAddOn*
 BMediaClient::AddOn(int32* id) const
 {
diff --git a/src/kits/media/MediaClientNode.cpp 
b/src/kits/media/MediaClientNode.cpp
index b5f2d96..c090807 100755
--- a/src/kits/media/MediaClientNode.cpp
+++ b/src/kits/media/MediaClientNode.cpp
@@ -169,7 +169,7 @@ BMediaClientNode::GetNextInput(int32* cookie,
        if (fOwner->CountInputs() == 0)
                return B_BAD_INDEX;
 
-       if (*cookie < 0 || *cookie > fOwner->CountInputs()) {
+       if (*cookie < 0 || *cookie >= fOwner->CountInputs()) {
                *cookie = -1;
                input = NULL;
        } else {
@@ -230,7 +230,11 @@ BMediaClientNode::Connected(const media_source& source,
        if (conn == NULL)
                return B_MEDIA_BAD_DESTINATION;
 
-       conn->ConnectedCallback(source, format);
+       conn->fConnection.source = source;
+       conn->SetAcceptedFormat(format);
+
+       conn->Connected(format);
+
        *outInput = conn->MediaInput();
        return B_OK;
 }
@@ -246,7 +250,7 @@ BMediaClientNode::Disconnected(const media_source& source,
        if (conn == NULL)
                return;
 
-       conn->DisconnectedCallback(source);
+       conn->Disconnected();
 }
 
 
@@ -261,12 +265,7 @@ BMediaClientNode::FormatChanged(const media_source& source,
        if (conn == NULL)
                return B_MEDIA_BAD_DESTINATION;
 
-       if (!format_is_compatible(format, conn->AcceptedFormat()))
-               return B_MEDIA_BAD_FORMAT;
-
-       conn->SetAcceptedFormat(format);
-
-       return B_OK;
+       return conn->FormatChanged(format);
 }
 
 
@@ -307,13 +306,7 @@ BMediaClientNode::FormatProposal(const media_source& 
source,
        if (conn == NULL)
                return B_MEDIA_BAD_DESTINATION;
 
-       if (fOwner->fNotifyHook != NULL) {
-               return (*conn->fNotifyHook)(BMediaConnection::B_FORMAT_PROPOSAL,
-                       conn, format);
-       } else
-               *format = conn->AcceptedFormat();
-
-       return B_OK;
+       return conn->FormatProposal(format);
 }
 
 
@@ -324,7 +317,11 @@ BMediaClientNode::FormatChangeRequested(const 
media_source& source,
 {
        CALLED();
 
-       return B_ERROR;
+       BMediaOutput* conn = fOwner->FindOutput(source);
+       if (conn == NULL)
+               return B_MEDIA_BAD_DESTINATION;
+
+       return conn->FormatChangeRequested(format);
 }
 
 
@@ -345,7 +342,7 @@ BMediaClientNode::GetNextOutput(int32* cookie, 
media_output* output)
        if (fOwner->CountOutputs() == 0)
                return B_BAD_INDEX;
 
-       if (*cookie < 0 || *cookie > fOwner->CountOutputs()) {
+       if (*cookie < 0 || *cookie >= fOwner->CountOutputs()) {
                *cookie = -1;
                output = NULL;
        } else {
@@ -423,9 +420,14 @@ BMediaClientNode::PrepareToConnect(const media_source& 
source,
        }
 
        conn->fConnection.destination = dest;
-       conn->SetAcceptedFormat(*format);
+
+       status_t err = conn->PrepareToConnect(format);
+       if (err != B_OK)
+               return err;
+
        *out_source = conn->Source();
        strcpy(name, Name());
+
        return B_OK;
 }
 
@@ -447,12 +449,14 @@ BMediaClientNode::Connect(status_t status, const 
media_source& source,
                return;
        }
 
-       conn->ConnectCallback(dest);
-       strcpy(name, Name());
+       conn->fConnection.destination = dest;
        conn->SetAcceptedFormat(format);
+       strcpy(name, Name());
 
        // TODO: Allocate buffers, add correct latency estimate
        // and buffer duration mode.
+
+       conn->Connected(format);
 }
 
 
@@ -469,7 +473,7 @@ BMediaClientNode::Disconnect(const media_source& source,
        if (source == conn->Source() && dest == conn->Destination())
                conn->Reset();
 
-       conn->DisconnectCallback(dest);
+       conn->Disconnected();
 }
 
 
@@ -572,7 +576,7 @@ BMediaClientNode::_HandleBuffer(BBuffer* buffer)
        BMediaInput* conn = fOwner->FindInput(dest);
 
        if (conn != NULL)
-               fOwner->BufferReceived(buffer, conn);
+               conn->BufferReceived(buffer);
        // TODO: this should be logged someway
 }
 
diff --git a/src/kits/media/MediaConnection.cpp 
b/src/kits/media/MediaConnection.cpp
index 4b52f4d..bf2783c 100644
--- a/src/kits/media/MediaConnection.cpp
+++ b/src/kits/media/MediaConnection.cpp
@@ -115,15 +115,6 @@ BMediaConnection::IsConnected() const
 }
 
 
-bool
-BMediaConnection::IsOutputEnabled() const
-{
-       CALLED();
-
-       return fOutputEnabled;
-}
-
-
 void*
 BMediaConnection::Cookie() const
 {
@@ -212,12 +203,8 @@ BMediaConnection::BufferDuration() const
 
 
 void
-BMediaConnection::ConnectedCallback(const media_source& source,
-       const media_format& format)
+BMediaConnection::Connected(const media_format& format)
 {
-       fConnection.source = source;
-       SetAcceptedFormat(format);
-
        if (fNotifyHook != NULL)
                (*fNotifyHook)(B_CONNECTED, this);
 
@@ -226,7 +213,7 @@ BMediaConnection::ConnectedCallback(const media_source& 
source,
 
 
 void
-BMediaConnection::DisconnectedCallback(const media_source& source)
+BMediaConnection::Disconnected()
 {
        if (fNotifyHook != NULL)
                (*fNotifyHook)(B_DISCONNECTED, this);
@@ -236,19 +223,6 @@ BMediaConnection::DisconnectedCallback(const media_source& 
source)
 
 
 void
-BMediaConnection::ConnectCallback(const media_destination& destination)
-{
-       fConnection.destination = destination;
-}
-
-
-void
-BMediaConnection::DisconnectCallback(const media_destination& destination)
-{
-}
-
-
-void
 BMediaConnection::_Init()
 {
        CALLED();
@@ -300,6 +274,28 @@ BMediaInput::MediaInput() const
 }
 
 
+status_t
+BMediaInput::FormatChanged(const media_format& format)
+{
+       if (!format_is_compatible(format, AcceptedFormat()))
+               return B_MEDIA_BAD_FORMAT;
+
+       SetAcceptedFormat(format);
+
+       return B_OK;
+}
+
+
+void
+BMediaInput::BufferReceived(BBuffer* buffer)
+{
+       CALLED();
+
+       if (fProcessHook != NULL)
+               fProcessHook(this, buffer);
+}
+
+
 BMediaOutput::BMediaOutput(BMediaClient* owner, media_connection_id id)
        :
        BMediaConnection(owner, B_MEDIA_OUTPUT, id)
@@ -307,6 +303,53 @@ BMediaOutput::BMediaOutput(BMediaClient* owner, 
media_connection_id id)
 }
 
 
+bool
+BMediaOutput::IsOutputEnabled() const
+{
+       CALLED();
+
+       return fOutputEnabled;
+}
+
+
+status_t
+BMediaOutput::PrepareToConnect(media_format* format)
+{
+       SetAcceptedFormat(*format);
+
+       return B_OK;
+}
+
+
+status_t
+BMediaOutput::FormatProposal(media_format* format)
+{
+       if (fOwner->fNotifyHook != NULL) {
+               return (*fNotifyHook)(BMediaConnection::B_FORMAT_PROPOSAL,
+                       this, format);
+       } else
+               *format = AcceptedFormat();
+
+       return B_OK;
+}
+
+
+status_t
+BMediaOutput::FormatChangeRequested(media_format* format)
+{
+       return B_ERROR;
+}
+
+
+status_t
+BMediaOutput::SendBuffer(BBuffer* buffer)
+{
+       CALLED();
+
+       return fOwner->fNode->SendBuffer(buffer, this);
+}
+
+
 media_output
 BMediaOutput::MediaOutput() const
 {

############################################################################

Commit:      05e29ea1ad3912c789cf75b4155ad8e51fde6fc1
URL:         http://cgit.haiku-os.org/haiku/commit/?id=05e29ea1ad39
Author:      Dario Casalinuovo <b.vitruvio@xxxxxxxxx>
Date:        Sat Nov 26 16:24:10 2016 UTC

MediaConnection: Remove Reset()

----------------------------------------------------------------------------

diff --git a/headers/private/media/MediaClient.h 
b/headers/private/media/MediaClient.h
index 04c77e9..b99a562 100755
--- a/headers/private/media/MediaClient.h
+++ b/headers/private/media/MediaClient.h
@@ -174,7 +174,6 @@ protected:
 
        // Called from BMediaConnection
                        status_t                                
DisconnectConnection(BMediaConnection* conn);
-                       status_t                                
ResetConnection(BMediaConnection* conn);
                        status_t                                
ReleaseConnection(BMediaConnection* conn);
 
 private:
diff --git a/headers/private/media/MediaConnection.h 
b/headers/private/media/MediaConnection.h
index 35f5694..3f7879c 100644
--- a/headers/private/media/MediaConnection.h
+++ b/headers/private/media/MediaConnection.h
@@ -91,18 +91,14 @@ public:
        void                                                    SetCookie(void* 
cookie);
        void*                                                   Cookie() const;
 
-       // Disconnect this connection.
+       // Disconnect this connection. When a connection is disconnected,
+       // it can be reused as brand new.
        status_t                                                Disconnect();
 
-       // TODO: We really need a Reset()?
-       // When you reset a connection it can be reused as it was brand new.
-       status_t                                                Reset();
-
        // Once you are done with this connection you release it, it 
automatically
        // remove the object from the BMediaClient and free all used resources.
        // This will make the connection to disappear completely, so if you
-       // want to preserve it for future connections just Disconnect() and
-       // Reset() it.
+       // want to preserve it for future connections just Disconnect() it.
        status_t                                                Release();
 
        // Use this to set your callbacks.
diff --git a/src/kits/media/MediaClient.cpp b/src/kits/media/MediaClient.cpp
index ab94189..295c5e5 100755
--- a/src/kits/media/MediaClient.cpp
+++ b/src/kits/media/MediaClient.cpp
@@ -196,15 +196,6 @@ BMediaClient::DisconnectConnection(BMediaConnection* conn)
 
 
 status_t
-BMediaClient::ResetConnection(BMediaConnection* conn)
-{
-       CALLED();
-
-       return B_OK;
-}
-
-
-status_t
 BMediaClient::ReleaseConnection(BMediaConnection* conn)
 {
        CALLED();
diff --git a/src/kits/media/MediaClientNode.cpp 
b/src/kits/media/MediaClientNode.cpp
index c090807..9ea6de4 100755
--- a/src/kits/media/MediaClientNode.cpp
+++ b/src/kits/media/MediaClientNode.cpp
@@ -445,7 +445,7 @@ BMediaClientNode::Connect(status_t status, const 
media_source& source,
 
        // Reset the connection to reuse it
        if (status != B_OK) {
-               conn->Reset();
+               conn->Disconnect();
                return;
        }
 
@@ -470,10 +470,10 @@ BMediaClientNode::Disconnect(const media_source& source,
        if (conn == NULL)
                return;
 
-       if (source == conn->Source() && dest == conn->Destination())
-               conn->Reset();
-
-       conn->Disconnected();
+       if (conn->Destination() == dest) {
+               conn->Disconnect();
+               conn->Disconnected();
+       }
 }
 
 
diff --git a/src/kits/media/MediaConnection.cpp 
b/src/kits/media/MediaConnection.cpp
index bf2783c..010bf24 100644
--- a/src/kits/media/MediaConnection.cpp
+++ b/src/kits/media/MediaConnection.cpp
@@ -129,19 +129,10 @@ BMediaConnection::Disconnect()
 {
        CALLED();
 
-       return fOwner->DisconnectConnection(this);
-}
-
-
-status_t
-BMediaConnection::Reset()
-{
-       CALLED();
-
        delete fBufferGroup;
        fBufferGroup = NULL;
 
-       return fOwner->ResetConnection(this);
+       return fOwner->DisconnectConnection(this);
 }
 
 

############################################################################

Revision:    hrev50712
Commit:      209b520fa0a36190b51a58072192eee474fe982e
URL:         http://cgit.haiku-os.org/haiku/commit/?id=209b520fa0a3
Author:      Dario Casalinuovo <b.vitruvio@xxxxxxxxx>
Date:        Sat Nov 26 16:30:49 2016 UTC

MediaClient: Add some padding and reserved functions

----------------------------------------------------------------------------

diff --git a/headers/private/media/MediaConnection.h 
b/headers/private/media/MediaConnection.h
index 3f7879c..1a97736 100644
--- a/headers/private/media/MediaConnection.h
+++ b/headers/private/media/MediaConnection.h
@@ -176,6 +176,19 @@ protected:
 private:
        media_input                                             MediaInput() 
const;
 
+       virtual void                                    _ReservedMediaInput0();
+       virtual void                                    _ReservedMediaInput1();
+       virtual void                                    _ReservedMediaInput2();
+       virtual void                                    _ReservedMediaInput3();
+       virtual void                                    _ReservedMediaInput4();
+       virtual void                                    _ReservedMediaInput5();
+       virtual void                                    _ReservedMediaInput6();
+       virtual void                                    _ReservedMediaInput7();
+       virtual void                                    _ReservedMediaInput8();
+       virtual void                                    _ReservedMediaInput9();
+       virtual void                                    _ReservedMediaInput10();
+       uint32                                                  fPadding[32];
+
        friend class BMediaClientNode;
 };
 
@@ -206,6 +219,19 @@ private:
 
        bool                                                    fOutputEnabled;
 
+       virtual void                                    _ReservedMediaOutput0();
+       virtual void                                    _ReservedMediaOutput1();
+       virtual void                                    _ReservedMediaOutput2();
+       virtual void                                    _ReservedMediaOutput3();
+       virtual void                                    _ReservedMediaOutput4();
+       virtual void                                    _ReservedMediaOutput5();
+       virtual void                                    _ReservedMediaOutput6();
+       virtual void                                    _ReservedMediaOutput7();
+       virtual void                                    _ReservedMediaOutput8();
+       virtual void                                    _ReservedMediaOutput9();
+       virtual void                                    
_ReservedMediaOutput10();
+       uint32                                                  fPadding[32];
+
        friend class BMediaClientNode;
 };
 
diff --git a/src/kits/media/MediaConnection.cpp 
b/src/kits/media/MediaConnection.cpp
index 010bf24..82bdfc1 100644
--- a/src/kits/media/MediaConnection.cpp
+++ b/src/kits/media/MediaConnection.cpp
@@ -287,6 +287,19 @@ BMediaInput::BufferReceived(BBuffer* buffer)
 }
 
 
+void BMediaInput::_ReservedMediaInput0() {}
+void BMediaInput::_ReservedMediaInput1() {}
+void BMediaInput::_ReservedMediaInput2() {}
+void BMediaInput::_ReservedMediaInput3() {}
+void BMediaInput::_ReservedMediaInput4() {}
+void BMediaInput::_ReservedMediaInput5() {}
+void BMediaInput::_ReservedMediaInput6() {}
+void BMediaInput::_ReservedMediaInput7() {}
+void BMediaInput::_ReservedMediaInput8() {}
+void BMediaInput::_ReservedMediaInput9() {}
+void BMediaInput::_ReservedMediaInput10() {}
+
+
 BMediaOutput::BMediaOutput(BMediaClient* owner, media_connection_id id)
        :
        BMediaConnection(owner, B_MEDIA_OUTPUT, id)
@@ -346,3 +359,16 @@ BMediaOutput::MediaOutput() const
 {
        return Connection().MediaOutput();
 }
+
+
+void BMediaOutput::_ReservedMediaOutput0() {}
+void BMediaOutput::_ReservedMediaOutput1() {}
+void BMediaOutput::_ReservedMediaOutput2() {}
+void BMediaOutput::_ReservedMediaOutput3() {}
+void BMediaOutput::_ReservedMediaOutput4() {}
+void BMediaOutput::_ReservedMediaOutput5() {}
+void BMediaOutput::_ReservedMediaOutput6() {}
+void BMediaOutput::_ReservedMediaOutput7() {}
+void BMediaOutput::_ReservedMediaOutput8() {}
+void BMediaOutput::_ReservedMediaOutput9() {}
+void BMediaOutput::_ReservedMediaOutput10() {}


Other related posts:

  • » [haiku-commits] haiku: hrev50712 - src/kits/media headers/private/media - b . vitruvio