00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <Alloc.hh>
00024 #include <Condition.hh>
00025 #include <Mutex.hh>
00026 #ifdef USE_RWLOCK
00027 #include <RWLock.hh>
00028 #endif
00029 #ifdef USE_FLAC
00030 #include <FLAC/all.h>
00031 #endif
00032 #include <dsp/DSPOp.hh>
00033
00034 #include <comedilib.h>
00035
00036 #include "Config.h"
00037 #include "CfgFile.hh"
00038 #include "ComediIO.hh"
00039 #include "LogFile.hh"
00040 #include "Messages.hh"
00041 #include "SockServ.hh"
00042 #include "SockOp.hh"
00043
00044
00045 #ifndef COMEDISRV_HH
00046 #define COMEDISRV_HH
00047
00048 #define COM_LOGENTRY_SIZE 4096
00049
00050
00056 class clComediSrv
00057 {
00058 volatile bool bRun;
00059 volatile int iAudioBufSize;
00060 volatile int iBlockCntr;
00061 stSoundStart sHdr;
00062 #ifdef USE_FLAC
00063 FLAC__StreamEncoder *spFLACEnc;
00064 #endif
00065 clAlloc AudioBuf;
00066 clAlloc CompHead;
00067 clAlloc FLACFrame;
00068 clMutex MtxAudio;
00069 #ifdef USE_RWLOCK
00070 clRWLock RWLAudio;
00071 #endif
00072 clCondition CndAudio;
00073 clCfgFile Cfg;
00074 bool GetAudioCfg (char *, int *, double *, int *, double *, int *);
00075 bool InitCompress (int, int, int, int, int);
00076 #ifdef USE_FLAC
00077 void Convert (FLAC__int32 *, const void *, long, int);
00078 #endif
00079 public:
00080 clLogFile Log;
00081 clComediSrv ();
00082 ~clComediSrv ();
00083 int Main (int, char **);
00084 void *AudioInThread (void *);
00085 void *ServeClientThread (void *);
00086 void Stop() { bRun = false; }
00087 #ifdef USE_FLAC
00088 FLAC__StreamEncoderWriteStatus FLACWrite (
00089 const FLAC__StreamEncoder *, const FLAC__byte *, unsigned,
00090 unsigned, unsigned);
00091 void FLACMetaData (const FLAC__StreamEncoder *,
00092 const FLAC__StreamMetadata *);
00093 #endif
00094 };
00095
00096 #endif
00097