| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- #include "std.h"
- #include "gxmovie.h"
- #include "gxgraphics.h"
- gxMovie::gxMovie( gxGraphics *g,IMultiMediaStream *mm )
- :gfx(g),mm_stream( mm ),playing(true){
- mm_stream->GetMediaStream( MSPID_PrimaryVideo,&vid_stream );
- vid_stream->QueryInterface( IID_IDirectDrawMediaStream,(void**)&dd_stream );
- DDSURFACEDESC desc={sizeof(desc)};
- dd_stream->GetFormat( &desc,0,0,0 );
- canvas=gfx->createCanvas( desc.dwWidth,desc.dwHeight,0 ); //gxCanvas::CANVAS_NONDISPLAY );
- canvas->getSurface()->QueryInterface( IID_IDirectDrawSurface,(void**)&dd_surf );
- src_rect.left=src_rect.top=0;
- src_rect.right=desc.dwWidth;src_rect.bottom=desc.dwHeight;
- dd_stream->CreateSample( dd_surf,&src_rect,0,&dd_sample );
- mm_stream->SetState( STREAMSTATE_RUN );
- }
- gxMovie::~gxMovie(){
- mm_stream->SetState( STREAMSTATE_STOP );
- dd_sample->Release();
- dd_surf->Release();
- dd_stream->Release();
- vid_stream->Release();
- mm_stream->Release();
- gfx->freeCanvas( canvas );
- }
- bool gxMovie::draw( gxCanvas *dest,int x,int y,int w,int h ){
- if( !playing ) return false;
- if( !dd_sample->Update( 0,0,0,0 ) ){
- RECT dest_rect={x,y,x+w,y+h};
- dest->getSurface()->Blt( &dest_rect,canvas->getSurface(),&src_rect,DDBLT_WAIT,0 );
- dest->damage( dest_rect );
- }else{
- playing=false;
- }
- return playing;
- }
|