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
00016
00017
00018
00019
00020
00021
00022
00023
00024 class WvDsp :
public WvStream
00025 {
00026
public:
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
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