00001 #include "OSDLVideoRenderer.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_USES_CONFIG_H
00019 #include <OSDLConfig.h>
00020 #endif // OSDL_USES_CONFIG_H
00021
00022
00023
00024 #if OSDL_DEBUG_VIDEO_RENDERER
00025
00026 #define OSDL_VIDEO_RENDER_LOG(message) send( message ) ;
00027
00028 #else // OSDL_DEBUG_VIDEO_RENDERER
00029
00030 #define OSDL_VIDEO_RENDER_LOG(message)
00031
00032 #endif // OSDL_DEBUG_VIDEO_RENDERER
00033
00034
00035
00036
00037 VideoRenderer::VideoRenderer( bool registerToRootRenderer )
00038 throw( RenderingException ) :
00039 Renderer( false )
00040
00041 {
00042
00043 if ( registerToRootRenderer )
00044 {
00045
00046 Renderer * renderer ;
00047
00048 try
00049 {
00050
00051
00052 renderer = & Renderer::GetExistingRootRenderer() ;
00053
00054 }
00055 catch( const RenderingException & e )
00056 {
00057 throw RenderingException( "VideoRenderer constructor : "
00058 "no already existing root renderer ("
00059 + e.toString()
00060 + ") whereas registering had been requested." ) ;
00061 }
00062
00063
00064 MultimediaRenderer * multimediaRenderer =
00065 dynamic_cast<MultimediaRenderer *>( renderer ) ;
00066
00067 if ( multimediaRenderer == 0 )
00068 throw RenderingException( "VideoRenderer constructor : "
00069 "root renderer is not a multimedia renderer, "
00070 "no registering possible." ) ;
00071
00072 multimediaRenderer->setVideoRenderer( * this ) ;
00073
00074 }
00075
00076 }
00077
00078
00079
00080 VideoRenderer::~VideoRenderer() throw()
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
00107
00108
00109
00110
00111
00112
00113
00114
00115 void VideoRenderer::render( Events::RenderingTick currentRenderingTick )
00116 throw()
00117 {
00118
00119 OSDL_VIDEO_RENDER_LOG( "Video rendering ! " ) ;
00120
00121
00122
00123
00124
00125
00126 _renderingDone++ ;
00127 }
00128
00129
00130 void VideoRenderer::onRenderingSkipped( RenderingTick skippedRenderingTick )
00131 throw()
00132 {
00133
00134 OSDL_VIDEO_RENDER_LOG( "Video rendering skipped." ) ;
00135
00136 _renderingSkipped++ ;
00137
00138 }
00139
00140
00141 const string VideoRenderer::toString( Ceylan::VerbosityLevels level )
00142 const throw()
00143 {
00144
00145 string res = "Video renderer, last rendering tick was "
00146 + Ceylan::toString( _lastRender )
00147 + ", having performed "
00148 + Ceylan::toString( _renderingDone ) + " rendering(s) for "
00149 + Ceylan::toString( _renderingSkipped ) + " skip(s)" ;
00150
00151 if ( _renderingDone + _renderingSkipped != 0 )
00152 res += " (rendering proportion : "
00153 + Ceylan::toString(
00154 100 * _renderingDone / ( _renderingDone + _renderingSkipped ) )
00155 + "%)" ;
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165 return res ;
00166
00167 }
00168