00001 #include "OSDLAudioRenderer.h"
00002
00003
00004 #include "OSDLScheduler.h"
00005 #include "OSDLMultimediaRenderer.h"
00006
00007
00008
00009
00010
00011 using namespace OSDL::Events ;
00012 using namespace OSDL::Rendering ;
00013 using namespace OSDL::Engine ;
00014
00015 using std::string ;
00016
00017
00018 #ifdef OSDL_DEBUG_AUDIO_RENDERER
00019
00020 #define OSDL_AUDIO_RENDER_LOG(message) send( message ) ;
00021
00022 #else
00023
00024 #define OSDL_AUDIO_RENDER_LOG(message)
00025
00026 #endif
00027
00028
00029
00030
00031 AudioRenderer::AudioRenderer( bool registerToRootRenderer )
00032 throw( RenderingException ) :
00033 Renderer( false )
00034
00035 {
00036
00037 if ( registerToRootRenderer )
00038 {
00039
00040 Renderer * renderer ;
00041
00042 try
00043 {
00044
00045
00046 renderer = & Renderer::GetExistingRootRenderer() ;
00047
00048 }
00049 catch( const RenderingException & e )
00050 {
00051 throw RenderingException( "AudioRenderer constructor : "
00052 "no already existing root renderer ("
00053 + e.toString()
00054 + ") whereas registering had been requested." ) ;
00055 }
00056
00057
00058 MultimediaRenderer * multimediaRenderer =
00059 dynamic_cast<MultimediaRenderer *>( renderer ) ;
00060
00061 if ( multimediaRenderer == 0 )
00062 throw RenderingException( "AudioRenderer constructor : "
00063 "root renderer is not a multimedia renderer, "
00064 "no registering possible." ) ;
00065
00066 multimediaRenderer->setAudioRenderer( * this ) ;
00067
00068 }
00069
00070 }
00071
00072
00073
00074 AudioRenderer::~AudioRenderer() throw()
00075 {
00076
00077
00078
00079
00080 }
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106 void AudioRenderer::render( Events::RenderingTick currentRenderingTick ) throw()
00107 {
00108
00109 OSDL_AUDIO_RENDER_LOG( "Audio rendering ! " ) ;
00110
00111
00112
00113
00114
00115
00116 _renderingDone++ ;
00117
00118 }
00119
00120
00121 void AudioRenderer::onRenderingSkipped( RenderingTick skippedRenderingTick )
00122 throw()
00123 {
00124
00125 OSDL_AUDIO_RENDER_LOG( "Audio rendering skipped." ) ;
00126 _renderingSkipped++ ;
00127
00128 }
00129
00130
00131 const string AudioRenderer::toString( Ceylan::VerbosityLevels level )
00132 const throw()
00133 {
00134
00135 string res = "Audio renderer, last rendering tick was "
00136 + Ceylan::toString( _lastRender )
00137 + ", having performed " + Ceylan::toString( _renderingDone )
00138 + " rendering(s) for "
00139 + Ceylan::toString( _renderingSkipped ) + " skip(s)" ;
00140
00141 if ( _renderingDone + _renderingSkipped != 0 )
00142 res += " (rendering proportion : "
00143 + Ceylan::toString( 100 * _renderingDone
00144 / ( _renderingDone + _renderingSkipped ) )
00145 + "%)" ;
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155 return res ;
00156
00157 }
00158