49 lines
1.3 KiB
C++
49 lines
1.3 KiB
C++
|
|
#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;
|
|
}
|