00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __JackOSSDriver__
00022 #define __JackOSSDriver__
00023
00024 #include "JackAudioDriver.h"
00025
00026 namespace Jack
00027 {
00028
00029 typedef jack_default_audio_sample_t jack_sample_t;
00030
00031 #define OSS_DRIVER_DEF_DEV "/dev/dsp"
00032 #define OSS_DRIVER_DEF_FS 48000
00033 #define OSS_DRIVER_DEF_BLKSIZE 1024
00034 #define OSS_DRIVER_DEF_NPERIODS 1
00035 #define OSS_DRIVER_DEF_BITS 16
00036 #define OSS_DRIVER_DEF_INS 2
00037 #define OSS_DRIVER_DEF_OUTS 2
00038
00043 class JackOSSDriver : public JackAudioDriver
00044 {
00045
00046 enum { kRead = 1, kWrite = 2, kReadWrite = 3 };
00047
00048 private:
00049
00050 int fInFD;
00051 int fOutFD;
00052
00053 int fBits;
00054 int fSampleFormat;
00055 int fNperiods;
00056 unsigned int fSampleSize;
00057 int fRWMode;
00058 bool fExcl;
00059 bool fIgnoreHW;
00060
00061 unsigned int fInputBufferSize;
00062 unsigned int fOutputBufferSize;
00063
00064 void* fInputBuffer;
00065 void* fOutputBuffer;
00066
00067 bool fFirstCycle;
00068
00069 int OpenInput();
00070 int OpenOutput();
00071 int OpenAux();
00072 void CloseAux();
00073 void SetSampleFormat();
00074 void DisplayDeviceInfo();
00075
00076
00077 int ProcessSync();
00078
00079 public:
00080
00081 JackOSSDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table)
00082 : JackAudioDriver(name, alias, engine, table),
00083 fInFD(-1), fOutFD(-1), fBits(0),
00084 fSampleFormat(0), fNperiods(0), fRWMode(0), fExcl(false), fIgnoreHW(true),
00085 fInputBufferSize(0), fOutputBufferSize(0),
00086 fInputBuffer(NULL), fOutputBuffer(NULL), fFirstCycle(true)
00087 {}
00088
00089 virtual ~JackOSSDriver()
00090 {}
00091
00092 int Open(jack_nframes_t frames_per_cycle,
00093 int user_nperiods,
00094 jack_nframes_t rate,
00095 bool capturing,
00096 bool playing,
00097 int chan_in,
00098 int chan_out,
00099 bool vmix,
00100 bool monitor,
00101 const char* capture_driver_name,
00102 const char* playback_driver_name,
00103 jack_nframes_t capture_latency,
00104 jack_nframes_t playback_latency,
00105 int bits,
00106 bool ignorehwbuf);
00107
00108 int Close();
00109
00110 int Read();
00111 int Write();
00112
00113
00114 bool IsFixedBufferSize()
00115 {
00116 return false;
00117 }
00118
00119 int SetBufferSize(jack_nframes_t buffer_size);
00120
00121 };
00122
00123 }
00124
00125 #endif