aboutsummaryrefslogtreecommitdiff
path: root/graphics/video/coktelvideo/coktelvideo.cpp
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/coktelvideo/coktelvideo.cpp
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/coktelvideo/coktelvideo.cpp')
-rw-r--r--graphics/video/coktelvideo/coktelvideo.cpp76
1 files changed, 31 insertions, 45 deletions
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;