00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __JackOSSAdapter__
00021 #define __JackOSSAdapter__
00022
00023 #include <math.h>
00024 #include <limits.h>
00025 #include <assert.h>
00026 #include "JackAudioAdapterInterface.h"
00027 #include "JackPlatformPlug.h"
00028 #include "JackError.h"
00029 #include "jack.h"
00030 #include "jslist.h"
00031
00032 namespace Jack
00033 {
00034
00035 typedef jack_default_audio_sample_t jack_sample_t;
00036
00037 #define OSS_DRIVER_DEF_DEV "/dev/dsp"
00038 #define OSS_DRIVER_DEF_FS 48000
00039 #define OSS_DRIVER_DEF_BLKSIZE 1024
00040 #define OSS_DRIVER_DEF_NPERIODS 2
00041 #define OSS_DRIVER_DEF_BITS 16
00042 #define OSS_DRIVER_DEF_INS 2
00043 #define OSS_DRIVER_DEF_OUTS 2
00044
00049 class JackOSSAdapter : public JackAudioAdapterInterface, public JackRunnableInterface
00050 {
00051
00052 enum { kRead = 1, kWrite = 2, kReadWrite = 3 };
00053
00054 private:
00055
00056 JackThread fThread;
00057
00058 char fCaptureDriverName[JACK_CLIENT_NAME_SIZE + 1];
00059 char fPlaybackDriverName[JACK_CLIENT_NAME_SIZE + 1];
00060
00061 int fInFD;
00062 int fOutFD;
00063
00064 int fBits;
00065 int fSampleFormat;
00066 int fNperiods;
00067 unsigned int fSampleSize;
00068 int fRWMode;
00069 bool fIgnoreHW;
00070 bool fExcl;
00071
00072 unsigned int fInputBufferSize;
00073 unsigned int fOutputBufferSize;
00074
00075 void* fInputBuffer;
00076 void* fOutputBuffer;
00077
00078 float** fInputSampleBuffer;
00079 float** fOutputSampleBuffer;
00080
00081 bool fFirstCycle;
00082
00083 int OpenInput();
00084 int OpenOutput();
00085 void CloseAux();
00086 void SetSampleFormat();
00087 void DisplayDeviceInfo();
00088
00089 public:
00090
00091 JackOSSAdapter(jack_nframes_t buffer_size, jack_nframes_t sample_rate, const JSList* params);
00092 ~JackOSSAdapter()
00093 {}
00094
00095 int Open();
00096 int Close();
00097
00098 int Read();
00099 int Write();
00100
00101 int SetBufferSize(jack_nframes_t buffer_size);
00102
00103 bool Execute();
00104 };
00105
00106 }
00107
00108 #ifdef __cplusplus
00109 extern "C"
00110 {
00111 #endif
00112
00113 #include "JackCompilerDeps.h"
00114 #include "driver_interface.h"
00115
00116 SERVER_EXPORT jack_driver_desc_t* jack_get_descriptor();
00117
00118 #ifdef __cplusplus
00119 }
00120 #endif
00121
00122 #endif