#ifndef _OPENSOUNDDEVICEENGINE_H
#define _OPENSOUNDDEVICEENGINE_H
#include "OpenSoundDevice.h"
class OpenSoundDeviceEngine
{
public:
OpenSoundDeviceEngine(oss_audioinfo *info);
virtual ~OpenSoundDeviceEngine(void);
virtual status_t InitCheck(void) const;
int FD() const { return fFD; };
const oss_audioinfo *Info() const { return &fAudioInfo; };
status_t Open(int mode);
status_t Close();
virtual ssize_t Read(void *buffer, size_t size);
virtual ssize_t Write(const void *buffer, size_t size);
OpenSoundDeviceEngine *NextPlay() const { return fNextPlay; };
OpenSoundDeviceEngine *NextRec() const { return fNextRec; };
int OpenMode() const { return fOpenMode; };
bool InUse() const { return (fOpenMode != 0); };
status_t UpdateInfo();
int Caps() const { return fAudioInfo.caps; };
bigtime_t CardLatency(void) const { return (fAudioInfo.latency < 0) ? 0 : fAudioInfo.latency; };
bigtime_t PlaybackLatency(void);
bigtime_t RecordingLatency(void);
int GetChannels(void);
status_t SetChannels(int chans);
int GetFormat(void);
status_t SetFormat(int fmt);
int GetSpeed(void);
status_t SetSpeed(int speed);
void GetMediaFormat(media_format &format);
size_t GetISpace(audio_buf_info *info=NULL);
size_t GetOSpace(audio_buf_info *info=NULL);
int64 GetCurrentIPtr(int32* fifoed = NULL,
oss_count_t* info = NULL);
int64 GetCurrentOPtr(int32* fifoed = NULL,
size_t* fragmentPos = NULL);
int32 GetIOverruns();
int32 GetOUnderruns();
size_t DriverBufferSize() const;
status_t StartRecording(void);
status_t WildcardFormatFor(int fmt, media_format &format, bool rec=false);
status_t PreferredFormatFor(int fmt, media_format &format, bool rec=false);
status_t AcceptFormatFor(int fmt, media_format &format, bool rec=false);
status_t SpecializeFormatFor(int fmt, media_format &format, bool rec=true);
private:
status_t fInitCheckStatus;
oss_audioinfo fAudioInfo;
friend class OpenSoundAddOn;
OpenSoundDeviceEngine *fNextPlay;
OpenSoundDeviceEngine *fNextRec;
int fOpenMode;
int fFD;
media_format fMediaFormat;
int64 fPlayedFramesCount;
bigtime_t fPlayedRealTime;
size_t fDriverBufferSize;
};
#endif