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() {}