MediaConnection: Review format negotiation mechanism
This commit is contained in:
@@ -67,8 +67,12 @@ typedef struct media_connection {
|
||||
BMessage* ToMessage() const;
|
||||
|
||||
private:
|
||||
media_input _MediaInput() const;
|
||||
media_output _MediaOutput() const;
|
||||
// NOTE: We are doing this on purpose to avoid redundancy we
|
||||
// want to build the input/output on the fly. In pratice, the
|
||||
// only thing that can change is the format which is kept updated
|
||||
// to reflect the current status of this connection.
|
||||
media_input _BuildMediaInput() const;
|
||||
media_output _BuildMediaOutput() const;
|
||||
|
||||
const media_source& _Source() const;
|
||||
const media_destination& _Destination() const;
|
||||
@@ -84,6 +88,9 @@ private:
|
||||
|
||||
media_source source;
|
||||
media_destination destination;
|
||||
|
||||
// This format always reflect the most updated format depending
|
||||
// on the connection phase.
|
||||
media_format format;
|
||||
char name[B_MEDIA_NAME_LENGTH];
|
||||
|
||||
|
||||
@@ -43,12 +43,6 @@ public:
|
||||
// return media_connection::null otherwise.
|
||||
media_connection Endpoint();
|
||||
|
||||
// This allow to specify a format that will be used while
|
||||
// connecting to another node.
|
||||
void SetAcceptedFormat(
|
||||
const media_format& format);
|
||||
const media_format& AcceptedFormat() const;
|
||||
|
||||
// Represents the buffer size, implement it to return the buffer size
|
||||
// you decided for this connection.
|
||||
// TODO: Do we want this (and ChainSize) moved on the output side?
|
||||
@@ -125,13 +119,14 @@ protected:
|
||||
virtual ~BMediaInput();
|
||||
|
||||
// Callbacks
|
||||
virtual status_t AcceptFormat(media_format* format) = 0;
|
||||
|
||||
virtual void HandleBuffer(BBuffer* buffer);
|
||||
|
||||
virtual void Connected(const media_format& format);
|
||||
virtual void Disconnected();
|
||||
|
||||
private:
|
||||
media_input _MediaInput() const;
|
||||
|
||||
virtual void _ReservedMediaInput0();
|
||||
virtual void _ReservedMediaInput1();
|
||||
@@ -156,8 +151,8 @@ protected:
|
||||
virtual ~BMediaOutput();
|
||||
|
||||
// Callbacks
|
||||
virtual status_t PrepareToConnect(media_format* format);
|
||||
virtual status_t FormatProposal(media_format* format);
|
||||
virtual status_t PrepareToConnect(media_format* format) = 0;
|
||||
virtual status_t FormatProposal(media_format* format) = 0;
|
||||
|
||||
// When a connection is not binded with another, and you really don't want
|
||||
// to use BMediaGraph it's your job to send the buffer to the connection
|
||||
@@ -170,7 +165,6 @@ protected:
|
||||
virtual void Disconnected();
|
||||
|
||||
private:
|
||||
media_output _MediaOutput() const;
|
||||
|
||||
// TODO: possibly unneeded.
|
||||
void _SetEnabled(bool enabled);
|
||||
|
||||
@@ -117,6 +117,12 @@ public:
|
||||
virtual size_t BufferSize() const;
|
||||
virtual void SetBufferSize(size_t bufferSize);
|
||||
|
||||
// This allow to specify a format that will be used while
|
||||
// connecting to another node.
|
||||
void SetAcceptedFormat(
|
||||
const media_format& format);
|
||||
const media_format& AcceptedFormat() const;
|
||||
|
||||
protected:
|
||||
BSimpleMediaConnection(
|
||||
media_connection_kinds kinds);
|
||||
@@ -128,6 +134,8 @@ protected:
|
||||
void* fBufferCookie;
|
||||
|
||||
size_t fBufferSize;
|
||||
|
||||
media_format fAcceptedFormat;
|
||||
};
|
||||
|
||||
|
||||
@@ -138,10 +146,12 @@ public:
|
||||
protected:
|
||||
virtual ~BSimpleMediaInput();
|
||||
|
||||
virtual void Connected(const media_format& format);
|
||||
virtual void Disconnected();
|
||||
virtual status_t AcceptFormat(media_format* format);
|
||||
|
||||
virtual void HandleBuffer(BBuffer* buffer);
|
||||
|
||||
virtual void Connected(const media_format& format);
|
||||
virtual void Disconnected();
|
||||
};
|
||||
|
||||
|
||||
@@ -152,10 +162,11 @@ public:
|
||||
protected:
|
||||
virtual ~BSimpleMediaOutput();
|
||||
|
||||
virtual status_t PrepareToConnect(media_format* format);
|
||||
virtual status_t FormatProposal(media_format* format);
|
||||
|
||||
virtual void Connected(const media_format& format);
|
||||
virtual void Disconnected();
|
||||
|
||||
virtual status_t FormatProposal(media_format* format);
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user