From 15318cad33835e4e2dc620d033e43cd930676cdd Mon Sep 17 00:00:00 2001 From: kergoth Date: Fri, 25 Jan 2002 22:14:26 +0000 Subject: Initial revision --- (limited to 'core/multimedia/opieplayer/libflash/flash.cc') 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 +// + +#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 */ -- cgit v0.9.0.2