Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "mitkMovieGenerator.h"
00020 #include <mitkRenderingManager.h>
00021 #include "mitkGL.h"
00022 #include "mitkConfig.h"
00023
00024 #if WIN32
00025 #ifndef __GNUC__
00026
00027 #include "mitkMovieGeneratorWin32.h"
00028
00029 #else
00030 #include "GL/glext.h"
00031 #endif
00032 #endif
00033 #ifndef GL_BGR
00034 #define GL_BGR GL_BGR_EXT
00035 #endif
00036
00037 mitk::MovieGenerator::MovieGenerator()
00038 :m_stepper(NULL),
00039 m_renderer(NULL),
00040 m_width(0),
00041 m_height(0),
00042 m_initialized(false),
00043 m_FrameRate(20)
00044 {
00045 m_fileName[0] = 0;
00046 }
00047
00048
00049 mitk::MovieGenerator::Pointer mitk::MovieGenerator::New()
00050 {
00051 Pointer smartPtr;
00052 MovieGenerator *rawPtr = ::itk::ObjectFactory<MovieGenerator>::Create();
00053 if(rawPtr == NULL) {
00054
00055
00056 #ifdef WIN32
00057 #ifndef __GNUC__
00058
00059 mitk::MovieGenerator::Pointer wp = static_cast<mitk::MovieGenerator*>(mitk::MovieGeneratorWin32::New());
00060 return wp;
00061
00062 #endif
00063 #endif
00064 }
00065 smartPtr = rawPtr;
00066 if(rawPtr != NULL) rawPtr->UnRegister();
00067 return smartPtr;
00068 }
00069
00070
00071 bool mitk::MovieGenerator::WriteMovie()
00072 {
00073 bool ok = false;
00074 if (m_stepper)
00075 {
00076 if (m_renderer) m_renderer->GetRenderWindow()->MakeCurrent();
00077
00078 RenderingManager::GetInstance()->ForceImmediateUpdate(m_renderer->GetRenderWindow());
00079
00080 ok = InitGenerator();
00081 if (!ok)
00082 {
00083 TerminateGenerator();
00084 return false;
00085 }
00086 int imgSize = 3 * m_width * m_height;
00087 printf( "Video size = %i x %i\n", m_width, m_height );
00088 GLbyte *data = new GLbyte[imgSize];
00089
00090
00091 unsigned int numOfSteps = m_stepper->GetSteps();
00092 if( m_stepper->GetPingPong() )
00093 numOfSteps*=2;
00094
00095 for (unsigned int i=0; i<numOfSteps; i++)
00096 {
00097 if (m_renderer) m_renderer->GetRenderWindow()->MakeCurrent();
00098 RenderingManager::GetInstance()->ForceImmediateUpdate(m_renderer->GetRenderWindow());
00099 glReadPixels( 5, 5, m_width, m_height, GL_BGR, GL_UNSIGNED_BYTE, (void*)data );
00100 AddFrame( data );
00101 m_stepper->Next();
00102 }
00103 ok = TerminateGenerator();
00104 delete[] data;
00105 }
00106 return ok;
00107 }
00108
00109 bool mitk::MovieGenerator::WriteCurrentFrameToMovie()
00110 {
00111 if (m_renderer)
00112 {
00113 m_renderer->GetRenderWindow()->MakeCurrent();
00114
00115 if(!m_initialized)
00116 {
00117 RenderingManager::GetInstance()->ForceImmediateUpdate(m_renderer->GetRenderWindow());
00118 m_initialized = InitGenerator();
00119 }
00120 if (!m_initialized)
00121 {
00122 TerminateGenerator();
00123 return false;
00124 }
00125 int imgSize = 3 * m_width * m_height;
00126 GLbyte *data = new GLbyte[imgSize];
00127
00128 RenderingManager::GetInstance()->ForceImmediateUpdate(m_renderer->GetRenderWindow());
00129 glReadPixels( 5, 5, m_width, m_height, GL_BGR, GL_UNSIGNED_BYTE, (void*)data );
00130 AddFrame( data );
00131 delete[] data;
00132 }
00133 return true;
00134 }
00135
00136 void mitk::MovieGenerator::ReleaseMovieWriter()
00137 {
00138 TerminateGenerator();
00139 m_initialized = false;
00140 }
00141
00142 void mitk::MovieGenerator::SetFrameRate(unsigned int rate)
00143 {
00144 m_FrameRate = rate;
00145 }
00146
00147 unsigned int mitk::MovieGenerator::GetFrameRate()
00148 {
00149 return m_FrameRate;
00150 }
00151