OSDLVideoRenderer.cc

Go to the documentation of this file.
00001 #include "OSDLVideoRenderer.h"
00002 
00003 
00004 #include "OSDLScheduler.h"             // for GetExistingScheduler
00005 #include "OSDLMultimediaRenderer.h"    // for MultimediaRenderer
00006 
00007 //#include "OSDLCamera.h"            // for Camera
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>                // for OSDL_DEBUG_VIDEO_RENDERER and al 
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( /* registerToScheduler */ false )
00040     //,_internalCamera( 0 )
00041 {
00042 
00043     if ( registerToRootRenderer )
00044     {
00045     
00046         Renderer * renderer ;
00047         
00048         try
00049         {
00050         
00051             // Retrieve the root renderer :
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         // Check it is a multimedia renderer indeed :
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     if ( _internalCamera != 0 )
00085         delete _internalCamera ;
00086 */
00087 
00088 }
00089 
00090 /*
00091 bool hasCamera() const throw() 
00092 {
00093     return ( _internalCamera != 0 ) ;
00094 }
00095 
00096 
00097 Camera & VideoRenderer::getCamera() const throw( RenderingException )
00098 {
00099     if ( _internalCamera == 0 )
00100         return * _internalCamera ;
00101 }
00102 
00103 
00104 void VideoRenderer::setCamera( Camera & newCamera ) throw()
00105 {
00106     if ( _internalCamera != 0 )
00107         delete _internalCamera ;
00108     
00109     _internalCamera = & newCamera ;
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      * Beware, currentRenderingTick might be always zero if no 
00123      * scheduler is used.
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     if ( _internalCamera != 0 )
00159         res += ". Following camera is being used : " 
00160             + _internalCamera->toString( level ) ;
00161     else
00162         res += ". No camera is currently used" ;         
00163     */
00164         
00165     return res ;
00166     
00167 }
00168 

Generated on Fri Mar 30 14:47:00 2007 for OSDL by  doxygen 1.5.1