#if !defined(_MEDIA_READER_H)
#define _MEDIA_READER_H
#include <MediaDefs.h>
#include <MediaNode.h>
#include <FileInterface.h>
#include <BufferProducer.h>
#include <Controllable.h>
#include <MediaEventLooper.h>
#include <File.h>
#include <Entry.h>
#include <BufferGroup.h>
#include "../AbstractFileInterfaceNode.h"
class MediaReader :
public BBufferProducer,
public AbstractFileInterfaceNode
{
protected:
virtual ~MediaReader(void);
public:
explicit MediaReader(
size_t defaultChunkSize = 8192,
float defaultBitRate = 800000,
const flavor_info * info = 0,
BMessage * config = 0,
BMediaAddOn * addOn = 0);
protected:
virtual void Preroll(void);
public:
virtual status_t HandleMessage(
int32 message,
const void * data,
size_t size);
protected:
virtual void NodeRegistered(void);
protected:
using AbstractFileInterfaceNode::SetRef;
virtual status_t SetRef(
const entry_ref & file,
bool create,
bigtime_t * out_time);
public:
static status_t StaticSniffRef(
const entry_ref & file,
char * out_mime_type,
float * out_quality);
protected:
virtual status_t FormatSuggestionRequested(
media_type type,
int32 quality,
media_format * format);
virtual status_t FormatProposal(
const media_source & output,
media_format * format);
virtual status_t FormatChangeRequested(
const media_source & source,
const media_destination & destination,
media_format * io_format,
int32 * _deprecated_);
virtual status_t GetNextOutput(
int32 * cookie,
media_output * out_output);
virtual status_t DisposeOutputCookie(
int32 cookie);
virtual status_t SetBufferGroup(
const media_source & for_source,
BBufferGroup * group);
virtual status_t VideoClippingChanged(
const media_source & for_source,
int16 num_shorts,
int16 * clip_data,
const media_video_display_info & display,
int32 * _deprecated_);
virtual status_t GetLatency(
bigtime_t * out_latency);
virtual status_t PrepareToConnect(
const media_source & what,
const media_destination & where,
media_format * format,
media_source * out_source,
char * out_name);
virtual void Connect(
status_t error,
const media_source & source,
const media_destination & destination,
const media_format & format,
char * io_name);
virtual void Disconnect(
const media_source & what,
const media_destination & where);
virtual void LateNoticeReceived(
const media_source & what,
bigtime_t how_much,
bigtime_t performance_time);
virtual void EnableOutput(
const media_source & what,
bool enabled,
int32 * _deprecated_);
virtual status_t SetPlayRate(
int32 numer,
int32 denom);
virtual void AdditionalBufferRequested(
const media_source & source,
media_buffer_id prev_buffer,
bigtime_t prev_time,
const media_seek_tag * prev_tag);
virtual void LatencyChanged(
const media_source & source,
const media_destination & destination,
bigtime_t new_latency,
uint32 flags);
protected:
virtual status_t HandleBuffer(
const media_timed_event *event,
bigtime_t lateness,
bool realTimeEvent = false);
virtual status_t HandleDataStatus(
const media_timed_event *event,
bigtime_t lateness,
bool realTimeEvent = false);
public:
static void GetFlavor(flavor_info * outInfo, int32 id);
static void GetFormat(media_format * outFormat);
static void GetFileFormat(media_file_format * outFileFormat);
protected:
virtual status_t GetFilledBuffer(BBuffer ** outBuffer);
virtual status_t FillFileBuffer(BBuffer * buffer);
private:
MediaReader(
const MediaReader & clone);
MediaReader & operator=(
const MediaReader & clone);
media_output output;
bool fOutputEnabled;
BBufferGroup * fBufferGroup;
bigtime_t fDownstreamLatency;
bigtime_t fInternalLatency;
bigtime_t fBufferPeriod;
virtual status_t _Reserved_MediaReader_0(void *);
virtual status_t _Reserved_MediaReader_1(void *);
virtual status_t _Reserved_MediaReader_2(void *);
virtual status_t _Reserved_MediaReader_3(void *);
virtual status_t _Reserved_MediaReader_4(void *);
virtual status_t _Reserved_MediaReader_5(void *);
virtual status_t _Reserved_MediaReader_6(void *);
virtual status_t _Reserved_MediaReader_7(void *);
virtual status_t _Reserved_MediaReader_8(void *);
virtual status_t _Reserved_MediaReader_9(void *);
virtual status_t _Reserved_MediaReader_10(void *);
virtual status_t _Reserved_MediaReader_11(void *);
virtual status_t _Reserved_MediaReader_12(void *);
virtual status_t _Reserved_MediaReader_13(void *);
virtual status_t _Reserved_MediaReader_14(void *);
virtual status_t _Reserved_MediaReader_15(void *);
uint32 _reserved_media_reader_[16];
};
#endif