Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

wvdsp.h

00001 /* -*- Mode: C++ -*-
00002  * Worldvisions Weaver Software:
00003  *   Copyright (C) 1997-2002 Net Integration Technologies, Inc.
00004  *
00005  * One more attempt at making a decent stream for Linux /dev/dsp.  This is
00006  * apparently much trickier than it looks.
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     /*** Overridden members ***/
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

Generated on Sun Apr 3 14:46:40 2005 for WvStreams by  doxygen 1.4.2