#if !defined(_MEDIA_OUTPUT_INFO_H)
#define _MEDIA_OUTPUT_INFO_H
#include <MediaDefs.h>
#include <MediaNode.h>
#include <BufferProducer.h>
#include <BufferGroup.h>
class MediaOutputInfo
{
public:
MediaOutputInfo(BBufferProducer * _node, char * name);
~MediaOutputInfo();
virtual status_t SetBufferGroup(BBufferGroup * group);
virtual status_t FormatProposal(media_format * format);
virtual status_t FormatChangeRequested(
const media_destination & destination,
media_format * io_format);
virtual status_t PrepareToConnect(
const media_destination & where,
media_format * format,
media_source * out_source,
char * out_name);
virtual status_t Connect(
const media_destination & destination,
const media_format & format,
char * io_name,
bigtime_t _downstreamLatency);
virtual status_t Disconnect();
virtual status_t EnableOutput(bool enabled);
virtual status_t AdditionalBufferRequested(
media_buffer_id prev_buffer,
bigtime_t prev_time,
const media_seek_tag * prev_tag);
protected:
virtual status_t CreateBufferGroup();
public:
virtual uint32 ComputeBufferSize();
virtual bigtime_t ComputeBufferPeriod();
static uint32 ComputeBufferSize(const media_format & format);
static bigtime_t ComputeBufferPeriod(const media_format & format);
public:
BBufferProducer * producer;
media_output output;
bool outputEnabled;
BBufferGroup * bufferGroup;
size_t bufferSize;
bigtime_t downstreamLatency;
bigtime_t bufferPeriod;
media_format generalFormat;
media_format wildcardedFormat;
media_format fullySpecifiedFormat;
};
#endif