Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

mxcpcBufferedMxPEGVideoRenderer.cpp

00001 //           ///          //                                        Mx clientSDK
00002 //          /////        ////                    Mx Crossplatform Client Library
00003 //         /// XXX     XXX ///
00004 //        ///    XXX XXX    ///     $RCSfile: mxcpcBufferedMxPEGVideoRenderer.cpp,v $
00005 //       ///       XXX       ///     $Revision: 1.4 $
00006 //      ///      XXX XXX      ///     $Date: 2006/01/18 17:24:59 $
00007 //     ////    XXX     XXX    ////     $Author: cvs-kai $
00008 //    ////                     ////
00009 //   ////  M  O  B  O  T  I  X  ////////////////////////////////////////////////
00010 //  //// Security Vision Systems //////////////////////////////////////////////
00011 //                                                                          //
00012 //  Copyright (C) 2005 - 2006, MOBOTIX AG, Germany                         //
00013 //  This software is made available under the BSD licence. Please refer   //
00014 //  to the file LICENCE.TXT contained in this distribution for details.  //
00015 //                                                                      //
00016 //  /////////////////////////////////////////////////////////////////////
00017 
00018 
00019 
00020 #include <mxcpcBufferedMxPEGVideoRenderer.h>
00021 #include <mxcpcVideoDisplay.h>
00022 
00023 
00024 
00025 mxcpcBufferedMxPEGVideoRenderer
00026  ::mxcpcBufferedMxPEGVideoRenderer(mxcpcVideoDisplay *viewer) {
00027   
00028   Viewer = viewer;
00029   
00030   CenterX = CenterY = 0;
00031   OffsetX = OffsetY = 0;
00032   
00033   FrameCount = 0;
00034   
00035   FramerateMeasureInterval = -1;   // don't measure framerate
00036   FramerateMeasureTime.start();
00037   FramerateFrameCount = 0;
00038 }
00039 
00040 
00041 mxcpcBufferedMxPEGVideoRenderer::~mxcpcBufferedMxPEGVideoRenderer() {
00042 
00043 }
00044 
00045 
00046 /*!
00047  *   Per default, the framerate measure mode is disabled.
00048  */
00049 void mxcpcBufferedMxPEGVideoRenderer
00050       ::setFramerateMeasureModeEnabled(bool enabled, int measure_interval_ms) {
00051   
00052   if(!enabled) FramerateMeasureInterval = -1;
00053   else {
00054     FramerateMeasureInterval = measure_interval_ms;
00055     if(FramerateMeasureInterval < 0) FramerateMeasureInterval = 10000;   // 10s
00056     FramerateMeasureTime.start();
00057     FramerateFrameCount = 0;
00058   }
00059 }
00060 
00061 
00062 int mxcpcBufferedMxPEGVideoRenderer::getFrameCount(void) {
00063 
00064   return(FrameCount);
00065 }
00066 
00067 
00068 void mxcpcBufferedMxPEGVideoRenderer::videoResolutionChanged(int width, 
00069                                                              int height) {
00070   
00071   mxcpcBufferedMxPEGDecoderBackEnd::videoResolutionChanged(width, height);
00072   
00073   if(PixelBuffer) {
00074     CenterX = Width/2;    OffsetX = Width  - CenterX;
00075     CenterY = Height/2;   OffsetY = Height - CenterY;
00076   }
00077   else {
00078     CenterX = CenterY = 0;
00079     OffsetX = OffsetY = 0;
00080   }
00081   
00082   Viewer->updateGL();
00083 }
00084 
00085 
00086 void mxcpcBufferedMxPEGVideoRenderer::errorEncountered(void) {
00087 
00088 }
00089 
00090 
00091 void mxcpcBufferedMxPEGVideoRenderer::frameComplete(void) {
00092 
00093   int WinWidth, WinHeight;   // letter-case convention violation, dammit...
00094   int elapsed;
00095   float fps;
00096   
00097   // measure framerate, if enabled...
00098   fps = -1.0f;
00099   if(FramerateMeasureInterval >= 0) {
00100     
00101     FramerateFrameCount++;
00102     
00103     if((elapsed = FramerateMeasureTime.elapsed()) >= FramerateMeasureInterval) {
00104       
00105       fps = (float)FramerateFrameCount * 1000.0f / (float)elapsed;
00106       
00107       FramerateMeasureTime.start();
00108       FramerateFrameCount = 0;
00109     }
00110   }
00111   
00112   if(!PixelBuffer) {
00113   
00114     if(fps >= 0.0f) emit framerateMeasured(fps);
00115     
00116     return;
00117   }
00118   
00119   WinWidth  = Viewer->width();
00120   WinHeight = Viewer->height(); 
00121   
00122   Viewer->makeCurrent();
00123   
00124   if(   false   // scale to fit...   (currently disabled)
00125      && (   ((WinWidth > Width ? WinWidth - Width : Width - WinWidth) > 2)
00126          || ((WinHeight > Height ? WinHeight - Height : Height - WinHeight) > 2)
00127         )
00128     )                                                                          {
00129           
00130     glRasterPos2i(WinWidth/2, WinHeight/2);
00131     glBitmap(0,                        0, 
00132              0.0f,                     0.0f,
00133              (GLfloat)(-(WinWidth/2)), (GLfloat)(-(WinHeight/2 + 1)),
00134              0);
00135     glPixelZoom((GLfloat)WinWidth / (GLfloat)Width,
00136                 (GLfloat)WinHeight / (GLfloat)Height);
00137     glDrawPixels(Width, Height,
00138                  GL_RGB, GL_UNSIGNED_BYTE,
00139                  PixelBuffer + PixelBufferOffset);
00140     glPixelZoom(1.0f, 1.0f);
00141   }
00142   
00143   else {   // center...
00144                   
00145     glRasterPos2i(WinWidth/2, WinHeight/2);
00146     glBitmap(0,                  0, 
00147              0.0f,               0.0f,
00148              (GLfloat)-CenterX, (GLfloat)-CenterY,
00149              0);
00150     glDrawPixels(Width, Height,
00151                  GL_RGB, GL_UNSIGNED_BYTE,
00152                  PixelBuffer + PixelBufferOffset);
00153   }
00154   
00155   glFlush();
00156   
00157   FrameCount++;
00158   if(FrameCount < 0) FrameCount = 0;   // overflow?
00159   
00160   if(fps >= 0.0f) emit framerateMeasured(fps);
00161 }
00162 
00163 
00164 void mxcpcBufferedMxPEGVideoRenderer::videoTileReceived(void) {
00165 
00166 }
00167 

Generated on Mon Jan 30 15:13:06 2006 for mxcpc by  doxygen 1.4.4