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 "Config.h"
00035 #ifdef USE_ALSA05
00036 #include "AudioA.hh"
00037 #else
00038 #include "AudioA2.hh"
00039 #endif
00040 #include "CfgFile.hh"
00041 #include "LogFile.hh"
00042 #include "Messages.hh"
00043 #include "SockServ.hh"
00044 #include "SockOp.hh"
00045
00046
00047 #ifndef SOUNDSRVA_HH
00048 #define SOUNDSRVA_HH
00049
00050 #define SSA_LOGENTRY_SIZE 256
00051
00052
00058 class clSoundSrvA
00059 {
00060 volatile bool bRun;
00061 volatile int iAudioBufSize;
00062 volatile int iBlockCntr;
00063 stSoundStart sHdr;
00064 #ifdef USE_FLAC
00065 FLAC__StreamEncoder *spFLACEnc;
00066 #endif
00067 clAlloc AudioBuf;
00068 clAlloc CompHead;
00069 clAlloc FLACFrame;
00070 clMutex MtxAudio;
00071 #ifdef USE_RWLOCK
00072 clRWLock RWLAudio;
00073 #endif
00074 clCondition CndAudio;
00075 clCfgFile Cfg;
00076 bool GetAudioCfg (int *, int *, int *, int *, int *, int *,
00077 int *, int *);
00078 bool InitCompress (int, int, int, int, int);
00079 #ifdef USE_FLAC
00080 void Convert (FLAC__int32 *, const void *, long, int);
00081 #endif
00082 public:
00083 clLogFile Log;
00084 clSoundSrvA ();
00085 ~clSoundSrvA ();
00086 int Main (int, char **);
00087 void *AudioInThread (void *);
00088 void *ServeClientThread (void *);
00089 void Stop() { bRun = false; }
00090 #ifdef USE_FLAC
00091 FLAC__StreamEncoderWriteStatus FLACWrite (
00092 const FLAC__StreamEncoder *, const FLAC__byte *, unsigned,
00093 unsigned, unsigned);
00094 void FLACMetaData (const FLAC__StreamEncoder *,
00095 const FLAC__StreamMetadata *);
00096 #endif
00097 };
00098
00099 #endif
00100