00001
00002
00003
00004
00005
00006
00007
00008 #ifndef __WVDSP_H
00009 #define __WVDSP_H
00010
00011 #include "wvmagiccircle.h"
00012 #include "wvloopback.h"
00013 #include "wvlog.h"
00014 #include "wvrateadjust.h"
00015
00024 class WvDsp : public WvStream
00025 {
00026 public:
00027
00038 WvDsp(int msec_latency, int srate, int bits, bool stereo,
00039 bool readable = true, bool writable = true,
00040 bool _realtime = false, bool _oss = false);
00041 virtual ~WvDsp();
00042
00043 size_t ispace();
00044 size_t ospace();
00045 void realtime();
00046
00047
00048
00049 virtual bool pre_select(SelectInfo &si);
00050 virtual bool post_select(SelectInfo &si);
00051 virtual size_t uread(void *buf, size_t len);
00052 virtual size_t uwrite(const void *buf, size_t len);
00053 virtual bool isok() const;
00054 virtual void close();
00055
00056 private:
00057 bool setioctl(int ctl, int param);
00058 void subproc(bool reading, bool writing);
00059
00060 size_t do_uread(void *buf, size_t len);
00061 size_t do_uwrite(const void *buf, size_t len);
00062
00063 size_t frag_size, num_frags;
00064 WvLog log;
00065 WvMagicCircle rcircle, wcircle;
00066 WvDynBuf rbuf, wbuf;
00067 WvLoopback rloop, wloop;
00068 WvRateAdjust inrate, outrate;
00069 int fd;
00070 bool is_realtime;
00071 };
00072
00073
00074 #endif // __WVDSP_H