From 4466a855986d08d20c6fc6296baec191e1f5e027 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Mon, 22 Mar 2004 01:28:45 +0000 Subject: move commong code into separate source file (more could be done, but it's a start) svn-id: r13358 --- graphics/animation.cpp | 157 ++++++++++++++++++++++++++++++++++++++++++++ graphics/animation.h | 85 +++++++++++++++++++++++- sword1/animation.cpp | 150 ++---------------------------------------- sword1/animation.h | 65 +----------------- sword2/driver/animation.cpp | 142 +-------------------------------------- sword2/driver/animation.h | 62 +---------------- 6 files changed, 252 insertions(+), 409 deletions(-) diff --git a/graphics/animation.cpp b/graphics/animation.cpp index 44d0d854eb..65aca29b00 100644 --- a/graphics/animation.cpp +++ b/graphics/animation.cpp @@ -21,3 +21,160 @@ #include "common/stdafx.h" #include "graphics/animation.h" +#include "common/file.h" +#include "sound/audiostream.h" + +namespace Graphics { + +BaseAnimationState::BaseAnimationState(SoundMixer *snd, OSystem *sys, int width, int height) + : _snd(snd), _sys(sys), MOVIE_WIDTH(width), MOVIE_HEIGHT(height) { +} + +BaseAnimationState::~BaseAnimationState() { +#ifdef USE_MPEG2 + _snd->stopHandle(bgSound); + if (decoder) + mpeg2_close(decoder); + delete mpgfile; + delete sndfile; +#ifndef BACKEND_8BIT + _sys->hide_overlay(); + free(overlay); +#endif + if (bgSoundStream) + delete bgSoundStream; +#endif +} + + + +#ifdef BACKEND_8BIT + +/** + * Build 'Best-Match' RGB lookup table + */ +void BaseAnimationState::buildLookup(int p, int lines) { + int y, cb; + int r, g, b, ii; + + if (p >= maxPalnum) + return; + + if (p != curpal) { + curpal = p; + cr = 0; + pos = 0; + } + + if (cr > BITDEPTH) + return; + + for (ii = 0; ii < lines; ii++) { + r = (-16 * 256 + (int) (256 * 1.596) * ((cr << SHIFT) - 128)) / 256; + for (cb = 0; cb <= BITDEPTH; cb++) { + g = (-16 * 256 - (int) (0.813 * 256) * ((cr << SHIFT) - 128) - (int) (0.391 * 256) * ((cb << SHIFT) - 128)) / 256; + b = (-16 * 256 + (int) (2.018 * 256) * ((cb << SHIFT) - 128)) / 256; + + for (y = 0; y <= BITDEPTH; y++) { + int idx, bst = 0; + int dis = 2 * SQR(r - palettes[p].pal[0]) + 4 * SQR(g - palettes[p].pal[1]) + SQR(b - palettes[p].pal[2]); + + for (idx = 1; idx < 256; idx++) { + long d2 = 2 * SQR(r - palettes[p].pal[4 * idx]) + 4 * SQR(g - palettes[p].pal[4 * idx + 1]) + SQR(b - palettes[p].pal[4 * idx + 2]); + if (d2 < dis) { + bst = idx; + dis = d2; + } + } + lut2[pos++] = bst; + + r += (1 << SHIFT); + g += (1 << SHIFT); + b += (1 << SHIFT); + } + r -= (BITDEPTH+1)*(1 << SHIFT); + } + cr++; + if (cr > BITDEPTH) + return; + } +} + +bool BaseAnimationState::checkPaletteSwitch() { + // if we have reached the last image with this palette, switch to new one + if (framenum == palettes[palnum].end) { + unsigned char *l = lut2; + palnum++; + setPalette(palettes[palnum].pal); + lutcalcnum = (BITDEPTH + palettes[palnum].end - (framenum + 1) + 2) / (palettes[palnum].end - (framenum + 1) + 2); + lut2 = lut; + lut = l; + return true; + } + + return false; +} + +#else + +OverlayColor *BaseAnimationState::lookup = 0; + +void BaseAnimationState::buildLookup() { + if (lookup) + return; + + lookup = (OverlayColor *)calloc((BITDEPTH+1) * (BITDEPTH+1) * 256, sizeof(OverlayColor)); + + int y, cb, cr; + int r, g, b; + int pos = 0; + + for (cr = 0; cr <= BITDEPTH; cr++) { + for (cb = 0; cb <= BITDEPTH; cb++) { + for (y = 0; y < 256; y++) { + r = ((y - 16) * 256 + (int) (256 * 1.596) * ((cr << SHIFT) - 128)) / 256; + g = ((y - 16) * 256 - (int) (0.813 * 256) * ((cr << SHIFT) - 128) - (int) (0.391 * 256) * ((cb << SHIFT) - 128)) / 256; + b = ((y - 16) * 256 + (int) (2.018 * 256) * ((cb << SHIFT) - 128)) / 256; + + if (r < 0) r = 0; + else if (r > 255) r = 255; + if (g < 0) g = 0; + else if (g > 255) g = 255; + if (b < 0) b = 0; + else if (b > 255) b = 255; + + lookup[pos++] = _sys->RGBToColor(r, g, b); + } + } + } +} + +void BaseAnimationState::plotYUV(OverlayColor *lut, int width, int height, byte *const *dat) { + + OverlayColor *ptr = overlay + (MOVIE_HEIGHT - height) / 2 * MOVIE_WIDTH + (MOVIE_WIDTH - width) / 2; + + int x, y; + + int ypos = 0; + int cpos = 0; + int linepos = 0; + + for (y = 0; y < height; y += 2) { + for (x = 0; x < width; x += 2) { + int i = ((((dat[2][cpos] + ROUNDADD) >> SHIFT) * (BITDEPTH+1)) + ((dat[1][cpos] + ROUNDADD)>>SHIFT)) * 256; + cpos++; + + ptr[linepos ] = lut[i + dat[0][ ypos ]]; + ptr[MOVIE_WIDTH + linepos++] = lut[i + dat[0][width + ypos++]]; + ptr[linepos ] = lut[i + dat[0][ ypos ]]; + ptr[MOVIE_WIDTH + linepos++] = lut[i + dat[0][width + ypos++]]; + + } + linepos += (2 * MOVIE_WIDTH - width); + ypos += width; + } +} + +#endif + +} // End of namespace Graphics diff --git a/graphics/animation.h b/graphics/animation.h index ce3ff6620f..cfd96b3d78 100644 --- a/graphics/animation.h +++ b/graphics/animation.h @@ -22,6 +22,11 @@ #ifndef GRAPHICS_ANIMATION_H #define GRAPHICS_ANIMATION_H +#include "common/scummsys.h" +#include "sound/mixer.h" + +class AudioStream; + // Uncomment this if you are using libmpeg2 0.3.1. // #define USE_MPEG2_0_3_1 @@ -50,7 +55,85 @@ typedef sequence_t mpeg2_sequence_t; #endif +#ifdef BACKEND_8BIT +#define SQR(x) ((x) * (x)) +#define SHIFT 3 +#else +#define SHIFT 1 +#endif + +#define BITDEPTH (1 << (8 - SHIFT)) +#define ROUNDADD (1 << (SHIFT - 1)) + +#define BUFFER_SIZE 4096 + + +namespace Graphics { + +class BaseAnimationState { +protected: + const int MOVIE_WIDTH; + const int MOVIE_HEIGHT; + + SoundMixer *_snd; + OSystem *_sys; + + uint framenum; + uint frameskipped; + uint32 ticks; + +#ifdef USE_MPEG2 + mpeg2dec_t *decoder; + const mpeg2_info_t *info; +#endif + + File *mpgfile; + File *sndfile; + byte buffer[BUFFER_SIZE]; + PlayingSoundHandle bgSound; + AudioStream *bgSoundStream; -#endif \ No newline at end of file +#ifdef BACKEND_8BIT + int palnum; + int maxPalnum; + + byte lookup[2][(BITDEPTH+1) * (BITDEPTH+1) * (BITDEPTH+1)]; + byte *lut; + byte *lut2; + int lutcalcnum; + + int curpal; + int cr; + int pos; + + struct { + uint cnt; + uint end; + byte pal[4 * 256]; + } palettes[50]; +#else + static OverlayColor *lookup; + OverlayColor *overlay; +#endif + +public: + BaseAnimationState(SoundMixer *snd, OSystem *sys, int width, int height); + virtual ~BaseAnimationState(); + +protected: +#ifdef BACKEND_8BIT + void buildLookup(int p, int lines); + bool checkPaletteSwitch(); + virtual void setPalette(byte *pal) = 0; +#else + void buildLookup(void); + void plotYUV(OverlayColor *lut, int width, int height, byte *const *dat); +#endif +}; + + +} // End of namespace Graphics + +#endif diff --git a/sword1/animation.cpp b/sword1/animation.cpp index f8e5d16fd6..f1ea311b1c 100644 --- a/sword1/animation.cpp +++ b/sword1/animation.cpp @@ -22,31 +22,16 @@ #include "common/stdafx.h" #include "common/file.h" #include "sword1/animation.h" +#include "sound/audiostream.h" -#define MOVIE_WIDTH 640 -#define MOVIE_HEIGHT 400 - namespace Sword1 { AnimationState::AnimationState(Screen *scr, SoundMixer *snd, OSystem *sys) - : _scr(scr), _snd(snd), _sys(sys) { + : BaseAnimationState(snd, sys, 640, 400), _scr(scr) { } AnimationState::~AnimationState() { -#ifdef USE_MPEG2 - _snd->stopHandle(bgSound); - if (decoder) - mpeg2_close(decoder); - delete mpgfile; - delete sndfile; -#ifndef BACKEND_8BIT - _sys->hide_overlay(); - free(overlay); -#endif - if (bgSoundStream) - delete bgSoundStream; -#endif } bool AnimationState::init(const char *name) { @@ -155,137 +140,11 @@ bool AnimationState::init(const char *name) { #ifdef BACKEND_8BIT -/** - * Build 'Best-Match' RGB lookup table - */ -void AnimationState::buildLookup(int p, int lines) { - int y, cb; - int r, g, b, ii; - - if (p >= maxPalnum) - return; - - if (p != curpal) { - curpal = p; - cr = 0; - pos = 0; - } - - if (cr > BITDEPTH) - return; - - for (ii = 0; ii < lines; ii++) { - r = (-16 * 256 + (int) (256 * 1.596) * ((cr << SHIFT) - 128)) / 256; - for (cb = 0; cb <= BITDEPTH; cb++) { - g = (-16 * 256 - (int) (0.813 * 256) * ((cr << SHIFT) - 128) - (int) (0.391 * 256) * ((cb << SHIFT) - 128)) / 256; - b = (-16 * 256 + (int) (2.018 * 256) * ((cb << SHIFT) - 128)) / 256; - - for (y = 0; y <= BITDEPTH; y++) { - int idx, bst = 0; - int dis = 2 * SQR(r - palettes[p].pal[0]) + 4 * SQR(g - palettes[p].pal[1]) + SQR(b - palettes[p].pal[2]); - - for (idx = 1; idx < 256; idx++) { - long d2 = 2 * SQR(r - palettes[p].pal[4 * idx]) + 4 * SQR(g - palettes[p].pal[4 * idx + 1]) + SQR(b - palettes[p].pal[4 * idx + 2]); - if (d2 < dis) { - bst = idx; - dis = d2; - } - } - lut2[pos++] = bst; - - r += (1 << SHIFT); - g += (1 << SHIFT); - b += (1 << SHIFT); - } - r -= (BITDEPTH+1)*(1 << SHIFT); - } - cr++; - if (cr > BITDEPTH) - return; - } -} - -bool AnimationState::checkPaletteSwitch() { - // if we have reached the last image with this palette, switch to new one - if (framenum == palettes[palnum].end) { - unsigned char *l = lut2; - palnum++; - setPalette(palettes[palnum].pal); - lutcalcnum = (BITDEPTH + palettes[palnum].end - (framenum + 1) + 2) / (palettes[palnum].end - (framenum + 1) + 2); - lut2 = lut; - lut = l; - return true; - } - - return false; -} void AnimationState::setPalette(byte *pal) { _sys->setPalette(pal, 0, 256); } -#else - -OverlayColor *AnimationState::lookup = 0; - -void AnimationState::buildLookup() { - if (lookup) - return; - - lookup = (OverlayColor *)calloc((BITDEPTH+1) * (BITDEPTH+1) * 256, sizeof(OverlayColor)); - - int y, cb, cr; - int r, g, b; - int pos = 0; - - for (cr = 0; cr <= BITDEPTH; cr++) { - for (cb = 0; cb <= BITDEPTH; cb++) { - for (y = 0; y < 256; y++) { - r = ((y - 16) * 256 + (int) (256 * 1.596) * ((cr << SHIFT) - 128)) / 256; - g = ((y - 16) * 256 - (int) (0.813 * 256) * ((cr << SHIFT) - 128) - (int) (0.391 * 256) * ((cb << SHIFT) - 128)) / 256; - b = ((y - 16) * 256 + (int) (2.018 * 256) * ((cb << SHIFT) - 128)) / 256; - - if (r < 0) r = 0; - else if (r > 255) r = 255; - if (g < 0) g = 0; - else if (g > 255) g = 255; - if (b < 0) b = 0; - else if (b > 255) b = 255; - - lookup[pos++] = _sys->RGBToColor(r, g, b); - } - } - } -} - -void AnimationState::plotYUV(OverlayColor *lut, int width, int height, byte *const *dat) { - - OverlayColor *ptr = overlay + (MOVIE_HEIGHT - height) / 2 * MOVIE_WIDTH + (MOVIE_WIDTH - width) / 2; - - int x, y; - - int ypos = 0; - int cpos = 0; - int linepos = 0; - - for (y = 0; y < height; y += 2) { - for (x = 0; x < width; x += 2) { - int i = ((((dat[2][cpos] + ROUNDADD) >> SHIFT) * (BITDEPTH+1)) + ((dat[1][cpos] + ROUNDADD)>>SHIFT)) * 256; - cpos++; - - ptr[linepos ] = lut[i + dat[0][ ypos ]]; - ptr[MOVIE_WIDTH + linepos++] = lut[i + dat[0][width + ypos++]]; - ptr[linepos ] = lut[i + dat[0][ ypos ]]; - ptr[MOVIE_WIDTH + linepos++] = lut[i + dat[0][width + ypos++]]; - - } - linepos += (2 * MOVIE_WIDTH - width); - ypos += width; - } - - _sys->copy_rect_overlay(overlay, MOVIE_WIDTH, 0, 40, MOVIE_WIDTH, MOVIE_HEIGHT); -} - #endif bool AnimationState::decodeFrame() { @@ -344,13 +203,16 @@ bool AnimationState::decodeFrame() { #else - if ((bgSoundStream == NULL) || ((_snd->getChannelElapsedTime(bgSound) * 12) / 1000 < framenum + 1) || frameskipped > 10) { + if ((bgSoundStream == NULL) || + ((_snd->getChannelElapsedTime(bgSound) * 12) / 1000 < framenum + 1) || frameskipped > 10) { if (frameskipped > 10) { warning("force frame %i redraw", framenum); frameskipped = 0; } plotYUV(lookup, sequence_i->width, sequence_i->height, info->display_fbuf->buf); + _sys->copy_rect_overlay(overlay, MOVIE_WIDTH, 0, 40, MOVIE_WIDTH, MOVIE_HEIGHT); + if (bgSoundStream) { while ((_snd->getChannelElapsedTime(bgSound) * 12) / 1000 < framenum) _sys->delay_msecs(10); diff --git a/sword1/animation.h b/sword1/animation.h index 1d9a2aecec..2e5346448e 100644 --- a/sword1/animation.h +++ b/sword1/animation.h @@ -27,71 +27,15 @@ #include "sword1/screen.h" #include "sword1/sound.h" -#include "sound/audiostream.h" -namespace Sword1 { - - -#ifdef BACKEND_8BIT -#define SQR(x) ((x) * (x)) -#define SHIFT 3 -#else -#define SHIFT 1 -#endif -#define BITDEPTH (1 << (8 - SHIFT)) -#define ROUNDADD (1 << (SHIFT - 1)) - -#define BUFFER_SIZE 4096 +namespace Sword1 { -class AnimationState { +class AnimationState : public Graphics::BaseAnimationState { private: Screen *_scr; - SoundMixer *_snd; - OSystem *_sys; - - uint framenum; - uint frameskipped; - uint32 ticks; - -#ifdef USE_MPEG2 - mpeg2dec_t *decoder; - const mpeg2_info_t *info; -#endif - - File *mpgfile; - File *sndfile; - - byte buffer[BUFFER_SIZE]; - - PlayingSoundHandle bgSound; - AudioStream *bgSoundStream; - -#ifdef BACKEND_8BIT - int palnum; - int maxPalnum; - - byte lookup[2][(BITDEPTH+1) * (BITDEPTH+1) * (BITDEPTH+1)]; - byte *lut; - byte *lut2; - int lutcalcnum; - - int curpal; - int cr; - int pos; - - struct { - uint cnt; - uint end; - byte pal[4 * 256]; - } palettes[50]; -#else - static OverlayColor *lookup; - OverlayColor * overlay; -#endif public: - AnimationState(Screen *scr, SoundMixer *snd, OSystem *sys); ~AnimationState(); @@ -101,12 +45,7 @@ public: private: #ifdef BACKEND_8BIT - void buildLookup(int p, int lines); - bool checkPaletteSwitch(); void setPalette(byte *pal); -#else - void buildLookup(void); - void plotYUV(OverlayColor *lut, int width, int height, byte *const *dat); #endif }; diff --git a/sword2/driver/animation.cpp b/sword2/driver/animation.cpp index d1fc9e59e4..94302dc631 100644 --- a/sword2/driver/animation.cpp +++ b/sword2/driver/animation.cpp @@ -32,29 +32,13 @@ #include "sword2/driver/menu.h" #include "sword2/driver/render.h" -#define MOVIE_WIDTH 640 -#define MOVIE_HEIGHT 480 - namespace Sword2 { AnimationState::AnimationState(Sword2Engine *vm) - : _vm(vm), _snd(_vm->_mixer), _sys(_vm->_system) { + : BaseAnimationState(_vm->_mixer, _vm->_system, 640, 480), _vm(vm) { } AnimationState::~AnimationState() { -#ifdef USE_MPEG2 - _snd->stopHandle(bgSound); - if (decoder) - mpeg2_close(decoder); - delete mpgfile; - delete sndfile; -#ifndef BACKEND_8BIT - _sys->hide_overlay(); - free(overlay); -#endif - if (bgSoundStream) - delete bgSoundStream; -#endif } bool AnimationState::init(const char *name) { @@ -163,70 +147,6 @@ bool AnimationState::init(const char *name) { #ifdef BACKEND_8BIT -/** - * Build 'Best-Match' RGB lookup table - */ -void AnimationState::buildLookup(int p, int lines) { - int y, cb; - int r, g, b, ii; - - if (p >= maxPalnum) - return; - - if (p != curpal) { - curpal = p; - cr = 0; - pos = 0; - } - - if (cr > BITDEPTH) - return; - - for (ii = 0; ii < lines; ii++) { - r = (-16 * 256 + (int) (256 * 1.596) * ((cr << SHIFT) - 128)) / 256; - for (cb = 0; cb <= BITDEPTH; cb++) { - g = (-16 * 256 - (int) (0.813 * 256) * ((cr << SHIFT) - 128) - (int) (0.391 * 256) * ((cb << SHIFT) - 128)) / 256; - b = (-16 * 256 + (int) (2.018 * 256) * ((cb << SHIFT) - 128)) / 256; - - for (y = 0; y <= BITDEPTH; y++) { - int idx, bst = 0; - int dis = 2 * SQR(r - palettes[p].pal[0]) + 4 * SQR(g - palettes[p].pal[1]) + SQR(b - palettes[p].pal[2]); - - for (idx = 1; idx < 256; idx++) { - long d2 = 2 * SQR(r - palettes[p].pal[4 * idx]) + 4 * SQR(g - palettes[p].pal[4 * idx + 1]) + SQR(b - palettes[p].pal[4 * idx + 2]); - if (d2 < dis) { - bst = idx; - dis = d2; - } - } - lut2[pos++] = bst; - - r += (1 << SHIFT); - g += (1 << SHIFT); - b += (1 << SHIFT); - } - r -= (BITDEPTH+1)*(1 << SHIFT); - } - cr++; - if (cr > BITDEPTH) - return; - } -} - -bool AnimationState::checkPaletteSwitch() { - // if we have reached the last image with this palette, switch to new one - if (framenum == palettes[palnum].end) { - unsigned char *l = lut2; - palnum++; - setPalette(palettes[palnum].pal); - lutcalcnum = (BITDEPTH + palettes[palnum].end - (framenum + 1) + 2) / (palettes[palnum].end - (framenum + 1) + 2); - lut2 = lut; - lut = l; - return true; - } - - return false; -} void AnimationState::setPalette(byte *pal) { _vm->_graphics->setPalette(0, 256, pal, RDPAL_INSTANT); @@ -234,64 +154,6 @@ void AnimationState::setPalette(byte *pal) { #else -OverlayColor *AnimationState::lookup = 0; - -void AnimationState::buildLookup() { - if (lookup) - return; - - lookup = (OverlayColor *)calloc((BITDEPTH+1) * (BITDEPTH+1) * 256, sizeof(OverlayColor)); - - int y, cb, cr; - int r, g, b; - int pos = 0; - - for (cr = 0; cr <= BITDEPTH; cr++) { - for (cb = 0; cb <= BITDEPTH; cb++) { - for (y = 0; y < 256; y++) { - r = ((y - 16) * 256 + (int) (256 * 1.596) * ((cr << SHIFT) - 128)) / 256; - g = ((y - 16) * 256 - (int) (0.813 * 256) * ((cr << SHIFT) - 128) - (int) (0.391 * 256) * ((cb << SHIFT) - 128)) / 256; - b = ((y - 16) * 256 + (int) (2.018 * 256) * ((cb << SHIFT) - 128)) / 256; - - if (r < 0) r = 0; - else if (r > 255) r = 255; - if (g < 0) g = 0; - else if (g > 255) g = 255; - if (b < 0) b = 0; - else if (b > 255) b = 255; - - lookup[pos++] = _sys->RGBToColor(r, g, b); - } - } - } -} - -void AnimationState::plotYUV(OverlayColor *lut, int width, int height, byte *const *dat) { - - OverlayColor *ptr = overlay + (MOVIE_HEIGHT - height) / 2 * MOVIE_WIDTH + (MOVIE_WIDTH - width) / 2; - - int x, y; - - int ypos = 0; - int cpos = 0; - int linepos = 0; - - for (y = 0; y < height; y += 2) { - for (x = 0; x < width; x += 2) { - int i = ((((dat[2][cpos] + ROUNDADD) >> SHIFT) * (BITDEPTH+1)) + ((dat[1][cpos] + ROUNDADD)>>SHIFT)) * 256; - cpos++; - - ptr[linepos ] = lut[i + dat[0][ ypos ]]; - ptr[RENDERWIDE + linepos++] = lut[i + dat[0][width + ypos++]]; - ptr[linepos ] = lut[i + dat[0][ ypos ]]; - ptr[RENDERWIDE + linepos++] = lut[i + dat[0][width + ypos++]]; - - } - linepos += (2 * MOVIE_WIDTH - width); - ypos += width; - } -} - void AnimationState::drawTextObject(SpriteInfo *s, uint8 *src) { OverlayColor *dst = overlay + RENDERWIDE * (s->y) + s->x; @@ -666,7 +528,7 @@ int32 MoviePlayer::playDummy(const char *filename, MovieTextObject *text[], uint memset(_vm->_graphics->_buffer, 0, _vm->_graphics->_screenWide * MENUDEEP); uint8 msg[] = "Cutscene - Narration Only: Press ESC to exit, or visit www.scummvm.org to download cutscene videos"; - Memory *data = _vm->_fontRenderer->makeTextSprite(msg, MOVIE_WIDTH, 255, _vm->_speechFontId); + Memory *data = _vm->_fontRenderer->makeTextSprite(msg, RENDERWIDE, 255, _vm->_speechFontId); FrameHeader *frame = (FrameHeader *) data->ad; SpriteInfo msgSprite; uint8 *msgSurface; diff --git a/sword2/driver/animation.h b/sword2/driver/animation.h index 5d399c7c63..2303c5a558 100644 --- a/sword2/driver/animation.h +++ b/sword2/driver/animation.h @@ -29,66 +29,11 @@ namespace Sword2 { -#ifdef BACKEND_8BIT -#define SQR(x) ((x) * (x)) -#define SHIFT 3 -#else -#define SHIFT 1 -#endif - -#define BITDEPTH (1 << (8 - SHIFT)) -#define ROUNDADD (1 << (SHIFT - 1)) - -#define BUFFER_SIZE 4096 - -class AnimationState { +class AnimationState : public ::Graphics::BaseAnimationState { private: Sword2Engine *_vm; - SoundMixer *_snd; - OSystem *_sys; - - uint framenum; - uint frameskipped; - int ticks; - -#ifdef USE_MPEG2 - mpeg2dec_t *decoder; - const mpeg2_info_t *info; -#endif - - File *mpgfile; - File *sndfile; - - byte buffer[BUFFER_SIZE]; - - PlayingSoundHandle bgSound; - AudioStream *bgSoundStream; - -#ifdef BACKEND_8BIT - int palnum; - int maxPalnum; - - byte lookup[2][(BITDEPTH+1) * (BITDEPTH+1) * (BITDEPTH+1)]; - byte *lut; - byte *lut2; - int lutcalcnum; - - int curpal; - int cr; - int pos; - - struct { - uint cnt; - uint end; - byte pal[4 * 256]; - } palettes[50]; -#else - static OverlayColor *lookup; - OverlayColor *overlay; -#endif public: - AnimationState(Sword2Engine *vm); ~AnimationState(); @@ -104,12 +49,7 @@ public: private: #ifdef BACKEND_8BIT - void buildLookup(int p, int lines); - bool checkPaletteSwitch(); void setPalette(byte *pal); -#else - void buildLookup(void); - void plotYUV(OverlayColor *lut, int width, int height, byte *const *dat); #endif }; -- cgit v1.2.3