home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Leser 19 / Amiga Plus Leser CD 19.iso / Tools / Freeware / Swf_Player / Lib / flash.cc < prev    next >
Encoding:
C/C++ Source or Header  |  2002-11-17  |  6.8 KB  |  297 lines

  1. /////////////////////////////////////////////////////////////
  2. // Flash Plugin and Player
  3. // Copyright (C) 1998,1999 Olivier Debon
  4. // 
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU General Public License
  7. // as published by the Free Software Foundation; either version 2
  8. // of the License, or (at your option) any later version.
  9. // 
  10. // This program is distributed in the hope that it will be useful,
  11. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. // GNU General Public License for more details.
  14. // 
  15. // You should have received a copy of the GNU General Public License
  16. // along with this program; if not, write to the Free Software
  17. // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18. // 
  19. ///////////////////////////////////////////////////////////////
  20. //  Author : Olivier Debon  <odebon@club-internet.fr>
  21. //
  22.  
  23. #include "swf.h"
  24. #include "graphic16.h"
  25. #include "graphic24.h"
  26. #include "graphic32.h"
  27.  
  28. #ifdef RCSID
  29. static char *rcsid = "$Id: flash.cc,v 1.19 1999/01/31 20:18:39 olivier Exp $";
  30. #endif
  31.  
  32. // Interface with standard C
  33. extern "C" {
  34.  
  35. FlashHandle FlashNew()
  36. {
  37.     FlashMovie *fh;
  38.  
  39.     fh = new FlashMovie;
  40.  
  41.     fh->main = new CInputScript;
  42.  
  43.     return (FlashHandle)fh;
  44. }
  45.  
  46. int FlashParse(FlashHandle flashHandle, int level, char *data, long size)
  47. {
  48.     FlashMovie *fh;
  49.     CInputScript *script;
  50.     int status = FLASH_PARSE_ERROR;
  51.  
  52.     fh = (FlashMovie *)flashHandle;
  53.  
  54.     TRACE("in flashparse fh = %ld, fh->main = %ld, level = %d, data = %ld, size = %ld\n",
  55.                                 fh,
  56.                                 fh->main,
  57.                                 level, data, size );
  58.  
  59.     for(script = fh->main; script != NULL; script = script->next)
  60.     {
  61.         TRACE( "script->level = %d, script->next = %d\n", script->level, script->next );
  62.         if (script->level == level)
  63.         {
  64.             status = script->ParseData(fh, data, size);
  65.  
  66.             TRACE( "script->ParseData returned %d\n", status );
  67.  
  68.             if (status & FLASH_PARSE_START)
  69.             {
  70.                 fh->msPerFrame = 1000/fh->main->frameRate;
  71.                 script->program->rewindMovie();
  72.             }
  73.             break;
  74.         }
  75.     }
  76.  
  77.     TRACE( "flashparse return %d\n", status );
  78.  
  79.     return status;
  80. }
  81.  
  82. void FlashGetInfo(FlashHandle flashHandle, struct FlashInfo *fi)
  83. {
  84.     FlashMovie *fh;
  85.  
  86.     fh = (FlashMovie *)flashHandle;
  87.  
  88.     fi->version = fh->main->m_fileVersion;
  89.     fi->frameRate = fh->main->frameRate;
  90.     fi->frameCount = fh->main->frameCount;
  91.     fi->frameWidth = fh->main->frameRect.xmax - fh->main->frameRect.xmin;
  92.     fi->frameHeight = fh->main->frameRect.ymax - fh->main->frameRect.ymin;
  93. }
  94.  
  95. long FlashGraphicInit(FlashHandle flashHandle, FlashDisplay *fd)
  96. {
  97.     FlashMovie *fh;
  98.  
  99.     fh = (FlashMovie *)flashHandle;
  100.  
  101.     switch (fd->bpp) {
  102.         case 4:
  103.             fh->gd = new GraphicDevice32(fd);
  104.             break;
  105.         case 3:
  106.             fh->gd = new GraphicDevice24(fd);
  107.             break;
  108.         case 2:
  109.             fh->gd = new GraphicDevice16(fd);
  110.             break;
  111.         default:
  112.         #ifndef AMIGA
  113.             fprintf( stderr, "Unsupported depth\n" );
  114.         #else
  115.             #ifndef __PPC__
  116.             PrintFault( 12, "Unsupported depth\n" );
  117.             #else
  118.             fprintf( stderr, "Unsupported depth\n" );
  119.             #endif // !__PPC__
  120.         #endif
  121.         return 0; // [ABA, 03/10/2002 : included NETBSD patch]
  122.     }
  123.  
  124.     TRACE( "*** FlashGraphicInit : Graphic device created\n" );
  125.  
  126.     fh->gd->setMovieDimension(fh->main->frameRect.xmax - fh->main->frameRect.xmin,
  127.                   fh->main->frameRect.ymax - fh->main->frameRect.ymin);
  128.  
  129.     return 1;    // Ok
  130. }
  131.  
  132. void FlashSoundInit(FlashHandle flashHandle, char *device)
  133. {
  134.     FlashMovie *fh;
  135.  
  136.     fh = (FlashMovie *)flashHandle;
  137.  
  138.     fh->sm = new SoundMixer(device);
  139. }
  140.  
  141. void FlashZoom(FlashHandle flashHandle, int zoom)
  142. {
  143.     FlashMovie *fh;
  144.  
  145.     fh = (FlashMovie *)flashHandle;
  146.  
  147.     fh->gd->setMovieZoom(zoom);
  148. }
  149.  
  150. void FlashOffset(FlashHandle flashHandle, int x, int y)
  151. {
  152.     FlashMovie *fh;
  153.  
  154.     fh = (FlashMovie *)flashHandle;
  155.  
  156.     fh->gd->setMovieOffset(x,y);
  157. }
  158.  
  159. long FlashExec(FlashHandle flashHandle, long flag, FlashEvent *fe, struct myTimeval *wakeDate)
  160. {
  161.     FlashMovie *fh;
  162.     long wakeUp = 0;
  163.  
  164.     fh = (FlashMovie *)flashHandle;
  165.  
  166.     if (fh->main == NULL) return 0; // Not ready
  167.     if (fh->main->program == NULL) return 0; // Not ready
  168.     if (fh->main->program->nbFrames == 0) return 0; // Still not ready
  169.     if (fh->gd == 0) return 0;
  170.  
  171.     switch (flag & FLASH_CMD_MASK) {
  172.         case FLASH_STOP:
  173.             fh->main->program->pauseMovie();
  174.             wakeUp = 0;
  175.             break;
  176.         case FLASH_CONT:
  177.             fh->main->program->continueMovie();
  178.             wakeUp = FLASH_STATUS_WAKEUP;
  179.             break;
  180.         case FLASH_REWIND:
  181.             fh->main->program->rewindMovie();
  182.             wakeUp = 0;
  183.             break;
  184.         case FLASH_STEP:
  185.             fh->main->program->nextStepMovie();
  186.             wakeUp = 0;
  187.             break;
  188.     }
  189.  
  190.     if (flag & FLASH_WAKEUP) {
  191.         // Compute next wakeup time
  192.         gettimeofday(wakeDate,0);
  193.         wakeDate->tv_usec += fh->msPerFrame*1000;
  194.         if (wakeDate->tv_usec > 1000000) {
  195.             wakeDate->tv_usec -= 1000000;
  196.             wakeDate->tv_sec++;
  197.         }
  198.  
  199.         // Play frame
  200.         wakeUp = fh->processMovie(fh->gd, fh->sm);
  201.     }
  202.  
  203.     if (checkFlashTimer(&fh->scheduledTime)) {
  204.         if (fh->handleEvent(fh->gd, fh->sm, &fh->scheduledEvent)) {
  205.             wakeUp = 1;
  206.         }
  207.  
  208.         setFlashTimer(&fh->scheduledTime, -1);
  209.     }
  210.  
  211.     if (flag & FLASH_EVENT) {
  212.         wakeUp = fh->handleEvent(fh->gd, fh->sm, fe);
  213.         if (wakeUp) {
  214.             /* Wake up at once, except for mouse move (40 ms after) */
  215.             gettimeofday(wakeDate,0);
  216.             if (fe->type == FeMouseMove) {
  217.                 wakeDate->tv_usec += 40*1000;
  218.                 if (wakeDate->tv_usec > 1000000) {
  219.                     wakeDate->tv_usec -= 1000000;
  220.                     wakeDate->tv_sec++;
  221.                 }
  222.             }
  223.         }
  224.     }
  225.  
  226.     return wakeUp || (fh->scheduledTime.tv_sec != -1);
  227. }
  228.  
  229. void FlashSetGetSwfMethod(FlashHandle flashHandle, void (*getSwf)(char *url, int level, void *clientData), void *clientData)
  230. {
  231.     FlashMovie *fh;
  232.  
  233.     fh = (FlashMovie *)flashHandle;
  234.  
  235.     fh->getSwf = getSwf;
  236.     fh->getSwfClientData = clientData;
  237. }
  238.  
  239.  
  240. void FlashSetCursorOnOffMethod(FlashHandle flashHandle, void (*cursorOnOff)(int , void *), void *clientData)
  241. {
  242.     FlashMovie *fh;
  243.  
  244.     fh = (FlashMovie *)flashHandle;
  245.  
  246.     fh->cursorOnOff = cursorOnOff;
  247.     fh->cursorOnOffClientData = clientData;
  248. }
  249.  
  250. void FlashSetGetUrlMethod(FlashHandle flashHandle, void (*getUrl)(char *, char *, void *), void *clientData)
  251. {
  252.     FlashMovie *fh;
  253.  
  254.     fh = (FlashMovie *)flashHandle;
  255.  
  256.     fh->getUrl = getUrl;
  257.     fh->getUrlClientData = clientData;
  258. }
  259.  
  260. void FlashClose(FlashHandle flashHandle)
  261. {
  262.     FlashMovie *fh;
  263.  
  264.     fh = (FlashMovie *)flashHandle;
  265.  
  266.     delete fh;
  267. }
  268.  
  269. void FlashSettings(FlashHandle flashHandle, long settings)
  270. {
  271.     FlashMovie *fh;
  272.  
  273.     fh = (FlashMovie *)flashHandle;
  274.  
  275.     fh->main->program->modifySettings( settings );
  276. }
  277.  
  278. int shape_size,shape_nb,shaperecord_size,shaperecord_nb,style_size,style_nb;
  279.  
  280. void flash_dump(void)
  281. {
  282.     printf("flash: shape_size=%d (nb=%d)\n",shape_size,shape_nb);
  283.     printf("flash: shaperecord_size=%d (nb=%d)\n",shaperecord_size,shaperecord_nb);
  284.     printf("flash: style_size=%d (nb=%d)\n",style_size,style_nb);
  285. }
  286.  
  287. void AmigaFlashSoundInit( FlashHandle flashHandle, int flag )
  288. {
  289.     FlashMovie *fh;
  290.  
  291.     fh = (FlashMovie *)flashHandle;
  292.  
  293.     fh->sm = new SoundMixer( flag );
  294. }
  295.  
  296. }; /* end of extern C */
  297.