* Copyright 2015-2018, Dario Casalinuovo. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _MEDIA_CONNECTION_H
#define _MEDIA_CONNECTION_H
#include <BufferGroup.h>
#include <MediaDefs.h>
#include <MediaClient.h>
#include <MediaClientDefs.h>
namespace BPrivate { namespace media {
class BMediaClientNode;
class BMediaConnection {
public:
const media_connection& Connection() const;
BMediaClient* Client() const;
media_connection_id Id() const;
const char* Name() const;
bool HasBinding() const;
BMediaConnection* Binding() const;
bool IsConnected() const;
media_connection Endpoint();
virtual size_t BufferSize() const = 0;
status_t Disconnect();
status_t Release();
protected:
BMediaConnection(
media_connection_kinds kinds,
const char* name = NULL);
virtual ~BMediaConnection();
private:
virtual void Connected(const media_format& format);
virtual void Disconnected();
void _ConnectionRegistered(BMediaClient* owner,
media_connection_id id);
const media_source& _Source() const;
const media_destination& _Destination() const;
media_connection fConnection;
BMediaClient* fOwner;
BMediaConnection* fBind;
bool fConnected;
virtual void _ReservedMediaConnection0();
virtual void _ReservedMediaConnection1();
virtual void _ReservedMediaConnection2();
virtual void _ReservedMediaConnection3();
virtual void _ReservedMediaConnection4();
virtual void _ReservedMediaConnection5();
virtual void _ReservedMediaConnection6();
virtual void _ReservedMediaConnection7();
virtual void _ReservedMediaConnection8();
virtual void _ReservedMediaConnection9();
virtual void _ReservedMediaConnection10();
uint32 fPadding[64];
friend class BMediaClient;
friend class BMediaClientNode;
friend class BMediaInput;
friend class BMediaOutput;
};
class BMediaInput : public virtual BMediaConnection {
protected:
BMediaInput(const char* name = NULL);
virtual ~BMediaInput();
virtual status_t AcceptFormat(media_format* format) = 0;
virtual void HandleBuffer(BBuffer* buffer);
virtual void Connected(const media_format& format);
virtual void Disconnected();
private:
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;
};
class BMediaOutput : public virtual BMediaConnection {
protected:
BMediaOutput(const char* name = NULL);
virtual ~BMediaOutput();
virtual status_t PrepareToConnect(media_format* format) = 0;
virtual status_t FormatProposal(media_format* format) = 0;
virtual status_t SendBuffer(BBuffer* buffer);
virtual void Connected(const media_format& format);
virtual void Disconnected();
private:
void _SetEnabled(bool enabled);
bool _IsEnabled() const;
bool fEnabled;
size_t fFramesSent;
BBufferGroup* fBufferGroup;
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;
};
}
}
using namespace BPrivate::media;
#endif