OSDLMultimediaRenderer.cc

Go to the documentation of this file.
00001 #include "OSDLMultimediaRenderer.h"
00002 
00003 #include "OSDLVideoRenderer.h"  // for VideoRenderer
00004 #include "OSDLAudioRenderer.h"  // for AudioRenderer
00005 
00006 
00007 using namespace Ceylan::Log ;
00008 
00009 using namespace OSDL::Events ;
00010 using namespace OSDL::Rendering ;
00011 using namespace OSDL::Engine ;
00012 
00013 using std::string ;
00014 
00015 
00016 
00017 #ifdef OSDL_DEBUG_RENDERER
00018 
00019 #define OSDL_MULTIMEDIA_RENDER_LOG(message) send( message ) ;
00020 
00021 #else // OSDL_DEBUG_RENDERER
00022 
00023 #define OSDL_MULTIMEDIA_RENDER_LOG(message)
00024 
00025 #endif // OSDL_DEBUG_RENDERER
00026 
00027 
00028 
00029 MultimediaRenderer::MultimediaRenderer( bool registerToScheduler ) 
00030         throw( RenderingException ) :
00031     Renderer( registerToScheduler ),
00032     _videoRenderer( 0 ),
00033     _audioRenderer( 0 )
00034 {
00035 
00036     
00037 }
00038 
00039 
00040 MultimediaRenderer::~MultimediaRenderer() throw()
00041 {
00042 
00043     // Views are not owned.
00044     
00045 }
00046 
00047 
00048 
00049 bool MultimediaRenderer::hasVideoRenderer() const throw()
00050 {
00051 
00052     return ( _videoRenderer != 0 ) ;
00053     
00054 }
00055 
00056 
00057 
00058 VideoRenderer & MultimediaRenderer::getVideoRenderer() const 
00059     throw( RenderingException )
00060 {
00061 
00062     if ( _videoRenderer == 0 )
00063         throw RenderingException( "MultimediaRenderer::getVideoRenderer : "
00064             "no video renderer registered." ) ;
00065             
00066     return * _videoRenderer ;
00067     
00068 }
00069 
00070 
00071 
00072 void MultimediaRenderer::setVideoRenderer( VideoRenderer & newVideoRenderer )
00073     throw()
00074 {
00075 
00076     if ( _videoRenderer != 0 )
00077         delete _videoRenderer ;
00078     
00079     _videoRenderer = & newVideoRenderer ;
00080     
00081 }
00082 
00083 
00084 
00085 bool MultimediaRenderer::hasAudioRenderer() const throw()
00086 {
00087 
00088     return ( _audioRenderer != 0 ) ;
00089     
00090 }
00091 
00092 
00093 
00094 AudioRenderer & MultimediaRenderer::getAudioRenderer() const 
00095     throw( RenderingException )
00096 {
00097 
00098     if ( _audioRenderer == 0 )
00099         throw RenderingException( "MultimediaRenderer::getAudioRenderer : "
00100             "no audio renderer registered." ) ;
00101             
00102     return * _audioRenderer ;
00103     
00104 }
00105 
00106 
00107 
00108 void MultimediaRenderer::setAudioRenderer( AudioRenderer & newAudioRenderer )
00109     throw()
00110 {
00111 
00112     if ( _audioRenderer != 0 )
00113         delete _audioRenderer ;
00114     
00115     _audioRenderer = & newAudioRenderer ;
00116     
00117 }
00118 
00119 
00120 
00121 void MultimediaRenderer::render( Events::RenderingTick currentRenderingTick )
00122     throw()
00123 {
00124 
00125     OSDL_MULTIMEDIA_RENDER_LOG( "Rendering ! " ) ;
00126     
00127     if ( _videoRenderer != 0 )
00128         _videoRenderer->render( currentRenderingTick ) ;
00129     else    
00130         renderVideo( currentRenderingTick ) ;
00131         
00132     if ( _audioRenderer != 0 )  
00133         _audioRenderer->render( currentRenderingTick ) ;
00134     else    
00135         renderAudio( currentRenderingTick ) ;
00136         
00137     /*
00138      * Beware, currentRenderingTick might be always zero if no scheduler 
00139      * is used.
00140      *
00141      */
00142     _renderingDone++ ;
00143     
00144 }
00145 
00146 
00147 
00148 void MultimediaRenderer::onRenderingSkipped( 
00149     RenderingTick skippedRenderingTick ) throw()
00150 {
00151 
00152     OSDL_MULTIMEDIA_RENDER_LOG( "Rendering skipped." ) ;
00153     _renderingSkipped++ ;
00154     
00155 }
00156 
00157 
00158 
00159 const string MultimediaRenderer::toString( Ceylan::VerbosityLevels level ) 
00160     const throw() 
00161 {
00162 
00163     string res = "Multimedia renderer, " ;
00164     
00165     if ( _videoRenderer != 0 )
00166         res += "having a video renderer (" 
00167             + _videoRenderer->toString( Ceylan::low ) + ")" ;
00168     else
00169         res += "with no video renderer registered" ;
00170     
00171     if ( _audioRenderer != 0 )
00172         res += ", having an audio renderer (" 
00173             + _audioRenderer->toString( Ceylan::low ) + ")" ;
00174     else
00175         res += ", with no audio renderer registered" ;
00176         
00177     if ( level == Ceylan::low )
00178         return res ;
00179         
00180     res += ". Last rendering tick was " + Ceylan::toString( _lastRender )
00181         + ", having performed " + Ceylan::toString( _renderingDone ) 
00182         + " rendering(s) for "
00183         + Ceylan::toString( _renderingSkipped ) + " skip(s)" ;
00184     
00185     if ( _renderingDone + _renderingSkipped != 0 )
00186         res += " (rendering proportion : " 
00187             + Ceylan::toString( 
00188                 100 * _renderingDone / ( _renderingDone + _renderingSkipped ) )
00189             + "%)" ;
00190             
00191     return res ;
00192     
00193 }
00194 

Generated on Fri Mar 30 14:46:59 2007 for OSDL by  doxygen 1.5.1