Example05_VideoPlayer.cpp

logotipo.png


/*
  How to use CRM32Pro library. Example 5: video player.
  -----------------------------------------------------
  
  >MegaStorm Systems (c) 2009
  >http://www.megastormsystems.com
  >Roberto Prieto
  
  - Initialize SDL and CRM32Pro.
  - Printing help on console.
  - Use of log system.
  - Initialize graphics: window icon, video mode and cursor.
  - Play a MPEG-I(video & audio stream) until the end or ESC/s key are pressed.
  - Show FX effects on video playback (using cursor keys: <- and ->)
  - Exiting using right way ;)
  
 */

// ---Includes---
#include "CRM32Pro.h"

// ---Defines---
#define EXAMPLE_VERSION "Example 5: Video player"
#define GFX_RESOURCE "data/gfx.dpf"     // DPF with graphic resources

// ---Prototypes---
int ChangeFX(int kPressed,SDL_Surface *sFrame,SDL_Rect *rDst);
void PrintHelp(char *sErrMsg = NULL);

// -------------MAIN FUNCTION----------------
int main(int argc,char *argv[])
{
   Uint8 done = 0;

   // -Log system initialize-  
   ILogSystem.Init("VideoPlayer.log",LOG_CONSOLE | LOG_FILE,LOG_NORMAL,EXAMPLE_VERSION);

   // -Print help without any arguments-
   if(argc < 2) 
   {
           PrintHelp();
       ILogSystem.Msg(LOG_LOW," · [LOG] - We need the .mpg video to play, try with \"VideoPlayer.exe your.mpg\"\n\n");
           return 1;
   }

   // -CRM32Pro and SDL initialize- 
   if(CRM32Pro.Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER) < 0)
   {
      ILogSystem.Msg(LOG_NORMAL," · [LOG] - Couldnīt initialize CRM32Pro: %s\n",SDL_GetError());
      return 1;
   }

   // -Desired config-
   CRM32Pro.Config.Title = EXAMPLE_VERSION;
   CRM32Pro.Config.Icon = IImage->Load(GFX_RESOURCE,"icono");
   // Uncoment below two lines to use OpenGL renderer.
   // By the way, not a good idea as each frame must be converted into a texture which is quite demanding task
   //CRM32Pro.Config.VideoRenderer = RENDER_OPENGL;
   //CRM32Pro.Config.VideoAccel = ACCEL_HARDSMOOTH ;


   // -Graphics system initialize-  
   if(!CRM32Pro.SetVideoMode())
   {
      CRM32Pro.Quit();
      return 1;
   }

   // -Play MPEG- 
   IVideo->SetPosition(VIDEO_PLAY_CENTER,VIDEO_PLAY_CENTER);
   IVideo->SetFunction(ChangeFX);
   IVideo->PlayMPEG(argv[1],1);

   // -Exiting..-
   ILogSystem.Msg(LOG_NORMAL,"\n · [INFO]: end of execution.\n");
   CRM32Pro.VideoInfo();
   CRM32Pro.Quit();
   return 0;
}

// Function to be called when a MPEG frame will be updated.
int ChangeFX(int kPressed,SDL_Surface *sFrame,SDL_Rect *rDst)
{
   static int  fx = FXSCREEN_NULL;
   if(kPressed == SDLK_LEFT)
   {
      if(fx > 0) fx--;
      IVideo->SetFX(fx);
   }
   else if(kPressed == SDLK_RIGHT)
   {
      if(fx < FXSCREEN_BLUE) fx++;
      IVideo->SetFX(fx);
   }

   else if(kPressed == SDLK_s) // With "S" key, return 0 to stop the playback
   {
      return 0;
   }

   // With OpenGL video modes, we have to blit the frame on the screen
   if(CRM32Pro.IsGL()) SDL_BlitSurface(sFrame,NULL,CRM32Pro.screen,rDst);

   return 1;
}

// --------------------Help STUFF------------------------
// -Print help-
void PrintHelp(char *sErrMsg)
{
        printf("-----------------------------------------------------------\n");
        printf("                 CRM32Pro SDK - HelpScreen\n                  %s\n",EXAMPLE_VERSION);
    printf("-----------------------------------------------------------\n\n");
        printf(" Use:\n");
        printf("   -  'VideoPlayer your_video.mpg' to play the video.\n\n");
        printf(" During the playback, you can use next keys:\n");
        printf(" [ESCAPE] to abort and exit.\n");
        printf(" [RIGHT CURSOR] to select the next FX effect.\n");
        printf(" [LEFT CURSOR] to select the previous FX effect.\n");
        if(sErrMsg != NULL) printf("%s",sErrMsg);
        else printf("\n");
        puts("Press [ENTER] key to continue.");
        getchar();
}

Generated on Mon Dec 21 17:04:39 2009 for CRM32Pro SDK v5.00 by  doxygen 1.6.1