sdlayer.c:
static
void smpeg_callback(SDL_Surface* dst, int x, int y,
unsigned int w, unsigned int h) {
}
void play_video(const char * filename) {
SMPEG *movie = NULL;
SDL_Surface *movieSurface = 0;
SMPEGstatus mpgStatus;
SMPEG_Info movieInfo;
char *error;
int done;
movie = SMPEG_new(filename, &movieInfo, true);
error = SMPEG_error(movie);
if( error != NULL || movie == NULL ) {
printf( "Error loading MPEG: %s\n", error );
return;
}
movieSurface = SDL_CreateRGBSurface(SDL_SWSURFACE, 512, 512, 32, 0xFF, 0xFF00, 0xFF0000, 0);
SMPEG_setdisplay(movie, movieSurface, 0, &smpeg_callback);
SDL_ShowCursor(SDL_DISABLE);
SMPEG_play(movie);
// SMPEG_loop(movie, -1);
SMPEG_getinfo(movie, &movieInfo);
glEnable(GL_TEXTURE_2D);
glClearColor(1, 0, 1, 1);
glDisable(GL_DEPTH_TEST);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glViewport(0, 0, ScreenWidth, ScreenHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1, 1, 1, -1, 0, 1);
glScalef((16.0f/9.0f)/(ScreenWidth/(float)ScreenHeight), 1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
done = 0;
while(done == 0) {
SDL_Event event;
while (SDL_PollEvent(&event)){
if (event.type == SDL_QUIT) {
done = 1;
}
if (event.type == SDL_KEYDOWN){
if (event.key.keysym.sym == SDLK_ESCAPE || event.key.keysym.sym == SDLK_RETURN
|| event.key.keysym.sym == SDLK_SPACE) {
done = 1;
}
}
}
glClear(GL_COLOR_BUFFER_BIT);
DrawIMG(movieSurface, 0, 0);
mpgStatus = SMPEG_status(movie);
if(mpgStatus != SMPEG_PLAYING) {
done = 1;
}
SDL_GL_SwapBuffers();
}
SMPEG_stop(movie);
SMPEG_delete(movie);
movie = NULL;
SDL_FreeSurface(movieSurface);
//SDL_ShowCursor(SDL_ENABLE);
}
game.c:
play_video("video/3drLogo.mpeg");
play_video("video/nuke.mpeg");