mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-13 12:39:56 +00:00
VIDEO: Allow for 8bpp Cinepak videos
svn-id: r54841
This commit is contained in:
parent
680b0d3172
commit
09abe6f151
@ -401,7 +401,7 @@ Codec *AviDecoder::createCodec() {
|
||||
case ID_RLE:
|
||||
return new MSRLEDecoder(_bmInfo.width, _bmInfo.height, _bmInfo.bitCount);
|
||||
case ID_CVID:
|
||||
return new CinepakDecoder();
|
||||
return new CinepakDecoder(_bmInfo.bitCount);
|
||||
#ifdef USE_INDEO3
|
||||
case ID_IV32:
|
||||
return new Indeo3Decoder(_bmInfo.width, _bmInfo.height);
|
||||
|
@ -39,17 +39,24 @@ inline static void CPYUV2RGB(byte y, byte u, byte v, byte &r, byte &g, byte &b)
|
||||
}
|
||||
|
||||
#define PUT_PIXEL(offset, lum, u, v) \
|
||||
CPYUV2RGB(lum, u, v, r, g, b); \
|
||||
if (_pixelFormat.bytesPerPixel == 2) \
|
||||
*((uint16 *)_curFrame.surface->pixels + offset) = _pixelFormat.RGBToColor(r, g, b); \
|
||||
else \
|
||||
*((uint32 *)_curFrame.surface->pixels + offset) = _pixelFormat.RGBToColor(r, g, b)
|
||||
if (_pixelFormat.bytesPerPixel != 1) { \
|
||||
CPYUV2RGB(lum, u, v, r, g, b); \
|
||||
if (_pixelFormat.bytesPerPixel == 2) \
|
||||
*((uint16 *)_curFrame.surface->pixels + offset) = _pixelFormat.RGBToColor(r, g, b); \
|
||||
else \
|
||||
*((uint32 *)_curFrame.surface->pixels + offset) = _pixelFormat.RGBToColor(r, g, b); \
|
||||
} else \
|
||||
*((byte *)_curFrame.surface->pixels + offset) = lum
|
||||
|
||||
CinepakDecoder::CinepakDecoder() : Codec() {
|
||||
CinepakDecoder::CinepakDecoder(int bitsPerPixel) : Codec() {
|
||||
_curFrame.surface = NULL;
|
||||
_curFrame.strips = NULL;
|
||||
_y = 0;
|
||||
_pixelFormat = g_system->getScreenFormat();
|
||||
|
||||
if (bitsPerPixel == 8)
|
||||
_pixelFormat = PixelFormat::createFormatCLUT8();
|
||||
else
|
||||
_pixelFormat = g_system->getScreenFormat();
|
||||
}
|
||||
|
||||
CinepakDecoder::~CinepakDecoder() {
|
||||
@ -181,8 +188,8 @@ void CinepakDecoder::loadCodebook(Common::SeekableReadStream *stream, uint16 str
|
||||
codebook[i].v = stream->readByte() + 128;
|
||||
} else {
|
||||
// This codebook type indicates either greyscale or
|
||||
// palettized video. We don't handle palettized video
|
||||
// currently.
|
||||
// palettized video. For greyscale, default us to
|
||||
// 128 for both u and v.
|
||||
codebook[i].u = 128;
|
||||
codebook[i].v = 128;
|
||||
}
|
||||
|
@ -61,7 +61,7 @@ struct CinepakFrame {
|
||||
|
||||
class CinepakDecoder : public Codec {
|
||||
public:
|
||||
CinepakDecoder();
|
||||
CinepakDecoder(int bitsPerPixel = 24);
|
||||
~CinepakDecoder();
|
||||
|
||||
Surface *decodeImage(Common::SeekableReadStream *stream);
|
||||
|
@ -161,7 +161,7 @@ void QuickTimeDecoder::rewind() {
|
||||
Codec *QuickTimeDecoder::createCodec(uint32 codecTag, byte bitsPerPixel) {
|
||||
if (codecTag == MKID_BE('cvid')) {
|
||||
// Cinepak: As used by most Myst and all Riven videos as well as some Myst ME videos. "The Chief" videos also use this.
|
||||
return new CinepakDecoder();
|
||||
return new CinepakDecoder(bitsPerPixel);
|
||||
} else if (codecTag == MKID_BE('rpza')) {
|
||||
// Apple Video ("Road Pizza"): Used by some Myst videos.
|
||||
return new RPZADecoder(getWidth(), getHeight());
|
||||
|
Loading…
Reference in New Issue
Block a user