#ifndef _MEDIA_SIMPLE_CLIENT_H
#define _MEDIA_SIMPLE_CLIENT_H
#include <MediaClient.h>
#include <MediaConnection.h>
namespace BPrivate { namespace media {
class BSimpleMediaInput;
class BSimpleMediaOutput;
class BSimpleMediaClient : public BMediaClient {
public:
enum notification {
B_WILL_START = 1,
B_WILL_STOP,
B_WILL_SEEK,
B_FORMAT_SUGGESTION,
};
typedef void (*notify_hook)(void* cookie,
notification what,
...);
BSimpleMediaClient(const char* name,
media_type type
= B_MEDIA_UNKNOWN_TYPE,
media_client_kinds
kinds = B_MEDIA_PLAYER
& B_MEDIA_RECORDER);
virtual ~BSimpleMediaClient();
virtual BSimpleMediaInput* BeginInput();
virtual BSimpleMediaOutput* BeginOutput();
void SetHook(notify_hook notifyHook = NULL,
void* cookie = NULL);
protected:
virtual void HandleStart(bigtime_t performanceTime);
virtual void HandleStop(bigtime_t performanceTime);
virtual void HandleSeek(bigtime_t mediaTime,
bigtime_t performanceTime);
virtual status_t FormatSuggestion(media_type type,
int32 quality, media_format* format);
private:
notify_hook fNotifyHook;
void* fNotifyCookie;
virtual void _ReservedSimpleMediaClient0();
virtual void _ReservedSimpleMediaClient1();
virtual void _ReservedSimpleMediaClient2();
virtual void _ReservedSimpleMediaClient3();
virtual void _ReservedSimpleMediaClient4();
virtual void _ReservedSimpleMediaClient5();
uint32 fPadding[32];
};
class BSimpleMediaConnection : public virtual BMediaConnection {
public:
enum notification {
B_INPUT_CONNECTED = 1,
B_INPUT_DISCONNECTED,
B_FORMAT_CHANGED,
B_OUTPUT_CONNECTED,
B_OUTPUT_DISCONNECTED,
B_PREPARE_TO_CONNECT,
B_FORMAT_PROPOSAL,
B_ASK_FORMAT_CHANGE,
};
typedef void (*process_hook)(
BMediaConnection* connection,
BBuffer* buffer);
typedef status_t (*notify_hook)(
BMediaConnection* connection,
notification what,
...);
void SetHooks(process_hook processHook = NULL,
notify_hook notifyHook = NULL,
void* cookie = NULL);
void* Cookie() const;
virtual size_t BufferSize() const;
virtual void SetBufferSize(size_t bufferSize);
void SetAcceptedFormat(
const media_format& format);
const media_format& AcceptedFormat() const;
protected:
BSimpleMediaConnection(
media_connection_kinds kinds);
virtual ~BSimpleMediaConnection();
process_hook fProcessHook;
notify_hook fNotifyHook;
void* fBufferCookie;
size_t fBufferSize;
media_format fAcceptedFormat;
};
class BSimpleMediaInput : public BSimpleMediaConnection, public BMediaInput {
public:
BSimpleMediaInput();
protected:
virtual ~BSimpleMediaInput();
virtual status_t AcceptFormat(media_format* format);
virtual void HandleBuffer(BBuffer* buffer);
virtual void Connected(const media_format& format);
virtual void Disconnected();
};
class BSimpleMediaOutput : public BSimpleMediaConnection, public BMediaOutput {
public:
BSimpleMediaOutput();
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();
};
}
}
using namespace BPrivate::media;
#endif