00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __JackBoomerDriver__
00021 #define __JackBoomerDriver__
00022
00023 #include "JackAudioDriver.h"
00024 #include "JackPlatformPlug.h"
00025 #include "ringbuffer.h"
00026 #include <semaphore.h>
00027
00028 namespace Jack
00029 {
00030
00031 typedef jack_default_audio_sample_t jack_sample_t;
00032
00033 #define OSS_DRIVER_DEF_DEV "/dev/dsp"
00034 #define OSS_DRIVER_DEF_FS 48000
00035 #define OSS_DRIVER_DEF_BLKSIZE 1024
00036 #define OSS_DRIVER_DEF_NPERIODS 1
00037 #define OSS_DRIVER_DEF_BITS 16
00038 #define OSS_DRIVER_DEF_INS 2
00039 #define OSS_DRIVER_DEF_OUTS 2
00040
00045 class JackBoomerDriver : public JackAudioDriver
00046 {
00047
00048 enum { kRead = 1, kWrite = 2, kReadWrite = 3 };
00049
00050 private:
00051
00052 class JackBoomerDriverInput : public JackRunnableInterface {
00053
00054 private:
00055
00056 JackBoomerDriver* fDriver;
00057
00058 public:
00059
00060 JackBoomerDriverInput(JackBoomerDriver* driver): fDriver(driver)
00061 {}
00062 ~JackBoomerDriverInput()
00063 {}
00064
00065 bool Init();
00066 bool Execute();
00067 };
00068
00069 class JackBoomerDriverOutput : public JackRunnableInterface {
00070
00071 private:
00072
00073 JackBoomerDriver* fDriver;
00074
00075 public:
00076
00077 JackBoomerDriverOutput(JackBoomerDriver* driver): fDriver(driver)
00078 {}
00079 ~JackBoomerDriverOutput()
00080 {}
00081
00082 bool Init();
00083 bool Execute();
00084 };
00085
00086 int fInFD;
00087 int fOutFD;
00088
00089 int fBits;
00090 int fSampleFormat;
00091 int fNperiods;
00092 unsigned int fSampleSize;
00093 unsigned int fFragmentSize;
00094 int fRWMode;
00095 bool fExcl;
00096 bool fSyncIO;
00097
00098 unsigned int fInputBufferSize;
00099 unsigned int fOutputBufferSize;
00100
00101 void* fInputBuffer;
00102 void* fOutputBuffer;
00103
00104 sem_t fReadSema;
00105 sem_t fWriteSema;
00106
00107 JackThread fInputThread;
00108 JackThread fOutputThread;
00109
00110 JackBoomerDriverInput fInputHandler;
00111 JackBoomerDriverOutput fOutputHandler;
00112
00113 int OpenInput();
00114 int OpenOutput();
00115 int OpenAux();
00116 void CloseAux();
00117 void SetSampleFormat();
00118 void DisplayDeviceInfo();
00119 void SynchronizeRead();
00120 void SynchronizeWrite();
00121
00122 public:
00123
00124 JackBoomerDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table);
00125 virtual ~JackBoomerDriver();
00126
00127 int Open(jack_nframes_t frames_per_cycle,
00128 int user_nperiods,
00129 jack_nframes_t rate,
00130 bool capturing,
00131 bool playing,
00132 int chan_in,
00133 int chan_out,
00134 bool excl,
00135 bool monitor,
00136 const char* capture_driver_name,
00137 const char* playback_driver_name,
00138 jack_nframes_t capture_latency,
00139 jack_nframes_t playback_latency,
00140 int bits, bool syncio);
00141
00142 int Close();
00143
00144 int Start();
00145 int Stop();
00146
00147
00148 bool IsFixedBufferSize()
00149 {
00150 return false;
00151 }
00152
00153 int SetBufferSize(jack_nframes_t buffer_size);
00154
00155 };
00156
00157 }
00158
00159 #endif