⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 glmovie.c

📁 This code is based on mpeg_play, available from: http://bmrc.berkeley.edu/frame/research/mpeg/
💻 C
字号:
/* HACK * If you stick glx.h before MPEG.h, the preprocessor * will start replacing the MPEG methods Status with an * X11 variable type... blech. */#include "smpeg.h"#include "SDL.h"#include <stdlib.h>#include <malloc.h>#include <string.h>#include <unistd.h>#include "glmovie.h"static void glmpeg_update( SDL_Surface*, Sint32, Sint32, Uint32, Uint32 );int main( int argc, char* argv[] ){    SMPEG* mpeg;    SMPEG_Info mpeg_info;    SDL_Surface* screen;    SDL_Surface* surface;    if( argc < 2 ) {	fprintf( stderr, "Usage: %s file.mpg\n", argv[0]);	return 1;    }    if( SDL_Init( SDL_INIT_VIDEO | SDL_INIT_AUDIO ) < 0 ) {	fprintf( stderr, "glmovie: I couldn't initizlize SDL (shrug)\n" );	return 1;    }    mpeg = SMPEG_new( argv[1], &mpeg_info, 1 );    if( !mpeg ) {	fprintf( stderr, "glmovie: I'm not so sure about this %s file...\n", argv[1] );        SDL_Quit();	return 1;    }    /* Grab the mouse and input and set the video mode */    SDL_ShowCursor(0);    SDL_WM_GrabInput(SDL_GRAB_ON);    screen = SDL_SetVideoMode(640, 480, 0, SDL_OPENGL|SDL_FULLSCREEN);    if ( !screen ) {	fprintf( stderr, "glmovie: Couldn't set 640x480 GL vide mode: %s\n", SDL_GetError());        SDL_Quit();        return 1;    }    /* Everything needs to be in RGB for GL, but needs to be 32-bit for SMPEG. */    surface = SDL_AllocSurface( SDL_SWSURFACE,				mpeg_info.width,				mpeg_info.height,				32,				0x000000FF,				0x0000FF00,				0x00FF0000,				0xFF000000 );    if( !surface ) {	fprintf( stderr, "glmovie: I couldn't make a surface (boo hoo)\n" );        SDL_Quit();	exit( 1 );    }    /* *Initialize* with mpeg size. */    if ( glmovie_init( mpeg_info.width, mpeg_info.height ) != GL_NO_ERROR ) {	fprintf( stderr, "glmovie: glmovie_init() failed!\n" );        SDL_Quit();	exit( 1 );    }    /* *Resize* with window size. */    glmovie_resize( screen->w, screen->h );    SMPEG_setdisplay( mpeg, surface, NULL, glmpeg_update );    SMPEG_play( mpeg );    while( SMPEG_status( mpeg ) == SMPEG_PLAYING ) {        SDL_Event event;        while ( SDL_PollEvent(&event) ) {            switch (event.type) {              case SDL_KEYDOWN:                if ( event.key.keysym.sym == SDLK_ESCAPE ) {                    SMPEG_stop( mpeg );                }                break;              case SDL_MOUSEBUTTONDOWN:              case SDL_QUIT:                SMPEG_stop( mpeg );                break;            }        }        SDL_Delay(100);    }    glmovie_quit( );    SDL_Quit();    return 0;}static void glmpeg_update( SDL_Surface* surface, Sint32 x, Sint32 y, Uint32 w, Uint32 h ){    GLenum error;    glmovie_draw( (GLubyte*) surface->pixels );    error = glGetError( );    if( error != GL_NO_ERROR ) {	fprintf( stderr, "glmovie: GL error: %s\n", gluErrorString( error ) );	exit( 1 );    }    SDL_GL_SwapBuffers();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -