AsyncAudioDebugger.h

Go to the documentation of this file.
00001 
00028 #ifndef AUDIO_DEBUGGER_INCLUDED
00029 #define AUDIO_DEBUGGER_INCLUDED
00030 
00031 
00032 /****************************************************************************
00033  *
00034  * System Includes
00035  *
00036  ****************************************************************************/
00037 
00038 #include <sys/time.h>
00039 #include <iostream>
00040 #include <string>
00041 #include <stdint.h>
00042 
00043 
00044 /****************************************************************************
00045  *
00046  * Project Includes
00047  *
00048  ****************************************************************************/
00049 
00050 #include <AsyncAudioSink.h>
00051 #include <AsyncAudioSource.h>
00052 
00053 
00054 /****************************************************************************
00055  *
00056  * Local Includes
00057  *
00058  ****************************************************************************/
00059 
00060 
00061 
00062 /****************************************************************************
00063  *
00064  * Forward declarations
00065  *
00066  ****************************************************************************/
00067 
00068 
00069 
00070 /****************************************************************************
00071  *
00072  * Namespace
00073  *
00074  ****************************************************************************/
00075 
00076 namespace Async
00077 {
00078 
00079 
00080 /****************************************************************************
00081  *
00082  * Forward declarations of classes inside of the declared namespace
00083  *
00084  ****************************************************************************/
00085 
00086   
00087 
00088 /****************************************************************************
00089  *
00090  * Defines & typedefs
00091  *
00092  ****************************************************************************/
00093 
00094 
00095 
00096 /****************************************************************************
00097  *
00098  * Exported Global Variables
00099  *
00100  ****************************************************************************/
00101 
00102 
00103 
00104 /****************************************************************************
00105  *
00106  * Class definitions
00107  *
00108  ****************************************************************************/
00109 
00119 class AudioDebugger : public AudioSink, public AudioSource
00120 {
00121   public:
00125     AudioDebugger(Async::AudioSource *src=0)
00126       : name("AudioDebugger"), sample_count(0)
00127     {
00128       gettimeofday(&start_time, 0);
00129       if (src != 0)
00130       {
00131         Async::AudioSink *sink = src->sink();
00132         if (sink != 0)
00133         {
00134           src->unregisterSink();
00135           registerSink(sink);
00136         }
00137         registerSource(src);
00138       }
00139     }
00140   
00144     virtual ~AudioDebugger(void) {}
00145   
00150     void setName(std::string debug_name) { name = debug_name; }
00151 
00163     virtual int writeSamples(const float *samples, int count)
00164     {
00165       int ret = sinkWriteSamples(samples, count);
00166       sample_count += ret;
00167 
00168       struct timeval time, diff;
00169       gettimeofday(&time, 0);
00170 
00171       timersub(&time, &start_time, &diff);
00172       uint64_t diff_ms = diff.tv_sec * 1000 + diff.tv_usec / 1000;
00173 
00174       std::cout << name << "::writeSamples: count=" << count
00175                 << " ret=" << ret << " sample_rate=";
00176       if (diff_ms > 0)
00177       {
00178         std::cout << sample_count * 1000 / diff_ms << std::endl;
00179       }
00180       else
00181       {
00182         std::cout << "inf\n";
00183       }
00184       return ret;
00185     }
00186     
00195     virtual void flushSamples(void)
00196     {
00197       std::cout << name << "::flushSamples\n";
00198       sinkFlushSamples();
00199     }
00200     
00208     virtual void resumeOutput(void)
00209     {
00210       std::cout << name << "::resumeOutput\n";
00211       sourceResumeOutput();
00212     }
00213     
00221     virtual void allSamplesFlushed(void)
00222     {
00223       std::cout << name << "::allSamplesFlushed\n";
00224       sourceAllSamplesFlushed();
00225     }
00226     
00227   protected:
00228     
00229   private:
00230     std::string name;
00231     struct timeval start_time;
00232     uint64_t sample_count;
00233     
00234     AudioDebugger(const AudioDebugger&);
00235     AudioDebugger& operator=(const AudioDebugger&);
00236     
00237 }; /* AudioDebugger */
00238 
00239 
00240 } /* namespace */
00241 
00242 #endif /* AUDIO_DEBUGGER_INCLUDED */
00243 
00244 
00245 
00246 /*
00247  * This file has not been truncated
00248  */
00249 
Generated on Tue Nov 16 01:50:06 2010 for Async by  doxygen 1.6.3