BMediaRecorder: Rework to allow external connections
* This required to review various parts of the code, and isn't probably still perfect. The main problem was an attributes hell where redondance created a lot of problems, all this data is now controlled mostly by the node. * Header indentation changes needed too.
This commit is contained in:
@@ -46,6 +46,7 @@ public:
|
||||
|
||||
void SetAcceptedFormat(
|
||||
const media_format& format);
|
||||
const media_format& AcceptedFormat() const;
|
||||
|
||||
virtual status_t Start(bool force = false);
|
||||
virtual status_t Stop(bool force = false);
|
||||
@@ -66,13 +67,18 @@ public:
|
||||
|
||||
const media_format& Format() const;
|
||||
|
||||
const media_output& MediaOutput() const;
|
||||
const media_input& MediaInput() const;
|
||||
|
||||
protected:
|
||||
// Get the producer node source
|
||||
const media_source& MediaSource() const;
|
||||
// This is the our own input
|
||||
const media_input& MediaInput() const;
|
||||
|
||||
virtual void BufferReceived(void* buffer, size_t size,
|
||||
const media_header& header);
|
||||
|
||||
status_t SetUpConnection(media_input ourInput,
|
||||
media_source outputSource);
|
||||
|
||||
private:
|
||||
|
||||
status_t _Connect(const media_node& mediaNode,
|
||||
@@ -98,10 +104,9 @@ private:
|
||||
NotifyFunc fNotifyHook;
|
||||
|
||||
media_node fOutputNode;
|
||||
media_output fOutput;
|
||||
media_source fOutputSource;
|
||||
|
||||
BMediaRecorderNode* fNode;
|
||||
media_input fInput;
|
||||
|
||||
void* fBufferCookie;
|
||||
uint32 fPadding[32];
|
||||
|
||||
@@ -20,44 +20,45 @@ class BMediaRecorder;
|
||||
class BMediaRecorderNode : public BMediaEventLooper,
|
||||
public BBufferConsumer {
|
||||
public:
|
||||
BMediaRecorderNode(const char* name,
|
||||
BMediaRecorder* recorder,
|
||||
media_type type
|
||||
= B_MEDIA_UNKNOWN_TYPE);
|
||||
BMediaRecorderNode(const char* name,
|
||||
BMediaRecorder* recorder,
|
||||
media_type type
|
||||
= B_MEDIA_UNKNOWN_TYPE);
|
||||
|
||||
// TODO these are not thread safe; we should fix that...
|
||||
void SetAcceptedFormat(const media_format& format);
|
||||
void SetAcceptedFormat(const media_format& format);
|
||||
const media_format& AcceptedFormat() const;
|
||||
|
||||
status_t GetInput(media_input* outInput);
|
||||
void GetInput(media_input* input);
|
||||
|
||||
void SetDataEnabled(bool enabled);
|
||||
void SetDataEnabled(bool enabled);
|
||||
|
||||
protected:
|
||||
|
||||
virtual BMediaAddOn* AddOn(int32* id) const;
|
||||
virtual BMediaAddOn* AddOn(int32* id) const;
|
||||
|
||||
virtual void NodeRegistered();
|
||||
virtual void NodeRegistered();
|
||||
|
||||
virtual void SetRunMode(run_mode mode);
|
||||
virtual void SetRunMode(run_mode mode);
|
||||
|
||||
virtual void HandleEvent(const media_timed_event* event,
|
||||
bigtime_t lateness,
|
||||
bool realTimeEvent);
|
||||
virtual void HandleEvent(const media_timed_event* event,
|
||||
bigtime_t lateness,
|
||||
bool realTimeEvent);
|
||||
|
||||
virtual void Start(bigtime_t performanceTime);
|
||||
virtual void Start(bigtime_t performanceTime);
|
||||
|
||||
virtual void Stop(bigtime_t performanceTime,
|
||||
bool immediate);
|
||||
virtual void Stop(bigtime_t performanceTime,
|
||||
bool immediate);
|
||||
|
||||
virtual void Seek(bigtime_t mediaTime,
|
||||
bigtime_t performanceTime);
|
||||
virtual void Seek(bigtime_t mediaTime,
|
||||
bigtime_t performanceTime);
|
||||
|
||||
virtual void TimeWarp(bigtime_t realTime,
|
||||
bigtime_t performanceTime);
|
||||
virtual void TimeWarp(bigtime_t realTime,
|
||||
bigtime_t performanceTime);
|
||||
|
||||
virtual status_t HandleMessage(int32 message,
|
||||
const void* data,
|
||||
size_t size);
|
||||
virtual status_t HandleMessage(int32 message,
|
||||
const void* data,
|
||||
size_t size);
|
||||
|
||||
// Someone, probably the producer, is asking you about
|
||||
// this format. Give your honest opinion, possibly
|
||||
@@ -65,46 +66,46 @@ protected:
|
||||
// the format, since he's synchronously waiting for your
|
||||
// reply.
|
||||
|
||||
virtual status_t AcceptFormat(const media_destination& dest,
|
||||
media_format* format);
|
||||
virtual status_t AcceptFormat(const media_destination& dest,
|
||||
media_format* format);
|
||||
|
||||
virtual status_t GetNextInput(int32* cookie,
|
||||
media_input* outInput);
|
||||
virtual status_t GetNextInput(int32* cookie,
|
||||
media_input* outInput);
|
||||
|
||||
virtual void DisposeInputCookie(int32 cookie);
|
||||
virtual void DisposeInputCookie(int32 cookie);
|
||||
|
||||
virtual void BufferReceived(BBuffer* buffer);
|
||||
virtual void BufferReceived(BBuffer* buffer);
|
||||
|
||||
virtual void ProducerDataStatus(
|
||||
const media_destination& destination,
|
||||
int32 status,
|
||||
bigtime_t performanceTime);
|
||||
virtual void ProducerDataStatus(
|
||||
const media_destination& destination,
|
||||
int32 status,
|
||||
bigtime_t performanceTime);
|
||||
|
||||
virtual status_t GetLatencyFor(const media_destination& destination,
|
||||
bigtime_t* outLatency,
|
||||
media_node_id* outTimesource);
|
||||
virtual status_t GetLatencyFor(const media_destination& destination,
|
||||
bigtime_t* outLatency,
|
||||
media_node_id* outTimesource);
|
||||
|
||||
virtual status_t Connected(const media_source& producer,
|
||||
const media_destination& where,
|
||||
const media_format& format,
|
||||
media_input* outInput);
|
||||
virtual status_t Connected(const media_source& producer,
|
||||
const media_destination& where,
|
||||
const media_format& format,
|
||||
media_input* outInput);
|
||||
|
||||
virtual void Disconnected(const media_source& producer,
|
||||
const media_destination& where);
|
||||
virtual void Disconnected(const media_source& producer,
|
||||
const media_destination& where);
|
||||
|
||||
virtual status_t FormatChanged(const media_source& producer,
|
||||
const media_destination& consumer,
|
||||
int32 tag,
|
||||
const media_format& format);
|
||||
virtual status_t FormatChanged(const media_source& producer,
|
||||
const media_destination& consumer,
|
||||
int32 tag,
|
||||
const media_format& format);
|
||||
|
||||
protected:
|
||||
|
||||
virtual ~BMediaRecorderNode();
|
||||
virtual ~BMediaRecorderNode();
|
||||
|
||||
BMediaRecorder* fRecorder;
|
||||
media_format fOKFormat;
|
||||
media_input fInput;
|
||||
BString fName;
|
||||
BMediaRecorder* fRecorder;
|
||||
media_format fOKFormat;
|
||||
media_input fInput;
|
||||
BString fName;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user