aboutsummaryrefslogtreecommitdiff
path: root/graphics/video
diff options
context:
space:
mode:
authorSven Hesse2010-08-08 00:33:13 +0000
committerSven Hesse2010-08-08 00:33:13 +0000
commitb5b47d50c8984361965c49eead999eb7bc672171 (patch)
tree542c5b2793fadad357b5c54360043133295f2848 /graphics/video
parentd365b71945c8d31fd19b4de638cc26db617fd5a5 (diff)
downloadscummvm-rg350-b5b47d50c8984361965c49eead999eb7bc672171.tar.gz
scummvm-rg350-b5b47d50c8984361965c49eead999eb7bc672171.tar.bz2
scummvm-rg350-b5b47d50c8984361965c49eead999eb7bc672171.zip
VIDEO: Make Indeo3 a proper video codec
This way, Indeo3 is properly usable in various container VideoDecoder, for example AVI, and not just VMD. Since VMD is not yet ready for this, we're disabling Indeo3 in VMDs for now. svn-id: r51849
Diffstat (limited to 'graphics/video')
-rw-r--r--graphics/video/avi_decoder.cpp7
-rw-r--r--graphics/video/codecs/indeo3.cpp (renamed from graphics/video/coktelvideo/indeo3.cpp)192
-rw-r--r--graphics/video/codecs/indeo3.h (renamed from graphics/video/coktelvideo/indeo3.h)56
-rw-r--r--graphics/video/coktelvideo/coktelvideo.cpp76
-rw-r--r--graphics/video/coktelvideo/coktelvideo.h10
5 files changed, 121 insertions, 220 deletions
diff --git a/graphics/video/avi_decoder.cpp b/graphics/video/avi_decoder.cpp
index 06589d99b0..4973cb3eb0 100644
--- a/graphics/video/avi_decoder.cpp
+++ b/graphics/video/avi_decoder.cpp
@@ -38,6 +38,7 @@
#include "graphics/video/codecs/cinepak.h"
#include "graphics/video/codecs/msvideo1.h"
#include "graphics/video/codecs/msrle.h"
+#include "graphics/video/codecs/indeo3.h"
namespace Graphics {
@@ -387,10 +388,14 @@ Codec *AviDecoder::createCodec() {
case ID_MSVC:
case ID_WHAM:
return new MSVideo1Decoder(_bmInfo.width, _bmInfo.height, _bmInfo.bitCount);
- case ID_RLE :
+ case ID_RLE:
return new MSRLEDecoder(_bmInfo.width, _bmInfo.height, _bmInfo.bitCount);
case ID_CVID:
return new CinepakDecoder();
+#ifdef USE_INDEO3
+ case ID_IV32:
+ return new Indeo3Decoder(_bmInfo.width, _bmInfo.height);
+#endif
default:
warning ("Unknown/Unhandled compression format \'%s\'", tag2str(_vidsHeader.streamHandler));
}
diff --git a/graphics/video/coktelvideo/indeo3.cpp b/graphics/video/codecs/indeo3.cpp
index 983705ab9c..f59ae81e81 100644
--- a/graphics/video/coktelvideo/indeo3.cpp
+++ b/graphics/video/codecs/indeo3.cpp
@@ -38,33 +38,38 @@
#include "common/frac.h"
#include "common/file.h"
-#include "graphics/dither.h"
-#include "graphics/video/coktelvideo/indeo3.h"
+#include "graphics/conversion.h"
+
+#include "graphics/video/codecs/indeo3.h"
namespace Graphics {
-Indeo3::Indeo3(int16 width, int16 height, Graphics::PaletteLUT *palLUT) {
- assert((width > 0) && (height > 0));
+Indeo3Decoder::Indeo3Decoder(uint16 width, uint16 height) : _ModPred(0), _corrector_type(0) {
+ _iv_frame[0].the_buf = 0;
+ _iv_frame[1].the_buf = 0;
- _width = width;
- _height = height;
- _palLUT = palLUT;
+ _pixelFormat = g_system->getScreenFormat();
- _ditherSL = 0;
- setDither(kDitherSierraLight);
+ _surface = new Surface;
+ _surface->create(width, height, _pixelFormat.bytesPerPixel);
buildModPred();
allocFrames();
}
-Indeo3::~Indeo3() {
+Indeo3Decoder::~Indeo3Decoder() {
+ delete _surface;
+
delete[] _iv_frame[0].the_buf;
delete[] _ModPred;
delete[] _corrector_type;
- delete _ditherSL;
}
-bool Indeo3::isIndeo3(byte *data, uint32 dataLen) {
+PixelFormat Indeo3Decoder::getPixelFormat() const {
+ return _pixelFormat;
+}
+
+bool Indeo3Decoder::isIndeo3(byte *data, uint32 dataLen) {
// No data, no Indeo 3
if (!data)
return false;
@@ -90,23 +95,7 @@ bool Indeo3::isIndeo3(byte *data, uint32 dataLen) {
return true;
}
-void Indeo3::setDither(DitherAlgorithm dither) {
- delete _ditherSL;
- _ditherSL = 0;
-
- _dither = dither;
-
- switch (dither) {
- case kDitherSierraLight:
- _ditherSL = new Graphics::SierraLight(_width, _palLUT);
- break;
-
- default:
- return;
- }
-}
-
-void Indeo3::buildModPred() {
+void Indeo3Decoder::buildModPred() {
_ModPred = new byte[8 * 128];
for (int i = 0; i < 128; i++) {
@@ -133,12 +122,12 @@ void Indeo3::buildModPred() {
}
}
-void Indeo3::allocFrames() {
- int32 luma_width = (_width + 3) & (~3);
- int32 luma_height = (_height + 3) & (~3);
+void Indeo3Decoder::allocFrames() {
+ int32 luma_width = (_surface->w + 3) & (~3);
+ int32 luma_height = (_surface->h + 3) & (~3);
- int32 chroma_width = ((luma_width >> 2) + 3) & (~3);
- int32 chroma_height = ((luma_height>> 2) + 3) & (~3);
+ int32 chroma_width = ((luma_width >> 2) + 3) & (~3);
+ int32 chroma_height = ((luma_height >> 2) + 3) & (~3);
int32 luma_pixels = luma_width * luma_height;
int32 chroma_pixels = chroma_width * chroma_height;
@@ -184,21 +173,23 @@ void Indeo3::allocFrames() {
}
}
-bool Indeo3::decompressFrame(byte *inData, uint32 dataLen,
- byte *outData, uint16 width, uint16 height) {
+Surface *Indeo3Decoder::decodeImage(Common::SeekableReadStream *stream) {
+ uint32 dataLen = stream->size();
+
+ byte *inData = new byte[dataLen];
+
+ if (stream->read(inData, dataLen) != dataLen)
+ return 0;
// Not Indeo 3? Fail
if (!isIndeo3(inData, dataLen))
- return false;
-
- assert(outData);
- assert(_palLUT);
+ return 0;
uint32 frameDataLen = READ_LE_UINT32(inData + 12);
// Less data than the frame should have? Fail
if (dataLen < (frameDataLen - 16))
- return false;
+ return 0;
Common::MemoryReadStream frame(inData, dataLen);
@@ -219,7 +210,7 @@ bool Indeo3::decompressFrame(byte *inData, uint32 dataLen,
}
if (flags3 == 0x80)
- return true;
+ return _surface;
frame.skip(3);
@@ -262,85 +253,40 @@ bool Indeo3::decompressFrame(byte *inData, uint32 dataLen,
decodeChunk(_cur_frame->Ubuf, _ref_frame->Ubuf, chromaWidth, chromaHeight,
buf_pos + offs * 2, flags2, hdr_pos, buf_pos, MIN<int>(chromaWidth, 40));
- BlitState blitState;
-
- blitState.widthY = _cur_frame->y_w;
- blitState.widthUV = _cur_frame->uv_w;
- blitState.uwidthUV = chromaWidth;
- blitState.uwidthOut = fWidth;
- blitState.heightY = _cur_frame->y_h;
- blitState.heightUV = _cur_frame->uv_h;
- blitState.uheightUV = chromaHeight;
- blitState.uheightOut = fHeight;
- blitState.scaleWYUV = blitState.widthY / blitState.widthUV;
- blitState.scaleHYUV = blitState.heightY / blitState.heightUV;
- blitState.scaleWYOut = blitState.widthY / blitState.uwidthOut;
- blitState.scaleHYOut = blitState.heightY / blitState.uheightOut;
- blitState.lineWidthOut = blitState.scaleWYOut * blitState.uwidthOut;
- blitState.lineHeightOut = blitState.scaleHYOut * blitState.uheightOut;
- blitState.bufY = _cur_frame->Ybuf;
- blitState.bufU = _cur_frame->Ubuf;
- blitState.bufV = _cur_frame->Vbuf;
- blitState.bufOut = outData;
-
- blitFrame(blitState);
+ // Blit the frame onto the surface
+ const byte *srcY = _cur_frame->Ybuf;
+ const byte *srcU = _cur_frame->Ubuf;
+ const byte *srcV = _cur_frame->Vbuf;
+ byte *dest = (byte *)_surface->pixels;
+ for (uint32 y = 0; y < fHeight; y++) {
+ byte *rowDest = dest;
- return true;
-}
-
-void Indeo3::blitFrame(BlitState &s) {
- if (_ditherSL)
- _ditherSL->newFrame();
-
- for (s.curY = 0; s.curY < s.uheightOut; s.curY++) {
- if (_dither == kDitherNone)
- blitLine(s);
- else
- blitLineDither(s);
- }
-}
+ for (uint32 x = 0; x < fWidth; x++, rowDest += _surface->bytesPerPixel) {
+ const byte cY = srcY[x];
+ const byte cU = srcU[x >> 2];
+ const byte cV = srcV[x >> 2];
-void Indeo3::blitLine(BlitState &s) {
- byte *lineU = s.bufU + (s.curY >> 2) * s.uwidthUV;
- byte *lineV = s.bufV + (s.curY >> 2) * s.uwidthUV;
+ byte r = 0, g = 0, b = 0;
+ YUV2RGB(cY, cU, cV, r, g, b);
- for (s.curX = 0; s.curX < s.uwidthOut; s.curX++) {
- byte dataY = *s.bufY++;
- byte dataU = lineU[s.curX >> 2];
- byte dataV = lineV[s.curX >> 2];
-
- for (int n = 0; n < s.scaleWYOut; n++)
- *s.bufOut++ = _palLUT->findNearest(dataY, dataU, dataV);
- }
+ const uint32 color = _pixelFormat.RGBToColor(r, g, b);
- byte *lineDest = s.bufOut - s.lineWidthOut;
- for (int n = 1; n < s.scaleHYOut; n++) {
- memcpy(s.bufOut, lineDest, s.lineWidthOut);
- s.bufOut += s.lineWidthOut;
- }
-}
-
-void Indeo3::blitLineDither(BlitState &s) {
- byte *lineU = s.bufU + (s.curY >> 2) * s.uwidthUV;
- byte *lineV = s.bufV + (s.curY >> 2) * s.uwidthUV;
-
- for (uint16 i = 0; i < s.scaleHYOut; i++) {
- byte *bufY = s.bufY;
-
- for (s.curX = 0; s.curX < s.uwidthOut; s.curX++) {
- byte dataY = *bufY++;
- byte dataU = lineU[s.curX >> 2];
- byte dataV = lineV[s.curX >> 2];
+ if (_surface->bytesPerPixel == 1)
+ *((uint8 *)rowDest) = (uint8)color;
+ else if (_surface->bytesPerPixel == 2)
+ *((uint16 *)rowDest) = (uint16)color;
+ }
- for (int n = 0; n < s.scaleWYOut; n++)
- *s.bufOut++ = _ditherSL->dither(dataY, dataU, dataV, s.curX * s.scaleWYOut + n);
+ dest += _surface->pitch;
+ srcY += fWidth;
+ if ((y & 3) == 3) {
+ srcU += fWidth >> 2;
+ srcV += fWidth >> 2;
}
-
- _ditherSL->nextLine();
}
- s.bufY += s.uwidthOut;
+ return _surface;
}
typedef struct {
@@ -397,7 +343,7 @@ typedef struct {
} \
lp2 = 4;
-void Indeo3::decodeChunk(byte *cur, byte *ref, int width, int height,
+void Indeo3Decoder::decodeChunk(byte *cur, byte *ref, int width, int height,
const byte *buf1, uint32 fflags2, const byte *hdr,
const byte *buf2, int min_width_160) {
@@ -729,7 +675,7 @@ void Indeo3::decodeChunk(byte *cur, byte *ref, int width, int height,
break;
case 9:
- warning("Indeo3::decodeChunk: Untested (1)");
+ warning("Indeo3Decoder::decodeChunk: Untested (1)");
lv1 = *buf1++;
lv = (lv1 & 0x7F) << 1;
lv += (lv << 8);
@@ -906,7 +852,7 @@ void Indeo3::decodeChunk(byte *cur, byte *ref, int width, int height,
break;
case 9:
- warning("Indeo3::decodeChunk: Untested (2)");
+ warning("Indeo3Decoder::decodeChunk: Untested (2)");
lv1 = *buf1;
lv = (lv1 & 0x7F) << 1;
lv += (lv << 8);
@@ -1002,7 +948,7 @@ void Indeo3::decodeChunk(byte *cur, byte *ref, int width, int height,
break;
case 9:
- warning("Indeo3::decodeChunk: Untested (3)");
+ warning("Indeo3Decoder::decodeChunk: Untested (3)");
lv1 = *buf1;
lv = (lv1 & 0x7F) << 1;
lv += (lv << 8);
@@ -1099,7 +1045,7 @@ void Indeo3::decodeChunk(byte *cur, byte *ref, int width, int height,
break;
case 9:
- warning("Indeo3::decodeChunk: Untested (4)");
+ warning("Indeo3Decoder::decodeChunk: Untested (4)");
lv1 = *buf1++;
lv = (lv1 & 0x7F) << 1;
lv += (lv << 8);
@@ -1127,7 +1073,7 @@ void Indeo3::decodeChunk(byte *cur, byte *ref, int width, int height,
// FIXME: I've seen case 13 happen in Urban
// Runner. Perhaps it uses a more recent form of
// Indeo 3? There appears to have been several.
- warning("Indeo3::decodeChunk: Unknown case %d", k);
+ warning("Indeo3Decoder::decodeChunk: Unknown case %d", k);
return;
}
}
@@ -1157,15 +1103,15 @@ void Indeo3::decodeChunk(byte *cur, byte *ref, int width, int height,
// static data
-const int Indeo3::_corrector_type_0[24] = {
+const int Indeo3Decoder::_corrector_type_0[24] = {
195, 159, 133, 115, 101, 93, 87, 77,
195, 159, 133, 115, 101, 93, 87, 77,
128, 79, 79, 79, 79, 79, 79, 79
};
-const int Indeo3::_corrector_type_2[8] = { 9, 7, 6, 8, 5, 4, 3, 2 };
+const int Indeo3Decoder::_corrector_type_2[8] = { 9, 7, 6, 8, 5, 4, 3, 2 };
-const uint32 Indeo3::correction[] = {
+const uint32 Indeo3Decoder::correction[] = {
0x00000000, 0x00000202, 0xfffffdfe, 0x000002ff, 0xfffffd01, 0xffffff03, 0x000000fd, 0x00000404,
0xfffffbfc, 0x00000501, 0xfffffaff, 0x00000105, 0xfffffefb, 0x000003fc, 0xfffffc04, 0x000005fe,
0xfffffa02, 0xfffffe06, 0x000001fa, 0x00000904, 0xfffff6fc, 0x00000409, 0xfffffbf7, 0x00000909,
@@ -1937,7 +1883,7 @@ const uint32 Indeo3::correction[] = {
};
-const uint32 Indeo3::correctionloworder[] = {
+const uint32 Indeo3Decoder::correctionloworder[] = {
0x00000000, 0x02020202, 0xfdfdfdfe, 0x0302feff, 0xfcfd0101, 0xfeff0303, 0x0100fcfd, 0x04040404,
0xfbfbfbfc, 0x05050101, 0xfafafeff, 0x01010505, 0xfefefafb, 0x0403fbfc, 0xfbfc0404, 0x0605fdfe,
0xf9fa0202, 0xfdfe0606, 0x0201f9fa, 0x09090404, 0xf6f6fbfc, 0x04040909, 0xfbfbf6f7, 0x09090909,
@@ -2709,7 +2655,7 @@ const uint32 Indeo3::correctionloworder[] = {
};
-const uint32 Indeo3::correctionhighorder[] = {
+const uint32 Indeo3Decoder::correctionhighorder[] = {
0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef,
0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef,
0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef,
diff --git a/graphics/video/coktelvideo/indeo3.h b/graphics/video/codecs/indeo3.h
index af6ef26449..8d50b74b1e 100644
--- a/graphics/video/coktelvideo/indeo3.h
+++ b/graphics/video/codecs/indeo3.h
@@ -34,36 +34,28 @@
* written, produced, and directed by Alan Smithee
*/
-#ifndef GRAPHICS_VIDEO_INDEO3_H
-#define GRAPHICS_VIDEO_INDEO3_H
+#ifndef GRAPHICS_INDEO3_H
+#define GRAPHICS_INDEO3_H
-#include "common/stream.h"
+#include "graphics/video/codecs/codec.h"
namespace Graphics {
- class PaletteLUT;
- class SierraLight;
-}
-namespace Graphics {
-
-class Indeo3 {
+class Indeo3Decoder : public Codec {
public:
- enum DitherAlgorithm {
- kDitherNone = 0,
- kDitherSierraLight
- };
+ Indeo3Decoder(uint16 width, uint16 height);
+ ~Indeo3Decoder();
- Indeo3(int16 width, int16 height, Graphics::PaletteLUT *palLUT);
- ~Indeo3();
+ Surface *decodeImage(Common::SeekableReadStream *stream);
+ PixelFormat getPixelFormat() const;
static bool isIndeo3(byte *data, uint32 dataLen);
- void setDither(DitherAlgorithm dither);
+private:
+ Surface *_surface;
- bool decompressFrame(byte *inData, uint32 dataLen,
- byte *outData, uint16 width, uint16 height);
+ PixelFormat _pixelFormat;
-private:
static const int _corrector_type_0[24];
static const int _corrector_type_2[8];
static const uint32 correction[];
@@ -80,8 +72,6 @@ private:
uint16 uv_w, uv_h;
};
- int16 _width;
- int16 _height;
YUVBufs _iv_frame[2];
YUVBufs *_cur_frame;
YUVBufs *_ref_frame;
@@ -89,38 +79,16 @@ private:
byte *_ModPred;
uint16 *_corrector_type;
- Graphics::PaletteLUT *_palLUT;
-
- DitherAlgorithm _dither;
- Graphics::SierraLight *_ditherSL;
-
- struct BlitState {
- uint32 curX, curY;
- uint16 widthY, widthUV;
- uint16 heightY, heightUV;
- uint16 uwidthUV, uwidthOut;
- uint16 uheightUV, uheightOut;
- uint16 scaleWYUV, scaleWYOut;
- uint16 scaleHYUV, scaleHYOut;
- uint16 lineWidthOut, lineHeightOut;
- byte *bufY, *bufU, *bufV, *bufOut;
- };
-
void buildModPred();
void allocFrames();
void decodeChunk(byte *cur, byte *ref, int width, int height,
const byte *buf1, uint32 fflags2, const byte *hdr,
const byte *buf2, int min_width_160);
-
- void blitFrame(BlitState &s);
-
- void blitLine(BlitState &s);
- void blitLineDither(BlitState &s);
};
} // End of namespace Graphics
-#endif // GRAPHICS_VIDEO_INDEO3_H
+#endif // GRAPHICS_INDEO3_H
#endif // USE_INDEO3
diff --git a/graphics/video/coktelvideo/coktelvideo.cpp b/graphics/video/coktelvideo/coktelvideo.cpp
index 9ee9fd68d0..280431b5d5 100644
--- a/graphics/video/coktelvideo/coktelvideo.cpp
+++ b/graphics/video/coktelvideo/coktelvideo.cpp
@@ -31,11 +31,13 @@
#include "common/system.h"
#include "graphics/dither.h"
-#include "graphics/video/coktelvideo/indeo3.h"
+#include "graphics/video/codecs/indeo3.h"
#include "sound/audiostream.h"
#include "sound/decoders/raw.h"
+static const uint32 kVideoCodecIndeo3 = MKID_BE('iv32');
+
namespace Graphics {
PreImd::PreImd() {
@@ -1439,11 +1441,11 @@ bool Vmd::assessVideoProperties() {
_externalCodec = false;
if (_externalCodec) {
- if (_videoCodec == MKID_BE('iv32')) {
+ if (_videoCodec == kVideoCodecIndeo3) {
#ifdef USE_INDEO3
_features &= ~kFeaturesPalette;
_features |= kFeaturesFullColor;
- _codecIndeo3 = new Indeo3(_width, _height, _palLUT);
+ _codec = new Indeo3Decoder(_width, _height);
#else
warning("Vmd::assessVideoProperties(): Indeo3 decoder not compiled in");
#endif
@@ -1503,11 +1505,6 @@ bool Vmd::assessVideoProperties() {
}
}
-#ifdef USE_INDEO3
- if (_externalCodec && _codecIndeo3)
- _features |= kFeaturesSupportsDouble;
-#endif
-
return true;
}
@@ -1816,15 +1813,6 @@ void Vmd::setDoubleMode(bool doubleMode) {
}
-#ifdef USE_INDEO3
- if (_codecIndeo3) {
- delete _codecIndeo3;
-
- _codecIndeo3 = new Indeo3(_width * (doubleMode ? 2 : 1),
- _height * (doubleMode ? 2 : 1), _palLUT);
- }
-#endif
-
_doubleMode = doubleMode;
}
@@ -1870,10 +1858,6 @@ void Vmd::zeroData() {
_hasVideo = true;
_videoCodec = 0;
-#ifdef USE_INDEO3
- _codecIndeo3 = 0;
-#endif
-
_partsPerFrame = 0;
_frames = 0;
@@ -1886,6 +1870,8 @@ void Vmd::zeroData() {
_audioFormat = kAudioFormat8bitDirect;
_externalCodec = false;
+ _codec = 0;
+
_doubleMode = false;
_blitMode = 0;
_bytesPerPixel = 1;
@@ -1898,11 +1884,10 @@ void Vmd::zeroData() {
void Vmd::deleteData() {
Imd::deleteData();
-#ifdef USE_INDEO3
- delete _codecIndeo3;
-#endif
- delete[] _frames;
- delete[] _vidMemBuffer;
+ delete _codec;
+
+ delete[] _frames;
+ delete[] _vidMemBuffer;
}
void Vmd::clear() {
@@ -2158,38 +2143,39 @@ uint32 Vmd::renderFrame(int16 &left, int16 &top, int16 &right, int16 &bottom) {
uint8 type;
byte *dest = imdVidMem;
-#ifdef USE_INDEO3
- uint32 dataLen = _frameDataLen;
-
- if (Indeo3::isIndeo3(dataPtr, dataLen)) {
- if (!_codecIndeo3)
+ if (_externalCodec) {
+ if (!_codec)
return 0;
- if (!_codecIndeo3->decompressFrame(dataPtr, dataLen, _vidBuffer,
- width * (_doubleMode ? 2 : 1), height * (_doubleMode ? 2 : 1)))
+ if (_videoCodec == kVideoCodecIndeo3) {
+#ifndef USE_INDEO3
return 0;
+#else
+ if (!Indeo3Decoder::isIndeo3(dataPtr, _frameDataLen)) {
+ warning("Indeo3 data not indeo3");
+ return 0;
+ }
+#endif
+ }
+ Common::MemoryReadStream *dataStream = new Common::MemoryReadStream(dataPtr, _frameDataLen);
+ _codec->decodeImage(dataStream);
+
+ // TODO
+
+ /*
type = 2;
srcPtr = _vidBuffer;
width = _width * (_doubleMode ? 2 : 1);
height = _height * (_doubleMode ? 2 : 1);
right = left + width - 1;
bottom = top + height - 1;
+ */
- } else {
-
- if (_externalCodec) {
- warning("Unknown external codec");
- return 0;
- }
-
-#else
-
- if (_externalCodec) {
return 0;
- } else {
+ }
-#endif
+ if (!_externalCodec) {
type = *dataPtr++;
srcPtr = dataPtr;
diff --git a/graphics/video/coktelvideo/coktelvideo.h b/graphics/video/coktelvideo/coktelvideo.h
index f8b1965f41..91dbee99bf 100644
--- a/graphics/video/coktelvideo/coktelvideo.h
+++ b/graphics/video/coktelvideo/coktelvideo.h
@@ -41,9 +41,7 @@ namespace Audio {
namespace Graphics {
-#ifdef USE_INDEO3
-class Indeo3;
-#endif
+class Codec;
/** Common interface for handling Coktel Vision videos and derivated formats. */
class CoktelVideo {
@@ -530,7 +528,6 @@ protected:
AudioFormat _audioFormat;
// Video properties
- bool _externalCodec;
byte _blitMode;
byte _bytesPerPixel;
byte _preScaleX;
@@ -542,9 +539,8 @@ protected:
Graphics::PaletteLUT *_palLUT;
-#ifdef USE_INDEO3
- Indeo3 *_codecIndeo3;
-#endif
+ bool _externalCodec;
+ Codec *_codec;
void clear();
void zeroData();