yeah, I tried using the CEGUI demo after commenting the sound system lines in MovieLogic (as i was lazy to get fmod deps) and it worked fine, no crashes.
Here is the relative code from my project
void CVideoStream::InitialiseStream(const Ogre::String &fileName, const Ogre::String &referenceName, const Ogre::String &groupName)
{
m_RefName = referenceName;
m_VideoControl = CVideoStreamManager::getSingletonPtr()->GetVideoController();
//Sets an input file name - needed by plugin
m_VideoControl->setInputName(fileName);
m_AudioClip = new CTheoraStream();
//Start paused so we can have audio
m_VideoControl->setPlayMode( TextureEffectPause );
// Used for attaching texture to Technique, State, and texture unit layer
m_VideoControl->setTextureTecPassStateLevel( 0, 0, 0 );
//Set to true to allow for seeking - highly experimental though ;)
m_VideoControl->setSeekEnabled( false );
// Create movie material
Ogre::MaterialPtr material = Ogre::MaterialManager::getSingleton().create( "VideoStreamPlayer/PlayWindowMaterial", groupName);
if( material.isNull() )
{
OGRE_EXCEPT(Ogre::Exception::ERR_INTERNAL_ERROR, string("VideoStream: Unable to create a material for VideoStream " + m_RefName),
"CVideoStream::InitialiseStream");
}
material->createTechnique()->createPass();
material->getTechnique(0)->getPass(0)->createTextureUnitState();
m_VideoControl->createDefinedTexture( "VideoStreamPlayer/PlayWindowMaterial", groupName );
m_VideoClip = m_VideoControl->getMaterialNameClip("VideoStreamPlayer/PlayWindowMaterial"); // set Clip material
m_Texture = ((OgreCEGUIRenderer*)System::getSingletonPtr()->getRenderer())->createTexture( m_VideoClip->getVideoDriver()->getTexture() );
}
//-------------------------------------------------------------
//-------------------------------------------------------------
void CVideoStream::Play()
{
if( m_VideoClip->getPlayMode() == TextureEffectPlay_ASAP)
return; // movie playing, ignore play command
m_MovieSheet = (StaticImage*)WindowManager::getSingleton().createWindow("WindowsLook/StaticImage", string("VideoStreamPlayer/" + m_RefName + "/MovieSheet") );
System::getSingletonPtr()->getGUISheet()->addChildWindow(m_MovieSheet);
m_MovieSheet->setMaximumSize(Size(2.0f, 2.0f));
m_MovieSheet->setPosition(Point(0.1f, 0.05f));
m_MovieSheet->setSize(Size(1.0f, 0.86f));
m_MovieSheet->setFrameEnabled(true);
m_MovieSheet->setBackgroundEnabled(true);
m_MovieSheet->setAlwaysOnTop(true);
// m_MovieSheet->disable();
//Now attach Texture to movie sheet
CEGUI::String temp = "MovieImageset";
Imageset *MovieImageset = ImagesetManager::getSingleton().createImageset( temp, m_Texture );
unsigned int width = m_VideoClip->getVideoDriver()->getWidth();
unsigned int height= m_VideoClip->getVideoDriver()->getHeight();
MovieImageset->defineImage( m_RefName, Point(0.0f,0.0f), Size( width, height ), Point(0.0f,0.0f));
m_MovieSheet->setImage( temp, m_RefName);
m_VideoClip->registerMessageHandler( this );
// Set audio clip
m_VideoClip->setAudioDriver( m_AudioClip );
m_VideoClip->changePlayMode( TextureEffectPlay_ASAP );
m_Paused = false;
}
CVideoStreamManager simply initialises the plugin, handles loading/unloading & updating the CVideoStream.
This is pretty much a rearranged collection of what was in MovieLogic & the handleplay() method in MainModule