summaryrefslogtreecommitdiff
path: root/core/multimedia/opieplayer/libflash/flash.cc
Side-by-side diff
Diffstat (limited to 'core/multimedia/opieplayer/libflash/flash.cc') (more/less context) (ignore whitespace changes)
-rw-r--r--core/multimedia/opieplayer/libflash/flash.cc275
1 files changed, 275 insertions, 0 deletions
diff --git a/core/multimedia/opieplayer/libflash/flash.cc b/core/multimedia/opieplayer/libflash/flash.cc
new file mode 100644
index 0000000..75d351c
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/flash.cc
@@ -0,0 +1,275 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998,1999 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+// Author : Olivier Debon <odebon@club-internet.fr>
+//
+
+#include "swf.h"
+#include "graphic16.h"
+#include "graphic24.h"
+#include "graphic32.h"
+
+#ifdef RCSID
+static char *rcsid = "$Id$";
+#endif
+
+// Interface with standard C
+extern "C" {
+
+FlashHandle
+FlashNew()
+{
+ FlashMovie *fh;
+
+ fh = new FlashMovie;
+
+ fh->main = new CInputScript;
+
+ return (FlashHandle)fh;
+}
+
+int
+FlashParse(FlashHandle flashHandle, int level, char *data, long size)
+{
+ FlashMovie *fh;
+ CInputScript *script;
+ int status = FLASH_PARSE_ERROR;
+
+ fh = (FlashMovie *)flashHandle;
+
+ for(script = fh->main; script != NULL; script = script->next) {
+ if (script->level == level) {
+ status = script->ParseData(fh, data, size);
+
+ if (status & FLASH_PARSE_START) {
+ fh->msPerFrame = 1000/fh->main->frameRate;
+ script->program->rewindMovie();
+ }
+ break;
+ }
+ }
+
+ return status;
+}
+
+void
+FlashGetInfo(FlashHandle flashHandle, struct FlashInfo *fi)
+{
+ FlashMovie *fh;
+
+ fh = (FlashMovie *)flashHandle;
+
+ fi->version = fh->main->m_fileVersion;
+ fi->frameRate = fh->main->frameRate;
+ fi->frameCount = fh->main->frameCount;
+ fi->frameWidth = fh->main->frameRect.xmax - fh->main->frameRect.xmin;
+ fi->frameHeight = fh->main->frameRect.ymax - fh->main->frameRect.ymin;
+}
+
+long FlashGraphicInit(FlashHandle flashHandle, FlashDisplay *fd)
+{
+ FlashMovie *fh;
+
+ fh = (FlashMovie *)flashHandle;
+
+ switch (fd->bpp) {
+ case 4:
+ fh->gd = new GraphicDevice32(fd);
+ break;
+ case 3:
+ fh->gd = new GraphicDevice24(fd);
+ break;
+ case 2:
+ fh->gd = new GraphicDevice16(fd);
+ break;
+ default:
+ fprintf(stderr, "Unsupported depth\n");
+ }
+
+ fh->gd->setMovieDimension(fh->main->frameRect.xmax - fh->main->frameRect.xmin,
+ fh->main->frameRect.ymax - fh->main->frameRect.ymin);
+
+ return 1; // Ok
+}
+
+void
+FlashSoundInit(FlashHandle flashHandle, char *device)
+{
+ FlashMovie *fh;
+
+ fh = (FlashMovie *)flashHandle;
+
+ fh->sm = new SoundMixer(device);
+}
+
+void
+FlashZoom(FlashHandle flashHandle, int zoom)
+{
+ FlashMovie *fh;
+
+ fh = (FlashMovie *)flashHandle;
+
+ fh->gd->setMovieZoom(zoom);
+}
+
+void
+FlashOffset(FlashHandle flashHandle, int x, int y)
+{
+ FlashMovie *fh;
+
+ fh = (FlashMovie *)flashHandle;
+
+ fh->gd->setMovieOffset(x,y);
+}
+
+long
+FlashExec(FlashHandle flashHandle, long flag,
+ FlashEvent *fe, struct timeval *wakeDate)
+{
+ FlashMovie *fh;
+ long wakeUp = 0;
+
+ fh = (FlashMovie *)flashHandle;
+
+ if (fh->main == NULL) return 0; // Not ready
+ if (fh->main->program == NULL) return 0; // Not ready
+ if (fh->main->program->nbFrames == 0) return 0; // Still not ready
+ if (fh->gd == 0) return 0;
+
+ switch (flag & FLASH_CMD_MASK) {
+ case FLASH_STOP:
+ fh->main->program->pauseMovie();
+ wakeUp = 0;
+ break;
+ case FLASH_CONT:
+ fh->main->program->continueMovie();
+ wakeUp = FLASH_STATUS_WAKEUP;
+ break;
+ case FLASH_REWIND:
+ fh->main->program->rewindMovie();
+ wakeUp = 0;
+ break;
+ case FLASH_STEP:
+ fh->main->program->nextStepMovie();
+ wakeUp = 0;
+ break;
+ }
+
+ if (flag & FLASH_WAKEUP) {
+ // Compute next wakeup time
+ gettimeofday(wakeDate,0);
+ wakeDate->tv_usec += fh->msPerFrame*1000;
+ if (wakeDate->tv_usec > 1000000) {
+ wakeDate->tv_usec -= 1000000;
+ wakeDate->tv_sec++;
+ }
+
+ // Play frame
+ wakeUp = fh->processMovie(fh->gd, fh->sm);
+ }
+
+ if (checkFlashTimer(&fh->scheduledTime)) {
+ if (fh->handleEvent(fh->gd, fh->sm, &fh->scheduledEvent)) {
+ wakeUp = 1;
+ }
+
+ setFlashTimer(&fh->scheduledTime, -1);
+ }
+
+ if (flag & FLASH_EVENT) {
+ wakeUp = fh->handleEvent(fh->gd, fh->sm, fe);
+ if (wakeUp) {
+ /* Wake up at once, except for mouse move (40 ms after) */
+ gettimeofday(wakeDate,0);
+ if (fe->type == FeMouseMove) {
+ wakeDate->tv_usec += 40*1000;
+ if (wakeDate->tv_usec > 1000000) {
+ wakeDate->tv_usec -= 1000000;
+ wakeDate->tv_sec++;
+ }
+ }
+ }
+ }
+
+ return wakeUp || (fh->scheduledTime.tv_sec != -1);
+}
+
+void FlashSetGetSwfMethod(FlashHandle flashHandle, void (*getSwf)(char *url, int level, void *clientData), void *clientData)
+{
+ FlashMovie *fh;
+
+ fh = (FlashMovie *)flashHandle;
+
+ fh->getSwf = getSwf;
+ fh->getSwfClientData = clientData;
+}
+
+
+void
+FlashSetCursorOnOffMethod(FlashHandle flashHandle, void (*cursorOnOff)(int , void *), void *clientData)
+{
+ FlashMovie *fh;
+
+ fh = (FlashMovie *)flashHandle;
+
+ fh->cursorOnOff = cursorOnOff;
+ fh->cursorOnOffClientData = clientData;
+}
+
+void
+FlashSetGetUrlMethod(FlashHandle flashHandle, void (*getUrl)(char *, char *, void *), void *clientData)
+{
+ FlashMovie *fh;
+
+ fh = (FlashMovie *)flashHandle;
+
+ fh->getUrl = getUrl;
+ fh->getUrlClientData = clientData;
+}
+
+void
+FlashClose(FlashHandle flashHandle)
+{
+ FlashMovie *fh;
+
+ fh = (FlashMovie *)flashHandle;
+
+ delete fh;
+}
+
+void
+FlashSettings(FlashHandle flashHandle, long settings)
+{
+ FlashMovie *fh;
+
+ fh = (FlashMovie *)flashHandle;
+
+ fh->main->program->modifySettings( settings );
+}
+
+int shape_size,shape_nb,shaperecord_size,shaperecord_nb,style_size,style_nb;
+
+void flash_dump(void)
+{
+ printf("flash: shape_size=%d (nb=%d)\n",shape_size,shape_nb);
+ printf("flash: shaperecord_size=%d (nb=%d)\n",shaperecord_size,shaperecord_nb);
+ printf("flash: style_size=%d (nb=%d)\n",style_size,style_nb);
+}
+
+}; /* end of extern C */